From 19312a042d7656a83e972b8669f798807328713c Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 30 Apr 2018 20:36:29 +0200 Subject: [PATCH 01/99] start to a real cmake migration. This is a skeleton only so far. --- CMakeLists.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..8970d935 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,76 @@ +# - musrfit +cmake_minimum_required(VERSION 3.6) + +project(musrfit VERSION 1.3.0 LANGUAGES CXX) + +#--- musrfit specific options ------------------------------------------------------------------- +option(nexus "build optional NeXus support. Needed for ISIS" OFF) +option(ASlibs "build optional ASlibs" OFF) +option(BMWlibs "build optional BMWlibs" OFF) + +#--- check for all the needed packages ---------------------------------------------------------- + +#--- check for git ------------------------------------------------------------------------------ +find_package(Git REQUIRED) + +#--- check for ROOT ----------------------------------------------------------------------------- +find_package(ROOT 6.06 REQUIRED COMPONENTS MathMore Minuit2 XMLParser) +if (ROOT_mathmore_FOUND) + execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR) + string(STRIP ${ROOT_BINDIR} ROOT_BINDIR) + execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION) + string(STRIP ${ROOT_VERSION} ROOT_VERSION) + message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})") +endif (ROOT_mathmore_FOUND) + +#--- check for boost ---------------------------------------------------------------------------- +find_package(Boost REQUIRED) + +#--- check for gsl ------------------------------------------------------------------------------ +find_package(GSL REQUIRED) + +#--- check for fftw3 ---------------------------------------------------------------------------- +#[==[ // needs to be written by as35 +find_package(FFTW3 REQUIRED) +#]==] + +#--- check for libxml2 -------------------------------------------------------------------------- +find_package(LibXml2 REQUIRED) + +#--- check for OpenMP --------------------------------------------------------------------------- +find_package(OpenMP REQUIRED) + +#--- check for Qt ------------------------------------------------------------------------------- +# Find the QtCore library +find_package(Qt5Core) +# Find the QtWidgets library +find_package(Qt5Widgets) +# Find the QtXml library +find_package(Qt5Xml) + +# only temporarily needed for debug //as35 +if (Qt5Core_FOUND) + message("-- Found Qt5Core") +endif (Qt5Core_FOUND) +if (Qt5Widgets_FOUND) + message("-- Found Qt5Widgets") +endif (Qt5Widgets_FOUND) +if (Qt5Xml_FOUND) + message("-- Found Qt5Xml") +endif (Qt5Xml_FOUND) + +#--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------------------------- +if (nexus) + find_package(HDF5 REQUIRED) + find_package(HDF4 REQUIRED) + find_package(MXML REQUIRED) + find_package(NeXus REQUIRED) +endif (nexus) + +#--- check for Cuba lib if BMWlibs are enabled -------------------------------------------------- + +#[==[ +add_subdirectory(src) +#]==] + +#--- end --- From a9a8fb1bac84dea6096353e9d98a09fe39cc5214 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 2 May 2018 09:44:38 +0200 Subject: [PATCH 02/99] generate summary output --- CMakeLists.txt | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8970d935..ea1275c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ project(musrfit VERSION 1.3.0 LANGUAGES CXX) option(nexus "build optional NeXus support. Needed for ISIS" OFF) option(ASlibs "build optional ASlibs" OFF) option(BMWlibs "build optional BMWlibs" OFF) +option(BNMRlibs "build optional beta-NMR libs" OFF) #--- check for all the needed packages ---------------------------------------------------------- @@ -73,4 +74,107 @@ endif (nexus) add_subdirectory(src) #]==] +#--- write summary of the installation +message("") +message("|-----------------------------------------------------------------------|") +message("| |") +message("| Summary |") +message("| |") +message("|-----------------------------------------------------------------------|") +message("") +message(" System:") +message(" -------") +message("") +message(" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}") +message("") +message(" Requirements:") +message(" -------------") +message("") +message(" FFTW3 found in //as35 STILL MISSING") +message(" GSL found in ${GSL_INCLUDE_DIRS}") +message(" BOOST found in ${Boost_INCLUDE_DIRS}") +message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}") +message(" ROOT found in ${ROOT_INCLUDE_DIRS}") + +if (nexus) + message("") + message(" HDF4 found in ${HDF4_INCLUDE_DIRS}") + message(" HDF5 found in ${HDF5_INCLUDE_DIRS}") + message(" NeXus found in //as35 STILL MISSING") +endif (nexus) + +if (BMWlibs) + message("") + message(" CUBA found in //as35 STILL MISSING") +endif (BMWlibs) + +message("") +message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") +message("") +message(" Features:") +message(" ---------") +message("") +message(" Supported muSR file formates:") +message(" MusrRoot : yes") +message(" ROOT (LEM) : yes") +message(" MUD (triumf) : yes") +message(" PSI-BIN : yes") +message(" PSI-MDU : yes") +message(" WKM (deprecated) : yes") +if (nexus) + message(" NeXus : yes") +else (nexus) + message(" NeXus : no") +endif (nexus) + +message("") +message(" External user-function libraries:") +if (ASlibs) + message(" ASlibs : yes") +else (ASlibs) + message(" ASlibs : no") +endif (ASlibs) +if (BMWlibs) + message(" BMWlibs : yes") +else (BMWlibs) + message(" BMWlibs : no") +endif (BMWlibs) +if (BNMRlibs) + message(" BNMRlibs : yes") +else (BNMRlibs) + message(" BNMRlibs : no") +endif (BNMRlibs) + +message("") +message(" Qt5 base tools:") +if (Qt5Core_FOUND) + message(" musredit, musrStep, musrWiz, mupp : yes") +else (Qt5Core_FOUND) + message(" musredit, musrStep, musrWiz, mupp : no") +endif (Qt5Core_FOUND) +message("") +message(" Qt4 base tools (deprecated):") +if (Qt4Core_FOUND) + message(" musredit : yes") +else (Qt4Core_FOUND) + message(" musredit : no") +endif (Qt4Core_FOUND) +message("") +message(" Qt3 base tools (outdated):") +if (Qt3Core_FOUND) + message(" musredit : yes") +else (Qt3Core_FOUND) + message(" musredit : no") +endif (Qt3Core_FOUND) +message("") +message(" Installation directories:") +message(" -------------------------") +message("") +message(" Programs : ${CMAKE_INSTALL_PREFIX}/bin") +message(" XML configuration files : " $ENV{HOME} "/.musrfit") +message(" Documentation : ${CMAKE_INSTALL_PREFIX}/share/doc/musrfit") +message("") +message("-------------------------------------------------------------------------") +message("") + #--- end --- From 7d86a26bb7f137a6564b0dd6be8a2e39d1b7f3f7 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 2 May 2018 10:59:44 +0200 Subject: [PATCH 03/99] some more testing towards modern cmake. --- CMakeLists.txt | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea1275c0..eb04028b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ find_package(LibXml2 REQUIRED) find_package(OpenMP REQUIRED) #--- check for Qt ------------------------------------------------------------------------------- +# first try Qt5 # Find the QtCore library find_package(Qt5Core) # Find the QtWidgets library @@ -60,6 +61,18 @@ if (Qt5Xml_FOUND) message("-- Found Qt5Xml") endif (Qt5Xml_FOUND) +# if Qt5 is not found, try Qt4 +if (NOT Qt5Core_FOUND) + find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) + message("Qt4 found: ${Qt4_FOUND} //as35") +endif (NOT Qt5Core_FOUND) + +# if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point +if (NOT Qt4_FOUND AND NOT Qt5_FOUND) + find_package(Qt3) + message("Qt3 found: ${QT_FOUND} //as35") +endif (NOT Qt4_FOUND AND NOT Qt5_FOUND) + #--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------------------------- if (nexus) find_package(HDF5 REQUIRED) @@ -148,23 +161,23 @@ endif (BNMRlibs) message("") message(" Qt5 base tools:") if (Qt5Core_FOUND) - message(" musredit, musrStep, musrWiz, mupp : yes") + message(" musredit, musrStep, musrWiz, mupp : yes") else (Qt5Core_FOUND) - message(" musredit, musrStep, musrWiz, mupp : no") + message(" musredit, musrStep, musrWiz, mupp : no") endif (Qt5Core_FOUND) message("") message(" Qt4 base tools (deprecated):") -if (Qt4Core_FOUND) - message(" musredit : yes") -else (Qt4Core_FOUND) - message(" musredit : no") -endif (Qt4Core_FOUND) +if (Qt4_FOUND) + message(" musredit : yes") +else (Qt4_FOUND) + message(" musredit : no") +endif (Qt4_FOUND) message("") message(" Qt3 base tools (outdated):") if (Qt3Core_FOUND) - message(" musredit : yes") + message(" musrgui : yes") else (Qt3Core_FOUND) - message(" musredit : no") + message(" musrgui : no") endif (Qt3Core_FOUND) message("") message(" Installation directories:") From b2850d015c2446a2b4f12d05b2818e8a8bf7f4f1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 2 May 2018 13:24:54 +0200 Subject: [PATCH 04/99] added a musrfit cmd line flag which allows to check if NeXus support is enabled. --- src/musrfit.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/musrfit.cpp b/src/musrfit.cpp index 0aee41cd..52b05680 100644 --- a/src/musrfit.cpp +++ b/src/musrfit.cpp @@ -89,11 +89,13 @@ void musrfit_syntax() { cout << endl << "usage: musrfit [ [-k, --keep-mn2-ouput] [-c, --chisq-only] [-t, --title-from-data-file]"; cout << endl << " [-e, --estimateN0] [-p, --per-run-block-chisq]"; - cout << endl << " [--dump ] [--timeout ] | --version | --help"; + cout << endl << " [--dump ] [--timeout ] |"; + cout << endl << " --nexus-support | --version | --help"; cout << endl << " : msr input file"; cout << endl << " 'musrfit ' will execute musrfit"; cout << endl << " 'musrfit' or 'musrfit --help' will show this help"; cout << endl << " 'musrfit --version' will print the musrfit version"; + cout << endl << " 'musrfit --nexus-support' will print if NeXus support is available."; cout << endl << " -k, --keep-mn2-output: will rename the files MINUIT2.OUTPUT and "; cout << endl << " MINUIT2.root to -mn2.output and -mn2.root,"; cout << endl << " respectively,"; @@ -462,9 +464,14 @@ int main(int argc, char *argv[]) cout << endl << "musrfit git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return PMUSR_SUCCESS; - } - - if (!strcmp(argv[1], "--help")) { + } else if (!strcmp(argv[1], "--nexus-support")) { +#ifdef PNEXUS_ENABLED + cout << endl << ">> musrfit: NeXus support enabled." << endl << endl; +#else + cout << endl << ">> musrfit: NeXus support NOT enabled." << endl << endl; +#endif + return PMUSR_SUCCESS; + } else if (!strcmp(argv[1], "--help")) { show_syntax = true; } } From b840bd022be4f218e844f54ca7090da40a61d88e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 2 May 2018 14:39:50 +0200 Subject: [PATCH 05/99] allow to enable/disable Qt based tools. --- CMakeLists.txt | 88 +++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eb04028b..c4bc71fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ option(nexus "build optional NeXus support. Needed for ISIS" OFF) option(ASlibs "build optional ASlibs" OFF) option(BMWlibs "build optional BMWlibs" OFF) option(BNMRlibs "build optional beta-NMR libs" OFF) +option(qt_based_tools "try to install Qt based tools" ON) #--- check for all the needed packages ---------------------------------------------------------- @@ -42,36 +43,38 @@ find_package(LibXml2 REQUIRED) find_package(OpenMP REQUIRED) #--- check for Qt ------------------------------------------------------------------------------- -# first try Qt5 -# Find the QtCore library -find_package(Qt5Core) -# Find the QtWidgets library -find_package(Qt5Widgets) -# Find the QtXml library -find_package(Qt5Xml) +if (qt_based_tools) + # first try Qt5 + # Find the QtCore library + find_package(Qt5Core) + # Find the QtWidgets library + find_package(Qt5Widgets) + # Find the QtXml library + find_package(Qt5Xml) -# only temporarily needed for debug //as35 -if (Qt5Core_FOUND) - message("-- Found Qt5Core") -endif (Qt5Core_FOUND) -if (Qt5Widgets_FOUND) - message("-- Found Qt5Widgets") -endif (Qt5Widgets_FOUND) -if (Qt5Xml_FOUND) - message("-- Found Qt5Xml") -endif (Qt5Xml_FOUND) + # only temporarily needed for debug //as35 + if (Qt5Core_FOUND) + message("-- Found Qt5Core") + endif (Qt5Core_FOUND) + if (Qt5Widgets_FOUND) + message("-- Found Qt5Widgets") + endif (Qt5Widgets_FOUND) + if (Qt5Xml_FOUND) + message("-- Found Qt5Xml") + endif (Qt5Xml_FOUND) -# if Qt5 is not found, try Qt4 -if (NOT Qt5Core_FOUND) - find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) - message("Qt4 found: ${Qt4_FOUND} //as35") -endif (NOT Qt5Core_FOUND) + # if Qt5 is not found, try Qt4 + if (NOT Qt5Core_FOUND) + find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) + message("Qt4 found: ${Qt4_FOUND} //as35") + endif (NOT Qt5Core_FOUND) -# if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point -if (NOT Qt4_FOUND AND NOT Qt5_FOUND) - find_package(Qt3) - message("Qt3 found: ${QT_FOUND} //as35") -endif (NOT Qt4_FOUND AND NOT Qt5_FOUND) + # if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point + if (NOT Qt4_FOUND AND NOT Qt5_FOUND) + find_package(Qt3) + message("Qt3 found: ${QT_FOUND} //as35") + endif (NOT Qt4_FOUND AND NOT Qt5_FOUND) +endif (qt_based_tools) #--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------------------------- if (nexus) @@ -158,27 +161,30 @@ else (BNMRlibs) message(" BNMRlibs : no") endif (BNMRlibs) -message("") -message(" Qt5 base tools:") +if (qt_based_tools) if (Qt5Core_FOUND) + message("") + message(" Qt5 based tools:") message(" musredit, musrStep, musrWiz, mupp : yes") -else (Qt5Core_FOUND) - message(" musredit, musrStep, musrWiz, mupp : no") endif (Qt5Core_FOUND) -message("") -message(" Qt4 base tools (deprecated):") if (Qt4_FOUND) + message("") + message(" Qt4 based tools (deprecated):") message(" musredit : yes") -else (Qt4_FOUND) - message(" musredit : no") endif (Qt4_FOUND) -message("") -message(" Qt3 base tools (outdated):") -if (Qt3Core_FOUND) +if (QT_FOUND) + message("") + message(" Qt3 based tools (outdated):") message(" musrgui : yes") -else (Qt3Core_FOUND) - message(" musrgui : no") -endif (Qt3Core_FOUND) +endif (QT_FOUND) +if (NOT Qt5Core_FOUND AND NOT Qt4_FOUND AND NOT QT_FOUND) + message("") + message(" NO Qt based tools will be installed since Qt is not found or not installed on the system") +endif (NOT Qt5Core_FOUND AND NOT Qt4_FOUND AND NOT QT_FOUND) +else (qt_based_tools) + message("") + message(" Qt based tools (musredit, musrStep, musrWiz, mupp) have been disabled") +endif (qt_based_tools) message("") message(" Installation directories:") message(" -------------------------") From f7ccf79fa8b600a5185200b7553773e4e8869642 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 3 May 2018 15:29:13 +0200 Subject: [PATCH 06/99] some more work towards modern cmake --- CMakeLists.txt | 38 +++++++----------- cmake/FindFFTW3.cmake | 89 +++++++++++++++++++++++++++++++++++++++++++ cmake/FindMXML.cmake | 34 +++++++++++++++++ cmake/FindNeXus.cmake | 45 ++++++++++++++++++++++ 4 files changed, 182 insertions(+), 24 deletions(-) create mode 100644 cmake/FindFFTW3.cmake create mode 100644 cmake/FindMXML.cmake create mode 100644 cmake/FindNeXus.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c4bc71fb..46c8e888 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,9 @@ option(qt_based_tools "try to install Qt based tools" ON) #--- check for all the needed packages ---------------------------------------------------------- +#--- add path to my own find modules and other stuff +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + #--- check for git ------------------------------------------------------------------------------ find_package(Git REQUIRED) @@ -32,9 +35,7 @@ find_package(Boost REQUIRED) find_package(GSL REQUIRED) #--- check for fftw3 ---------------------------------------------------------------------------- -#[==[ // needs to be written by as35 find_package(FFTW3 REQUIRED) -#]==] #--- check for libxml2 -------------------------------------------------------------------------- find_package(LibXml2 REQUIRED) @@ -52,34 +53,23 @@ if (qt_based_tools) # Find the QtXml library find_package(Qt5Xml) - # only temporarily needed for debug //as35 - if (Qt5Core_FOUND) - message("-- Found Qt5Core") - endif (Qt5Core_FOUND) - if (Qt5Widgets_FOUND) - message("-- Found Qt5Widgets") - endif (Qt5Widgets_FOUND) - if (Qt5Xml_FOUND) - message("-- Found Qt5Xml") - endif (Qt5Xml_FOUND) - # if Qt5 is not found, try Qt4 if (NOT Qt5Core_FOUND) find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) - message("Qt4 found: ${Qt4_FOUND} //as35") endif (NOT Qt5Core_FOUND) # if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point - if (NOT Qt4_FOUND AND NOT Qt5_FOUND) - find_package(Qt3) - message("Qt3 found: ${QT_FOUND} //as35") - endif (NOT Qt4_FOUND AND NOT Qt5_FOUND) + if (NOT Qt5Core_FOUND) + if (NOT Qt4_FOUND) + find_package(Qt3) + endif (NOT Qt4_FOUND) + endif (NOT Qt5Core_FOUND) endif (qt_based_tools) #--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------------------------- if (nexus) - find_package(HDF5 REQUIRED) - find_package(HDF4 REQUIRED) + find_package(HDF5 COMPONENTS CXX REQUIRED ) +#//as35 - STILL NEEDED?? -> find_package(HDF4 REQUIRED) find_package(MXML REQUIRED) find_package(NeXus REQUIRED) endif (nexus) @@ -106,7 +96,7 @@ message("") message(" Requirements:") message(" -------------") message("") -message(" FFTW3 found in //as35 STILL MISSING") +message(" FFTW3 found in ${FFTW3_INCLUDE_DIR}") message(" GSL found in ${GSL_INCLUDE_DIRS}") message(" BOOST found in ${Boost_INCLUDE_DIRS}") message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}") @@ -114,9 +104,9 @@ message(" ROOT found in ${ROOT_INCLUDE_DIRS}") if (nexus) message("") - message(" HDF4 found in ${HDF4_INCLUDE_DIRS}") +#//as35 message(" HDF4 found in ${HDF4_INCLUDE_DIRS}") message(" HDF5 found in ${HDF5_INCLUDE_DIRS}") - message(" NeXus found in //as35 STILL MISSING") + message(" NeXus found in ${NEXUS_INCLUDE_DIR}") endif (nexus) if (BMWlibs) @@ -125,7 +115,7 @@ if (BMWlibs) endif (BMWlibs) message("") -message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") +message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") message("") message(" Features:") message(" ---------") diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake new file mode 100644 index 00000000..96c41b79 --- /dev/null +++ b/cmake/FindFFTW3.cmake @@ -0,0 +1,89 @@ +# - Find fftw3 library +# Find the native FFTW3 includes and library +# This module defines +# FFTW3_INCLUDE_DIR, where to find fftw3.h, etc. +# --- +# FFTW3_LIBRARY, library to link against to use FFTW3 +# FFTW3_OMP_LIBRARY, library to link against to use FFTW3_omp +# FFTW3_THREADS_LIBRARY, library to link against to use FFTW3_threads +# FFTW3_FOUND, if false, do not try to use FFTW3. +# --- +# FFTW3L_LIBRARY, library to link against to use FFTW3l +# FFTW3L_OMP_LIBRARY, library to link against to use FFTW3l_omp +# FFTW3L_THREADS_LIBRARY, library to link against to use FFTW3l_threads +# FFTW3L_FOUND, if false, do not try to use FFTW3l. +# --- +# FFTW3F_LIBRARY, library to link against to use FFTW3f +# FFTW3F_OMP_LIBRARY, library to link against to use FFTW3f_omp +# FFTW3F_THREADS_LIBRARY, library to link against to use FFTW3f_threads +# FFTW3F_FOUND, if false, do not try to use FFTW3f. +# --- +# FFTW3Q_LIBRARY, library to link against to use FFTW3q +# FFTW3Q_OMP_LIBRARY, library to link against to use FFTW3q_omp +# FFTW3Q_THREADS_LIBRARY, library to link against to use FFTW3q_threads +# FFTW3Q_FOUND, if false, do not try to use FFTW3q. + +find_path(FFTW3_INCLUDE_DIR fftw3.h + HINTS "/usr/include" "/opt/local/include" +) + +# find position of fftw3.h from the end +string(FIND "${FFTW3_INCLUDE_DIR}" "/fftw3.h" pos REVERSE) +# truncate the string +string(SUBSTRING "${FFTW3_INCLUDE_DIR}" 0 ${pos} substr) +set(FFTW3_INCLUDE_DIR ${substr}) +unset(substr) + +find_library(FFTW3_LIBRARY fftw3) +find_library(FFTW3_OMP_LIBRARY fftw3_omp) +find_library(FFTW3_THREAD_LIBRARY fftw3_threads) +find_library(FFTW3L_LIBRARY fftw3l) +find_library(FFTW3L_OMP_LIBRARY fftw3l_omp) +find_library(FFTW3L_THREAD_LIBRARY fftw3l_threads) +find_library(FFTW3F_LIBRARY fftw3f) +find_library(FFTW3F_OMP_LIBRARY fftw3f_omp) +find_library(FFTW3F_THREAD_LIBRARY fftw3f_threads) +find_library(FFTW3Q_LIBRARY fftw3q) +find_library(FFTW3Q_OMP_LIBRARY fftw3q_omp) +find_library(FFTW3Q_THREAD_LIBRARY fftw3q_threads) + +# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(FFTW3 + REQUIRED_VARS FFTW3_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3L + REQUIRED_VARS FFTW3L_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3F + REQUIRED_VARS FFTW3F_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3Q + REQUIRED_VARS FFTW3Q_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") + +if (NOT FFTW3_FOUND) + unset(FFTW3_LIBRARY) +endif() +if (NOT FFTW3L_FOUND) + unset(FFTW3L_LIBRARY) +endif() +if (NOT FFTW3F_FOUND) + unset(FFTW3F_LIBRARY) +endif() +if (NOT FFTW3Q_FOUND) + unset(FFTW3Q_LIBRARY) +endif() + +mark_as_advanced( + FFTW3_INCLUDE_DIR + FFTW3_LIBRARY FFTW3_OMP_LIBRARY FFTW3_THREAD_LIBRARY + FFTW3L_LIBRARY FFTW3L_OMP_LIBRARY FFTW3L_THREAD_LIBRARY + FFTW3F_LIBRARY FFTW3F_OMP_LIBRARY FFTW3F_THREAD_LIBRARY + FFTW3Q_LIBRARY FFTW3Q_OMP_LIBRARY FFTW3Q_THREAD_LIBRARY +) + +if (FFTW3_FOUND) + message("-- Found FFTW3: ${FFTW3_INCLUDE_DIR}") +endif (FFTW3_FOUND) diff --git a/cmake/FindMXML.cmake b/cmake/FindMXML.cmake new file mode 100644 index 00000000..e11a62fe --- /dev/null +++ b/cmake/FindMXML.cmake @@ -0,0 +1,34 @@ +# - find MXML +# find the MXML lib and includes +# This module defines +# LIBMXML_INCLUDE_DIR, where to find mxml.h +# LIBMXML_LIBRARY, library to link against +# LIBMXML_FOUND, if false, do not try to use the MXML lib + +find_path(LIBMXML_INCLUDE_DIR mxml.h + HINT "/usr/include" +) +# find position of mxml.h from the end +string(FIND "${LIBMXML_INCLUDE_DIR}" "/mxml.h" pos REVERSE) +# truncate the string +string(SUBSTRING "${LIBMXML_INCLUDE_DIR}" 0 ${pos} substr) +set(LIBMXML_INCLUDE_DIR ${substr}) +unset(substr) + +find_library(LIBMXML_LIBRARY mxml) + +# get version string +# currently do not know from where to get it automatically + +# handle the QUIETLY and REQUIRED arguments and set LIBMXML_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(MXML + REQUIRED_VARS LIBMXML_LIBRARY LIBMXML_INCLUDE_DIR) + +if (NOT LIBMXML_FOUND) + unset(LIBMXML_LIBRARY) +endif() + +mark_as_advanced(LIBMXML_INCLUDE_DIR LIBMXML_LIBRARY) + diff --git a/cmake/FindNeXus.cmake b/cmake/FindNeXus.cmake new file mode 100644 index 00000000..dca59b4a --- /dev/null +++ b/cmake/FindNeXus.cmake @@ -0,0 +1,45 @@ +# - Find NeXus library +# Find the native NEXUS includes and library +# This module defines +# NEXUS_INCLUDE_DIR, where to find NeXus.h, etc. +# NEXUS_LIBRARY, library to link against to use NEXUS +# NEXUS_FOUND, if false, do not try to use NEXUS. + +find_path(NEXUS_INCLUDE_DIR napi.h + HINTS "/usr/local/include" "/opt/nexus/include" "/usr/local/include/nexus" +) +# find position of napi.h from the end +string(FIND "${NEXUS_INCLUDE_DIR}" "/napi.h" pos REVERSE) +# truncate the string +string(SUBSTRING "${NEXUS_INCLUDE_DIR}" 0 ${pos} substr) +set(NEXUS_INCLUDE_DIR ${substr}) +unset(substr) + +find_library(NEXUS_LIBRARY NeXus + HINTS "/usr/lib" "/usr/lib64" "/usr/local/lib" "/usr/local/lib64" "/opt/nexus/lib") + +# get version string +if (NEXUS_INCLUDE_DIR AND EXISTS ${NEXUS_INCLUDE_DIR}/napi.h) + file(STRINGS "${NEXUS_INCLUDE_DIR}/napi.h" NEXUS_version_str + REGEX "^#define[\t ]+NEXUS_VERSION[\t ].*") + + string(REGEX REPLACE "^#define[\t ]+NEXUS_VERSION[\t ]+\"([^\"]*).*" + "\\1" NEXUS_VERSION_STRING "${NEXUS_version_str}") + unset(NEXUS_version_str) +endif() + +# handle the QUIETLY and REQUIRED arguments and set NEXUS_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(NEXUS + REQUIRED_VARS NEXUS_LIBRARY NEXUS_INCLUDE_DIR + VERSION_VAR NEXUS_VERSION_STRING) + +if (NOT NEXUS_FOUND) + unset(NEXUS_LIBRARY) +endif() + +mark_as_advanced(NEXUS_INCLUDE_DIR NEXUS_LIBRARY) + + + From 83984c1ef5dad7dbddd4ebff898a932c5172d4bb Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 12:51:57 +0200 Subject: [PATCH 07/99] start populating the sub-dirs with the necessary cmake files. --- CMakeLists.txt | 36 +++++++------- src/CMakeLists.txt | 27 +++++++++++ src/external/CMakeLists.txt | 28 +++++++++++ src/external/MuSR_software/CMakeLists.txt | 1 + .../Class_MuSR_PSI/CMakeLists.txt | 25 ++++++++++ src/external/MusrRoot/CMakeLists.txt | 43 +++++++++++++++++ src/external/TLemRunHeader/CMakeLists.txt | 48 +++++++++++++++++++ src/external/mud/CMakeLists.txt | 1 + src/external/mud/src/CMakeLists.txt | 33 +++++++++++++ 9 files changed, 225 insertions(+), 17 deletions(-) create mode 100644 src/CMakeLists.txt create mode 100644 src/external/CMakeLists.txt create mode 100644 src/external/MuSR_software/CMakeLists.txt create mode 100644 src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt create mode 100644 src/external/MusrRoot/CMakeLists.txt create mode 100644 src/external/TLemRunHeader/CMakeLists.txt create mode 100644 src/external/mud/CMakeLists.txt create mode 100644 src/external/mud/src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 46c8e888..895ac15e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,24 @@ # - musrfit cmake_minimum_required(VERSION 3.6) -project(musrfit VERSION 1.3.0 LANGUAGES CXX) +project(musrfit VERSION 1.3.0 LANGUAGES C CXX) -#--- musrfit specific options ------------------------------------------------------------------- +#--- musrfit specific options ------------------------------------------------- option(nexus "build optional NeXus support. Needed for ISIS" OFF) option(ASlibs "build optional ASlibs" OFF) option(BMWlibs "build optional BMWlibs" OFF) option(BNMRlibs "build optional beta-NMR libs" OFF) -option(qt_based_tools "try to install Qt based tools" ON) +option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON) -#--- check for all the needed packages ---------------------------------------------------------- +#--- check for all the needed packages ---------------------------------------- #--- add path to my own find modules and other stuff set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -#--- check for git ------------------------------------------------------------------------------ +#--- check for git ------------------------------------------------------------ find_package(Git REQUIRED) -#--- check for ROOT ----------------------------------------------------------------------------- +#--- check for ROOT ----------------------------------------------------------- find_package(ROOT 6.06 REQUIRED COMPONENTS MathMore Minuit2 XMLParser) if (ROOT_mathmore_FOUND) execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR) @@ -26,24 +26,26 @@ if (ROOT_mathmore_FOUND) execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION) string(STRIP ${ROOT_VERSION} ROOT_VERSION) message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})") + #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) + include(${ROOT_USE_FILE}) endif (ROOT_mathmore_FOUND) -#--- check for boost ---------------------------------------------------------------------------- +#--- check for boost ---------------------------------------------------------- find_package(Boost REQUIRED) -#--- check for gsl ------------------------------------------------------------------------------ +#--- check for gsl ------------------------------------------------------------ find_package(GSL REQUIRED) -#--- check for fftw3 ---------------------------------------------------------------------------- +#--- check for fftw3 ---------------------------------------------------------- find_package(FFTW3 REQUIRED) -#--- check for libxml2 -------------------------------------------------------------------------- +#--- check for libxml2 -------------------------------------------------------- find_package(LibXml2 REQUIRED) -#--- check for OpenMP --------------------------------------------------------------------------- +#--- check for OpenMP --------------------------------------------------------- find_package(OpenMP REQUIRED) -#--- check for Qt ------------------------------------------------------------------------------- +#--- check for Qt ------------------------------------------------------------- if (qt_based_tools) # first try Qt5 # Find the QtCore library @@ -66,7 +68,7 @@ if (qt_based_tools) endif (NOT Qt5Core_FOUND) endif (qt_based_tools) -#--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------------------------- +#--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------- if (nexus) find_package(HDF5 COMPONENTS CXX REQUIRED ) #//as35 - STILL NEEDED?? -> find_package(HDF4 REQUIRED) @@ -74,11 +76,11 @@ if (nexus) find_package(NeXus REQUIRED) endif (nexus) -#--- check for Cuba lib if BMWlibs are enabled -------------------------------------------------- +#--- check for Cuba lib if BMWlibs are enabled -------------------------------- +#//as35 probably always stick to the internal one ... -#[==[ +#--- propagate to the sub-directories ----------------------------------------- add_subdirectory(src) -#]==] #--- write summary of the installation message("") @@ -186,4 +188,4 @@ message("") message("-------------------------------------------------------------------------") message("") -#--- end --- +#--- end ---------------------------------------------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..71a0ff05 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,27 @@ +#--- add further sub-directories ---------------------------------------------- +#[==[ +add_subdirectory(classes) +#]==] +add_subdirectory(external) +#[==[ +if (Qt5Core_FOUND OR Qt4_FOUND) + add_subdirectory(musredit) +endif (Qt5Core_FOUND OR Qt4_FOUND) +if (QT_FOUND) + add_subdirectory(musrgui) +endif (QT_FOUND) +#]==] + +#--- define the musrfit libs -------------------------------------------------- +#[==[ +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} mud) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TMusrRunHeader) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TLemRunHeader) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} Class_MuSR_PSI) +if (nexus) + set(MUSRFIT_LIBS ${MUSRFIT_LIBS} ${LIBNEXUS_LIBRARY}) + set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PNeXus) +endif (nexus) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PMusr) +#]==] + diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt new file mode 100644 index 00000000..c2e7379b --- /dev/null +++ b/src/external/CMakeLists.txt @@ -0,0 +1,28 @@ +#[==[ +if (ASlibs) + add_subdirectory(Nonlocal) + add_subdirectory(MagProximity) + add_subdirectory(libPhotoMeissner) + add_subdirectory(libSpinValve) +endif (ASlibs) + +if (BMWlibs) + add_subdirectory(libCuba) + add_subdirectory(BMWtools) + add_subdirectory(libCalcMeanFieldsLEM) + add_subdirectory(libFitPofB) + add_subdirectory(libGapIntegrals) + add_subdirectory(libLFRelaxation) + add_subdirectory(libZFRelaxation) +endif (BMWlibs) +#]==] + +add_subdirectory(mud) +add_subdirectory(MusrRoot) +add_subdirectory(TLemRunHeader) +add_subdirectory(MuSR_software) + +if (nexus) + add_subdirectory(nexus) +endif (nexus) + diff --git a/src/external/MuSR_software/CMakeLists.txt b/src/external/MuSR_software/CMakeLists.txt new file mode 100644 index 00000000..a89f84df --- /dev/null +++ b/src/external/MuSR_software/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(Class_MuSR_PSI) diff --git a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt new file mode 100644 index 00000000..122feb9b --- /dev/null +++ b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt @@ -0,0 +1,25 @@ +# - Class_MuSR_PSI library ---------------------------------------------------- + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(PSIBIN_VERSION "0.1.0") +set(PSIBIN_LIBRARY_NAME "Class_MuSR_PSI") +configure_file("Class_MuSR_PSI.pc.in" "Class_MuSR_PSI.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(Class_MuSR_PSI SHARED MuSR_td_PSI_bin.cpp) + +#--- install Class_MuSR_PSI solib --------------------------------------------- +install(TARGETS Class_MuSR_PSI DESTINATION lib) + +#--- install MuSR_td_PSI_bin header ------------------------------------------- +install(FILES MuSR_td_PSI_bin.h DESTINATION include) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/Class_MuSR_PSI.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/MusrRoot/CMakeLists.txt b/src/external/MusrRoot/CMakeLists.txt new file mode 100644 index 00000000..250786fe --- /dev/null +++ b/src/external/MusrRoot/CMakeLists.txt @@ -0,0 +1,43 @@ +# - TMusrRunHeader library ---------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +root_generate_dictionary( + TMusrRunHeaderDict TMusrRunHeader.h LINKDEF TMusrRunHeaderLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(MUSR_ROOT_VERSION "1.0.0") +set(MUSR_ROOT_LIBRARY_NAME "TMusrRunHeader") +configure_file("TMusrRunHeader.pc.in" "TMusrRunHeader.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(TMusrRunHeader SHARED + TMusrRunHeader.cpp + TMusrRunHeaderDict.cxx +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES}) + +#--- install TMusrRunHeader solib --------------------------------------------- +install(TARGETS TMusrRunHeader DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTMusrRunHeaderDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTMusrRunHeaderDict.rootmap + DESTINATION lib +) + +#--- install TMusrRunHeader header -------------------------------------------- +install(FILES TMusrRunHeader.h DESTINATION include) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/TMusrRunHeader.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt new file mode 100644 index 00000000..afd47f93 --- /dev/null +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -0,0 +1,48 @@ +# -TLemRunHeader library ------------------------------------------------------ + +#--- generate necessary dictionaries ------------------------------------------ +root_generate_dictionary( + TLemRunHeaderDict TLemRunHeader.h LINKDEF TLemRunHeaderLinkDef.h +) +root_generate_dictionary( + TLemStatsDict TLemStats.h LINKDEF TLemStatsLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(LEM_VERSION "1.5.0") +set(LEM_LIBRARY_NAME "TLemRunHeader") +configure_file("TLemRunHeader.pc.in" "TLemRunHeader.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(TLemRunHeader SHARED + TLemRunHeader.cxx + TLemRunHeaderDict.cxx + TLemStats.cxx + TLemStatsDict.cxx +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(TLemRunHeader ${ROOT_LIBRARIES}) + +#--- install TLemRunHeader solib ---------------------------------------------- +install(TARGETS TLemRunHeader DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict.rootmap + DESTINATION lib +) + +#--- install headers ---------------------------------------------------------- +install(FILES TLemRunHeader.h TLemStats.h DESTINATION include) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/TLemRunHeader.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/mud/CMakeLists.txt b/src/external/mud/CMakeLists.txt new file mode 100644 index 00000000..febd4f0a --- /dev/null +++ b/src/external/mud/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(src) diff --git a/src/external/mud/src/CMakeLists.txt b/src/external/mud/src/CMakeLists.txt new file mode 100644 index 00000000..572c6754 --- /dev/null +++ b/src/external/mud/src/CMakeLists.txt @@ -0,0 +1,33 @@ +# - mud library --------------------------------------------------------------- + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(MUD_VERSION "1.0.0") +set(MUD_LIBRARY_NAME "mud") +configure_file("mud.pc.in" "mud.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(mud SHARED + mud_all.c + mud.c + mud_encode.c + mud_friendly.c + mud_gen.c + mud_new.c + mud_tri_ti.c +) + +#--- install mud solib -------------------------------------------------------- +install(TARGETS mud DESTINATION lib) + +#--- install mud header ------------------------------------------------------- +install(FILES mud.h DESTINATION include) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/mud.pc + DESTINATION lib/pkgconfig +) From 60893f8df4b1f02d6df51510be8b4765b97989f2 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 16:23:45 +0200 Subject: [PATCH 08/99] push cmake further. --- src/CMakeLists.txt | 36 +++++++++-- src/classes/CMakeLists.txt | 124 +++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 src/classes/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 71a0ff05..5e9aaa6e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,5 @@ #--- add further sub-directories ---------------------------------------------- -#[==[ add_subdirectory(classes) -#]==] add_subdirectory(external) #[==[ if (Qt5Core_FOUND OR Qt4_FOUND) @@ -13,15 +11,43 @@ endif (QT_FOUND) #]==] #--- define the musrfit libs -------------------------------------------------- -#[==[ set(MUSRFIT_LIBS ${MUSRFIT_LIBS} mud) set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TMusrRunHeader) set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TLemRunHeader) set(MUSRFIT_LIBS ${MUSRFIT_LIBS} Class_MuSR_PSI) if (nexus) - set(MUSRFIT_LIBS ${MUSRFIT_LIBS} ${LIBNEXUS_LIBRARY}) + set(MUSRFIT_LIBS ${MUSRFIT_LIBS} ${NEXUS_LIBRARY}) set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PNeXus) endif (nexus) set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PMusr) -#]==] + +#--- start create git-revision.h ---------------------------------------------- +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/configure_musrfit_version_file.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + @ONLY +) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h + COMMAND ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + ${CMAKE_SOURCE_DIR}/cmake/git-revision.h.in + COMMENT "Configuring git-revision.h" + VERBATIM +) + +add_custom_target( + configure_musrfit_version ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h +) +#--- end create git-revision.h ------------------------------------------------ + +#--- add all executables ------------------------------------------------------ +message("debug> ${CMAKE_BINARY_DIR}") +add_executable(any2many git-revision.h any2many.cpp) +target_include_directories(any2many BEFORE PRIVATE $) +target_link_libraries(any2many ${ROOT_LIBRARIES} ${FFTW3_LIBRARY} ${MUSRFIT_LIBS}) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt new file mode 100644 index 00000000..5812d537 --- /dev/null +++ b/src/classes/CMakeLists.txt @@ -0,0 +1,124 @@ +#--- build the PMusr and PUserFcnBase libs ------------------------------------ + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +root_generate_dictionary( + PFourierCanvasDict ${MUSRFIT_INC}/PFourierCanvas.h LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h +) +root_generate_dictionary( + PMusrCanvasDict ${MUSRFIT_INC}/PMusrCanvas.h LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h +) +root_generate_dictionary( + PMusrT0Dict ${MUSRFIT_INC}/PMusrT0.h LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h +) +root_generate_dictionary( + PStartupHandlerDict ${MUSRFIT_INC}/PStartupHandler.h LINKDEF ${MUSRFIT_INC}/PStartupHandlerLinkDef.h +) +root_generate_dictionary( + PUserFcnBaseDict ${MUSRFIT_INC}/PUserFcnBase.h LINKDEF ${MUSRFIT_INC}/PUserFcnBaseLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(MUSR_VERSION "1.2.0") +set(MUSR_LIBRARY_NAME "PMusr") +configure_file("PMusr.pc.in" "PMusr.pc" @ONLY) +set(USERFCN_LIBRARY_NAME "PUserFcnBase") +configure_file("PUserFcnBase.pc.in" "PUserFcnBase.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PMusr SHARED + PFitter.cpp + PFitterFcn.cpp + PFourier.cpp + PFourierCanvas.cpp + PFourierCanvasDict.cxx + PMusrCanvas.cpp + PMusrCanvasDict.cxx + PFunction.cpp + PFunctionHandler.cpp + PMsr2Data.cpp + PMsrHandler.cpp + PMusrCanvas.cpp + PMusrCanvasDict.cxx + PMusr.cpp + PMusrT0.cpp + PMusrT0Dict.cxx + PRunAsymmetry.cpp + PRunBase.cpp + PRunDataHandler.cpp + PRunListCollection.cpp + PRunMuMinus.cpp + PRunNonMusr.cpp + PRunSingleHisto.cpp + PStartupHandler.cpp + PStartupHandlerDict.cxx + PTheory.cpp +) + +add_library(PUserFcnBase SHARED + PUserFcnBase.cpp + PUserFcnBaseDict.cxx +) + +#--- add library dependencies ------------------------------------------------- +set(DependOnLibs ${ROOT_LIBARIES}) +set(DependOnLibs ${DependOnLibs} ${FFTW3_LIBRARY}) +set(DependOnLibs ${DependOnLibs} PUserFcnBase) +set(DependOnLibs ${DependOnLibs} mud) +set(DependOnLibs ${DependOnLibs} TMusrRunHeader) +set(DependOnLibs ${DependOnLibs} TLemRunHeader) +set(DependOnLibs ${DependOnLibs} Class_MuSR_PSI) +if (nexus) + set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY}) + set(DependOnLibs ${DependOnLibs} PNeXus) +endif (nexus) + +target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES}) +target_link_libraries(PMusr ${DependOnLibs}) + +#--- install PUserFcnBase solib ----------------------------------------------- +install(TARGETS PUserFcnBase DESTINATION lib) + +#--- install PMusr solib ------------------------------------------------------ +install(TARGETS PMusr DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict.rootmap + DESTINATION lib +) + +#--- install headers ---------------------------------------------------------- +#--- only install headers needed for classes with dictionary +install( + FILES ${MUSRFIT_INC}/PFourierCanvas.h + ${MUSRFIT_INC}/PFourier.h + ${MUSRFIT_INC}/PMusrCanvas.h + ${MUSRFIT_INC}/PMusr.h + ${MUSRFIT_INC}/PMusrT0.h + ${MUSRFIT_INC}/PRunListCollection.h + ${MUSRFIT_INC}/PStartupHandler.h + ${MUSRFIT_INC}/PUserFcnBase.h + DESTINATION include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PUserFcnBase.pc + ${CMAKE_CURRENT_BINARY_DIR}/PMusr.pc + DESTINATION lib/pkgconfig +) + From 404683b15f7d5ebc7fa83fc7c0f23ee8e309e572 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 17:05:20 +0200 Subject: [PATCH 09/99] more work towards modern cmake. --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 64 ++++++++++++++++++++++++++++++++++++-- src/classes/CMakeLists.txt | 3 ++ 3 files changed, 66 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 895ac15e..7b33d0db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package(Git REQUIRED) #--- check for ROOT ----------------------------------------------------------- -find_package(ROOT 6.06 REQUIRED COMPONENTS MathMore Minuit2 XMLParser) +find_package(ROOT 6.06 REQUIRED COMPONENTS Gui MathMore Minuit2 XMLParser) if (ROOT_mathmore_FOUND) execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR) string(STRIP ${ROOT_BINDIR} ROOT_BINDIR) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e9aaa6e..d81c706e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,8 +46,68 @@ add_custom_target( #--- end create git-revision.h ------------------------------------------------ #--- add all executables ------------------------------------------------------ -message("debug> ${CMAKE_BINARY_DIR}") add_executable(any2many git-revision.h any2many.cpp) target_include_directories(any2many BEFORE PRIVATE $) -target_link_libraries(any2many ${ROOT_LIBRARIES} ${FFTW3_LIBRARY} ${MUSRFIT_LIBS}) +target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(dump_header git-revision.h dump_header.cpp) +target_include_directories(dump_header BEFORE PRIVATE $) +target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(msr2data git-revision.h msr2data.cpp) +target_include_directories(msr2data BEFORE PRIVATE $) +target_link_libraries(msr2data ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(msr2msr msr2msr.cpp) +target_link_libraries(msr2msr ${ROOT_LIBRARIES}) + +add_executable(musrfit git-revision.h musrfit.cpp) +target_include_directories(musrfit BEFORE PRIVATE $) +target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrFT git-revision.h musrFT.cpp) +target_include_directories(musrFT BEFORE PRIVATE $) +target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrRootValidation git-revision.h musrRootValidation.cpp) +target_include_directories(musrRootValidation + BEFORE PRIVATE + $ + $ +) +target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) + +add_executable(musrt0 git-revision.h musrt0.cpp) +target_include_directories(musrt0 BEFORE PRIVATE $) +target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrview git-revision.h musrview.cpp) +target_include_directories(musrview BEFORE PRIVATE $) +target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp) +target_include_directories(write_musrRoot_runHeader + BEFORE PRIVATE + $ + $ +) +target_link_libraries(write_musrRoot_runHeader ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + any2many + dump_header + msr2data + msr2msr + musrfit + musrFT + musrRootValidation + musrt0 + musrview + write_musrRoot_runHeader + RUNTIME DESTINATION + bin +) + diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 5812d537..66388f80 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -47,13 +47,16 @@ add_library(PMusr SHARED PMusr.cpp PMusrT0.cpp PMusrT0Dict.cxx + PPrepFourier.cpp PRunAsymmetry.cpp + PRunAsymmetryRRF.cpp PRunBase.cpp PRunDataHandler.cpp PRunListCollection.cpp PRunMuMinus.cpp PRunNonMusr.cpp PRunSingleHisto.cpp + PRunSingleHistoRRF.cpp PStartupHandler.cpp PStartupHandlerDict.cxx PTheory.cpp From 21ccdad4601b74bd928721206ef365975627d39d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 18:18:01 +0200 Subject: [PATCH 10/99] added a missing CMakeLists.txt file. --- src/external/nexus/CMakeLists.txt | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/external/nexus/CMakeLists.txt diff --git a/src/external/nexus/CMakeLists.txt b/src/external/nexus/CMakeLists.txt new file mode 100644 index 00000000..bdb25cd9 --- /dev/null +++ b/src/external/nexus/CMakeLists.txt @@ -0,0 +1,32 @@ +# - PNeXus library ------------------------------------------------------------ + +include_directories(${NEXUS_INCLUDE_DIR}) # to get the nexus headers + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(PNEXUS_VERSION "0.9.0") +set(PNEXUS_LIBRARY_NAME "PNeXus") +configure_file("PNeXus.pc.in" "PNeXus.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PNeXus SHARED + PNeXus.cpp +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(PNeXus ${NEXUS_LIBRARY}) + +#--- install PNeXus solib ----------------------------------------------------- +install(TARGETS PNeXus DESTINATION lib) + +#--- install PNeXus header ---------------------------------------------------- +install(FILES PNeXus.h DESTINATION include) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PNeXus.pc + DESTINATION lib/pkgconfig +) From 258def542f7c9b349be26aab887975824f15eafb Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 18:20:28 +0200 Subject: [PATCH 11/99] added missing files needed to get git revision. --- cmake/configure_musrfit_version_file.cmake.in | 30 +++++++++++++++++++ cmake/git-revision.h.in | 8 +++++ 2 files changed, 38 insertions(+) create mode 100644 cmake/configure_musrfit_version_file.cmake.in create mode 100644 cmake/git-revision.h.in diff --git a/cmake/configure_musrfit_version_file.cmake.in b/cmake/configure_musrfit_version_file.cmake.in new file mode 100644 index 00000000..48c913d6 --- /dev/null +++ b/cmake/configure_musrfit_version_file.cmake.in @@ -0,0 +1,30 @@ +# configure_musrfit_version_file.cmake.in: +set(SRC_DIR "@CMAKE_SOURCE_DIR@") +set(BIN_DIR "@CMAKE_CURRENT_BINARY_DIR@") + +# Set variables +set(CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@") +set(MUSRFIT_VERSION "@MUSRFIT_VERSION@") + +# Get the current working branch +execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get the latest abbreviated commit hash of the working branch +execute_process( + COMMAND git log -1 --pretty="%h, %ci" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_CURRENT_SHA1 + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +configure_file( + ${SRC_DIR}/cmake/git-revision.h.in + ${BIN_DIR}/git-revision.h + @ONLY +) +# EOF diff --git a/cmake/git-revision.h.in b/cmake/git-revision.h.in new file mode 100644 index 00000000..5d676b3a --- /dev/null +++ b/cmake/git-revision.h.in @@ -0,0 +1,8 @@ +#ifndef GIT_VERSION_H +#define GIT_VERSION_H + +#define GIT_BRANCH "@GIT_BRANCH@" +#define GIT_CURRENT_SHA1 @GIT_CURRENT_SHA1@ + +#endif // GIT_VERSION_H + From a5669569d805bd6600130c291ceb60df963741e7 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 19:33:10 +0200 Subject: [PATCH 12/99] removed unneeded header file. --- src/classes/PRunBase.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/classes/PRunBase.cpp b/src/classes/PRunBase.cpp index ffa15c86..654ca198 100644 --- a/src/classes/PRunBase.cpp +++ b/src/classes/PRunBase.cpp @@ -34,11 +34,8 @@ #include #include #include -//#include #include -#include "TLemRunHeader.h" - #include "PRunBase.h" //-------------------------------------------------------------------------- From 89fbdff40a30131b27f2b1e8f09bbc1c89fe7c26 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 19:41:16 +0200 Subject: [PATCH 13/99] make sure that the proper header files are used for the build in case musrfit is already installed. --- src/CMakeLists.txt | 61 ++++++++++++++++++----- src/classes/CMakeLists.txt | 14 ++++++ src/external/MusrRoot/CMakeLists.txt | 4 ++ src/external/TLemRunHeader/CMakeLists.txt | 4 ++ src/external/nexus/CMakeLists.txt | 4 ++ 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d81c706e..e6b3badd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -47,49 +47,84 @@ add_custom_target( #--- add all executables ------------------------------------------------------ add_executable(any2many git-revision.h any2many.cpp) -target_include_directories(any2many BEFORE PRIVATE $) +target_include_directories(any2many + BEFORE PRIVATE + $ + $ +) target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(dump_header git-revision.h dump_header.cpp) -target_include_directories(dump_header BEFORE PRIVATE $) +target_include_directories(dump_header + BEFORE PRIVATE + $ + $ + $ + $ + $ + $ +) target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(msr2data git-revision.h msr2data.cpp) -target_include_directories(msr2data BEFORE PRIVATE $) +target_include_directories(msr2data + BEFORE PRIVATE + $ + $ +) target_link_libraries(msr2data ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(msr2msr msr2msr.cpp) target_link_libraries(msr2msr ${ROOT_LIBRARIES}) add_executable(musrfit git-revision.h musrfit.cpp) -target_include_directories(musrfit BEFORE PRIVATE $) +target_include_directories(musrfit + BEFORE PRIVATE + $ + $ +) target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrFT git-revision.h musrFT.cpp) -target_include_directories(musrFT BEFORE PRIVATE $) +target_include_directories(musrFT + BEFORE PRIVATE + $ + $ +) target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrRootValidation git-revision.h musrRootValidation.cpp) target_include_directories(musrRootValidation - BEFORE PRIVATE - $ - $ + BEFORE PRIVATE + $ + $ + $ ) target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) add_executable(musrt0 git-revision.h musrt0.cpp) -target_include_directories(musrt0 BEFORE PRIVATE $) +target_include_directories(musrt0 + BEFORE PRIVATE + $ + $ +) target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrview git-revision.h musrview.cpp) -target_include_directories(musrview BEFORE PRIVATE $) +target_include_directories(musrview + BEFORE PRIVATE + $ + $ +) target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp) target_include_directories(write_musrRoot_runHeader - BEFORE PRIVATE - $ - $ + BEFORE PRIVATE + $ + $ + $ + $ ) target_link_libraries(write_musrRoot_runHeader ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 66388f80..b55d28ec 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -2,6 +2,7 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + root_generate_dictionary( PFourierCanvasDict ${MUSRFIT_INC}/PFourierCanvas.h LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h ) @@ -61,11 +62,24 @@ add_library(PMusr SHARED PStartupHandlerDict.cxx PTheory.cpp ) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PMusr BEFORE PRIVATE + $ + $ + $ + $ + $ +) add_library(PUserFcnBase SHARED PUserFcnBase.cpp PUserFcnBaseDict.cxx ) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PUserFcnBase BEFORE PRIVATE $ +) #--- add library dependencies ------------------------------------------------- set(DependOnLibs ${ROOT_LIBARIES}) diff --git a/src/external/MusrRoot/CMakeLists.txt b/src/external/MusrRoot/CMakeLists.txt index 250786fe..5fc03006 100644 --- a/src/external/MusrRoot/CMakeLists.txt +++ b/src/external/MusrRoot/CMakeLists.txt @@ -19,6 +19,10 @@ add_library(TMusrRunHeader SHARED TMusrRunHeader.cpp TMusrRunHeaderDict.cxx ) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + TMusrRunHeader BEFORE PRIVATE $ +) #--- add library dependencies ------------------------------------------------- target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt index afd47f93..1ecb1604 100644 --- a/src/external/TLemRunHeader/CMakeLists.txt +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -24,6 +24,10 @@ add_library(TLemRunHeader SHARED TLemStats.cxx TLemStatsDict.cxx ) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + TLemRunHeader BEFORE PRIVATE $ +) #--- add library dependencies ------------------------------------------------- target_link_libraries(TLemRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/nexus/CMakeLists.txt b/src/external/nexus/CMakeLists.txt index bdb25cd9..69023fbd 100644 --- a/src/external/nexus/CMakeLists.txt +++ b/src/external/nexus/CMakeLists.txt @@ -15,6 +15,10 @@ configure_file("PNeXus.pc.in" "PNeXus.pc" @ONLY) add_library(PNeXus SHARED PNeXus.cpp ) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PNeXus BEFORE PRIVATE $ +) #--- add library dependencies ------------------------------------------------- target_link_libraries(PNeXus ${NEXUS_LIBRARY}) From 382c27b24b492ad76fdaa3f39ef202c98b997bbc Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 19:52:22 +0200 Subject: [PATCH 14/99] added missing pcm and rootmap. --- src/external/TLemRunHeader/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt index 1ecb1604..f4e95672 100644 --- a/src/external/TLemRunHeader/CMakeLists.txt +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -39,6 +39,8 @@ install(TARGETS TLemRunHeader DESTINATION lib) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libTLemStatsDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTLemStatsDict.rootmap DESTINATION lib ) From 194bd31c8f1bcefc240f6443f5198bd627b98ba0 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 20:25:19 +0200 Subject: [PATCH 15/99] handle preprocessor flag for nexus. --- CMakeLists.txt | 1 + src/CMakeLists.txt | 1 + src/classes/CMakeLists.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b33d0db..7ef48377 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ if (nexus) #//as35 - STILL NEEDED?? -> find_package(HDF4 REQUIRED) find_package(MXML REQUIRED) find_package(NeXus REQUIRED) + add_definitions(-DPNEXUS_ENABLED) endif (nexus) #--- check for Cuba lib if BMWlibs are enabled -------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e6b3badd..ad3ef58a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,6 +57,7 @@ target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(dump_header git-revision.h dump_header.cpp) target_include_directories(dump_header BEFORE PRIVATE + $ $ $ $ diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index b55d28ec..d7f04daa 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -70,6 +70,7 @@ target_include_directories( $ $ $ + $ ) add_library(PUserFcnBase SHARED From 3ddb736f8895ea8b431ea3be0da4c936ea9a9e13 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 20:57:22 +0200 Subject: [PATCH 16/99] more NeXus related adaptation for cmake. --- src/CMakeLists.txt | 1 + src/classes/CMakeLists.txt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ad3ef58a..e8eb8c19 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,6 +64,7 @@ target_include_directories(dump_header $ $ $ + $ ) target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index d7f04daa..0536dca7 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -65,12 +65,13 @@ add_library(PMusr SHARED #--- make sure that the include directory is found ---------------------------- target_include_directories( PMusr BEFORE PRIVATE + $ $ $ $ $ $ - $ + $ ) add_library(PUserFcnBase SHARED From 13242bd5d083fdcff960f0f81c2f17cb559b244e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 21:36:35 +0200 Subject: [PATCH 17/99] added missing OpenMP header. --- src/classes/PRunMuMinus.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/classes/PRunMuMinus.cpp b/src/classes/PRunMuMinus.cpp index 244b9bb1..720075cb 100644 --- a/src/classes/PRunMuMinus.cpp +++ b/src/classes/PRunMuMinus.cpp @@ -27,6 +27,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef HAVE_GOMP +#include +#endif + #include using namespace std; From e05aee0ce96340d78336d93e06859eb2a83a5aee Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 4 May 2018 21:37:46 +0200 Subject: [PATCH 18/99] make sure that OpenMP is used if present. --- CMakeLists.txt | 5 ++++- src/classes/CMakeLists.txt | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ef48377..56e935eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,10 @@ find_package(FFTW3 REQUIRED) find_package(LibXml2 REQUIRED) #--- check for OpenMP --------------------------------------------------------- -find_package(OpenMP REQUIRED) +find_package(OpenMP) +if (OpenMP_FOUND) + add_definitions(-DHAVE_GOMP) +endif (OpenMP_FOUND) #--- check for Qt ------------------------------------------------------------- if (qt_based_tools) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 0536dca7..ae57768e 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -95,6 +95,10 @@ if (nexus) set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY}) set(DependOnLibs ${DependOnLibs} PNeXus) endif (nexus) +message("debug> OpenMP_FOUND: ${OpenMP_FOUND}, libs: ${OpenMP_CXX_LIBRARIES}") +if (OpenMP_FOUND) + set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES}) +endif (OpenMP_FOUND) target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES}) target_link_libraries(PMusr ${DependOnLibs}) From 42086350e7aef749704a60a960f108e0567c7eb9 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 5 May 2018 12:37:52 +0200 Subject: [PATCH 19/99] add FFTW3 path if not present in the standard search paths. This is needed for macOS with macport. --- src/CMakeLists.txt | 17 +++++++++++++---- src/classes/CMakeLists.txt | 23 +++++++++++++++++------ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e8eb8c19..d6fd6218 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,7 +48,8 @@ add_custom_target( #--- add all executables ------------------------------------------------------ add_executable(any2many git-revision.h any2many.cpp) target_include_directories(any2many - BEFORE PRIVATE + BEFORE PRIVATE + $ $ $ ) @@ -57,6 +58,7 @@ target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(dump_header git-revision.h dump_header.cpp) target_include_directories(dump_header BEFORE PRIVATE + $ $ $ $ @@ -71,6 +73,7 @@ target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(msr2data git-revision.h msr2data.cpp) target_include_directories(msr2data BEFORE PRIVATE + $ $ $ ) @@ -82,6 +85,7 @@ target_link_libraries(msr2msr ${ROOT_LIBRARIES}) add_executable(musrfit git-revision.h musrfit.cpp) target_include_directories(musrfit BEFORE PRIVATE + $ $ $ ) @@ -90,6 +94,7 @@ target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrFT git-revision.h musrFT.cpp) target_include_directories(musrFT BEFORE PRIVATE + $ $ $ ) @@ -97,7 +102,8 @@ target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} add_executable(musrRootValidation git-revision.h musrRootValidation.cpp) target_include_directories(musrRootValidation - BEFORE PRIVATE + BEFORE PRIVATE + $ $ $ $ @@ -107,6 +113,7 @@ target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIB add_executable(musrt0 git-revision.h musrt0.cpp) target_include_directories(musrt0 BEFORE PRIVATE + $ $ $ ) @@ -114,7 +121,8 @@ target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrview git-revision.h musrview.cpp) target_include_directories(musrview - BEFORE PRIVATE + BEFORE PRIVATE + $ $ $ ) @@ -122,7 +130,8 @@ target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIB add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp) target_include_directories(write_musrRoot_runHeader - BEFORE PRIVATE + BEFORE PRIVATE + $ $ $ $ diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index ae57768e..6d4f952d 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -4,19 +4,29 @@ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) root_generate_dictionary( - PFourierCanvasDict ${MUSRFIT_INC}/PFourierCanvas.h LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h + PFourierCanvasDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PFourierCanvas.h + LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h ) root_generate_dictionary( - PMusrCanvasDict ${MUSRFIT_INC}/PMusrCanvas.h LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h + PMusrCanvasDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrCanvas.h + LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h ) root_generate_dictionary( - PMusrT0Dict ${MUSRFIT_INC}/PMusrT0.h LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h + PMusrT0Dict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrT0.h + LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h ) root_generate_dictionary( - PStartupHandlerDict ${MUSRFIT_INC}/PStartupHandler.h LINKDEF ${MUSRFIT_INC}/PStartupHandlerLinkDef.h + PStartupHandlerDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PStartupHandler.h + LINKDEF ${MUSRFIT_INC}/PStartupHandlerLinkDef.h ) root_generate_dictionary( - PUserFcnBaseDict ${MUSRFIT_INC}/PUserFcnBase.h LINKDEF ${MUSRFIT_INC}/PUserFcnBaseLinkDef.h + PUserFcnBaseDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PUserFcnBase.h + LINKDEF ${MUSRFIT_INC}/PUserFcnBaseLinkDef.h ) #--- create pkg-config info --------------------------------------------------- @@ -64,7 +74,8 @@ add_library(PMusr SHARED ) #--- make sure that the include directory is found ---------------------------- target_include_directories( - PMusr BEFORE PRIVATE + PMusr BEFORE PRIVATE + $ $ $ $ From 9bf47a26909710f156f21ce83504eaa68680ff4f Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 5 May 2018 16:47:11 +0200 Subject: [PATCH 20/99] some first cmake tuning for macOS. --- CMakeLists.txt | 28 +++++++++++++++---- src/classes/CMakeLists.txt | 1 - .../Class_MuSR_PSI/CMakeLists.txt | 9 ++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56e935eb..154ea52e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ option(ASlibs "build optional ASlibs" OFF) option(BMWlibs "build optional BMWlibs" OFF) option(BNMRlibs "build optional beta-NMR libs" OFF) option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON) +option(try_OpenMP "try to use OpenMP if available" ON) #--- check for all the needed packages ---------------------------------------- @@ -43,10 +44,12 @@ find_package(FFTW3 REQUIRED) find_package(LibXml2 REQUIRED) #--- check for OpenMP --------------------------------------------------------- -find_package(OpenMP) -if (OpenMP_FOUND) - add_definitions(-DHAVE_GOMP) -endif (OpenMP_FOUND) +if (try_OpenMP) + find_package(OpenMP) + if (OpenMP_FOUND) + add_definitions(-DHAVE_GOMP) + endif (OpenMP_FOUND) +endif (try_OpenMP) #--- check for Qt ------------------------------------------------------------- if (qt_based_tools) @@ -107,6 +110,9 @@ message(" GSL found in ${GSL_INCLUDE_DIRS}") message(" BOOST found in ${Boost_INCLUDE_DIRS}") message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}") message(" ROOT found in ${ROOT_INCLUDE_DIRS}") +if (OpenMP_FOUND) + message(" OpenMP found (version ${OpenMP_VERSION})") +endif (OpenMP_FOUND) if (nexus) message("") @@ -121,7 +127,19 @@ if (BMWlibs) endif (BMWlibs) message("") -message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") +if (qt_based_tools) + if (Qt5Core_FOUND) + message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") + else (Qt5Core_FOUND) + if (Qt4_FOUND) + message(" Qt found in ${Qt4_INCLUDE_DIRS} (Version: ${Qt4_VERSION})") + else (Qt4_FOUND) + if (QT_FOUND) + message(" Qt found in ${QT_INCLUDE_DIRS} (Version: ${QT_VERSION})") + endif (QT_FOUND) + endif (Qt4_FOUND) + endif (Qt5Core_FOUND) +endif (qt_based_tools) message("") message(" Features:") message(" ---------") diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 6d4f952d..619d9864 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -106,7 +106,6 @@ if (nexus) set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY}) set(DependOnLibs ${DependOnLibs} PNeXus) endif (nexus) -message("debug> OpenMP_FOUND: ${OpenMP_FOUND}, libs: ${OpenMP_CXX_LIBRARIES}") if (OpenMP_FOUND) set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES}) endif (OpenMP_FOUND) diff --git a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt index 122feb9b..0c5d59d4 100644 --- a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt +++ b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt @@ -9,6 +9,15 @@ set(PSIBIN_VERSION "0.1.0") set(PSIBIN_LIBRARY_NAME "Class_MuSR_PSI") configure_file("Class_MuSR_PSI.pc.in" "Class_MuSR_PSI.pc" @ONLY) +#--- OS dependent pre-compiler settings for PSI-BIN --------------------------- +if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + add_definitions(-D__linux__) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + add_definitions(-D_Darwin_) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + add_definitions(-D_WIN32) +endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + #--- lib creation ------------------------------------------------------------- add_library(Class_MuSR_PSI SHARED MuSR_td_PSI_bin.cpp) From aa34efb0a8b7758c18c01978440a593abd375bd2 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 5 May 2018 21:02:48 +0200 Subject: [PATCH 21/99] add nonlocal sc support via cmake. --- CMakeLists.txt | 2 +- src/classes/CMakeLists.txt | 4 ++ src/external/CMakeLists.txt | 4 +- src/external/Nonlocal/CMakeLists.txt | 62 +++++++++++++++++++ src/external/Nonlocal/PNL_PippardFitter.pc.in | 10 +++ 5 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/external/Nonlocal/CMakeLists.txt create mode 100644 src/external/Nonlocal/PNL_PippardFitter.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 154ea52e..fbbc33aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,7 +111,7 @@ message(" BOOST found in ${Boost_INCLUDE_DIRS}") message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}") message(" ROOT found in ${ROOT_INCLUDE_DIRS}") if (OpenMP_FOUND) - message(" OpenMP found (version ${OpenMP_VERSION})") + message(" OpenMP found (version ${OpenMP_CXX_VERSION})") endif (OpenMP_FOUND) if (nexus) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 619d9864..e87ddab4 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -93,6 +93,10 @@ add_library(PUserFcnBase SHARED target_include_directories( PUserFcnBase BEFORE PRIVATE $ ) +#--- add OpenMP compile options if needed ------------------------------------- +if (OpenMP_FOUND) + target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS}) +endif (OpenMP_FOUND) #--- add library dependencies ------------------------------------------------- set(DependOnLibs ${ROOT_LIBARIES}) diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index c2e7379b..609d3607 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -1,11 +1,13 @@ -#[==[ if (ASlibs) add_subdirectory(Nonlocal) +#[==[ add_subdirectory(MagProximity) add_subdirectory(libPhotoMeissner) add_subdirectory(libSpinValve) +#]==] endif (ASlibs) +#[==[ if (BMWlibs) add_subdirectory(libCuba) add_subdirectory(BMWtools) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt new file mode 100644 index 00000000..19e67c3d --- /dev/null +++ b/src/external/Nonlocal/CMakeLists.txt @@ -0,0 +1,62 @@ +# - Nonlocal library ---------------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +root_generate_dictionary( + PNL_PippardFitterDict PNL_PippardFitter.h LINKDEF PNL_PippardFitterLinkDef.h +) +root_generate_dictionary( + PNL_StartupHandlerDict PNL_StartupHandler.h LINKDEF PNL_StartupHandlerLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(PNL_PIPPARDFITTER_VERSION "1.0.0") +set(PNL_PIPPARDFITTER_LIBRARY_NAME "PNL_PippardFitter") +configure_file("PNL_PippardFitter.pc.in" "PNL_PippardFitter.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PNL_PippardFitter SHARED + PNL_PippardFitter.cpp + PNL_PippardFitterDict.cxx + PNL_RgeHandler.cpp + PNL_StartupHandler.cpp + PNL_StartupHandlerDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PNL_PippardFitter BEFORE PRIVATE $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(PNL_PippardFitter PUserFcnBase ${FFTW3_LIBRARIES} ${ROOT_LIBRARIES}) + +#--- install TMusrRunHeader solib --------------------------------------------- +install(TARGETS PNL_PippardFitter DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitterDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitterDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandlerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandlerDict.rootmap + DESTINATION lib +) + +#--- install TMusrRunHeader header -------------------------------------------- +install( + FILES + PNL_PippardFitter.h + PNL_RgeHandler.h + PNL_StartupHandler.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PNL_PippardFitter.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/Nonlocal/PNL_PippardFitter.pc.in b/src/external/Nonlocal/PNL_PippardFitter.pc.in new file mode 100644 index 00000000..2ff098d4 --- /dev/null +++ b/src/external/Nonlocal/PNL_PippardFitter.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: PNL_PippardFitter +Description: C++ shared library providing the nonlocal sc fitter class +Version: @PNL_PIPPARDFITTER_VERSION@ +Libs: -L${libdir} -l@PNL_PIPPARDFITTER_LIBRARY_NAME@ +Cflags: -I${includedir} From 15a82cbcc14c542711c082c9d2d731546a9337e4 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 5 May 2018 21:32:08 +0200 Subject: [PATCH 22/99] fixed typo --- src/external/Nonlocal/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt index 19e67c3d..cb7c14d9 100644 --- a/src/external/Nonlocal/CMakeLists.txt +++ b/src/external/Nonlocal/CMakeLists.txt @@ -33,7 +33,7 @@ target_include_directories( #--- add library dependencies ------------------------------------------------- target_link_libraries(PNL_PippardFitter PUserFcnBase ${FFTW3_LIBRARIES} ${ROOT_LIBRARIES}) -#--- install TMusrRunHeader solib --------------------------------------------- +#--- install PNL_PippardFitter solib ------------------------------------------ install(TARGETS PNL_PippardFitter DESTINATION lib) #--- install root pcm's and rootmaps ------------------------------------------ @@ -45,7 +45,7 @@ install( DESTINATION lib ) -#--- install TMusrRunHeader header -------------------------------------------- +#--- install PNL_PippardFitter header ----------------------------------------- install( FILES PNL_PippardFitter.h From dbf9c930e61d4424bfb318ce4e4be5a985673970 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 5 May 2018 21:33:03 +0200 Subject: [PATCH 23/99] added mag. proximity via cmake. --- src/external/CMakeLists.txt | 2 +- src/external/MagProximity/CMakeLists.txt | 65 +++++++++++++++++++ .../MagProximity/PMagProximityFitter.pc.in | 10 +++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/external/MagProximity/CMakeLists.txt create mode 100644 src/external/MagProximity/PMagProximityFitter.pc.in diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 609d3607..6948f2dc 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -1,7 +1,7 @@ if (ASlibs) add_subdirectory(Nonlocal) -#[==[ add_subdirectory(MagProximity) +#[==[ add_subdirectory(libPhotoMeissner) add_subdirectory(libSpinValve) #]==] diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt new file mode 100644 index 00000000..a3814554 --- /dev/null +++ b/src/external/MagProximity/CMakeLists.txt @@ -0,0 +1,65 @@ +# - Mag. Proximity library ---------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +root_generate_dictionary( + PMagProximityFitterDict PMagProximityFitter.h LINKDEF PMagProximityFitterLinkDef.h +) +root_generate_dictionary( + PMPStartupHandlerDict PMPStartupHandler.h LINKDEF PMPStartupHandlerLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(PNL_PIPPARDFITTER_VERSION "1.0.0") +set(PNL_PIPPARDFITTER_LIBRARY_NAME "PMagProximityFitter") +configure_file("PMagProximityFitter.pc.in" "PMagProximityFitter.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PMagProximityFitter SHARED + PMagProximityFitter.cpp + PMagProximityFitterDict.cxx + PMPRgeHandler.cpp + PMPStartupHandler.cpp + PMPStartupHandlerDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PMagProximityFitter BEFORE PRIVATE $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(PMagProximityFitter PUserFcnBase ${ROOT_LIBRARIES}) + +#--- install PMagProximityFitter solib ---------------------------------------- +install(TARGETS PMagProximityFitter DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPMagProximityFitterDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMagProximityFitterDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPMPStartupHandlerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMPStartupHandlerDict.rootmap + DESTINATION lib +) + +#--- install PMagProximityFitter header --------------------------------------- +install( + FILES + PMagProximity.h + PMagProximityFitter.h + PMPRgeHandler.h + PMPStartupHandler.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PMagProximityFitter.pc + DESTINATION lib/pkgconfig +) + + diff --git a/src/external/MagProximity/PMagProximityFitter.pc.in b/src/external/MagProximity/PMagProximityFitter.pc.in new file mode 100644 index 00000000..243ff092 --- /dev/null +++ b/src/external/MagProximity/PMagProximityFitter.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: PMagProximityFitter +Description: C++ shared library providing the mag. proximity fitter class +Version: @P_MAG_PROXIMITY_FITTER_VERSION@ +Libs: -L${libdir} -l@P_MAG_PROXIMITY_FITTER_LIBRARY_NAME@ +Cflags: -I${includedir} From 5384da49e175b49a500081ef9e723276bcc1c0b0 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 6 May 2018 15:58:47 +0200 Subject: [PATCH 24/99] added missing includes and shared libs. --- src/external/MagProximity/CMakeLists.txt | 14 +++++++++++--- src/external/Nonlocal/CMakeLists.txt | 15 ++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt index a3814554..6e4fb369 100644 --- a/src/external/MagProximity/CMakeLists.txt +++ b/src/external/MagProximity/CMakeLists.txt @@ -1,8 +1,13 @@ # - Mag. Proximity library ---------------------------------------------------- #--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) root_generate_dictionary( - PMagProximityFitterDict PMagProximityFitter.h LINKDEF PMagProximityFitterLinkDef.h + PMagProximityFitterDict + -I${FFTW3_INCLUDE} + -I${MUSRFIT_INC} + PMagProximityFitter.h + LINKDEF PMagProximityFitterLinkDef.h ) root_generate_dictionary( PMPStartupHandlerDict PMPStartupHandler.h LINKDEF PMPStartupHandlerLinkDef.h @@ -27,11 +32,14 @@ add_library(PMagProximityFitter SHARED ) #--- make sure that the include directory is found ---------------------------- target_include_directories( - PMagProximityFitter BEFORE PRIVATE $ + PMagProximityFitter BEFORE PRIVATE + $ + $ + $ ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(PMagProximityFitter PUserFcnBase ${ROOT_LIBRARIES}) +target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) #--- install PMagProximityFitter solib ---------------------------------------- install(TARGETS PMagProximityFitter DESTINATION lib) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt index cb7c14d9..8fd64c28 100644 --- a/src/external/Nonlocal/CMakeLists.txt +++ b/src/external/Nonlocal/CMakeLists.txt @@ -1,8 +1,14 @@ # - Nonlocal library ---------------------------------------------------------- #--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + root_generate_dictionary( - PNL_PippardFitterDict PNL_PippardFitter.h LINKDEF PNL_PippardFitterLinkDef.h + PNL_PippardFitterDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + PNL_PippardFitter.h + LINKDEF PNL_PippardFitterLinkDef.h ) root_generate_dictionary( PNL_StartupHandlerDict PNL_StartupHandler.h LINKDEF PNL_StartupHandlerLinkDef.h @@ -27,11 +33,14 @@ add_library(PNL_PippardFitter SHARED ) #--- make sure that the include directory is found ---------------------------- target_include_directories( - PNL_PippardFitter BEFORE PRIVATE $ + PNL_PippardFitter BEFORE PRIVATE + $ + $ + $ ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(PNL_PippardFitter PUserFcnBase ${FFTW3_LIBRARIES} ${ROOT_LIBRARIES}) +target_link_libraries(PNL_PippardFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) #--- install PNL_PippardFitter solib ------------------------------------------ install(TARGETS PNL_PippardFitter DESTINATION lib) From 5248ad5cf8024084add1a541d57d7886be15f04d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 6 May 2018 16:52:54 +0200 Subject: [PATCH 25/99] added photo Meissner library. --- src/external/CMakeLists.txt | 2 +- src/external/libPhotoMeissner/CMakeLists.txt | 1 + .../libPhotoMeissner/classes/CMakeLists.txt | 73 +++++++++++++++++++ .../classes/PPhotoMeissner.pc.in | 10 +++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/external/libPhotoMeissner/CMakeLists.txt create mode 100644 src/external/libPhotoMeissner/classes/CMakeLists.txt create mode 100644 src/external/libPhotoMeissner/classes/PPhotoMeissner.pc.in diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 6948f2dc..488b674d 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -1,8 +1,8 @@ if (ASlibs) add_subdirectory(Nonlocal) add_subdirectory(MagProximity) -#[==[ add_subdirectory(libPhotoMeissner) +#[==[ add_subdirectory(libSpinValve) #]==] endif (ASlibs) diff --git a/src/external/libPhotoMeissner/CMakeLists.txt b/src/external/libPhotoMeissner/CMakeLists.txt new file mode 100644 index 00000000..1d3d9719 --- /dev/null +++ b/src/external/libPhotoMeissner/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(classes) diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt new file mode 100644 index 00000000..2d94ef65 --- /dev/null +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -0,0 +1,73 @@ +# - Photo Meissner library ---------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + PPhotoMeissnerDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + PPhotoMeissner.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/PPhotoMeissnerLinkDef.h +) +root_generate_dictionary( + PStartupHandler_PMDict + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + PStartupHandler_PM.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/PStartupHandler_PMLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(P_PHOTO_MEISSNER_VERSION "1.0.0") +set(P_PHOTO_MEISSNER_LIBRARY_NAME "PPhotoMeissner") +configure_file("PPhotoMeissner.pc.in" "PPhotoMeissner.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PPhotoMeissner SHARED + PPhotoMeissner.cpp + PPhotoMeissnerDict.cxx + PStartupHandler_PM.cpp + PStartupHandler_PMDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PPhotoMeissner BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(PPhotoMeissner ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) + +#--- install PPhotoMeissner solib --------------------------------------------- +install(TARGETS PPhotoMeissner DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPPhotoMeissnerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPPhotoMeissnerDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_PMDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_PMDict.rootmap + DESTINATION lib +) + +#--- install PPhotoMeissner header -------------------------------------------- +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../include/PPhotoMeissner.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/PStartupHandler_PM.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PPhotoMeissner.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/libPhotoMeissner/classes/PPhotoMeissner.pc.in b/src/external/libPhotoMeissner/classes/PPhotoMeissner.pc.in new file mode 100644 index 00000000..ba5d89c1 --- /dev/null +++ b/src/external/libPhotoMeissner/classes/PPhotoMeissner.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: PPhotoMeissner +Description: C++ shared library providing the photo Meissner fitter class +Version: @P_PHOTO_MEISSNER_VERSION@ +Libs: -L${libdir} -l@P_PHOTO_MEISSNER_LIBRARY_NAME@ +Cflags: -I${includedir} From f99b69b820d8f129f1b7408219af12a7593a4fc5 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 6 May 2018 17:07:03 +0200 Subject: [PATCH 26/99] added cmake support for the spin valve fitter. --- src/external/CMakeLists.txt | 2 - src/external/libSpinValve/CMakeLists.txt | 1 + .../libSpinValve/classes/CMakeLists.txt | 74 +++++++++++++++++++ .../libSpinValve/classes/PSpinValve.pc.in | 10 +++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/external/libSpinValve/CMakeLists.txt create mode 100644 src/external/libSpinValve/classes/CMakeLists.txt create mode 100644 src/external/libSpinValve/classes/PSpinValve.pc.in diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 488b674d..7f0a5f06 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -2,9 +2,7 @@ if (ASlibs) add_subdirectory(Nonlocal) add_subdirectory(MagProximity) add_subdirectory(libPhotoMeissner) -#[==[ add_subdirectory(libSpinValve) -#]==] endif (ASlibs) #[==[ diff --git a/src/external/libSpinValve/CMakeLists.txt b/src/external/libSpinValve/CMakeLists.txt new file mode 100644 index 00000000..1d3d9719 --- /dev/null +++ b/src/external/libSpinValve/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(classes) diff --git a/src/external/libSpinValve/classes/CMakeLists.txt b/src/external/libSpinValve/classes/CMakeLists.txt new file mode 100644 index 00000000..39161b82 --- /dev/null +++ b/src/external/libSpinValve/classes/CMakeLists.txt @@ -0,0 +1,74 @@ +# - Spin Valve library -------------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + PSkewedLorentzianDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + PSkewedLorentzian.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/PSkewedLorentzianLinkDef.h +) +root_generate_dictionary( + PStartupHandler_SVDict + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + PStartupHandler_SV.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/PStartupHandler_SVLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(P_SPIN_VALVE_VERSION "1.0.0") +set(P_SPIN_VALVE_LIBRARY_NAME "PSpinValve") +configure_file("PSpinValve.pc.in" "PSpinValve.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PSpinValve SHARED + PSkewedLorentzian.cpp + PSkewedLorentzianDict.cxx + PStartupHandler_SV.cpp + PStartupHandler_SVDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PSpinValve BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(PSpinValve ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) + +#--- install PSpinValve solib ------------------------------------------------- +install(TARGETS PSpinValve DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPSkewedLorentzianDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPSkewedLorentzianDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_SVDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandler_SVDict.rootmap + DESTINATION lib +) + +#--- install PSpinValve header ------------------------------------------------ +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../include/PSkewedLorentzian.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/PStartupHandler_SV.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PSpinValve.pc + DESTINATION lib/pkgconfig +) + diff --git a/src/external/libSpinValve/classes/PSpinValve.pc.in b/src/external/libSpinValve/classes/PSpinValve.pc.in new file mode 100644 index 00000000..05d75377 --- /dev/null +++ b/src/external/libSpinValve/classes/PSpinValve.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: PSpinValve +Description: C++ shared library providing the spin valve fitter class +Version: @P_SPIN_VALVE_VERSION@ +Libs: -L${libdir} -l@P_SPIN_VALVE_LIBRARY_NAME@ +Cflags: -I${includedir} From 9370b2cd4da6300d89a4187cea5fc483697d0954 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 May 2018 13:00:20 +0200 Subject: [PATCH 27/99] some minor cosmetics for OpenMP messages. --- CMakeLists.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fbbc33aa..7b4c221b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,14 +111,18 @@ message(" BOOST found in ${Boost_INCLUDE_DIRS}") message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}") message(" ROOT found in ${ROOT_INCLUDE_DIRS}") if (OpenMP_FOUND) - message(" OpenMP found (version ${OpenMP_CXX_VERSION})") + if (OpenMP_CXX_VERSION) + message(" OpenMP found (version ${OpenMP_CXX_VERSION})") + else (OpenMP_CXX_VERSION) + message(" OpenMP found") + endif (OpenMP_CXX_VERSION) endif (OpenMP_FOUND) if (nexus) message("") #//as35 message(" HDF4 found in ${HDF4_INCLUDE_DIRS}") - message(" HDF5 found in ${HDF5_INCLUDE_DIRS}") - message(" NeXus found in ${NEXUS_INCLUDE_DIR}") + message(" HDF5 found in ${HDF5_INCLUDE_DIRS}") + message(" NeXus found in ${NEXUS_INCLUDE_DIR}") endif (nexus) if (BMWlibs) From 9bdb8ec2ec9bb4794b2fcd1b132365cf7af9fa6b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 May 2018 13:02:22 +0200 Subject: [PATCH 28/99] make sure that older cmake versions (<= 3.8) inject the right linker flags for OpenMP. --- src/classes/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index e87ddab4..cfb60d70 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -111,7 +111,11 @@ if (nexus) set(DependOnLibs ${DependOnLibs} PNeXus) endif (nexus) if (OpenMP_FOUND) - set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES}) + if (OpenMP_CXX_LIBRARIES) + set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES}) + else (OpenMP_CXX_LIBRARIES) + set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_FLAGS}) # for older cmake OpenMP_CXX_LIBRARIES is not defined + endif (OpenMP_CXX_LIBRARIES) endif (OpenMP_FOUND) target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES}) From fffd276376b8d3048e823d0cbd2ece0ccb9017f5 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 May 2018 13:32:16 +0200 Subject: [PATCH 29/99] added missing gsl library to cmake file. --- src/external/libPhotoMeissner/classes/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt index 2d94ef65..f1d9826f 100644 --- a/src/external/libPhotoMeissner/classes/CMakeLists.txt +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -43,7 +43,7 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(PPhotoMeissner ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) +target_link_libraries(PPhotoMeissner ${FFTW3_LIBRARY} ${GSL_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) #--- install PPhotoMeissner solib --------------------------------------------- install(TARGETS PPhotoMeissner DESTINATION lib) From 14b54bbfc8c4faa8b6100938a82a0eaeae450a99 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 May 2018 16:41:14 +0200 Subject: [PATCH 30/99] start to integrate the BMWlibs into the cmake build. --- src/external/BMWtools/CMakeLists.txt | 65 ++++++++++++++++++++++++++++ src/external/CMakeLists.txt | 6 ++- 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/external/BMWtools/CMakeLists.txt diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt new file mode 100644 index 00000000..a2fcaacb --- /dev/null +++ b/src/external/BMWtools/CMakeLists.txt @@ -0,0 +1,65 @@ +# - BMWtools library ---------------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + BMWStartupHandlerDict LINKDEF BMWStartupHandlerLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(BMW_TOOLS_VERSION "1.0.0") +set(BMW_TOOLS_LIBRARY_NAME "BMWtools") +configure_file("BMWtools.pc.in" "BMWtools.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(BMWtools SHARED + BMWStartupHandler.cpp + BMWStartupHandlerDict.cxx + TTrimSPDataHandler.cpp + BMWIntegrator.cpp +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PNL_PippardFitter BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(BMWtools ${ROOT_LIBRARIES}) # //as35 cuba lib needs to be added here!! + +#--- install BMWtools solib --------------------------------------------------- +install(TARGETS BMWtools DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libBMWStartupHandlerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libBMWStartupHandlerDict.rootmap + DESTINATION lib +) + +#--- install BMWtools header -------------------------------------------------- +install( + FILES + BMWStartupHandler.h + TTrimSPDataHandler.h + BMWIntegrator.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/BMWtools.pc + DESTINATION lib/pkgconfig +) +#]==] diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 7f0a5f06..7e83d89b 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -5,17 +5,19 @@ if (ASlibs) add_subdirectory(libSpinValve) endif (ASlibs) -#[==[ if (BMWlibs) +#[==[ add_subdirectory(libCuba) +#]==] add_subdirectory(BMWtools) +#[==[ add_subdirectory(libCalcMeanFieldsLEM) add_subdirectory(libFitPofB) add_subdirectory(libGapIntegrals) add_subdirectory(libLFRelaxation) add_subdirectory(libZFRelaxation) -endif (BMWlibs) #]==] +endif (BMWlibs) add_subdirectory(mud) add_subdirectory(MusrRoot) From 8f23d8b5ab11121131bb0583dd196260edb8620e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 May 2018 19:23:23 +0200 Subject: [PATCH 31/99] fix of copy-paste error and preparing for libCuba. --- src/external/BMWtools/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index a2fcaacb..3557b967 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -2,6 +2,7 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(CUBA_INC ${CMAKE_SOURCE_DIR}/src/external/libCuba/src) root_generate_dictionary( BMWStartupHandlerDict LINKDEF BMWStartupHandlerLinkDef.h @@ -27,8 +28,9 @@ add_library(BMWtools SHARED ) #--- make sure that the include directory is found ---------------------------- target_include_directories( - PNL_PippardFitter BEFORE PRIVATE + BMWtools BEFORE PRIVATE $ + $ $ $ ) From 36d14d226f3ec1a7a0846f81cc3b95bcf5662634 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 13:03:58 +0200 Subject: [PATCH 32/99] added cmake support for BMWlib libCalcMeanFieldsLEM. --- src/external/CMakeLists.txt | 2 +- .../libCalcMeanFieldsLEM/CMakeLists.txt | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/external/libCalcMeanFieldsLEM/CMakeLists.txt diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 7e83d89b..8380266c 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -10,8 +10,8 @@ if (BMWlibs) add_subdirectory(libCuba) #]==] add_subdirectory(BMWtools) -#[==[ add_subdirectory(libCalcMeanFieldsLEM) +#[==[ add_subdirectory(libFitPofB) add_subdirectory(libGapIntegrals) add_subdirectory(libLFRelaxation) diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt new file mode 100644 index 00000000..2d0b1c8d --- /dev/null +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -0,0 +1,66 @@ +# - libCalcMeanFieldsLEM library ---------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + TCalcMeanFieldsLEMDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + TCalcMeanFieldsLEM.h + LINKDEF TCalcMeanFieldsLEMLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(T_CALC_MEAN_FIELD_LEM_VERSION "1.0.0") +set(T_CALC_MEAN_FIELD_LEM_LIBRARY_NAME "TCalcMeanFieldsLEM") +configure_file("TCalcMeanFieldsLEM.pc.in" "TCalcMeanFieldsLEM.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(CalcMeanFieldsLEM SHARED + TCalcMeanFieldsLEM.cpp + TCalcMeanFieldsLEMDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + CalcMeanFieldsLEM BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(CalcMeanFieldsLEM ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) + +#--- install CalcMeanFieldsLEM solib ------------------------------------------ +install(TARGETS CalcMeanFieldsLEM DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTCalcMeanFieldsLEMDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTCalcMeanFieldsLEMDict.rootmap + DESTINATION lib +) + +#--- install CalcMeanFieldsLEM header ----------------------------------------- +install( + FILES + TCalcMeanFieldsLEM.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/TCalcMeanFieldsLEM.pc + DESTINATION lib/pkgconfig +) +#]==] + From d2236678722628d6f94d2124080778d29f44f8d1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 16:15:43 +0200 Subject: [PATCH 33/99] added missing header file for rootcling. --- src/external/BMWtools/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index 3557b967..11219fe8 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -5,7 +5,7 @@ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) set(CUBA_INC ${CMAKE_SOURCE_DIR}/src/external/libCuba/src) root_generate_dictionary( - BMWStartupHandlerDict LINKDEF BMWStartupHandlerLinkDef.h + BMWStartupHandlerDict BMWStartupHandler.h LINKDEF BMWStartupHandlerLinkDef.h ) #--- create pkg-config info --------------------------------------------------- From e5780724698c38a10a7f3d4102ac477ac8599df5 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 16:30:16 +0200 Subject: [PATCH 34/99] added cmake support for BMW lib libLFRelaxation. --- src/external/libLFRelaxation/CMakeLists.txt | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/external/libLFRelaxation/CMakeLists.txt diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt new file mode 100644 index 00000000..20e695e3 --- /dev/null +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -0,0 +1,66 @@ +# - libLFRelaxation library --------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + TLFRelaxationDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + TLFRelaxation.h + LINKDEF TLFRelaxationLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(T_LF_RELAXATION_VERSION "1.0.0") +set(T_LF_RELAXATION_LIBRARY_NAME "TLFRelaxation") +configure_file("TLFRelaxation.pc.in" "TLFRelaxation.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(TLFRelaxation SHARED + TLFRelaxation.cpp + TLFRelaxationDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + TLFRelaxation BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(TLFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing + +#--- install TLFRelaxation solib ---------------------------------------------- +install(TARGETS TLFRelaxation DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTLFRelaxationDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTLFRelaxationDict.rootmap + DESTINATION lib +) + +#--- install TLFRelaxation header --------------------------------------------- +install( + FILES + TLFRelaxation.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/TLFRelaxation.pc + DESTINATION lib/pkgconfig +) +#]==] + From f6a20031db158903e4a233e50e89ad037f60eef6 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 16:35:15 +0200 Subject: [PATCH 35/99] added cmake support for BMW lib libZFRelaxation. --- src/external/CMakeLists.txt | 4 +- src/external/libZFRelaxation/CMakeLists.txt | 66 +++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/external/libZFRelaxation/CMakeLists.txt diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 8380266c..24319040 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -11,12 +11,12 @@ if (BMWlibs) #]==] add_subdirectory(BMWtools) add_subdirectory(libCalcMeanFieldsLEM) -#[==[ add_subdirectory(libFitPofB) +#[==[ add_subdirectory(libGapIntegrals) +#]==] add_subdirectory(libLFRelaxation) add_subdirectory(libZFRelaxation) -#]==] endif (BMWlibs) add_subdirectory(mud) diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt new file mode 100644 index 00000000..8f3feec6 --- /dev/null +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -0,0 +1,66 @@ +# - libZFRelaxation library --------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + ZFRelaxationDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + ZFRelaxation.h + LINKDEF ZFRelaxationLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(ZF_RELAXATION_VERSION "1.0.0") +set(ZF_RELAXATION_LIBRARY_NAME "ZFRelaxation") +configure_file("ZFRelaxation.pc.in" "ZFRelaxation.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(ZFRelaxation SHARED + ZFRelaxation.cpp + ZFRelaxationDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + ZFRelaxation BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(ZFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing + +#--- install ZFRelaxation solib ----------------------------------------------- +install(TARGETS ZFRelaxation DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libZFRelaxationDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libZFRelaxationDict.rootmap + DESTINATION lib +) + +#--- install ZFRelaxation header ---------------------------------------------- +install( + FILES + ZFRelaxation.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/ZFRelaxation.pc + DESTINATION lib/pkgconfig +) +#]==] + From 16be3f3c7a6fa3a1daab4560b2c98bfa80dfaa62 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 17:27:45 +0200 Subject: [PATCH 36/99] add necessary cmake file. --- src/external/libFitPofB/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/external/libFitPofB/CMakeLists.txt diff --git a/src/external/libFitPofB/CMakeLists.txt b/src/external/libFitPofB/CMakeLists.txt new file mode 100644 index 00000000..1d3d9719 --- /dev/null +++ b/src/external/libFitPofB/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(classes) From 12817c1bafc330d5131a6477fb6c78e8baa3948b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 17:28:46 +0200 Subject: [PATCH 37/99] add another necessary cmake file. --- .../libFitPofB/classes/CMakeLists.txt | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/external/libFitPofB/classes/CMakeLists.txt diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt new file mode 100644 index 00000000..8ba65a1b --- /dev/null +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -0,0 +1,103 @@ +# - libFitPofB library -------------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + TLondon1DDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + TLondon1D.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TLondon1DLinkDef.h +) +root_generate_dictionary( + TVortexDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + TVortex.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TVortexLinkDef.h +) +root_generate_dictionary( + TSkewedGssDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${CMAKE_CURRENT_SOURCE_DIR}/../include + TSkewedGss.h + LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TSkewedGssLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(FIT_P_OF_B_VERSION "1.0.0") +set(FIT_P_OF_B_LIBRARY_NAME "FitPofB") +configure_file("FitPofB.pc.in" "FitPofB.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(FitPofB SHARED + TBofZCalc.cpp + TBulkTriVortexFieldCalc.cpp + TFilmTriVortexFieldCalc.cpp + TLondon1D.cpp + TLondon1DDict.cxx + TPofBCalc.cpp + TPofTCalc.cpp + TVortex.cpp + TVortexDict.cxx + TSkewedGss.cpp + TSkewedGssDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + FitPofB BEFORE PRIVATE + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(FitPofB ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) + +#--- install FitPofB solib ---------------------------------------------------- +install(TARGETS FitPofB DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTLondon1DDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTLondon1DDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libTVortexDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTVortexDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libTSkewedGssDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTSkewedGssDict.rootmap + DESTINATION lib +) + +#--- install FitPofB header --------------------------------------------------- +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TBofZCalc.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TBulkTriVortexFieldCalc.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TFilmTriVortexFieldCalc.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TLondon1D.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TPofBCalc.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TPofTCalc.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TSkewedGss.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include/TVortex.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/FitPofB.pc + DESTINATION lib/pkgconfig +) +#]==] + From c640e8719ff05324e93c70c8f30d2c46354165d3 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 8 May 2018 17:58:57 +0200 Subject: [PATCH 38/99] cmake: added missing paths for rootcling for the BMW libs. --- src/external/libCalcMeanFieldsLEM/CMakeLists.txt | 6 ++++++ src/external/libFitPofB/classes/CMakeLists.txt | 10 ++++++++++ src/external/libLFRelaxation/CMakeLists.txt | 3 +++ src/external/libZFRelaxation/CMakeLists.txt | 3 +++ 4 files changed, 22 insertions(+) diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt index 2d0b1c8d..ad194e2c 100644 --- a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -2,11 +2,15 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools) +set(POFB_INC ${CMAKE_SOURCE_DIR}/src/external/libFitPofB/include) root_generate_dictionary( TCalcMeanFieldsLEMDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} + -I${POFB_INC} TCalcMeanFieldsLEM.h LINKDEF TCalcMeanFieldsLEMLinkDef.h ) @@ -32,6 +36,8 @@ target_include_directories( CalcMeanFieldsLEM BEFORE PRIVATE $ $ + $ + $ $ ) diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index 8ba65a1b..c78096cf 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -2,11 +2,15 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools) +set(POFB_INC ${CMAKE_SOURCE_DIR}/src/external/libFitPofB/include) root_generate_dictionary( TLondon1DDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} + -I${POFB_INC} -I${CMAKE_CURRENT_SOURCE_DIR}/../include TLondon1D.h LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TLondon1DLinkDef.h @@ -15,6 +19,8 @@ root_generate_dictionary( TVortexDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} + -I${POFB_INC} -I${CMAKE_CURRENT_SOURCE_DIR}/../include TVortex.h LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TVortexLinkDef.h @@ -23,6 +29,8 @@ root_generate_dictionary( TSkewedGssDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} + -I${POFB_INC} -I${CMAKE_CURRENT_SOURCE_DIR}/../include TSkewedGss.h LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/TSkewedGssLinkDef.h @@ -58,6 +66,8 @@ target_include_directories( FitPofB BEFORE PRIVATE $ $ + $ + $ $ ) diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt index 20e695e3..2fbe411e 100644 --- a/src/external/libLFRelaxation/CMakeLists.txt +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -2,11 +2,13 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools) root_generate_dictionary( TLFRelaxationDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} TLFRelaxation.h LINKDEF TLFRelaxationLinkDef.h ) @@ -32,6 +34,7 @@ target_include_directories( TLFRelaxation BEFORE PRIVATE $ $ + $ $ ) diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt index 8f3feec6..5a45a757 100644 --- a/src/external/libZFRelaxation/CMakeLists.txt +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -2,11 +2,13 @@ #--- generate necessary dictionaries ------------------------------------------ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools) root_generate_dictionary( ZFRelaxationDict -I${FFTW3_INCLUDE_DIR} -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} ZFRelaxation.h LINKDEF ZFRelaxationLinkDef.h ) @@ -32,6 +34,7 @@ target_include_directories( ZFRelaxation BEFORE PRIVATE $ $ + $ $ ) From fa6344360fb9f9123d6f2317d81493403f580b3c Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 11 May 2018 16:41:20 +0200 Subject: [PATCH 39/99] improved cmake module FindFFTW3. It delivers now more precise info about the available libs. --- cmake/FindFFTW3.cmake | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake index 96c41b79..d88d13ee 100644 --- a/cmake/FindFFTW3.cmake +++ b/cmake/FindFFTW3.cmake @@ -7,21 +7,29 @@ # FFTW3_OMP_LIBRARY, library to link against to use FFTW3_omp # FFTW3_THREADS_LIBRARY, library to link against to use FFTW3_threads # FFTW3_FOUND, if false, do not try to use FFTW3. +# FFTW3_OMP_FOUND, if false, do not try to use OpenMP FFTW3. +# FFTW3_THREADS_FOUND, if false, do not try to use threaded FFTW3. # --- # FFTW3L_LIBRARY, library to link against to use FFTW3l # FFTW3L_OMP_LIBRARY, library to link against to use FFTW3l_omp # FFTW3L_THREADS_LIBRARY, library to link against to use FFTW3l_threads # FFTW3L_FOUND, if false, do not try to use FFTW3l. +# FFTW3L_OMP_FOUND, if false, do not try to use OpenMP FFTW3l. +# FFTW3L_THREADS_FOUND, if false, do not try to use threaded FFTW3l. # --- # FFTW3F_LIBRARY, library to link against to use FFTW3f # FFTW3F_OMP_LIBRARY, library to link against to use FFTW3f_omp # FFTW3F_THREADS_LIBRARY, library to link against to use FFTW3f_threads # FFTW3F_FOUND, if false, do not try to use FFTW3f. +# FFTW3F_OMP_FOUND, if false, do not try to use OpenMP FFTW3f. +# FFTW3F_THREADS_FOUND, if false, do not try to use threaded FFTW3f. # --- # FFTW3Q_LIBRARY, library to link against to use FFTW3q # FFTW3Q_OMP_LIBRARY, library to link against to use FFTW3q_omp # FFTW3Q_THREADS_LIBRARY, library to link against to use FFTW3q_threads # FFTW3Q_FOUND, if false, do not try to use FFTW3q. +# FFTW3Q_OMP_FOUND, if false, do not try to use OpenMP FFTW3q. +# FFTW3Q_THREADS_FOUND, if false, do not try to use threaded FFTW3q. find_path(FFTW3_INCLUDE_DIR fftw3.h HINTS "/usr/include" "/opt/local/include" @@ -53,28 +61,82 @@ include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) find_package_handle_standard_args(FFTW3 REQUIRED_VARS FFTW3_LIBRARY FFTW3_INCLUDE_DIR VERSION_VAR "3") +find_package_handle_standard_args(FFTW3_OMP + REQUIRED_VARS FFTW3_OMP_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3_THREAD + REQUIRED_VARS FFTW3_THREAD_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") + find_package_handle_standard_args(FFTW3L REQUIRED_VARS FFTW3L_LIBRARY FFTW3_INCLUDE_DIR VERSION_VAR "3") +find_package_handle_standard_args(FFTW3L_OMP + REQUIRED_VARS FFTW3L_OMP_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3L_THREAD + REQUIRED_VARS FFTW3L_THREAD_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") + find_package_handle_standard_args(FFTW3F REQUIRED_VARS FFTW3F_LIBRARY FFTW3_INCLUDE_DIR VERSION_VAR "3") +find_package_handle_standard_args(FFTW3F_OMP + REQUIRED_VARS FFTW3F_OMP_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3F_THREAD + REQUIRED_VARS FFTW3F_THREAD_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") + find_package_handle_standard_args(FFTW3Q REQUIRED_VARS FFTW3Q_LIBRARY FFTW3_INCLUDE_DIR VERSION_VAR "3") +find_package_handle_standard_args(FFTW3Q_OMP + REQUIRED_VARS FFTW3Q_OMP_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") +find_package_handle_standard_args(FFTW3Q_THREAD + REQUIRED_VARS FFTW3Q_THREAD_LIBRARY FFTW3_INCLUDE_DIR + VERSION_VAR "3") if (NOT FFTW3_FOUND) unset(FFTW3_LIBRARY) endif() +if (NOT FFTW3_OMP_FOUND) + unset(FFTW3_OMP_LIBRARY) +endif() +if (NOT FFTW3_THREAD_FOUND) + unset(FFTW3_THREAD_LIBRARY) +endif() + if (NOT FFTW3L_FOUND) unset(FFTW3L_LIBRARY) endif() +if (NOT FFTW3L_OMP_FOUND) + unset(FFTW3L_OMP_LIBRARY) +endif() +if (NOT FFTW3L_THREAD_FOUND) + unset(FFTW3L_THREAD_LIBRARY) +endif() + if (NOT FFTW3F_FOUND) unset(FFTW3F_LIBRARY) endif() +if (NOT FFTW3F_OMP_FOUND) + unset(FFTW3F_OMP_LIBRARY) +endif() +if (NOT FFTW3F_THREAD_FOUND) + unset(FFTW3F_THREAD_LIBRARY) +endif() + if (NOT FFTW3Q_FOUND) unset(FFTW3Q_LIBRARY) endif() +if (NOT FFTW3Q_OMP_FOUND) + unset(FFTW3Q_OMP_LIBRARY) +endif() +if (NOT FFTW3Q_THREAD_FOUND) + unset(FFTW3Q_THREAD_LIBRARY) +endif() mark_as_advanced( FFTW3_INCLUDE_DIR From b57d67fe352585f8ee4367c2a296cb7e93477bb6 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 11 May 2018 17:11:32 +0200 Subject: [PATCH 40/99] more work towards full cmake support. Added necessary initial config.h generation. --- CMakeLists.txt | 34 +++++++++++++++++++++- cmake/config.h.in | 56 +++++++++++++++++++++++++++++++++++++ src/external/CMakeLists.txt | 2 -- 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 cmake/config.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b4c221b..b51e1c69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,27 @@ option(BNMRlibs "build optional beta-NMR libs" OFF) option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON) option(try_OpenMP "try to use OpenMP if available" ON) +#--- perform some checks and generate the config.h ---------------------------- +include(CheckIncludeFiles) +include(CheckFunctionExists) +check_include_files(alloca.h HAVE_ALLOCA_H) +check_include_files("sys/ipc.h;sys/shm.h" HAVE_SHMGET) +check_function_exists(fork HAVE_FORK) +check_include_files(dlfcn.h HAVE_DLFCN_H) +check_function_exists(erf HAVE_ERF) +check_function_exists(getloadavg HAVE_GETLOADAVG) +check_include_files(inttypes.h HAVE_INTTYPES_H) +check_include_files(memory.h HAVE_MEMORY_H) +check_function_exists(powl HAVE_POWL) +check_include_files(memory.h HAVE_MEMORY_H) +check_include_files(stdint.h HAVE_STDINT_H) +check_include_files(stdlib.h HAVE_STDLIB_H) +check_include_files(string.h HAVE_STRING_H) +check_include_files(strings.h HAVE_STRINGS_H) +check_include_files(sys/stat.h HAVE_SYS_STAT_H) +check_include_files(sys/types.h HAVE_SYS_TYPES_H) +check_include_files(sys/unistd.h HAVE_UNISTD_H) + #--- check for all the needed packages ---------------------------------------- #--- add path to my own find modules and other stuff @@ -39,6 +60,12 @@ find_package(GSL REQUIRED) #--- check for fftw3 ---------------------------------------------------------- find_package(FFTW3 REQUIRED) +if (FFTW3_THREAD_FOUND) + set(HAVE_LIBFFTW3_THREADS 1 CACHE INTERNAL "fftw3_threads are available") +endif (FFTW3_THREAD_FOUND) +if (FFTW3F_THREAD_FOUND) + set(HAVE_LIBFFTW3F_THREADS 1 CACHE INTERNAL "fftw3f_threads are available") +endif (FFTW3F_THREAD_FOUND) #--- check for libxml2 -------------------------------------------------------- find_package(LibXml2 REQUIRED) @@ -47,7 +74,8 @@ find_package(LibXml2 REQUIRED) if (try_OpenMP) find_package(OpenMP) if (OpenMP_FOUND) - add_definitions(-DHAVE_GOMP) +# add_definitions(-DHAVE_GOMP) + set(HAVE_GOMP 1 CACHE INTERNAL "Have GOMP") endif (OpenMP_FOUND) endif (try_OpenMP) @@ -86,6 +114,10 @@ endif (nexus) #--- check for Cuba lib if BMWlibs are enabled -------------------------------- #//as35 probably always stick to the internal one ... +#--- all checks done -> feed config.h ----------------------------------------- +set(HAVE_CONFIG_H 1 CACHE INTERNAL "config.h is available") +configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) + #--- propagate to the sub-directories ----------------------------------------- add_subdirectory(src) diff --git a/cmake/config.h.in b/cmake/config.h.in new file mode 100644 index 00000000..501ffa4b --- /dev/null +++ b/cmake/config.h.in @@ -0,0 +1,56 @@ +// config.h + +// define to 1 if you have and it should be used +#cmakedefine HAVE_ALLOCA_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_DLFCN_H 1 + +// Define to 1 if you have the `erf' function. +#cmakedefine HAVE_ERF 1 + +// Define to 1 if you have the `getloadavg' function. +#cmakedefine HAVE_GETLOADAVG 1 + +// Define to 1 if gomp is available */ +#cmakedefine HAVE_GOMP 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_INTTYPES_H 1 + +// Define to 1 if fftw3f_threads are available +#cmakedefine HAVE_LIBFFTW3F_THREADS 1 + +// Define to 1 if fftw3_threads are available +#cmakedefine HAVE_LIBFFTW3_THREADS 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_MEMORY_H 1 + +// Define to 1 if you have the `powl' function. +#cmakedefine HAVE_POWL 1 + +// Define to 1 if you have the `shmget' function. +#cmakedefine HAVE_SHMGET 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_STDINT_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_STDLIB_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_STRING_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_STRINGS_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_SYS_STAT_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_SYS_TYPES_H 1 + +// Define to 1 if you have the header file. +#cmakedefine HAVE_UNISTD_H 1 + diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 24319040..b01b1df8 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -6,9 +6,7 @@ if (ASlibs) endif (ASlibs) if (BMWlibs) -#[==[ add_subdirectory(libCuba) -#]==] add_subdirectory(BMWtools) add_subdirectory(libCalcMeanFieldsLEM) add_subdirectory(libFitPofB) From 2efa975de804d9571ed98e84ca9da2f993f26cae Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 11 May 2018 22:12:22 +0200 Subject: [PATCH 41/99] cmake: added musrfit version information to config.h. --- CMakeLists.txt | 2 +- cmake/config.h.in | 2 ++ src/CMakeLists.txt | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b51e1c69..17ecd971 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,7 @@ find_package(LibXml2 REQUIRED) if (try_OpenMP) find_package(OpenMP) if (OpenMP_FOUND) -# add_definitions(-DHAVE_GOMP) + add_definitions(-DHAVE_GOMP) set(HAVE_GOMP 1 CACHE INTERNAL "Have GOMP") endif (OpenMP_FOUND) endif (try_OpenMP) diff --git a/cmake/config.h.in b/cmake/config.h.in index 501ffa4b..03763f76 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -1,5 +1,7 @@ // config.h +#define PACKAGE_VERSION "@PROJECT_VERSION@" + // define to 1 if you have and it should be used #cmakedefine HAVE_ALLOCA_H 1 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d6fd6218..73276a6e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -47,19 +47,23 @@ add_custom_target( #--- add all executables ------------------------------------------------------ add_executable(any2many git-revision.h any2many.cpp) +target_compile_options(any2many BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(any2many BEFORE PRIVATE $ + $ $ $ ) target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(dump_header git-revision.h dump_header.cpp) +target_compile_options(dump_header BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(dump_header BEFORE PRIVATE $ $ + $ $ $ $ @@ -71,9 +75,11 @@ target_include_directories(dump_header target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(msr2data git-revision.h msr2data.cpp) +target_compile_options(msr2data BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(msr2data BEFORE PRIVATE $ + $ $ $ ) @@ -83,27 +89,33 @@ add_executable(msr2msr msr2msr.cpp) target_link_libraries(msr2msr ${ROOT_LIBRARIES}) add_executable(musrfit git-revision.h musrfit.cpp) +target_compile_options(musrfit BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(musrfit BEFORE PRIVATE $ + $ $ $ ) target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrFT git-revision.h musrFT.cpp) +target_compile_options(musrFT BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(musrFT BEFORE PRIVATE $ + $ $ $ ) target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrRootValidation git-revision.h musrRootValidation.cpp) +target_compile_options(musrRootValidation BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(musrRootValidation BEFORE PRIVATE $ + $ $ $ $ @@ -111,27 +123,33 @@ target_include_directories(musrRootValidation target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) add_executable(musrt0 git-revision.h musrt0.cpp) +target_compile_options(musrt0 BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(musrt0 BEFORE PRIVATE $ + $ $ $ ) target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(musrview git-revision.h musrview.cpp) +target_compile_options(musrview BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(musrview BEFORE PRIVATE $ + $ $ $ ) target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp) +target_compile_options(write_musrRoot_runHeader BEFORE PRIVATE "-DHAVE_CONFIG_H") target_include_directories(write_musrRoot_runHeader BEFORE PRIVATE $ + $ $ $ $ From 5f3cf3c64a562c913672bcc6d8fa2ed016fae081 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 11 May 2018 22:27:13 +0200 Subject: [PATCH 42/99] cmake: added first attempts to get cuba lib compiled as a shared lib (not successful yet). --- src/external/libCuba/CMakeLists.txt | 1 + src/external/libCuba/src/CMakeLists.txt | 45 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/external/libCuba/CMakeLists.txt create mode 100644 src/external/libCuba/src/CMakeLists.txt diff --git a/src/external/libCuba/CMakeLists.txt b/src/external/libCuba/CMakeLists.txt new file mode 100644 index 00000000..febd4f0a --- /dev/null +++ b/src/external/libCuba/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(src) diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt new file mode 100644 index 00000000..d2970a60 --- /dev/null +++ b/src/external/libCuba/src/CMakeLists.txt @@ -0,0 +1,45 @@ +# - cuba library -------------------------------------------------------------- + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(CUBA_VERSION "1.0.0") +set(CUBA_LIBRARY_NAME "cuba") +configure_file("cuba.pc.in" "cuba.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(cuba SHARED + cuhre/Cuhre.c + divonne/Divonne.c + suave/Suave.c + vegas/Vegas.c + common/WorkerIni.c +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + cuba BEFORE PRIVATE + $ + $ + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "") +if (HAVE_FORK) + set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") +endif (HAVE_FORK) +if (HAVE_ALLOCA_H) + set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") +endif (HAVE_ALLOCA_H) +if (HAVE_SHMGET) + set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") +endif (HAVE_SHMGET) + +target_compile_definitions( + cuba PRIVATE ${COMP_DEF} +) + From f6d8df74e1751e6b0b960bd7e93fb5a06620b119 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 12 May 2018 15:56:32 +0200 Subject: [PATCH 43/99] cmake: attempt to get the cuba library compiled as collection of object libraries. Compiles and links, but not yet tested. --- src/external/libCuba/src/CMakeLists.txt | 49 +++++++++---------- src/external/libCuba/src/common/stddecl.h | 2 +- src/external/libCuba/src/cuhre/CMakeLists.txt | 31 ++++++++++++ .../libCuba/src/divonne/CMakeLists.txt | 31 ++++++++++++ src/external/libCuba/src/suave/CMakeLists.txt | 31 ++++++++++++ src/external/libCuba/src/vegas/CMakeLists.txt | 31 ++++++++++++ 6 files changed, 147 insertions(+), 28 deletions(-) create mode 100644 src/external/libCuba/src/cuhre/CMakeLists.txt create mode 100644 src/external/libCuba/src/divonne/CMakeLists.txt create mode 100644 src/external/libCuba/src/suave/CMakeLists.txt create mode 100644 src/external/libCuba/src/vegas/CMakeLists.txt diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt index d2970a60..63201c5c 100644 --- a/src/external/libCuba/src/CMakeLists.txt +++ b/src/external/libCuba/src/CMakeLists.txt @@ -9,37 +9,32 @@ set(CUBA_VERSION "1.0.0") set(CUBA_LIBRARY_NAME "cuba") configure_file("cuba.pc.in" "cuba.pc" @ONLY) +add_subdirectory(cuhre) +add_subdirectory(divonne) +add_subdirectory(suave) +add_subdirectory(vegas) + #--- lib creation ------------------------------------------------------------- add_library(cuba SHARED - cuhre/Cuhre.c - divonne/Divonne.c - suave/Suave.c - vegas/Vegas.c - common/WorkerIni.c -) -#--- make sure that the include directory is found ---------------------------- -target_include_directories( - cuba BEFORE PRIVATE - $ - $ - $ - $ - $ + $ + $ + $ + $ ) -#--- check for pre compile flags ---------------------------------------------- -set(COMP_DEF "") -if (HAVE_FORK) - set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") -endif (HAVE_FORK) -if (HAVE_ALLOCA_H) - set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") -endif (HAVE_ALLOCA_H) -if (HAVE_SHMGET) - set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") -endif (HAVE_SHMGET) +#--- install cuba solib ------------------------------------------------------- +install(TARGETS cuba DESTINATION lib) -target_compile_definitions( - cuba PRIVATE ${COMP_DEF} +#--- install cuba header ------------------------------------------------------ +install( + FILES + cuba.h + DESTINATION + include ) +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/cuba.pc + DESTINATION lib/pkgconfig +) diff --git a/src/external/libCuba/src/common/stddecl.h b/src/external/libCuba/src/common/stddecl.h index fed006f3..6118aa0a 100644 --- a/src/external/libCuba/src/common/stddecl.h +++ b/src/external/libCuba/src/common/stddecl.h @@ -12,7 +12,7 @@ #include "config.h" #endif -#define _BSD_SOURCE +#define _DEFAULT_SOURCE #define _XOPEN_SOURCE #include diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt new file mode 100644 index 00000000..21bae662 --- /dev/null +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -0,0 +1,31 @@ +#--- cuhre -------------------------------------------------------------------- + +#--- obj lib creation --------------------------------------------------------- +add_library(cuhre OBJECT + Cuhre.c +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + cuhre BEFORE PRIVATE + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "") +if (HAVE_FORK) + set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") +endif (HAVE_FORK) +if (HAVE_ALLOCA_H) + set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") +endif (HAVE_ALLOCA_H) +if (HAVE_SHMGET) + set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") +endif (HAVE_SHMGET) + +target_compile_definitions( + cuhre PRIVATE ${COMP_DEF} +) + diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt new file mode 100644 index 00000000..0a0ce00a --- /dev/null +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -0,0 +1,31 @@ +#--- divonne ------------------------------------------------------------------ + +#--- obj lib creation --------------------------------------------------------- +add_library(divonne OBJECT + Divonne.c +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + divonne BEFORE PRIVATE + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "") +if (HAVE_FORK) + set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") +endif (HAVE_FORK) +if (HAVE_ALLOCA_H) + set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") +endif (HAVE_ALLOCA_H) +if (HAVE_SHMGET) + set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") +endif (HAVE_SHMGET) + +target_compile_definitions( + divonne PRIVATE ${COMP_DEF} +) + diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt new file mode 100644 index 00000000..b4417c15 --- /dev/null +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -0,0 +1,31 @@ +#--- suave -------------------------------------------------------------------- + +#--- obj lib creation --------------------------------------------------------- +add_library(suave OBJECT + Suave.c +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + suave BEFORE PRIVATE + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "") +if (HAVE_FORK) + set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") +endif (HAVE_FORK) +if (HAVE_ALLOCA_H) + set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") +endif (HAVE_ALLOCA_H) +if (HAVE_SHMGET) + set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") +endif (HAVE_SHMGET) + +target_compile_definitions( + suave PRIVATE ${COMP_DEF} +) + diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt new file mode 100644 index 00000000..8ceb2d9b --- /dev/null +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -0,0 +1,31 @@ +#--- vegas -------------------------------------------------------------------- + +#--- obj lib creation --------------------------------------------------------- +add_library(vegas OBJECT + Vegas.c +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + vegas BEFORE PRIVATE + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "") +if (HAVE_FORK) + set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") +endif (HAVE_FORK) +if (HAVE_ALLOCA_H) + set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") +endif (HAVE_ALLOCA_H) +if (HAVE_SHMGET) + set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") +endif (HAVE_SHMGET) + +target_compile_definitions( + vegas PRIVATE ${COMP_DEF} +) + From b5d446212fe36fbda71cc0aea270bc6e03cb1cab Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 11:12:17 +0200 Subject: [PATCH 44/99] added HAVE_FORK flag for libCuba. --- cmake/config.h.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/config.h.in b/cmake/config.h.in index 03763f76..5e85b16d 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -2,6 +2,9 @@ #define PACKAGE_VERSION "@PROJECT_VERSION@" +// define to 1 if you have fork and it should be used +#cmakedefine HAVE_FORK 1 + // define to 1 if you have and it should be used #cmakedefine HAVE_ALLOCA_H 1 From 557b562047706bacb7d362cc55821e94253f0f7d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 11:12:54 +0200 Subject: [PATCH 45/99] added missing header file. --- src/external/libCuba/src/common/Fork.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/external/libCuba/src/common/Fork.c b/src/external/libCuba/src/common/Fork.c index ac7d3047..51b18884 100644 --- a/src/external/libCuba/src/common/Fork.c +++ b/src/external/libCuba/src/common/Fork.c @@ -6,6 +6,8 @@ last modified 25 Sep 13 th */ +#include + #define MINSLICE 10 #define MINCORES 1 /*#define MINCORES 2*/ From 7a66d35055d3650554269888f233ce304dde4bf4 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 13:11:28 +0200 Subject: [PATCH 46/99] added missing include path --- src/external/libFitPofB/classes/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index c78096cf..12421a6c 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -66,6 +66,7 @@ target_include_directories( FitPofB BEFORE PRIVATE $ $ + $ $ $ $ From 9fd077cf6d32d75ff8ee77fde6133c9d45e79bb1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 14:54:19 +0200 Subject: [PATCH 47/99] corrections for the needed linked libraries. --- src/external/libCalcMeanFieldsLEM/CMakeLists.txt | 4 +++- src/external/libLFRelaxation/CMakeLists.txt | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt index ad194e2c..bfa48ca9 100644 --- a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -42,7 +42,9 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(CalcMeanFieldsLEM ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) +target_link_libraries(CalcMeanFieldsLEM + ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} BMWtools FitPofB PUserFcnBase +) #--- install CalcMeanFieldsLEM solib ------------------------------------------ install(TARGETS CalcMeanFieldsLEM DESTINATION lib) diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt index 2fbe411e..3fc4a3c4 100644 --- a/src/external/libLFRelaxation/CMakeLists.txt +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -25,13 +25,13 @@ configure_file("TLFRelaxation.pc.in" "TLFRelaxation.pc" @ONLY) #]==] #--- lib creation ------------------------------------------------------------- -add_library(TLFRelaxation SHARED +add_library(LFRelaxation SHARED TLFRelaxation.cpp TLFRelaxationDict.cxx ) #--- make sure that the include directory is found ---------------------------- target_include_directories( - TLFRelaxation BEFORE PRIVATE + LFRelaxation BEFORE PRIVATE $ $ $ @@ -39,10 +39,10 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(TLFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing +target_link_libraries(LFRelaxation ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing -#--- install TLFRelaxation solib ---------------------------------------------- -install(TARGETS TLFRelaxation DESTINATION lib) +#--- install LFRelaxation solib ----------------------------------------------- +install(TARGETS LFRelaxation DESTINATION lib) #--- install root pcm's and rootmaps ------------------------------------------ install( From 25d9adc8fcb7d6a2a4d5af326d446c7dd63d45bb Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 17:36:00 +0200 Subject: [PATCH 48/99] cmake: some more work towards full BMWlibs support. --- src/external/BMWtools/CMakeLists.txt | 2 +- src/external/CMakeLists.txt | 2 -- src/external/libCuba/src/CMakeLists.txt | 2 +- src/external/libZFRelaxation/CMakeLists.txt | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index 11219fe8..4326ee62 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -36,7 +36,7 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(BMWtools ${ROOT_LIBRARIES}) # //as35 cuba lib needs to be added here!! +target_link_libraries(BMWtools ${ROOT_LIBRARIES} cuba) #--- install BMWtools solib --------------------------------------------------- install(TARGETS BMWtools DESTINATION lib) diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index b01b1df8..2b510ec4 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -10,9 +10,7 @@ if (BMWlibs) add_subdirectory(BMWtools) add_subdirectory(libCalcMeanFieldsLEM) add_subdirectory(libFitPofB) -#[==[ add_subdirectory(libGapIntegrals) -#]==] add_subdirectory(libLFRelaxation) add_subdirectory(libZFRelaxation) endif (BMWlibs) diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt index 63201c5c..5253fda5 100644 --- a/src/external/libCuba/src/CMakeLists.txt +++ b/src/external/libCuba/src/CMakeLists.txt @@ -5,7 +5,7 @@ set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\$\{prefix\}") set(libdir "\$\{exec_prefix\}/lib") set(includedir "\$\{prefix\}/include") -set(CUBA_VERSION "1.0.0") +set(CUBA_VERSION "4.2.0") set(CUBA_LIBRARY_NAME "cuba") configure_file("cuba.pc.in" "cuba.pc" @ONLY) diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt index 5a45a757..30b067ad 100644 --- a/src/external/libZFRelaxation/CMakeLists.txt +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -39,7 +39,7 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(ZFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing +target_link_libraries(ZFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) #--- install ZFRelaxation solib ----------------------------------------------- install(TARGETS ZFRelaxation DESTINATION lib) From 326f40ce042c9d8e7ff9ffb35f2b03669ef4cd14 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 14 May 2018 20:16:38 +0200 Subject: [PATCH 49/99] cmake: add file to build gap intergral lib which is part of the BMW lib. --- src/external/libGapIntegrals/CMakeLists.txt | 71 +++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/external/libGapIntegrals/CMakeLists.txt diff --git a/src/external/libGapIntegrals/CMakeLists.txt b/src/external/libGapIntegrals/CMakeLists.txt new file mode 100644 index 00000000..ea67b173 --- /dev/null +++ b/src/external/libGapIntegrals/CMakeLists.txt @@ -0,0 +1,71 @@ +# - libGapIntegrals library --------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) +set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools) + +root_generate_dictionary( + TGapIntegralsDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + -I${BMW_TOOLS_INC} + TGapIntegrals.h + LINKDEF TGapIntegralsLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +#[==[ //as35 for now do not create a pkgconfig file +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(GAP_INTEGRALS_VERSION "1.0.0") +set(GAP_INTEGRALS_LIBRARY_NAME "GapIntegrals") +configure_file("GapIntegrals.pc.in" "GapIntegrals.pc" @ONLY) +#]==] + +#--- lib creation ------------------------------------------------------------- +add_library(GapIntegrals SHARED + TGapIntegrals.cpp + TGapIntegralsDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + GapIntegrals BEFORE PRIVATE + $ + $ + $ + $ +) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(GapIntegrals + ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools +) + +#--- install LFRelaxation solib ----------------------------------------------- +install(TARGETS GapIntegrals DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTGapIntegralsDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTGapIntegralsDict.rootmap + DESTINATION lib +) + +#--- install GapIntegrals header ---------------------------------------------- +install( + FILES + TGapIntegrals.h + DESTINATION + include +) + +#--- install pkg-config info -------------------------------------------------- +#[==[ //as35 for now do not install a pkgconfig file +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/GapIntegrals.pc + DESTINATION lib/pkgconfig +) +#]==] + From 1d191acd60c651fd297cd01edd1be8776d96565b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 16 May 2018 19:32:03 +0200 Subject: [PATCH 50/99] cmake: libCuba now containing the right symbols for c++/c. --- CMakeLists.txt | 7 +++++++ cmake/config.h.in | 6 ++++++ src/external/libCuba/src/cuhre/CMakeLists.txt | 15 ++++----------- src/external/libCuba/src/divonne/CMakeLists.txt | 13 +++---------- src/external/libCuba/src/suave/CMakeLists.txt | 13 +++---------- src/external/libCuba/src/vegas/CMakeLists.txt | 13 +++---------- 6 files changed, 26 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 17ecd971..01fe15cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrSte option(try_OpenMP "try to use OpenMP if available" ON) #--- perform some checks and generate the config.h ---------------------------- +include(CheckTypeSize) include(CheckIncludeFiles) include(CheckFunctionExists) check_include_files(alloca.h HAVE_ALLOCA_H) @@ -31,6 +32,12 @@ check_include_files(strings.h HAVE_STRINGS_H) check_include_files(sys/stat.h HAVE_SYS_STAT_H) check_include_files(sys/types.h HAVE_SYS_TYPES_H) check_include_files(sys/unistd.h HAVE_UNISTD_H) +check_type_size("long double" LONG_DOUBLE) +check_type_size("double" DOUBLE) +if (${LONG_DOUBLE} GREATER ${DOUBLE}) + set(HAVE_LONG_DOUBLE 1) + set(HAVE_LONG_DOUBLE_WIDER 1) +endif (${LONG_DOUBLE} GREATER ${DOUBLE}) #--- check for all the needed packages ---------------------------------------- diff --git a/cmake/config.h.in b/cmake/config.h.in index 5e85b16d..365a361c 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -23,6 +23,12 @@ // Define to 1 if you have the header file. #cmakedefine HAVE_INTTYPES_H 1 +// Define to 1 if the type `long double' works and has more range or precision than `double'. +#cmakedefine HAVE_LONG_DOUBLE 1 + +// Define to 1 if the type `long double' works and has more range or precision than `double'. +#cmakedefine HAVE_LONG_DOUBLE_WIDER 1 + // Define to 1 if fftw3f_threads are available #cmakedefine HAVE_LIBFFTW3F_THREADS 1 diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt index 21bae662..999b74cf 100644 --- a/src/external/libCuba/src/cuhre/CMakeLists.txt +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -1,29 +1,22 @@ #--- cuhre -------------------------------------------------------------------- #--- obj lib creation --------------------------------------------------------- -add_library(cuhre OBJECT +add_library(cuhre OBJECT Cuhre.c ) #--- make sure that the include directory is found ---------------------------- target_include_directories( cuhre BEFORE PRIVATE + $ $ $ $ ) #--- check for pre compile flags ---------------------------------------------- -set(COMP_DEF "") -if (HAVE_FORK) - set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") -endif (HAVE_FORK) -if (HAVE_ALLOCA_H) - set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") -endif (HAVE_ALLOCA_H) -if (HAVE_SHMGET) - set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") -endif (HAVE_SHMGET) +set(COMP_DEF "-DHAVE_CONFIG_H") +set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") target_compile_definitions( cuhre PRIVATE ${COMP_DEF} diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt index 0a0ce00a..b94089e4 100644 --- a/src/external/libCuba/src/divonne/CMakeLists.txt +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -8,22 +8,15 @@ add_library(divonne OBJECT #--- make sure that the include directory is found ---------------------------- target_include_directories( divonne BEFORE PRIVATE + $ $ $ $ ) #--- check for pre compile flags ---------------------------------------------- -set(COMP_DEF "") -if (HAVE_FORK) - set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") -endif (HAVE_FORK) -if (HAVE_ALLOCA_H) - set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") -endif (HAVE_ALLOCA_H) -if (HAVE_SHMGET) - set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") -endif (HAVE_SHMGET) +set(COMP_DEF "-DHAVE_CONFIG_H") +set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") target_compile_definitions( divonne PRIVATE ${COMP_DEF} diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt index b4417c15..c4ebdc24 100644 --- a/src/external/libCuba/src/suave/CMakeLists.txt +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -8,22 +8,15 @@ add_library(suave OBJECT #--- make sure that the include directory is found ---------------------------- target_include_directories( suave BEFORE PRIVATE + $ $ $ $ ) #--- check for pre compile flags ---------------------------------------------- -set(COMP_DEF "") -if (HAVE_FORK) - set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") -endif (HAVE_FORK) -if (HAVE_ALLOCA_H) - set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") -endif (HAVE_ALLOCA_H) -if (HAVE_SHMGET) - set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") -endif (HAVE_SHMGET) +set(COMP_DEF "-DHAVE_CONFIG_H") +set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") target_compile_definitions( suave PRIVATE ${COMP_DEF} diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt index 8ceb2d9b..f4635a3a 100644 --- a/src/external/libCuba/src/vegas/CMakeLists.txt +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -8,22 +8,15 @@ add_library(vegas OBJECT #--- make sure that the include directory is found ---------------------------- target_include_directories( vegas BEFORE PRIVATE + $ $ $ $ ) #--- check for pre compile flags ---------------------------------------------- -set(COMP_DEF "") -if (HAVE_FORK) - set(COMP_DEF ${COMP_DEF} "-DHAVE_FORK") -endif (HAVE_FORK) -if (HAVE_ALLOCA_H) - set(COMP_DEF ${COMP_DEF} "-DHAVE_ALLOCA_H") -endif (HAVE_ALLOCA_H) -if (HAVE_SHMGET) - set(COMP_DEF ${COMP_DEF} "-DHAVE_SHMGET") -endif (HAVE_SHMGET) +set(COMP_DEF "-DHAVE_CONFIG_H") +set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") target_compile_definitions( vegas PRIVATE ${COMP_DEF} From d8145d92d0f0a33b1017bacc065f2d6c0ea60cbf Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 17 May 2018 14:03:20 +0200 Subject: [PATCH 51/99] cmake: added missing stuff for the BMWlibs. --- src/external/BMWtools/CMakeLists.txt | 5 +++- src/external/libCuba/src/CMakeLists.txt | 2 ++ .../libCuba/src/common/CMakeLists.txt | 23 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/external/libCuba/src/common/CMakeLists.txt diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index 4326ee62..be9cdaa4 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -5,7 +5,10 @@ set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) set(CUBA_INC ${CMAKE_SOURCE_DIR}/src/external/libCuba/src) root_generate_dictionary( - BMWStartupHandlerDict BMWStartupHandler.h LINKDEF BMWStartupHandlerLinkDef.h + BMWStartupHandlerDict + -I${MUSRFIT_INC} + BMWStartupHandler.h + LINKDEF BMWStartupHandlerLinkDef.h ) #--- create pkg-config info --------------------------------------------------- diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt index 5253fda5..b29724a0 100644 --- a/src/external/libCuba/src/CMakeLists.txt +++ b/src/external/libCuba/src/CMakeLists.txt @@ -9,6 +9,7 @@ set(CUBA_VERSION "4.2.0") set(CUBA_LIBRARY_NAME "cuba") configure_file("cuba.pc.in" "cuba.pc" @ONLY) +add_subdirectory(common) add_subdirectory(cuhre) add_subdirectory(divonne) add_subdirectory(suave) @@ -16,6 +17,7 @@ add_subdirectory(vegas) #--- lib creation ------------------------------------------------------------- add_library(cuba SHARED + $ $ $ $ diff --git a/src/external/libCuba/src/common/CMakeLists.txt b/src/external/libCuba/src/common/CMakeLists.txt new file mode 100644 index 00000000..b991d841 --- /dev/null +++ b/src/external/libCuba/src/common/CMakeLists.txt @@ -0,0 +1,23 @@ +#--- workerini ---------------------------------------------------------------- + +#--- obj lib creation --------------------------------------------------------- +add_library(workerini OBJECT + WorkerIni.c +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + workerini BEFORE PRIVATE + $ + $ + $ +) + +#--- check for pre compile flags ---------------------------------------------- +set(COMP_DEF "-DHAVE_CONFIG_H") +set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") + +target_compile_definitions( + workerini PRIVATE ${COMP_DEF} +) + From 4061b7f24ffb5bfd138f4e4670ea565203f1ae8a Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 19 May 2018 18:02:27 +0200 Subject: [PATCH 52/99] upgrade the Cuba library from 3.2 -> 4.2 --- configure.ac | 6 +- src/external/BMWtools/BMWIntegrator.cpp | 42 +- src/external/libCuba/src/Makefile.am | 2 +- src/external/libCuba/src/common/CSample.c | 39 +- src/external/libCuba/src/common/ChiSquare.c | 10 +- src/external/libCuba/src/common/Erf.c | 8 +- src/external/libCuba/src/common/Fork.c | 494 +++++------------- src/external/libCuba/src/common/MSample.c | 22 +- src/external/libCuba/src/common/Makefile.am | 10 +- src/external/libCuba/src/common/Random.c | 21 +- src/external/libCuba/src/common/WorkerIni.c | 37 -- src/external/libCuba/src/common/stddecl.h | 170 ++++-- src/external/libCuba/src/cuba.h | 120 +++-- src/external/libCuba/src/cuhre/Cuhre.c | 29 +- src/external/libCuba/src/cuhre/Integrate.c | 26 +- src/external/libCuba/src/cuhre/Rule.c | 129 +++-- src/external/libCuba/src/cuhre/decl.h | 8 +- src/external/libCuba/src/divonne/Divonne.c | 28 +- src/external/libCuba/src/divonne/Explore.c | 21 +- .../libCuba/src/divonne/FindMinimum.c | 52 +- src/external/libCuba/src/divonne/Integrate.c | 46 +- src/external/libCuba/src/divonne/Iterate.c | 6 +- src/external/libCuba/src/divonne/Rule.c | 125 +++-- src/external/libCuba/src/divonne/Sample.c | 19 +- src/external/libCuba/src/divonne/Split.c | 20 +- src/external/libCuba/src/divonne/decl.h | 24 +- src/external/libCuba/src/suave/Fluct.c | 48 +- src/external/libCuba/src/suave/Grid.c | 4 +- src/external/libCuba/src/suave/Integrate.c | 45 +- src/external/libCuba/src/suave/Sample.c | 18 +- src/external/libCuba/src/suave/Suave.c | 36 +- src/external/libCuba/src/suave/decl.h | 11 +- src/external/libCuba/src/vegas/Grid.c | 4 +- src/external/libCuba/src/vegas/Integrate.c | 22 +- src/external/libCuba/src/vegas/Vegas.c | 34 +- src/external/libCuba/src/vegas/decl.h | 7 +- 36 files changed, 871 insertions(+), 872 deletions(-) delete mode 100644 src/external/libCuba/src/common/WorkerIni.c diff --git a/configure.ac b/configure.ac index 39ca5ca6..8b3cb01c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_REVISION([m4_esyscmd_s([git describe --always])]) AC_PREREQ(2.63) -AC_INIT([musrfit],[1.2.0],[andreas.suter@psi.ch]) +AC_INIT([musrfit],[1.2.1],[andreas.suter@psi.ch]) AC_CONFIG_AUX_DIR(admin) AC_CANONICAL_HOST #AC_MSG_RESULT([${host} ${host_cpu} ${host_vendor} ${host_os}]) @@ -36,7 +36,7 @@ dnl ----------------------------------------------- #release versioning MUSR_MAJOR_VERSION=1 MUSR_MINOR_VERSION=2 -MUSR_MICRO_VERSION=0 +MUSR_MICRO_VERSION=1 #release versioning MUSR_ROOT_MAJOR_VERSION=1 @@ -69,7 +69,7 @@ PLUGIN_MINOR_VERSION=0 PLUGIN_MICRO_VERSION=0 #release versioning -CUBA_MAJOR_VERSION=3 +CUBA_MAJOR_VERSION=4 CUBA_MINOR_VERSION=2 CUBA_MICRO_VERSION=0 diff --git a/src/external/BMWtools/BMWIntegrator.cpp b/src/external/BMWtools/BMWIntegrator.cpp index 63ae7a3c..96ce4154 100644 --- a/src/external/BMWtools/BMWIntegrator.cpp +++ b/src/external/BMWtools/BMWIntegrator.cpp @@ -31,6 +31,7 @@ #include "cuba.h" #define USERDATA NULL +#define SPIN NULL #define SEED 0 #define STATEFILE NULL @@ -45,6 +46,7 @@ std::vector TDWaveGapIntegralCuhre::fPar; double TDWaveGapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -57,9 +59,9 @@ double TDWaveGapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -96,6 +98,7 @@ std::vector TCosSqDWaveGapIntegralCuhre::fPar; double TCosSqDWaveGapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-8); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -108,9 +111,9 @@ double TCosSqDWaveGapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -147,6 +150,7 @@ std::vector TSinSqDWaveGapIntegralCuhre::fPar; double TSinSqDWaveGapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-8); const double EPSABS (1e-10); const unsigned int VERBOSE (0); @@ -159,9 +163,9 @@ double TSinSqDWaveGapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -198,6 +202,7 @@ std::vector TAnSWaveGapIntegralCuhre::fPar; double TAnSWaveGapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -210,9 +215,9 @@ double TAnSWaveGapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -249,6 +254,7 @@ std::vector TAnSWaveGapIntegralDivonne::fPar; double TAnSWaveGapIntegralDivonne::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -268,10 +274,10 @@ double TAnSWaveGapIntegralDivonne::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Divonne(fNDim, NCOMP, Integrand, USERDATA, + Divonne(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE, SEED, MINEVAL, MAXEVAL, KEY1, KEY2, KEY3, MAXPASS, BORDER, MAXCHISQ, MINDEVIATION, - NGIVEN, LDXGIVEN, NULL, NEXTRA, NULL, STATEFILE, + NGIVEN, LDXGIVEN, NULL, NEXTRA, NULL, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -308,6 +314,7 @@ std::vector TAnSWaveGapIntegralSuave::fPar; double TAnSWaveGapIntegralSuave::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -316,14 +323,15 @@ double TAnSWaveGapIntegralSuave::IntegrateFunc() const unsigned int MAXEVAL (1000000); const unsigned int NNEW (1000); + const unsigned int NMIN (2); const double FLATNESS (25.); int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Suave(fNDim, NCOMP, Integrand, USERDATA, + Suave(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, SEED, MINEVAL, MAXEVAL, - NNEW, FLATNESS, STATEFILE, + NNEW, NMIN, FLATNESS, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -360,6 +368,7 @@ std::vector TNonMonDWave1GapIntegralCuhre::fPar; double TNonMonDWave1GapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -372,9 +381,9 @@ double TNonMonDWave1GapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; @@ -411,6 +420,7 @@ std::vector TNonMonDWave2GapIntegralCuhre::fPar; double TNonMonDWave2GapIntegralCuhre::IntegrateFunc() { const unsigned int NCOMP(1); + const unsigned int NVEC(1); const double EPSREL (1e-4); const double EPSABS (1e-6); const unsigned int VERBOSE (0); @@ -423,9 +433,9 @@ double TNonMonDWave2GapIntegralCuhre::IntegrateFunc() int nregions, neval, fail; double integral[NCOMP], error[NCOMP], prob[NCOMP]; - Cuhre(fNDim, NCOMP, Integrand, USERDATA, + Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC, EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, - KEY, STATEFILE, + KEY, STATEFILE, SPIN, &nregions, &neval, &fail, integral, error, prob); return integral[0]; diff --git a/src/external/libCuba/src/Makefile.am b/src/external/libCuba/src/Makefile.am index 4a7d8f43..9771bde9 100644 --- a/src/external/libCuba/src/Makefile.am +++ b/src/external/libCuba/src/Makefile.am @@ -11,7 +11,7 @@ lib_LTLIBRARIES = libcuba.la libcuba_la_SOURCES = -libcuba_la_LIBADD = cuhre/libcuhre.la divonne/libdivonne.la suave/libsuave.la vegas/libvegas.la -lm +libcuba_la_LIBADD = common/libcommon.la cuhre/libcuhre.la divonne/libdivonne.la suave/libsuave.la vegas/libvegas.la -lm libcuba_la_LDFLAGS = -version-info $(CUBA_LIBRARY_VERSION) -release $(CUBA_RELEASE) $(AM_LDFLAGS) pkgconfigdir = $(libdir)/pkgconfig diff --git a/src/external/libCuba/src/common/CSample.c b/src/external/libCuba/src/common/CSample.c index 5705be06..dfdbae1e 100644 --- a/src/external/libCuba/src/common/CSample.c +++ b/src/external/libCuba/src/common/CSample.c @@ -3,19 +3,27 @@ the serial sampling routine for the C versions of the Cuba routines by Thomas Hahn - last modified 19 Dec 11 th + last modified 9 Oct 14 th */ -static inline number SampleRaw(cThis *t, number n, creal *x, real *f - VES_ONLY(, creal *w, ccount iter)) +coreinit cubafun_; +extern int cubaverb_; +extern corespec cubaworkers_; + + +static inline number SampleRaw(This *t, number n, creal *x, real *f, + cint core VES_ONLY(, creal *w, ccount iter)) { - for( ; n; --n ) { - if( t->integrand(&t->ndim, x, &t->ncomp, f, t->userdata - VES_ONLY(, w++, &iter) + number nvec; + for( nvec = t->nvec; n > 0; n -= nvec ) { + nvec = IMin(n, nvec); + if( t->integrand(&t->ndim, x, &t->ncomp, f, t->userdata, &nvec, &core + VES_ONLY(, w, &iter) DIV_ONLY(, &t->phase)) == ABORT ) return -1; - x += t->ndim; - f += t->ncomp; + VES_ONLY(w += nvec;) + x += nvec*t->ndim; + f += nvec*t->ncomp; } return 0; } @@ -25,8 +33,9 @@ static inline number SampleRaw(cThis *t, number n, creal *x, real *f static inline void DoSampleSerial(This *t, cnumber n, creal *x, real *f VES_ONLY(, creal *w, ccount iter)) { + MasterInit(); t->neval += n; - if( SampleRaw(t, n, x, f VES_ONLY(, w, iter)) ) + if( SampleRaw(t, n, x, f, -1 VES_ONLY(, w, iter)) ) longjmp(t->abort, -99); } @@ -43,7 +52,13 @@ DIV_ONLY(static int Explore(This *t, cint iregion);) #define DoSample DoSampleSerial #define Explore ExploreSerial #define ForkCores(t) -#define WaitCores(t) + +static inline void WaitCores(This *t, Spin **pspin) +{ + if( Invalid(pspin) ) MasterExit(); +} + +#define WaitCores(t, pspin) #endif @@ -51,7 +66,7 @@ DIV_ONLY(static int Explore(This *t, cint iregion);) static inline count SampleExtra(This *t, cBounds *b) { number n = t->nextra; - t->peakfinder(&t->ndim, b, &n, t->xextra); + t->peakfinder(&t->ndim, b, &n, t->xextra, t->userdata); DoSample(t, n, t->xextra, t->fextra); return n; } @@ -60,7 +75,7 @@ static inline count SampleExtra(This *t, cBounds *b) #include "common.c" #ifdef HAVE_FORK -#include "Fork.c" +#include "Parallel.c" #endif #include "Integrate.c" diff --git a/src/external/libCuba/src/common/ChiSquare.c b/src/external/libCuba/src/common/ChiSquare.c index baee4131..fc257887 100644 --- a/src/external/libCuba/src/common/ChiSquare.c +++ b/src/external/libCuba/src/common/ChiSquare.c @@ -3,7 +3,7 @@ the chi-square cdf after W.J. Kennedy and J.E. Gentle, Statistical computing, p. 116 - last modified 9 Feb 05 th + last modified 12 Mar 15 th */ #ifdef HAVE_ERF @@ -31,7 +31,7 @@ static real ChiSquare(creal x, cint df) if( df > 1000 ) { if( x < 2 ) return 0; y = 2./(9*df); - y = (pow(x/df, 1/3.) - (1 - y))/sqrt(y); + y = (powx(x/df, 1/3.) - (1 - y))/sqrtx(y); if( y > 5 ) return 1; if( y < -18.8055 ) return 0; return Normal(y); @@ -40,13 +40,13 @@ static real ChiSquare(creal x, cint df) y = .5*x; if( df & 1 ) { - creal sqrty = sqrt(y); + creal sqrty = sqrtx(y); real h = Erf(sqrty); count i; if( df == 1 ) return h; - y = sqrty*exp(-y)/.8862269254527579825931; + y = sqrty*expx(-y)/.8862269254527579825931; for( i = 3; i < df; i += 2 ) { h -= y; y *= x/i; @@ -54,7 +54,7 @@ static real ChiSquare(creal x, cint df) y = h - y; } else { - real term = exp(-y), sum = term; + real term = expx(-y), sum = term; count i; for( i = 1; i < df/2; ++i ) diff --git a/src/external/libCuba/src/common/Erf.c b/src/external/libCuba/src/common/Erf.c index 635b6e5c..c94d106d 100644 --- a/src/external/libCuba/src/common/Erf.c +++ b/src/external/libCuba/src/common/Erf.c @@ -4,7 +4,7 @@ = 2/Sqrt[Pi] Integrate[Exp[-t^2], {t, 0, x}] Code from Takuya Ooura's gamerf2a.f http://www.kurims.kyoto-u.ac.jp/~ooura/gamerf.html - last modified 8 Feb 05 th + last modified 12 Mar 15 th */ @@ -21,12 +21,12 @@ static real Erfc(creal x) 1.66642447174307753e-07, 1.48455557345597957e+01, 6.10399733098688199e+00, 1.26974899965115684e+01 }; real y = x*x; - y = exp(-y)*x*( + y = expx(-y)*x*( c[0]/(y + c[1]) + c[2]/(y + c[3]) + c[4]/(y + c[5]) + c[6]/(y + c[7]) + c[8]/(y + c[9]) + c[10]/(y + c[11]) + c[12]/(y + c[13]) + c[14]/(y + c[15]) ); - if( x < c[16] ) y += 2/(exp(c[17]*x) + 1); + if( x < c[16] ) y += 2/(expx(c[17]*x) + 1); return y; } @@ -40,7 +40,7 @@ static real Erf(creal x) -2.68661698447642378e-02, 5.22387877685618101e-03, -8.49202435186918470e-04 }; - real y = fabs(x); + real y = fabsx(x); if( y > .125 ) { y = 1 - Erfc(y); return (x > 0) ? y : -y; diff --git a/src/external/libCuba/src/common/Fork.c b/src/external/libCuba/src/common/Fork.c index 51b18884..99605d25 100644 --- a/src/external/libCuba/src/common/Fork.c +++ b/src/external/libCuba/src/common/Fork.c @@ -1,391 +1,98 @@ /* Fork.c - the parallel sampling routine - for the C versions of the Cuba routines + fork the cores for parallel sampling + (C version only) by Thomas Hahn - last modified 25 Sep 13 th + last modified 23 Apr 15 th */ -#include -#define MINSLICE 10 +#define ROUTINE "cubafork" +#include "stddecl.h" + +#ifdef HAVE_FORK + +#include "sock.h" + #define MINCORES 1 -/*#define MINCORES 2*/ -typedef struct { - number n, m, i; - VES_ONLY(count iter;) - DIV_ONLY(int phase SHM_ONLY(, shmid);) -} Slice; +coreinit cubafun_; +extern int cubaverb_; +extern corespec cubaworkers_; -workerini cubaini; +/*********************************************************************/ -#if defined HAVE_SHMGET && (defined SUAVE || defined DIVONNE) -#define FRAMECOPY -#endif +static inline void Child(cint fd, cint core) +{ + dispatch d; -#ifdef DEBUG -#define TERM_RED "\e[31m" -#define TERM_BLUE "\e[34m" -#define TERM_RESET "\e[0m\n" -#define MASTER(s, ...) \ -fprintf(stderr, TERM_RED ROUTINE " master %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__) -#define WORKER(s, ...) \ -fprintf(stderr, TERM_BLUE ROUTINE " worker %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__) + while( readsock(fd, &d, sizeof d) == sizeof d ) { + if( d.thissize ) { + MemAlloc(d.thisptr, d.thissize); + WORKER("reading This (%lu)", d.thissize); + readsock(fd, d.thisptr, d.thissize); + } + WORKER("running %p on fd %d", d.thisptr, fd); + d.worker(d.thisptr, d.thissize, core, fd); + if( d.thissize ) free(d.thisptr); + } +} + +/*********************************************************************/ + +Extern void SUFFIX(cubafork)(Spin **pspin) +{ + char out[128]; + int cores, core; + fdpid *pfp; + Spin *spin; + + VerboseInit(); + + EnvInit(cubaworkers_.paccel, "CUBAACCELMAX", 1000); + EnvInit(cubaworkers_.pcores, "CUBACORESMAX", 10000); + EnvInit(cubaworkers_.naccel, "CUBAACCEL", 0); + EnvInit(cubaworkers_.ncores, "CUBACORES", -sysconf(_SC_NPROCESSORS_ONLN)); + +#ifdef HAVE_GETLOADAVG + if( cubaworkers_.ncores < 0 ) { + static int load = uninitialized; + if( load == uninitialized ) { + double loadavg; + getloadavg(&loadavg, 1); + load = floor(loadavg); + } + cubaworkers_.ncores = IMax(-cubaworkers_.ncores - load, 0); + } #else -#define MASTER(s, ...) -#define WORKER(s, ...) + cubaworkers_.ncores = abs(cubaworkers_.ncores); #endif -/*********************************************************************/ - -#ifndef MSG_WAITALL -/* Windows */ -#define MSG_WAITALL 0 -#endif - -static inline int readsock(int fd, void *data, size_t n) -{ - ssize_t got; - size_t remain = n; - do got = recv(fd, data, remain, MSG_WAITALL); - while( got > 0 && (data += got, remain -= got) > 0 ); - return got; -} - -static inline int writesock(int fd, const void *data, size_t n) -{ - ssize_t got; - size_t remain = n; - do got = send(fd, data, remain, MSG_WAITALL); - while( got > 0 && (data += got, remain -= got) > 0 ); - return got; -} - -/*********************************************************************/ - -static void DoSample(This *t, number n, creal *x, real *f - VES_ONLY(, creal *w, ccount iter)) -{ - cint ncores = IMin(t->ncores, n/MINSLICE); - - if( ncores < MINCORES ) DoSampleSerial(t, n, x, f VES_ONLY(, w, iter)); - else { - Slice slice; - int core, abort; - number nx; - char s[128]; - - t->neval += n; - - nx = n % ncores; - slice.m = slice.n = n/ncores + 1; - if( VERBOSE > 2 ) { - sprintf(s, "sampling " NUMBER " points each on %d cores", - slice.n, ncores); - Print(s); - } - - slice.i = 0; - VES_ONLY(slice.iter = iter;) - DIV_ONLY(slice.phase = t->phase;) - -#ifdef DIVONNE - if( n > t->nframe ) { - FrameFree(t, ShmRm(t)); - t->nframe = n; - FrameAlloc(t); - } - SHM_ONLY(slice.shmid = t->shmid;) -#endif - - SHM_ONLY(if( t->shmid != -1 ) { - slice.m = n; -#ifdef FRAMECOPY - VES_ONLY(Copy(t->frame, w, n);) - Copy(t->frame + n*NW, x, n*t->ndim); -#endif - }) - - for( core = 0; core < ncores; ++core ) { - cint fd = t->child[core]; - slice.n -= (core == nx); - MASTER("sending samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+") - NUMBER "x:%lu]) to fd %d", - sizeof slice, VES_ONLY(slice.n, sizeof *w,) - slice.n, t->ndim*sizeof *x, fd); - writesock(fd, &slice, sizeof slice); - SHM_ONLY(if( t->shmid == -1 )) { - VES_ONLY(writesock(fd, w, slice.n*sizeof *w); - w += slice.n;) - writesock(fd, x, slice.n*t->ndim*sizeof *x); - x += slice.n*t->ndim; - } - slice.i += slice.n; - } - - abort = 0; - for( core = 0; core < ncores; ++core ) { - cint fd = t->child[core]; - readsock(fd, &slice, sizeof slice); - MASTER("reading samples (sli:%lu[+" NUMBER "f:%lu]) from fd %d", - sizeof slice, slice.n, t->ncomp*sizeof *f, fd); - if( slice.n == -1 ) abort = 1; - else SHM_ONLY(if( t->shmid == -1 )) readsock(fd, - f + slice.i*t->ncomp, slice.n*t->ncomp*sizeof *f); - } - if( abort ) longjmp(t->abort, -99); - -#ifdef FRAMECOPY - if( t->shmid != -1 ) - Copy(f, t->frame + slice.m*(NW + t->ndim), slice.m*t->ncomp); -#endif - } -} - -/*********************************************************************/ - -#ifdef DIVONNE - -static inline int ReadyCore(cThis *t) -{ - fd_set ready; - int core, n = 0; - - FD_ZERO(&ready); - for( core = 0; core < t->ncores; ++core ) { - FD_SET(t->child[core], &ready); - n = IMax(n, t->child[core]); - } - select(n + 1, &ready, NULL, NULL, NULL); - - for( core = 0; core < t->ncores; ++core ) - if( FD_ISSET(t->child[core], &ready) ) break; - - return core; -} - -/*********************************************************************/ - -typedef struct { - number neval, neval_opt, neval_cut; - count nregions, iregion, retval; -} ExploreResult; - -static int Explore(This *t, cint iregion) -{ - csize_t regionsize = RegionSize; - Region *region; - int ireg = iregion, core = t->running; - Vector(Totals, totals, NCOMP); - - if( t->ncores < MINCORES ) return ExploreSerial(t, iregion); - - if( t->running >= ((iregion < 0) ? 1 : t->ncores) ) { - cint fd = t->child[core = ReadyCore(t)]; - ExploreResult res; - count comp, succ; - - --t->running; - MASTER("reading res + region (res:%lu+reg:%lu) from fd %d", - sizeof res, regionsize, fd); - readsock(fd, &res, sizeof res); - ireg = res.iregion; - region = RegionPtr(ireg); - succ = ireg + region->next; - readsock(fd, region, regionsize); - if( --res.nregions > 0 ) { - region->next = t->nregions - ireg; - EnlargeRegions(t, res.nregions); - MASTER("reading regions (%dreg:%lu) from fd %d", - res.nregions, regionsize, fd); - readsock(fd, RegionPtr(t->nregions), res.nregions*regionsize); - t->nregions += res.nregions; - - RegionPtr(t->nregions-1)->next = succ - t->nregions + 1; - } - - MASTER("reading totals (tot:%lu) from fd %d", - t->ncomp*sizeof(Totals), fd); - readsock(fd, totals, t->ncomp*sizeof(Totals)); - for( comp = 0; comp < t->ncomp; ++comp ) - t->totals[comp].secondspread = - Max(t->totals[comp].secondspread, totals[comp].secondspread); - - t->neval += res.neval; - t->neval_opt += res.neval_opt; - t->neval_cut += res.neval_cut; - - if( res.retval == -1 ) return -1; + cores = cubaworkers_.naccel + cubaworkers_.ncores; + if( cores < MINCORES ) { + *pspin = NULL; + return; } - if( iregion >= 0 ) { - Slice slice; - cint fd = t->child[core]; - slice.n = 0; - slice.i = iregion; - slice.phase = t->phase; - region = RegionPtr(iregion); - MASTER("writing region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) to fd %d", - sizeof slice, sizeof(Samples), regionsize, - t->ncomp*sizeof(Totals), fd); - writesock(fd, &slice, sizeof slice); - writesock(fd, &t->samples[region->isamples], sizeof(Samples)); - writesock(fd, region, regionsize); - writesock(fd, t->totals, t->ncomp*sizeof(Totals)); - region->depth = 0; - ++t->running; - } - - return ireg; -} -#endif - -/*********************************************************************/ - -static void DoChild(This *t, cint core, cint fd) -{ - Slice slice; - -#ifdef DIVONNE - csize_t regionsize = RegionSize; - Vector(Totals, totals, NCOMP); - ExploreResult res; - - t->totals = totals; - t->ncores = 0; /* no recursive forks */ - t->size = 2*t->ndim + 2; - AllocRegions(t); -#endif - -#ifdef SUAVE - SHM_ONLY(if( t->shmid == -1 )) - MemAlloc(t->frame, t->nframe*SAMPLESIZE); -#endif - - if( cubaini.initfun ) cubaini.initfun(cubaini.initarg); - - while( readsock(fd, &slice, sizeof slice) ) { - number n = slice.n; - DIV_ONLY(t->phase = slice.phase;) - if( n > 0 ) { - real VES_ONLY(*w,) *x, *f; - WORKER("reading samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+") - NUMBER "x:%lu]) from fd %d", - sizeof slice, VES_ONLY(n, sizeof *w,) n, t->ndim*sizeof *x, fd); - -#ifdef DIVONNE - if( slice.m > t->nframe ) { - FrameFree(t); - t->nframe = slice.m; - SHM_ONLY(t->shmid = slice.shmid; ShmMap(t) else) - MemAlloc(t->frame, t->nframe*SAMPLESIZE); - } -#endif - - VES_ONLY(w = t->frame;) - x = t->frame + slice.m*NW; - f = x + slice.m*t->ndim; - - SHM_ONLY(if( t->shmid != -1 ) { - VES_ONLY(w += slice.i;) - x += slice.i*t->ndim; - f += slice.i*t->ncomp; - } - else) { - VES_ONLY(readsock(fd, w, n*sizeof *w);) - readsock(fd, x, n*t->ndim*sizeof *x); - } - - slice.n |= SampleRaw(t, n, x, f VES_ONLY(, w, slice.iter)); - WORKER("writing samples (sli:%lu[+" NUMBER "f:%lu]) to fd %d", - sizeof slice, slice.n, t->ncomp*sizeof *f, fd); - writesock(fd, &slice, sizeof slice); - if( SHM_ONLY(t->shmid == -1 &&) slice.n != -1 ) - writesock(fd, f, slice.n*t->ncomp*sizeof *f); - } -#ifdef DIVONNE - else { - Samples *samples, psamples; - - WORKER("reading region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) from fd %d", - sizeof slice, sizeof(Samples), regionsize, - t->ncomp*sizeof(Totals), fd); - readsock(fd, &psamples, sizeof(Samples)); - readsock(fd, t->region, regionsize); - readsock(fd, totals, t->ncomp*sizeof(Totals)); - t->nregions = 1; - t->neval = t->neval_opt = t->neval_cut = 0; - - samples = &t->samples[RegionPtr(0)->isamples]; - if( psamples.n != samples->n ) { - SamplesFree(samples); - *samples = psamples; - SamplesAlloc(t, samples); - } - - res.retval = ExploreSerial(t, 0); - res.neval = t->neval; - res.neval_opt = t->neval_opt; - res.neval_cut = t->neval_cut; - res.nregions = t->nregions; - res.iregion = slice.i; - WORKER("writing regions (res:%lu+%dreg:%lu+tot:%lu) to fd %d", - sizeof res, t->nregions, regionsize, - t->ncomp*sizeof(Totals), fd); - writesock(fd, &res, sizeof res); - writesock(fd, t->region, t->nregions*regionsize); - writesock(fd, totals, t->ncomp*sizeof(Totals)); - } -#endif - } - - WORKER("wrapping up"); - if( cubaini.exitfun ) cubaini.exitfun(cubaini.exitarg); - - exit(0); -} - -/*********************************************************************/ - -#ifdef HAVE_GETLOADAVG -double cubaloadavg_; -#endif - -static inline void ForkCores(This *t) -{ - int core; - char s[128]; - cchar *env = getenv("CUBACORES"); - - t->ncores = env ? atoi(env) : sysconf(_SC_NPROCESSORS_ONLN); -#ifdef HAVE_GETLOADAVG - if( env == NULL || t->ncores < 0 ) { - if( cubaloadavg_ < 0 ) getloadavg(&cubaloadavg_, 1); - t->ncores = abs(t->ncores) - floor(cubaloadavg_); - } -#endif - - DIV_ONLY(t->running = 0;) - - if( t->ncores < MINCORES ) return; - if( VERBOSE ) { - sprintf(s, "using %d cores via " + if( cubaverb_ ) { + sprintf(out, "using %d cores %d accelerators via " #ifdef HAVE_SHMGET "shared memory", #else "pipes", #endif - t->ncores); - Print(s); + cubaworkers_.ncores, cubaworkers_.naccel); + Print(out); } fflush(NULL); /* make sure all buffers are flushed, or else buffered content will be written out multiply, at each child's exit(0) */ - Alloc(t->child, t->ncores); - for( core = 0; core < t->ncores; ++core ) { + MemAlloc(spin, sizeof *spin + cores*sizeof *spin->fp); + spin->spec = cubaworkers_; + pfp = spin->fp; + for( core = -spin->spec.naccel; core < spin->spec.ncores; ++core ) { int fd[2]; pid_t pid; assert( @@ -393,32 +100,65 @@ static inline void ForkCores(This *t) (pid = fork()) != -1 ); if( pid == 0 ) { close(fd[0]); - DoChild(t, core, fd[1]); + free(spin); + Child(fd[1], core); + exit(0); } MASTER("forked pid %d pipe %d(master) -> %d(worker)", pid, fd[0], fd[1]); close(fd[1]); - t->child[core] = fd[0]; + pfp->fd = fd[0]; + pfp->pid = pid; + ++pfp; } + + *pspin = spin; } /*********************************************************************/ -static inline void WaitCores(cThis *t) +Extern void SUFFIX(cubawait)(Spin **pspin) { - if( t->ncores >= MINCORES ) { - int core; - pid_t pid; - for( core = 0; core < t->ncores; ++core ) { - MASTER("closing fd %d", t->child[core]); - close(t->child[core]); - } - free(t->child); - for( core = 0; core < t->ncores; ++core ) { - MASTER("waiting for child"); - wait(&pid); - MASTER("pid %d terminated", pid); - } + int cores, core, status; + Spin *spin; + + MasterExit(); + + if( Invalid(pspin) || (spin = *pspin) == NULL ) return; + + cores = spin->spec.naccel + spin->spec.ncores; + + for( core = 0; core < cores; ++core ) { + MASTER("closing fd %d", spin->fp[core].fd); + close(spin->fp[core].fd); } + +#ifdef KILL_WORKERS + for( core = 0; core < cores; ++core ) { + MASTER("killing pid %d", spin->fp[core].pid); + kill(spin->fp[core].pid, SIGKILL); + } +#endif + + for( core = 0; core < cores; ++core ) { + DEB_ONLY(pid_t pid;) + MASTER("waiting for child"); + DEB_ONLY(pid =) wait(&status); + MASTER("pid %d terminated with exit code %d", pid, status); + } + + free(spin); + *pspin = NULL; } +#else + +Extern void SUFFIX(cubafork)(Spin **pspin) {} + +Extern void SUFFIX(cubawait)(Spin **pspin) +{ + MasterExit(); +} + +#endif + diff --git a/src/external/libCuba/src/common/MSample.c b/src/external/libCuba/src/common/MSample.c index 4c146346..e0c48142 100644 --- a/src/external/libCuba/src/common/MSample.c +++ b/src/external/libCuba/src/common/MSample.c @@ -3,7 +3,7 @@ the sampling routine for the Mathematica versions of the Cuba routines by Thomas Hahn - last modified 19 Mar 12 th + last modified 13 Mar 15 th */ @@ -11,20 +11,20 @@ static void DoSample(This *t, cnumber n, real *x, real *f VES_ONLY(, real *w, ccount iter)) { real *mma_f; - long mma_n; + int mma_n; if( MLAbort ) longjmp(t->abort, -99); MLPutFunction(stdlink, "EvaluatePacket", 1); MLPutFunction(stdlink, "Cuba`" ROUTINE "`sample", 1 VES_ONLY(+2) DIV_ONLY(+1)); - MLPutRealList(stdlink, x, n*t->ndim); - VES_ONLY(MLPutRealList(stdlink, w, n); + MLPutRealxList(stdlink, x, n*t->ndim); + VES_ONLY(MLPutRealxList(stdlink, w, n); MLPutInteger(stdlink, iter);) DIV_ONLY(MLPutInteger(stdlink, t->phase);) MLEndPacket(stdlink); MLNextPacket(stdlink); - if( !MLGetRealList(stdlink, &mma_f, &mma_n) ) { + if( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) { MLClearError(stdlink); MLNewPacket(stdlink); longjmp(t->abort, -99); @@ -33,12 +33,12 @@ static void DoSample(This *t, cnumber n, real *x, real *f t->neval += mma_n; if( mma_n != n*t->ncomp ) { - MLDisownRealList(stdlink, mma_f, mma_n); + MLReleaseRealxList(stdlink, mma_f, mma_n); longjmp(t->abort, -3); } Copy(f, mma_f, n*t->ncomp); - MLDisownRealList(stdlink, mma_f, mma_n); + MLReleaseRealxList(stdlink, mma_f, mma_n); } /*********************************************************************/ @@ -50,16 +50,16 @@ static count SampleExtra(This *t, cBounds *b) { count n, nget; real *mma_f; - long mma_n; + int mma_n; MLPutFunction(stdlink, "EvaluatePacket", 1); MLPutFunction(stdlink, "Cuba`Divonne`findpeak", 2); - MLPutRealList(stdlink, (real *)b, 2*t->ndim); + MLPutRealxList(stdlink, (real *)b, 2*t->ndim); MLPutInteger(stdlink, t->phase); MLEndPacket(stdlink); MLNextPacket(stdlink); - if( !MLGetRealList(stdlink, &mma_f, &mma_n) ) { + if( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) { MLClearError(stdlink); MLNewPacket(stdlink); longjmp(t->abort, -99); @@ -73,7 +73,7 @@ static count SampleExtra(This *t, cBounds *b) Copy(t->fextra, mma_f + nget*t->ndim, n*t->ncomp); } - MLDisownRealList(stdlink, mma_f, mma_n); + MLReleaseRealxList(stdlink, mma_f, mma_n); return n; } diff --git a/src/external/libCuba/src/common/Makefile.am b/src/external/libCuba/src/common/Makefile.am index cdf87141..d7f70508 100644 --- a/src/external/libCuba/src/common/Makefile.am +++ b/src/external/libCuba/src/common/Makefile.am @@ -1,12 +1,14 @@ ## Process this file with automake to create Makefile.in -c_sources = WorkerIni.c +c_sources = \ + Global.c \ + Data.c AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) -noinst_LTLIBRARIES = libworkerini.la +noinst_LTLIBRARIES = libcommon.la -libworkerini_la_SOURCES = $(c_sources) -libworkerini_la_LDFLAGS = $(AM_LDFLAGS) +libcommon_la_SOURCES = $(c_sources) +libcommon_la_LDFLAGS = $(AM_LDFLAGS) diff --git a/src/external/libCuba/src/common/Random.c b/src/external/libCuba/src/common/Random.c index 4c2777c2..6d606157 100644 --- a/src/external/libCuba/src/common/Random.c +++ b/src/external/libCuba/src/common/Random.c @@ -1,7 +1,7 @@ /* Random.c quasi- and pseudo-random-number generation - last modified 7 Aug 13 th + last modified 18 Mar 14 th */ @@ -88,14 +88,13 @@ static inline void SobolIni(This *t) 299, 1, 3, 3, 9, 9, 25, 107, 39 }; count dim, bit, nbits; - number max, *pini = ini; - cnumber nmax = 2*t->maxeval; + number *pini = ini, max; - for( nbits = 0, max = 1; max <= nmax; max <<= 1 ) ++nbits; - t->rng.sobol.norm = 1./max; + for( nbits = 0, max = t->maxeval; max; max >>= 1 ) ++nbits; + t->rng.sobol.norm = ldexp(.5, -nbits); - for( bit = 0; bit < nbits; ++bit ) - t->rng.sobol.v[0][bit] = (max >>= 1); + for( bit = 0; bit <= nbits; ++bit ) + t->rng.sobol.v[0][bit] = (number)1 << (nbits - bit); for( dim = 1; dim < t->ndim; ++dim ) { number *pv = t->rng.sobol.v[dim], *pvv = pv; @@ -103,10 +102,10 @@ static inline void SobolIni(This *t) int inibits = -1, bit; for( j = powers; j; j >>= 1 ) ++inibits; - memcpy(pv, pini, inibits*sizeof(*pini)); + memcpy(pv, pini, inibits*sizeof *pini); pini += 8; - for( bit = inibits; bit < nbits; ++bit ) { + for( bit = inibits; bit <= nbits; ++bit ) { number newv = *pvv, j = powers; int b; for( b = 0; b < inibits; ++b ) { @@ -117,8 +116,8 @@ static inline void SobolIni(This *t) ++pvv; } - for( bit = 0; bit < nbits - 1; ++bit ) - pv[bit] <<= nbits - bit - 1; + for( bit = 0; bit < nbits; ++bit ) + pv[bit] <<= nbits - bit; } t->rng.sobol.seq = 0; diff --git a/src/external/libCuba/src/common/WorkerIni.c b/src/external/libCuba/src/common/WorkerIni.c deleted file mode 100644 index 52c9978a..00000000 --- a/src/external/libCuba/src/common/WorkerIni.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - WorkerIni.c - set/run the init/exit functions for worker processes - by Thomas Hahn - last modified 6 Sep 12 th -*/ - - -#include "stddecl.h" - -extern workerini cubaini; - -Extern void SUFFIX(cubasetinit)(subroutine f, void *arg) -{ - cubaini.initfun = f; - cubaini.initarg = arg; -} - - -Extern void SUFFIX(cubasetexit)(subroutine f, void *arg) -{ - cubaini.exitfun = f; - cubaini.exitarg = arg; -} - - -Extern void SUFFIX(cubaruninit)() -{ - if( cubaini.initfun ) cubaini.initfun(cubaini.initarg); -} - - -Extern void SUFFIX(cubarunexit)() -{ - if( cubaini.exitfun ) cubaini.exitfun(cubaini.exitarg); -} - diff --git a/src/external/libCuba/src/common/stddecl.h b/src/external/libCuba/src/common/stddecl.h index 6118aa0a..e5d046ff 100644 --- a/src/external/libCuba/src/common/stddecl.h +++ b/src/external/libCuba/src/common/stddecl.h @@ -1,7 +1,7 @@ /* stddecl.h declarations common to all Cuba routines - last modified 17 Sep 13 th + last modified 23 Apr 15 th */ @@ -13,7 +13,6 @@ #endif #define _DEFAULT_SOURCE -#define _XOPEN_SOURCE #include #include @@ -30,6 +29,7 @@ #ifdef HAVE_FORK #include #include +#include #ifdef HAVE_SHMGET #include #include @@ -83,10 +83,31 @@ void *alloca (size_t); #define SAMPLESIZE (NW + t->ndim + t->ncomp)*sizeof(real) + +enum { uninitialized = 0x61627563 }; + +#define EnvInit(var, name, default) \ + if( var == uninitialized ) { \ + cchar *env = getenv(name); \ + if( env == NULL ) var = default; \ + else { \ + var = atoi(env); \ + if( cubaverb_ ) { \ + char out[64]; \ + sprintf(out, "env " name " = %d", (int)var); \ + Print(out); \ + } \ + } \ + } + +#define VerboseInit() EnvInit(cubaverb_, "CUBAVERBOSE", 0) +#define MaxVerbose(flags) (flags + IDim(IMin(cubaverb_, 3) - ((flags) & 3))) + #define VERBOSE (t->flags & 3) #define LAST (t->flags & 4) #define SHARPEDGES (t->flags & 8) #define KEEPFILE (t->flags & 16) +#define ZAPSTATE (t->flags & 32) #define REGIONS (t->flags & 128) #define RNG (t->flags >> 8) @@ -120,7 +141,7 @@ void *alloca (size_t); #define Zap(d) memset(d, 0, sizeof(d)) -#define MaxErr(avg) Max(t->epsrel*fabs(avg), t->epsabs) +#define MaxErr(avg) Max(t->epsrel*fabsx(avg), t->epsabs) #ifdef __cplusplus #define mallocset(p, n) (*(void **)&p = malloc(n)) @@ -157,8 +178,21 @@ void *alloca (size_t); #ifdef MLVERSION #define ML_ONLY(...) __VA_ARGS__ +#define ML_NOT(...) #else #define ML_ONLY(...) +#define ML_NOT(...) __VA_ARGS__ + +#define CORE_MASTER (int []){32768} +#define MasterInit() do if( !cubafun_.init ) { \ + cubafun_.init = true; \ + if( cubafun_.initfun ) cubafun_.initfun(cubafun_.initarg, CORE_MASTER); \ +} while( 0 ) +#define MasterExit() do if( cubafun_.init ) { \ + cubafun_.init = false; \ + if( cubafun_.exitfun ) cubafun_.exitfun(cubafun_.exitarg, CORE_MASTER); \ +} while( 0 ) +#define Invalid(s) ((s) == NULL || *(int *)(s) == -1) #ifdef HAVE_FORK #undef FORK_ONLY @@ -168,37 +202,40 @@ void *alloca (size_t); #undef SHM_ONLY #define SHM_ONLY(...) __VA_ARGS__ -#define ShmMap(t, ...) if( t->shmid != -1 ) { \ - t->frame = shmat(t->shmid, NULL, 0); \ - if( t->frame == (void *)-1 ) Abort("shmat"); \ - __VA_ARGS__ \ -} - -#define ShmRm(t) shmctl(t->shmid, IPC_RMID, NULL); +#define MasterAlloc(t) \ + t->shmid = shmget(IPC_PRIVATE, t->nframe*SAMPLESIZE, IPC_CREAT | 0600) +#define MasterFree(t) shmctl(t->shmid, IPC_RMID, NULL) +#define WorkerAlloc(t) +#define WorkerFree(r) #undef ShmAlloc -#define ShmAlloc(t, ...) \ - t->shmid = shmget(IPC_PRIVATE, t->nframe*SAMPLESIZE, IPC_CREAT | 0600); \ - ShmMap(t, __VA_ARGS__) +#define ShmAlloc(t, who) \ + who##Alloc(t); \ + if( t->shmid != -1 ) { \ + t->frame = shmat(t->shmid, NULL, 0); \ + if( t->frame == (void *)-1 ) Abort("shmat"); \ + } #undef ShmFree -#define ShmFree(t, ...) if( t->shmid != -1 ) { \ - shmdt(t->frame); \ - __VA_ARGS__ \ -} +#define ShmFree(t, who) \ + if( t->shmid != -1 ) { \ + shmdt(t->frame); \ + who##Free(t); \ + } #endif #endif #endif -#define FrameAlloc(t, ...) \ - SHM_ONLY(ShmAlloc(t, __VA_ARGS__) else) \ +#define FrameAlloc(t, who) \ + SHM_ONLY(ShmAlloc(t, who) else) \ MemAlloc(t->frame, t->nframe*SAMPLESIZE); -#define FrameFree(t, ...) DIV_ONLY(if( t->nframe )) { \ - SHM_ONLY(ShmFree(t, __VA_ARGS__) else) \ - free(t->frame); \ -} +#define FrameFree(t, who) \ + DIV_ONLY(if( t->nframe )) { \ + SHM_ONLY(ShmFree(t, who) else) \ + free(t->frame); \ + } #define StateDecl \ @@ -219,7 +256,9 @@ struct stat st typedef long long int signature_t; -#define StateSignature(t, i) (0x41425543 + \ +enum { signature = 0x41425543 }; + +#define StateSignature(t, i) (signature + \ ((signature_t)(i) << 60) + \ ((signature_t)(t)->ncomp << 48) + \ ((signature_t)(t)->ndim << 32)) @@ -306,39 +345,100 @@ typedef const count ccount; #define PREFIX(s) ll##s #define NUMBER "%lld" #define NUMBER7 "%7lld" +#define NUMBER_MAX LLONG_MAX typedef long long int number; #else #define PREFIX(s) s #define NUMBER "%d" #define NUMBER7 "%7d" +#define NUMBER_MAX INT_MAX typedef int number; #endif typedef const number cnumber; #define REAL "%g" #define REALF "%f" -typedef /*long*/ double real; - /* Switching to long double is not as trivial as it - might seem here. sqrt, erf, exp, pow need to be - replaced by their long double versions (sqrtl, ...), - printf formats need to be updated similarly, and - ferrying long doubles to Mathematica is of course - quite another matter, too. */ +#define SHOW(r) (double)(r) + /* floating-point numbers are printed with SHOW */ + +#if REALSIZE == 16 +#include +typedef __float128 real; +#define RC(x) x##Q +#define sqrtx sqrtq +#define expx expq +#define powx powq +#define erfx erfq +#define fabsx fabsq +#define ldexpx ldexpq +#define REAL_MAX_EXP FLT128_MAX_EXP +#define REAL_MAX FLT128_MAX +#elif REALSIZE == 10 +typedef long double real; +#define RC(x) x##L +#define sqrtx sqrtl +#define expx expl +#define powx powl +#define erfx erfl +#define fabsx fabsl +#define ldexpx ldexpl +#define REAL_MAX_EXP LDBL_MAX_EXP +#define REAL_MAX LDBL_MAX +#define MLPutRealxList MLPutReal128List +#define MLGetRealxList MLGetReal128List +#define MLReleaseRealxList MLReleaseReal128List +#else +typedef double real; +#define RC(x) x +#define sqrtx sqrt +#define expx exp +#define powx pow +#define erfx erf +#define fabsx fabs +#define ldexpx ldexp +#define REAL_MAX_EXP DBL_MAX_EXP +#define REAL_MAX DBL_MAX +#define MLPutRealxList MLPutReal64List +#define MLGetRealxList MLGetReal64List +#define MLReleaseRealxList MLReleaseReal64List +#endif typedef const real creal; -typedef void (*subroutine)(); +typedef void (*subroutine)(void *, cint *); typedef struct { subroutine initfun; void *initarg; subroutine exitfun; void *exitarg; -} workerini; + bool init; +} coreinit; + +typedef struct { + int ncores, naccel; + int pcores, paccel; +} corespec; + +typedef struct { + int fd, pid; +} fdpid; + +typedef struct { + corespec spec; + fdpid fp[]; +} Spin; struct _this; +typedef struct { + void (*worker)(struct _this *, csize_t, cint, cint); + struct _this *thisptr; + size_t thissize; +} dispatch; + + typedef unsigned int state_t; #define SOBOL_MINDIM 1 @@ -407,7 +507,7 @@ static inline real Max(creal a, creal b) { } static inline real Weight(creal sum, creal sqsum, cnumber n) { - creal w = sqrt(sqsum*n); + creal w = sqrtx(sqsum*n); return (n - 1)/Max((w + sum)*(w - sum), NOTZERO); } @@ -452,7 +552,7 @@ static inline void Print(MLCONST char *s) #else -#define Print(s) puts(s); fflush(stdout) +#define Print(s) { puts(s); fflush(stdout); } #endif diff --git a/src/external/libCuba/src/cuba.h b/src/external/libCuba/src/cuba.h index 48b1c7ac..5e87ef1a 100644 --- a/src/external/libCuba/src/cuba.h +++ b/src/external/libCuba/src/cuba.h @@ -2,116 +2,122 @@ cuba.h Prototypes for the Cuba library this file is part of Cuba - last modified 30 Apr 13 th + last modified 13 Mar 15 th */ +typedef double cubareal; + + /* integrand_t is intentionally a minimalistic integrand type. + It includes neither the nvec and core arguments nor the + extra arguments passed by Vegas/Suave (weight, iter) and + Divonne (phase). + In most cases, integrand_t is just what you want, otherwise + simply use an explicit typecast to integrand_t in the Cuba + invocation. */ +typedef int (*integrand_t)(const int *ndim, const cubareal x[], + const int *ncomp, cubareal f[], void *userdata); + +typedef void (*peakfinder_t)(const int *ndim, const cubareal b[], + int *n, cubareal x[], void *userdata); + #ifdef __cplusplus extern "C" { #endif - /* NB: Divonne actually passes a fifth argument, a const int * - which points to the integration phase. This is used only - rarely and most users are confused by the warnings the - compiler emits if the `correct' prototype is used. Thus, - if you need to access this argument, use an explicit cast - to integrand_t when invoking Divonne. */ -typedef int (*integrand_t)(const int *ndim, const double x[], - const int *ncomp, double f[], void *userdata); - -typedef void (*peakfinder_t)(const int *ndim, const double b[], - int *n, double x[]); - void Vegas(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const int mineval, const int maxeval, const int nstart, const int nincrease, const int nbatch, - const int gridno, const char *statefile, + const int gridno, const char *statefile, void *spin, int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void llVegas(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const long long int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const long long int mineval, const long long int maxeval, const long long int nstart, const long long int nincrease, const long long int nbatch, - const int gridno, const char *statefile, + const int gridno, const char *statefile, void *spin, long long int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void Suave(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const int mineval, const int maxeval, - const int nnew, const double flatness, - const char *statefile, + const int nnew, const int nmin, + const cubareal flatness, const char *statefile, void *spin, int *nregions, int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void llSuave(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const long long int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const long long int mineval, const long long int maxeval, - const long long int nnew, const double flatness, - const char *statefile, + const long long int nnew, const long long int nmin, + const cubareal flatness, const char *statefile, void *spin, int *nregions, long long int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void Divonne(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const int mineval, const int maxeval, const int key1, const int key2, const int key3, const int maxpass, - const double border, const double maxchisq, const double mindeviation, - const int ngiven, const int ldxgiven, double xgiven[], + const cubareal border, const cubareal maxchisq, const cubareal mindeviation, + const int ngiven, const int ldxgiven, cubareal xgiven[], const int nextra, peakfinder_t peakfinder, - const char *statefile, + const char *statefile, void *spin, int *nregions, int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void llDivonne(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const long long int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int seed, const long long int mineval, const long long int maxeval, const int key1, const int key2, const int key3, const int maxpass, - const double border, const double maxchisq, const double mindeviation, - const long long int ngiven, const int ldxgiven, double xgiven[], - const long long int nextra, - void (*peakfinder)(const int *, const double [], int *, double []), - const char *statefile, + const cubareal border, const cubareal maxchisq, const cubareal mindeviation, + const long long int ngiven, const int ldxgiven, cubareal xgiven[], + const long long int nextra, peakfinder_t peakfinder, + const char *statefile, void *spin, int *nregions, long long int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void Cuhre(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const int mineval, const int maxeval, const int key, - const char *statefile, + const char *statefile, void *spin, int *nregions, int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); void llCuhre(const int ndim, const int ncomp, - integrand_t integrand, void *userdata, - const double epsrel, const double epsabs, + integrand_t integrand, void *userdata, const long long int nvec, + const cubareal epsrel, const cubareal epsabs, const int flags, const long long int mineval, const long long int maxeval, const int key, - const char *statefile, + const char *statefile, void *spin, int *nregions, long long int *neval, int *fail, - double integral[], double error[], double prob[]); + cubareal integral[], cubareal error[], cubareal prob[]); -void cubasetinit(void (*)(), void *); -void cubasetexit(void (*)(), void *); -void cubaruninit(void); -void cubaruninit(void); +void cubafork(void *pspin); +void cubawait(void *pspin); + +void cubacores(const int n, const int p); +void cubaaccel(const int n, const int p); + +void cubainit(void (*f)(), void *arg); +void cubaexit(void (*f)(), void *arg); #ifdef __cplusplus } diff --git a/src/external/libCuba/src/cuhre/Cuhre.c b/src/external/libCuba/src/cuhre/Cuhre.c index 33e17f62..6dc0aaa1 100644 --- a/src/external/libCuba/src/cuhre/Cuhre.c +++ b/src/external/libCuba/src/cuhre/Cuhre.c @@ -2,7 +2,7 @@ Cuhre.c Adaptive integration using cubature rules by Thomas Hahn - last modified 17 Sep 13 th + last modified 22 Jul 14 th */ @@ -15,55 +15,70 @@ /*********************************************************************/ Extern void EXPORT(Cuhre)(ccount ndim, ccount ncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber nvec, creal epsrel, creal epsabs, cint flags, cnumber mineval, cnumber maxeval, - ccount key, cchar *statefile, + ccount key, cchar *statefile, Spin **pspin, count *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob) { This t; + + VerboseInit(); + t.ndim = ndim; t.ncomp = ncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = nvec; t.epsrel = epsrel; t.epsabs = epsabs; - t.flags = flags; + t.flags = MaxVerbose(flags); t.mineval = mineval; t.maxeval = maxeval; t.key = key; t.statefile = statefile; + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } /*********************************************************************/ Extern void EXPORT(cuhre)(ccount *pndim, ccount *pncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber *pnvec, creal *pepsrel, creal *pepsabs, cint *pflags, cnumber *pmineval, cnumber *pmaxeval, - ccount *pkey, cchar *statefile, + ccount *pkey, cchar *statefile, Spin **pspin, count *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob, cint statefilelen) { This t; + + VerboseInit(); + t.ndim = *pndim; t.ncomp = *pncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = *pnvec; t.epsrel = *pepsrel; t.epsabs = *pepsabs; - t.flags = *pflags; + t.flags = MaxVerbose(*pflags); t.mineval = *pmineval; t.maxeval = *pmaxeval; t.key = *pkey; CString(t.statefile, statefile, statefilelen); + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } + diff --git a/src/external/libCuba/src/cuhre/Integrate.c b/src/external/libCuba/src/cuhre/Integrate.c index 25c40225..27fc7e2c 100644 --- a/src/external/libCuba/src/cuhre/Integrate.c +++ b/src/external/libCuba/src/cuhre/Integrate.c @@ -3,7 +3,7 @@ integrate over the unit hypercube this file is part of Cuhre checkpointing by B. Chokoufe - last modified 17 Sep 13 th + last modified 14 Mar 15 th */ @@ -11,6 +11,9 @@ typedef struct pool { struct pool *next; +#if REALSIZE > 8 + void *dummy; /* for alignment */ +#endif char region[]; } Pool; @@ -42,12 +45,14 @@ static int Integrate(This *t, real *integral, real *error, real *prob) if( VERBOSE > 1 ) { sprintf(out, "Cuhre input parameters:\n" " ndim " COUNT "\n ncomp " COUNT "\n" + ML_NOT(" nvec " NUMBER "\n") " epsrel " REAL "\n epsabs " REAL "\n" " flags %d\n mineval " NUMBER "\n maxeval " NUMBER "\n" " key " COUNT "\n" " statefile \"%s\"", t->ndim, t->ncomp, - t->epsrel, t->epsabs, + ML_NOT(t->nvec,) + SHOW(t->epsrel), SHOW(t->epsabs), t->flags, t->mineval, t->maxeval, t->key, t->statefile); @@ -61,7 +66,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) RuleAlloc(t); t->mineval = IMax(t->mineval, t->rule.n + 1); - FrameAlloc(t, ShmRm(t)); + FrameAlloc(t, Master); ForkCores(t); if( (fail = setjmp(t->abort)) ) goto abort; @@ -125,7 +130,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob) for( tot = state->totals, comp = 0; tot < Tot; ++tot ) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)", - ++comp, tot->avg, tot->err, tot->chisq, t->nregions - 1); + ++comp, SHOW(tot->avg), SHOW(tot->err), + SHOW(tot->chisq), t->nregions - 1); Print(out); } @@ -188,7 +194,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) tot->lastavg += diff = resL->avg + resR->avg - res->avg; - diff = fabs(.25*diff); + diff = fabsx(.25*diff); err = resL->err + resR->err; if( err > 0 ) { creal c = 1 + 2*diff/err; @@ -213,7 +219,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) } else { tot->avg = avg; - tot->err = sqrt(sigsq); + tot->err = sqrtx(sigsq); } } ++t->nregions; @@ -249,13 +255,13 @@ static int Integrate(This *t, real *integral, real *error, real *prob) Result *Res; MLPutFunction(stdlink, "Cuba`Cuhre`region", 2); - MLPutRealList(stdlink, (real *)region->bounds, 2*t->ndim); + MLPutRealxList(stdlink, (real *)region->bounds, 2*t->ndim); MLPutFunction(stdlink, "List", t->ncomp); for( Res = (res = RegionResult(region)) + t->ncomp; res < Res; ++res ) { real r[] = {res->avg, res->err}; - MLPutRealList(stdlink, r, Elements(r)); + MLPutRealxList(stdlink, r, Elements(r)); } } } @@ -266,9 +272,7 @@ abort: cur = cur->next; free(pool); } - - WaitCores(t); - FrameFree(t); + FrameFree(t, Master); RuleFree(t); StateRemove(t); diff --git a/src/external/libCuba/src/cuhre/Rule.c b/src/external/libCuba/src/cuhre/Rule.c index e3e931f3..129e9689 100644 --- a/src/external/libCuba/src/cuhre/Rule.c +++ b/src/external/libCuba/src/cuhre/Rule.c @@ -4,11 +4,12 @@ code lifted with minor modifications from DCUHRE by J. Berntsen, T. Espelid, and A. Genz this file is part of Cuhre - last modified 5 Aug 13 th + last modified 7 May 15 th */ #define NextSet(p) p = (Set *)((char *)p + setsize) +#define IndexSet(p, n) ((Set *)((char *)p + n*setsize)) /*********************************************************************/ @@ -153,7 +154,7 @@ static void Rule13Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -298,7 +299,7 @@ static void Rule11Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -309,32 +310,55 @@ static void Rule11Alloc(This *t) static void Rule9Alloc(This *t) { static creal w[] = { - -.0023611709677855117884, .11415390023857325268, - -.63833920076702389094, .74849988504685208004, - -.0014324017033399125142, .057471507864489725949, - -.14225104571434243234, -.062875028738286979989, - .254591133248959089, -1.207328566678236261, - .89567365764160676508, -.36479356986049146661, - .0035417564516782676826, -.072609367395893679605, - .10557491625218991012, .0021486025550098687713, - -.032268563892953949998, .010636783990231217481, - .014689102496143490175, .51134708346467591431, - .45976448120806344646, .18239678493024573331, - -.04508628929435784076, .21415883524352793401, - -.027351546526545644722, .054941067048711234101, - .11937596202570775297, .65089519391920250593, - .14744939829434460168, .057693384490973483573, - .034999626602143583822, -1.3868627719278281436, - -.2386668732575008879, .015532417276607053264, - .0035328099607090870236, .09231719987444221619, - .02254314464717892038, .013675773263272822361, - -.32544759695960125297, .0017708782258391338413, - .0010743012775049343856, .25150011495314791996 }; + RC(-.002361170967785511788400941242259231309691), + RC(.1141539002385732526821323741697655347686), + RC(-.6383392007670238909386026193674701393074), + RC(.7484998850468520800423030047583803945205), + RC(-.001432401703339912514196154599769007103671), + RC(.05747150786448972594860897296200006759892), + RC(-.1422510457143424323449521620935950679394), + RC(-.06287502873828697998942424881040490136987), + RC(.2545911332489590890011611142429070613156), + RC(-1.207328566678236261002219995185143356737), + RC(.8956736576416067650809467826488567200939), + RC(-.3647935698604914666100134551377381205297), + RC(.003541756451678267682601411863388846964536), + RC(-.07260936739589367960492815865074633743652), + RC(.1055749162521899101218622863269817454540), + RC(.002148602555009868771294231899653510655506), + RC(-.03226856389295394999786630399875134318006), + RC(.01063678399023121748083624225818915724455), + RC(.01468910249614349017540783437728097691502), + RC(.5113470834646759143109387357149329909126), + RC(.4597644812080634464633352781605214342691), + RC(.1823967849302457333050067275688690602649), + RC(-.04508628929435784075980562738240804429658), + RC(.2141588352435279340097929526588394300172), + RC(-.02735154652654564472203690086290223507436), + RC(.05494106704871123410060080562462135546101), + RC(.1193759620257077529708962121565290178730), + RC(.6508951939192025059314756320878023215278), + RC(.1474493982943446016775696826942585013243), + RC(.05769338449097348357291272840392627722165), + RC(.03499962660214358382244159694487155861542), + RC(-1.386862771927828143599782668709014266770), + RC(-.2386668732575008878964134721962088068396), + RC(.01553241727660705326386197156586357005224), + RC(.003532809960709087023561817517751309380604), + RC(.09231719987444221619017126187763868745587), + RC(.02254314464717892037990281369120402214829), + RC(.01367577326327282236101845043145111753718), + RC(-.3254475969596012529657378160439011607639), + RC(.001770878225839133841300705931694423482268), + RC(.001074301277504934385647115949826755327753), + RC(.2515001149531479199576969952416196054795) }; static creal g[] = { - .47795365790226950619, .20302858736911986780, - .44762735462617812882, .125, - .34303789878087814570 }; + RC(.4779536579022695061928604197171830064732), + RC(.2030285873691198677998034402373279133258), + RC(.4476273546261781288207704806530998539285), + RC(.125), + RC(.3430378987808781457001426145164678603407) }; enum { nsets = 9 }; @@ -440,7 +464,7 @@ static void Rule9Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -451,21 +475,33 @@ static void Rule9Alloc(This *t) static void Rule7Alloc(This *t) { static creal w[] = { - .019417866674748388428, -.40385257701150182546, - .64485668767465982223, .01177982690775806141, - -.18041318740733609012, -.088785828081335044443, - .056328645808285941374, -.0097089333373741942142, - -.99129176779582358138, -.17757165616267008889, - .12359398032043233572, .074978148702033690681, - .55489147051423559776, .088041241522692771226, - .021118358455513385083, -.0099302203239653333087, - -.064100053285010904179, .030381729038221007659, - .0058899134538790307051, -.0048544666686870971071, - .35514331232534017777 }; + RC(.01941786667474838842844534313920462333850), + RC(-.4038525770115018254611834753723880293161), + RC(.6448566876746598222277360730193089551024), + RC(.01177982690775806141012214458820955067854), + RC(-.1804131874073360901182293138710989490609), + RC(-.08878582808133504444306598174517276122439), + RC(.05632864580828594137378124255408286479947), + RC(-.009708933337374194214222671569602311669249), + RC(-.9912917677958235813775106862002319060386), + RC(-.1775716561626700888861319634903455224488), + RC(.1235939803204323357183625846672135876752), + RC(.07497814870203369068087999555157339703666), + RC(.5548914705142355977605994477355651401434), + RC(.08804124152269277122645182458858273865209), + RC(.02111835845551338508329573367808085283304), + RC(-.009930220323965333308685820460105538586058), + RC(-.06410005328501090417895544042025034295870), + RC(.03038172903822100765927778829870429682489), + RC(.005889913453879030705061072294104775339268), + RC(-.004854466668687097107111335784801155834624), + RC(.3551433123253401777722639269806910448976) }; static creal g[] = { - .47795365790226950619, .20302858736911986780, - .375, .34303789878087814570 }; + RC(.4779536579022695061928604197171830064732), + RC(.2030285873691198677998034402373279133258), + RC(.375), + RC(.3430378987808781457001426145164678603407) }; enum { nsets = 6 }; @@ -541,7 +577,7 @@ static void Rule7Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -630,7 +666,8 @@ static void Sample(This *t, Region *region) Bounds *b, *B = region->bounds + t->ndim; Result *result = RegionResult(region), *res, *Res = result + t->ncomp; creal *errcoeff = t->rule.errcoeff; - creal ratio = Sq(first[2].gen[0]/first[1].gen[0]); + creal ratio = Sq(IndexSet(first,2)->gen[0]/ + IndexSet(first,1)->gen[0]); ccount offset = 2*t->ndim*t->ncomp; count dim, rul, n, maxdim = 0; @@ -659,7 +696,7 @@ static void Sample(This *t, Region *region) for( dim = 0; dim < t->ndim; ++dim ) { creal *fp = f1 + t->ncomp; creal *fm = fp + t->ncomp; - creal fourthdiff = fabs(base + + creal fourthdiff = fabsx(base + ratio*(fp[0] + fm[0]) - (fp[offset] + fm[offset])); f1 = fm; if( fourthdiff > maxdiff ) { @@ -688,7 +725,7 @@ static void Sample(This *t, Region *region) real maxerr = 0; for( s = first; s <= last; NextSet(s) ) maxerr = Max(maxerr, - fabs(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]); + fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]); sum[rul] = maxerr; } @@ -712,7 +749,7 @@ static void Sample(This *t, Region *region) for( res = result, comp = 0; res < Res; ++res ) oe += sprintf(oe, "\n[" COUNT "] " - REAL " +- " REAL, ++comp, res->avg, res->err); + REAL " +- " REAL, ++comp, SHOW(res->avg), SHOW(res->err)); Print(out); } diff --git a/src/external/libCuba/src/cuhre/decl.h b/src/external/libCuba/src/cuhre/decl.h index c846e9d2..bf924ba0 100644 --- a/src/external/libCuba/src/cuhre/decl.h +++ b/src/external/libCuba/src/cuhre/decl.h @@ -2,7 +2,7 @@ decl.h Type declarations this file is part of Cuhre - last modified 26 Jul 13 th + last modified 21 Jul 14 th */ @@ -47,16 +47,18 @@ typedef struct { typedef const Rule cRule; -typedef int (*Integrand)(ccount *, creal *, ccount *, real *, void *); +typedef int (*Integrand)(ccount *, creal *, ccount *, real *, + void *, cnumber *, cint *); typedef struct _this { count ndim, ncomp; #ifndef MLVERSION Integrand integrand; void *userdata; + number nvec; #ifdef HAVE_FORK - int ncores, *child; SHM_ONLY(int shmid;) + Spin *spin; #endif #endif real *frame; diff --git a/src/external/libCuba/src/divonne/Divonne.c b/src/external/libCuba/src/divonne/Divonne.c index a0577cc6..444dddde 100644 --- a/src/external/libCuba/src/divonne/Divonne.c +++ b/src/external/libCuba/src/divonne/Divonne.c @@ -4,7 +4,7 @@ originally by J.H. Friedman and M.H. Wright (CERNLIB subroutine D151) this version by Thomas Hahn - last modified 17 Sep 13 th + last modified 22 Jul 14 th */ #define DIVONNE @@ -16,7 +16,7 @@ /*********************************************************************/ Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber nvec, creal epsrel, creal epsabs, cint flags, cint seed, cnumber mineval, cnumber maxeval, @@ -24,18 +24,22 @@ Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp, creal border, creal maxchisq, creal mindeviation, cnumber ngiven, ccount ldxgiven, real *xgiven, cnumber nextra, PeakFinder peakfinder, - cchar *statefile, + cchar *statefile, Spin **pspin, int *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob) { This t; + + VerboseInit(); + t.ndim = ndim; t.ncomp = ncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = nvec; t.epsrel = epsrel; t.epsabs = epsabs; - t.flags = flags; + t.flags = MaxVerbose(flags); t.seed = seed; t.mineval = mineval; t.maxeval = maxeval; @@ -52,16 +56,19 @@ Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp, t.nextra = nextra; t.peakfinder = peakfinder; t.statefile = statefile; + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } /*********************************************************************/ Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber *pnvec, creal *pepsrel, creal *pepsabs, cint *pflags, cint *pseed, cnumber *pmineval, cnumber *pmaxeval, @@ -69,18 +76,22 @@ Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp, creal *pborder, creal *pmaxchisq, creal *pmindeviation, cnumber *pngiven, ccount *pldxgiven, real *xgiven, cnumber *pnextra, PeakFinder peakfinder, - cchar *statefile, + cchar *statefile, Spin **pspin, int *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob, cint statefilelen) { This t; + + VerboseInit(); + t.ndim = *pndim; t.ncomp = *pncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = *pnvec; t.epsrel = *pepsrel; t.epsabs = *pepsabs; - t.flags = *pflags; + t.flags = MaxVerbose(*pflags); t.seed = *pseed; t.mineval = *pmineval; t.maxeval = *pmaxeval; @@ -97,9 +108,12 @@ Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp, t.nextra = *pnextra; t.peakfinder = peakfinder; CString(t.statefile, statefile, statefilelen); + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } diff --git a/src/external/libCuba/src/divonne/Explore.c b/src/external/libCuba/src/divonne/Explore.c index 4f27ac25..e29520cb 100644 --- a/src/external/libCuba/src/divonne/Explore.c +++ b/src/external/libCuba/src/divonne/Explore.c @@ -2,7 +2,7 @@ Explore.c sample region, determine min and max, split if necessary this file is part of Divonne - last modified 2 Aug 13 th + last modified 12 Mar 15 th */ @@ -19,10 +19,11 @@ static int ExploreSerial(This *t, ccount iregion) Region *region = RegionPtr(iregion); cBounds *bounds = region->bounds; Result *result = RegionResult(region); + real *minmax = RegionMinMax(region); Vector(Extrema, extrema, NCOMP); Vector(real, xtmp, NDIM); - Result *r, *r0; + Result *r; creal *x; real *f; real halfvol, maxerr; @@ -102,7 +103,7 @@ skip: ftmp = FindMinimum(t, bounds, xtmp, e->fmin); if( ftmp < r->fmin ) { r->fmin = ftmp; - XCopy(&r->xminmax[0], xtmp); + XCopy(&minmax[2*comp*t->ndim], xtmp); } t->selectedcomp = Tag(comp); @@ -110,12 +111,12 @@ skip: ftmp = -FindMinimum(t, bounds, xtmp, -e->fmax); if( ftmp > r->fmax ) { r->fmax = ftmp; - XCopy(&r->xminmax[t->ndim], xtmp); + XCopy(&minmax[(2*comp + 1)*t->ndim], xtmp); } } r->spread = halfvol*(r->fmax - r->fmin); - err = r->spread/Max(fabs(r->avg), NOTZERO); + err = r->spread/Max(fabsx(r->avg), NOTZERO); if( err > maxerr ) { maxerr = err; maxcomp = comp; @@ -130,22 +131,22 @@ skip: } region->cutcomp = maxcomp; - r0 = RegionResult(region); - r = r0 + maxcomp; + r = RegionResult(region) + maxcomp; if( halfvol*(r->fmin + r->fmax) > r->avg ) { region->fminor = r->fmin; region->fmajor = r->fmax; - region->xmajor = &r->xminmax[t->ndim] - (real *)r0; + region->xmajor = (2*maxcomp + 1)*t->ndim; } else { region->fminor = r->fmax; region->fmajor = r->fmin; - region->xmajor = &r->xminmax[0] - (real *)r0; + region->xmajor = 2*maxcomp*t->ndim; } if( region->isamples == 0 ) { if( (region->depth < INIDEPTH && r->spread < samples->neff*r->err) || - r->spread < t->totals[maxcomp].secondspread ) region->depth = 0; + r->spread < t->totals[maxcomp].secondspread ) + region->depth = 0; if( region->depth == 0 ) for( comp = 0; comp < t->ncomp; ++comp ) t->totals[comp].secondspread = diff --git a/src/external/libCuba/src/divonne/FindMinimum.c b/src/external/libCuba/src/divonne/FindMinimum.c index c7e00b2d..ac7fd901 100644 --- a/src/external/libCuba/src/divonne/FindMinimum.c +++ b/src/external/libCuba/src/divonne/FindMinimum.c @@ -2,7 +2,7 @@ FindMinimum.c find minimum (maximum) of hyperrectangular region this file is part of Divonne - last modified 7 Aug 13 th + last modified 12 Mar 15 th */ @@ -42,7 +42,7 @@ static inline real Dot(ccount n, creal *a, creal *b) static inline real Length(ccount n, creal *vec) { - return sqrt(Dot(n, vec, vec)); + return sqrtx(Dot(n, vec, vec)); } /*********************************************************************/ @@ -120,7 +120,7 @@ static void UpdateCholesky(cThis *t, ccount n, real *hessian, p[i] = dir; gamma += Sq(dir)/Hessian(i, i); } - gamma = Max(fabs(1 - gamma), EPS); + gamma = Max(fabsx(1 - gamma), EPS); while( --i >= 0 ) { creal dir = z[i] = p[i]; @@ -154,7 +154,7 @@ static inline void BFGS(cThis *t, ccount n, real *hessian, c = Dot(n, g, p); if( c >= 0 ) return; - c = 1/sqrt(-c); + c = 1/sqrtx(-c); for( i = 0; i < n; ++i ) y[i] = c*g[i]; UpdateCholesky(t, n, hessian, y, p); @@ -199,7 +199,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, c) the gradient is positive, i.e. we'd move uphill */ if( step > 0 && range > tol2 && grad <= 0 ) { - creal eps = RTEPS*fabs(range) + ftol; + creal eps = RTEPS*fabsx(range) + ftol; creal mingrad = -1e-4*grad, maxgrad = -gtol*grad; real end = range + eps; @@ -225,7 +225,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, maxstep = maxstep*(1 + .75*RTEPS) + .75*tol; } - cur.dx = (fabs(step) >= tol) ? step : (step > 0) ? tol : -tol; + cur.dx = (fabsx(step) >= tol) ? step : (step > 0) ? tol : -tol; dist = distmin + cur.dx; for( i = 0; i < nfree; ++i ) { ccount dim = ifree[i]; @@ -248,7 +248,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, if( cur.dx < 0 ) b = w; else a = w; - tol = RTEPS*fabs(distmin) + ftol; + tol = RTEPS*fabsx(distmin) + ftol; tol2 = tol + tol; } else { @@ -260,14 +260,14 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, if( distmin + b.dx <= xtol ) break; if( min.f < fini && - a.f - min.f <= fabs(a.dx)*maxgrad && - (fabs(distmin - range) > tol || maxstep < b.dx) ) break; + a.f - min.f <= fabsx(a.dx)*maxgrad && + (fabsx(distmin - range) > tol || maxstep < b.dx) ) break; mid = .5*(a.dx + b.dx); - if( fabs(mid) <= tol2 - .5*(b.dx - a.dx) ) break; + if( fabsx(mid) <= tol2 - .5*(b.dx - a.dx) ) break; r = q = s = 0; - if( fabs(end) > tol ) { + if( fabsx(end) > tol ) { if( first ) { creal s1 = w.dx*grad; creal s2 = w.f - min.f; @@ -281,7 +281,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, q = 2*(s2 - s1); } if( q > 0 ) s = -s; - q = fabs(q); + q = fabsx(q); r = end; if( step != b1 || b.dx <= maxstep ) end = step; } @@ -290,15 +290,15 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, else if( b.dx > maxstep ) step = (step < b.dx) ? -4*a.dx : maxstep; else { real num = a.dx, den = b.dx; - if( fabs(b.dx) <= tol || (w.dx > 0 && fabs(a.dx) > tol) ) + if( fabsx(b.dx) <= tol || (w.dx > 0 && fabsx(a.dx) > tol) ) num = b.dx, den = a.dx; num /= -den; - step = (num < 1) ? .5*den*sqrt(num) : 5/11.*den*(.1 + 1/num); + step = (num < 1) ? .5*den*sqrtx(num) : 5/11.*den*(.1 + 1/num); } if( step > 0 ) a1 = a.dx, b1 = step; else a1 = step, b1 = b.dx; - if( fabs(s) < fabs(.5*q*r) && s > q*a1 && s < q*b1 ) { + if( fabsx(s) < fabsx(.5*q*r) && s > q*a1 && s < q*b1 ) { step = s/q; if( step - a.dx < tol2 || b.dx - step < tol2 ) step = (mid > 0) ? tol : -tol; @@ -307,7 +307,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree, } first = true; - if( fabs(distmin - range) < tol ) { + if( fabsx(distmin - range) < tol ) { distmin = range; if( maxstep > b.dx ) first = false; } @@ -372,7 +372,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree, or we come close to a border. */ XCopy(y, x); - ftest = SUFTOL*(1 + fabs(fx)); + ftest = SUFTOL*(1 + fabsx(fx)); delta = RTDELTA/5; do { delta = Min(5*delta, smax); @@ -381,7 +381,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree, y[dim] = x[dim] + delta*p[i]; } fy = Sample(t, y); - if( fabs(fy - fx) > ftest ) break; + if( fabsx(fy - fx) > ftest ) break; } while( delta != smax ); /* Construct a second direction p' orthogonal to p, i.e. p.p' = 0. @@ -425,7 +425,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree, or we come close to a border. */ XCopy(z, y); - ftest = SUFTOL*(1 + fabs(fy)); + ftest = SUFTOL*(1 + fabsx(fy)); delta = RTDELTA/5; do { delta = Min(5*delta, smax); @@ -434,7 +434,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree, z[dim] = y[dim] + delta*p[i]; } fz = Sample(t, z); - if( fabs(fz - fy) > ftest ) break; + if( fabsx(fz - fy) > ftest ) break; } while( delta != smax ); if( fy != fz ) { @@ -541,12 +541,12 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin) bool resample = false; nfree = nfix = 0; for( dim = 0; dim < t->ndim; ++dim ) { - if( xmin[dim] < b[dim].lower + (1 + fabs(b[dim].lower))*QEPS ) { + if( xmin[dim] < b[dim].lower + (1 + fabsx(b[dim].lower))*QEPS ) { xmin[dim] = b[dim].lower; ifix[nfix++] = dim; resample = true; } - else if( xmin[dim] > b[dim].upper - (1 + fabs(b[dim].upper))*QEPS ) { + else if( xmin[dim] > b[dim].upper - (1 + fabsx(b[dim].upper))*QEPS ) { xmin[dim] = b[dim].upper; ifix[nfix++] = Tag(dim); resample = true; @@ -562,7 +562,7 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin) if( local || Length(nfree, gfree) > GTOL ) break; ftmp = LocalSearch(t, nfree, ifree, b, xmin, fmin, tmp); - if( ftmp > fmin - (1 + fabs(fmin))*RTEPS ) + if( ftmp > fmin - (1 + fabsx(fmin))*RTEPS ) goto releasebounds; fmin = ftmp; XCopy(xmin, tmp); @@ -586,7 +586,7 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin) minstep = INFTY; for( i = 0; i < nfree; ++i ) { count dim = Untag(ifree[i]); - if( fabs(p[i]) > EPS ) { + if( fabsx(p[i]) > EPS ) { real step; count fix; if( p[i] < 0 ) { @@ -642,11 +642,11 @@ fixbound: BFGS(t, nfree, hessian, tmp, gfree, p, low.dx); XCopy(gfree, tmp); - if( fabs(low.dx - minstep) < QEPS*minstep ) goto fixbound; + if( fabsx(low.dx - minstep) < QEPS*minstep ) goto fixbound; fdiff = fini - fmin; fini = fmin; - if( fdiff > (1 + fabs(fmin))*FTOL || + if( fdiff > (1 + fabsx(fmin))*FTOL || low.dx*plen > (1 + Length(t->ndim, xmin))*FTOL ) continue; } } diff --git a/src/external/libCuba/src/divonne/Integrate.c b/src/external/libCuba/src/divonne/Integrate.c index c40e9502..335aa57c 100644 --- a/src/external/libCuba/src/divonne/Integrate.c +++ b/src/external/libCuba/src/divonne/Integrate.c @@ -5,7 +5,7 @@ then do a main integration over all regions this file is part of Divonne checkpointing by B. Chokoufe - last modified 5 Aug 13 th + last modified 13 Mar 15 th */ @@ -29,8 +29,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob) Totals *tot, *Tot = state->totals + t->ncomp; Bounds *b, *B; Result *res; - count comp, err, iregion; - number nwant; + count comp, iregion; + number nwant, err; real nneed; ML_ONLY(number neff;) int fail; @@ -38,6 +38,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) if( VERBOSE > 1 ) { sprintf(out, "Divonne input parameters:\n" " ndim " COUNT "\n ncomp " COUNT "\n" + ML_NOT(" nvec " NUMBER "\n") " epsrel " REAL "\n epsabs " REAL "\n" " flags %d\n seed %d\n" " mineval " NUMBER "\n maxeval " NUMBER "\n" @@ -46,11 +47,12 @@ static int Integrate(This *t, real *integral, real *error, real *prob) " ngiven " NUMBER "\n nextra " NUMBER "\n" " statefile \"%s\"", t->ndim, t->ncomp, - t->epsrel, t->epsabs, + ML_NOT(t->nvec,) + SHOW(t->epsrel), SHOW(t->epsabs), t->flags, t->seed, t->mineval, t->maxeval, t->key1, t->key2, t->key3, t->maxpass, - t->border.lower, t->maxchisq, t->mindeviation, + SHOW(t->border.lower), SHOW(t->maxchisq), SHOW(t->mindeviation), t->ngiven, t->nextra, t->statefile); Print(out); @@ -132,7 +134,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) /* Step 1: partition the integration region */ if( t->phase == 1 ) { - if( VERBOSE ) Print("Partitioning phase:"); + if( VERBOSE ) Print("\nPartitioning phase:"); if( ini ) Iterate(t, 0, INIDEPTH, 0, NULL); @@ -164,7 +166,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) integral[comp] = tot->avg; valid += tot->avg == tot->avg; if( tot->spreadsq > maxtot->spreadsq ) maxtot = tot; - tot->spread = sqrt(tot->spreadsq); + tot->spread = sqrtx(tot->spreadsq); error[comp] = tot->spread/t->samples[0].neff; } @@ -197,7 +199,7 @@ if( StateWriteTest(t) ) { \ for( comp = 0; comp < t->ncomp; ++comp ) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL, - comp + 1, integral[comp], error[comp]); + comp + 1, SHOW(integral[comp]), SHOW(error[comp])); Print(out); } @@ -230,7 +232,7 @@ if( StateWriteTest(t) ) { \ tot->maxerrsq = Sq(maxerr); tot->mindevsq = tot->maxerrsq*Sq(t->mindeviation); } - nwant = (number)Min(ceil(nneed), MARKMASK/40.); + nwant = (number)Min(ceil(nneed), NWANTMAX/40.); err = SamplesLookup(t, &t->samples[1], t->key2, nwant, (t->maxeval - t->neval)/t->nregions + 1, t->samples[0].n + 1); @@ -308,11 +310,11 @@ refine: Iterate(t, state->iregion, POSTDEPTH, 1, state->totals); if( can_adjust ) { - cnumber nnew = (tot->spreadsq/Sq(MARKMASK) > tot->maxerrsq) ? - MARKMASK : - (number)ceil(sqrt(tot->spreadsq/tot->maxerrsq)); + cnumber nnew = (tot->spreadsq/Sq(NWANTMAX) > tot->maxerrsq) ? + NWANTMAX : + (number)ceil(sqrtx(tot->spreadsq/tot->maxerrsq)); if( nnew > nwant + nwant/64 ) { - ccount err = SamplesLookup(t, &t->samples[1], t->key2, nnew, + cnumber err = SamplesLookup(t, &t->samples[1], t->key2, nnew, (t->maxeval - t->neval)/t->nregions + 1, t->samples[1].n); fail += Unmark(err)*t->nregions; nwant = nnew; @@ -404,14 +406,14 @@ refine: if( chisq > EPS ) chisq /= Max(chiden, NOTZERO); if( VERBOSE > 2 ) { -#define Out2(f, r) (r)->avg, res->spread/t->samples[f].neff, (r)->err +#define Out2(f, r) SHOW((r)->avg), SHOW(res->spread/t->samples[f].neff), SHOW((r)->err) #define Out(f) Out2(f, &tot->phase[f]) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL "(" REAL ")\n " REAL " +- " REAL "(" REAL ")", ++comp, Out(0), Out(1)); if( todo == 3 ) oe += sprintf(oe, "\n " REAL " +- " REAL "(" REAL ")", Out2(2, res)); - oe += sprintf(oe, " \tchisq " REAL, chisq); + oe += sprintf(oe, " \tchisq " REAL, SHOW(chisq)); } tot->integral += avg; @@ -419,7 +421,7 @@ refine: tot->chisq += chisq; res->avg = avg; - res->spread = sqrt(sigsq); + res->spread = sqrtx(sigsq); res->chisq = chisq; } @@ -433,7 +435,7 @@ refine: for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) { integral[comp] = tot->integral; - error[comp] = sqrt(tot->sigsq); + error[comp] = sqrtx(tot->sigsq); prob[comp] = ChiSquare(tot->chisq, df); } @@ -442,7 +444,8 @@ refine: for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)", - comp + 1, integral[comp], error[comp], tot->chisq, df); + comp + 1, SHOW(integral[comp]), SHOW(error[comp]), + SHOW(tot->chisq), df); Print(out); } @@ -468,12 +471,12 @@ refine: MLPutFunction(stdlink, "Cuba`Divonne`region", 4); - MLPutRealList(stdlink, bounds, 2*t->ndim); + MLPutRealxList(stdlink, bounds, 2*t->ndim); MLPutFunction(stdlink, "List", t->ncomp); for( Res = (res = RegionResult(region)) + t->ncomp; res < Res; ++res ) { real r[] = {res->avg, res->spread/neff, res->chisq}; - MLPutRealList(stdlink, r, Elements(r)); + MLPutRealxList(stdlink, r, Elements(r)); } MLPutInteger(stdlink, region->depth + 1); /* misused for df */ @@ -482,8 +485,7 @@ refine: #endif abort: - WaitCores(t); - FORK_ONLY(FrameFree(t, ShmRm(t));) + FORK_ONLY(FrameFree(t, Master);) RuleFree(t); SamplesFree(&t->samples[2]); diff --git a/src/external/libCuba/src/divonne/Iterate.c b/src/external/libCuba/src/divonne/Iterate.c index 3d9488de..ac4a4cda 100644 --- a/src/external/libCuba/src/divonne/Iterate.c +++ b/src/external/libCuba/src/divonne/Iterate.c @@ -2,7 +2,7 @@ Iterate.c recursion over regions this file is part of Divonne - last modified 2 Aug 13 th + last modified 12 Mar 15 th */ @@ -85,10 +85,10 @@ FORK_ONLY(more:) norm = 1./nsplit--; for( res = RegionResult(parent), c = corr; c < C; ++res, ++c ) { - creal diff = fabs(res->avg - c->avg)*norm; + creal diff = fabsx(res->avg - c->avg)*norm; c->avg = diff*norm*nsplit; c->err = (c->err == 0) ? 1 : 1 + diff/c->err; - c->spread = (c->spread == 0) ? 1 : 1 + diff/sqrt(c->spread); + c->spread = (c->spread == 0) ? 1 : 1 + diff/sqrtx(c->spread); } for( td = todo; td < tdmax; ++td ) diff --git a/src/external/libCuba/src/divonne/Rule.c b/src/external/libCuba/src/divonne/Rule.c index 5bb6c28b..813b9184 100644 --- a/src/external/libCuba/src/divonne/Rule.c +++ b/src/external/libCuba/src/divonne/Rule.c @@ -4,14 +4,10 @@ code lifted with minor modifications from DCUHRE by J. Berntsen, T. Espelid, and A. Genz this file is part of Divonne - last modified 26 Jul 13 th + last modified 7 May 15 th */ -#define NextSet(p) p = (Set *)((char *)p + setsize) - -/*********************************************************************/ - static void Rule13Alloc(This *t) { static creal w[][nrules] = { @@ -153,7 +149,7 @@ static void Rule13Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -298,7 +294,7 @@ static void Rule11Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -309,32 +305,55 @@ static void Rule11Alloc(This *t) static void Rule9Alloc(This *t) { static creal w[] = { - -.0023611709677855117884, .11415390023857325268, - -.63833920076702389094, .74849988504685208004, - -.0014324017033399125142, .057471507864489725949, - -.14225104571434243234, -.062875028738286979989, - .254591133248959089, -1.207328566678236261, - .89567365764160676508, -.36479356986049146661, - .0035417564516782676826, -.072609367395893679605, - .10557491625218991012, .0021486025550098687713, - -.032268563892953949998, .010636783990231217481, - .014689102496143490175, .51134708346467591431, - .45976448120806344646, .18239678493024573331, - -.04508628929435784076, .21415883524352793401, - -.027351546526545644722, .054941067048711234101, - .11937596202570775297, .65089519391920250593, - .14744939829434460168, .057693384490973483573, - .034999626602143583822, -1.3868627719278281436, - -.2386668732575008879, .015532417276607053264, - .0035328099607090870236, .09231719987444221619, - .02254314464717892038, .013675773263272822361, - -.32544759695960125297, .0017708782258391338413, - .0010743012775049343856, .25150011495314791996 }; + RC(-.002361170967785511788400941242259231309691), + RC(.1141539002385732526821323741697655347686), + RC(-.6383392007670238909386026193674701393074), + RC(.7484998850468520800423030047583803945205), + RC(-.001432401703339912514196154599769007103671), + RC(.05747150786448972594860897296200006759892), + RC(-.1422510457143424323449521620935950679394), + RC(-.06287502873828697998942424881040490136987), + RC(.2545911332489590890011611142429070613156), + RC(-1.207328566678236261002219995185143356737), + RC(.8956736576416067650809467826488567200939), + RC(-.3647935698604914666100134551377381205297), + RC(.003541756451678267682601411863388846964536), + RC(-.07260936739589367960492815865074633743652), + RC(.1055749162521899101218622863269817454540), + RC(.002148602555009868771294231899653510655506), + RC(-.03226856389295394999786630399875134318006), + RC(.01063678399023121748083624225818915724455), + RC(.01468910249614349017540783437728097691502), + RC(.5113470834646759143109387357149329909126), + RC(.4597644812080634464633352781605214342691), + RC(.1823967849302457333050067275688690602649), + RC(-.04508628929435784075980562738240804429658), + RC(.2141588352435279340097929526588394300172), + RC(-.02735154652654564472203690086290223507436), + RC(.05494106704871123410060080562462135546101), + RC(.1193759620257077529708962121565290178730), + RC(.6508951939192025059314756320878023215278), + RC(.1474493982943446016775696826942585013243), + RC(.05769338449097348357291272840392627722165), + RC(.03499962660214358382244159694487155861542), + RC(-1.386862771927828143599782668709014266770), + RC(-.2386668732575008878964134721962088068396), + RC(.01553241727660705326386197156586357005224), + RC(.003532809960709087023561817517751309380604), + RC(.09231719987444221619017126187763868745587), + RC(.02254314464717892037990281369120402214829), + RC(.01367577326327282236101845043145111753718), + RC(-.3254475969596012529657378160439011607639), + RC(.001770878225839133841300705931694423482268), + RC(.001074301277504934385647115949826755327753), + RC(.2515001149531479199576969952416196054795) }; static creal g[] = { - .47795365790226950619, .20302858736911986780, - .44762735462617812882, .125, - .34303789878087814570 }; + RC(.4779536579022695061928604197171830064732), + RC(.2030285873691198677998034402373279133258), + RC(.4476273546261781288207704806530998539285), + RC(.125), + RC(.3430378987808781457001426145164678603407) }; enum { nsets = 9 }; @@ -440,7 +459,7 @@ static void Rule9Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -451,21 +470,33 @@ static void Rule9Alloc(This *t) static void Rule7Alloc(This *t) { static creal w[] = { - .019417866674748388428, -.40385257701150182546, - .64485668767465982223, .01177982690775806141, - -.18041318740733609012, -.088785828081335044443, - .056328645808285941374, -.0097089333373741942142, - -.99129176779582358138, -.17757165616267008889, - .12359398032043233572, .074978148702033690681, - .55489147051423559776, .088041241522692771226, - .021118358455513385083, -.0099302203239653333087, - -.064100053285010904179, .030381729038221007659, - .0058899134538790307051, -.0048544666686870971071, - .35514331232534017777 }; + RC(.01941786667474838842844534313920462333850), + RC(-.4038525770115018254611834753723880293161), + RC(.6448566876746598222277360730193089551024), + RC(.01177982690775806141012214458820955067854), + RC(-.1804131874073360901182293138710989490609), + RC(-.08878582808133504444306598174517276122439), + RC(.05632864580828594137378124255408286479947), + RC(-.009708933337374194214222671569602311669249), + RC(-.9912917677958235813775106862002319060386), + RC(-.1775716561626700888861319634903455224488), + RC(.1235939803204323357183625846672135876752), + RC(.07497814870203369068087999555157339703666), + RC(.5548914705142355977605994477355651401434), + RC(.08804124152269277122645182458858273865209), + RC(.02111835845551338508329573367808085283304), + RC(-.009930220323965333308685820460105538586058), + RC(-.06410005328501090417895544042025034295870), + RC(.03038172903822100765927778829870429682489), + RC(.005889913453879030705061072294104775339268), + RC(-.004854466668687097107111335784801155834624), + RC(.3551433123253401777722639269806910448976) }; static creal g[] = { - .47795365790226950619, .20302858736911986780, - .375, .34303789878087814570 }; + RC(.4779536579022695061928604197171830064732), + RC(.2030285873691198677998034402373279133258), + RC(.375), + RC(.3430378987808781457001426145164678603407) }; enum { nsets = 6 }; @@ -541,7 +572,7 @@ static void Rule7Alloc(This *t) -s->weight[r + 1]/s->weight[r]; real sum = 0; for( x = first; x <= last; NextSet(x) ) - sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]); + sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]); s->scale[r] = scale; s->norm[r] = 1/sum; } @@ -666,7 +697,7 @@ static void SampleRule(This *t, ccount iregion) real maxerr = 0; for( s = first; s <= last; NextSet(s) ) maxerr = Max(maxerr, - fabs(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]); + fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]); sum[rul] = maxerr; } diff --git a/src/external/libCuba/src/divonne/Sample.c b/src/external/libCuba/src/divonne/Sample.c index 7778f581..113b6aed 100644 --- a/src/external/libCuba/src/divonne/Sample.c +++ b/src/external/libCuba/src/divonne/Sample.c @@ -2,14 +2,16 @@ Sample.c most of what is related to sampling this file is part of Divonne - last modified 30 Aug 13 th + last modified 12 Mar 15 th */ -#define MARKMASK 0xfffffff +#define MARKMASK NUMBER_MAX #define Marked(x) ((x) & ~MARKMASK) #define Unmark(x) ((x) & MARKMASK) +#define NWANTMAX NUMBER_MAX + #define EXTRAPOLATE_EPS (.25*t->border.lower) /*#define EXTRAPOLATE_EPS 0x1p-26*/ @@ -96,7 +98,7 @@ static void SampleKorobov(This *t, ccount iregion) } if( dist > 0 ) { - dist = sqrt(dist)/EXTRAPOLATE_EPS; + dist = sqrtx(dist)/EXTRAPOLATE_EPS; for( dim = 0; dim < t->ndim; ++dim ) { real x2 = x[dim], dx = x2 - t->border.upper; if( dx > 0 ) { @@ -148,7 +150,7 @@ static void SampleKorobov(This *t, ccount iregion) 1..39 = multiplicator, Korobov numbers, 40..inf = absolute # of points, Korobov numbers. */ -static count SamplesLookup(This *t, Samples *samples, cint key, +static number SamplesLookup(This *t, Samples *samples, cint key, cnumber nwant, cnumber nmax, number nmin) { number n; @@ -191,7 +193,8 @@ static count SamplesLookup(This *t, Samples *samples, cint key, static void SamplesAlloc(cThis *t, Samples *samples) { #define FIRST -INT_MAX -#define MarkLast(x) (x | Marked(INT_MAX)) +#define MarkLast(x) ((x) | 0x40000000) +#define UnmarkLast(x) ((x) & 0x3fffffff) #include "KorobovCoeff.c" @@ -205,12 +208,12 @@ static void SamplesAlloc(cThis *t, Samples *samples) while( i = IMin(IDim(i), max), n > (p = prime[i + 1]) || n <= prime[i] ) { - cint d = (n - Unmark(p)) >> ++shift; + cint d = (n - UnmarkLast(p)) >> ++shift; i += Min1(d); } samples->coeff = coeff[i][t->ndim - KOROBOV_MINDIM]; - samples->neff = p = Unmark(p); + samples->neff = p = UnmarkLast(p); samples->n = p/2 + 1; } @@ -240,7 +243,7 @@ static real Sample(This *t, creal *x0) } if( dist > 0 ) { - dist = sqrt(dist)/EXTRAPOLATE_EPS; + dist = sqrtx(dist)/EXTRAPOLATE_EPS; for( dim = 0; dim < t->ndim; ++dim ) { real x2 = xtmp[dim], dx, b; if( (dx = x2 - (b = t->border.lower)) < 0 || diff --git a/src/external/libCuba/src/divonne/Split.c b/src/external/libCuba/src/divonne/Split.c index 570258f8..abffcbf8 100644 --- a/src/external/libCuba/src/divonne/Split.c +++ b/src/external/libCuba/src/divonne/Split.c @@ -2,7 +2,7 @@ Split.c determine optimal cuts for splitting a region this file is part of Divonne - last modified 31 Aug 13 th + last modified 12 Mar 15 th */ @@ -31,7 +31,7 @@ typedef struct { static inline real Div(creal a, creal b) { - return (b != 0 /*&& fabs(a) > SMALL*fabs(b)*/) ? a/b : a; + return (b != 0 /*&& fabsx(a) > SMALL*fabsx(b)*/) ? a/b : a; } /*********************************************************************/ @@ -58,7 +58,7 @@ static void SomeCut(This *t, Cut *cut, Bounds *b) yupper = Sample(t, xmid); xmid[dim] = x; - dev = fabs(ymid - .5*(ylower + yupper)); + dev = fabsx(ymid - .5*(ylower + yupper)); if( dev >= maxdev ) { maxdev = dev; maxdim = dim; @@ -178,7 +178,7 @@ static count FindCuts(This *t, Cut *cut, Bounds *bounds, creal vol, for( icut = 0; icut < ncuts; ++icut ) { Cut *c = &cut[icut]; - creal diff = fabs(fmajor - c->f); + creal diff = fabsx(fmajor - c->f); if( diff <= mindiff ) { mindiff = diff; mincut = c; @@ -230,18 +230,18 @@ repeat: if( lhssqnew <= lhssq ) { real fmax; - if( fabs(gammanew - gamma) < GAMMATOL*gamma ) break; + if( fabsx(gammanew - gamma) < GAMMATOL*gamma ) break; gamma = gammanew; - fmax = fabs(fgamma); + fmax = fabsx(fgamma); for( icut = 0; icut < ncuts; ++icut ) { Cut *c = &cut[icut]; creal dfmin = SINGTOL*c->df; creal sol = c->sol/div; real df = c->f - c->fold; - df = (fabs(df) > SMALL*fabs(sol)) ? df/sol : 1; - c->df = (fabs(df) < fabs(dfmin)) ? dfmin : df; - fmax = Max(fmax, fabs(c->f)); + df = (fabsx(df) > SMALL*fabsx(sol)) ? df/sol : 1; + c->df = (fabsx(df) < fabsx(dfmin)) ? dfmin : df; + fmax = Max(fmax, fabsx(c->f)); c->fold = c->f; } @@ -276,7 +276,7 @@ static void Split(This *t, ccount iregion) t->selectedcomp = region->cutcomp; t->neval_cut -= t->neval; ncuts = FindCuts(t, cut, region->bounds, region->vol, - (real *)RegionResult(region) + region->xmajor, region->fmajor, + RegionMinMax(region) + region->xmajor, region->fmajor, region->fmajor - region->fminor); t->neval_cut += t->neval; diff --git a/src/external/libCuba/src/divonne/decl.h b/src/external/libCuba/src/divonne/decl.h index cf127851..98023ec5 100644 --- a/src/external/libCuba/src/divonne/decl.h +++ b/src/external/libCuba/src/divonne/decl.h @@ -2,7 +2,7 @@ decl.h Type declarations this file is part of Divonne - last modified 26 Jul 13 th + last modified 9 Oct 14 th */ @@ -44,6 +44,8 @@ typedef struct { #define SetSize (sizeof(Set) + t->ndim*sizeof(real)) +#define NextSet(p) p = (Set *)((char *)p + setsize) + typedef struct { Set *first, *last; real errcoeff[3]; @@ -71,12 +73,11 @@ typedef const Errors cErrors; typedef struct { real avg, err, spread, chisq; real fmin, fmax; - real xminmax[]; } Result; typedef const Result cResult; -#define ResultSize (sizeof(Result) + t->ndim*2*sizeof(real)) +#define MinMaxSize (t->ncomp*t->ndim*2*sizeof(real)) typedef struct region { int depth, next; @@ -85,29 +86,34 @@ typedef struct region { Bounds bounds[]; } Region; -#define RegionSize (sizeof(Region) + t->ndim*sizeof(Bounds) + t->ncomp*ResultSize) +#define RegionSize (sizeof(Region) + t->ndim*sizeof(Bounds) + t->ncomp*sizeof(Result) + MinMaxSize) #define RegionResult(r) ((Result *)(r->bounds + t->ndim)) +#define RegionMinMax(r) ((real *)(RegionResult(r) + t->ncomp)) + #define RegionPtr(n) ((Region *)((char *)t->region + (n)*regionsize)) -typedef int (*Integrand)(ccount *, creal *, ccount *, real *, void *, cint *); +typedef int (*Integrand)(ccount *, creal *, ccount *, real *, + void *, cnumber *, cint *, cint *); -typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *); +typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *, void *); typedef struct _this { count ndim, ncomp; #ifndef MLVERSION Integrand integrand; void *userdata; - PeakFinder peakfinder; + number nvec; #ifdef HAVE_FORK - int ncores, running, *child; + SHM_ONLY(int shmid;) + Spin *spin; real *frame; number nframe; - SHM_ONLY(int shmid;) + int running; #endif + PeakFinder peakfinder; #endif real epsrel, epsabs; int flags, seed; diff --git a/src/external/libCuba/src/suave/Fluct.c b/src/external/libCuba/src/suave/Fluct.c index ad1180ab..c226d0cc 100644 --- a/src/external/libCuba/src/suave/Fluct.c +++ b/src/external/libCuba/src/suave/Fluct.c @@ -2,35 +2,43 @@ Fluct.c compute the fluctuation in the left and right half this file is part of Suave - last modified 29 Jul 13 th + last modified 14 Mar 15 th */ -#if defined(HAVE_LONG_DOUBLE) && defined(HAVE_POWL) +#if defined(HAVE_LONG_DOUBLE) && defined(HAVE_POWL) && REALSIZE <= 10 -typedef long double realx; -#define XDBL_MAX_EXP LDBL_MAX_EXP -#define XDBL_MAX LDBL_MAX -#define powx powl -#define ldexpx ldexpl +typedef long double realL; +#define REALL_MAX_EXP LDBL_MAX_EXP +#define REALL_MAX LDBL_MAX +#define powL powl +#define ldexpL ldexpl #else -typedef double realx; -#define XDBL_MAX_EXP DBL_MAX_EXP -#define XDBL_MAX DBL_MAX -#define powx pow -#define ldexpx ldexp +typedef real realL; +#define REALL_MAX_EXP REAL_MAX_EXP +#define REALL_MAX REAL_MAX +#define powL powx +#define ldexpL ldexpx #endif -typedef const realx crealx; +typedef const realL crealL; typedef struct { - realx fluct; + realL fluct; number n; } Var; +static inline realL MinL(crealL a, crealL b) { + return (a < b) ? a : b; +} + +static inline realL MaxL(crealL a, crealL b) { + return (a > b) ? a : b; +} + /*********************************************************************/ static void Fluct(cThis *t, Var *var, @@ -41,27 +49,27 @@ static void Fluct(cThis *t, Var *var, count nvar = 2*t->ndim; creal norm = 1/(err*Max(fabs(avg), err)); creal flat = 2/3./t->flatness; - crealx max = ldexpx(1., (int)((XDBL_MAX_EXP - 2)/t->flatness)); + crealL max = ldexpL(1., (int)((REALL_MAX_EXP - 2)/t->flatness)); Clear(var, nvar); while( n-- ) { count dim; - crealx arg = 1 + fabs(*w++)*Sq(*f - avg)*norm; - crealx ft = powx(arg < max ? arg : max, t->flatness); + crealL arg = 1 + fabs(*w++)*Sq(*f - avg)*norm; + crealL ft = powL(MinL(arg, max), t->flatness); f += t->ncomp; for( dim = 0; dim < t->ndim; ++dim ) { Var *v = &var[2*dim + (*x++ >= .5*(b[dim].lower + b[dim].upper))]; - crealx f = v->fluct + ft; - v->fluct = (f > XDBL_MAX/2) ? XDBL_MAX/2 : f; + crealL f = v->fluct + ft; + v->fluct = MaxL(f, REALL_MAX/2); ++v->n; } } while( nvar-- ) { - var->fluct = powx(var->fluct, flat); + var->fluct = powL(var->fluct, flat); ++var; } } diff --git a/src/external/libCuba/src/suave/Grid.c b/src/external/libCuba/src/suave/Grid.c index 8e52fde8..5ba2c3b5 100644 --- a/src/external/libCuba/src/suave/Grid.c +++ b/src/external/libCuba/src/suave/Grid.c @@ -2,7 +2,7 @@ Grid.c utility functions for the Vegas grid this file is part of Suave - last modified 7 Aug 13 th + last modified 12 Mar 15 th */ @@ -33,7 +33,7 @@ static void RefineGrid(cThis *t, Grid grid, Grid margsum) real impfun = 0; if( margsum[bin] > 0 ) { creal r = margsum[bin]*norm; - avgperbin += impfun = pow((r - 1)/log(r), 1.5); + avgperbin += impfun = powx((r - 1)/log(r), 1.5); } imp[bin] = impfun; } diff --git a/src/external/libCuba/src/suave/Integrate.c b/src/external/libCuba/src/suave/Integrate.c index 9c06d81f..4345f764 100644 --- a/src/external/libCuba/src/suave/Integrate.c +++ b/src/external/libCuba/src/suave/Integrate.c @@ -3,7 +3,7 @@ integrate over the unit hypercube this file is part of Suave checkpointing by B. Chokoufe - last modified 5 Aug 13 th + last modified 13 Mar 15 th */ @@ -26,22 +26,27 @@ static int Integrate(This *t, real *integral, real *error, real *prob) Result *tot, *Tot = state->totals + t->ncomp; Result *res, *resL, *resR; Bounds *b, *B; + cnumber minsamples = IMax(t->nmin, MINSAMPLES); count dim, comp; int fail; if( VERBOSE > 1 ) { sprintf(out, "Suave input parameters:\n" " ndim " COUNT "\n ncomp " COUNT "\n" + ML_NOT(" nvec " NUMBER "\n") " epsrel " REAL "\n epsabs " REAL "\n" " flags %d\n seed %d\n" " mineval " NUMBER "\n maxeval " NUMBER "\n" - " nnew " NUMBER "\n flatness " REAL "\n" - " statefile \"%s\"\n", + " nnew " NUMBER "\n nmin " NUMBER "\n" + " flatness " REAL "\n" + " statefile \"%s\"", t->ndim, t->ncomp, - t->epsrel, t->epsabs, + ML_NOT(t->nvec,) + SHOW(t->epsrel), SHOW(t->epsabs), t->flags, t->seed, t->mineval, t->maxeval, - t->nnew, t->flatness, + t->nnew, t->nmin, + SHOW(t->flatness), t->statefile); Print(out); } @@ -49,7 +54,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) if( BadComponent(t) ) return -2; if( BadDimension(t) ) return -1; - ShmAlloc(t, ShmRm(t)); + ShmAlloc(t, Master); ForkCores(t); if( (fail = setjmp(t->abort)) ) goto abort; @@ -132,7 +137,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob) for( tot = state->totals, comp = 0; tot < Tot; ++tot ) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)", - ++comp, tot->avg, tot->err, tot->chisq, state->df); + ++comp, SHOW(tot->avg), SHOW(tot->err), + SHOW(tot->chisq), state->df); Print(out); } @@ -173,7 +179,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) region->result[maxcomp].avg, Max(maxerr, t->epsabs)); bias = (t->epsrel < 1e-50) ? 2 : - Max(pow(2., -(real)region->div/t->ndim)/t->epsrel, 2.); + Max(powx(2., -(real)region->div/t->ndim)/t->epsrel, 2.); minfluct = INFTY; bisectdim = 0; for( dim = 0; dim < t->ndim; ++dim ) { @@ -190,9 +196,9 @@ static int Integrate(This *t, real *integral, real *error, real *prob) minfluct = vLR[0].fluct + vLR[1].fluct; nnewL = IMax( (minfluct == 0) ? t->nnew/2 : (count)(vLR[0].fluct/minfluct*t->nnew), - MINSAMPLES ); + minsamples ); nL = vLR[0].n + nnewL; - nnewR = IMax(t->nnew - nnewL, MINSAMPLES); + nnewR = IMax(t->nnew - nnewL, minsamples); nR = vLR[1].n + nnewR; regionL = RegionAlloc(t, nL, nnewL); @@ -211,7 +217,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) while( n-- ) { cbool final = (*w < 0); if( x[bisectdim] < mid ) { - if( final && wR > RegionW(regionR) ) wR[-1] = -fabs(wR[-1]); + if( final && wR > RegionW(regionR) ) wR[-1] = -fabsx(wR[-1]); *wL++ = *w++; XCopy(xL, x); xL += t->ndim; @@ -219,7 +225,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) fL += t->ncomp; } else { - if( final && wL > RegionW(regionL) ) wL[-1] = -fabs(wL[-1]); + if( final && wL > RegionW(regionL) ) wL[-1] = -fabsx(wL[-1]); *wR++ = *w++; XCopy(xR, x); xR += t->ndim; @@ -259,15 +265,15 @@ static int Integrate(This *t, real *integral, real *error, real *prob) diff = Sq(.25*diff); sigsq = resL->sigsq + resR->sigsq; if( sigsq > 0 ) { - creal c = Sq(1 + sqrt(diff/sigsq)); + creal c = Sq(1 + sqrtx(diff/sigsq)); resL->sigsq *= c; resR->sigsq *= c; } - resL->err = sqrt(resL->sigsq += diff); - resR->err = sqrt(resR->sigsq += diff); + resL->err = sqrtx(resL->sigsq += diff); + resR->err = sqrtx(resR->sigsq += diff); tot->sigsq += resL->sigsq + resR->sigsq - res->sigsq; - tot->err = sqrt(tot->sigsq); + tot->err = sqrtx(tot->sigsq); tot->chisq += resL->chisq + resR->chisq - res->chisq; } @@ -319,12 +325,12 @@ static int Integrate(This *t, real *integral, real *error, real *prob) MLPutFunction(stdlink, "Cuba`Suave`region", 3); - MLPutRealList(stdlink, bounds, 2*t->ndim); + MLPutRealxList(stdlink, bounds, 2*t->ndim); MLPutFunction(stdlink, "List", t->ncomp); for( Res = (res = region->result) + t->ncomp; res < Res; ++res ) { real r[] = {res->avg, res->err, res->chisq}; - MLPutRealList(stdlink, r, Elements(r)); + MLPutRealxList(stdlink, r, Elements(r)); } MLPutInteger(stdlink, region->df); @@ -338,8 +344,7 @@ abort: anchor = anchor->next; free(region); } - WaitCores(t); - ShmFree(t); + ShmFree(t, Master); StateRemove(t); diff --git a/src/external/libCuba/src/suave/Sample.c b/src/external/libCuba/src/suave/Sample.c index 624c816c..a02249e2 100644 --- a/src/external/libCuba/src/suave/Sample.c +++ b/src/external/libCuba/src/suave/Sample.c @@ -2,7 +2,7 @@ Sample.c the sampling step of Suave this file is part of Suave - last modified 30 Jul 13 th + last modified 13 Mar 15 th */ @@ -71,7 +71,7 @@ static void Sample(This *t, cnumber nnew, Region *region, while( w < lastw ) { cbool final = (*w < 0); - creal weight = fabs(*w++); + creal weight = fabsx(*w++); ++n; for( c = cumul, comp = 0; c < C; ++c ) { @@ -80,20 +80,20 @@ static void Sample(This *t, cnumber nnew, Region *region, c->sqsum += Sq(wfun); if( final ) { - if( n > 1 ) { + if( n >= t->nmin ) { real w = Weight(c->sum, c->sqsum, n); c->weightsum += c->weight = w; c->avgsum += c->avg = w*c->sum; if( VERBOSE > 2 ) { - creal sig = sqrt(1/w); + creal sig = sqrtx(1/w); ss[comp] += (df == 0) ? sprintf(ss[comp], "\n[" COUNT "] " REAL " +- " REAL " (" NUMBER ")", comp + 1, - c->sum, sig, n) : + SHOW(c->sum), SHOW(sig), n) : sprintf(ss[comp], "\n " REAL " +- " REAL " (" NUMBER ")", - c->sum, sig, n); + SHOW(c->sum), SHOW(sig), n); } if( df == 0 ) c->guess = c->sum; @@ -107,7 +107,7 @@ static void Sample(This *t, cnumber nnew, Region *region, } } - if( final ) ++df, n = 0; + if( final ) df -= NegQ(t->nmin - n - 1), n = 0; } region->df = --df; @@ -124,7 +124,7 @@ static void Sample(This *t, cnumber nnew, Region *region, res->sigsq = sigsq; res->avg = avg; } - res->err = sqrt(res->sigsq); + res->err = sqrtx(res->sigsq); res->chisq = (sigsq < .9*NOTZERO) ? 0 : c->chisqsum - avg*c->chisum; /* This catches the special case where the integrand is constant @@ -153,7 +153,7 @@ static void Sample(This *t, cnumber nnew, Region *region, for( comp = 0, res = region->result; comp < t->ncomp; ++comp, ++res ) { p += sprintf(p, "%s \tchisq " REAL " (" COUNT " df)", - p0, res->chisq, df); + p0, SHOW(res->chisq), df); p0 += chars; } diff --git a/src/external/libCuba/src/suave/Suave.c b/src/external/libCuba/src/suave/Suave.c index 79323c14..3bd55a02 100644 --- a/src/external/libCuba/src/suave/Suave.c +++ b/src/external/libCuba/src/suave/Suave.c @@ -1,8 +1,8 @@ /* Suave.c - Subregion-adaptive Vegas Monte-Carlo integration + Subregion-adaptive Vegas Monte Carlo integration by Thomas Hahn - last modified 17 Sep 13 th + last modified 28 Nov 14 th */ @@ -15,64 +15,80 @@ /*********************************************************************/ Extern void EXPORT(Suave)(ccount ndim, ccount ncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber nvec, creal epsrel, creal epsabs, cint flags, cint seed, cnumber mineval, cnumber maxeval, - cnumber nnew, creal flatness, - cchar *statefile, + cnumber nnew, cnumber nmin, creal flatness, + cchar *statefile, Spin **pspin, count *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob) { This t; + + VerboseInit(); + t.ndim = ndim; t.ncomp = ncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = nvec; t.epsrel = epsrel; t.epsabs = epsabs; - t.flags = flags; + t.flags = MaxVerbose(flags); t.seed = seed; t.mineval = mineval; t.maxeval = maxeval; t.nnew = nnew; + t.nmin = IMax(nmin, 2); t.flatness = flatness; t.statefile = statefile; + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } /*********************************************************************/ Extern void EXPORT(suave)(ccount *pndim, ccount *pncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber *pnvec, creal *pepsrel, creal *pepsabs, cint *pflags, cint *pseed, cnumber *pmineval, cnumber *pmaxeval, - cnumber *pnnew, creal *pflatness, - cchar *statefile, + cnumber *pnnew, cnumber *pnmin, creal *pflatness, + cchar *statefile, Spin **pspin, count *pnregions, number *pneval, int *pfail, real *integral, real *error, real *prob, cint statefilelen) { This t; + + VerboseInit(); + t.ndim = *pndim; t.ncomp = *pncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = *pnvec; t.epsrel = *pepsrel; t.epsabs = *pepsabs; - t.flags = *pflags; + t.flags = MaxVerbose(*pflags); t.seed = *pseed; t.mineval = *pmineval; t.maxeval = *pmaxeval; t.nnew = *pnnew; + t.nmin = IMax(*pnmin, 2); t.flatness = *pflatness; CString(t.statefile, statefile, statefilelen); + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pnregions = t.nregions; *pneval = t.neval; + + WaitCores(&t, pspin); } diff --git a/src/external/libCuba/src/suave/decl.h b/src/external/libCuba/src/suave/decl.h index 8944e60f..4d738b37 100644 --- a/src/external/libCuba/src/suave/decl.h +++ b/src/external/libCuba/src/suave/decl.h @@ -2,7 +2,7 @@ decl.h Type declarations this file is part of Suave - last modified 29 Jul 13 th + last modified 25 Nov 14 th */ @@ -35,23 +35,24 @@ typedef struct { typedef const Bounds cBounds; typedef int (*Integrand)(ccount *, creal *, ccount *, real *, - void *, creal *, cint *); + void *, cnumber *, cint *, creal *, cint *); typedef struct _this { count ndim, ncomp; #ifndef MLVERSION Integrand integrand; void *userdata; + number nvec; #ifdef HAVE_FORK - int ncores, *child; - real *frame; SHM_ONLY(int shmid;) + Spin *spin; + real *frame; #endif #endif real epsrel, epsabs; int flags, seed; number mineval, maxeval; - number nnew; + number nnew, nmin; real flatness; cchar *statefile; count nregions; diff --git a/src/external/libCuba/src/vegas/Grid.c b/src/external/libCuba/src/vegas/Grid.c index 0ad8a79e..7fff0aa9 100644 --- a/src/external/libCuba/src/vegas/Grid.c +++ b/src/external/libCuba/src/vegas/Grid.c @@ -2,7 +2,7 @@ Grid.c utility functions for the Vegas grid this file is part of Vegas - last modified 13 Dec 11 th + last modified 12 Mar 15 th */ @@ -70,7 +70,7 @@ static void RefineGrid(cThis *t, Grid grid, Grid margsum) real impfun = 0; if( margsum[bin] > 0 ) { creal r = margsum[bin]*norm; - avgperbin += impfun = pow((r - 1)/log(r), 1.5); + avgperbin += impfun = powx((r - 1)/log(r), 1.5); } imp[bin] = impfun; } diff --git a/src/external/libCuba/src/vegas/Integrate.c b/src/external/libCuba/src/vegas/Integrate.c index 14557871..bb1bae79 100644 --- a/src/external/libCuba/src/vegas/Integrate.c +++ b/src/external/libCuba/src/vegas/Integrate.c @@ -2,7 +2,7 @@ Integrate.c integrate over the unit hypercube this file is part of Vegas - last modified 8 Aug 13 th + last modified 13 Mar 15 th */ @@ -31,6 +31,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) if( VERBOSE > 1 ) { sprintf(out, "Vegas input parameters:\n" " ndim " COUNT "\n ncomp " COUNT "\n" + ML_NOT(" nvec " NUMBER "\n") " epsrel " REAL "\n epsabs " REAL "\n" " flags %d\n seed %d\n" " mineval " NUMBER "\n maxeval " NUMBER "\n" @@ -38,7 +39,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob) " nbatch " NUMBER "\n gridno %d\n" " statefile \"%s\"", t->ndim, t->ncomp, - t->epsrel, t->epsabs, + ML_NOT(t->nvec,) + SHOW(t->epsrel), SHOW(t->epsabs), t->flags, t->seed, t->mineval, t->maxeval, t->nstart, t->nincrease, t->nbatch, @@ -49,7 +51,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) if( BadComponent(t) ) return -2; if( BadDimension(t) ) return -1; - FrameAlloc(t, ShmRm(t)); + FrameAlloc(t, Master); ForkCores(t); Alloc(bins, t->nbatch*t->ndim); @@ -68,12 +70,12 @@ static int Integrate(This *t, real *integral, real *error, real *prob) t->rng.skiprandom(t, t->neval); } - if( ini ) { + if( ini | ZAPSTATE ) { + t->neval = 0; state->niter = 0; state->nsamples = t->nstart; FClear(state->cumul); - GetGrid(t, state_grid); - t->neval = 0; + if( ini ) GetGrid(t, state_grid); } /* main iteration loop */ @@ -143,7 +145,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) real avg = sigsq*(c->avgsum += w*c->sum); c->avg = LAST ? (sigsq = 1/w, c->sum) : avg; - c->err = sqrt(sigsq); + c->err = sqrtx(sigsq); fail |= (c->err > MaxErr(c->avg)); if( state->niter == 0 ) c->guess = c->sum; @@ -163,7 +165,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob) for( c = state->cumul, comp = 0; c < C; ++c ) oe += sprintf(oe, "\n[" COUNT "] " REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)", - ++comp, c->avg, c->err, c->chisq, state->niter); + ++comp, SHOW(c->avg), SHOW(c->err), + SHOW(c->chisq), state->niter); Print(out); } @@ -215,8 +218,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob) abort: PutGrid(t, state_grid); free(bins); - WaitCores(t); - FrameFree(t); + FrameFree(t, Master); StateRemove(t); diff --git a/src/external/libCuba/src/vegas/Vegas.c b/src/external/libCuba/src/vegas/Vegas.c index 43a608f7..46a3fd85 100644 --- a/src/external/libCuba/src/vegas/Vegas.c +++ b/src/external/libCuba/src/vegas/Vegas.c @@ -1,8 +1,8 @@ /* Vegas.c - Vegas Monte-Carlo integration + Vegas Monte Carlo integration by Thomas Hahn - last modified 17 Sep 13 th + last modified 25 Nov 14 th */ @@ -15,22 +15,27 @@ /*********************************************************************/ Extern void EXPORT(Vegas)(ccount ndim, ccount ncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber nvec, creal epsrel, creal epsabs, cint flags, cint seed, cnumber mineval, cnumber maxeval, - cnumber nstart, cnumber nincrease, cnumber nbatch, - cint gridno, cchar *statefile, + cnumber nstart, cnumber nincrease, + cnumber nbatch, cint gridno, + cchar *statefile, Spin **pspin, number *pneval, int *pfail, real *integral, real *error, real *prob) { This t; + + VerboseInit(); + t.ndim = ndim; t.ncomp = ncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = nvec; t.epsrel = epsrel; t.epsabs = epsabs; - t.flags = flags; + t.flags = MaxVerbose(flags); t.seed = seed; t.mineval = mineval; t.maxeval = maxeval; @@ -39,30 +44,38 @@ Extern void EXPORT(Vegas)(ccount ndim, ccount ncomp, t.nbatch = nbatch; t.gridno = gridno; t.statefile = statefile; + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pneval = t.neval; + + WaitCores(&t, pspin); } /*********************************************************************/ Extern void EXPORT(vegas)(ccount *pndim, ccount *pncomp, - Integrand integrand, void *userdata, + Integrand integrand, void *userdata, cnumber *pnvec, creal *pepsrel, creal *pepsabs, cint *pflags, cint *pseed, cnumber *pmineval, cnumber *pmaxeval, cnumber *pnstart, cnumber *pnincrease, - cnumber *pnbatch, cint *pgridno, cchar *statefile, + cnumber *pnbatch, cint *pgridno, + cchar *statefile, Spin **pspin, number *pneval, int *pfail, real *integral, real *error, real *prob, cint statefilelen) { This t; + + VerboseInit(); + t.ndim = *pndim; t.ncomp = *pncomp; t.integrand = integrand; t.userdata = userdata; + t.nvec = *pnvec; t.epsrel = *pepsrel; t.epsabs = *pepsabs; - t.flags = *pflags; + t.flags = MaxVerbose(*pflags); t.seed = *pseed; t.mineval = *pmineval; t.maxeval = *pmaxeval; @@ -71,8 +84,11 @@ Extern void EXPORT(vegas)(ccount *pndim, ccount *pncomp, t.nbatch = *pnbatch; t.gridno = *pgridno; CString(t.statefile, statefile, statefilelen); + FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;) *pfail = Integrate(&t, integral, error, prob); *pneval = t.neval; + + WaitCores(&t, pspin); } diff --git a/src/external/libCuba/src/vegas/decl.h b/src/external/libCuba/src/vegas/decl.h index 0bd2614d..d528c2b8 100644 --- a/src/external/libCuba/src/vegas/decl.h +++ b/src/external/libCuba/src/vegas/decl.h @@ -2,7 +2,7 @@ decl.h Type declarations this file is part of Vegas - last modified 21 Dec 11 th + last modified 21 Jul 14 th */ @@ -29,16 +29,17 @@ typedef struct { typedef const Cumulants cCumulants; typedef int (*Integrand)(ccount *, creal *, ccount *, real *, - void *, creal *, cint *); + void *, cnumber *, cint *, creal *, cint *); typedef struct _this { count ndim, ncomp; #ifndef MLVERSION Integrand integrand; void *userdata; + number nvec; #ifdef HAVE_FORK - int ncores, *child; SHM_ONLY(int shmid;) + Spin *spin; #endif #endif real *frame; From 293f6ecd3ef9b142ec48404dd27775815c34e0d1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 19 May 2018 19:40:27 +0200 Subject: [PATCH 53/99] added missing cuba-4.2 files. --- src/external/libCuba/src/common/Data.c | 18 + src/external/libCuba/src/common/Global.c | 58 + src/external/libCuba/src/common/Parallel.c | 441 ++++++ src/external/libCuba/src/common/sock.h | 65 + .../libCuba/src/divonne/KorobovCoeff.c-16033 | 1370 +++++++++++++++++ .../libCuba/src/divonne/KorobovCoeff.c-2423 | 267 ++++ .../libCuba/src/divonne/KorobovCoeff.c-3319 | 356 +++++ .../libCuba/src/divonne/KorobovCoeff.c-5879 | 571 +++++++ .../libCuba/src/divonne/KorobovCoeff.c-9689 | 881 +++++++++++ 9 files changed, 4027 insertions(+) create mode 100644 src/external/libCuba/src/common/Data.c create mode 100644 src/external/libCuba/src/common/Global.c create mode 100644 src/external/libCuba/src/common/Parallel.c create mode 100644 src/external/libCuba/src/common/sock.h create mode 100644 src/external/libCuba/src/divonne/KorobovCoeff.c-16033 create mode 100644 src/external/libCuba/src/divonne/KorobovCoeff.c-2423 create mode 100644 src/external/libCuba/src/divonne/KorobovCoeff.c-3319 create mode 100644 src/external/libCuba/src/divonne/KorobovCoeff.c-5879 create mode 100644 src/external/libCuba/src/divonne/KorobovCoeff.c-9689 diff --git a/src/external/libCuba/src/common/Data.c b/src/external/libCuba/src/common/Data.c new file mode 100644 index 00000000..3d405911 --- /dev/null +++ b/src/external/libCuba/src/common/Data.c @@ -0,0 +1,18 @@ +/* + Data.c + initialized data for Cuba + by Thomas Hahn + last modified 21 Jul 14 th +*/ + + +#include "stddecl.h" + +int cubaverb_ = uninitialized; + +#ifdef HAVE_FORK +corespec cubaworkers_ = { + uninitialized, uninitialized, + uninitialized, uninitialized }; +#endif + diff --git a/src/external/libCuba/src/common/Global.c b/src/external/libCuba/src/common/Global.c new file mode 100644 index 00000000..6e5975fa --- /dev/null +++ b/src/external/libCuba/src/common/Global.c @@ -0,0 +1,58 @@ +/* + Global.c + set global vars + by Thomas Hahn + last modified 21 Jul 14 th +*/ + + +#include "stddecl.h" + + +coreinit cubafun_; +extern int cubaverb_; + +#ifdef HAVE_FORK +extern corespec cubaworkers_; +#endif + + +Extern void SUFFIX(cubaverbose)(cint verb) +{ + cubaverb_ = verb; +} + +/*********************************************************************/ + +Extern void SUFFIX(cubacores)(cint n, cint p) +{ +#ifdef HAVE_FORK + cubaworkers_.ncores = n; + cubaworkers_.pcores = p; +#endif +} + +Extern void SUFFIX(cubaaccel)(cint n, cint p) +{ +#ifdef HAVE_FORK + cubaworkers_.naccel = n; + cubaworkers_.paccel = p; +#endif +} + +/*********************************************************************/ + +Extern void SUFFIX(cubainit)(subroutine f, void *arg) +{ + cubafun_.initfun = f; + cubafun_.initarg = arg; +} + +/*********************************************************************/ + +Extern void SUFFIX(cubaexit)(subroutine f, void *arg) +{ + cubafun_.exitfun = f; + cubafun_.exitarg = arg; +} + diff --git a/src/external/libCuba/src/common/Parallel.c b/src/external/libCuba/src/common/Parallel.c new file mode 100644 index 00000000..895862f3 --- /dev/null +++ b/src/external/libCuba/src/common/Parallel.c @@ -0,0 +1,441 @@ +/* + Parallel.c + the parallel sampling routine + for the C versions of the Cuba routines + by Thomas Hahn + last modified 23 Apr 15 th +*/ + +#include "sock.h" + +#define MINSLICE 10 +#define MINCORES 1 +/*#define MINCORES 2*/ + +typedef struct { + number n, m, i; + VES_ONLY(count iter;) + DIV_ONLY(int phase SHM_ONLY(, shmid);) +} Slice; + +#if defined HAVE_SHMGET && (defined SUAVE || defined DIVONNE) +#define FRAMECOPY +#endif + +Extern void SUFFIX(cubafork)(Spin **); +Extern void SUFFIX(cubawait)(Spin **); + +/*********************************************************************/ + +static inline void DoSampleParallel(This *t, number n, creal *x, real *f + VES_ONLY(, creal *w, ccount iter)) +{ + char out[128]; + Slice slice, rslice; + fd_set ready; + int core, abort, running = 0; + const fdpid *pfp; + Spin *spin = t->spin; + cint paccel = spin->spec.paccel; + cint naccel = IMin(spin->spec.naccel, (n + paccel - 1)/IMax(paccel, 1)); + cnumber nrest = IDim(n - naccel*paccel); + cint ncores = IMin(spin->spec.ncores, nrest/MINSLICE); + number pcores = IMin(spin->spec.pcores, nrest/IMax(ncores, 1)); + number nx = nrest - ncores*pcores; + if( nx >= ncores ) nx = 0; + + t->neval += n; + + if( VERBOSE > 2 ) { + sprintf(out, "sampling " NUMBER " points each on %d cores", + pcores, ncores); + Print(out); + } + + slice.n = paccel; + slice.m = IMax(slice.n, pcores); + slice.i = 0; + VES_ONLY(slice.iter = iter;) + DIV_ONLY(slice.phase = t->phase;) + +#ifdef DIVONNE + if( n > t->nframe ) { + FrameFree(t, Master); + t->nframe = n; + FrameAlloc(t, Master); + } + SHM_ONLY(slice.shmid = t->shmid;) +#endif + + SHM_ONLY(if( t->shmid != -1 ) { + slice.m = n; +#ifdef FRAMECOPY + VES_ONLY(Copy(t->frame, w, n);) + Copy(t->frame + n*NW, x, n*t->ndim); +#endif + }) + +#define PutSamples(fd) do { \ + slice.n = IMin(slice.n, n); \ + MASTER("sending samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+") \ + NUMBER "x:%lu]) to fd %d", \ + sizeof slice, VES_ONLY(slice.n, sizeof *w,) \ + slice.n, t->ndim*sizeof *x, fd); \ + writesock(fd, &slice, sizeof slice); \ + SHM_ONLY(if( t->shmid == -1 )) { \ + VES_ONLY(writesock(fd, w, slice.n*sizeof *w); \ + w += slice.n;) \ + writesock(fd, x, slice.n*t->ndim*sizeof *x); \ + x += slice.n*t->ndim; \ + } \ + slice.i += slice.n; \ + n -= slice.n; \ + ++running; \ +} while( 0 ) + +#define GetSamples(fd) do { \ + readsock(fd, &rslice, sizeof rslice); \ + MASTER("reading samples (sli:%lu[+" NUMBER "f:%lu]) from fd %d", \ + sizeof rslice, rslice.n, t->ncomp*sizeof *f, fd); \ + if( rslice.n == -1 ) abort = 1; \ + else SHM_ONLY(if( t->shmid == -1 )) \ + readsock(fd, f + rslice.i*t->ncomp, rslice.n*t->ncomp*sizeof *f); \ + --running; \ +} while( 0 ) + + ++pcores; + pfp = spin->fp; + for( core = -naccel; n && core < ncores; ++core ) { + cint fd = pfp++->fd; + pcores -= (core == nx); + slice.n = (core < 0) ? paccel : pcores; + PutSamples(fd); + } + + abort = 0; + + while( running ) { + int fdmax = 0; + + FD_ZERO(&ready); + pfp = spin->fp; + for( core = -naccel; core < ncores; ++core ) { + cint fd = pfp++->fd; + FD_SET(fd, &ready); + fdmax = IMax(fdmax, fd); + } + fdmax = select(fdmax + 1, &ready, NULL, NULL, NULL); + + pfp = spin->fp; + for( core = -naccel; core < ncores; ++core ) { + cint fd = pfp++->fd; + if( FD_ISSET(fd, &ready) ) { + GetSamples(fd); + if( abort ) break; + if( n ) PutSamples(fd); + if( --fdmax == 0 ) break; + } + } + } + + if( abort ) longjmp(t->abort, -99); + +#ifdef FRAMECOPY + if( t->shmid != -1 ) + Copy(f, t->frame + slice.m*(NW + t->ndim), slice.m*t->ncomp); +#endif +} + +/*********************************************************************/ + +static void DoSample(This *t, number n, creal *x, real *f + VES_ONLY(, creal *w, ccount iter)) +{ + if( t->spin == NULL || + t->spin->spec.ncores + t->spin->spec.naccel < MINCORES || + n < MINCORES*MINSLICE ) + DoSampleSerial(t, n, x, f VES_ONLY(, w, iter)); + else + DoSampleParallel(t, n, x, f VES_ONLY(, w, iter)); +} + +/*********************************************************************/ + +#ifdef DIVONNE + +typedef struct { + number neval, neval_opt, neval_cut; + count nregions, iregion, retval; +} ExploreResult; + +static inline int ExploreParallel(This *t, cint iregion) +{ + Vector(Totals, totals, NCOMP); + csize_t regionsize = RegionSize; + Region *region; + Spin *spin = t->spin; + cint cores = spin->spec.naccel + spin->spec.ncores; + int core = t->running; + int ireg = iregion; + + if( core >= ((iregion < 0) ? 1 : cores) ) { + fd_set ready; + int fd = 0, fdmax = 0; + ExploreResult res; + count comp, succ; + + FD_ZERO(&ready); + for( core = 0; core < cores; ++core ) { + fd = spin->fp[core].fd; + FD_SET(fd, &ready); + fdmax = IMax(fd, fdmax); + } + select(fdmax + 1, &ready, NULL, NULL, NULL); + + for( core = 0; core < cores; ++core ) { + fd = spin->fp[core].fd; + if( FD_ISSET(fd, &ready) ) break; + } + + --t->running; + MASTER("reading res + region (res:%lu+reg:%lu) from fd %d", + sizeof res, regionsize, fd); + readsock(fd, &res, sizeof res); + ireg = res.iregion; + region = RegionPtr(ireg); + succ = ireg + region->next; + readsock(fd, region, regionsize); + if( --res.nregions > 0 ) { + region->next = t->nregions - ireg; + EnlargeRegions(t, res.nregions); + MASTER("reading regions (%dreg:%lu) from fd %d", + res.nregions, regionsize, fd); + readsock(fd, RegionPtr(t->nregions), res.nregions*regionsize); + t->nregions += res.nregions; + + RegionPtr(t->nregions-1)->next = succ - t->nregions + 1; + } + + MASTER("reading totals (tot:%lu) from fd %d", + t->ncomp*sizeof(Totals), fd); + readsock(fd, totals, t->ncomp*sizeof(Totals)); + for( comp = 0; comp < t->ncomp; ++comp ) + t->totals[comp].secondspread = + Max(t->totals[comp].secondspread, totals[comp].secondspread); + + t->neval += res.neval; + t->neval_opt += res.neval_opt; + t->neval_cut += res.neval_cut; + + if( res.retval == -1 ) return -1; + } + + if( iregion >= 0 ) { + Slice slice; + cint fd = spin->fp[core].fd; + slice.n = 0; + slice.i = iregion; + slice.phase = t->phase; + region = RegionPtr(iregion); + MASTER("writing region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) to fd %d", + sizeof slice, sizeof(Samples), regionsize, + t->ncomp*sizeof(Totals), fd); + writesock(fd, &slice, sizeof slice); + writesock(fd, &t->samples[region->isamples], sizeof(Samples)); + writesock(fd, region, regionsize); + writesock(fd, t->totals, t->ncomp*sizeof(Totals)); + region->depth = 0; + ++t->running; + } + + return ireg; +} + +/*********************************************************************/ + +static int Explore(This *t, cint iregion) +{ + if( t->spin == NULL || + t->spin->spec.ncores + t->spin->spec.naccel < MINCORES ) + return ExploreSerial(t, iregion); + else + return ExploreParallel(t, iregion); +} + +#endif + +/*********************************************************************/ + +static void Worker(This *t, const size_t alloc, cint core, cint fd) +{ + Slice slice; + + if( readsock(fd, &slice, sizeof slice) == sizeof slice && + slice.n != -1 ) { +#ifdef DIVONNE + csize_t regionsize = RegionSize; + Vector(Totals, totals, NCOMP); + Spin spin = {{0, 0, 0, 0}}; /* no recursive forks */ + + t->totals = totals; + t->spin = &spin; + t->size = 2*t->ndim + 2; + AllocRegions(t); +#endif + + if( alloc ) { +#ifndef DIVONNE + FrameAlloc(t, Worker); +#endif +#if defined DIVONNE || defined CUHRE + RuleAlloc(t); +#endif + } +#ifdef SUAVE + else SHM_ONLY(if( t->shmid == -1 )) + MemAlloc(t->frame, t->nframe*SAMPLESIZE); +#endif + + if( cubafun_.initfun ) cubafun_.initfun(cubafun_.initarg, &core); + + do { + number n = slice.n; + WORKER("received slice.n = " NUMBER, n); + DIV_ONLY(t->phase = slice.phase;) + + if( n > 0 ) { + real VES_ONLY(*w,) *x, *f; + WORKER("reading samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+") + NUMBER "x:%lu]) from fd %d", + sizeof slice, VES_ONLY(n, sizeof *w,) n, t->ndim*sizeof *x, fd); + +#ifdef DIVONNE + if( slice.m > t->nframe ) { + FrameFree(t, Worker); + t->nframe = slice.m; + SHM_ONLY(t->shmid = slice.shmid;) + FrameAlloc(t, Worker); + } +#endif + + VES_ONLY(w = t->frame;) + x = t->frame + slice.m*NW; + f = x + slice.m*t->ndim; + + SHM_ONLY(if( t->shmid != -1 ) { + VES_ONLY(w += slice.i;) + x += slice.i*t->ndim; + f += slice.i*t->ncomp; + } + else) { + VES_ONLY(readsock(fd, w, n*sizeof *w);) + readsock(fd, x, n*t->ndim*sizeof *x); + } + + slice.n |= SampleRaw(t, n, x, f, core VES_ONLY(, w, slice.iter)); + WORKER("writing samples (sli:%lu[+" NUMBER "f:%lu]) to fd %d", + sizeof slice, slice.n, t->ncomp*sizeof *f, fd); + writesock(fd, &slice, sizeof slice); + if( SHM_ONLY(t->shmid == -1 &&) slice.n != -1 ) + writesock(fd, f, slice.n*t->ncomp*sizeof *f); + } +#ifdef DIVONNE + else { + Samples *samples, psamples; + ExploreResult res; + + WORKER("reading region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) from fd %d", + sizeof slice, sizeof psamples, regionsize, + t->ncomp*sizeof(Totals), fd); + readsock(fd, &psamples, sizeof psamples); + readsock(fd, t->region, regionsize); + readsock(fd, totals, t->ncomp*sizeof(Totals)); + t->nregions = 1; + t->neval = t->neval_opt = t->neval_cut = 0; + + samples = &t->samples[RegionPtr(0)->isamples]; + if( psamples.n != samples->n ) { + SamplesFree(samples); + *samples = psamples; + SamplesAlloc(t, samples); + } + + res.retval = ExploreSerial(t, 0); + res.neval = t->neval; + res.neval_opt = t->neval_opt; + res.neval_cut = t->neval_cut; + res.nregions = t->nregions; + res.iregion = slice.i; + WORKER("writing regions (res:%lu+%dreg:%lu+tot:%lu) to fd %d", + sizeof res, t->nregions, regionsize, + t->ncomp*sizeof(Totals), fd); + writesock(fd, &res, sizeof res); + writesock(fd, t->region, t->nregions*regionsize); + writesock(fd, totals, t->ncomp*sizeof(Totals)); + } +#endif + } while( readsock(fd, &slice, sizeof slice) == sizeof slice && + slice.n != -1 ); + + if( cubafun_.exitfun ) cubafun_.exitfun(cubafun_.exitarg, &core); + +#if defined DIVONNE || defined CUHRE + RuleFree(t); +#endif + + FrameFree(t, Worker); + +#ifdef DIVONNE + free(t->region); +#endif + } + + WORKER("worker wrapping up"); +} + +/*********************************************************************/ + +static inline void ForkCores(This *t) +{ + dispatch d; + const fdpid *pfp; + int ncores, core; + + DIV_ONLY(t->running = 0;) + + d.worker = Worker; + d.thisptr = t; + d.thissize = sizeof *t; + + if( t->spin == NULL ) { + SUFFIX(cubafork)(&t->spin); + if( t->spin == NULL ) return; + d.thissize = 0; + } + + pfp = t->spin->fp; + ncores = t->spin->spec.ncores; + for( core = -t->spin->spec.naccel; core < ncores; ++core ) { + cint fd = pfp++->fd; + writesock(fd, &d, sizeof d); + if( d.thissize ) writesock(fd, t, d.thissize); + } +} + +/*********************************************************************/ + +static inline void WaitCores(This *t, Spin **pspin) +{ + if( Invalid(pspin) ) SUFFIX(cubawait)(&t->spin); + else { + Slice slice = { .n = -1 }; + cint cores = t->spin->spec.naccel + t->spin->spec.ncores; + const fdpid *pfp = t->spin->fp; + int core; + for( core = 0; core < cores; ++core ) + writesock(pfp[core].fd, &slice, sizeof slice); + *pspin = t->spin; + MasterExit(); + } +} + diff --git a/src/external/libCuba/src/common/sock.h b/src/external/libCuba/src/common/sock.h new file mode 100644 index 00000000..13507c8e --- /dev/null +++ b/src/external/libCuba/src/common/sock.h @@ -0,0 +1,65 @@ +/* + sock.h + socket read/write + by Thomas Hahn + last modified 27 May 14 th +*/ + +#include + +#ifdef DEBUG +#define TERM_RED "\e[31m" +#define TERM_BLUE "\e[34m" +#define TERM_RESET "\e[0m\n" +#define MASTER(s, ...) \ +fprintf(stderr, TERM_RED ROUTINE " master %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__) +#define WORKER(s, ...) \ +fprintf(stderr, TERM_BLUE ROUTINE " worker %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__) +#define DEB_ONLY(...) __VA_ARGS__ +#else +#define MASTER(s, ...) +#define WORKER(s, ...) +#define DEB_ONLY(...) +#endif + +#ifdef LOW_LEVEL_DEBUG +#define TERM_GREEN "\e[32m" +#define TERM_MAGENTA "\e[35m" +#define READ(s, ...) \ +fprintf(stderr, TERM_GREEN ROUTINE " pid %d: read " s TERM_RESET, getpid(), ##__VA_ARGS__) +#define WRITE(s, ...) \ +fprintf(stderr, TERM_MAGENTA ROUTINE " pid %d: write " s TERM_RESET, getpid(), ##__VA_ARGS__) +#else +#define READ(s, ...) +#define WRITE(s, ...) +#endif + +/*********************************************************************/ + +#ifndef MSG_WAITALL +/* Windows */ +#define MSG_WAITALL 0 +#endif + +static inline int readsock(cint fd, void *data, csize_t n) +{ + ssize_t got; + size_t remain = n; + do got = recv(fd, data, remain, MSG_WAITALL); + while( got > 0 && (data += got, remain -= got) > 0 ); + READ("%lu bytes at %p from fd %d", n, data, fd); + return got; +} + +/*********************************************************************/ + +static inline int writesock(cint fd, const void *data, csize_t n) +{ + ssize_t got; + size_t remain = n; + do got = send(fd, data, remain, MSG_WAITALL); + while( got > 0 && (data += got, remain -= got) > 0 ); + WRITE("%lu bytes at %p to fd %d", n, data, fd); + return got; +} + diff --git a/src/external/libCuba/src/divonne/KorobovCoeff.c-16033 b/src/external/libCuba/src/divonne/KorobovCoeff.c-16033 new file mode 100644 index 00000000..d242fdc8 --- /dev/null +++ b/src/external/libCuba/src/divonne/KorobovCoeff.c-16033 @@ -0,0 +1,1370 @@ +#define KOROBOV_MINDIM 2 +#define KOROBOV_MAXDIM 257 +#define MAXPRIME 16033 + +#define Hash(x) ((32879 - x)*(-47 + x))/212544 + +static int prime[] = { + FIRST,47,53,59,67,73,79,83,89,97,107,113,127,131,137,139,149,151,157, + 163,173,179,181,191,197,199,211,223,227,229,233,241,251,257,263,269,277, + 281,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397, + 401,409,419,421,431,433,439,449,457,461,467,479,487,491,499,503,509,521, + 523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641, + 643,647,653,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761, + 769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883, + 887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013, + 1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097, + 1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213, + 1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301, + 1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429, + 1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511, + 1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609, + 1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721, + 1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831, + 1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949, + 1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053, + 2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143, + 2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273, + 2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377, + 2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473, + 2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617, + 2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707, + 2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801, + 2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917, + 2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041, + 3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181, + 3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301, + 3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391, + 3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527, + 3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617, + 3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727, + 3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851, + 3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947, + 3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079, + 4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211, + 4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297, + 4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447, + 4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561, + 4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673, + 4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799, + 4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937, + 4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023, + 5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167, + 5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297, + 5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419, + 5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521, + 5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653, + 5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5749,5779,5783, + 5791,5801,5807,5813,5821,5827,5839,5851,5861,5869,5881,5897,5903,5923, + 5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073, + 6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199, + 6203,6217,6229,6247,6257,6263,6269,6277,6287,6301,6311,6323,6329,6343, + 6353,6361,6373,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521, + 6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653, + 6659,6661,6673,6689,6691,6709,6719,6733,6737,6761,6763,6779,6781,6793, + 6803,6823,6827,6841,6857,6863,6871,6883,6899,6907,6917,6947,6949,6959, + 6961,6971,6983,6991,7001,7013,7027,7039,7043,7057,7069,7079,7103,7109, + 7121,7129,7151,7159,7177,7187,7193,7207,7211,7219,7229,7243,7253,7283, + 7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451, + 7457,7459,7477,7481,7489,7499,7517,7523,7537,7549,7561,7573,7583,7591, + 7607,7621,7639,7643,7649,7669,7681,7691,7703,7717,7727,7741,7753,7759, + 7789,7793,7817,7823,7829,7841,7853,7867,7877,7883,7901,7919,7927,7937, + 7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8089,8101,8117, + 8123,8147,8161,8167,8179,8191,8209,8219,8231,8243,8263,8269,8287,8293, + 8311,8317,8329,8353,8363,8377,8387,8389,8419,8429,8443,8447,8467,8501, + 8513,8521,8527,8537,8543,8563,8573,8581,8599,8609,8627,8641,8647,8669, + 8681,8693,8707,8719,8737,8747,8761,8779,8783,8807,8819,8831,8849,8861, + 8867,8887,8893,8923,8933,8941,8963,8971,8999,9001,9013,9029,9043,9059, + 9067,9091,9103,9109,9133,9151,9161,9173,9187,9203,9221,9239,9241,9257, + 9277,9293,9311,9323,9337,9349,9371,9377,9397,9413,9431,9439,9461,9473, + 9491,9497,9521,9533,9551,9587,9601,9613,9619,9629,9643,9661,9677,9689, + 9697,9721,9739,9749,9767,9781,9803,9817,9833,9851,9859,9883,9901,9907, + 9929,9941,9967,9973,10007,10009,10037,10039,10061,10079,10093,10111, + 10133,10141,10159,10177,10193,10211,10223,10247,10259,10273,10301,10313, + 10331,10343,10369,10391,10399,10427,10433,10453,10477,10487,10501,10529, + 10531,10559,10589,10597,10613,10631,10651,10667,10687,10709,10723,10739, + 10771,10781,10799,10831,10837,10859,10883,10891,10909,10937,10949,10973, + 10993,11003,11027,11047,11069,11087,11113,11131,11149,11171,11197,11213, + 11239,11251,11273,11287,11311,11329,11353,11369,11393,11411,11437,11467, + 11483,11497,11519,11549,11551,11587,11617,11633,11657,11677,11699,11719, + 11743,11777,11789,11807,11831,11863,11887,11903,11923,11953,11971,11987, + 12011,12043,12071,12097,12119,12143,12163,12197,12211,12241,12263,12289, + 12323,12343,12373,12391,12421,12451,12473,12497,12527,12553,12583,12611, + 12637,12659,12689,12721,12743,12781,12809,12841,12853,12893,12923,12953, + 12983,13009,13049,13093,13109,13147,13171,13217,13241,13267,13309,13339, + 13367,13411,13441,13477,13513,13553,13591,13627,13669,13697,13729,13781, + 13829,13859,13901,13933,13997,14029,14071,14107,14159,14207,14251,14303, + 14347,14407,14461,14519,14563,14627,14683,14747,14813,14869,14939,15013, + 15091,15161,15259,15349,15443,15551,15679,15823,MarkLast(16033) +}; + +static short coeff[][256] = { + {13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10}, + {23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2}, + {18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2,2,18,13,23,23,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2}, + {27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,6,6,6,6,6,6,25,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,5,5,11,6,6,31,15,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,5,5,11,6,31,31,15,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,5,5,11,31,31,31,15,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,5,5,11,31,31,31,15,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14,13,5,13,13,13,13,5,5,5,5,5,11,31,31,31,15,15,31,31,15,31,31,31,31,15,14,14,15,31,5,5,5,31,14,11,14}, + {29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2,2,2,2,4,2,2,2,29,19,28,32,6,6,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,2}, + {30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,6,2,2,2,30,19,24,16,22,8,2,2,22,5}, + {34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2,2,25,16,6,20,20,36,29,24,3,3,3,27,28,13,28,27,27,27,27,27,2,2,27,27,13,20,20,13,20,36,13,5,5,36,7,7,7,7,7,7,7,7,7,7,7,6,6,24,28,28,29,24,3,3,3,27,28,13,28,27,27,27,27,27,13,7,27,27,13,24,13,13,13,13,13,5,5,7,7,7,7,7,7,7,7,7,7,7,7,6,6,24,28,28,29,24,3,3,3,27,28,13,28,27,27,27,27,27,13,7,27,27,13,24,13,13,13,13,13,13,13,7,7,7,7,7,7,7,7,7,7,7,7,6,6,24,28,28,29,24,3,3,3,27,28,13,28,27,27,27,27,27,13,7,27,27,13,24,13,13,13,13,13,13,13,7,7,7,7,7,7,7,7,7,7,7,7,6,6,24,28,28,29,24,3,3,3,27,28,13,28,27,27,27,27,27,13,7,27,27,13,24,13,13,13,13,13,13,13,7,7,7,7,7,7,7,7,7,7,7,7,6,6}, + {35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17,17,17,17,17,7,7,7,7,17,2,2,17,26,5,5,5,26,23,21,23,21,21,17,17,17,17,17,17,21,21,17,7,7,2,17,17,17,17,2,2,17,17,17,17,17,17,17,17,17,17,17,17,7,7,7,7,17,17,17,17,26,5,5,5,26,23,21,23,21,21,17,17,17,17,17,17,21,21,17,7,7,7,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,7,7,7,7,17,17,17,17,26,5,5,5,26,23,21,23,21,21,17,17,17,17,17,17,21,21,17,7,7,7,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,7,7,7,7,17,17,17,17,26,5,5,5,26,23,21,23,21,21,17,17,17,17,17,17,21,21,17,7,7,7,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,7,7,7,7,17,17,17,17,26,5,5,5,26,23,21,23,21,21,17,17,17,17,17,17,21,21,17,7}, + {41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,2,2,2,41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,2,2,2,41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,2,2,2,41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,2,2,2,41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10,10,10,10,10,22,22,50,10,2,2,12,12,12,12,12,17,23,17,6,6,12,3,3,3,24,23,37,24,5,12,12,6,27,10,27,27,27,27,27,27,27,27,27,27,27,12,12,12,12,12,9,9,22,22,22,10,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,17,23,17,6,6,12,3,3,3,24,23,37,24,5,12,12,6,27,10,27,27,27,27,27,27,27,27,27,27,27,12,12,12,12,12,9,9,12,12,27,10,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,17,23,17,6,6,12,3,3,3,24,23,37,24,5,12,12,6,27,10,27,27,27,27,27,27,27,27,27,27,27,12,12,12,12,12,12,12,12,12,27,10,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,17,23,17,6,6,12,3,3,3,24,23,37,24,5,12,12,6,27,10,27,27,27,27,27,27,27,27,27,27,27,12,12,12,12,12,12,12,12,12,27,10}, + {29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25,25,25,25,10,10,49,10,5,5,5,40,10,33,40,40,45,6,45,45,25,25,25,25,6,6,6,43,34,3,3,3,29,26,43,36,49,11,11,46,46,46,49,49,49,49,29,49,49,6,6,5,5,40,6,6,6,6,31,29,9,9,9,9,9,9,9,49,49,49,49,49,5,5,49,49,49,45,45,45,6,45,45,45,45,36,36,6,6,6,43,34,3,3,3,29,26,43,36,49,11,11,46,46,46,49,49,49,49,29,49,49,6,6,6,6,6,6,6,6,6,31,29,9,9,9,9,9,9,9,49,49,49,49,49,49,49,49,49,49,45,45,45,6,45,45,45,45,36,36,6,6,6,43,34,3,3,3,29,26,43,36,49,11,11,46,46,46,49,49,49,49,29,49,49,6,6,6,6,6,6,6,6,6,31,29,9,9,9,9,9,9,9,49,49,49,49,49,49,49,49,49,49,45,45,45,6,45,45,45,45,36,36,6,6,6,43,34,3,3,3,29,26,43,36}, + {50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,6,2,2,2,50,17,43,6,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,6,2,2,2,50,17,43,6,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,6,2,2,2,50,17,43,6,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14}, + {31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2,2,2,28,7,9,9,31,31,31,31,31,2,31,43,43,43,43,43,43,43,43,31,43,31,31,43,43,31,43,43,43,45,24,3,3,3,31,27,45,20,45,43,43,13,13,26,26,31,31,31,31,31,31,31,9,31,43,43,31,31,31,43,2,43,31,43,43,31,2,2,28,31,31,43,31,31,31,31,31,31,31,43,43,43,43,43,43,43,43,31,43,31,31,43,43,31,43,43,43,45,24,3,3,3,31,27,45,20,45,43,43,13,13,26,26,31,31,31,31,31,31,31,31,31,43,43,31,31,31,43,43,43,31,43,43,31,2,43,31,31,31,43,31,31,31,31,31,31,31,43,43,43,43,43,43,43,43,31,43,31,31,43,43,31,43,43,43,45,24,3,3,3,31,27,45,20,45,43,43,13,13,26,26,31,31,31,31,31,31,31,31,31,43,43,31,31,31,43,43,43,31,43,43,31,43,43,31,31,31,43,31,31,31,31,31,31,31,43,43,43,43,43,43,43}, + {39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,41,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,2,2,2,25,2,5,2,2,25,2,2,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,41,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,2,2,2,25,2,5,2,2,25,2,2,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,41,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,2,2,2,25,2,5,2,2,25,2,2,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,55,10,13,60,21,21,21,2,2,2,2,2,2,2,13,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,55,10,13,60,21,21,21,2,2,2,2,2,2,2,13,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,55,10,13,60,21,21,21,2,2,2,2,2,2,2,13,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16,16,4,23,23,6,23,37,4,2,4,10,2,2,23,16,52,52,52,52,52,22,10,10,10,10,10,2,2,10,10,10,52,10,10,37,51,51,51,51,18,5,5,5,56,22,22,13,18,35,35,6,10,7,34,7,14,13,7,51,7,7,7,34,34,34,52,34,34,34,34,34,34,10,22,22,6,22,22,22,6,35,37,37,37,37,10,10,10,52,52,52,52,52,52,52,22,10,10,10,10,10,10,10,10,10,10,52,10,10,37,51,51,51,51,18,5,5,5,56,22,22,13,18,35,35,6,10,7,34,7,14,13,7,51,7,7,7,34,34,34,52,34,34,34,34,34,34,10,22,22,6,22,22,22,6,35,37,37,37,37,10,10,10,52,52,52,52,52,52,52,22,10,10,10,10,10,10,10,10,10,10,52,10,10,37,51,51,51,51,18,5,5,5,56,22,22,13,18,35,35,6,10,7,34,7,14,13,7,51,7,7,7,34,34,34,52,34,34,34,34,34,34,10,22}, + {46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15,15,15,2,2,2,2,2,2,2,2,2,2,15,15,2,2,15,2,2,2,23,23,32,23,23,2,2,2,2,2,2,2,2,2,2,2,6,6,6,66,6,6,6,5,5,5,66,20,53,18,18,6,6,15,70,70,15,15,15,15,38,43,43,43,38,38,38,38,2,2,2,2,23,38,15,15,15,15,15,15,15,15,2,38,38,38,43,2,2,15,15,15,15,15,15,15,2,2,23,23,38,38,38,38,38,38,20,6,6,6,18,18,38,38,6,6,6,66,6,6,6,5,5,5,66,20,53,18,18,6,6,15,70,70,15,15,15,15,38,43,43,43,38,38,38,38,38,43,15,15,38,38,15,15,15,15,15,15,15,15,15,38,38,38,43,43,43,15,15,15,15,15,15,15,15,15,20,15,38,38,38,38,38,38,20,6,6,6,18,18,38,38,6,6,6,66,6,6,6,5,5,5,66,20,53,18,18,6,6,15,70,70,15,15,15,15,38,43,43,43,38,38,38,38}, + {62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9,2,2,2,2,2,2,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,62,42,43,42,10,11,67,2,2,2,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9,2,2,2,2,2,2,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,62,42,43,42,10,11,67,2,2,2,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9,2,2,2,2,2,2,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,62,42,43,42,10,11,67,2,2,2,2,2,2}, + {64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,4,2,2,2,12,2,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,66,28,28,28,30,44,19,2,2,2,2,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,2,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,66,28,28,28,30,44,19,2,2,2,2,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,2,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2,2,2,2,2,2,2,2,12,12,2,2,2}, + {74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58,2,58,58,58,39,2,39,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,2,2,2,2,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,10,2,2,2,74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58,2,58,58,58,39,2,39,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,2,2,2,2,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,10,2,2,2,74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58,2,58,58,58,39,2,39,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,2,2,2,2,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,2,2,2,50,41,50,58,21,10,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,2,2,2,50,41,50,58,21,10,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2,2,2,2,2,57,57,2,2,2,57,57,2,2,2,2,2,57,57,57,57,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,12,2,2,2,74,21,17,35,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2,2,2,2,2,57,57,2,2,2,57,57,2,2,2,2,2,57,57,57,57,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,12,2,2,2,74,21,17,35,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2,2,2,2,2,57,57,2,2,2,57,57,2,2,2,2,2,57,57,57,57,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,71,48,31,27,71,35,13,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,71,48,31,27,71,35,13,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2}, + {55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,10,2,2,2,45,30,47,29,16,36,45,23,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,10,2,2,2,45,30,47,29,16,36,45,23,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2,2,2,2,59,59,2,2,59,59,2,2,2,59,59,59,2,2,59,2,59,59,59,2,2,2,59,59,2,59,59,59,84,84,84,59,59,2,2,59,59,2,59,59,2,2,59,59,59,2,59,2,59,59,59,59,59,59,59,59,59,2,2,2,2,2,2,2,2,2,2,2,2,2,46,17,24,72,49,9,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2,2,2,2,59,59,2,2,59,59,2,2,2,59,59,59,2,2,59,2,59,59,59,2,2,2,59,59,2,59,59,59,84,84,84,59,59,2,2,59,59,2,59,59,2,2,59,59,59,2,59,2,59,59,59,59,59,59,59,59,59,2,2,2,2,2,2,2,2,2,2,2,2,2,46,17,24,72,49,9,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2,2,2,2,59,59,2,2,59,59,2,2,2,59,59}, + {68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2,4,4,2,2,2,41,64,49,49,8,7,30,24,24,24,24,45,24,2,2,2,24,2,25,44,25,25,25,25,25,25,24,24,24,24,2,24,24,24,24,2,2,41,64,49,43,43,24,24,24,43,43,44,44,44,44,24,44,44,44,44,24,44,24,24,24,24,24,24,24,24,24,22,22,22,18,3,3,3,80,57,23,38,61,38,38,18,75,24,19,19,24,22,44,44,44,24,24,24,35,31,31,31,31,44,44,44,44,44,44,44,24,24,44,44,24,24,44,44,24,53,53,24,24,24,24,24,45,24,24,24,24,24,25,25,44,25,25,25,25,25,25,24,24,24,24,44,24,24,24,24,24,24,24,24,43,43,43,24,24,24,43,43,44,44,44,44,24,44,44,44,44,24,44,24,24,24,24,24,24,24,24,24,22,22,22,18,3,3,3,80,57,23,38,61,38,38,18,75,24,19,19,24,22,44,44,44,24,24,24,35,31,31,31,31,44,44,44,44,44,44,44,24,24}, + {94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,2,66,15,15,15,2,2,15,15,2,2,15,15,2,66,15,15,15,15,15,15,15,2,2,2,2,2,2,2,15,15,15,15,15,15,2,2,2,2,15,15,15,15,15,15,2,2,2,2,2,66,2,2,2,2,2,2,2,2,6,2,2,2,94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,2,66,15,15,15,2,2,15,15,2,2,15,15,2,66,15,15,15,15,15,15,15,2,2,2,2,2,2,2,15,15,15,15,15,15,2,2,2,2,15,15,15,15,15,15,2,2,2,2,2,66,2,2,2,2,2,2,2,2,6,2,2,2,94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2}, + {94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8,8,8,8,2,2,2,34,8,34,8,8,22,7,7,7,2,13,13,29,29,29,29,2,2,2,2,2,2,2,2,102,102,102,13,2,2,8,8,8,8,30,2,2,2,34,8,34,34,8,22,22,29,29,2,31,29,29,7,29,7,7,29,29,7,29,29,35,35,35,35,35,29,41,29,29,41,102,6,6,6,6,6,50,29,65,41,41,102,29,29,29,102,102,40,7,7,29,39,29,39,39,24,39,28,35,29,29,29,29,29,29,29,29,29,29,29,29,29,2,29,29,35,77,77,29,29,7,7,7,7,7,7,29,29,29,29,29,29,29,92,29,7,7,102,102,102,102,102,102,102,31,31,29,29,31,31,31,31,31,31,31,31,29,29,29,29,29,29,31,29,29,7,29,7,7,29,29,7,29,29,35,35,35,35,35,29,41,29,29,41,102,6,6,6,6,6,50,29,65,41,41,102,29,29,29,102,102,40,7,7,29,39,29,39,39,24,39,28,35,29,29,29,29,29}, + {89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32,23,23,98,2,98,8,2,25,2,2,2,2,2,2,2,62,2,55,25,2,2,2,14,2,7,7,60,33,33,33,33,13,62,95,60,2,95,5,5,95,95,95,2,2,2,95,95,95,95,95,2,2,2,2,2,8,8,32,23,23,67,2,67,95,95,95,67,67,67,67,67,67,67,6,6,67,24,24,24,24,40,3,3,3,84,57,75,77,77,45,73,17,45,95,95,95,95,21,95,95,2,2,95,67,67,67,67,67,67,95,2,2,2,8,8,32,23,23,95,2,95,27,27,95,95,95,95,95,95,95,2,52,2,2,25,2,2,62,14,67,7,7,60,33,33,33,67,95,95,95,95,95,95,5,5,95,95,95,95,95,95,95,95,95,95,95,95,67,67,2,2,67,67,67,67,67,67,67,67,95,95,95,67,67,67,67,67,67,67,6,6,67,24,24,24,24,40,3,3,3,84,57,75,77,77,45,73,17,45,95,95,95,95,21,95,95,45,95,95,67,67,67,67,67}, + {101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63,63,19,2,29,29,29,19,45,45,45,45,45,45,45,11,11,19,19,50,72,72,72,72,18,12,3,3,3,18,18,12,12,45,72,72,72,45,55,11,11,50,50,50,50,46,46,46,46,71,14,14,14,14,39,39,39,39,39,39,51,51,51,11,29,71,71,71,45,45,45,71,71,71,71,46,46,46,46,42,14,42,74,74,42,42,7,7,7,55,34,34,13,13,71,14,14,13,13,13,13,34,34,34,13,13,13,45,45,45,45,46,46,46,46,46,46,46,14,74,14,14,14,14,29,14,45,45,45,45,45,45,45,45,45,45,12,12,46,50,72,72,71,71,71,12,71,3,3,18,18,12,12,45,72,55,55,55,55,55,55,55,55,51,51,46,46,46,46,71,14,14,14,14,39,39,39,39,39,39,51,51,51,51,51,71,71,71,71,71,71,71,71,71,71,46,46,46,46,42,14,42,74,74,42,42,7,7,7,55,34,34,13,13,71,14,14,13,13,13,13,34,34,34,13}, + {70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2,2,2,8,10,8,116,61,80,80,80,61,61,2,40,8,53,2,2,80,40,51,116,116,116,2,61,116,116,116,116,116,116,80,80,80,53,53,61,53,35,35,2,2,80,35,35,35,35,35,35,35,35,61,61,61,71,53,53,53,53,53,30,46,61,46,46,46,46,46,53,53,53,53,53,53,53,53,53,53,55,55,62,53,61,61,62,62,117,117,14,3,3,3,70,89,44,37,19,45,22,74,74,54,54,44,54,54,54,44,83,83,44,44,116,116,116,116,116,116,116,116,116,35,35,116,116,116,35,61,116,116,61,53,53,53,61,61,35,53,35,53,53,61,61,61,61,116,116,116,61,61,116,116,116,116,116,116,116,53,53,53,53,61,53,35,35,46,46,35,35,35,35,35,35,35,35,35,61,61,61,71,53,53,53,53,53,30,46,61,46,46,46,46,46,53,53,53,53,53,53,53,53,53,53,55,55,62,53,61,61,62,62,117,117,14,3,3,3,70,89,44,37,19,45}, + {71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11,81,81,81,81,81,81,73,73,73,73,22,22,22,22,15,15,44,44,42,44,42,42,42,98,42,42,114,114,42,9,9,9,42,13,13,13,13,13,9,9,21,21,21,21,36,36,36,36,36,44,26,26,26,26,20,21,20,42,21,71,21,71,11,11,81,81,81,69,63,63,63,28,28,28,28,28,28,41,83,33,41,38,38,38,41,41,38,38,63,38,6,12,66,3,3,3,71,54,83,51,63,85,93,93,93,93,14,93,93,93,85,85,14,14,93,93,14,65,69,69,65,65,65,65,65,65,65,65,65,65,65,65,65,28,28,28,28,28,19,19,28,19,19,19,19,19,19,19,19,19,19,19,19,42,39,39,36,9,9,9,42,13,13,13,13,13,9,13,80,13,21,80,80,80,80,80,93,93,93,42,20,20,20,20,20,20,20,71,71,71,71,69,69,69,69,69,63,63,63,28,28,28,28,28,28,41,83,33,41,38,38,38,41,41,38,38,63,38,6,12,66,3,3,3}, + {109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55,55,55,55,55,55,55,55,55,55,55,55,2,2,48,72,48,48,55,55,55,2,2,2,2,2,2,2,2,2,55,55,2,2,2,2,55,58,58,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,2,2,2,2,2,2,2,2,2,2,2,48,2,2,48,48,2,2,48,2,55,2,2,2,2,2,2,48,48,48,2,55,55,2,2,2,2,2,12,2,2,2,109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55,55,55,55,55,55,55,55,55,55,55,55,2,2,48,72,48,48,55,55,55,2,2,2,2,2,2,2,2,2,55,55,2,2,2,2,55,58,58,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,2,2,2,2,2,2,2,2,2,2,2,48,2,2,48,48,2,2,48,2,55,2,2,2,2,2,2,48,48,48,2,55,55,2,2,2}, + {75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,35,68,33,60,10,2,2,2,39,2,39,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2}, + {81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56,56,2,2,2,2,2,2,2,2,2,8,2,2,2,82,82,8,61,38,96,2,96,96,96,2,82,2,2,82,2,56,56,2,2,2,2,2,2,2,2,2,2,96,96,96,96,96,96,2,2,2,56,2,2,2,96,96,96,2,2,82,82,61,96,96,96,56,96,56,56,56,56,14,56,96,96,96,56,56,2,56,56,56,56,56,96,96,96,96,96,96,96,96,96,96,96,96,56,2,96,14,6,6,5,5,5,105,68,53,14,20,93,93,93,93,93,17,96,96,96,96,96,96,96,96,96,24,96,96,24,24,24,24,96,96,56,56,56,56,56,56,56,56,56,2,2,56,56,56,96,2,2,82,61,61,96,96,96,96,96,96,96,96,96,56,56,56,56,56,56,56,56,56,56,56,56,96,56,56,56,96,96,96,96,96,96,96,56,56,56,56,56,56,96,96,96,96,96,96,96,56,96,96,96,56,96,56,56,56,56,14,56,96,96,96,56,56,56,56,56,56,56,56,96}, + {109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,25,25,25,25,25,25,66,66,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,106,106,2,106,66,14,2,5,5,106,72,72,18,72,18,106,106,2,46,46,46,46,46,91,46,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,25,25,25,2,2,91,66,2,91,91,91,91,91,2,2,106,91,2,2,46,46,46,91,91,91,91,91,91,12,12,12,131,3,3,3,76,96,91,96,21,26,27,84,27,91,91,91,71,21,21,46,106,106,106,106,46,46,106,106,106,46,46,46,46,91,91,57,57,2,46,46,57,104,91,91,91,46,46,46,46,46,46,106,106,106,106,46,46,46,46,11,11,11,11,11,11,106,106,106,106,106,14,11,5,5,106,72,46,46,46,91,91,91,91,46,46,46,46,46,91,46,91,91,91,91,91,91,106,106,46,46,46,91,21,21,21,21,21,21,21,21,21,21,46,91,91,91,91,91,91,91}, + {81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13,13,13,13,13,2,13,13,13,13,13,2,2,2,2,2,2,2,2,20,20,13,13,13,13,13,2,2,2,2,20,20,2,2,2,2,2,2,2,2,4,2,2,2,130,2,130,130,13,13,2,2,2,2,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20,2,2,2,2,2,2,2,2,20,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,103,72,75,28,105,20,20,20,2,2,2,2,20,20,20,20,2,2,2,2,2,2,2,2,2,2,2,2,2,13,13,13,13,13,13,2,13,13,13,13,13,2,2,2,2,2,2,2,2,20,20,13,13,13,13,13,2,2,2,2,20,20,2,2,2,2,2,2,2,2,2,2,2,2,130,2,130,130,13,13,2,2,2,2,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20,2}, + {119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,2,2,2,2,2,4,4,32,2,45,2,2,125,125,125,68,37,37,37,37,37,37,37,37,37,37,37,37,37,37,16,16,52,52,52,52,52,37,37,37,37,52,52,52,52,52,52,37,37,37,37,37,2,52,52,52,37,37,37,37,37,2,2,37,37,37,37,52,52,37,37,37,15,37,37,37,37,37,37,37,52,52,52,37,37,15,15,15,52,52,37,37,37,37,37,37,52,37,37,37,37,37,37,37,100,82,88,52,52,14,14,5,5,5,119,75,42,29,74,23,56,69,39,109,109,109,109,109,52,52,52,52,45,71,52,37,52,52,52,52,15,15,52,52,52,52,15,15,52,52,52,37,37,37,37,37,37,37,37,37,45,45,45,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,52,52,52,52,52,52,37,37,37,37,52,52,52,52,52,52,37,37,37,37,37,37,52,52,52,37,37,37,37,37,37,37,37}, + {115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,2,2,33,33,2,2,2,2,2,2,2,2,2,33,33,2,2,2,2,2,2,33,33,33,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,2,2,2,33,45,45,2,2,33,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,12,2,2,2,115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,2,2,33,33,2,2,2,2,2,2,2,2,2,33,33,2,2,2,2,2,2,33,33,33,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,45,2,2}, + {119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65,2,2,2,2,60,60,60,60,60,65,65,65,65,65,2,2,2,60,60,2,2,2,2,2,2,2,60,60,2,2,65,2,2,2,60,60,2,2,2,65,65,2,2,65,2,2,22,66,66,66,65,65,65,65,65,65,65,65,65,65,65,65,60,60,65,65,65,65,65,65,60,60,65,65,60,60,65,60,60,60,60,60,60,65,65,65,65,60,60,60,65,65,65,65,65,65,65,65,65,65,2,65,65,65,65,65,65,65,60,65,65,65,65,65,65,65,65,65,60,60,80,10,10,10,86,34,77,77,14,15,20,20,20,20,65,65,65,60,60,60,60,65,65,60,65,65,60,65,65,65,65,60,60,60,60,65,60,60,60,60,60,60,60,60,60,65,65,65,65,65,65,65,65,60,60,60,60,60,60,60,60,60,60,60,60,65,65,65,60,60,60,60,60,60,60,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,60,60,65,65,65,65}, + {121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,2,2,46,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,130,120,80,29,80,69,35,33,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,2,2,46,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2}, + {129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16,16,16,75,99,99,99,99,99,99,99,99,2,2,75,16,16,99,99,99,99,99,7,7,99,99,99,2,2,75,16,16,41,41,41,26,44,44,36,36,36,35,2,2,75,44,44,82,44,44,44,20,20,5,5,5,5,5,5,93,93,44,93,93,44,44,44,44,44,44,44,44,93,93,24,24,24,24,24,24,35,35,35,35,35,35,35,35,35,26,35,35,129,129,129,129,129,129,129,129,129,35,129,129,129,129,129,129,17,17,17,129,24,86,35,35,35,35,6,6,6,42,42,42,42,6,60,26,6,6,42,3,3,3,129,123,41,42,43,25,24,11,11,87,87,87,87,93,25,25,25,99,99,25,25,25,25,25,25,25,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,41,41,41,26,44,44,36,36,36,35,35,35,44,44,44,82,44,44,44,20,20,5,5,5,5,5,5,93}, + {128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98,98,98,98,98,41,98,98,9,9,9,98,98,98,98,98,98,41,41,41,41,41,115,41,113,50,98,98,98,98,2,98,98,113,113,113,113,98,98,14,14,14,98,98,98,98,86,86,14,12,3,3,3,91,86,86,86,91,91,91,91,91,91,91,91,70,94,94,94,94,94,98,94,94,94,94,94,94,94,50,50,50,98,98,98,98,19,19,19,19,19,19,19,9,9,98,98,98,98,98,19,19,19,115,115,115,115,113,115,19,19,19,70,70,70,70,113,70,94,70,94,94,14,14,14,67,151,151,151,22,22,22,90,90,10,10,10,80,33,99,68,22,68,68,106,106,90,106,34,34,34,106,34,29,29,29,29,29,29,29,106,61,61,106,61,61,115,61,61,61,61,61,61,61,61,61,61,61,61,61,61,70,70,61,70,51,70,70,51,51,51,51,70,31,31,31,31,31,31,31,31,31,31,31,31,31,14,31,14,23,94,31,31,31,31,61,14,31,70,3,3,91,86,70,70}, + {101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2,2,107,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,107,2,2,2,2,2,107,2,2,2,6,2,2,2,101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2,2,107,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,132,40,40,54,46,114,114,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2,2,2,2,2,2,2,2,2,8,93,2,2,29,29,8,8,23,17,17,17,2,48,48,48,48,2,48,48,23,48,48,2,2,93,48,2,2,93,93,45,93,93,93,93,23,23,93,23,23,2,2,92,78,9,9,9,76,76,25,25,25,39,39,39,39,27,75,75,75,72,72,72,72,72,93,2,2,27,2,2,2,93,27,27,27,27,27,27,27,48,27,48,27,2,2,27,93,27,2,2,29,29,45,45,45,45,45,45,45,27,27,27,27,45,45,45,45,27,27,48,48,45,75,27,75,75,48,48,75,48,48,48,48,45,151,151,151,54,115,117,151,3,3,3,149,48,69,79,117,13,79,33,27,27,27,26,37,37,48,56,56,48,75,75,48,45,45,48,48,37,37,75,75,75,75,75,75,75,75,75,75,48,48,48,93,75,2,2,75,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,45,48,45,45,45,48,48,48,48}, + {105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,19,19,19,19,19,2,2,2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,23,19,19,19,19,19,19,2,2,2,2,2,2,51,19,19,19,51,51,51,2,2,2,2,19,2,19,19,2,2,2,19,19,2,2,2,2,2,2,2,19,2,2,19,19,19,2,19,2,51,2,2,2,2,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,71,71,2,2,2,2,2,2,2,2,6,18,2,2,2,105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2,19,19,19,19,19,2,2,2,19,19,19,19,19,19,19}, + {99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,79,2,2,79,79,79,2,79,2,79,79,79,79,79,2,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,79,79,2,79,2,2,2,2,2,2,79,2,2,79,2,2,79,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,2,2,2,2,2,2,4,2,2,2,99,112,62,67,66,77,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,79,2,2}, + {109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,60,60,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,99,42,166,78,78,166,82,77,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,60,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,60,60,60,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,2,75,2,2,2,2,2,2,60,60,60,60,60,60,60,2,2,60,2,60,75,75,60,60,75,2,2,2,2,2,2,2,2,2,60,2,2,10,2,2,2,105,72,16,89,50,72,117,117,28,2,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,60,60,2,2,2,2,2,2,2,2,2}, + {106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,123,2,2,2,2,75,75,2,2,2,123,2,2,2,2,2,2,2,2,123,123,2,2,2,123,123,123,123,123,123,75,75,75,123,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,123,123,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,8,16,2,2,2,106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,123}, + {115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,51,51,51,51,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,105,60,135,32,43,50,21,31,135,2,92,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,51,51,51,51,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80,2,113,2,113,2,2,2,2,15,15,2,2,8,128,15,15,15,113,113,113,113,113,2,15,15,15,68,68,60,103,68,15,15,15,103,95,95,95,95,55,15,15,17,17,17,15,17,17,17,17,17,17,113,113,2,2,51,113,15,113,113,113,60,113,21,21,21,21,21,21,15,59,59,59,15,15,15,15,15,15,15,15,15,15,15,113,113,15,15,15,60,68,68,68,60,103,68,15,15,15,103,95,95,95,95,55,15,51,146,146,146,146,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,45,45,45,45,45,45,45,45,45,143,143,143,45,15,133,45,45,45,45,45,138,138,138,45,45,45,45,45,45,28,6,138,46,24,38,18,5,5,5,146,50,46,50,21,138,80,18,18,18,18,18,18,138,18,18,18,18,18,18,18,146,146,146,59,59,59,59,21,21,59,80,80,80,80,80,80,80,80,6,38,38,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80}, + {119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,53,53,2,2,53,53,53,53,53,2,2,140,138,11,11,160,53,53,53,129,53,53,53,129,129,53,53,53,53,53,53,53,53,129,129,53,53,53,53,129,129,129,53,53,53,53,53,129,129,53,53,53,129,129,129,53,53,53,53,53,129,129,53,129,129,129,129,53,53,53,129,129,129,129,129,53,53,53,53,53,129,53,53,53,53,53,129,129,129,129,129,129,129,129,53,53,2,53,53,53,53,53,53,53,53,53,129,187,3,3,3,124,91,38,132,92,187,21,120,34,34,34,34,129,129,129,129,129,129,66,53,53,129,129,129,129,129,129,129,129,53,53,53,53,53,53,53,53,53,53,53,53,53,53,129,53,53,53,53,53,53,53,53,53,53,53,53}, + {121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2,2,97,97,2,2,97,97,2,2,35,35,97,97,97,2,97,2,2,2,2,2,10,2,2,2,2,2,2,2,2,166,97,97,97,2,97,2,2,2,97,35,35,35,97,97,97,2,2,2,2,35,35,2,97,2,2,2,97,97,97,97,97,97,12,2,2,12,97,2,2,60,32,32,32,128,97,97,97,97,2,2,97,97,97,97,35,35,97,35,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,35,97,35,35,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,35,35,97,35,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,42,21,21,21,171,126,76,52,26,37,57,171,171,171,171,124,35,35,35,35,97,97,97,97,97,97,97,97,97,35,35,35,97,97,97,97,97,97,97,97,97,97,97,97,97,35,35,97,97,97,97,97,97,97,97,97}, + {155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,48,48,103,48,103,2,2,2,48,2,91,91,91,2,2,2,2,2,2,2,2,2,2,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,2,48,48,48,48,48,2,48,48,48,48,2,48,48,2,48,48,48,48,48,48,48,48,48,48,48,48,48,2,48,48,48,48,2,2,2,48,48,2,48,48,2,48,48,48,48,48,48,2,2,48,2,2,2,2,2,2,2,2,2,2,2,2,2,48,2,2,2,2,2,48,48,2,48,4,48,2,14,2,2,2,155,86,32,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,116,2,2,2,2,2}, + {164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,2,2,2,98,53,43,66,50,18,40,14,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96,8,128,133,133,128,6,6,18,2,2,2,133,133,133,81,81,81,128,128,128,81,110,2,2,2,4,96,96,96,18,35,35,35,35,35,94,94,94,96,96,110,96,35,35,128,128,18,35,6,6,45,112,2,2,133,133,133,81,81,81,128,128,128,81,110,2,2,45,45,45,35,35,35,45,45,8,45,45,45,45,45,45,45,35,35,35,35,128,35,83,83,74,7,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,129,129,129,129,129,129,45,45,45,45,45,129,45,45,45,7,7,35,35,35,35,35,35,35,35,45,35,35,35,35,35,35,35,35,35,35,112,112,35,45,45,45,45,45,45,45,45,45,45,45,45,45,45,148,45,148,114,44,161,120,172,22,5,5,5,187,120,138,17,71,52,25,21,42,21,21,21,21,21,62,62,42,57,137,137,57,57,52,52,52,90,90,45,45,45,90,90,90,90,45,45,45,45,45,35,35}, + {179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,2,2,2,2,32,32,35,35,69,69,103,37,103,103,103,103,103,103,103,103,103,103,69,103,103,103,103,103,103,103,103,103,103,103,103,103,119,42,42,42,119,86,86,86,86,86,86,103,103,103,103,103,103,103,103,103,103,103,69,103,103,103,103,103,103,103,103,103,103,103,6,6,6,6,6,6,44,44,13,44,44,18,13,13,82,135,103,103,103,103,19,19,103,103,103,103,103,83,83,83,103,103,56,83,56,103,39,97,97,42,42,42,119,86,86,86,83,83,83,19,19,19,19,83,83,83,19,103,103,103,103,103,103,103,19,19,19,19,19,103,83,103,33,56,135,56,56,135,135,135,135,135,83,83,95,83,110,135,135,135,135,20,20,20,20,56,55,55,56,56,28,110,110,19,19,87,87,87,124,124,58,5,5,5,126,135,76,76,61,85,205,14,7,7,7,7,7,7,7,55,55,61,38,56,56,56,56,135,135,135,135,135,135,135,39,135,135,135,135,56,56,56,135,135}, + {136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36,36,2,2,2,2,2,2,2,2,28,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,14,4,14,2,14,2,2,2,84,84,72,72,98,98,151,24,13,41,13,41,41,13,13,13,13,13,13,13,13,13,13,13,41,41,41,41,41,41,41,41,41,13,13,13,13,13,13,41,41,13,41,41,41,13,13,13,13,13,13,41,41,13,13,13,124,124,124,124,124,2,2,41,41,13,13,13,13,13,13,2,2,41,41,41,41,41,41,41,41,41,41,13,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,83,83,13,13,41,41,41,41,13,13,41,41,13,13,13,13,13,13,13,13,13,13,13,41,41,41,41,41,41,13,13,41,41,41,41,41,10,52,176,10,10,20,5,5,5,136,136,148,173,66,10,169,95,95,163,30,30,41,41,41,41,30,41,59,59,59,59,59,59,59,205,13,129,129,41,41,41,129,129,129,129,41}, + {165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41,2,2,2,2,2,2,2,2,2,2,2,15,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,15,2,2,2,2,2,2,2,2,2,2,2,2,2,14,2,2,2,154,70,70,70,180,180,180,164,180,107,2,78,15,15,15,15,15,15,15,15,15,2,15,107,2,2,107,15,107,107,41,107,107,107,107,107,107,107,15,15,107,107,107,107,107,107,2,2,2,107,107,15,15,15,15,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,15,15,15,15,107,107,107,107,15,15,107,107,107,107,15,15,107,107,107,107,15,15,15,15,15,15,2,6,149,60,116,3,3,3,165,138,62,48,19,54,12,15,117,34,34,34,85,107,107,107,107,107,107,107,107,152,15,65,65,65,107,107,15,15,15,15}, + {169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37,37,2,32,37,2,2,32,25,25,34,84,40,55,32,32,32,2,40,32,37,40,40,40,40,40,40,40,48,40,37,37,14,14,14,14,40,40,40,40,10,20,5,5,5,148,148,148,5,113,113,20,86,148,148,148,117,148,48,48,48,48,48,48,48,148,37,37,40,48,48,48,48,48,37,48,12,12,126,12,3,3,3,12,51,51,51,47,47,47,47,47,65,47,92,92,92,30,30,71,71,71,71,71,71,71,71,71,71,71,71,71,40,40,26,26,26,26,26,5,5,148,148,148,5,113,113,26,26,26,26,26,26,26,92,92,92,92,92,92,92,92,92,92,92,92,14,14,92,92,92,92,26,26,26,26,26,26,92,92,26,26,26,26,26,92,92,30,92,92,92,92,26,92,92,92,92,92,92,92,71,71,71,124,124,124,124,122,118,118,118,118,122,118,13,13,13,142,66,164,97,35,120,45,26,26,23,92,92,71,23,45,45,77,77,77,92,92,92,92,92,92,92,92,30}, + {135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,2,2,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,2,2,2,2,2,2,35,35,2,2,2,35,35,2,2,2,2,2,2,2,2,2,35,35,35,35,35,35,35,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,35,2,35,35,35,2,2,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,2,2,2,135,63,152,82,50,18,99,2,117,117,2,2,98,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,63,63,63,2,63,63,63,63,38,38,38,38,38,63,63,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,18,2,2,2,193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2}, + {145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146,146,146,94,94,94,2,2,2,2,2,2,2,2,2,2,146,146,146,146,146,146,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,94,94,94,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,2,2,2,25,25,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,20,2,2,2,145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2}, + {144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,91,91,2,2,2,91,2,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,91,91,2,2,91,91,91,91,91,91,2,2,91,2,2,91,2,2,2,2,2,2,2,2,2,91,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,176,129,190,98,36,46,47,52,52,52,82,2,2}, + {145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2,217,12,2,2,2,2,2,2,2,2,2,2,2,78,2,2,47,2,2,2,2,217,217,217,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,2,2,2,2,2,2,2,47,47,2,78,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,47,47,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,78,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,2,2,2,145,78,166,171,103,140,89,2,2,33,33}, + {191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2,2,2,2,2,36,36,2,36,2,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,72,67,2,2,18,18,32,2,2,2,72,177,177,54,54,54,54,2,2,191,4,14,14,14,14,14,67,24,24,119,117,117,117,117,117,36,36,14,14,14,14,14,4,4,14,14,36,36,39,36,36,36,2,2,2,2,2,2,2,2,2,67,67,67,67,14,14,2,2,2,2,24,14,14,14,14,2,2,2,4,4,4,72,60,60,10,10,14,14,14,14,2,2,72,177,177,54,14,14,14,14,14,14,14,60,14,14,14,14,14,14,14,14,14,117,14,14,14,14,10,14,14,106,106,106,14,14,14,14,14,10,10,10,10,10,10,14,14,14,14,14,14,10,10,10,168,168,168,14,14,14,66,10,119,119,14,14,14,119,119,119,119,210,210,210,69,60,60,119,119,14,224,10,5,5,5,185,69,176,116,47,75,109}, + {186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,132,132,2,2,2,157,157,157,2,157,157,132,132,132,132,132,2,157,132,2,203,2,2,2,2,2,2,157,2,2,2,2,2,2,157,2,157,2,2,2,157,2,2,2,2,2,2,2,2,2,157,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,157,2,2,2,157,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,18,2,2,2,186,96,29,122,47}, + {151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143,143,143,143,143,74,74,74,2,2,143,143,74,2,74,74,74,74,74,2,2,143,2,143,143,2,2,2,2,2,90,90,2,2,2,2,2,2,2,2,2,90,2,2,2,2,2,2,143,143,143,2,2,2,2,2,2,2,2,2,2,2,74,74,2,2,2,2,143,143,143,2,143,143,143,2,2,2,2,2,2,2,2,143,2,143,2,2,2,2,2,2,2,2,143,143,74,74,143,2,2,90,143,2,2,2,2,143,2,2,2,143,143,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,143,143,2,143,143,143,143,2,143,2,143,2,2,2,2,2,143,2,2,2,2,2,2,2,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,98}, + {144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136,2,2,44,2,2,2,2,2,2,136,136,136,136,136,136,136,2,2,44,44,2,2,2,136,136,2,2,2,136,136,2,2,2,2,2,2,2,2,136,2,2,2,2,2,2,2,2,2,136,136,2,2,2,136,2,2,2,2,2,2,2,2,2,2,136,2,2,2,2,2,2,2,2,2,136,136,136,136,136,2,2,136,136,136,2,136,2,2,136,136,2,136,136,2,136,136,2,2,69,168,168,183,102,44,44,136,136,136,136,136,136,136,248,163,163,163,163,136,163,2,2,163,163,15,15,15,15,15,136,136,136,136,136,136,136,136,136,136,136,136,136,163,163,163,136,136,163,136,136,163,163,163,136,163,136,136,136,163,136,136,163,163,136,163,136,136,163,136,136,136,163,163,163,163,163,163,163,163,163,163,163,136,136,163,163,163,163,136,136,136,136,136,136,163,136,136,136,136,136,136,136,163,163,136,136,163,163,163,163,163,136,136,136,136,163,163,136,136,136,136,163,163,163,136}, + {189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,28,28,28,2,2,2,2,2,2,2,2,2,2,28,28,28,28,28,28,28,28,28,28,28,2,2,2,28,28,28,28,28,28,28,28,28,28,28,28,102,102,102,102,102,102,2,2,2,40,40,28,28,28,28,28,28,2,2,28,28,28,28,28,28,2,2,2,2,2,2,2,2,2,102,2,28,28,28,2,2,2,2,2,2,2,40,2,2,2,2,2,2,28,102,2,102,102,102,102,102,102,102,102,102,102,28,28,28,28,2,2,2,102,2,2,2,2,2,2,2,2,2,102,102,2,2,2,2,2,2,28,28,28,28,2,2,2,2,2,40,40,2,40,40,40,40,40,40,2,2,40,40,2,2,2,2,28,28,102,102,102,102,102,2,2,102,102,102,28,28,28,28,28,2,2,2,28,28,28,2,2,2,2,28,2,2,2,2,2,28,2,28,28,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28}, + {165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95,2,2,2,2,2,95,95,95,95,95,95,2,2,2,2,2,99,134,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,99,99,2,2,2,134,134,134,99,99,134,134,134,134,134,2,134,2,95,95,95,95,95,2,2,2,2,2,2,2,2,2,99,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,2,2,2,2,2,2,95,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,95,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,95,95,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,95,2,2,2,2,2,2,2,2,2,2,2}, + {169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,92,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,92,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,2,2,151,151,151,2,2,151,151,151,2,151,151,2,151,151,2,2,151,2,2,2,2,151,151,2,2,151,151,151,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,151,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,184,184,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,108,108,108,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,36,144,2,108,108,2,2,52,151,208,208,108,108,108,108,108,108,184,184,184,184,108,184,108,108,184,108,184,108,184,184,108,108,184,184,184,184,108,184,184,184,184,184,184,108,108,108,108,108,184,184,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,184,108,108,108,108,184,184,184,108,184,184,184,184,184,184,108,108,184,184,184,184,184,184,184,108,108,108,108,108,184,184,184,184,184,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108}, + {154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,75,75,75,75,75,75,2,2,153,2,153,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,75,75,75,75,75,75,2,2,153,2,153,153,2,2,2,153,153,153,2,63,153,153,2,2,2,2,2,153,153,153,2,63,63,63,63,2,2,2,153,153,2,2,2,83,83,83,83,83,83,83,83,83,83,83,2,2,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,40,40,40,40,40,40,40,40,40,63,153,63,153,40,40,40,40,40,83,83,83,63,40,40,83,83,83,83,83,83,83,83,83,83,40,63,63,2,40,40,63,83,83,83,40,83,83,40,40,40,40,40,40,40,83,83,63,83,83,40,83,40,40,83,83,40,40}, + {169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,169,13,13,169,169,184,169,169,2,169,169,169,169,169,2,2,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,2,2,114,114,108,114,114,128,135,169,169,169,169,169,169,17,17,13,13,135,135,135,135,135,135,169,169,2,2,169,17,169,169,2,2,2,169,169,169,169,169,169,169,169,169,110,110,110,169,135,135,169,135,135,135,169,169,169,169,169,135,245,245,17,245,169,110,110,44,136,44,17,17,17,44,44,132,200,75,75,136,75,75,75,44,44,135,169,135,110,110,110,110,110,110,110,110,110,110,135,135,135,110,135,110,110,245,245,245,135,135,245,245,245,200,245,245,245,245,110,110,110,245,245,245,169,169,169,169,169,169,245,245,245,169,169,169,245,169,169,169,169,169,110,110,169,245,245,245,13,13,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,110,110,245,245,245,245,245,110,245,245,245,245,245,245,245,245,245}, + {241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2,2,2,2,2,2,2,2,190,190,2,2,190,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,190,190,190,190,2,2,2,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,2,2,2,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,67,2,2,2,2,30,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,30,2,2,2,190,190,190,91,91,91,30,2,2,2,30,2,2,2,2,190,30,30,30,30,2,2,190,190,30,30,190,2,190,190,190,2,2,2,2,2,2,170,170,2,2,2,2,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71,71,71,71,2,71,71,2,2,2,71,71,71,71,2,2,71,71,71,2,84,71,2,71,71,71,2,2,71,71,71,71,71,71,104,104,104,2,104,71,130,2,2,97,110,158,158,71,71,71,119,71,71,71,71,71,104,71,2,2,130,71,130,130,104,104,104,104,104,104,130,130,71,104,130,104,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,104,130,130,130,130,130,130,130,130,130,130,130,130,130,130,98,98,130,98,9,9,9,106,171,109,109,171,171,25,95,95,95,95,95,95,95,95,95,104,95,95,95,95,149,149,149,149,95,95,104,95,149,149,104,71,71,71,71,71,71,104,104,104,104,71,104,71,104,104,104,104,95,95,95,149,71,95,95,104,104,104,104,71,71,104,71,71,104,104,104,104,104,104,104,104,104,104,71,95,95,71,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,149,104,149,104,104,104,104,149,104}, + {165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,2,83,83,83,83,83,2,83,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,83,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,143,2,2,83,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,143,2,2,2,2,2,2,2,2,2,74,74,74,74,74,74,2,2,83,2,2,2,2,2,2,2,2,2,2,83,2,2,74,2,74,74,74,2,2,2,2,74}, + {221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52,52,52,52,52,52,36,52,134,134,134,52,52,52,52,52,26,26,26,227,227,227,101,101,101,101,101,101,101,67,67,67,67,2,74,74,12,12,6,12,12,3,3,3,94,94,36,36,36,36,36,9,52,52,9,203,203,203,94,94,94,52,52,271,271,271,31,31,31,83,198,31,83,83,83,83,83,191,83,83,83,83,83,134,134,134,134,134,52,31,52,52,80,80,80,80,80,80,80,170,170,170,170,170,78,78,78,92,92,113,92,92,92,80,10,20,10,10,10,69,61,61,61,78,135,78,78,121,121,39,39,113,113,94,94,113,121,121,121,121,113,80,92,92,123,123,123,170,170,80,80,80,22,22,22,271,271,271,83,83,271,271,271,271,271,271,31,31,31,83,198,31,83,83,83,83,83,83,171,171,175,175,175,175,175,175,122,122,122,12,33,33,3,3,94,94,36,36,36,113,113,170,170,170,110,110,110,110,110,110,110,110,110,110,110,110,110,73,73,73,110,110,110,110,110}, + {230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97,97,2,97,2,2,97,97,2,97,97,2,97,2,2,2,2,2,2,2,2,2,2,2,2,97,97,97,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,97,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,280,280,280,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,97,97,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,97,97,2,2,97,2,97,97,2,2,2,2,2,2,97,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,2,2,2,2,2,200,200,200,200,2,200,200,2,2,2,200,2,200,200,200,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,200,200,200,200,200,2,13,13,13,13,13,2,200,200,200,13,13,13,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,47,47,47,2,2,148,2,2,2,2,2,2,148,148,2,123,148,148,2,2,2,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,148,148,2,148,148,148,148,148,2,2,2,30,43,2,2,2,148,148,2,2,2,2,2,2,2,148,148,148,148,148,30,148,22,7,7,7,118,112,112,112,30,30,30,112,112,112,112,9,22,97,97,97,132,132,22,132,132,132,148,148,148,148,148,148,243,243,2,123,123,132,132,132,132,132,132,132,132,132,132,132,148,132,132,148,132,148,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,148,148,92,92,123,123,123,132,132,132,132,132,132,132,132,132,132,132,132}, + {239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144,144,144,144,144,144,144,144,144,144,144,144,2,2,2,144,2,2,2,144,144,144,2,2,2,2,2,2,2,2,2,2,2,158,2,2,2,2,2,2,2,2,2,2,2,2,2,2,144,144,144,2,2,2,2,144,144,2,144,2,144,2,2,2,144,144,144,144,144,144,144,144,144,144,144,2,2,144,144,144,144,144,144,2,144,144,144,144,2,144,144,144,144,144,144,144,144,144,144,144,144,144,53,53,144,144,144,2,2,144,144,144,2,144,144,2,144,144,144,144,144,144,144,2,144,144,144,144,144,144,144,144,144,144,144,144,2,2,144,144,144,144,144,144,144,144,2,2,2,144,2,2,2,2,2,2,2,2,2,2,144,2,2,2,2,144,144,2,2,2,144,144,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,144,2,144,144,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47,2,2,2,2,4,2,2,2,2,4,2,2,2,47,128,128,128,128,57,57,57,128,128,128,2,2,2,2,201,201,2,201,201,2,73,201,73,47,47,73,201,201,201,201,201,2,201,201,201,4,2,2,2,2,4,201,2,2,47,128,128,128,128,132,132,201,201,132,132,2,132,132,132,132,132,132,132,132,2,73,73,73,47,47,73,73,2,73,132,73,2,132,132,160,4,2,112,112,2,22,201,2,2,47,128,128,128,112,112,128,128,132,112,112,112,112,112,112,112,174,112,112,112,112,112,112,112,132,132,160,160,160,160,160,160,160,112,201,112,112,112,112,112,174,174,132,2,2,47,128,174,174,174,112,112,112,112,112,174,112,174,132,132,132,174,112,112,112,112,112,112,112,112,112,112,112,112,14,174,174,174,174,174,174,174,174,112,112,112,112,112,112,112,160,160,160,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,112,112,112,112,112,112,112,112,112,112,112}, + {179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2,50,125,20,20,67,67,67,77,67,67,67,8,8,117,117,117,67,67,67,117,67,67,67,2,2,134,42,168,42,21,21,21,58,232,58,58,124,124,124,42,104,104,104,98,98,104,104,104,104,117,117,67,117,117,117,117,117,98,117,117,117,117,2,98,117,67,67,108,104,104,104,108,108,108,108,108,117,98,98,112,67,112,112,112,104,104,104,104,112,112,117,117,104,104,21,21,58,104,104,104,104,104,104,104,104,104,112,112,112,112,272,112,112,104,104,104,104,104,104,73,22,131,277,114,22,7,7,7,220,225,98,98,98,98,98,98,93,93,185,185,185,185,22,112,112,112,112,112,112,112,112,112,112,112,112,112,112,108,21,21,112,106,106,106,272,272,272,272,272,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,96,96,117,104,104,272,104,104,104,104,104,104,104,104,104,104,104,104,98,98,104,104,104,104,117,117,117,117,299,23,23,41,41,41,41,41,108,23,23}, + {246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103,103,2,73,73,73,73,73,73,73,73,73,73,73,2,2,2,2,2,35,2,2,2,2,2,71,73,73,2,2,2,61,73,73,73,2,2,2,73,61,73,73,73,24,24,73,73,73,73,73,73,73,73,73,35,73,73,73,197,73,73,73,73,73,24,24,24,24,24,12,73,73,50,61,2,2,50,45,27,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,73,73,73,73,73,73,73,73,73,73,73,61,61,61,61,73,73,61,61,61,61,61,73,61,61,61,61,61,73,73,73,73,73,73,73,73,73,73,73,73,73,2,73,73,73,73,73,73,2,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,61,61,61,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,2,2,50,73,61,61,73,73,73,61,61,61,61,61,61,61,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,61,73,73,73,73,197}, + {239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,18,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,241,2,241,241,2,241,241,2,2,2,241,241,241,241,2,2,2,2,2,2,2,2,241,241,2,2,2,2,18,18,18,18,18,18,2,238,2,2,241,2,2,2,2,2,2,2,241,2,241,241,241,2,2,2,2,2,2,18,241,241,241,2,2,2,2,18,241,2,2,2,241,2,18,2,2,18,18,18,18,18,18,2,18,241,241,241,241,2,2,2,241,241,241,241,2,2,241,241,241,18,18,18,18,241,241,241,241,241,241,241,241,241,241,18,18,241,241,241,241,241,241,241,241,241,2,2,18,241,241,241,2,2,2,2,2,2,2,2,241,241,2,2,2,2,2,2,241,241,2,2,2,2,2,2,241,2,241,241,241,241,241,241,2,2,2,2,2,2,2,2,2,2,2}, + {191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125,2,2,2,2,125,125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195,195,195,195,195,195,195,131,195,195,195,195,195,261,57,57,57,201,77,228,228,228,228,228,57,57,57,59,59,131,131,195,195,195,195,195,195,195,195,2,195,195,131,195,195,195,195,195,195,195,195,195,195,195,195,131,195,195,195,195,195,195,57,57,57,201,77,228,228,228,228,228,228,131,131,59,83,227,131,131,195,195,195,170,170,170,170,170,170,170,170,170,170,170,170,195,195,195,195,261,131,195,195,131,195,195,195,195,195,104,104,57,57,201,77,228,228,104,104,104,104,104,104,104,104,104,104,104,6,104,104,106,6,6,6,6,6,89,138,170,89,89,222,89,89,89,104,104,104,89,89,91,91,91,83,83,83,44,44,57,57,44,44,44,44,44,44,44,44,44,44,44,44,261,89,89,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,74,74,74,74,74,74,74,30,30,17,17,17,17,17,57,57,201,17,17,261,261,261,261,261,91,91,91,204,91,91,261,261}, + {259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,234,234,2,2,74,2,2,2,234,2,234,234,234,234,234,2,2,234,2,234,234,2,2,234,234,234,234,234,74,2,2,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2,2,32,16,8,24,24,24,298,298,95,2,2,32,16,102,102,42,42,42,42,298,2,2,262,262,262,42,298,298,298,298,121,2,115,121,115,115,115,115,115,115,115,141,141,141,115,115,115,115,115,115,115,115,115,115,298,298,298,167,167,167,167,167,121,121,298,298,298,298,298,298,298,298,298,298,298,125,125,125,125,125,298,298,213,213,284,284,284,284,284,284,284,97,97,97,97,97,97,156,156,13,13,97,97,113,97,113,113,113,113,113,113,113,113,113,113,113,113,100,113,113,113,170,170,170,170,170,170,170,170,139,100,100,251,251,251,251,251,251,261,261,251,251,251,251,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,68,68,68,68,68,68,68,12,12,12,68,12,12,12,12,12,68,68,12,12,12,12,12,12,113,113,174,113,113,97,113,97,97,261,97,97,14,14,14,14,14,14,14,14,14,14,139,139,139,139,139,174,174,174,174,139,156,139,139,139,232,232,139,139}, + {264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284,284,94,2,2,94,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,2,2,2,2,2,2,94,2,2,2,2,284,284,284,151,2,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,4,4,16,16,2,2,2,80,76,107,168,168,168,76,4,4,151,151,151,151,80,2,187,94,94,94,94,94,94,94,12,12,2,94,94,94,94,94,94,94,94,2,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,2,94,2,2,12,2,2,2,2,2,2,12,12,284,284,284,284,284,94,94,12,12,12,12,284,2,2,2,2,151,2,150,94,94,94,94,2,2,2,2,2,2,94,94,2,2,12,94,12,12,12,94,94,94,94,94,94,94,94,2,2,80,76,107,168,168,94,12,12,261,261,261,261,12,261,261,261,12,12,94,12,12,12,12,187,187,94}, + {194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,285,2,2,2,2,2,2,2,285,285,2,2,285,285,2,2,2,285,285,285,285,285,2,2,285,285,2,2,285,285,285,285,285,285,285,285,2,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,2,2,2,285,285,285,2,2,2,285,285,285,285,285,285,285,285,285,285,285,285,285,285,2,2,2,285,2,285,285,285,2,2,2,2,2,2,2,2,2,2,285,285,2,2,2,2,2,285,2,2,2,285,285,2,2,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,285,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,162,2,2,2,2,2,2,2,2,2,2,2,2,112,112,2,2,2,2,2,2,2,162,2,2,2,2,2,2,2,2,2,162,2,2,2,2,2,2,162,2,2,2,2,2,2,2,2,2,2,2,2,2,162,162,162,162,162,162,162,162,162,2,2,162,162,162,2,2,2,2,2,162,2,162,2,2,162,2,162,162,162,2,2,162,162,162,2,2,18,18,2,2,2,2,2,2,162,2,2,2,162,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,2}, + {281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2,2,2,2,2,99,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,9,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,211,2,2,2,227,211,211,211,2,211,2,4,2,2,2,144,48,108,12,12,257,22,316,316,132,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,112,112,112,112,2,112,112,112,112,112,211,211,2,2,2,2,2,2,2,2,2,2,2,211,2,2,2,211,211,112,9,112,115,115,112,211,112,211,211,2,2,2,211,211,211,2,211,211,211,211,211,211,211,211,211,112,112,112,112,112,119,112,112,112,2,2,2,112,112,112,2,2,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2,144,48,112,112,112,211,211,211,211,211,211,112,112,112}, + {271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,80,80,2,2,2,2,2,2,2,2,2,2,2,80,80,80,2,80,80,2,2,2,2,2,2,2,2,2,156,103,103,193,67,67,38,38,209,80,80,80,80,2,80,2,2,2,2,2,2,2,326,326,326,326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,326,326,326,326,326,326,326,326,326,326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,80,80,13,13,13,13,13,13,2,2,2,326,326,326,326,326,13,13,80,2,2,2,2,2,2,326,2,2,80,103,103,193,67,67,38,38,209,80,80,80}, + {200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,29,2,2,2,113,2,29,2,2,2,2,2,2,2,2,113,113,113,113,113,2,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,13,13,13,13,13,104,2,4,29,29,29,62,2,2,2,2,62,62,62,62,62,62,62,62,62,62,173,173,29,29,29,2,29,29,2,2,2,29,29,29,29,62,62,62,113,29,29,62,62,113,113,2,2,113,62,29,29,29,29,113,113,113,113,113,29,29,29,29,62,62,62,62,62,2,113,113,113,29,29,29,29,29,29,29,113,113,62,62,62,62,62,62,62,62,29,29,62,62,62,62,62,29,29,29,29,29,29,29,29,29,29,29,29,2,29,29,29,29,29,29,2,2,40,29,29,62,62,62,62,62,29,29}, + {288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2,114,2,2,2,2,51,51,2,2,2,2,2,2,2,2,2,2,2,2,2,51,51,51,2,2,2,2,2,2,2,51,51,2,2,2,51,51,51,51,51,51,2,2,2,114,114,114,114,2,2,2,51,2,2,131,2,2,131,2,2,2,2,2,114,51,51,51,2,2,2,2,2,114,114,2,2,2,2,2,2,2,2,114,114,51,51,51,51,51,51,51,114,114,51,51,51,51,114,114,114,114,114,114,114,114,51,252,252,114,114,114,51,51,2,114,114,51,51,51,2,2,2,2,2,2,2,114,114,2,2,2,2,2,2,2,2,2,2,114,114,114,2,114,114,114,131,131,131,2,2,51,2,2,51,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,114,114,114,114,2,2,2,2,114,114,114,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,114,114,2,114,114}, + {311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113,2,2,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,113,113,113,113,113,113,2,2,113,2,2,2,2,113,113,2,2,113,113,113,113,113,113,113,2,113,113,2,2,113,113,113,113,2,113,113,2,2,2,2,2,2,2,2,2,113,2,2,2,113,2,2,113,113,113,2,2,2,2,2,2,2,2,2,113,113,113,113,2,2,2,2,2,2,2,2,2,2,113,2,2,2,113,113,113,2,2,113,2,2,113,2,2,2,2,2,113,2,2,2,2,2,2,2,2,2,2,2,2,2,113,113,2,113,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,113,113,113,113,113,2,113,2,2,2,2,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,73,2,2,2,197,2,2,2,2,2,2,197,197,73,197,197,197,2,2,197,197,197,2,2,2,197,197,2,197,197,197,197,197,197,197,197,197,197,2,2,2,197,197,197,2,197,2,197,73,2,197,197,197,2,2,197,73,73,73,2,197,197,73,197,197,197,197,197,2,2,2,2,2,2,2,2,2,73,73,73,73,73,73,2,2,2,2,197,197,2,197,2,2,2,2,197,197,2,197,2,2,2,197,197,2,2,2,2,2,2,2,2,197,197,197,197,2,10,197,2,10,197,2,2,121,318,47,47,47,180,47,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,2,2,197,197,197,197,197,73,197,197,197,197,197,197,197,197,197,197,197,197,197}, + {176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,213,2,2,2,2,2,2,2,2,2,2,213,2,133,2,213,213,213,2,2,2,2,2,2,2,2,2,133,133,133,133,133,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,213,24,133,2,2,279,54,259,259,213,133,133,133,133,133,213,133,133,133,213,213,213,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,213,213,213,213,213,213,213,213,213,213,213,213,213,133,133,133,133,133,133,133,213,133,213,213}, + {283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,2,2,2,2,212,212,212,2,212,2,112,112,112,112,112,112,112,2,2,112,112,112,112,112,112,112,112,112,112,112,2,112,186,186,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2,2,2,2,2,2,112,112,112,2,112,212,212,212,212,212,2,2,2,212,212,2,2,2,2,2,2,2,2,2,2,2,2,2,212,212,212,212,212,212,212,112,112,112,112,112,112,112,2,112,112,112,2,2,124,124,2,2,2,124,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,124,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,158,158,158,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,220,220,2,2,220,220,2,2,220,220,220,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,220,220,220,220,2,220,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,149,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263,195,263,2,195,195,195,195,195,195,195,195,195,263,35,35,35,35,263,263,263,263,263,263,2,263,263,263,263,263,2,2,263,263,263,263,2,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,193,193,2,2,35,193,263,263,263,263,263,263,263,2,35,35,35,35,263,2,2,2,2,263,263,263,263,263,2,2,2,35,110,110,110,263,263,263,263,263,263,35,35,35,2,2,35,263,263,263,263,263,2,2,2,2,2,263,2,2,263,2,2,35,35,35,35,35,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,263,2,2,2,263,2,2,263,2,2,263,263,263,263,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,266,297,297,146,263,263,36,263,123,123,263,263,263,263,2,2,195,195,195,195,263,263,263,263,263,263,263,263,263,195,263,263,195,195,263,263,263,263,263,263,263,263,263,263,263,263,263,195,195,195,195,195,195,195}, + {246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,182,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,231,231,231,2,231,2,2,2,2,2,2,2,2,2,2,2,2,23,2,2,2,2,2,2,2,2,2,2,2,2,2,231,231,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,16,2,2,2,133,285,259,259,259,65,170,234,189,182,2,231,231,97,97,2,2,2,2,2,2,215,2,308,231,182,2,182,231,231,2,2,182,2,2,2,2,182,182,182,2,182,23,231,182,182,182,182,182,182,182,182,182,182,182,2,182,2,2,2,2,2,2,2,2,97,2,2,2,2,182,182,182,182,182,182,182,182,182,182,182,2,2,2,182,23,23,2,2,231,231,231,231,2,2,2,2,2,182,23,23,2,23,23,23,23,23,23,23,2,182,182,182,2,2,23,23,2,2,2,2}, + {229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,2,2,2,2}, + {251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185,2,2,2,2,142,2,2,2,2,142,142,2,2,2,2,2,2,142,142,142,2,2,142,142,142,142,142,142,185,2,2,2,142,142,142,142,142,142,142,142,142,142,142,142,2,142,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,142,142,2,2,2,2,2,2,142,142,142,2,142,142,142,142,142,142,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,2,2,2,2,2,2,2,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,185,185,2,2,2,2,2,2,2,2,2,2,2,2,2,108,142,2,2,2,2}, + {232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90,90,2,61,61,2,2,2,126,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,144,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,274,274,2,2,160,160,2,29,29,29,2,2,160,2,274,29,274,274,274,274,274,2,274,274,29,29,2,2,160,160,160,160,2,2,160,29,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,274,2,274,274,2,2,2,274,274,274,274,2,2,160,2,2,2,2,2,2,117,117,160,160,160,2,274,274,274,160,160,160,160,160,160,160,2,2,160,160,160,160,160,160,160,160,160,160,160,160,160,2,2,2,2,2,160,2,2,2,2,2,2,2,2,2,160,160,160,2,2,2,2,2,160,160,2,2,2,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,117,2,2,2,2,2,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,160,160,2,160,160,160,160,160,160,160,160,29,29,29,29,160,160,2,2,160,160,160,160,160}, + {360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,163,2,2,163,2,2,2,2,2,2,2,163,2,2,2,2,2,2,163,163,159,2,2,159,2,163,2,2,163,163,163,2,2,2,2,2,2,2,190,190,2,128,2,2,2,128,46,292,292,199,15,338,338,29,338,338,159,159,159,159,2,163,159,159,2,159,159,159,159,159,159,159,163,159,159,159,159,159,159,2,159,159,159,2,159,159,159}, + {356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2,2,2,2,2,2,251,251,251,251,2,2,2,2,2,2,2,2,2,2,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,251,251,2,2,2,2,2,2,2,251,2,2,251,251,251,251,251,251,2,2,2,251,2,2,2,2,251,2,2,2,2,2,2,2,2,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,227,2,227,2,2,2,2,2,2,2,2,2,2,251,2,2,2,2,2,2,2,2,200,2,2,2,2,251,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,198,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,16,16,16,16,16,209,16,16,16,16,198,198,198,198,198,198,198,2,2,2,2,2,2,2,2,2,2,2,198,198,198,198,2,198,198,198,198,198,198,198,198,2,198,198,198,198,198,198,198,198,282,282,25,25,25,107,214,205,205,121,65,174,174,174,174,174,198,198,174,27,27,27,198,198,198,198,198,198,198,198,198,198,198,198,152,198,152,198,198,198,198,198,198,27,27,27,27,27,2,2,2,2,198,198,84,84,203,203,2,2,16,16,16,16,51,203,203,203,203,203,203,203,198,198,198,198,203,203,51,152,152,152,198,198,198,198,198,198,198,198,198,198,198,198,79,198,198,198,194,194,152,152,152,152,152,152,164,164,107,86,352,20,25,5,5,125,125,52,52,241,241,71,71,71,20,194,194,331,194,194,194,194,194,139,352,352,352,352,152,352,352,352,352,198,352,152,152,198,198,254,254}, + {337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,21,2,2,2,2,2,2,2,2,21,21,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,2,2,2,2,21,21,21,2,2,2,2,2,2,21,21,21,21,21,2,2,2,200,21,200,2,2,2,2,2,2,2,21,21,2,200,21,21,21,21,21,21,21,21,21,21,2,2,2,2,2,2,2,2,2,133,133,133,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,21,21,21,2,2,2,2,2,2,2,2,2,2}, + {192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101,2,2,2,101,101,101,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,101,101,2,2,2,2,2,101,101,101,101,101,101,101,101,101,101,101,11,11,101,101,2,101,101,2,2,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,2,101,101,101,101,101,101,101,101,2,101,101,101,101,101,2,101,101,101,101,101,101,2,101,101,101,101,101,101,101,101,101,2,2,101,101,101,101,101,101,33,33,33,33,2,2,2,2,2,2,2,2,2,2,33,33,2,2,2,2,2,2,2,11,2,2,101,11,33,33,2,2,33,33,101,101,101,2,2,2,101,101,11,11,11,2,2,101,2,2,2,2,2,11,11,33,2,164,164,164,164,2,2,2,2,101,164,33,33,33,33,101,33,101,394,394,394,394,394,394,394,394,33,394,101,101,101,2,2,2,2,164,164,164,164,164,2,164,164,164,2,164,2,2,2,2,2}, + {264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83,2,2,173,173,173,173,173,173,173,173,2,2,2,2,2,2,173,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,173,2,2,2,2,2,83,83,2,2,2,2,2,2,2,173,173,173,2,2,173,173,2,173,173,173,2,2,2,173,173,173,173,173,173,2,173,173,2,2,224,224,173,2,173,173,173,173,173,173,2,173,173,2,2,173,2,2,173,2,2,173,173,2,2,2,173,173,173,173,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,83,2,83,83,2,2,2,2,2,173,173,2,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,173,83,83,173,2,2,2,2}, + {254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88,88,127,2,258,258,127,88,88,2,2,2,215,215,88,215,215,215,215,88,88,215,88,88,215,215,127,127,127,127,127,127,180,2,180,180,215,215,195,195,2,215,215,215,2,2,8,8,2,2,88,88,88,186,2,2,4,2,2,2,210,247,56,105,105,88,61,61,88,120,180,2,2,71,71,71,120,61,2,2,120,97,180,180,88,88,88,88,180,180,180,180,180,180,180,180,180,180,88,88,2,97,97,195,195,195,195,180,180,180,180,180,180,180,180,180,293,157,127,293,293,180,180,180,180,180,180,180,157,157,157,157,157,157,157,180,180,180,180,180,180,180,215,215,215,215,180,180,180,2,2,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,101,180,180,180,180,180,180,180,180,180,180,180,180,180,215,215,215,215,215,215,215,215,215,215,180}, + {341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125,2,2,2,125,292,125,125,125,125,125,381,381,381,381,381,2,2,381,381,381,381,125,381,381,381,381,25,25,25,25,25,25,25,381,381,381,125,125,125,125,125,125,292,292,292,125,232,232,232,232,125,125,125,232,292,292,292,125,2,2,2,292,292,125,125,125,125,125,125,125,25,25,25,25,381,381,125,125,2,25,25,125,2,260,292,25,265,265,25,25,25,25,25,25,2,25,25,25,125,125,125,125,292,292,125,2,144,2,144,2,2,2,25,25,4,4,2,4,2,2,2,125,87,329,12,283,283,287,283,12,12,292,210,210,210,210,210,210,210,2,2,2,381,381,381,25,25,292,292,125,125,125,125,125,2,2,292,292,125,125,125,125,125,125,25,25,25,25,25,25,25,25,25,292,292,292,292,292,292,381,265,265,265,265,265,260,260,265,265,125,292,292,292,292,260,260,25,25,25,125,260,260,260,260,260,260,260,260,260,260,260,292,292,292,292,381,381,381,381,381,381,292,292,381}, + {355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,120,2,2,2,138,120,120,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,2,120,2,120,120,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,120,120,120,2,138,2,2,2,2,2,2,138,138,2,2,2,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,250,71,71,55,61,61,334,193,55,55,55,120,120,120,120,120,120,120,120,120,138,138,138,120}, + {274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53,53,2,2,334,2,81,81,334,2,2,2,2,2,2,81,81,81,81,53,81,81,81,53,334,81,81,81,81,81,334,334,126,2,2,2,2,2,2,334,334,122,334,334,334,334,334,2,2,2,2,2,2,2,81,81,81,81,81,81,126,126,126,126,110,110,110,110,110,126,24,126,2,2,2,110,128,353,353,12,126,12,18,2,2,2,256,256,96,96,96,128,29,29,29,12,12,73,73,2,2,53,53,12,12,12,53,53,53,201,2,2,201,201,201,201,201,201,201,53,110,110,110,53,53,110,53,53,2,2,2,53,53,53,53,53,53,53,53,53,53,334,110,110,110,334,126,126,126,53,110,334,110,110,334,110,110,334,334,334,53,53,53,53,42,110,53,53,53,53,53,53,81,42,42,42,53,53,53,53,53,53,334,334,334,334,334,334,334,334,334,334,204,296,296,204,204,150,98,62,17,17,17,186,200,111,34,34,200,200,200,200,121,121,121,121,212,334,179,179,53,53,334,334,179}, + {349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125,2,2,2,2,2,2,125,125,2,2,125,2,2,2,2,2,2,2,2,2,2,2,2,25,2,2,2,125,2,2,2,2,2,125,125,2,2,2,125,125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125,125,125,125,125,125,125,125,125,125,2,2,2,125,125,125,125,125,2,2,2,2,2,2,2,125,2,125,125,125,2,2,125,2,2,2,2,2,2,125,2,2,2,2,2,125,2,2,2,2,125,2,2,2,2,2,2,2,2,125,2,2,2,2,2,2,2,2,2,125,125,125,125,125,125,125,125,2,2,2,2,2,125,125,125,2,125,125,125,125,125,125,125,125,125,125,125,2,2,2,125,125,125,2,2,2,125,125,2,2,2,125,125,2,125,125,125,125,125,125,125,2,125,125,2,2,2,2,2,2,2,2,2,125,125,2,125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2,2,2,32,138,138,32,32,32,246,246,2,246,385,90,90,90,90,90,2,2,90,90,90,90,90,246,246,2,90,62,62,90,90,21,21,21,168,39,42,171,171,227,227,227,246,90,90,90,62,42,42,42,42,42,90,42,195,195,195,195,52,52,52,192,192,181,90,246,2,2,90,90,90,90,52,52,52,246,52,246,171,90,90,90,90,90,52,52,52,52,52,52,52,52,52,42,90,62,62,90,90,21,21,21,78,39,168,171,171,171,227,227,42,90,90,171,171,42,171,171,181,47,181,47,47,47,181,195,195,195,195,36,36,36,36,36,195,195,195,90,90,120,120,120,52,52,52,52,52,90,181,52,181,181,181,460,181,181,195,195,195,120,120,120,120,36,62,90,90,21,21,21,78,168,168,171,171,42,52,195,36,36,120,120,120,120,120,120,120,211,211,164,164,164,164,164,164,164,164,164,272,460,208,9,9,9,190,173,25,175,272,272,113,259,259,259,259,259,131,131,224,224,224,259}, + {287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22,22,22,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,360,360,360,360,360,360,360,360,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22,22,22,22,22,22,2,2,2,2,2,2,2,2,2,2,2,2,2,381,2,2,381,381,2,2,2,2,2,22,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,360,360,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,360,360,360,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285,179,179,179,179,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,179,179,179,179,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,2,64,64,64,64,135,64,64,64,2,4,4,179,2,99,99,2,2,2,179,312,199,199,179,199,199,199,199,2,199,285,285,285,179,179,179,179,179,199,2,2,2,2,2,2,2,2,2,2,2,2,2,179,2,2,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,35,35,2,2,64,64,64,64,135,64,64,64,2,4,18,35,35,159,159,2,2,2,35,35,35,35,35,35,35,35,35,35,159,159,159,159,199,199,199,199,199,199,199,199,199,2,2,2,199,199,199,2,199,2,2,312,312,312,312,312,312,312,2,2,2,2}, + {359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2,2,311,2,311,2,2,2,2,2,2,2,106,106,2,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,2,2,2,2,2,2,2,106,106,2,2,2,106,2,106,2,106,106,106,106,106,106,2,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,106,106,2,2,2,170,170,2,2,2,112,112,112,2,2,2,311,311,106,106,106,106,106,106,106,106,311,106,106,106,106,106,106,106,106,106,106,2,2,106,106,106,106,311,311,311,106,106,106,106,106,106,106,106,106,106,106,106,106,311,311,106,106,2,106,106,106,106,106,106,2,2,106,106,106,106,106,106,106,106,311,311,311,311,311,311,311,311,106,106,106,106,106,106,2,106,106,2,106,106,106,106,106,106,106,106,106,106,2,106,112,112,106,112,106,106,2,106,2,2,36,2,2,2,162,265,144,240,240,240,330,330,106,395,395,106}, + {288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,225,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,225,225,2,2,2,225,225,225,2,225,225,225,2,2,2,2,2,2,225,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,225,2,2,2,225,225,225,225,225,225,2,2,2,225,225,225,225,225,225,225,225,2,2,2,2,2,2,225,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,41,2,2,2,2,2,2,2,2,2,2,2,2,210,210,210,210,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,210,2,2,2,2,2,2,2,2,210,210,2,210,2,210,210,2,210,210,210,2,2,2,2,2,2,2,2,2,2,2,2,210,210,210,2,2,2,2,210,2,2,2,2,2,210,210,210,210,210,2,2,2,2,2,2,210,2,2,2,2,2,2,2,2,2,2,2,2}, + {292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146,146,146,146,146,2,2,146,146,2,2,2,2,146,2,2,2,2,2,2,2,146,146,146,2,2,2,62,62,2,2,2,114,114,2,2,2,2,2,2,2,2,114,2,114,114,114,114,114,114,114,114,114,114,114,114,2,2,2,2,2,2,2,2,146,146,146,114,114,2,2,2,2,2,2,2,2,2,114,2,2,2,2,2,2,2,2,2,2,377,377,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,114,2,2,2,2,72,6,50,62,146,146,2,2,283,50,113,370,18,18,18,146,125,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,2,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,114,114,146,146,146,146,146,146,146,146,146,114,114,114,114,114,146,146,146,146,114,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146}, + {282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323,2,2,2,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,2,2,2,2,2,2,285,285,2,285,2,285,285,55,55,55,285,285,285,285,285,285,285,285,285,285,2,285,285,285,2,2,2,2,285,2,2,2,2,285,2,2,2,285,285,2,2,285,2,285,2,2,2,285,2,2,285,285,285,285,285,285,285,285,285,285,2,2,285,285,2,2,2,285,2,2,2,2,2,2,2,285,285,285,2,285,285,285,285,285,285,285,285,285,285,285,285,2,2,2,2,2,2,2,285,285,285,285,285,285,285,285,285,285,2,2,285,285,285,2,285,285,285,285,285,285,285,2,285,285,285,285,285,285,2,2,285,285,285,285,285,285,2,285,285,2,285,285,2,2,2,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,2,2,2,2,285,55,285,55,55,285,285,2,285,285,285,285,285,285,285,285,285,285,285,285,285,2,2,18,2,2,2,45,120,120,21}, + {299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2,2,2,2,2,88,88,2,2,8,8,22,2,2,2,293,293,293,293,293,293,180,180,2,2,180,104,184,180,180,184,184,180,2,180,88,2,88,88,88,88,88,2,352,352,352,2,2,2,2,293,88,293,293,2,8,180,22,2,2,2,293,293,293,293,293,293,88,88,2,2,180,180,180,180,139,326,139,139,326,326,326,88,88,88,139,139,139,139,139,139,237,237,2,86,237,237,333,333,333,2,8,180,326,139,2,2,293,237,237,237,139,333,333,333,139,139,326,326,326,326,326,326,326,326,326,326,326,326,326,104,104,86,147,147,147,147,147,147,326,326,326,326,326,326,326,326,326,72,326,72,2,72,72,237,237,237,237,237,237,326,326,237,237,237,237,237,237,237,139,139,139,139,139,326,326,326,326,326,326,139,139,139,139,139,132,132,276,276,72,139,139,139,139,139,72,333,72,72,72,72,132,132,132,132,132,72,72,72,72,72,72,72,72,132,132,132,333,333,333,6,6,411,72,72}, + {282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2,2,2,135,135,135,241,99,99,99,99,99,99,99,2,2,2,2,241,135,135,135,241,135,135,2,241,135,135,241,241,241,241,241,241,241,241,241,135,2,135,135,135,2,2,2,2,2,2,2,2,99,2,241,2,241,52,52,52,52,2,2,2,241,241,241,135,154,135,135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,241,2,2,99,154,154,154,135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,73,73,2,135,135,135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,241,2,2,2,2,2,2,2,241,241,2,241,241,241,2,2,241,2,241,2,2,2,2,2,2,2,2,2,2,2,2,241,241,2,154,154,2,2,2,2,2,241,241,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122,122,122,122,122,122,122,122,122,94,94,94,94,2,2,122,2,2,2,2,2,2,94,94,94,2,122,122,28,94,94,94,28,28,94,94,94,139,139,139,139,139,139,139,139,139,139,139,2,2,2,2,2,2,2,2,2,2,2,94,94,94,139,139,139,139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,94,2,2,2,2,2,2,2,2,2,2,2,2,2,122,122,122,122,2,2,2,2,2,94,122,122,122,2,2,2,2,2,2,2,2,6,6,6,28,28,6,28,24,6,2,2,2,331,52,52,189,84,323,323,331,2,2,2,2,454,129,129,129,129,129,2,2,122,122,122,122,122,122,122,122,28,28,129,129,129,129,122,122,122,122,122,122,122,122,122,122,122,122,122,94,94,122,122,122,122,122,122,122,94,94,94,94,94,94,94,94,122,122,122,122,139,122,122,122,122,122,122,122,122,122,122,94,94,94,122,122,94,94}, + {288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177,279,177,177,279,2,2,279,279,408,408,408,279,2,2,2,2,2,2,279,279,279,2,2,279,177,177,54,54,2,2,279,2,2,2,2,2,2,2,2,279,279,2,2,279,2,2,279,408,279,2,2,2,279,279,2,2,2,2,279,279,177,177,2,2,2,2,2,2,2,2,2,2,2,408,408,408,408,408,408,408,2,2,2,408,408,2,2,2,2,2,2,279,2,2,2,2,2,279,2,2,279,279,2,279,279,279,279,279,279,2,2,2,177,2,2,2,279,279,279,2,2,2,2,2,279,279,279,2,2,2,2,2,2,54,2,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,279,2,2,2,2,2,2,2,2,2,2,2,2,279,2,2,2,2,279,279,279,279,279,279,2,279,2,2,279,2,2,2,279,279,279,2,2,2,2,279,279,279,279,2,2,2,2,279,279,279,279,279,279,2,279,2,279,279,279,279,2,2,2,279,2,2,2,279,279}, + {288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167,167,167,2,202,167,167,80,167,167,2,2,2,2,2,2,2,167,167,202,202,167,167,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,167,2,2,2,2,202,202,2,2,2,2,2,2,2,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,98,211,211,211,230,148,148,175,202,202,202,202,202,202,202,2,2,2,114,114,114,114,114,114,2,2,2,202,202,2,2,2,2,2,2,2,2,2,54,202,202,202,202,202,202,2,2,167,202,2,2,202,167,19,202,202,2,202,167,202,202,202,202,80,80,80,202,202,202,202,202,202,202,202,202,202,2,202,202,202,202,202,202,202,202,202,202,202,2,69,69,2,69,69,2,202,202,2,2,2,202,202,202,202,202,202,202,202,202,202,202,202,202,202,80,80,80,80,80,12,80,202,202,323,202,12,3}, + {286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2,2,2,315,315,315,315,315,315,2,2,291,253,253,291,253,2,2,315,315,2,2,315,315,315,2,2,315,315,315,315,315,315,315,315,315,315,2,315,315,315,315,315,315,253,253,253,253,253,253,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,2,2,2,2,315,2,315,315,2,253,253,2,2,2,253,253,253,253,253,315,315,315,2,2,2,2,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,2,2,2,2,2,2,2,2,2,2,2,2,2,315,315,315,2,2,2,315,315,315,2,2,2,2,315,315,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,315,315,315,2}, + {407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119,119,119,119,119,2,2,169,2,2,2,2,2,2,342,2,2,342,342,342,342,342,342,342,2,2,342,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,342,119,119,119,2,342,2,2,2,2,342,342,342,342,342,342,342,342,2,342,2,2,342,342,342,342,342,342,2,2,2,342,342,119,119,342,342,342,342,342,342,342,342,342,2,2,342,342,342,342,4,4,2,342,342,2,2,90,84,84,84,169,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,77,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,2,342,342,342,342,342,342,342,342,342,342,77,77,342,342,342,342,342,342,342,342,342,342,342,342,278,278,278,342,342,342,342,342,342,342,342,342,342,342,2,342,278,278,278,342,342,342,342,342,342,278,278,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342}, + {398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,291,95,95,111,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,218,218,2,218,218,218}, + {390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,111,111,2,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,111,111,111,2,2,2,2,2,2}, + {393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,61,2,2,61,61,61,2,61,2,2,2,2,2}, + {408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,219,219,219,219,219,2,2,2,2,2,2,2,2,2,2,2,2,408,2,408,2,2,408,408,2,408,408,2,408,408,408,2,408,2,408,2,2,2,2,2,2,2,2,408,408,408,408,408,408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,102,2,2,2,2,187,190,21,21,396,118,118,21,2,2,124,124,124,303,2,2,2,2,2,2,2,2,2,181,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,219,2,219,219,2,2,2,2,2,2,219,219,219,2,2,219,219,219,219,2,219,219,219,219,219,219,219,219,219,219,219,219,2,219,219,219,2}, + {294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,33,33,33,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,2,2,2,2,2,2,2,2,2,2,2}, + {415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,196,196,2,2,196,196,196,196,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,196,2,33,33,33,2,2,196,33,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206,2,2,2,2,307,2,2,2,307,307,2,2,2,2,2,2,2,2,335,335,335,335,335,335,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,307,307,307,307,307,307,2,2,2,2,2,2,2,2,2,2,307,307,2,2,335,307,307,307,307,307,206,206,2,307,2,2,2,2,307,307,307,307,307,307,307,2,307,307,307,307,2,307,2,2,2,2,2,2,2,2,2,307,307,206,307,307,2,307,2,2,2,2,307,307,307,307,2,2,2,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,2,2,216,216,54,216,216,307,307,307,307,307,307,307,2,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307}, + {417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2,2,2,161,2,2,2,2,2,2,2,2,2,2,161,161,161,2,2,2,2,2,2,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,266,266,2,345,2,2,2,2,2,2,2,345,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,2,4,2,2,2,190,153,153,95,254,199,345,345,345,345,345,345,345,345,345,345,2,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,2,345,345,2,2,345,345,345,2,345,345,345,345,345,345,345,345,345,345,345,2,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,2,2,2,345,345,345,345,345,345,345,345,345,345}, + {456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158,158,256,459,256,64,2,128,459,16,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,128,16,158,158,256,256,256,256,2,2,2,16,2,2,2,2,2,459,2,2,2,2,140,2,459,2,2,2,2,128,16,158,64,256,256,256,172,172,172,172,172,106,106,106,106,106,106,2,2,144,144,106,106,106,106,106,2,2,128,16,158,64,106,106,106,106,106,106,106,106,106,106,106,106,329,329,329,329,106,329,329,329,329,329,67,2,2,67,67,67,67,67,67,67,67,67,22,22,22,22,22,22,22,22,22,22,22,22,22,172,172,172,172,172,172,172,172,172,172,172,172,172,172,141,27,62,22,27,27,27,27,27,22,62,62,62,62,75,75,75,75,62,62,62,75,75,27,27,27,75,75,75,27,140,27,27,140,140,140,36,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,222,222,222,222,222,222,222,222,222,222,222,222}, + {307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,283,283,283,283,283,2,2,2,2,2,2,2,2,2,283,283,283,283,283,283,283,2,2,2,2,2,2,2,2,2,2,2,283,283,283,283,2,2,2,283,2,2,283,283,283,283,283,283,283,283,283,2,283,2,2,2,283,283,283,283,283,283,283,283,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,253,253,2,2,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,253,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,253,253,2,2,2,2,2,2,2,2,2,2,253,253,253,253,253,253,253,2,253,253,253,253,253,253,253,253,253,253,253,2,253,253,253,253,253,110,110,110,110,253,253,253,253,253,2,253,253,253,253,253,253,2,2,253,253,253,253,253,253,181,253,253,253,253,253,253}, + {311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234,234,234,234,2,2,234,2,2,2,2,2,234,2,2,2,2,2,2,203,203,203,203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,234,203,203,203,2,2,2,2,2,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,203,203,2,2,2,2,2,234,234,2,2,2,234,234,234,2,2,2,2,2,2,203,203,203,234,2,2,2,2,2,2,2,234,234,234,2,2,2,2,2,2,2,234,234,234,2,2,2,2,2,203,234,234,2,234,234,2,203,234,234,234,234,234,2,234,203,203,234,234,234,203,2,203,203,2,203,234,2,203,203,203,203,234,203,2,2,2,2,203,203,203,234,234,203,203,203,203,234,203,203,234,234,234,234,234,234,234,234,203,203,2,2,203,203,234,234,234,234,2,2,2,203,203,203,203,203,203,203,203,234,234,234,234,234,234,234,234,234,234,203,203,203,203,203,203,234,234,234,234}, + {437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,24,24,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,459,2,459,459,459,2,2,2,2,2,2,2,2,70,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2,2,2,78,78,78,78,94,94,121,121,70,70,398,24,24,24,24,24,24,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,24,24,24,24,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,364,2,2,136,136,136,136,136,2,136,2,2,2,2,2,2,2,24,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8,2,2,2,159,502,502,502,502,16,120,203,430,430,430,2,2,2,2,2,480,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,276,2,2,2,2,2,41,41,41,41,2,2,2,2,2,2,2,2,94,2,94,2,2,2,2,41,41,2,2,159,502,502,502,502,77,502,51,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,41,2,41,2,94,55,55,2,2,41,41,41,41,41,2,2,94,94,94,94,94,94,94,94,41,41,41,41,41,41,41,41,41,41,41,41,94,94,94,94,94,94,94,94,430,41,41,41,41,41,41,41,41,41,41,41,41,41,2,2,41,41,41,41,41,41,41}, + {430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,478,478,478,478,478,478,478,2,2,2,2,2,2,2,139,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,139,139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,139,139,139,2,2,139,139,139,2,2,2,2,2,139,139,2,2,2,2,2,2,2,2,2,2,2,2,139,2,2,2,2,2,2,2,139,2,2,2,2,139,2,139,139,139,139,139,139,2,2,139,139,2,2,139,2,2,2,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,2,139}, + {434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2,2,2,2,2,2,2,258,2,258,2,2,2,2,2,258,258,258,258,258,258,258,2,2,389,258,378,378,42,42,42,2,2,2,2,2,258,258,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,35,35,35,35,35,22,19,22,22,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,258,258,258,2,2,2,2,389,389,258,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,19,35,35,35,35,22,2,22,22,22,2,2,2,2,2,2,2,2,2,2}, + {453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252,252,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252,252,252,252,2,252,252,252,2,2,252,252,2,252,252,252,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,100,100,100,100,2,100,2,2,2,2,2,2,2,2,2,2,2,2,252,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81,2,2,2,81,2,2,307,2,2,2,2,2,2,2,81,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,2,2,81,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,307,307,307,4,4,2,42,2,2,2,204,206,64,64,64,64,64,64,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,321,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,2,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,2,307,307,307,307,307,307}, + {324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,2,2,2,168,168,168,2,2,2,2,2,2,168,168,2,2,2,2,2,2,2,2,2,259,168,168,168,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,2,2,2,2,2,2,2,2,2,2,2,2,175,175,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,2,2,2,2,2,2,2,2,196,261,2,2,210,108,210,128,128,128,128,128,128,128,128,128,244,244,259,196,196,196,2,168,168,168,168,168,168,2,2,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,175,175,168,168,168,168,168,175,175,175,175,175,175,168,175,175,175,175,168,168,168,168,168,168,168,175,175,259,259,259,259,259,259,259,259,168,175,175,175,175,2,168,2,175,175,175,175,259,261,175,261,2,2,259,259,175,175,2}, + {448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,89,2,2,2,89,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,313,313,313,313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,261,51,128,386,386,386,314,39,39,39,39,39,91,2,55,55,55,55,55,55,55,313,55,419,419,419,419,419,419,419,2,2,2,419,2,2,2,2,419,2,2,2,2,2,313,74,74,74,74,2,2,2,419,55,55,55,55,2,2,313,313,313,74,74,2,2,2,2,2,2,2,74,8,55,15,15,276,113,47,113,66,15,388,55,419,419,292,292,419,2,419,419,55,55,55,55,55,55,292,292,292,292,292,292,292,348,348,348,348,2,82,2,2,2,419,419,2,2,55,55,55,55,55,55,292,55,242,242,242,242,242,242,242,55,55,2,55,55,55,55,2,55,55,55,2,2,2,90,55,55,2,2,454,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55}, + {468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,2,2,2,2,2,2,2,2,2,35,2,2,2,2,2,2,2,2,126,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,121,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,35,2,2,2,35,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,35,35,35,35,202,2,35,35,35,202,35,35,2,35,202,202,202,202,202,202,202,202,202,202,2,2,2,35,35,35,35,2,35,35,35,2,35,35,2,35,35,35,35,35,35,35,35,2,35,35,35,35,35,35,35}, + {456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,331,331,2,2,331,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,331,331,331,2,2,2,2,2,2,2,331,331,331,2,2,2,331,2,2,331,2,2,331,2,2,331,331,331,331,2,331,331,331,331,331,331,331,331,331,331,331,331,2,2,331,331,2,331,2,2,331,2,2,331,331,2}, + {360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,46,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2,2,363,2,2,2,2,2,2,2,2,2,2,2,2,363,363,363,363,2,363,363,363,363,363,363,363,2,2,363,363,2,2,2,363,363,363,363,363,363,2,363,363,432,432,2,2,136,324,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,432,432,432,363,432,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,432,130,200,117,18,18,363,130,173,173,288,363,363,18,363,363,363,432,432,432,432,432,432,432,432,5,5,5,432,432,432,363,363,363,432,363,363,363,363,363,432,432,432,432,432,422,422,432,432,432,432,432,432,432,432,432,432,363,422,422,422,422,432,422,422,422,422,422,422,432,432,432,432,432,432,432,432,432,432,432,422,422,422,422,422,422,422,422,422,422,422,422,363,363,363,363,363,363,432,432,363,363,422,422,422,422}, + {478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,106,106,106,403,403,403,2,403,106,106,106,106,403,106,106,2,106,106,106,106,106,106,106,2,2,2,2,2,2,2,2,2,2,2,2,106,106,106,2,2,2,2,2,106,2,2,2,2,2,2,106,2,2,106,106,106,106,106,106,106,106,106,106,2,2,2,403,403,403,403,106,106,2,2,403,403,2,2,2,2,403,403,2,403,403,403,2,2,2,2,2,2,403,2,2,2,2,2,2,106,403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,44,44,403,44,44,44,2,44,403,2,2,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,403,403,403,2,2,403,403,403,403,403,403,403,403,403,403}, + {485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,348,348,348,2,348,348,348,348,348,348,348,2,348,348,348,348,348,348,348,2,2,2,348,348,348,348,348,348,348,348,348,348,348,348,2,2,2,237,2,2,2,2,2,2,348,326,326,326,326,348,348,348,348,348,348,348,348,326,326,326,326,237,326,326,237,237,348,348,326,326,326,237,237,237,237,237,237,237,2,326,326,2,2,348,348,2,2,2,2,2,500,2,326,326,326,326,326,2,326,326,326,326,326,326,326,348,348,348,348,348,348,237,237,237,237,237,2,237,326,237,326,326,2,348,326,2,2,2,2,2,2,2,2,2,2,2,2,2,326,2,2,2,2,348,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,500,2,2,2,2,2,326,326,326,326,326,326,326,326,326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,326,2,2,2,2,2,237,2}, + {390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,229,229,229,229,229,206,206,206,229,229,229,229,229,229,229,229,2,229,229,229,229,229,229,229,229,229,229,2,229,229,229,229,2,2,229,229,229,229,2,2,229,229,229,229,2,2,2,2,2,2,2,2,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,2,229,229,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,2,229,2,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,84,2,2,2,2,2,84,84,84,84,84,84,84,84,84,2,2,84,2,2,84,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,228,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,228,228,228,2,228,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,228,2,2,2,2,93,2,2,2,2,2,2,2,84,2,2,2,2,2,2,2,2,2,2,2,2}, + {378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2,2,2,2,2,2,2,2,195,2,2,2,2,95,195,195,95,378,2,195,2,2,2,95,95,195,2,2,2,2,95,95,95,95,111,2,195,95,95,95,95,95,95,95,195,2,195,195,2,2,195,195,2,195,195,2,2,195,195,2,2,378,195,2,2,2,2,195,195,2,195,2,2,2,182,2,195,195,195,2,2,195,195,2,2,2,195,195,195,195,195,195,195,195,195,195,195,2,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,2,2,151,501,98,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,182,195,182,195,195,378,195,378,378,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195}, + {474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,44,44,2,2,2,2,2,44,2,2,2,2,2,2,2,2,2,44,44,44,44,44,44,44,139,2,2,2,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,2,44,139,44,44,44,44,2,2,2,44,44,44,44,2,2,2,2,2,2,2,2,2,2,44,44,44,44,44,44,44,2,2,2,2,2,2,2,2,2,44,44,2,2,2,44,44,44,2,44,44,44,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,44,2,2,139,2,2,2,2,2,139,139,139,139,139,139,139,139,139,2,2,2,139,139,2,2,2,2,2,139,44,2,2,2,44,2,2,2,2,44,44,2,2,2,139,139,139,2,2,2,44,2,2,2,2,44,44,44,139,139,139,2,2,44,44,44,2,2,2,2,2,2,44,44,44,44,2,44}, + {495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,105,105,2,2,2,2,105,105,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,111,111,2,105,105,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,111,111,105,105,105,105,105,105,105,2,2,2,2,2,2,111,2,2,2,111,111,111,111,2,2,2,2,111,111,2,105,2,2,105,2,2,111,111,111,2,2,2,111,2,2,2,2,2,2,2,2,2,2,111,111,2,2,111,111,111,2,2,111,2,2,2,2,105,111,111,111,2,2,2,2,111,111,2,2,2,105,105,105,105,105,111,111,111,111,2,111,105,105,105,2,105,2,2,2,105,105,105,105,2,105,105,2,2,105,105,105,105,105,105}, + {498,447,112,241,552,119,227,189,140,140,140,140,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,2,2,315,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,315,315,2,315,315,315,315,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {505,132,169,418,342,28,319,301,172,530,317,317,335,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,376,376,2,2,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,376,376,2,2,2,2,2,2,2,2,2,2,376,376,2,2,2,2,376,376,2,2,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,418,418,122,376,376,376,376,376,376,376,78,78,78,78,78,78,78,2,2,2,376,376,122,2,2,376,376,376,376,376,376,376,376,376,376,376,376,376,2,122,376,122,376,376,122,376,418,418,2,2,376,376,376,2,376,376,376,2,2,376,2,2,2,2,122,122,122,2,2,2,2,2,2,2,122,2,2,2,2}, + {397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2,2,2,2,2,2,2,2,193,2,2,2,2,2,193,193,2,193,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,193,193,193,193,193,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,392,2,2,2,2,392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,392,392,392,392,2,392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,83,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266,266,266,149,303,303,303,303,303,303,303,68,68,68,303,303,68,303,303,303,303,68,68,303,68,233,68,68,68,303,470,163,163,303,303,303,303,303,303,303,68,303,68,303,303,303,303,303,303,303,303,303,303,303,303,68,68,303,303,303,303,303,303,303,303,303,303,303,303,238,238,238,238,68,238,238,238,303,303,303,303,296,238,238,381,233,68,68,68,303,470,163,163,303,303,303,303,303,303,185,68,41,41,41,303,303,303,303,303,303,303,303,303,68,68,68,185,185,185,185,185,185,185,185,185,185,185,185,185,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,41,41,106,41,41,41,41,41,41,41,41,41,41,41,41,238,238,238,238,238,238,238,238,238,238,238,41,41,41,41,41,41,238,296,296,296,296,296,296,296,296,296,238,238,86,86,86,238,238,238,238,238,238,238,238,238,238,238,86,86,86,86,86,86,86,86,86,86,238,238,238}, + {507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,255,2,2,2,2,2,2,2,425,2,2,2,2,425,425,425,425,425,425,2,425,425,2,2,255,435,2,435,435,2,2,2,2,255,2,255,255,2,255,2,2,2,2,425,136,255,2,2,2,2,136,136,2,255,425,425,425,425,425,2,255,255,255,255,255,2,2,255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,255,255,255,255,2,2,2,2,2,2,2,2,2,2,2,2,2,255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2,255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,571,571,222,205,205,275,69,224,67,67,67,2,2,2,2,2,2,2,2,2,82,82,82,82,82,82,2,2,2,2,2,2,2,2,2}, + {380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445,445,358,358,358,2,2,358,358,331,331,2,331,2,2,2,2,2,445,331,331,331,331,331,445,331,331,331,331,331,358,2,2,358,358,2,172,172,2,172,2,2,331,331,331,2,358,358,146,358,358,358,358,358,358,358,331,358,358,331,331,331,358,358,358,358,358,358,358,358,358,358,358,2,2,331,331,2,172,2,331,331,2,2,2,358,445,331,331,358,358,358,358,358,358,358,358,358,2,2,358,358,358,358,358,358,358,358,358,358,2,2,2,2,2,2,2,2,2,2,2,2,2,172,2,358,358,358,172,172,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,331,445,2,2,2,2,358,358,358,358,2,2,2,2,2,2,2,2,2,2,2,146,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,358,358,358,358,2,2,358,358,358,358,358,2,358,358,358,2,2,2,2,2,2,2,2,2,2,2,2,358,2,2,2,2,2,2,2,2,2}, + {507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2,2,2,170,170,472,472,472,2,2,472,2,2,472,472,472,472,472,472,472,472,472,472,2,2,2,2,47,472,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,47,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,37,2,2,2,2,2,2,37,37,37,37,2,2,2,2,37,37,37,37,37,37,37,2,2,37,2,2,2}, + {509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,325,325,325,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2,2,2,2,300,300,2,2,325,325,2,325,2,2,2,2,2,216,216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,44,22,54,256,256,137,137,137,137,399,2,2,44,44,2,44,2,2,2,2,2,507,507}, + {430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2,2,209,209,2,2,2,2,2,209,2,2,2,2,2,2,2,2,209,2,2,2,2,2,2,2,2,2,209,209,209,209,2,2,2,2,2,2,405,65,65,209,209,209,405,2,405,405,405,2,2,209,65,65,209,209,209,209,209,209,209,209,209,2,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,2,209,209,209,209,405,405,405,405,405,405,405,405,405,405,2,405,405,209,209,209,2,2,209,2,2,2,405,2,2,2,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,2,2,2,2,2,2,2,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,405,405,2,2,2,2,2,2,2,405,405,405,405,405,405,405,405,2,2,2,2,2,405,405,405,2,2,2,2,2,2,2,2,2,2,2,2,2,209,209,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,405,405,405}, + {434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401,605,605,605,2,2,2,2,2,2,2,605,282,282,282,605,2,2,2,605,282,2,605,605,605,605,306,2,300,2,2,2,2,2,2,605,282,605,605,605,349,349,349,282,605,605,605,2,605,282,2,2,2,2,282,282,282,605,2,605,605,2,2,605,605,605,605,605,605,605,605,605,2,282,282,2,282,2,2,2,2,2,2,2,300,2,282,282,2,282,282,2,2,2,401,401,401,401,401,401,2,2,2,2,282,282,605,605,605,605,2,605,605,605,605,605,282,605,282,282,401,282,401,605,605,605,605,605,605,605,282,2,605,605,605,605,605,605,605,282,605,605,605,605,605,605,605,605,401,605,605,605,605,605,605,605,605,605,605,605,2,605,2,2,605,605,605,2,605,2,605,2,2,401,401,401,2,2,2,2,282,2,401,401,2,2,2,2,2,2,2,2,2,2,4,4,2,2,2,2,2,2,4,2,2,2,259,92,212,195,195,51,292,32,209,32,282,282,282,2,2,282,282,282,282}, + {542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217,217,2,2,2,2,217,217,217,2,217,217,48,48,217,217,217,217,217,217,217,217,217,217,217,217,2,217,2,2,2,2,2,2,2,2,2,217,217,48,2,2,48,48,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,217,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,155,155,155,155,155,155,155,155,83,83,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,155,155,155,155,155,155,155,155,83,83,83,83,83,14,2,2,83,2,2,2,2,2,2,155,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,155,155,155,104,155,104,104,104,104,104,83,83,83,104,2,33,83,2,33,33,2,2,2,365,365,2,365,365,2,365,365,365,365,365,365,365,365,2,2,83,83,83,155,155,136,136,365,365,365,365,365,209,209,209,365,365,365,365,209,209,209,209,209,209,168,168,168,168,56,56,322,322,56,168,56,56,365,365,56,56,168,56,56,56,365,56,365,365,365,365,365,322,56,322,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,104,104,104,104,104,56,56,56,312,312,312,312,312,312,312,312}, + {602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165,165,165,292,292,2,292,2,292,2,2,292,165,2,2,2,2,2,2,2,292,292,292,2,292,2,2,2,2,292,292,2,2,2,2,2,2,292,2,2,292,2,2,2,2,2,2,2,2,2,2,2,2,292,2,2,292,292,2,292,292,2,2,2,292,292,292,292,292,2,2,2,2,292,292,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,292,292,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,2,2,2,292,292,4,2,2,2,2,2,99,387,387,387,387,275,409,409,292,292,292,292,292,2,2,2,2,2,2,2,2,2,165,292,2,2,165,292,292,2,292,292,292,292,292,292,2,292,2,292,2,2,292,165,2,2,2,2,2,2,2,292,165,165,2,292,2,165,165,165,292,292,2,2,2,2,2,2,292,165,165,292,165,165,182,165,2}, + {422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456,456,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,456,643,643,643,643,456,2,2,2,2,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,456,456,456,2,2,2,2,2,2,2,2,2,238,2,2,2,2,2,2,2,2,2,2,2,2,456,2,2,238,238,238,2,2,2,2,2,2,2,2,2,2,2,2,456,456,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,211,211,2,2,2,2,238,238,238,238,238,2,2,2,2,2,2,456,456,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,301,301,129,129,129,2,2,2,129,129,129,2,2,129,129,129,129,129,129,2,129,129,2,2,2,2,129,129,129,129,129,129,129,2,129,129,2,129,129,2,2,129,129,2,129,129,2,129,129,129,129,129,129,129,129,129,2,129,129,2,129,129,129,2,2,129,129,2,129,2,2,301,2,301,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2,2,2,2,268,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,494,268,2,268,268,2,268,268,302,2,302,268,268,268,268,268,2,268,494,302,302,302,302,2,2,268,2,2,302,268,268,268,2,2,2,302,302,302,302,302,302,302,2,2,2,2,2,2,2,2,2,2,2,2,302,2,302,302,302,302,2,302,2,2,2,2,2,302,302,302,302,302,302,302,268,268,2,2,2,302,302,302,302,302,302,302,302,302,302,2,302,2,2,2,302,302,302,302,302,302,302,302,2,2,2,2,2,302,2,2,2,2,2,302,2,302,302,2,268,302,302,302,2,2,2,302,302,2,2,2,2,2,2,2,2,2,2,302}, + {555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,615,615,2,615,2,2,2,2,2,2,615,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,133,133,133,133,133,2,2,2,2,2,2,2,133,133,2,2,2,2,2,142,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,27,27,2,2,2,2,2,2,27,27,2,2,27,2,27,27,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,27,27,27,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,295,295,295,56,56,216,87,87,87,40,350,142,2}, + {544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,544,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,151,151,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,151,151,2,2,2,2,2,2,2,259,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,544,2,2,160,160,2,2,2,2,2,2,2,2,2,544,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,99,317,333,54,23,23,349,2,349,409,23}, + {534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2,2,2,72,72,72,315,72,2,2,2,2,2,2,2,2,2,2,2,315,315,429,429,2,72,72,429,2,2,2,2,2,429,2,2,2,2,2,344,178,178,344,2,2,2,178,178,2,2,2,344,344,315,315,315,2,2,315,2,2,2,344,2,2,2,72,315,2,429,2,2,2,315,315,315,315,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,315,2,2,2,2,2,2,2,2,2,72,72,72,2,2,2,2,2,2,2,429,315,72,72,2,2,72,72,2,2,2,72,72,72,2,72,72,72,72,72,2,72,44,2,72,2,2,72,4,2,2,8,4,2,4,2,2,2,338,228,474,87,109,399,72,72,72,72,72,72,72,72,72,72,2,2,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,315,315,315,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,344}, + {400,136,112,136,273,277,205,578,122,122,230,230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,302,302,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,317,2,2,302,302,302,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2,2,2,2,302,2,2,2,2,2,2,2,302,302,2,2,2,2,2,2,2,2,2,302,302,302,2,2,2,2,2,302,302,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2,2,302,302,2,2,2,2,2,302,302,302,302,2,2,2,2,302,2,302,2,2,302,302,2,2,302,302,302,302,302,302}, + {576,421,115,52,253,373,17,657,43,178,178,58,485,485,485,485,485,485,2,2,2,159,159,159,159,2,619,2,2,2,2,2,2,2,2,2,2,2,2,2,2,518,2,159,159,159,2,159,159,2,159,2,159,2,159,159,159,159,159,159,2,2,2,2,2,2,2,2,2,2,159,159,159,159,159,159,159,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,159,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,159,159,159,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,518,159,159,159,518,159,159}, + {576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206,191,191,191,206,206,191,2,206,2,206,206,206,206,2,2,2,206,2,2,2,2,206,206,206,206,206,206,206,2,206,2,2,2,2,2,206,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,191,2,2,2,2,2,2,2,2,2,2,2,2,2,206,2,2,2,206,2,2,2,2,191,191,191,191,2,191,191,191,206,206,2,2,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,2,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,206,191,191,2,191,2,2,191,191,191,206,191,191,2,2,206,191,206,206,206,274,2,2,2,2,191,191,191,191,191,191,191,191,191,206,206,206,206,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,191,2,2,2,2,2,2,2,2,2,2}, + {548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,72,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,72,72,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,72,2,2,2,72,72,72,2,2,2,2,2,2,2,72,72,72,72,2,72,2,2,2,2,72,2,2,2,2,72,72,72,72,2,2,72,2,72,72,72,2,72,72,72,72,72,72,72,72,2,72,2,72,72,72,2,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,2,72,72,72,72,72,72,72,2,2,72,2,2,2,72,72,72,2,2,72,72,2,72,72,72,2,2,72,2,2,2,72,72,72,72,72,72,72,72,72}, + {622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,358,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,358,358,358,2,358,358,358,358,358,358,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,584,2,2,2,358,584,584,584,584,2,2,358,358,358,358,358,358,358,358,358,2,358,358,358,2,358,2,358,358,358,358,358,358,2,2,358,358,358,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,358,2,358,2,358,2,2,2,2,2,358,358,358}, + {446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2,2,2,2,2,176,176,2,176,2,176,176,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,176,2,2,2,2,2,2,2,2,2,2,2,2,176,2,2,2,2,2,134,2,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,214,214,2,2,2,2,2,2,134,214,2,111,2,2,2,2,2,134,134,134,134,134,134,134,2,2,2,134,2,2,2,2,2,2,2,2,2,2,2,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,214,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528,528,528,2,2,2,2,2,39,39,39,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,528,365,2,365,365,365,365,2,2,2,528,2,2,528,528,528,2,2,2,2,39,39,39,39,39,2,2,2,2,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,528,39,39,2}, + {453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,83,83,83,83,2,2,2,2,83,83,83,2,2,83,2,2,2,2,83,2,2,83,83,492,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,2,2,2,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,2,2,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,2,83,83,83,83,83,83,83,492,83,492,492,492,378,378,492,492,83,83,378,83,83,492,492,492,492,492,492,492,492,492,2,83,492,2,2,492,492,492,2,2,83,83,83,83,83,83,83,2,83,83,83,492,492,492,83,83,2,83,83,83,83,363,363,83,363,363,363,363,363,363,363,363,363,2,363,83,83,83,2,83}, + {425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,303,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,244,244,244,2,2,2,111,2,2,2,2,2,2,2,2,2,2,244,2,2,2,2,2,2,2,2,2,244,244,2,244,244,2,244,244,2,244,244,244,244,244,2,244,244,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,2,2,2,2,2,2,2,2,2,2,2,2,244,244,244,244,244,244,244,244,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,95,2,2,2,95,2,2,95,95,2,2,2,244,244,95,95,2,244,244,95,95,244,244,95,95,95,95,95,95,95,95,95,95,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,244,244,2,2,2,111,2,111,111,111,111,111,2,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,95,2,2,2,2,2,2,2,2,2,2,2,2,2,244,244,244,244,244,244,2,244,244,244,244,244,244,244,244,244,2,2,244,244,244}, + {433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,189,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,189,2,2,2,2,189,189,2,189,2,2,2,8,677,189,189,4,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,266,266,266,189,189,189,189,189,189,189,266,266,266,266,266,266,266,189,189,189,189,189,189,189,189,189,189,189,189,189,189,162,270,270,23,23,23,450,450,450,23,450,607,607,450,606,606,189,266,189,266,266,100,189,189,189,266,266,266,266,266,266,266,189,266,266,266,266,266,266,189,189,189,166,166,166,266,266,266,266,266,189,189,266,266,189,189,189,189,284,284,284,284,189,189,189,189,189,189}, + {456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,501,501,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,43,501,2,2,2,2,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,2,501,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {434,372,239,508,478,26,375,255,151,151,650,112,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,161,2,2,2,161,2,161,161,2,2,2,2,2,2,2,2,161,2,161,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,455,455,455,455,2,161,161,161,2,161,161,161,251,251,251,251,161,161,161,161,161,161,161,161,161,161,161,161,2,2,2,161,161,161,161,161,161,161,161,161,161,161,2,2,2,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,455,161,2,161,161,161,161,455,2,161,161,161,161,161,161,161,161,161,161,161,161,161,455,161,161,161,161,455,455,455,2,455,455,161,2,455,455,455,161,455,455,455,455,455,2,2,455,455,161,161,161,161,455,2,455,2,2,2,2,161,161,2,455,455,455,455,2,2,2,2,455,455,161,161,161,2,161,455,455,455,455,455,455,455,455,455,455,455,455,161,161,455,455,455,455,2,455,455,455,455,455,161,2,2,161}, + {437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2,146,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146,146,2,2,2,2,2,2,510,2,122,122,146,146,146,2,122,122,122,122,2,146,146,2,2,2,2,2,2,2,2,2,146,2,2,2,2,2,2,146,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,510,2,510,510,2,2,2,2,2,2,2,2,2,2,2,2}, + {463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,116,2,2,2,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,116,116,116,116,116,116,116,116,116,116,116,116,116,2,2,2,116,2,2,2,2,2,2,2,2,116,116,2,2,2,2,116,116,116,2,2,2,2,2,2,2,2,2,221,221,221,221,2,2,221,116,2,221,2,635,635,635,635,116,116,2,2,2,2,2,2,2,2,2,2,116,116,221,116,116,116,2,2,116,116,116,116,116,116,116,116,116,116,2,116,116,116,116,2,116,116,116,2,116,116,116,116,116,116,116,116,116,116,116,116}, + {610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,551,551,551,551,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,647,647,2,647,647,647,647,647,551,2,2,647,2,2,647,647,647,647,551,551,2,2,2,2,647,647,551,551,647,647,647,647,2,2,2,647,647,647,647,647,647,647,647,403,647,2,647,647,647,647,647,647,647,647,647,2,647,647,647,647,647,647,647,314,314,314,314,551,647,647,647,2,647,647,647,647,647,2,2,2,2,647,551,551,551,647,647,647,647,647,551,551,551,551,551,551,551,551,647,647,647,647,647,647,2,647,647,647,647,647,647,647,2,647,647,647,2,647,647,647,647,647,647,551,551,551,647,647,647,647,647,647,647,45,45,647,647,647,96,647,647,2,647,647,96,2,96,96,96,96,96,96,96,551,551,551,551,647,2,2,647,96,96,96,96,96,96}, + {611,211,491,224,47,54,124,268,271,271,223,2,2,2,2,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,359,2,2,2,2,359,359,359,359,359,2,2,359,359,359,359,359,359,2,2,359,359,359,2,359,359,359,49,49,49,359,49,49,2,2,2,2,359,359,2,359,2,151,359,49,49,359,2,2,2,2,2,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,2,2,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,2,2,359,359,359,359,359,359,359,359,359,359,359,359,359,359,2,359,359,359,359,359,359,359,2,359,359,359,359,359,359,359,2,359,359,359,2,359,2,2,359,359,359,359,359,359,2,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,2,2,364,269,308,381,552,269,269,359,359,359,128,128,128,273,2,273,359,359,2,287,273,273,273,49,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,273,273,273,287,287,287,359,359,359,359}, + {590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2,75,75,75,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,205,205,205,2,2,2,2,2,2,2,2,58,2,2,2,75,75,2,2,2,2,75,75,205,75,205,2,2,205,2,2,2,2,2,75,75,75,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,2,2,75,75,75,75,2,75,2,2,2,2,2,2,2,2,2,75,75,2,2,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {478,388,612,404,491,561,180,80,262,58,94,2,2,275,2,2,2,2,2,151,2,2,2,2,2,312,312,312,2,2,2,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,312,2,2,275,2,275,2,2,2,312,2,2,2,2,2,2,2,2,2,275,312,312,312,2,312,312,312,275,2,2,2,2,2,2,2,2,275,275,275,275,2,2,2,312,312,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,275,2,2,275,2,2,2,2,2,2,2,2,275,275,275,275,2,2,2,2,2,2,2,2,2,2,2,4,288,4,44,2,2,2,234,234,234,234,234,234,234,234,302,234,26,234,50,50,50,50,50,50,50,275,132,132,132,132,132,132,132,132,132,2,2,275,275,275,275,2,2,508,2,2,2,2,2,2,312,2,2,2,2,2,2,2,132,132,132}, + {629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435,435,435,63,419,419,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,8,435,435,2,2,63,419,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,8,435,8,8,2,2,2,2,2,2,782,2,2,2,2,32,2,93,2,2,2,2,8,189,2,2,8,782,782,782,105,105,105,105,105,642,642,642,222,222,222,222,189,189,222,222,222,189,222,222,2,222,222,222,222,222,316,316,316,316,316,316,316,316,316,316,189,140,140,494,494,222,222,222,143,222,189,189,189,249,316,316,316,537,537,537,537,316,316,189,189,189,189,143,143,143,143,143,143,143,143,143,143,143,143,143,143,629,629,143,143,629,629,629,19,629,629,629,316,316,537,316,316,316,537,537,537,537,537,537,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,316,316,316,316,316,316,316,316,316,316,316,316,206}, + {671,275,392,298,612,328,337,215,58,58,124,2,2,490,392,2,2,2,125,457,457,2,2,2,2,2,2,2,2,2,2,457,457,457,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,319,2,2,457,319,319,319,2,457,457,457,169,169,169,169,169,2,2,2,2,2,2,2,457,457,457,457,457,2,2,2,2,2,2,2,2,2,319,319,457,457,457,319,319,2,319,319,2,319,2,2,2,2,2,2,169,2,2,319,319,319,319,319,319,2,2,2,2,319,2,2,2,319,319,319,319,319,319,319,319,319,2,2,2,2,2,2,2,2,2,2,2,2,319,2,319,319,319,319,2,319,319,319,319,319,319,2,319,319,319,319,2,2,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,2,2,2,2,2,2,319,319,319,319,2,319,2,2,2,2,2,2,2,2,319,319,319,2,2,2,2,319,319,319,319,2,2,2,319,2,2,2,2,319,319,319,319,319,2,319,2,2,2,319,319,319,319,319,319,2,319,319,319,319,2,2,2,2,169,169,169,319,319,2,2,2,2,2,2}, + {448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,2,2,2,2,2,2,2}, + {667,246,160,68,737,203,168,628,46,128,358,2,2,2,121,121,2,2,2,2,2,2,560,121,2,2,2,2,2,2,2,121,121,505,505,505,505,505,505,94,121,94,121,2,2,2,2,94,94,121,121,121,121,121,121,411,411,411,411,411,411,411,2,94,94,94,2,2,2,2,121,411,94,94,343,94,94,94,94,94,94,94,94,94,94,121,94,121,100,100,121,121,2,121,121,121,94,2,94,94,94,94,11,121,121,2,121,121,121,100,560,560,560,560,121,121,121,121,121,560,560,560,560,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,2,2,2,2,2,2,505,505,505,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,505,2,2,2,94,94,94,94,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,11,11,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6,6,2,2,2,17,17,17,2,17,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,17,17,17,17,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343,135,135,2,2,135,135,2,135,2,2,32,2,2,2,128,676,128,128,128,32,32,135,135,32,135,2,182,182,343,135,135,135,135,165,135,135,2,135,343,343,509,509,509,135,135,135,135,135,135,165,165,165,165,165,26,165,165,165,7,7,343,52,343,250,343,250,250,250,250,250,250,250,250,165,165,343,343,343,343,343,343,367,100,100,343,367,228,367,367,343,343,343,343,165,165,165,165,100,100,100,100,100,100,25,25,25,216,216,216,216,216,118,674,216,423,100,674,100,165,165,343,555,555,130,130,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,165,165,26,52,363,490,7,7,343,52,343,343,648,648,648,490,367,367,490,490,648,648,648,343,368,490,490,490,490,165,165,244,244,490,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,555,368,555,244,244,244,244,367,367,367,367,367,367,367,367,367,367,363,363,363,202,244,244,363,555,244,555,555,555,363,363}, + {486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,284,284,2,2,2,2,2,2,2,2,2,2,131,2,2,131,131,2,284,2,2,2,2,284,284,284,284,2,284,284,284,284,284,284,284,2,2,2,2,284,2,2,2,2,2,2,2,2,2,2,2,284,284,284,131,284,284,131,2,131,131,284,284,284,284,284,284,2,284,284,284,2,2,284,284,284,284,284,2,2,2,2,131,131,131,405,284,284,284,284,284,284,284,284,284,2,2,2,131,131,284,284,131,131,131,131,284,284,284,131,284,284,284,284,284,284,2,284,284,284,284,2,284,284,284,284,284,2,284,2,284,2,2,284,284,2,2,284,284,284,284,2,2,2,284,284,284,284,284,284,284,284,2,2,2,2,2,2,2,2,2,284,2,2,2,2,2,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,131,284,131,131,284,131,131,284,284,284,284,284,284,2,2,2,2,2,284,284,284}, + {612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,50,50,50,50,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,180,180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,180,2,180,180,50,50,2,2,2,2,2,2,2,2,2,180,180,180,180,2,2,2,2,2,50,2,180,180,180,180,180,180,180,180,2,2,2,180,180,2,2,180,180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,338,2,338,338,338,2,338,338,2,2,2,2,2,2,2,2,338,338,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,774,774,774,774,2,774,774,774,774,2,2,774,774,774,774,774,774,774,774,774,2,2,2,774}, + {469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,502,2,502,2,502,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,502,502,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,502,2,2,502,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,171,171,171,2,2,171,2,2,2,2,2,2,2,2,2,109,2,2,2,2,2,2,109,109,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,290,290,2,290,290,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,542,542,542,542,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,454,454,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,546,546,546,521,525,525,128,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,166,2,2,2,2,2,2,2,2,2,2,2,94,2,94,94,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2,2,2,2,2,2,209,546,546,521,525,525,525,74,2,544,2,2}, + {667,257,290,122,109,523,95,26,282,49,374,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,88,2,2,2,320,320,320,320,2,2,88,88,320,320,320,320,88,320,2,2,320,320,88,88,2,2,2,2,2,2,2,2,2,2,320,2,2,304,304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,320,2,2,2,127,320,320,320,2,320,320,320,2,304,320,320,2,2,2,88,2,320,127,127,304,2,2,320,320,320,320,2,2,2,88,2,2,2,2,2,2,88,2,2,88,320,2,2,2,88,2,88,88,88,2,88,88,88,2,2,88,127,2,2,2,2,127,2,207,2,127,127,127,127,127,2,320,320,320,320,2,127,127,127,127,2,2,2,320,320,320,320,320,2,2,2,127,127,320,320,127,127,127,127,127,127,127,127,127,10,127,2,2,265,265,265,265,34,34,605,88,88,88,88,127,127,2,88,88,88,127,127,127,127,127,127,88,127,127,127,127,127,127,127,127,127,127,127,127,186,45,88,88,45}, + {653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2,2,2,2,2,2,2,2,2,2,222,2,2,2,2,2,2,2,2,2,2,534,534,534,534,534,534,2,2,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,339,2,2,534,534,339,534,534,644,644,534,534,534,534,534,534,534,534,534,534,534,534,2,487,2,487,487,487,487,487,487,487,487,2,2,2,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,487,487,534,534,487,534,534,534,534,534,534,534,534,534,270,270,270,270,487,644,487,487,270,270,270,270,644,644,270,644,644,644,534,534,644,534,115,115,115,2,644,644,534,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,270,222,644,644,534,534,2,644,644,644,644,644,644,115,115,115,115,644,644,2,644,270,270,270,534,534,534,534,534,644,644,644,644,644,644,644,644,644,644,487,222,222,644,73,73,270,270,270,534,534,534,534,534,534,534,2,2,534,534,2,2,644,2}, + {670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2}, + {639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,503,503,2,503,503,503,503,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,2,2,2,2,2,2,517,2,2,2,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,517,517,517,2,2,2,2,2,2,517,517,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,2,2,2,2,517,517,517,517,2,517,517,517,2,517,2,2,517,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,517,517,2,2,2,517,517,2,2,2}, + {678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2,2,2,2,2,299,2,2,2,2,2,2,2,2,2,537,537,299,577,2,2,2,348,348,467,115,64,64,64,348,33,537,537,537,537,537,33,33,537,537,537,2,291,537,537,537,537,537,218,218,218,537,537,537,537,537,537,537,537,537,537,537,33,33,629,537,537,537,537,537,537,537,537,537,537,537,537,537,537,629,537,537,537,537,537,537,400,198,738,304,537,537,19,19,19,529,19,395,395,169,169,463,537,463,218,33,33,33,218,218,218,218,537,537,218,218,218,537,537,537,537,537,218,218,218,218,218,218,218,218,218,218,218,218,218,537,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,150,246,228,9,9,9,246,83,195,195,195,551,551,551,214,214,214,411,411,214,214,629,537,629,537,537,629,629,629,291,291,291,629,629,291,291,291,335,629,629,629,629,218}, + {512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,2,2,412,412,412,2,2,2,2,2,2,2,2,2,412,2,412,2,412,412,2,412,412,412,412,412,412,412,412,412,412,412,412,412,2,412,412,412,412,412,2,412,412,2,2,412,412,412,412,412,412,412,2,2,2,2,2,2,2,2,412,2,412,412,412,412,412,2,2,2,412,412,412,412,412,2,2,2,2,2,412,412,412,2,412,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,412,412,412,2,2,2,2,2,2,2,2,2,2,2,2,2,412,412,412,412,2,2,2,2,2,2,2,2,2,2,2}, + {657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2,8,8,266,2,2,213,584,584,584,118,584,289,289,289,289,289,289,289,289,289,289,289,2,289,276,276,289,289,276,289,289,2,289,289,289,289,289,186,186,39,39,39,650,650,650,454,454,454,454,78,372,477,477,477,266,266,266,266,276,268,276,276,276,276,276,289,289,289,289,268,289,289,289,673,291,731,53,53,53,673,673,673,673,673,81,81,81,547,258,133,133,289,289,289,268,268,268,268,268,268,268,268,268,289,289,289,289,289,289,689,689,216,98,39,17,17,268,618,618,618,98,98,194,268,268,268,268,46,268,268,268,268,268,268,268,276,276,268,289,268,268,276,276,276,276,289,289,201,201,289,289,201,289,201,201,289,289,289,289,289,289,289,289,289,289,289,289,268,289,240,240,240,268,268,268,268,268,18,18,289,18,790,790,790,790,790,18,9,9,9,347,140,140,18,201,657,657,778,778,221,778,778,778,778,268,268,268,404,240,240,240,404,289,268,404,268,201,201,201,735,735,735,735,735}, + {498,431,217,101,78,143,111,113,181,825,458,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,79,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,465,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,205,205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,530,530,530,530,530,530,55,55,55,263,263,263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,263,530,55,2,2,2,530,55,2,2,2,530,581,2,581,581,581,581,2,2,2,2,2,2,2,2,2,2,2,530,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,2,2,2,55,55,55}, + {408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512,512,512,494,494,494,2,2,512,512,512,2,457,454,30,30,15,15,15,153,153,153,227,227,454,153,153,153,577,577,577,577,108,108,108,108,170,170,108,292,168,21,21,21,292,292,292,148,292,441,441,292,633,299,108,216,216,108,216,561,561,443,561,82,82,110,29,29,29,151,151,151,151,116,116,116,116,116,488,488,155,488,155,155,155,262,262,262,262,262,155,638,526,526,292,209,209,209,638,638,526,526,526,526,726,638,726,209,526,526,526,526,526,526,398,500,125,125,125,623,623,623,623,623,623,623,159,159,245,245,245,245,159,159,159,159,159,318,318,245,318,318,318,318,318,526,526,526,526,252,526,318,318,318,526,318,116,116,116,561,232,232,232,82,82,262,526,29,29,151,151,151,151,488,488,116,448,448,448,448,448,448,448,448,14,448,259,448,18,6,18,3,3,3,530,756,530,162,299,56,56,56,56,56,201,756,756,756,756,756,371,371,638,371,371,371,371,756,48,48,526,756,756,756,756}, + {669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,243,243,243,2,243,296,383,383,383,383,383,132,132,132,132,2,2,132,132,132,2,2,132,132,132,2,2,2,2,2,2,383,243,243,243,132,132,132,132,132,2,2,2,2,2,2,2,2,2,2,2,413,413,2,383,383,2,2,2,437,437,2,2,2,2,2,2,2,2,2,2,2,2,2,383,383,2,2,383,383,383,383,383,437,437,2,132,132,2,383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,2,2,2,405,602,602,344,344,344,344,344,590,28,28,512,2,170,170,296,170,2,2,2,2,2,2,81,132,383,2,2,383,383,383,383,383,383,296,296,383,383,383,383,383,383,81,81,81,81,81,81,81,81,81,81,81,81,383,383,383,81,132,132,132,132,2,2,132,132,132,2,2,413,413,413,413,413,413}, + {693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,484,484,2,2,2,2,2,2,2,2,2,439,439,439,2,2,484,484,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,484,484,484,2,484,439,2,439,439,439,439,2,2,2,439,439,2,2,2,2,2,484,2,2,484,484,439,2,2,2,439,2,2,439,2,439,2,439,439,2,2,2,439,439,2,2,439,439,439,439,439,439,439,439,2,2,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,2,439,439,439,439,439,439,439,439,439,439,2,2,439,439,439,439,439,439,439,439,439,439,439,2,2,2,2,2,439,439,2,2,2,2,439,2,2,2,2,2,2,2,2,2,439,439}, + {672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,298,298,298,2,2,2,2,2,2,2,2,2,2,2,298,298,2,2,2,2,2,182,182,182,182,182,2,2,2,2,2,54,54,2,2,2,54,2,298,2,2,2,2,2,2,2,2,2,2,2,191,2,2,2,2,2,2,2,2,2,2,2,2,298,298,2,2,2,298,191,2,2,2,2,2,2,191,191,2,2,2,58,58,2,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,298,2,2,2,2,2,2,191,191,2,2,2,2,2,2,2,2,2,2,58,182,182,182,182,182,182,2,2,298,2,2,2,2,2,2,2,182,2,2,2,2,2,2,182,298,2,298,54,54,298,298,298,2,298,298,298,298,298,298,298,298,298,298,182,298,54,298,54,54,54,2,298,298,298,298,298,298,54}, + {705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,43,285,285,2,285,2,2,2,2,2,2,2,2,2,2,2,405,405,405,2,2,2,405,405,405,405,2,2,2,2,2,2,2,2,2,2,2,2,2,405,405,405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,43,2,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,43,43,2,2,2,2,43,2,2,2,2,43,43,43,43,43,43,43,43,2,2,2,2,2,2}, + {684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,304,304,2,2,304,304,304,304,2,2,2,304,304,304,304,304,304,2,2,304,304,304,304,304,2,304,304,2,2,304,304,304,304,304,304,304,304,2,304,2,304,2,304,304,2,304,304,304,304,2,2,304,304,304,304,304,304,304,304,304,304,304,304,2,2,2,2,304,304,304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,685,685,2,2,685,2,2,2,2,2,2,304,2,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {715,521,636,304,402,459,435,571,611,214,214,43,43,358,2,2,2,2,358,2,2,2,2,2,2,358,358,358,2,2,358,358,358,2,2,2,2,2,2,2,2,2,2,358,202,2,2,202,358,2,2,2,202,2,2,2,2,2,2,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,358,358,358,2,2,134,134,2,2,134,134,134,134,358,134,134,134,2,134,134,134,134,2,134,2,2,2,2,2,2,2,2,2,2,358,358,358,2,2,134,134,134,134,134,2,2,134,202,2,202,2,134,2,134,134,134,134,134,134,134,2,134,134,134,2,134,134,2,2,2,202,202,202,134,2,2,2,134,2,134,134,202,2,202,134,134,202,134,134,134,134,134,134,134,134,134,134,134,134,134,134,2,508,508,508,508,508,2,2,134,358,358,358,358,134,134,134,134,134,134,134,134,2,134,358,134,2,2,202,202,2,202,2,2,2,2,2,2,2,2,2,2,358,202,202,202,202,202,202,202,202,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {768,224,219,425,467,147,151,643,316,263,263,263,263,263,2,2,2,2,2,272,139,2,2,2,2,2,2,2,2,2,272,53,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,53,2,2,2,272,53,2,272,272,272,272,2,272,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,53,53,53,53,2,2,272,2,53,53,2,2,2,2,2,53,53,53,53,53,53,2,2,2,53,53,53,53,2,2,2,53,2,2,2,2,53,53,53,53,53,2,2,2,2,272,272,272,2,272,272,272,272,272,272,272,272,2,272,2,2,2,2,2,272,53,53,272,272,272,272,272,272,272,2,2,2,2,2,53,53,53,53,26,26,2,2,2,26,26,2,53,53,53,272,272,2,2,53,2,2,2,2,2,53,272,2,2,2,53,53,53,2}, + {555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,2,2,2,2,2,394,394,394,394,394,2,2,2,2,2,2,2,2,394,394,394,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,147,147,147,147,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,2,2,2,2}, + {690,206,572,877,600,129,288,52,19,147,222,222,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,147,147,2,2,2,2,147,147,2,2,147,147,147,2,2,2,2,2,2,2,2,2,147,147,147,147,147,147,147,147,2,147,147,147,147,147,2,147,147,147,147,147,147,147,2,147,147,147,147,147,147,2,2,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,2,147,147,2,147,147,147,147,147,147,2,2,2,2,2,2,2,2,147,147,136,136,147,147,2,147,147,147,147,2,147,147,147,147,147,147,147,147,147,147,147,147,147,136,136,147,147,147,147,2,2,2,147,2,2,2,2,2,2,2,147,147,147,147,2,2,2,147,147,147,147,147,147,147,147,147,147,2,2,2,2,147,147,147,147,147,2,2,2,2,2,2,147,2,2,2,2,136,2,2,2,2,2,147,147,147,2,2,2,2,2,147}, + {793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2,2,2,115,115,115,115,115,115,2,2,2,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,2,2,2,2,2,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,285,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,2,2,2,2,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,667,667,5,5,309,326,512,50,50,2,2,2,2,2,2,2,2,2,2,2}, + {703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,827,2,2,2,827,2,827,827,827,827,827,827,827,827,827,2,2,2,2,2,2,2,2,2,827,2,827,827,827,827,827,827,827,827,827,827,827,827,827,2,2,2,2,2,2,2,827,827,827,827,827,827,827,827,827,827,827,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,131,2,2,2,2,2,611,459,459,459,459,2,2,611,611,611,611,611,611,2,611,611,611,611,131,131,131,131,131,131,131,131,611,611,131,2,611,611,611,611,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,2,2,2,131,131,131,131,131,131,131,131,131,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,611,611,611,611,2,2,611,611,611,2,2,611,611,611,611,2,611,611,2,611,611,611,611,2,611,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,611,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,2,2,2,2}, + {703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2,617,617,2,343,343,343,343,2,2,2,2,2,343,2,2,343,2,2,2,2,343,2,2,2,2,2,2,2,2,2,2,343,2,2,2,2,2,2,2,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,343,343,343,2,2,2,617,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,343,343,343,343,343,343,2,343,343,343,49,343,343,2,2,617,343,2,2,343,343,2,343,343,2,343,343,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,739,39,139,196,196,196,2,2,2,593,2,49,593,593,593,593,593}, + {709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222,2,2,2,2,2,2,2,2,2,2,2,2,2,623,2,2,2,2,2,2,2,2,2,2,2,2,222,222,222,222,222,222,2,363,2,2,2,2,2,623,2,2,2,222,222,222,222,2,2,2,222,222,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,222,222,222,222,222,222,2,2,2,222,623,623,623,2,2,2,2,2,222,2,222,222,222,222,222,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,423,423,2,2,623,623,623,2,2,2,2,623,623,623,623,623,623,2,623,623,2,2,2,2,2,2,2,2,2,623,2,2,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,374,374,2,2,2,2,2,2,216,216,216,216,2,2,216,78,294,294,294,2,2,216,216,78,78,78,78,2,78,78,216,216,2,216,216,2,216,216,216,216,216,216,216,216,216,216,216,216,216,216,294,294,216,216,216,216,216,216,216,216,216,216,2,2,2,294,294,2,294,294,2,2,2,78,78,78,2,2,2,2,2,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,78,78,78,78,2,78,78,294,294,294,294,294,294,2,2,2,2,2,2,2,2,2,2,294,2,78,78,78,78,2,2,2,294,294,78,78,78,294,2,294,2,2,2,216,2,2,216,216,216,2,2,2,294,2,2,2,2,2,2,78,78,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798,798,798,2,2,2,2,2,2,2,798,2,2,2,2,2,2,2,2,2,2,2,2,798,798,798,798,798,798,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,474,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,798,798,798,798,798,798,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,517,517,285,285,285,285,285,2,2,2,2,2,2,517,517,517,517,517,517,517,2,2,2,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,2,2,2,2,2,2,285,2,285,285,2,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,517,2,2,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,285,285,285,285,285,285,285,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,197,197,197,197,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,197,197,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,197,197,197,197,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,698,698,698,698,698,698,698,207,207,207,207,698,2,514,514,514,207,2,2,2,207,698,2,698,207,698,698,207,514,514,514,514,514,698,698,698,698,698,2,2,698,698,2,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,2,2,2,2,514,514,514,514,514,514,2,514,207,2,207,207,207,514,514,514,514,207,698,2,2,698,514,465,465,514,698,392,392,392,392,392,392,2,2,2,2,2,2,2,2,2,2,2,514,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,698,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,465,2,392,392,392,392,392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,432,2,2,2,698,698,698,2,465,465,465,2,2,575,2,2,2,2,2,2,2,2,2,2,2,2,698}, + {555,229,328,91,272,815,483,749,468,2,92,92,4,92,2,2,2,258,258,258,2,258,258,2,2,2,2,258,2,2,258,258,258,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,258,258,258,258,2,2,2,2,2,2,2,2,2,2,2,258,2,2,2,2,2,258,2,258,2,2,2,2,2,2,258,258,2,2,2,2,2,258,258,58,58,258,258,258,258,258,258,258,258,258,258,258,92,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,58,58,58,58,58,58,58,58,258,258,258,258,258,2,2,2,258,58,2,92,92,855,855,855,258,258,258,258,258,258,258,258,58,58,58,58,476,2,855,855,2,855,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,92,92,92,2,258,258,2,2,2}, + {580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207,2,2,207,207,207,207,207,487,207,2,2,2,2,2,2,2,207,207,207,207,207,2,2,2,2,2,2,2,2,2,2,2,2,2,207,207,2,2,2,2,2,2,2,2,2,2,2,207,207,2,2,2,2,207,487,487,487,2,2,2,2,2,2,2,2,2,487,2,2,2,2,2,487,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,207,487,2,207,207,2,2,487,207,2,2,2,207,487,2,487,487,2,2,207,2,2,487,487,487,487,487,2,487,2,2,2,487,2,2,2,487,2,2,207,207,2,2,2,207,207,207,207,207,207,207,207,487,2,207,207,207,207,487,207,487,207,2,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,2,2,207,207,2,2,2,487,2,207,207,207,2,487,2,2,487,487,487,487,2,2,207,207,207,207,207,207,207,207,487,2,2,2,2,2,2,487,487,2,2,2,2,2,2,2,2,2,2}, + {457,520,93,460,275,525,300,184,354,147,147,147,147,179,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,94,94,94,2,2,2,2,2,281,281,2,2,2,2,2,2,2,2,2,281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,281,84,84,2,2,2,2,2,2,2,2,2,2,2,2,281,281,2,2,2,2,2,281,2,2,2,2,2,281,281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226,2,2,226,226,226,226,2,226,226,226,226,226,2,226,226,226,226,2,2,2,2,2,226,2,2,2,2,226,226,142,142,142,142,226,226,226,226,226,226,226,226,299,299,226,226,226,226,299,2,299,226,226,226,299,2,2,2,2,226,226,2,2,226,799,799,226,226,477,226,142,142,142,142,799,799,799,2,226,226,226,477,2,226,226,226,226,226,2,2,2,2,2,32,2,2,32,2,2,2,2,2,4,4,4,348,348,226,142,2,2,2,149,231,231,231,231,231,231,174,364,142,142,141,141,46,46,46,67,299,299,2,2,2,299,46,46,799,799,799,799,799,370,142,2,2,936,936,936,936,936,936,226,226,226,226,299,299,299,299,936,936,936,936,299,299,299,299,299,299,299,299,299,142,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,31,31,299,299,299,31,299,31,31,31,31,31,157,157,31,299,299,31,299,299,299,936,31,31,31,31}, + {833,634,228,520,113,329,279,420,581,2,2,385,385,110,450,2,733,2,2,2,561,561,2,561,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,561,561,2,2,2,2,561,561,2,561,561,2,2,561,561,561,561,561,561,561,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,561,561,2,2,2,2,2,2,2,2,2,2,2,2,561,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,189,323,323,286,286,2,388,388,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,385,2,2,2,2,2,2,2,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123}, + {587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493,179,179,179,179,179,179,179,179,179,179,179,179,179,2,2,184,184,184,179,179,179,493,493,493,55,2,184,2,363,363,363,363,2,363,2,2,2,179,2,2,2,2,480,2,2,480,480,480,2,2,2,2,363,363,363,363,363,363,2,2,2,2,2,2,2,2,2,363,363,363,363,363,363,363,363,55,55,55,2,821,821,184,184,184,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,458,2,2,493,493,493,2,2,343,343,289,219,219,69,69,493,493,2,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,179,179,179,493,493,493,410,821,493,55,410,410,179,179,179,493,493,179,179,179,179,179,179,179,179,179,179,493,179,179,179,179,179,179,179,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,179,493,493,493,493,493}, + {744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,2,2,2,2,2,2,2,2,2,2,2,2,2,45,2,2,45,2,2,2,2,2,2,2,2,2,45,45,45,45,45,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,203,203,203,203,2,2,2,2,2,2,2,2,2,2,2,2,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,45,45,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,45}, + {841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,626,2,2,626,2,626,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352,352,352,352,352,2,2,2,352,2,2,545,545,2,2,2,2,2,2,2,2,2,2,2,2,352,97,2,2,2,2,352,352,352,2,2,2,352,352,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,352,352,2,2,669,2,352,2,352}, + {468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2,2,143,143,2,2,2,143,143,2,237,237,2,2,2,2,2,237,2,237,237,237,143,143,143,143,143,143,143,143,143,143,143,143,143,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,143,2,2,143,143,143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {610,289,503,744,775,512,605,454,484,2,2,2,444,466,145,631,2,631,631,631,631,631,631,631,631,631,2,2,631,631,631,858,631,631,631,631,631,631,631,631,631,631,631,2,2,631,631,631,631,2,2,631,631,2,631,631,631,631,2,2,631,631,631,2,858,631,631,2,2,631,2,631,631,2,2,631,631,631,631,631,631,2,631,631,631,631,631,2,631,631,631,2,2,631,631,631,2,2,631,631,631,631,631,631,631,631,631,631,631,631,631,631,2,2,631,631,2,2,631,631,631,2,2,2,631,631,631,631,2,631,631,631,631,631,631,2,2,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,2,631,631,631,631,631,631,631,631,631,631,631,631,2,631,631,631,631,631,631,631,631,631,631,446,631,2,631,631,631,631,631,631,631,631,2,2,631,631,631,2,153,631,631,631,631,631,631,631,631,631,2,2,201,201,201,201,201,201,631,201,201,631,631,631,631,631,631,631,858,201,153,201,631,631,631,2,631,631,631,153,153,153,153,153,631,631,153,631,153,153,631,631,631,631,631,631,631}, + {792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,2,2,2,2,2,2,2,2,2,2,2,2,2,2,318,318,318,283,283,283,283,283,2,2,283,283,283,283,283,283,2,2,2,283,283,283,318,318,2,318,318,318,318,2,2,2,318,318,318,2,318,318,318,318,318,318,318,318,318,318,318,318,318,318,283,283,318,318,318,318,318,283,283,283,283,283,318,318,318,318,318,318,318,318,318,318,318,2,283,318,318,318,318,318,318,2,318,318,318,318,318,318,2,2,2,2,2,2,2,2,2,408,408,408,408,408,2,2,2,408,2,2,2,408,2,2,2,2,2,2,2,318,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,283,283,283,283,283,283,283,283,283,283,318,283,318,318,318,318,318,318,2,2,2,2,2,408,2,318,318,318,408,2,2,2,2,2,318,318,318,2,2,2}, + {563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79,79,2,435,435,435,435,435,2,2,2,2,435,435,2,2,2,2,146,2,2,2,2,2,79,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,79,79,79,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,2,2,133,133,133,133,133,133,133,2,2,2,2,79,133,79,79,79,435,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {795,185,350,211,82,537,106,680,62,2,2,537,423,423,423,2,2,501,501,2,501,2,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,268,268,2,2,2,268,2,501,2,2,501,501,2,2,2,501,501,501,2,501,2,501,2,501,501,2,2,2,2,2,2,2,2,2,501,501,2,2,2,2,2,2,2,2,2,2,2,2,501,2,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,2,2,2,2,501,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,501,2,2,501,501,501,2,501,501,2,2,2,2,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,501,2,2,2,501,2,2,2,2,2,2,2,2,2,501,501,2,2,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,2,2,2,501,501,501,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {633,425,295,548,497,163,381,461,89,2,2,831,583,896,38,2,625,2,2,2,276,276,2,2,276,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,276,276,276,2,276,276,276,276,276,276,276,276,276,276,2,276,276,276,2,2,2,276,276,276,276,276,276,276,276,276,276,276,276,2,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,2,276,276,276,276,276,276,2,276,276,276,276,276,276,276,276,2,276,2,2,276,276,276,276,2,276,2,2,2,276,276,276,276,276,276,276,276,276,2,2,2,276,276,276,276,276,276,276,276,2,276,276,276,276,276,2,2,2,2,2,2,2,2,2,2,2,276,276,2,2,569,569,569,569,569,569,569,569,2,2,2,276,276,2,2,2,276,276,2,2,2,2,2,2,276,276,276,276,2,2,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,2,276,276,276,276,276,276,276,276,2,276,276,276,276,276,276,276,2,2,2,276,276,276,276,276,276,276,276,276,276}, + {767,318,84,97,208,387,423,196,417,2,396,396,396,396,396,128,128,2,2,2,328,328,4,4,4,4,101,2,2,328,82,16,16,16,16,244,244,221,128,128,221,128,128,128,128,346,221,221,221,221,221,244,244,244,221,221,45,45,180,180,274,325,122,325,244,45,221,221,221,221,221,346,221,221,221,221,221,221,314,705,705,413,413,413,85,85,85,467,221,698,811,958,221,811,811,698,698,221,221,811,811,811,101,101,101,307,307,307,307,307,672,212,212,21,21,21,212,143,148,148,21,53,53,672,296,558,296,296,42,558,42,221,891,221,390,390,390,390,390,390,390,390,390,120,120,120,390,390,120,390,53,53,53,53,53,53,53,53,53,53,53,307,195,250,250,250,250,250,399,399,250,27,27,27,125,125,125,125,125,125,125,195,195,195,195,195,195,195,195,195,195,195,195,387,387,387,387,195,195,27,585,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,144,651,651,144,144,651,651,120,120,21,21,212,143,120,390,390,120,120,120,100,100,100,100,18,18,18,100,100,100,100,100,100,351,520,18}, + {802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2,77,2,431,2,2,2,2,2,2,2,2,2,116,2,2,2,431,431,2,431,431,77,77,77,77,431,431,431,431,77,431,431,431,431,431,431,431,2,2,2,2,2,431,431,2,431,431,431,431,431,431,431,431,431,431,431,431,431,2,2,2,2,431,431,2,2,2,431,2,2,2,2,2,2,2,2,431,431,431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,431,2,2,431,431,2,431,431,431}, + {781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2,2,372,372,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,372,449,2,2,2,2,449,449,2,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,2,2,2,449,449,449,449,449,449,449,2,2,449,449,449,449,449,449,449,2,449,449,449,449,449,449,449,449,2,2,2,449,449,449,449,449,2,2,449,449,449,2,2,449,2,449,449,449,449,2,2,449,449,449,449,449,449,2,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,2,2,2,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449}, + {807,377,237,443,388,286,158,349,491,32,32,260,260,260,2,2,260,615,615,615,2,2,260,260,260,260,260,615,615,615,615,615,32,32,260,260,260,639,639,86,86,43,43,43,539,539,539,539,539,539,539,539,539,539,152,152,152,315,315,315,315,315,38,38,38,38,674,38,38,38,608,608,837,608,608,608,219,219,219,219,219,275,275,607,729,85,85,85,729,607,597,275,721,721,35,254,655,254,254,254,254,254,254,254,254,254,254,535,859,535,859,859,859,859,331,331,859,394,394,162,162,162,162,254,254,254,254,254,150,35,35,35,479,197,183,183,183,183,183,183,183,183,183,162,70,70,70,183,183,183,183,183,183,183,279,967,967,967,967,166,166,166,166,333,358,279,349,349,358,358,391,358,166,27,27,27,216,391,236,53,53,717,917,917,535,717,717,717,717,717,781,657,717,717,657,657,38,38,674,674,219,674,608,254,162,162,162,162,162,162,162,769,769,769,769,254,769,254,418,254,254,254,254,254,254,254,254,254,254,254,254,254,201,201,201,201,201,201,201,201,201,201,201,227,466,201,201,201,201,201,227,977,977,227,977,294}, + {780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,613,613,613,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,613,613,613,613,2,613,613,613,613,613,613,613,613,613,2,2,2,2,2,2,2,2,2,613,613,613,613,613,613,613,613,2,2,2,2,613,613,2,2,613,613,613,613,2,2,613,613,613,613,613,613,613,613,613,2,2,2,2,2,2,2,2,2,2,2,613,613,2,2,2,2,2,2,2,613,613,613,613,613,613,613,613,613,613,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,215,613,613,2,613,613,127,127,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,613,613,2,2,2,2,215,215,2,2,2,2,613,215,215,215,215,2,2,2,2,2,2,2,2,215}, + {788,497,334,93,319,169,273,540,904,2,903,569,569,569,272,272,2,2,2,2,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,571,2,2,571,2,2,2,2,2,2,2,2,2,2,2,2,571,571,571,2,2,571,571,571,571,2,2,571,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,571,2,2,2,2,2,2,2,2,2,2,2,2,2,571,571,2,2,571,571,2,571,571,571,2,571,571,571,571,2,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,2,2,571,2,2,571,2,2,571,571,571,571,2,571,571,2,571,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,571,2,2,2,2,2,2,2,571,571,571,571,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {622,309,913,550,994,90,257,588,29,526,526,526,496,496,576,2,2,2,2,2,182,182,182,2,2,447,447,447,447,447,447,182,182,447,447,447,447,2,447,447,447,2,2,447,447,2,2,2,447,447,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,182,182,2,2,182,447,182,182,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,2,2,447,447,2,447,447,447,447,2,2,2,2,2,2,2,2,2,2,2,2,447,447,447,447,447,2,2,2,2,2,2,2,2,2,2,2,447,447,447,447,447,447,447,447,447,447,182,447,447,447,447,447,182,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,2,2,2,2,2,2,2,2,447,2,2,2}, + {814,652,456,774,624,870,27,739,464,2,108,578,578,561,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,650,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,650,650,2,650,650,650,2,2,2,2,2,650,650,650,650,650,650,2,2,650,650,650,650,650,650,650,650,650,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,203,203,32,203,203,203,95,256,256,2,2,906,700,700,710,88,88,798,2,710,710,710,710,710,710,710,798,2,2,710,283,2,2,2,2,2,2,2,2,2,710,710,710,710,710,2,88,88,88,2,2,203,203,710,710,798,798,798,710,710,88,88,88,88,88,88,88,88,88,88,798,88,88,88,798,798,798,88,88,88,88,88,798,798,88,88,88,88,88,88,88,88,88,88,360,355,88,645,22,11,11,11,106,236,106,106,333,22,412,412,412,412,797,412,412,797,797,11,797,797,797,798,797,798,798,798,798,798,88,798,798,798,798,88,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,710,710,798,323,798,323,323,323,323,798,798,183,323,323,627,323,183,183,323,710,323,710,710,710,710,710,183,183,183,323,283,283,283,183,88,88,627,627,627,627,183,710,710,183,46,798,627,627,88,798,627,88}, + {593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424,424,424,424,424,424,424,424,424,424,670,670,2,670,2,670,2,670,2,2,670,670,2,2,2,2,2,670,2,2,2,2,2,2,2,2,2,2,670,670,2,670,670,670,670,670,2,2,670,670,670,670,670,2,670,670,670,670,2,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,79,2,2,2,670,670,670,670,670,670,670,670,670,670,670,670,670,2,2,2,2,670,670,670,670,2,2,2,2,2,2,2,2,2,2,2,2,2,2,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,2,2,2,2,79,2,670,670,2,2,2,2,670,670,670,2,2,2,79,79,2,2,2,2,2,2,2,2,2,2,2,2,670,670,670,670,670,2,2,2,2,2,2,2,2,670,670,670,670,2,2,2,670,670,670,670,670,670,670,670,670,670,670,2,670,670,2,2,79,2,424,424,424,670,2,2,2,2,2,2}, + {629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,123,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,684,684,684,684,123,123,123,684,123,123,123,123,123,123,123,2,123,123,684,684,2,684,684,123,123,123,123,123,123,123,123,123,684,123,123,123,123,2,2,123,123,123,123,123,123,684,684,684,123,123,123,123,123,123,123,123,684,684,123,684,684,123,123,684,2,123,123,123,123,123,123,123,123,684,684,123,684,684,123,123,123,123,123,123,123,684,684,684,684,684,684,684,684,684,684,684,684,123,123,123,684,684,123,684,123,2,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,684,123,123,123,123,123,123,123,123,123,684,684,123,123,2,2,2,2,123,684,684,684,684,684,684,684,2,684,2,123,123,684,123,684,2,2,123,2,2,2,2,684,684,123}, + {901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418,418,418,418,418,418,2,2,2,418,2,2,2,2,2,2,2,2,2,2,682,682,682,682,464,464,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418,418,2,2,2,2,2,418,418,418,418,418,418,464,418,418,418,418,418,418,2,418,418,2,418,2,2,2,2,2,418,418,418,2,418,418,418,418,2,464,464,464,464,464,418,418,418,418,418,464,464,464,418,418,418,418,418,418,418,418,418,464,418,418,418,418,418,418,464,464,464,418,418,464,418,418,418,2,42,42,418,418,418,418,464,2,418,33,2,2,2,418,418,418,418,2,2,2,418,418,2,2,464,464}, + {669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434,434,434,2,75,434,434,434,434,2,434,434,434,434,2,2,2,2,2,655,2,2,2,2,2,107,107,107,107,206,206,107,107,107,107,580,655,655,2,107,107,107,107,655,655,655,655,655,434,434,434,434,434,434,434,580,580,580,580,580,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,75,434,434,434,434,434,580,434,434,248,248,248,434,434,434,434,434,434,580,580,580,248,166,166,166,655,655,434,434,580,2,580,580,580,580,580,2,2,580,580,580,580,580,655,655,655,655,655,655,655,206,206,206,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,2,434,434,434,652,655,434,107,107,107,107,107,107,107,107,434,434,434,652,652,434,434,434,434,434,434,2,434,434,107,580,434,75,75,434,434,2,434,434,434,434,2,206,2,2,2,2,655,2,2,2,2,2}, + {610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,374,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,47,47,2,2,2,2,2,2,2,2,2,2,2,2,2,47,2,2,2,47,47,2,47,2,2,47,2,2,2,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,386,386,386,386,386,386,386,386,386,2,2,2,386,386,386,386,47,47,2,47,374,374,374,374,374,374,374,374,374,47,47,47,47,47,47,47,78,47,2,2,47,47,374,47,374,374,374,374,374,374,374,374,374,374,374,374,47,47,47,47,47,374,374,374,2,2,374,374,374,47,47,47,47,374,374,374,386,386,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,120,120,120,120,374,374,386,386,386,386,386,386,374,374,374,120,120,120,120,120,716,374,374,374,374,716,716,716,716,716,120,374,374,120,120,374,374,374,120,120,120,120,47,47,47}, + {929,360,102,893,329,136,515,33,170,581,268,35,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,666,2,2,2}, + {822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,198,198,198,198,198,198,2,2,2,198,198,198,198,198,198,198,198,198,198,198,2,198,198,198,198,198,2,2,2,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,156,156,198,156,156,156,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,156,198,2,2,2,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,156,156,156,198,156,198,156,198,156,156,198,198,198,2,2,198,198,156,156,156,198,198,198,198,198,198,198,198,198,234,156,156,156,156,156,156,156,156,156,156,198,198,198,198,198,198,198,198,198,156,156,234,234,234,234,234,234,198,234,234,234,234,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,2,198,198,198,198,198,198,198,198,198,198,198,198,198,198,234,2,234,234,234,234,234,234,198,198,198,198,198,156,156,198,198,198,234,198,234,234,2,2,2,2,198,198,198}, + {655,330,324,151,166,431,58,174,142,115,1003,66,724,778,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,503,503,2,503,503,503,2,2,2,503,2,2,2,2,2,2,2,2,2,503,503,503,503,503,2,503,503,503,503,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,744,2,744,2,2,2,2,2,2,2,2,2,2,503,2,2,2,2,503,2,2,2,2,2,2,2,2,2,2,2,2,744,744,744,744,744,2,2,2,2,2,2,2,2,2,2,744,744,744,2,2,2,2,2,2,2,2,503,503,503,503,503,2,503,503,503,744,744,744,2,744,744,744,744,744,744,503,503,503,503,503,744,503,503,503,503,503,503,2,2,2,744,503,503,503,503,503,503,503,503,503,2,503,2,503,503,503,503,503,503,2,2,2,503,503,2,503,503,503,503,503,503,503,2}, + {867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,104,2,2,2,35,35,104,35,2,35,2,2,2,58,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791,2,104,104,104,104,58,58,58,58,297,297,2,2,2,2,2,2,2,2,2,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,104,104,104,2,58,2,2,2,104,104,104,104,104,104,2,104,104,104,2,2,104,104,104,104,104,104,104,104,104,2,104,104,104,2,2,104,104,2,2,104,104,104,791,791,791,791,104,104,791,2,2,104,104,104,104,2,2,2,2,2,2,2,2,58,104,104,104,104,104,104,58,58,58,58,2,2,2,58,2,2,58,104,104,104,104,104,2,58,58,2,2,2,2,2,58,58,58,104,104,104,58,104,58,58,58}, + {623,330,182,489,212,223,741,490,40,412,801,681,681,801,2,2,71,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2,2,2,2,427,2,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,209,209,209,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,99,2,2,2,2,2,2,2,71,2,2,2,2,2,71,2,2,71,2,2,71,71,71,71,71,71,2,71,71,71,71,71,2,2,2,71,71,71,71,71,71,71,71,71,2,71,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,746,746,2,2,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,427,427,427,427,427,2,2,746,746,2,2,71,2,2,2,71,71,71,71,71,71,2,2,529,529,746,746,746,746,2,2,2,746,2,427,2,2,2,2}, + {859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,654,2,2,2,654,654,2,2,2,2,2,2,2,2,2,2,2,2,2,2,101,101,2,2,2,2,101,2,2,2,2,2,2,2,2,2,2,2,2,2,654,2,654,654,654,2,2,654,654,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,182,182,182,182,2,2,2,2,2,2,2}, + {612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,689,689,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,689,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,139,139,2,139,2,2,604,2,2,2,604,604,2,2,2,139,2,2,2,604,139,139,139,139,139,139,139,2,2,2,604,604,604,604,604,604,139,604,604,2,2,2,2,2,2,2,604,604,604,2,2,2,2,604,2,2,604,604,604,604,2,2,2,2,2,2,2,604,604,604,604,604,604,604,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,139,139,2,139,139,2,2,2,2,2,139,2,2,139,2,2,2,139,139,2,2,2,2,139,2,2,2,2,2,2,2,139,2,2,2,2,2,2,2,2,2,2,139,139,139,2,2,2,2,2,2,2,2,139,2,2,2,2,2}, + {667,397,121,526,321,660,848,729,357,137,268,711,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,521,2,2,2,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,2,2,2,2,535,535,2,2,2,2,2,2,2,2,2,2,2,2,2,787,787,461,787,787,437,437,521,521,521,521,521,521,521,521,521,521,521,521,521,2,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,535,535,521,521,535,535,535,521,535,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,338,338,338,110,33,33,33,238,180,238,377,559,132,584,584,577,180,180,577,521,521,238,137,521,521,521,521,521,240,240,794,794,521,521,521,137,137,521,521,521,521,521,521,521,137,137,137,137,535,137,137,137,535,535,535,137,240,535,535,535,535,240,240,240,535,521,521,521,521,521,535,535,535}, + {939,783,796,676,259,643,103,289,15,471,80,80,2,239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,888,888,888,888,888,888,888,888,888,471,471,2,2,2,2,2,2,2,2,2,2,488,2,2,2,2,2,2,471,471,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,78,471,471,2,2,471,471,2,2,471,471,471,471,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,471,2,2,471,2,2,2,2,2,2,2,2,2,2,2,2,2,2,714,2,714,471,471,471,2,2,2,78,78,78,471,471,471,471,471,471,471,471,471,2,2,714,714,2,471,78,78,471,471,471,471,471,471,471,471,714,714,714,714,893,714,893,893,893,2,888,714,714,19,2,2,714,714,2,714,714,714,2,714,714,2,2,714,2,2,2,78,78,471,2,2,714,2,2,2,2,714,2,2,2,2,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,78,714,714,714,714,714,2,78,78,714,714,2}, + {670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {678,274,695,790,169,701,707,1084,470,123,846,846,217,121,317,2,2,2,83,83,83,83,83,83,83,83,83,2,2,2,2,2,217,217,217,217,217,217,217,83,217,217,217,217,217,217,217,217,2,2,52,52,52,2,217,83,217,217,217,217,83,180,180,180,180,180,180,180,180,180,180,2,2,2,2,217,217,83,52,52,52,2,217,217,217,242,242,242,242,242,2,217,52,52,52,2,52,217,217,217,217,52,337,337,337,337,337,2,217,217,217,2,2,2,217,217,217,217,217,217,217,217,217,2,317,317,317,2,52,217,52,52,2,2,52,52,2,2,2,2,2,2,2,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,217,217,2,2,217,217,2,2,2,2,2,2,2,217,217,217,217,217,217,217,217,217,217,217,2,2,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,52,52,2,2,217,2,2,217,2,2,2,217,217,2,217,217,2,2,2,217,2,2}, + {877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,734,734,734,2,2,2,2,2,2,2,2,2,2,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {882,417,475,424,311,646,346,207,74,157,590,356,2,2,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,34,34,34,34,34,34,34,2,2,2,2,2,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141,141,2,2,2,2,2,2,2,264,264,264,264,2,141,141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,141,2,2,141,2,2,2,2,2,2,2,2,2,2,2,141,141,141,2,2,2,2,141,141,141,141,141,2,141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,141,141,141,141,2,2,141,141,2,2,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,2,141,141,141,141,2,141,141,141,2,2,2,141,2,2,141,141,2,141,141,141,141,141,141,141,141,141,141,141,2,141,141,141,141,141,141,141,141,141,2,2,2,2,141,141,141,141,141,141,141,141,141,141,141,141}, + {844,244,672,489,839,263,14,233,422,392,8,392,2,2,2,2,2,2,815,815,815,815,257,257,105,105,2,2,2,815,815,815,815,815,2,2,257,257,257,815,815,815,815,815,815,815,815,105,815,815,105,105,105,105,105,815,105,815,815,815,815,815,105,105,257,257,105,105,815,815,815,815,815,257,257,257,257,257,257,815,257,257,105,105,105,815,2,105,105,105,105,105,105,105,105,2,17,17,105,105,2,2,815,815,17,257,105,105,105,105,105,105,105,17,2,815,105,105,105,2,2,2,257,257,105,105,257,257,105,2,2,2,2,2,2,2,2,2,105,105,2,2,2,2,105,105,105,2,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,815,815,815,815,815,815,815,2,2,2,2,2,2,2,2,2,815,2,2,2,2,815,815,815,815,815,815,815,815,815,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {693,726,117,167,535,725,224,78,716,100,460,299,2,2,2,2,921,744,2,2,2,2,2,378,2,2,178,178,178,2,178,178,2,2,2,2,2,2,2,2,2,2,178,178,2,2,2,2,2,2,2,2,2,2,2,178,178,178,178,178,178,2,2,2,175,2,2,2,2,178,178,178,178,178,395,2,378,378,175,175,178,178,2,178,178,178,178,178,178,178,178,178,178,2,2,178,178,178,178,178,178,178,178,178,178,178,178,178,178,2,2,178,2,2,2,2,2,2,395,395,395,395,395,2,2,178,178,395,178,178,395,395,178,178,178,178,178,178,178,178,178,178,178,178,178,2,2,2,2,2,2,2,178,178,178,2,2,178,178,231,178,231,2,2,395,395,178,178,2,2,2,178,178,178,178,2,231,395,395,395,395,178,178,178,395,2,231,178,178,178,231,231,2,231,231,437,395,395,395,437,437,437,178,178,178,178,2,437,2,178,178,178,2,2,2,2,2,2,2,2,178,178,2,2,2,2,2,2,2,178,2,2,2,2,178,2,2,178,178,2,2,2,2,178,2,2,2,2,178,178,2,178,178,2,2,2}, + {898,559,396,742,51,143,411,221,116,756,756,756,2,2,2,701,701,2,2,2,2,240,225,256,322,322,240,240,240,240,240,322,2,2,322,322,240,240,240,240,240,2,120,8,745,2,2,120,120,303,303,60,60,60,128,128,60,8,60,4,745,745,745,745,2,2,745,745,745,745,745,745,256,256,256,256,256,704,704,704,704,704,745,745,745,745,704,704,704,704,704,704,2,2,704,704,704,754,754,754,745,745,704,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,754,754,754,754,754,754,754,754,745,754,754,754,745,745,745,745,745,745,745,745,745,745,704,754,745,745,745,745,745,704,745,745,745,745,745,745,745,754,754,754,754,754,754,754,745,754,745,745,745,745,745,745,745,745,131,131,754,754,754,754,754,754,754,745,745,745,745,704,704,704,704,704,704,704,704,704,34,34,704,704,704,704,704,704,704,704,754,745,745,745,745,745,754,754,754,745,745,754,745,745,578,578,578,578,571,571,548,22,44,11,11,11,262,262,491,228,228,228,624,624,624,624,624,737,737,624,624,624,774,774,134,134,352}, + {697,540,358,391,932,309,103,73,35,353,353,503,2,2,353,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656,656,656,656,656,656,656,2,656,2,656,656,656,656,656,656,656,656,656,656,656,656,656,2,656,2,656,2,2,2,2,656,656,2,2,2,656,656,656,656,656,656,2,2,2,2,656,656,656,656,656,656,656,1097,1097,1097,1097,1097,1097,1097,1097,2,656,1097,2,2,1097,1097,656,656,656,656,656,656,656,2,2,2,2,656,656,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,656,656,2,2,2,2,2,656,656,656,656,2,2,656,656,656,2,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,2,656,656,2,656,656,656,656}, + {695,881,335,126,429,476,772,667,974,98,433,49,129,129,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544,544,2,2,544,544,544,544,544,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,544,544,544,544,2,2,2,2,2,298,2,2,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544,544,2,2,2,2,544,544,544,544,2,129,544,544,544,2,544,544,544,544,129,544,544,544,544,544,544,544,129,544,129,129,129,544,544,544,2,2,2,544,544,544,544,129,129,544,544,544,544,129,544,544,544,544,544,544,544,544,544,544,544,129,129,544,544,129,129,129,544,544,544,544,544,129,129,544,544,544,544,129,544,544,544,129,129,544,544,544,544,544,2,544,544,544,544,129,544,544,544,544,544,544,544,544,544,544,129,129,129,129,544,544,544,544,544,544,2,2,544,2,2,544,544,544,2,2,2,2,2,2,2,2,544,544,544,544,544,544,2,2,2,2,2,164,544,544,2,2,2,2,2,2,2,2,2,2}, + {859,361,215,569,255,378,543,436,220,34,105,105,816,816,816,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,585,2,2,2,2,2,2,585,585,585,585,585,585,585,2,2,2,2,2,2,2,2,2,2,2,585,585,585,585,2,2,2,438,438,438,205,585,585,585,2,2,585,585,585,585,585,585,2,2,2,2,2,2,2,2,2,2,585,585,585,585,2,585,585,585,585,585,585,585,585,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,585,2,2,2,2,2,585,438,438,585,585,585,585,585,585,585,585,585,2,816,816,585,585,585,585,585,585,585,585,585,585,585,585,585,585,2,2,2,585,2,2,2,2,2,2,2,2,2,2,585,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,56,8,14,2,2,2,164,164,223,223,223,223,223,223,223,223,32,32,297,297,297,2,297,297}, + {705,770,134,178,940,944,654,600,46,797,797,591,2,145,616,2,2,2,2,2,2,389,389,2,122,2,2,2,389,389,909,389,389,389,389,389,389,389,389,389,909,909,909,909,909,616,616,909,909,909,909,616,389,389,389,616,909,909,909,909,909,909,909,909,706,2,389,389,389,389,389,909,909,909,909,909,909,909,909,909,122,122,2,909,909,909,192,909,909,909,909,192,192,192,192,616,909,909,909,389,616,909,909,909,909,909,909,909,909,192,2,2,2,133,133,133,133,133,133,389,389,133,133,133,133,133,192,192,192,192,192,192,706,706,706,706,706,706,706,706,202,389,202,909,909,909,202,616,616,616,616,909,909,909,909,909,192,192,192,192,192,192,202,202,202,202,202,909,202,202,202,909,909,909,909,909,909,2,2,616,909,909,909,909,909,909,909,909,2,909,909,909,909,2,2,909,909,909,909,122,122,202,909,202,202,202,909,2,549,549,549,2,549,549,2,2,2,2,2,2,2,2,2,909,2,2,2,2,2,2,2,2,2,2,2,2,616,616,909,2,2,909,909,2,2,909,909,2,2,909,909,909,909,909,909,122}, + {642,757,247,513,372,54,546,971,271,61,61,1018,2,143,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {988,271,675,163,379,108,48,472,870,485,485,18,2,485,528,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,586,2,2,2,2,2,586,2,2,2,2,2,2,586,2,586,586,2,586,586,586,586,586,2,586,586,528,2,586,586,2,586,586,586,586,528,528,528,586,528,528,528,2,528,528,586,586,586,528,586,203,2,586,586,586,586,2,528,528,528,586,586,586,586,586,586,586,586,528,528,528,528,528,586,586,556,2,2,586,586,2,2,528,556,528,528,556,586,556,586,586,586,2,528,528,556,528,2,556,2,2,586,528,528,528,528,586,586,586,586,2,2,556,528,556,556,528,528,528,528,528,528,528,528,528,528,528,528,528,528}, + {865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,49,49,2,2,2,237,237,2,237,237,237,2,2,2,237,237,237,237,237,237,237,2,237,2,237,237,2,2,2,2,237,2,2,2,2,2,237,237,237,237,237,237,237,237,237,2,237,237,2,2,2,2,237,237,237,237,237,237,2,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,2,2,2,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,508,508,508,282,282,282,237,237,237,237,237,237,237,237,237,237,237,282,282,282,2,2,237,237,2,2,2,2,2,49,49,49,49,237,2,237,237,2,2,237,237}, + {923,397,722,186,203,575,24,144,36,526,206,787,12,100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,2,2,624,2,2,2,2,2,2,2,2,624,2,2,624,2,2,2,2,2,2,2,2,2,624,2,2,2,2,247,247,2,2,2,2,2,2,526,2,2,2,2,2,624,624,624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,2,624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,624,624,2,624,624,624,624,2,624,2,2,2,624,32,2,2,2,334,193,360,193,360,360,118,360,1084,1084,1084,360,1084,1084,1084}, + {718,359,103,558,684,560,67,35,120,342,680,265,265,265,2,2,265,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,430,430,2,2,2,2,2,2,2,2,2,2,2,2,430,2,775,775,2,2,2,775,2,2,2,2,2,2,2,2,2,775,775,775,775,775,775,775,2,2,2,2,2,2,2,2,2,2,2,2,2,2,430,2,775,775,2,2,2,2,2,2,2,2,2,775,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,775,775,775,2,430,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,430,2,2,430,430,430,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2,2,2,2,2,2,370,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,370,370,370,370,370,370,370,370,2,2,2,113,113,370,2,2,2,2,2,2,2,2,2,2,2,2,2,356,2,2,356,2,2,2,2,2,2,2,2,2,2,2,2,356,370,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,370,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,843,843,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,156,156,2,156,2,2,2,2,2,2,2,2,2,2,2,2,2,2,156,156,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,156,156,2,2,2}, + {903,259,153,106,289,916,861,41,441,368,131,131,262,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,802,802,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,802,802,802,802,802,802,802,160,160,160,2,2,802,2,2,2,802,802,2,802,2,2,2,517,517,2,2,2,802,802,2,2,2,2,2,2,802,802,802,802,2,2,2,802,802,802,2,2,802,2,2,2,2,2,2,2,2,2,2,2,2,2,802,802,2,2,2,2,160,2,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,160,160,160,160,160,160,802,802,802,802,802,160,160,160,160,2,160,2,2,2,160,160,160,160,160,160,160,160,160,160,160,160,2,160,160,2,160,160,2,2,2,2,2,2,2,2,2,2,802,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {945,358,160,196,82,403,362,195,376,877,521,336,521,77,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,579,579,579,2,2,2,2,2,2,579,579,2,2,579,2,2,2,2,2,2,2,579,579,2,2,2,2,2,2,2,2,2,579,579,579,579,2,2,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,579,2,2,2,2,2,2,2,2,2,579,2,2,2,2,2,579,579,579,579,579,579,579,579,579,2,579,579,579,579,579,579,579,579,579,579,492,2,492,2,2,2,2,2,2,2,579,579,2,2,2,2,2,2,2,2,492,2,579,579,2,2,2,2,2,2,2,2,2,2,492,2,2,2,2,492,492,492,492,492,492,492,492,2,2,579,579,579,2,579,579,579,2,579,579,2,579,579,579,579,492,2,492,579,579,579,579,579,2,2,579,2,2,2,2,2,2,2,2,2,492,492,492,492,579,579,579,579,2,2,2,492,492,492,492,492,2,2,230,492,492,492,230,230,230,230,492,230,579,2,2,2,2,2,230}, + {912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,214,808,808,808,808,808,808,808,808,382,2,2,2,2,2,2,382,808,2,2,808,808,808,808,2,2,808,808,808,808,808,808,808,808,808,808,808,2,382,2,2,214,214,214,214,2,2,2,2,2,2,808,808,808,808,808,2,2,2,2,2,2,2,2,2,2,2,214,214,214,2,2,2,2,2,2,2,2,214,214,2,2,214,2,214,2,2,2,2,2,189,189,189,2,382,382,382,382,2,2,2,2,214,214,382,382,214,214,2,2,2,2,2,214,214,214,214,214,226,226,226,226,2,2,226,214,2,2,214,214,214,214,214,214,214,214,214,189,189,189,2,189,382,382,382,382,382,382,382,382,382,2,382,214,214,214,214,2,214,2,2,214,2,2,2,2,214,2}, + {753,242,194,619,345,94,463,485,163,85,412,575,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,149,149,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,149,149,149,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {940,226,320,666,269,54,542,174,109,290,754,524,649,2,202,2,2,2,2,2,2,2,776,202,776,776,776,2,2,202,202,202,202,202,202,202,202,202,202,776,202,202,202,776,776,202,170,170,170,170,170,170,170,170,170,170,170,170,202,202,202,113,113,113,57,57,57,113,113,57,113,113,113,113,113,113,113,113,113,703,113,113,703,703,703,703,703,703,703,703,703,703,703,703,703,703,2,2,57,57,202,202,202,202,202,504,2,2,2,2,2,2,703,2,703,703,2,2,2,703,703,703,703,113,2,2,2,2,2,202,2,2,2,105,105,105,105,105,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {915,210,456,377,303,237,225,521,621,175,569,20,124,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,540,540,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,261,261,261,261,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,2,682,682,523,523,523,523,682,682,523,523,682,2,523,682,523,523,2,2,2,523,523,523,523,523,155,155,523,2,2,682,682,2,682,682,682,682,682,682,682,682,682,682,682,523,523,523,2,2,2,2,2,2,2,2,2,2,682,523,2,2,2,523,523,523,523,682,523,523,523,523,523,523,523,682,523,682,523,523,682,682,682,682,682,682,523,523,523,523,523,523,523,523,523,523,523,523,2,2,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,682,523,523,682,682,682,682,682,682,682,682,523,523,523,523,523,523,523,523,523,523,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,2,2,378,378,378,523,2,2,2,2,378,378,378,378,682,682,682,682,682,682,2,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682}, + {982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,2,2,2,2,2,289,289,289,289,2,289,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,604,126,65,633,657,22,776,161,45,725,44,4,2,2,2,2,2,2,2,2,2,269,269,2,2,2,2,2,2,2,2,2,2,269,600,600,269,269,269,269,2,2,269,269,269,2,269,269,2,269,269,2,269,2,269,269,269,2,2,269,269,269,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,600,600,2,600,600,600,2,2,2,2,269,269,2,2,600,600,2,2,600,269,2,2,2,2,2,269,269,2,2,269,2,2,269,269,269,269,269,2,2,2,2,2,2,2,269,269,2,2,2,2,1121,1121,1121,1121,1121,1121,1121,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,2,2,2,600,269,269,2,269,269,269,269,269,269,269,269,269,269,269,269,269,269,2,2,2,2,269,269,269,269,269,269,269,221,221,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,600,269,269,600,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269}, + {745,600,284,1117,459,1135,300,52,845,331,334,334,334,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,353,353,353,353,353,353,353,2,2,2,2,2,448,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1160,2,2,2,2,2,2,2,2,2,353,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,735,735,2,2,2,735,735,735,735,2,2,2,2,735,2,2,735,2,2,2,735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,735,735,735,735,735,735,735,2,2,2,735,735,2,2,735,735,735,735,735,2,2,2,2,2,2,2,2,2,2,735,735,735,735,735,735,735,735,2,2,2,735,735,735,735,735,735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,735,2,2,2,2,2,2,2,2,2,735,2,2,2,2,2,2,2,2}, + {986,241,233,45,721,325,350,222,35,1065,1065,1065,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,250,2,250,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,250,2,2,2,2,2,2,250,2,2,2,2,2,2,2,2,2,250,2,2,2,250,250,250,2,2,250,250,2,250,250,2,250,2,2,2,250,250,250,250,250,2,250,2,2,2,2,2,250,250,250,2,2,2,2,2,2,2,2,2,2,2,2,2,2,250,2,2,2,2,2,2,2,2,250,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,250,250,2,2,2,2,2,2,2,2,2,2,2,2,2,2,250,250,250,250,250,250,250,250,250,250,250,250,250,250,2,2,250,2,169,2,250,250,2,250,2,250,2,2,2,2,169,169,2,250,250,250,169,250}, + {755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {981,626,987,827,466,458,578,346,475,223,223,223,342,1058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728,728,728,728,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,223,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,2,2,39,39,2,2,2,39,2,2,2,39,728,39,728,728,728,728,2,2,2,2,2,728,2,2,728,216,39,39,39,2,728,223,728,216,216,728,728,728,39,728,728,2,728,728,2,2,2,728,728,728,728,728,728,728,728,728,728,2,728,728,728,728,728,728,216,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,223,728,223,223,728,728,216,216,216,216,728,728,728,728,223,728,728,728,728,39,728,728,728,728,728,39,728,728,223,728,728,223,223,39,39,39,39,39,2,2,39,39,39,2,2,2,2,2,2,2,223,223,223,39,39,39,39,39,39,39,39,39,2,2,2,2,223,2,2,39,39,39,39}, + {949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,788,788,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,788,2,2,2,2,2,2,2,2,2,2,788,2,2,2,2,2,2,2,2,2,2,2,2,2,788,788,2,788,2}, + {992,723,625,251,431,544,309,466,700,644,484,837,904,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,316,471,2,2,4,4,2,2,4,16,316,2,2,816,502,57,204,57,248,57,248,638,638,638,82,82,1024,316,316,316,36,36,36,36,36,36,36,36,36,2,36,36,2,2,2,36,36,36,36,36,36,36,36,36,153,2,153,36,36,36,36,36,36,36,36,36,36,36,541,2,2,36,241,241,36,36,2,153,153,153,153,153,36,36,576,576,576,36,36,36,36,153,9,9,520,632,1067,466,520,1067,839,839,839,839,839,1067,281,281,281,281,281,281,281,281,281,281,560,560,281,281,334,281,281,632,632,632,632,541,589,36,471,471,471,471,153,153,153,153,589,36,36,471,153,153,153,153,541,471,653,653,653,653,653,589,589,589,589,589,653,653,653,153,153,653,653,653,153,153,153,153,653,153,153,2,153,153,36,36,153,471,153,153,153,153,153,153,153,153}, + {1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394,394,394,394,394,394,394,394,2,394,394,2,2,394,2,394,2,394,394,394,2,2,394,2,2,2,2,2,2,394,394,394,2,2,2,2,394,2,2,2,2,2,394,394,394,394,394,2,394,394,394,394,394,61,2,394,394,394,394,2,394,2,2,2,2,394,2,2,394,2,2,2,2,2,2,2,2,2,665,665,665,665,665,665,394,394,394,394,394,394,394,2,2,2,2,394,2,2,2,394,394,394,394,394,665,665,394,665,665,665,665,665,665,665,394,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,394,2,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,394,2,2,2,394,394,394}, + {999,674,212,673,279,579,462,754,89,866,345,110,110,887,2,2,2,2,2,707,707,2,2,2,2,2,2,2,2,2,2,707,707,707,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,509,509,2,509,2,2,2,509,509,509,509,2,2,2,2,2,2,2,2,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,509,509,2,2,2,2,2,2,2,2,2,2}, + {1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2,2,2,2,818,2,2,818,818,2,818,2,2,2,818,818,2,2,2,2,818,818,2,2,2,2,2,2,818,818,818,818,818,818,818,818,818,818,2,2,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,2,818,818,818,818,818,2,818,818,818,818,818,818,818,818,818,818,818,818,818,2,2,2,2,818,818,818,818,818,818,818,2,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,2,818,818,2,2,818,818,818,818,818,818,818,818,818,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,818,818,818,818,818,818,818,818,2,2,2,818,818,2,2,2,2,818,2,2,2,2,2,2,2,2,2,818,456,456,456,456,456,456,456,456,818,456,456,2,818,818,2,2,2,818,818,818,818,818,456,456,2,2,818,818}, + {1005,260,389,960,501,714,118,73,334,1019,704,204,504,205,822,822,2,2,2,2,2,2,2,2,2,2,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,671,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,150,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,150,150,2,2,2,2,2,150,2,2,2,2,2,2,2,150,2,2,2,2,2,2,2,2,2,150,150,150,150,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,630,630,2,150,150,150,150,335,335,335,335,335,2,335,150,150,150,630,630,2,2,630,2,2,335,2,2,2,2,2,2,2,2,2,2,2,2,2,150,150,150,150,150,150,2,150,150,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1010,937,449,474,154,456,766,318,275,444,709,2,778,778,778,806,779,779,2,2,2,2,2,2,2,2,806,2,2,2,287,287,287,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,287,2,2,2,287,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,2,298,298,298,442,442,442,266,266,256,1024,287,4,2,287,287,287,2,2,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,326,46,23,23,23,251,23,682,251,251,670,614,614,98,368,368,368,374,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,669,669,669,669,669,669,669,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,669,669,669,287,287,287,287,287,287,287,287,287,2,669,287,287,287,287,669,669,669}, + {1011,780,134,945,183,42,741,25,252,164,205,222,222,222,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,622,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,622,622,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,963,963,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,622,2,2,2,2,2}, + {1118,427,294,404,268,217,922,515,19,1045,1045,2,833,291,448,2,2,2,2,2,2,2,2,2,175,2,2,2,2,2,2,2,2,2,2,2,175,175,2,175,2,2,175,175,175,175,2,2,2,2,2,2,175,175,175,175,2,2,2,2,2,2,2,2,187,187,187,187,175,175,175,175,175,175,175,175,175,175,175,2,2,187,175,2,2,175,175,2,2,2,2,175,175,175,175,175,175,175,175,175,2,187,187,187,187,187,2,2,187,187,187,187,187,187,187,187,175,175,175,175,175,175,175,175,175,175,175,175,829,187,187,829,829,399,399,399,399,187,187,187,399,175,175,175,175,11,11,11,11,11,11,399,399,399,399,399,399,262,11,2,175,175,175,399,399,2,399,175,175,175,175,175,175,175,11,11,11,11,11,11,11,11,11,11,11,187,175,175,175,175,175,175,175,175,175,175,175,175,399,175,175,399,175,175,175,175,175,175,175,175,175,175,175,399,175,175,175,175,175,175,399,175,175,175,175,175,175,175,175,399,829,11,11,11,175,175,175,175,175,2,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399}, + {1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234,234,234,234,234,2,234,234,2,234,234,234,234,234,234,234,2,234,234,234,234,234,234,234,234,234,234,234,234,234,2,2,2,2,2,1209,1209,1209,2,2,2,2,2,2,1209,1209,234,234,234,234,234,234,234,234,234,234,234,234,832,832,832,832,832,832,832,2,513,513,2,2,832,438,2,438,832,832,832,832,832,2,832,2,2,2,234,234,2,832,2,832,832,234,438,438,2,2,2,2,234,2,541,541,513,513,513,2,2,513,513,2,2,2,2,2,431,431,431,2,2,2,2,2,2,513,513,438,438,438,438,438,438,438,438,438,438,438,513,438,234,513,513,513,513,513,513,513,513,234,832,832,832,832,832,832,513,513,513,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,513,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {722,375,264,390,515,498,1161,391,884,551,238,2,2,825,549,2,2,2,551,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,408,408,2,2,2,408,408,2,2,2,408,408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {792,250,299,210,496,682,94,207,220,227,227,2,2,227,73,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,844,844,844,844,2,913,913,2,2,2,2,2,2,2,2,2,2,2,844,844,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,2,844,2,2,2,2,2,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1022,409,93,359,983,345,280,280,104,940,940,2,2,382,1039,2,2,2,2,831,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,831,831,831,2,831,2,2,2,2,2,2,831,831,2,2,2,2,2,831,831,2,2,1039,2,2,2,2,2,2,2,4,4,4,2,2,4,4,8,16,2,2,2,150,556,391,391,391,391,1200,524,16,16,524,256,524,1039,4,4,4,1039,4,1039,2,2,2,831,831,287,831,2,2,2,782,782,2,2,2,2,831,831,831,831,2,831,2,2,2,2,2,831,831,831,2,1039,2,2,2,831,831,2,8,1039,2,8,2,2,8,8,2,4,4,42,2,2,4,4,8,42,2,2,2,150,679,679,679,391,391,524,524,524,256,256,256,256,256,256,256,8,782,8,782,2,782,782,782,831,16,831,2,2,782,782,782,2,2,464,464,464,464,464,262,262,262,2,2,996,996,996,996,996,996,996,996,2,996,996,996,831,2,8,8,8,8,8,262,8,67,67,831,4,42,2,2,4,4,8,42,560,2,2,150,679,679,679,391,391,1140,1140,1140,1140,1140,1140,1140,1140,560,560,560,1140,560}, + {1027,925,413,335,327,826,250,122,293,773,564,541,420,420,420,774,763,2,2,2,2,2,2,900,110,110,2,763,2,2,2,2,763,763,763,763,763,763,763,110,110,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,110,2,2,2,2,2,2,2,2,2,2,8,2,2,2,2,1083,641,727,727,154,932,500,110,110,110,110,359,359,359,763,763,110,2,110,110,110,763,763,763,110,110,763,110,110,110,763,763,763,110,110,763,763,763,110,110,110,110,110,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,110,110,110,110,763,110,110,110,763,110,110,110,110,110,110,110,110,110,110,763,110,110,110,110,110,110,110,110,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,1255,679,27,27,27,1027,1027,1027,774,773,774,1005,1005,567,773,773,773,773,774,774,774,774,431,431,431,431,431,431,431,431,158,158,158,158,158,763,197}, + {1028,730,807,119,209,146,230,498,164,309,309,2,2,2,693,912,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {997,525,680,120,466,728,288,110,1082,544,572,2,2,663,290,290,2,2,754,2,2,2,2,2,582,582,582,582,582,2,2,2,2,2,582,582,582,582,582,582,582,582,582,582,2,582,582,582,290,290,290,441,441,290,2,582,582,582,441,441,582,582,582,582,582,441,441,441,441,441,290,290,290,290,290,2,266,266,266,266,266,266,2,2,441,266,441,441,441,441,582,441,441,441,2,2,2,441,441,441,441,441,441,441,2,2,2,2,2,2,2,2,2,2,2,582,2,2,2,2,441,2,582,582,582,2,582,441,2,2,290,290,2,2,2,2,2,2,2,2,2,2,2,2,582,2,330,2,2,2,2,582,582,290,290,2,2,582,2,582,2,2,2,2,2,2,582,2,2,2,2,2,2,2,2,2,2,2,266,266,582,2,2,582,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,266,582,582,582,2,2,2,2,2,2,290,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,582,582,290,2,2,290,290,582,582,290,290,290,290,290,582,582,582,582,582,582,582,290,582,582,582,582,582,582,441}, + {1055,395,795,561,222,85,294,433,377,89,89,2,2,2,456,821,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,821,821,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {997,614,240,638,755,575,874,321,600,235,665,2,2,2,154,154,767,767,2,767,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,165,2,2,767,767,767,767,767,767,767,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {802,298,672,424,104,623,152,159,476,760,66,2,2,2,215,215,490,490,490,2,2,2,2,2,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,2,2,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,2,448,448,448,448,448,448,2,2,2,2,2,490,490,490,490,490,490,490,490,490,490,490,2,2,2,2,2,2,2,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,2,2,2,2,2,2,2,2,2,2,490,2,490,2,2,490,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,945,945,2,2,2,2,2,2,2,2,2,2,2,2,2,2,490,490,490,490,2,2,2,2,2,2,2,2,2,2,550,550,550,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,788,124,501,561,1015,419,787,48,620,705,2,2,2,2,88,18,2,215,215,215,2,2,215,215,2,2,2,215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,215,215,215,2,2,2,2,215,2,2,215,2,2,215,215,215,215,215,215,215,2,2,215,215,215,2,2,215,215,215,215,2,215,215,215,215,215,215,215,215,215,215,215,215,215,215,2,215,215,215,215,215,215,215,2,215,215,215,215,215,215,215,215,215,2,215,215,215,2,2,2,215,215,215,215,2,215,215,215,2,2,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,2,2,215,215,215,215,215,215,2,2,2,2,2,2,2,215,2,2,215,215,2,2,2,2,2,2,2,2,2,2,2}, + {807,433,721,434,449,242,170,842,21,4,642,2,2,2,2,2,4,4,4,4,2,856,856,856,885,885,856,856,856,856,856,885,272,272,856,856,856,272,272,272,272,867,867,856,867,867,867,2,867,867,885,885,2,885,885,885,2,2,2,2,2,2,2,2,745,2,2,2,2,885,885,2,2,2,2,2,867,867,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,856,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,885,885,2,885,2,2,2,2,2,2,2,885,885,2,2,885,2,2,2,2,885,2,885,885,2,885,885,885,885,885,885,885,885,885,885,885,885,885,885,2,2,2,885,885,885,2,2,2,2,2,2,885,885,885,885,885,885,2,885,885,2,2,2,2,2,2,2,2,2,2}, + {755,612,235,265,369,855,414,362,478,518,518,2,2,64,16,8,32,4,16,8,8,1041,501,1041,2,2,64,16,8,8,16,270,526,526,526,943,135,135,135,943,571,571,627,135,892,892,627,223,526,526,2,1070,1070,1070,1070,1070,1070,1070,1070,435,435,439,205,205,205,474,474,367,367,367,367,367,367,295,295,295,135,135,571,270,571,627,763,763,492,132,1008,166,33,33,33,83,83,83,163,75,75,75,111,83,111,111,997,83,1008,1008,1008,1008,1008,1008,321,321,321,321,321,135,135,571,270,571,1070,295,295,435,435,435,439,205,205,205,474,474,367,367,367,367,367,367,367,367,295,295,75,295,295,295,1159,75,75,75,75,838,838,838,135,355,355,355,355,136,136,838,109,492,109,109,461,109,461,461,272,272,109,109,234,234,109,977,977,977,33,33,83,83,83,109,117,117,377,136,957,387,17,17,17,902,902,902,555,555,578,578,555,902,902,902,902,902,902,902,902,902,461,461,461,461,355,461,355,555,461,461,461,461,461,578,578,578,297,461,461,284,284,1022,1022,1022,373,284,373,373,373,373,238,710,284,280,280,941,280,280,941,941,388,284,280,941}, + {1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,642,642,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,642,642,2,2,2,2,642,642,642,642,2,642,642,642,642,642,642,642,642,642,2,642,642,642,2,2,642,642,642,642,642,642,642,642,2,642,2,642,642,642,642,2,642,642,642,642,642,642,2,2,2,2,2,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,2,2,642,642,642,2,642,642,2,642,455,2,2,2,2,2,642,642,642,642,642,642,642,642,642,642,2,642,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,642,2,2,642,2,347,347,2,2,2,2,2,2,347,347,347,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1017,568,930,1113,556,1299,114,881,690,475,641,2,2,2,779,779,103,2,528,2,2,2,2,2,2,528,528,2,2,910,910,2,2,2,2,2,2,103,2,2,2,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,103,103,2,2,2,2,2,910,910,910,910,910,910,910,910,910,910,2,2,528,528,528,2,528,528,528,528,528,103,103,103,2,528,528,2,2,2,2,103,103,103,2,103,103,287,287,287,528,528,287,287,287,2,2,2,287,287,528,103,103,103,103,103,103,2,103,103,103,103,910,910,910,2,2,2,2,103,103,103,103,103,528,528,528,287,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2,2,2,528,528,528,528,528,528}, + {814,473,286,752,476,779,420,569,742,164,490,2,2,2,793,812,812,812,2,812,812,2,2,526,526,812,526,2,2,2,526,526,2,2,2,411,411,411,411,2,2,812,812,812,812,812,812,526,526,526,526,526,526,526,2,2,526,526,526,526,526,526,526,526,526,526,526,526,526,2,2,2,2,2,2,2,2,2,2,2,526,526,526,526,526,2,526,526,526,2,2,2,2,2,2,2,2,2,2,2,2,411,411,411,2,2,2,2,2,526,2,2,2,2,2,526,526,812,2,812,812,487,411,2,411,411,487,2,2,2,2,2,2,2,411,411,2,411,411,526,526,2,526,526,526,2,2,2,2,2,2,2,2,2,2,526,2,2,2,2,2,2,526,2,2,2,2,2,2,2,2,2,526,2,411,151,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,526,2,2,2,2,2,2,2}, + {818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,785,785,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,785,2,2,2,2,2,2,2,2,2,2,2,785,785,785,785,785,785,2,785,785,785,785,2,2,2,2,785,785,255,255,785,785,785,785,785,785,785,785,785,785,785,2,785,785,2,785,785,2,2,2,2,785,785,785,785,785,785,785,785,785,785,785,785,785,785,255,255,255,785,785,785,785,785,2,785,785,785,785,785,785,785,255,2,255,785,785,785,785,785,785,2,785,785,785,785,255,255,255,255,255,255,255,255,2,785}, + {820,249,292,1017,1017,143,403,37,433,456,515,2,2,69,640,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,681,681,681,2,2,2,681,681,681,681,681,681,681,681,681,681,2,878,878,878,681,681,2,681,681,824,2,2,878,681,824,824,824,824,2,681,681,681,681,681,681,824,824,681,681,824,878,2,2,2,173,173,2,2,173,824,2,2,2,681,2,2,2,2,878,2,2,878,2,2,2,2,824,824,824,2,2,878,878,2,2,2,2,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,681,2,2,2,2,2,2,824,2,2,2,2,824,2,2,824,2,2,2,2,2,824,824,824,824,824,824,2,2,824,824,2,2,2,2,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824}, + {1078,527,589,244,170,892,827,606,1165,773,189,2,2,240,22,2,2,2,2,2,2,759,621,621,621,621,621,621,621,621,621,621,2,2,2,759,759,2,2,2,2,2,2,2,2,2,2,2,621,621,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,142,415,142,142,142,415,415,415,415,415,415,2,2,2,415,415,142,142,142,2,2,142,142,142,142,2,2,418,418,418,2,2,2,2,2,2,2,2,2,2,415,2,415,418,418,418,415,415,2,2,415,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418,2,2,2,2,2,2,2,2,2,621,2,2,2,2,415,415,415,2,2,2,2,2,2,621,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,1132,428,582,254,408,536,376,825,116,116,1266,1266,1266,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,474,474,2,2,2,2,2,2,2,2,2,2,2,2,2,2,227,227,227,227,227,227,474,474,227,474,2,775,775,775,775,775,775,775,775,775,227,227,2,474,474,474,474,227,2,2,2,474,227,227,227,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,2,2,474,474,775,474,474,474,474,474,474,474,227,227,534,534,227,227,474,474,474,474,590,1266,534,474,474,474,1266,1266,1266,1266,227,227,227,534,534,534,534,534,1266,1266,1266,202,227,1266,474,474,474,474,474,2,2,227,227,474,474,474,474,1266,474,1266,705,1266,1266,1266,1266,1266,1266,1266,1266,534,1266,1266,474,1266,227,227,705,227,227,227,2,2,2,2,2,2,2,1266,2,2,1266,1266,1266,1266,1266,1266,1266,1266,2,534,2,1266,1266,2,2,2,227,2,2,2,2,2,1266,2,2,534,534,2,2,227,474,474,227,227,227,2,2,474,2,534,534,1266,1266,1266,1266,2,1266,1266,474,474,474,2,474,474,474,202,202,202,2,2,2,2}, + {1062,268,389,1325,598,276,1270,48,572,439,302,2,544,609,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,158,2,2,2,2,2,2,2,2,158,158,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,158,158,158,2,2,2,158,158,158,2,2,2,158,158}, + {1065,517,247,1142,247,674,385,120,592,177,98,2,956,364,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,687,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,376,376,376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,687,2,2,2,2,2,2,275,275,275,275,687,687,687,2,376,376,376,2,687,376,687,687,2,2,376,376,376,2,687,687,687,376,376,376,376,2,376,376,376,376,376,376,376,2,2,2,2,2,2,376,376,376,376,687,376,687,687,687,687,2,376,2,376,687,376,376,376,376,376,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687}, + {635,503,594,203,456,1246,221,396,1151,178,66,2,781,587,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,938,938,938,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,339,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,190,2,2,2,2,2,2,2,2,339,2,339,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,114,2,2,2,2,2,2,2,2,2,2,2,2,339,339,339,339,2,339,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,339,2,2,2,2,2}, + {1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2,2,305,305,305,305,305,2,2,2,2,2,2,2,248,305,305,493,493,305,305,305,615,2,2,2,2,2,305,248,248,305,305,248,305,2,2,2,305,305,305,2,120,120,120,120,305,305,305,305,305,305,305,305,305,305,2,2,2,2,2,2,305,2,2,2,2,2,2,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,305,305,2,2,305,305,2,2,2,305,305,305,305,2,2,2,2,305,2,2,305,305,305,305,2,2,305,305,305,2,2,305,2,305,305,305,2,2,305,305,2,2,305,305,2,305,305,305,305,305,305,2,2,2,2,2,2,2,305,305,2,305,2,2,2,2,2,2,305,305,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,305,2,2,2,305,305,305,305,305,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,305,305,305,305,2,305}, + {830,397,932,519,818,113,367,694,88,535,535,414,343,175,2,2,2,2,2,2,2,2,2,2,414,864,2,2,864,864,864,864,864,864,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,1052,1024,95,95,95,307,307,760,760,144,222,414,222,165,165,864,864,2,864,864,864,864,864,864,864,222,222,222,864,864,864,98,864,864,144,144,144,144,864,864,144,864,864,864,864,864,222,864,864,222,864,165,165,165,165,134,222,27,27,725,592,725,476,134,134,725,725,105,864,476,476,476,476,310,222,222,144,144,144,310,144,144,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,72,165,165,165,144,144,144,144,144,144,144,72,630,86,9,9,9,144,222,222,310,310,310,144,81,627,222,222,222,630,630,98,98,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,98,98,165,165,165,165,98,165,165,165,165,165,165,165,660,374,1011,660,434,348,49,49,49,936,639,639,639,409,409,409,409,409,409,660,660,678,660,98,165,165,165,165,392}, + {793,463,329,730,390,551,968,92,511,470,424,563,672,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,652,652,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,548,548,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,652,2,2,2,2,652,652,652,2,652,2,2,2,652,652,2,2,652,652,652,652,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,652,652,2,2}, + {1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,390,2,390,390,2,2,390,390,390,390,390,2,2,2,390,390,390,2,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,2,2,390,390,2,2,2,390,390,390,390,2,390,390,390,390,390,390,2,390,390,390,390,390,390,390,390,2,390,390,390,637,637,390,390,390,390,390,390,390,390,390,390,390,390,390,390,887,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,2,2,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,2,2,2,2,2,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390}, + {1084,402,130,1077,276,154,1068,779,511,853,83,757,757,38,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,757,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,757,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,187,187,2,2,2,2,187,187,2,187,2,2,757,2,2,2,2,2,2,2,757,757,2,2,2,2,187,2,2,2,2}, + {1090,255,271,110,159,235,158,236,271,815,1300,416,416,416,2,2,416,416,2,2,2,399,791,791,2,791,2,2,2,2,791,791,2,2,2,100,100,100,100,100,100,2,4,791,2,4,2,4,2,2,2,256,98,98,98,802,802,802,802,802,175,175,175,175,175,2,2,389,802,2,389,389,389,389,389,389,389,389,10,10,389,389,389,389,389,389,2,389,389,389,389,389,2,4,389,389,389,389,389,389,7,7,791,98,98,98,802,802,4,354,802,98,98,175,175,506,506,506,506,389,2,389,389,399,389,389,306,306,306,265,306,306,306,306,389,389,265,265,265,265,265,140,140,140,140,140,389,389,265,140,140,2,2,791,98,98,265,265,268,268,268,268,268,268,268,268,306,268,265,265,265,265,265,265,389,265,265,389,389,389,389,389,389,1090,1020,265,306,306,306,306,643,862,389,389,389,389,320,10,10,40,70,5,5,5,594,134,268,134,140,591,591,140,389,389,389,713,469,713,245,245,245,265,265,265,265,265,265,245,265,265,265,265,265,1090,1090,1090,1090,1090,265,265,265,265,265,265,140,265,265,94,140,140,140,140,265,265,265,265}, + {1058,417,271,172,312,363,184,191,28,183,759,214,759,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,188,2,2,188,2,2,188,188,2,188,188,2,2,2,2,2,2,188,188,188,188,2,188,188,188,188,188,188,2,2,188,2,2,2,2,188,2,2,2,2,2,2,2,188,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,188,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,903,2,903,2,2,2,2,903,903,903,2,2,2,903,903,903,903,903,903,903,903,947,903,903,2,2,903,2,903,903,2,903,903,2,2,947,2,2,2,2,2,2,2,2,2,2,2,2,947,947,947,947,947,2,2,2,2,2,2,2,2,903,2,2,2,903,2,947,947,947,947,947,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,903,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,947,2,2,2,2,2,2,2,2,2,2,2,2,947,2,2,2,2,2,979,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,947,2,2,2,2,2,2}, + {1102,846,985,1085,764,124,764,51,874,612,478,801,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,561,561,561,2,2,2,2,38,2,2,2,2,38,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,38,38,38,38,38,38,38,2,2,38,38,38,38,2,2,38,38,38,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2,2,2,2,369,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,369,2,369,369,369,369,369,2,2,2,2,2,2,369,369,369,953,2,953,369,2,953,953,953,2,2,369,369,369,953,953,369,2,2,2,2,369,369,2,369,369,369,2,2,369,369,369,369,369,953,2,2,953,953,953,953,369,2,953,2,2,953,369,2,369,2,369,369,369,369,369,2,2,2,369,369,2,369,2,2,369,369,2,2,2,2,2,369,369,369,369,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,369,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {814,293,763,661,575,631,524,636,112,691,595,1103,405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,345,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,630,630,2,2,630,630,2,630,630,630,630,630,630,630,630,2,630,630,630,630,630,630,630,630,2,630,630,630,630,630,630,630,630,2,630,2,630,2,2,2,2,2,2,2,2,630,630,630,630,630,630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,630,2,2,2,2,2,2,2,2,2,2,630,630,630,2,630}, + {1106,662,258,190,1315,214,530,263,318,904,877,1317,318,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,40,40,2,2,2,2,2,2,2,2,2,2}, + {1206,469,299,1052,655,114,189,213,321,188,64,475,475,2,2,662,662,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,824,2,662,662,662,662,662,2,2,2,2,824,824,824,2,2,824,2,2,2,2,2,2,2,2,824,2,2,2,2,18,2,2,2,2,2,2,2,2,2,2,824,2,2,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2,824,824,824,824,824,824,2,824,824,2,2,2,2,2}, + {1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,213,213,213,213,213,2,2,2,2,2,2,2,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,2,28,28,213,213,213,213,2,2,28,28,28,28,28,2,213,213,213,213,28,28,28,213,213,213,213,28,28,28,28,28,28,28,28,2,28,28,213,382,382,382,382,382,213,213,382,382,382,382,382,213,213,213,213,213,28,28,213,28,28,28,28,28,28,28,270,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,213,28,270,28,270,270,270,270,270,270,270,270,270,270,28,28,270,28,270,270,220,28,28,2,2,28,28,28,28,28,28,28,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,2,270,270,270,270,2,270,270,270,270,270,270,270,270,270,2,2,270,270,270,270,270,270,270,270,270,270,270,270,270,270}, + {1076,596,553,545,79,727,881,121,298,169,639,368,695,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,115,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,849,2,849,849,849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,115,2,115,115,115,2,2,2,2,2,2,115,115,115,2,2,2,2,2,2,2,2,2,2,2,115,115,115,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,115,115,2,2,115,2,2,2,2,2,2,2,2,849,115,115,2,2,2,2,2,2,2,2,2,2,2,2,849,849,849,2,849,849,849,115,115,2,2,2,2,2,849,2,2,2,2,2,115,2,2,2,2,2,2,2,849,2,2,115,115,115,2,115,115,2,2,2,849,849,2,2,849,849,849,2,2,849,849,849,849,849,849,849,849,849,115,2,2,2,849,849,2,849,115,849,2,2,2,2,2,2,2,2,849,2,2,849,2,2,2}, + {1130,177,84,673,350,543,543,95,128,954,430,884,884,2,884,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,779,2,779,577,577,577,577,577,577,779,779,779,779,779,2,884,2,2,2,2,483,2,2,483,2,483,2,2,483,2,2,2,2,2,483,2,2,2,2,2,2,2,2,483,483,779,2,2,2,483,483,2,2,2,2,483,2,2,483,73,779,2,73,73,483,483,483,2,2,2,636,2,2,636,636,636,2,636,2,2,2,2,2,2,2,779,2,2,2,2,2,2,2,636,483,483,779,779,779,779,2,2,779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,884,2,2,2,2,2,2,2,2,2,2,2,2,2,779,2,2,2,2,2,2,2,2,483,483,2,2,2,636,636,2,779,636,779,779,779,779,2,779,636,2,2,2,2,636,636,636,636,779,483,779,779,2,2,515,515,515,515,636,779,779,779,779,779}, + {1222,412,430,707,691,746,131,607,311,607,112,217,912,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,412,412,412,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,2,412,2,2,2,2,2,2,412,2,412,412,2,2,412,412,2,2,412,2,2,412,2,2,2,2,2,2,2,2,2,2,2,2,2,412,412,412,412,412,412,2,412,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,412,412,412,2,2,412,412,412,2,412,412,412,412,412,412,412,412,2,2,2,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412}, + {820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2,2,2,2,200,200,200,200,200,200,2,2,2,200,2,2,2,253,2,2,2,2,2,612,253,2,2,2,2,2,2,2,2,253,253,2,2,2,2,2,2,200,200,2,2,2,2,2,253,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,200,200,200,200,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1096,1166,209,407,1127,400,974,322,428,906,631,134,171,2,2,2,2,664,664,664,2,2,2,2,2,2,2,2,2,2,2,2,2,664,664,664,664,553,553,553,2,553,553,553,553,553,553,2,2,553,553,2,2,2,2,553,553,664,664,664,664,553,664,664,664,664,664,664,664,673,673,2,2,383,383,553,553,664,925,383,925,2,664,925,925,925,383,553,929,929,929,553,553,664,664,664,664,553,553,925,553,2,553,664,664,664,664,664,664,664,664,2,2,2,673,673,673,673,925,925,925,925,383,383,673,2,673,673,673,2,2,553,2,2,2,2,2,2,2,2,2,2,2,2,664,664,2,2,73,73,73,73,73,73,73,73,73,2,925,925,925,664,2,925,664,2,925,925,2,925,2,2,383,383,383,925,2,2,1316,1316,2,925,925,925,383,925,925,925,2,2,2,925,925,925,925,664,2,925,925,925,925,664,925,925,664,2,2,383,383,925,383,383,2,2,2,2,383,664,2,925,925,925,925,925,925,2,925,2,2,2,2,2,2,2,664,664,2,2,664,2,664,664,2,925,925,925,925,664,2,2,2,2,2,2,664,664}, + {1091,946,437,51,527,802,597,639,587,645,510,586,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,168,2,2,2,2,2,2,168,168,2,2,512,286,4,4,168,168,168,168,168,168,2,2,2,256,239,64,128,128,374,374,21,21,84,875,239,128,2,2,343,343,343,343,343,343,343,2,2,343,343,343,343,168,168,343,343,343,343,2,875,378,378,875,343,343,343,343,343,343,343,168,168,168,168,375,375,375,2,2,256,239,64,566,343,343,343,343,343,343,875,343,343,343,343,343,343,343,343,343,378,343,2,875,875,875,875,875,343,343,343,893,343,875,875,875,875,875,343,893,343,343,343,343,893,966,966,966,966,262,262,1308,23,23,23,636,432,432,311,311,1178,622,1178,1178,1178,622,262,893,893,893,483,262,483,483,511,483,427,427,378,92,92,92,92,92,432,432,432,686,686,547,172,378,378,378,378,378,378,378,378,1066,378,1066,1066,875,7,7,7,7,7,7,7,7,7,7,7,378,378,378,378,378,875,875,378,343,343,343,343,343,343,343,343,547,547,343,547,378,378,378,378,378,378,378,378,172,378,378}, + {1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,393,393,2,2,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,862,2,862,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1103,276,174,408,233,170,955,108,530,354,585,38,677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,476,627,2,2,627,627,2,2,2,627,627,476,627,627,627,2,2,2,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,2,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,476,476,476,2,627,627,627,2,2,2,2,627,2,2,2,2,627,627,627,2,2,2,627,627,627,627,2,2,2,627,627,627,2,2,2,627,627,627,2,627,2,2,2,627,627,627,627,2,2,2,2,2,2,2,2,627,627,627,627,627,627,627,2,627,627,627,627,627,2,627,627,627,2,2,476,627,627,627,2,2,2,2,627,2,627,2,2,627,627,627,627,627,627,2,2,627,2,2,2,2,627,627,627,627,627,627,627,627,627,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,627,2,2,2,2,2,2,2,2,2,627,2,2,2,627,627,2,2,2,627,627,627,627,2,476,627,627,627,627,627,627}, + {1167,478,1169,1053,563,371,108,772,413,497,1338,991,660,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2,2,2,729,2,2,2,2,2,2,2,729,2,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81,81,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,729,729,2,729,729,2,729,2,2,729,729,2,729,729,2,2,729}, + {1108,437,1160,324,868,686,361,399,786,1161,1161,707,731,731,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,731,2,2,2,731,731,731,731,731,2,731,731,731,731,2,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,2,731,731,731,731,731,731,2,731,731,2,731,731,731,731,731,731,731,731,731,2,2,2,2,2,731,731,731,731,731,2,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,2,2,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,2,2,2,2,2,2,731,2,2,731,731,2,2,2,2,2,2,2,2,2,2,2}, + {1116,331,280,422,1109,341,570,243,849,241,566,61,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,207,2,2,2,2,2,2,2,2,2,2,55,2,2,2,2,2,2,2,2,2,2,2,2,545,545,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1099,1187,300,240,268,413,1366,634,184,768,773,365,783,224,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,845,845,845,224,2,2,39,39,224,39,39,2,2,2,2,2,224,224,2,224,224,224,2,224,2,224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,224,224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,2,2,2,2,224,224,224,2,2,224,2,224,2,224,2,2,224,224,2,2,2,2,2,2,2,2,2,224,2,2}, + {1158,945,300,1115,205,495,435,302,187,774,774,843,843,284,284,2,2,2,2,909,933,933,933,2,2,909,909,2,2,2,2,909,909,909,909,933,2,2,933,933,2,2,909,2,2,2,2,2,909,2,2,2,2,2,2,909,909,909,909,909,2,2,2,2,2,933,2,2,2,2,933,933,2,2,2,2,933,2,933,2,2,2,2,2,2,2,2,2,2,2,933,933,933,933,933,2,2,2,933,933,933,933,933,2,2,933,2,2,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,2,2,2,933,933,933,2,933,2,2,933,2,2,2,2,507,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,933,2,2,933,933,933,933,933,933,909,933,909,909,933,933,933,2,933,933,933,933,933,933,933,2,2,2,933,933,933,933,933,933,2,933,933,2,933,933,933,933,933,933,933,933,933,2,2,933,933,933,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,2,2,2,2,2,2,2}, + {904,660,1283,46,33,124,416,218,152,970,1241,305,307,307,307,260,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,424,424,2,424,424,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,254,894,2,2,2,2,2,2,894,894,894,894,2,2,2,2,2,160,857,857,414,414,414,894,894,894,894,894,894,894,894,894,894,894,424,424,424,894,424,424,424,424,424,424,424,262,262,262,262,262,262,262,262,894,894,894,424,2,2,894,894,894,424,894,894,894,894,894,894,894,424,262,894,894,894,894,262,424,262,262,262,262,262,262,262,262,894,894,894,894,894,424,424,262,262,262,262,262,262,894,894,894,262,262,142,142,894,894,894,894,894,894,894,894,894,894,424,2,2,160,424,424,424,142,142,142,142,142,142,262,262,262,262,894,894,424,894,894,894,894,894,894,254,254,254,142,254,254,142,424,894,894,894,894,894,894,894,894,894,894,894,894,142,424,262,254,262,262,262,262,262}, + {1127,553,287,58,739,99,514,739,766,42,580,241,598,598,936,936,936,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,629,2,2,2,2,629,2,629,2,2,2,2,2,629,2,2,629,629,629,2,2,629,629,2,629,2,2,629,629,2,2,629,629,629,629,629,629,629,2,2,2,629,2,2,629,2,2,2,2,2,2,629,629,2,2,2,2,2,2,2,2,629,2,2,2,2,2,2,2,2,2,629,629,629,629,629,629,629,629,629,629,2,2,629,629,629,629,629,629,629,629,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,884,884,884,884,884,884,884,884,884,884,884,884,884,884,884,884,884,884,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,629,629,629,629,2,2,2,629,629,202,202,202,202,202,2,629,629,629,629,629,629,629,629,629,629,629,2,629,629,629,629,629,629,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,202,202,202}, + {1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847,2,2,2,847,847,847,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,847,847,2,847,2,2,2,2,2,2,2,2,847,847,2,2,2,2,2,2,2,2,2,2,2,2,2,847,847,2,2,2,2,2,847,2,2,2,847,2,2,2,847,847,2,2,847,847,847,847,847,2,847,847,847,2,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,2,2,2,2,2,2,847,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1140,814,528,677,84,1192,305,637,335,451,103,325,77,969,2,651,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1106,1106,1106,1106,1106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,2,2,2,2,2,2,2,2,2,2,1106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,651,68,68,68,2,2,2,2,68,2,68,68,2,2,2,2,2,2,2,2,2,68,68,2,2,2,2,2,2,2,2,68,68,2,2,2,68,68,68,68,68,68,68,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1297,600,419,985,846,493,186,109,147,239,197,762,762,327,327,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,553,553,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,995,2,553,553,553,553,2,995,995,2,995,2,2,995,995,995,995,2,2,2,2,2,2,995,2,2,2,995,2,995,995,995,995,2,995,2,2,2,995,995,995,995,995,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,995,995,995,995,995,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,2,995,995,2,995,2}, + {1181,615,482,653,238,130,313,506,98,1314,730,730,730,730,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,897,897,388,521,521,1135,1135,494,494,494,494,494,535,494,535,494,2,2,2,364,2,2,2,2,2,2,2,2,2,2,2,2,308,2}, + {921,613,628,1288,111,150,191,233,633,83,387,602,105,394,2,2,2,2,2,2,2,351,2,2,351,351,351,2,2,2,351,351,351,351,2,2,2,2,2,2,2,2,2,351,351,2,2,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,351,2,2,2,2,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,351,2,2,2,2,2,2,2,2,2,2,351,351,2,2,2,2,2,2,2,351,2,2,2,2,351,351,351,2,2,2,2,2,2,2,2,388,351,351,2,2,2,2,2,2,2,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,351,351,351,2,2,2,2,351,351,2,2,351,351,351,351,2,2,2,388,351,351,351,351,351,351,351,351,2,2,351,2,351,351,351,351,351,351,351,2,351,351,351,351,351,2,351,2,2,351,2,351,2,351,2,2,2,2,351,351,351,2,2,2,2,2,2,2,2,351,351,351,351,351,2,351,351,2,2,351,2,351,351,2,351,351,351,2,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953,383,953,383,383,383,2,2,953,383,383,395,395,395,395,2,383,576,953,953,953,953,2,383,383,2,2,383,383,383,235,235,235,235,235,235,161,161,161,40,40,2,953,235,235,2,2,128,32,32,128,205,953,953,953,953,205,205,205,205,205,2,2,953,953,953,953,953,953,235,953,953,953,953,383,383,383,383,953,383,383,383,383,953,953,953,953,383,953,953,953,205,205,205,953,37,37,953,953,953,953,953,953,235,235,953,953,953,953,953,953,953,953,383,383,953,383,383,383,438,438,424,53,53,53,228,228,228,228,228,228,449,449,449,57,57,57,167,1066,1066,576,576,576,235,235,235,953,576,953,576,576,576,576,198,198,953,953,953,953,953,198,235,235,235,576,576,576,576,576,576,576,576,198,576,576,576,576,161,161,161,161,161,161,161,383,576,198,953,953,953,576,576,576,235,235,235,235,235,235,235,198,161,161,161,161,161,161,161,161,161,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235}, + {1160,617,505,1205,374,906,23,408,194,91,91,91,585,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,421,2,421,421,421,2,2,2,421,421,2,2,2,2,2,2,421,2,2,2,2,2,2,2,2,421,421,421,421,421,421,421,2,2,2,2,2,421,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,421,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1203,1101,497,352,254,309,464,123,607,1080,265,1145,1145,1145,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,520,2,2,2,2,2,2,2,2,2,2,2,520,520,2,2,2,2,2,2,2,520,520,2,2,2,376,376,2,2,376,376,376,376,376,376,376,520,376,376,376,376,376,376,376,376,376,2,2,2,376,376,376,2,2,2,2,284,2,2,2,520}, + {1210,656,1026,782,802,442,1319,734,794,165,165,796,93,796,2,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,829,2,2,2,2,2,2,2,2,829,829,829,2,2,2,2,829,829,829,829,829,829,370,829,829,2,2,2,829,829,829,829,829,829,829,829,829,829,829,829,2,2,2,829,829,2,2,829,829,2,2,829,829,829,829,2,370,370,370,370,370,2,2,370,370,2,829,829,829,829,2,2,2,2,2,829,829,829,829,641,641,641,370,2,829,370,829,829,829,829,829,829,370,829,829,641,370,370,370,370,65,65,65,65,65,65,370,370,829,829,829,641,641,829,829,2,829,641,2,2,829,829,829,370,370,370,370,370,641,641,641,641,2,2,641,370,370,370,370,2,2,2,370,370,2,370,829,829,829,829,829,829,641,641,370,2,370,641,2,2,2,2,2,2,2,829,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,370,641,641,641,641,2,370,370,2,370,370,370,370,2,2,370,641,641,641,641,641,641,641,641,641}, + {963,646,721,1161,219,667,1088,485,692,692,663,535,553,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2,686,686,2,2,553,2,2,2,2,2,2,2,2,2,2,553,553,553,553,553,2,2,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,553,553,553,2,2,2,2,2,2,2,2,686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,553,553,2,553,2,2,2,2,2,2,2,2,553,553,553,553,553,2,2,2,2,1158,686,553,553,2,2,2,2,2,2,2,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,2,2,2,2,2,2,2,2,2,686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {966,590,140,297,189,844,633,12,847,742,742,244,281,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1475,1475,1475,1475,1475,1475,1475,1475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1208,1208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,76,76,76,2,2,2,2,2,2,2,2,2,2,1208,2,2,2,2,76,76,76,2,1208,1208,2,1208,1208,2,76}, + {941,231,1038,309,173,770,413,560,855,660,721,1103,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,2,2,2,2,2,2,2,2,174,174,174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,174,174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,570,570,570,570,2,174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,174,174,174,174,174,174,2,2,174,174,174,174,174,174,174,174,570,570,2,174,174,174,174,174,174,2,2,2,2,2,2,2,570,570,2,2,2,2,2,2,2,2,174,174,174,2,174,174,174,174,174,570,570,174,174,174,174,174,174,174,174,174,174,174,174,570,570,570,174,570,570,174,174,2,2,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,570,570,570,174,174,174,570,174,174,174,174,174,174,174,174,174,174,174,174,2,2,570,570,174,174}, + {1213,305,656,983,1399,1196,692,986,9,339,754,308,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1037,2,2,2,2,2,2,2,2,2,2,2,2,2,1037,1037,1037,1037,1037,2,2,2,2,128,128,512,1430,643,8,8,543,429,2,2,429,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1037,2,2,2,2,2,2,2,2,2,2,2,2,2,1037,1037,1057,1057,1057,2,2,2,2,482,482,512,512,1430,8,8,8,2,2,2,429,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1037,2,2,2,2,2,2,2,2,2,2,2,2,8,8,8,1057,1057,2,2,2,2,2,482,482,512,512,512,8,8,8,2,2,2,429,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,755,755,755,755,755,29,29,29,755,755,755,755,2,755,755,65,65,65,65,65,65,65,65,65,65,65,2,2,482,482,512,512,512,512,8,755,755,755,67,67,67,67,67,67,67,67,67,67,755,680,42,755,755,755,755,755,755,755,755,755,755,755,828,755}, + {972,768,1109,523,642,546,1452,29,1296,13,813,813,2,1496,2,2,2,2,2,2,2,165,165,165,165,165,165,2,2,2,2,544,165,2,2,2,2,2,2,2,2,2,2,2,165,165,2,2,2,2,2,79,79,544,544,544,165,165,165,2,2,2,2,544,544,544,544,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,165,165,165,165,165,165,165,2,2,2,2,2,2,165,165,2,561,2,2,2,2,2,2,165,165,544,2,544,2,2,2,544,544,544,2,2,2,2,2,2,2,2,2,2,544,544,884,884,544,544,544,544,544,544,544,2,2,544,544,544,561,165,165,544,544,544,544,544,544,544,544,165,165,561,544,561,561,561,561,165,544,544,544,561,561,165,544,544,544,544,544,544,544,544,544,544,79,79,79,79,79,79,79,79,79,79,79,544,544,544,165,165,165,165,165,544,544,544,544,544,544,544,544,544,561,544,544,544,544,544,544,544,544,165,165,165,544,544,544,544,544,544,544,544,561,561,561,561,561,561,561,561,561,561,544,544,544,544,544,544,544,544}, + {1330,671,528,831,1426,735,33,425,364,119,363,978,2,761,483,476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,2,2,2,2,2,2,999,2,1043,2,2,1043,2,2,2,2,2,2,999,999,999,2,2,2,2,999,999,999,2,999,999,2,999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,999,2,999,999,999,999,999,999,999,2,999,2,2,999,999,2,2,2,2,999,999,999,999,999,999,999,999,999,999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,999,999,999,999,999,999,999,999,999,2,2,2,2,2,2,2,2,999,999,2,2,2,2,999,2,2,2,2,2,2,2,2,999,999,999,999,999,2,2,2,2,2,2,2,2,2,2,2,2,999,2,999,999,999,999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,2,2,999,999,999,999,999,2,999,999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,999,2,2,2,2,2,2,2,2,2,2,2}, + {1188,217,838,237,379,202,785,949,479,169,348,872,2,872,872,2,2,2,2,2,2,1028,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1028,1028,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2,2,2,2,2,2,2,2,2,395,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,395,2,2,2,1028,1028,1028,395,2,2,866,866,866,866,2,395,2,2,2,2,207,207,207,395,395,207,207,2,2,2,207,207,207,207,207,207,2,207,2,2,2,2,2,2,2,2,2,2,2,866,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1190,286,513,881,390,215,387,130,749,554,1110,519,160,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,401,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,365,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,666,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,666,2,2,2,666,2,2,2,2}, + {893,560,132,1420,721,191,568,799,412,22,322,93,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,57,57,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {987,774,678,175,145,264,588,97,1308,6,828,1129,2,2,2,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {955,980,753,96,574,259,1327,556,342,1415,1036,1036,478,478,478,478,507,2,2,2,2,151,2,2,317,2,2,2,2,2,595,595,317,800,800,151,151,151,151,2,2,2,151,151,151,151,151,2,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,151,151,2,800,800,800,800,800,2,2,2,674,674,2,2,2,2,800,800,800,800,800,800,800,237,2,2,237,237,151,151,151,151,151,151,151,800,2,317,317,2,800,800,2,800}, + {882,1038,211,110,942,337,1305,1225,661,183,381,381,2,2,2,2,347,2,2,2,2,2,2,2,600,431,431,431,431,431,431,431,431,2,2,431,431,2,2,2,2,431,431,431,2,2,2,431,600,2,2,2,2,137,137,137,137,137,137,137,137,2,431,431,600,2,431,431,600,431,2,600,431,431,431,431,463,463,600,600,600,431,600,431,431,2,431,431,170,431,431,431,431,431,431,431,431,2,600,431,431,431,431,600,431,431,431,431,431,431,1329,431,431,431,431,431,431,431,431,431,600,600,600,600,600,600,431,431,465,465,465,431,431,600,600,600,600,600,600,600,600,600,600,600,600,600,463,431,431,431,431,431,431,431,431,600,600,2,600,600,600,600,431,431,431,431,2,600,463,600,600,600,431,431,431,431,600,600,600,431,431,2,170,600,431,600,431,600,431,600,431,600,600,600,600,431,431,431,431,431,431,431,431,600,600,600,600,600,600,600,600,463,463,463,463,463,463,2,2,600,600,600,600,600,600,600,600,170,600,600,600,431,431,431,600,2,600,431,431,431,431,600,431,2,2,600,463,463,463,431,431,463,600,600,600,600}, + {1208,486,343,725,677,1204,135,139,924,170,1111,317,2,2,2,2,202,706,202,107,107,107,2,2,706,706,107,107,2,2,2,706,706,2,706,706,2,2,2,706,706,2,706,706,673,673,2,2,2,2,2,2,2,2,2,2,2,2,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,673,2,2,164,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,706,706,107,107,164,164,706,343,2,2,164,2,2,673,673,673,164,107,164,164,2,164,164,164,2,2,2,2,107,107,2,2,2,2,2,2,2,2,2,2,2,2,107,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,107,107,107,2,2,2,107,107,2,2,107,107,107,107,107,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1259,1017,456,298,443,838,137,744,551,334,36,951,2,2,2,699,718,2,2,984,2,2,2,2,2,2,984,984,2,2,2,2,2,2,2,2,984,2,984,2,2,2,984,984,2,2,2,984,2,984,2,2,2,984,2,2,2,2,2,2,2,2,2,2,2,984,2,2,984,984,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,121,2,984,984,2,2,2,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,984,2,2,2,2,2,2,2,121,121,2,984,984,984,236,236,2,2,2,2,2,2,984,2,2,2,2,121,2,2,2,2,121,121,121,121,2,2,2,2,2,2,2,2,121,121,121,121,984,984,984,984,984,2,121,121,121,121,121,121,121,984,984,984,121,121,121,121,121,121,121,121,2,2,121,121,121,121,121,121,121}, + {1212,1186,641,284,565,636,895,82,690,117,184,184,2,2,2,397,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,902,902,902,902,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,370,132,635,381,47,537,179,1192,301,1282,33,2,2,2,1553,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,307,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2,2,2,2,2,2,2,307,2,2,2,2,307,2,307,307,2,2,2,2,2,2,2,2,307,307,307,2,2,307,307,307,307,307,307,307,307,2,2,2,2,2,2,2,2,307,307,307,307,2,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,307,307,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,307,314}, + {1223,433,252,572,424,82,221,107,382,430,203,461,2,915,362,964,2,2,964,2,2,2,2,2,964,964,964,964,964,485,485,485,485,485,485,2,2,964,964,485,485,485,485,485,485,2,2,485,2,2,2,2,2,2,485,485,485,485,167,2,434,2,2,2,2,964,964,2,2,2,2,485,485,2,2,167,2,2,2,2,2,2,434,2,938,938,938,2,2,2,2,485,2,2,2,2,2,2,2,2,2,2,2,2,485,485,485,485,485,485,485,2,2,2,2,2,167,167,167,167,167,167,167,167,167,167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,434,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2,2,2,2,2,731,731,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,731,731,2,2,2,731,2,2,2,2,2,2,2,2,2,2,2,2,2,731,731,731,731,731,2,731,731,731,731,731,2,2,2,2,731,731,731,731,731,731,731,731,2,2,731,731,731,731,731,731,2,731,731,731,45,731,2,731,2,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,2,2,731,731,2,731,2,2,2,2,2,2,2,2,2,731,731,731,731,731,2,2,731,2,2,2,731,731,2,731,2,2,731,731,731,731,731,731,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,731,2,731,2,731,731,2,2,2,2,2,2,2,2,2,2,2,2,731,731,2,731,731,731,731,731,731,731,731,731,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,731,731,731,731,731,731,731}, + {1220,410,1193,352,260,434,469,41,1090,961,961,728,2,2,330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,261,261,261,261,2,261,261,2,261,261,2,261,261,261,261,2,261,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,261,261,261,261,2,2,261,261,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,261,261,2,261,2,2,2,2,2,2,2,2,2,261,2,2,2,2,2,2,2,2,261,261,2,261,261,261,2,2,261,2,261,261,2,2,2,261,261,261,261,261,2,261,2,2,261,2,2,2,261,2,2,2,261,2,2,2,261,261,261,261,2,261,261,261,261,261}, + {898,1043,391,1289,29,830,184,321,1136,85,1133,1082,864,864,2,2,2,2,2,2,2,2,789,789,2,789,789,2,2,789,789,2,381,381,381,2,2,2,709,709,709,709,789,789,2,789,709,709,709,709,2,789,789,789,709,789,789,709,709,709,709,381,381,381,381,709,709,789,789,2,2,2,709,709,709,789,789,2,2,2,2,2,2,2,2,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,2,2,709,709,2,2,2,2,2,2,2,2,2,2,2,709,2,2,709,709,709,709,709,789,709,709,2,2,2,2,789,2,2,789,789,2,2,2,789,789,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,2,789,789,789,789,789,789,789,789,789,789,789,2,789,789,789,789,2,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789}, + {1223,434,851,152,140,1495,190,397,925,37,1080,430,2,2,204,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,982,2,982,2,2,2,2,2,2,2,2,2,2,2,982,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,486,486,486,486,982,486,486,2,2,486,486,486,2,2,2,2,2,2,2,744,2,2,2,128,128,441,441,441,710,710,710,710,364,486,486,2,982,982,982,982,982,278,278,2,486,2,2,2,332,2,2,332,278,2,2,2,2,278,278,2,278,486,486,486,486,332,332,2,2,2,332,332,332,278,278,332,278,278,278,278,278,332,486,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,278,486,486,278,332,486,486,486,332,486,332,332,486,486,486,486,486,486,332,332,332,332,332,278,332,278,2,2,128,486,486,486,486,486,278,332,278,278,278,486,278,486,486,486,486,332,332,332,332,332,332,486,486,278,278,278,278,278,486,486,278,486}, + {989,1043,184,232,64,403,284,745,171,171,995,223,380,380,1400,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,874,874,2,2,2,874,874,2,2,874,874,2,874,2,874,2,874,874,2,2,2,2,2,2,874,874,2,2,2,2,874,874,874,2,2,874,874,874,874,874,874,874,874,874,874,874,874,874,874,2,2,874,2,2,2,874,874,874,874,874,874,874,874,874,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,446,446,2,874,874,874,874,874,2,2,874,874,2,874,874,874,874,874,874,874,874,874,874,874,874,874,874,2,2,2,2,2,874,874,874,874,874,874,2,874,874,2,2,2,91,91,2}, + {939,1070,1288,254,973,901,321,109,568,713,336,988,2,946,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,235,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1226,1226,1226,1226,1226,2,1226,1226,1226,1226,2,2,2,2,2,1226,1226,2,1226,1226,1226,1226,1226,1226,1226,1226,1226,2,2,1226,1226,1226,1226,1226,1226,1226,1226,1226,1226,1226,2,2,2,1226,2,2,2,1226,1226}, + {1276,636,569,258,325,675,342,85,88,579,833,833,833,833,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1203,1203,2,2,2,2,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,520,2,2,520,2,2,520,520,520,520,520,520,520,520,520,520,520,520,520,520,2,2,520,520,520,2,2,1203,520,520,520,520,2,2,2,1203,1203,2,1203,1203,1203,1203,448,448,448,448,1203,1203,520,1203,520,2,2,520,1203,1203,1203,1203,1203,1203,1203,1203,2,2,2,2,2,2,2,2,2,2,1203,2,2,1203,1203,1203,1203,1203,1203,2,2,2,1203,1203,2,2,2,2,2,520,2,2,1203,1203,2,1203,1203,2,2,2,2,2,2,1203,1203,1203,1203,1203,1203,2,2,2,1203,1203,2,1203,1203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,508,815,214,206,602,448,685,446,572,1549,8,1047,1047,1047,2,2,2,2,2,2,2,363,502,2,2,71,363,2,2,363,363,71,71,71,71,71,71,71,71,71,71,2,832,363,363,363,363,363,2,2,2,2,2,2,2,2,502,363,1433,2,2,2,71,71,832,502,502,832,832,832,832,832,832,502,832,502,2,502,502,502,71,2,2,392,392,392,28,28,28,448,363,363,502,363,363,363,363,363,2,2,363,363,71,502,363,502,502,502,502,502,363,363,363,1342,502,502,502,502,502,502,502,41,71,71,71,1156,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,982,982,982,982,982,982,982,502,502,502,41,41,71,568,527,235,235,235,502,502,502,502,502,502,502,502,982,982,982,982,982,982,982,982,1342,982,982,982,982,982,982,1342,1342,982,982,982,982,982,982,982,982,982,982,502,502,502,982,982,982,982,982,982,982,982,982,982,982,982,982,982,913,913,913,913,913,913,502,502,502,982,982,982,913,913,982,982,982,982,982,982,502,502,502,502,982,502,502,502,502,502}, + {1288,1398,789,514,151,600,1618,1194,1419,441,234,204,1191,438,828,2,857,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1110,1110,1110,2,2,2,2,2,2,2,2,1573,2,2,2,2,2,2,1110,2,1110,1110,2,2,2,2,2,2,1110,1110,2,2,2,1110,1110,1110,1110,1110,2,2,2,2,2,2,1110,1110,2,2,2,1110,1110,2,1110,2,2,2,1110,1110,1110,2,2,2,2,2,1110,1110,1110,2,2,1110,1110,1110,2,2,2,2,2,2,1110,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1110,1110,1110,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1110,2,2,2,2,2,2,2,1110,1110,1110,2,1110,1110,1110,1110,1110,1110,1110,2,1110,1110,1110,1110,1110,1110,1110,2,2,2,2,2,2,2,1110,2,2,1110,1110,1110,1110,2,1110,2,2,2,2,2,2,2,1110,1110,1110,1110,1110,1110,2,2}, + {1002,342,1045,757,1008,979,322,240,1211,171,552,123,2,129,129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,15,15,15,15,15,2,2,2,2,2,2,2,2,2,2,2,309,2,2,2,2,2,882,2,2,2,2,2,2,2,2,2,2,2,2,2,309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,294,294,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1401,402,525,293,97,223,452,808,61,169,1023,1023,886,886,1023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,85,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1019,2,1019,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,773,2,2,2,1128,235,825,228,825,545,228,1202,1202,1202,1202,436,436,436}, + {1001,644,263,164,136,939,624,95,489,1023,1107,331,331,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,505,2,700,2,2,2,2,2,2,2,2,2,2,700,2,700,700,700,2,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,700,700,700,700,2,2,700,2,2,2,2,2,2,2,2,2,700,2,2,700,2,2,2,700,700,700,700,700,700,2,2,2,4,32,2,2,2,1107,376,376,94,376,201,201,201,201,418,726,201,726,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,700,2,2,74,74,2,2,2,2,700,353,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,700,74,223,223,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,2,2,1107,376,376,376,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378}, + {1011,475,845,532,567,951,663,295,877,1275,227,39,618,683,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,933,2,2,933,933,2,933,933,933,933,933,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,933,2,2,933,933,2,2,2,933,933,2,933,933,2,933,933,2,2,933,2,2,2,2,933,2,2,933,2,2,2,2,2,933,1393,1393,1393,933,933,933,933,933,933,933,933,933,933,2,2,933,933,933,2,933,933,933,933,2,933,933,933,933,933,933,933,2,933,933,933,933,933,933,933,933,933,933,933,2,933,2,933,2,2,933,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,933,2,2,2,2,2,2,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933}, + {1401,741,509,797,47,157,1256,482,1513,899,736,780,780,210,2,2,2,2,783,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1047,880,369,402,641,446,639,586,277,396,419,275,825,820,2,2,2,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,238,2,2,2,281,2,2,281,2,2,2,2,281,281,281,281,281,281,221,221,221,221,221,221,281,2,281,281,281,281,281,281,281,238,281,238,281,2,2,281,281,281,281,281,2,281,281,281,281,281,281,2,2,281,281,281,281,281,281,238,238,238,238,238,238,238,238,238,2,2,2,2,281,2,2,2,2,2,2,281,281,238,238,2,2,2,281,281,2,2,2,2,281,281,2,2,2,2,2,2,281,281,281,2,2,2,238,2,2,2,2,2,281,2,2,2,281,281,281,281,281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,281,281,2,238,2,2,2,2,2,2,2,281,281,2,281,281,281,2,281,281,2,2,2,2,2,2,2,281,281,2,2,2,281,281,281,281,281,281,281,281,2,2,2,2,2,2,2,2,2,281,281,820,281,2,820}, + {1273,701,831,1294,1580,137,162,415,563,11,92,116,116,116,2,2,2,2,2,2,1029,1029,1029,504,504,877,877,877,877,877,1029,1029,1029,1029,1029,1029,504,504,504,504,504,442,356,356,148,442,442,442,442,442,442,442,442,442,442,442,504,356,442,2,504,504,356,356,356,356,504,356,365,504,504,148,148,2,2,42,2,42,42,42,1346,1346,1346,2,2,2,2,442,442,877,1029,365,119,442,1029,2,1029,1029,365,2,2,2,1029,1029,2,2,504,504,504,1303,890,890,1029,1029,1029,877,877,1029,1029,1029,877,877,877,2,2,877,410,504,2,877,504,504,877,2,877,877,877,877,442,877,877,1029,877,877,877,1029,877,877,1029,877,877,877,877,877,1029,1029,1029,1029,1029,1029,877,1029,2,2,1029,877,877,1029,877,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,877,877,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,2,1029,1029,1029,1029,1029,1029,1029,442,2,2,2,442,1029,1029,2,1029,442,1029,1029,2,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,2,2,1029,1029,1029,365,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029}, + {1335,400,315,412,172,125,568,1024,58,601,398,985,640,577,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,195,195,195,2,2,195,195,2,2,2,195,195,2,2,195,195,195,195,804,195,195,195,110,110,110,110,195,195,2,195,195,110,2,2,2,2,2,2,110,2,110,2,2,195,195,110,195,195,195,195,2,2,2,2,804,804,804,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1453,947,486,485,453,415,1164,684,504,605,422,998,727,727,2,2,2,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1136,2,2,2,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1136,2,2,2,2,2,2,1136,2,2,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1136,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,1198,146,529,284,1286,160,135,75,686,648,1425,821,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,2,2,2,2,2,2,2,2,587,587,299,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,587,2,2,2,2,2,2,587,2,2,2,2,587,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,587,587,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,2,2,2,2,299,587,2,2}, + {1052,442,936,64,132,1378,1323,161,161,161,230,131,12,12,2,2,2,2,2,2,2,2,2,2,2,998,998,998,998,2,2,2,2,2,2,2,2,2,2,2,515,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,515,515,2,2,2,515,515,515,515,515,515,2,515,449,449,515,515,2,611,611,2,2,2,2,515,2,2,515,2,2,2,2,2,2,2,2,2,515,515,2,2,2,2,2,2,2,2,2,2,2,515,515,2,515,2,2,515,515,515,2,2,515,515,515,515,515,2,515,515,515,2,2,2,2,2,2,2,2,515,515,2,2,515,515,515,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,515,2,515,2,2,2,515,515,515,515,611,2,2,2,515,515,611,515,611,515,449,2,2,515,515,2,2,2,515,515,515,515,515,515,515,515,515,515,515,515,515,515,611,611,611,611,611,611,449,515,449,2,611,2,611,611,611,515,515,515,515,449,449,611,611,449,449,449,449,449,449,449,449,449,449,2,449,449,611,449,515,449,449,449,449,449,449,449,2,611,611,611,449,449}, + {1422,838,234,554,736,243,344,526,1108,33,1303,699,249,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1279,681,423,813,806,269,412,420,985,485,761,1013,649,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,796,796,2,2,2,2,2,2,796,796,796,796,796,2,796,796,796,796,2,796,796,796,796,2,796,796,796,796,796,796,796,796,2,2,2,796,796,796,796,796,796,796,796,796,796,796,2,2,796,796,796,796,796,1332,2,2,2,796,796,796,796,796,796,796,1332,1332,796,796,796,796,796,796,796,796,796,796,796,796,796,2,2,513,513,513,1332,2,513,796,513,1332,796,513,513,513,513,513,513,796,796,1332,1332,796,513,796,796,796,796,796,796,796,796,796,796,796,796,796,2,796,796,796,796,198,796,796,796,796,796,796,513,513,513,796,796,796,796,796,513,796,1332,2,796,2,1332,1332,1332,1332,796,796,796,796,796,2,796,796,796,796,796,796,796,796,2,796,796,796,796,796,796,796,796,796,796,2,796,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1332,2,2,2,2,2,2,2,2,2}, + {938,614,523,557,898,624,178,461,287,985,371,371,260,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,593,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,593,593,593,593,593,593,593,2,2,593}, + {1335,834,652,528,536,523,497,60,173,777,238,59,4,59,4,8,2,2,2,559,559,559,559,559,559,559,2,2,559,559,559,2,2,559,559,559,559,559,559,559,2,2,2,2,2,559,559,559,2,2,2,2,559,2,2,2,2,2,2,2,559,559,559,559,2,2,2,2,559,2,2,2,2,2,559,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,559,2,559,2,2,2,2,2,2,2,2,2,2,2,2,2,2,559,559,559,559,559,559,559,559,559,559,559,559,2,559,559,559,559,559,2,559,559,559,559,2,2,2,559,559,559,559,559,2,559,559,2,2,2,559,559,2,559,2,2,559,559,2,559,2,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559}, + {1040,998,324,93,887,497,1326,443,152,1193,595,80,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,221,221,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,2,1420,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,2,1420,1420,1420,1420,1420,2,1420,1420,2,1420,1420,1420,1420,1420,1420}, + {1302,1116,283,1006,891,838,768,373,468,968,1178,1178,1269,1269,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,663,663,2,2,2,2,2,2,2,2,2,2,2,2,2,663,663,663,2,2,2,2,2,663,663,663,663,663,663,663,663,663,663,663,663,663,663,42,663,663,663,663,42,663,663,663,663,663,42,42,42,42,663,663,663,42,663,663,663,42,42,42,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,42,663,663,2,2,42,663,663,663,2,663,663,663,663,663,663,663,663,663,663,663,2,2,663,663,663,1153,1153,1153,1153,1153,1153,2,2,2,2,2,2,663,663,663,2,2,2,2,2,2,2,2,2,663,2,2,2,2,2,2,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,2,2,663,663,663,663,42}, + {1027,1128,114,395,357,417,848,22,389,1257,734,838,838,301,900,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,821,2,2,2,2,2,2,2,821,2,821,821,2,2,2,2,511,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,42,42,2,2,2,2,2,2,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,821,600,600,600,600,600,2,2,821,2,821,821,821,2,821,821,2,2,2,233,2,821,821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,821,821,821,821,821,821,821,821,821,821,233,2,2,821,821,821,821,821,233,2,2,2,2,2,233,2,233,233}, + {1072,724,717,877,873,369,1031,698,917,1641,1641,1641,53,549,549,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,201,201,201,201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {987,1243,424,240,53,1150,558,292,1107,574,814,1474,1474,1068,1186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2,2,2,2,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,859,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,859,859,859,2,2,2,859,2,859,2,859,2,2,2,859,859,859,859,2,859,859,2,859,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2,2,2,2,2,2,2,2,2,859,859,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1454,1228,375,267,72,301,51,1398,1378,168,838,360,853,853,172,2,2,2,2,2,2,2,2,2,2,2,760,466,466,466,2,2,466,760,760,760,631,631,466,2,2,2,368,368,2,2,2,2,2,2,2,368,638,638,638,368,368,368,368,2,2,2,62,466,2,368,368,368,368,368,368,368,368,368,368,368,2,2,368,368,2,368,368,368,2,62,325,2,2,2,2,2,2,2,368,368,2,2,368,368,368,368,2,2,368,631,2,2,368,2,368,368,368,368,368,368,2,2,374,374,374,374,374,374,368,368,368,368,368,52,52,52,52,2,368,368,368,368,368,368,368,368,851,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,760,368,368,368,368,631,631,631,631,368,368,368,325,368,368,368,325,325,325,325,679,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,325,325,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,760,760,760,760,368,368,368,368,368,368,368,368,368,368,62,62,368,368,368,631,368,368,368,368,368,368,368,368}, + {1040,420,960,882,64,661,292,146,976,427,689,248,248,248,638,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861,861,861,861,861,861,861,861,861,861,861,861,2,2,861,861,861,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,638,2,2,2,2,2,861,861,861,2,861,861,861,861,861,2,2,861,2,2,2,861,861,2,861,861,861,861,2,861,861,2,2,861,861,2,2,861,861,861,2,861,861,861,861,861,2,861,861,2,861,861,2,2,2,2,2,861,861,2,2,861,861,861,861,861,861,861,2,2,861,2}, + {1040,522,666,398,78,208,293,818,134,867,147,147,482,2,4,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,792,792,792,792,792,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,122,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,122,122,122,122,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,122,122,122,122}, + {1041,1090,651,130,72,389,171,237,516,777,937,937,937,168,168,2,336,2,2,2,2,2,2,2,2,2,992,2,992,2,992,2,2,2,2,2,2,992,992,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,992,2,2,2,992,992,992,2,2,992,992,2,992,992,992,992,992,992,992,992,992,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,992,2,2,2,2,2,2,2,2,2,992,992,2,2,2,992,2,992,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,992,992,2,2,2,2,992,992,992,2,2,2,2,2,2,992,992,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,992,992,2,992,2,2,992,992,992,992,2,2,2,2,2,2,992,2,2,2,2,992,2}, + {987,1280,1245,1300,926,676,56,546,541,690,84,42,1000,1383,1383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,778,778,2,778,778,2,2,2,2,2,2,778,778,778,778,2,2,2,2,2,2,2,2,2,2,2,2,2,2,778,778,2,2,2,2,2,2,2,2,2,2,2,2,778,2,2,2,2,2,2,778,778,778,778,778,778,778,2,2,778,778,778,2,2,2,2,778,2,2,2,778,778,778,778,2,2,778,778,778,778,778,2,778,778,778,2,2,778,778,778,778,778,778,2,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,2,778,778,778,778,778,2,2,778,2,2,2,2,2,2,778,778,778,778,778,2,778,778,778,778,2,778,778,2,2,2,2,2,778,778,778,778,2,778,778,778,778,778,778,778,2,2,2,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778}, + {1324,588,1378,592,1445,1029,759,1296,739,931,363,704,312,704,704,704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,2,2,298,298,2,2,2,298,298,298,2,2,2,2,2,298,298,298,298,2,2,298,298,2,298,2,2,298,298,298,2,2,2,298,298,298,298,298,298,298,2,2,2,298}, + {1058,454,1557,191,129,297,695,1390,1274,460,923,923,923,2,4,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,1059,1059,2,1059,1059,2,2,2,1059,1059,1059,2,2,2,2,1059,1059,2,2,2,1059,1059,2,2,2,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,947,300,300,300,300,1059,1059,1059,1059,947,1059,2,2,386,386,947,1059,386,386,386,386,386,386,386,386,386,1059,1059,1059,1059,300,1059,1059,947,947,947,2,2,2,2,947,947,947,947,947,1059,1059,1059,1059,947,947,947,1059,1059,1059,947,947,947,947,947,947,947,1059,1059,1059,1059,947,947,947,1059,1059,947,947,947,947,947,947,947,947,947,947,947,947,1059,1059,1059,947,947,947,947,947,947,947,947,947,1059,300,300,386,386,1059,386,300,2,1059,947,947,947,947}, + {1327,572,282,1022,907,1276,409,643,1050,633,187,187,187,2,228,45,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1119,2,2,2,2,2,1119,1119,1119,1119,2,2,320,2,2,320,2,2,2,320,1119,2,2,320,320,320,2,320,320,320,2,2,320,320,320,1119,320,320,320,320,320,2,2,320,320,320,320,2,320,2,320,320,2,2,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2,320,2,2,2,2,2,2,2,1119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1395,958,237,101,559,891,560,47,524,747,197,589,589,917,887,887,887,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,431,431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,174,174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,1086,2,174,2,2,174,174,2,431,2,2,2,2,2,2,2,2,2,2,174,431,431,431,431,174,174,174,174,2,2,174,174,174,431,431,431,431,431,431,431,431,431,431,431,2,431,431,431,431,431,431,431,431,431,431,174,174,174,174,174,174,431,431,431,431,431,431,431,431,431,431,431,174,431,431,431,431,174,174,174,174,431,174,174,174,174,174,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,174,174,1086,174,1086,1086,431,431,174,174,384,431,431,174}, + {1395,529,461,402,194,392,122,781,111,162,780,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1228,1228,1228,1228,2,2,1228,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1485,1041,1225,331,873,260,335,353,588,1254,1201,1245,1245,2,2,824,726,2,2,2,129,2,2,2,2,2,2,2,2,799,799,799,799,2,2,667,667,667,667,2,667,2,667,667,667,2,2,2,2,2,667,2,2,2,2,2,667,667,2,667,2,667,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,667,2,2,2,2,2,2,2,2,667,799,799,799,799,799,667,2,2,2,2,799,799,799,799,799,667,667,799,799,799,799,667,667,799,799,799,667,667,667,799,799,2,2,2,2,2,2,2,799,799,799,2,2,2,799,2,2,667,799,799,799,799,2,2,799,799,799,667,799,2,667,2,2,799,799,799,799,799,799,799,2,799,799,799,2,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,129,799,799,799,799,799,799,799,799,799,765,799,799,799,799,799,799,799,799,799,799,799,799,667,667,2,667,667,2,667,129,129,799,129,129,129,799,129,667,2,2,667,667,2,799,799,799,129,129,129}, + {1378,541,848,848,347,856,102,104,183,156,395,130,1377,2,2,2,159,159,159,2,2,2,772,2,2,2,2,2,2,2,2,2,2,2,2,772,772,2,772,772,2,2,772,2,2,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,772,772,772,772,772,772,2,2,2,2,2,2,223,223,772,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1062,212,784,63,252,873,1302,1108,1380,84,1375,1375,1375,2,2,2,375,374,2,980,2,2,2,980,980,980,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,980,2,2,2,2,2,2,2,630,630,630,630,2,2,2,2,2,2,2,2,2,2,630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {830,995,146,112,467,345,1480,730,648,1453,1230,520,520,2,2,2,959,959,959,959,959,959,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1384,549,430,781,946,879,901,924,741,114,14,451,36,2,2,2,2,287,287,287,803,803,803,803,2,2,2,803,803,803,803,803,803,2,2,2,2,803,803,803,803,803,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,803,803,803,2,2,2,803,803,2,2,2,803,2,803,803,803,287,803,2,803,2,2,2,803,803,803,803,803,803,803,803,2,803,803,803,2,2,2,803,803,2,2,2,2,803,803,803,803,803,803,2,2,2,803,2,2,2,2,2,803,803,803,803,2,803,803,803,803,24,803,803,803,803,803,803,2,2,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,2,2,803,803,2,2,287,287,287,803,287,803,803,803,803,803,803,803,803,803,287,803,803,803,287,287,287,287,287,2,803,803,803,803,803,803,2,2,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,2,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,2,803,803,803,803}, + {1413,627,1329,1092,526,197,31,417,1149,981,964,1003,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2,2,2,2,717,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,2,2,2,2,2,2,2,717,2,717,717,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,717,717,717,717,717,717,717,717,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2,2,717,717,717,2,717,717,717,2,2,2,2,717,717,717,2,717,717,717,717,717,717,717,717,717,2,2,2,717,2,2,2,717,717,717,717,717,717,2,2,717,717,2,717,717}, + {1084,1174,1601,949,910,960,500,461,1290,23,1042,636,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,361,361,361,361,2,2,2,2,2,2,2,2,361,361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,241,2,2,361,361,361,361,2,361,361,361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,361,2,241,2,1456,1456,2,2,361,2,2,2,2,241,241,2,241,241,241,241,241,241,241,241,241,2,241,2,2,241,241,2,2,2,2,361,361,241,241,2,361,361,361,361,2,2,2,361,361,2,2,361,361,361,2,2,361,361,361,361,361,361,361,2,241,241,361,361,361,2,361,361,2,361,361,361,361,2,361,361,361,361,361,2,361,361,2,361,361,361,361,361,361,2,361,2,2,241,241,361,361,361,2,361,361,361,361,361,2,2,2,2,2,2,361,2,2,361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1420,531,626,738,376,537,814,206,990,235,847,812,201,201,201,201,726,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1155,1155,1155,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,726,726,726,2,2,2,2,2,708,726,726,2,726,726,201,201,201,201,201,201,2,2,2,726,726,726,726,726,2,726,726,2,2,726,726,726,726,201,201,201,726,201,726,726,201,726,726,726,726,726,726,726,201,201,201,201,2,201,201,201,201,201,201,201,201,201,726,2,2,2,2,2,2,2,726,726,2,2,708,708,201,201,201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,726,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,726,2,2,2,2,2,2,2,2,2,2,2,726,726,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,201,201,201,2,2,2,2,2,2,2,2,2,2,2,2,756}, + {1420,624,363,537,1436,278,292,377,263,820,376,382,382,2,654,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1198,2,1198,2,1198,1198,1198,1198,1198,1198,2,2,1198,2,2,2,2,2,2,2,2,2,1198,2,2,2,1198,1198,1198,1198,2,2,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,2,1198,1198,1198,1198,1198,1198,1198,2,2,1198,1198,1198,1198,1198,1198,1198,1198,318,318,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,2,2,1198,2,2,2,2,2,2,1198,1198,1198,1198,1198,1198,1198,1198,2,2,2,2,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,2,2,2,1198,1198,1198,1198,1198,1198,2,2,2,2}, + {1091,793,1353,208,506,599,846,503,1011,247,289,61,1050,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,349,349,2,2,2,2,2,2,2,2,2,2,2,349,2,349,2,2,349,349,349,349,2,2,2,2,2,2,2,2,2,349,2,2,349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,349,2,2,2,2,2,365,365,365,2,2,2,2,349,349,349,349,349,349,2,2,349,349,365,365,349,365,365,349,2,2,2,2,2,2,349,349,349,2,349,349,349,349,2,349,349,2,2,349,349,2,2,2,2,349,349,2,2,2,1164,349,349,349,2,2,365,365,365,365,365,365,365,365,365,365,365,365,2,349,2,2,2,2,2,2,2,2,2,2,2,2,349,349,2}, + {1098,1323,120,1167,76,1111,128,716,739,490,114,338,566,2,178,228,2,2,2,2,2,2,2,2,2,572,2,2,2,2,2,572,572,572,572,572,572,572,2,572,572,572,572,572,572,572,572,572,2,2,2,2,2,2,2,2,2,2,2,572,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,572,2,2,2,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,2,572,572,572,2,2,2,43,2,2,2,2,2,2,2,2,572,572,572,2,2,2,2,2,2,572,43,43,43,43,572,43,43,43,572,572,572,2,2,572,572,572,572,572,572,572,43,43,572,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,572,572,572,572,2,2,572,572,572,572,2,572,572,572,572,572,572,572,572,572,572,572,572,572,572,43,2,2,2,2,2,2,2,2,2,2,2,2,572,572,572,2,572,2,43,43,2,2,572,572,572,2,572,572,572,2,2,2,572,572,43,572,572,572,572,572,572,572,2,2,572,2,2,572,572,572,572,2,2,572,572,572,2,2,2,572,572}, + {1533,978,284,156,914,162,685,1184,252,1375,189,256,640,2,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,521,521,2,2,1286,1286,1286,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,521,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,521,521,521,521,521,2,2,2,2,2,521,521,2,2,2,2,2,2,2,2,2,2,521,521,521,521,521,521,521,521,521,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,1286,1286,1286,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1531,692,414,277,541,1371,1447,682,536,109,432,1240,1240,2,1022,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,398,791,1170,76,661,408,259,756,495,79,553,10,10,1532,1532,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1532,1532,2,1532,2,2,2,2,1532,1532,61,61,61,2,2,2,1532,1532,1532,1532,1532,1532,2,2,1532,2,2,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,61,61,61,61,61,1532,1532,2,61,1532,1532,1532,1532,1532,1532,1532,1532,2,1532,1532,1532,61,61,61,61,61,61,61,61,61,61,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,1532,61,61,1532,920,1028,1028,1028,1028,1028,2,2,224,224,224,224,2,2,2,61,2,2,2,2,2,2,2,1532,1532,2,1532,2,1532,2,1532,2,2,2,2,224,2,2,2,2,2,1532,1532,1532,1532,1532,1532,2,2,2,2,2,224,224,224,224,2,2,1532,1532,2,2,2,224,224,2,2,2,224,2,2,2,224,224,1028,1028,1028,1028,224,224,1028,1028,1028,1028,224,224,920,920,920,2}, + {1106,523,1346,818,755,662,1137,234,822,62,459,163,163,577,40,2,2,2,1183,2,2,2,2,2,2,2,2,1183,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1040,704,618,854,374,1470,274,383,941,519,351,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1427,988,498,1529,99,678,1323,149,33,426,543,543,335,1507,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,613,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,613,2,2,2,2,2,2,2,2,2,2,613,613,2,613,613,613,2,2,2,613,613,613,613,613,613,613,613,613,2,2,613,613,613,613,613,613,613,613,613,613,613,613,613,613,2,2,613,613,613,613,613,613,1202,1202,1202,1202,1202,1202,613,613,613,613,613,613,2,2,613,613,613,613,613,2,613,587,613,613,613,587,587,613,613,587,613,613,613,613,613,613,613,613,613,613,613,613,613,971,613,613,971,971,613,613,613,613,2,587,587,613,613,613,613,613,613,613,613,613,613,613,2,613}, + {1102,349,490,266,144,220,599,437,743,764,647,1128,605,265,324,324,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1056,1056,2,2,2,1056,2,2,2,2,2,2,2,1056,2,409,1056,2,2,781,781,409,409,781,409,781,2,2,1027,1056,1056,1027,2,2,2,1027,1027,1056,1077,1077,2,1056,1056,1056,2,2,2,1056,1056,1056,433,1027,1027,1027,1027,257,1027,1056,257,1440,1440,1027,669,669,433,1056,1027,2,1440,1440,433,1056,1056,433,1440,1440,1056,642,642,642,642,433,433,642,642,642,642,433,433,433,433,433,433,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,33,33,1230,1230,611,980,318,1027,1027,1027,1027,642,642,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,433,1440,1440,1440,1440,1056,385,433,433,433,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,257,257,1440,1440,1440,1440,1440,1440,642,165,433,1027,433,433,1440,1440,1440,1440,1440,1440,1440,433}, + {1118,496,645,592,354,1133,935,428,72,532,182,182,1370,660,123,2,294,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,393,2,393,2,2,393,2,393,2,2,393,393,2,393,393,393,2,2,393,2,393,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,393,393,393,2,2,393,2,2,2,393,2,2,2,2,2,2,393,2,2,2,393,2,2,393,393,393,393,393,2,2,2,393,393,393,393,2,393,393,393,393,2,393,393,393,2,393,393,2,2,393,393,2,2,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,294,294,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,393,393,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,1042,315,745,1006,771,630,68,587,1187,295,295,295,408,408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,319,2,2,2,1137,1137,1137,2,319,319,2,319,319,319,319,319,319,319,2,2,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,2,2,2,2,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,2,2,2,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,2,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319}, + {1118,724,1322,405,199,614,1087,885,1313,317,769,660,660,1158,535,2,2,2,373,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,772,743,488,346,126,784,584,943,153,311,133,133,969,605,605,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1404,284,176,590,1128,1371,322,543,1136,546,1315,174,174,777,777,891,2,2,2,2,2,2,2,579,579,579,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,579,579,2,2,2,2,2,2,2,2,2,579,579,2,2,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,579,2,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,413,413,2,2,2,2,2,2,2,2,2,2,2,2,2,579,579,579}, + {1441,791,233,141,141,316,89,296,462,1263,758,482,599,599,578,341,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,126,126,2,2,2,2,2,2,2,2,2,2,2,2,126,126,2,2,126,126,126,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,185,185,2,2,647,126,126,126,2,2,2,2,2,2,2,2,2,2,2,126,126,126,2,126,2,2,2,2,2,185,185}, + {1413,406,700,547,1166,250,518,543,104,331,205,205,691,691,2,2,118,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,447,447,447,447,447,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,416,126,843,805,849,368,1396,1473,751,120,120,493,936,936,60,60,60,60,2,2,2,2,2,2,2,2,2,1086,1086,1086,1086,1086,1086,2,1086,1086,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,490,490,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1485,400,1497,168,82,680,1103,554,249,702,493,101,296,236,2,236,236,944,944,2,2,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,413,413,394,394,394,394,394,2,2,2,413,413,413,1499,1499,1499,1499,1499,413,413,413,413,413,413,413,413,413,2,413,413,413,394,394,413,413,413,1000,1000,1000,1000,1000,1000,413,413,413,413,165,165,165,2,2,2,2,394,394,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1499,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,413,2,2,2,2,413,413,413,2,2,413,413,413,2,413,2,413,413,413,2,413,413,413,413,413,2,2,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,2}, + {1127,869,558,533,1215,194,1762,784,593,777,1153,1079,1079,1079,2,2,2,330,1045,2,1045,1045,2,2,2,2,2,2,2,2,2,787,787,2,2,2,2,2,2,2,2,2,787,787,200,787,787,787,787,2,787,2,787,787,787,787,787,2,787,787,787,787,787,2,787,787,2,787,2,2,787,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1459,1243,467,533,266,1364,1031,890,1402,486,1678,1678,93,978,2,2,2,978,947,947,2,978,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,341,341,341,341,2,2,2,2,2,2,2,2,2,76,76,76,2,2,2,2,76,2,2,2,2,2,2,341,341,2,341,2,341,76,76,76,76,76,76,341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,76,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1139,809,117,522,955,1096,1120,1470,116,184,1565,1565,557,557,2,2,2,2,2,829,1326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1142,984,1044,590,340,241,662,357,366,1305,2,125,631,474,2,2,2,980,2,2,2,2,2,2,2,2,2,2,2,2,2,1273,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1273,1273,566,1273,2,2,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,2,2,1273,1273,1273,1273,2,2,1273,1273,1273,1273,2,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,2,2,2,1273,1273,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,2,2,2,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,2,2,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,2,1273,1273,1273,2,2,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273,1273}, + {1469,1247,1277,616,209,486,106,552,219,217,471,272,272,1201,2,2,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1487,1010,320,966,785,847,954,1060,138,856,966,966,966,703,2,703,703,2,2,2,2,2,2,2,2,2,2,2,2,1279,2,1279,1279,2,2,1279,1279,1279,1279,1279,1279,2,2,2,2,302,302,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,475,475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,148,148,128,128,2,128,128,128,128,128,128,148,2,2,128,128,128,128,128,128,128,185,353,297,128,148,148,297,35,128,35,148,148,297,148,148,148,148,148,148,148,148,148,148,1606,148,148,1606,1606,148,1606,148,148,1606,1606,1606,1606,1606,1606,148,148,148,148,148,148,148,148,148,1606,148,148,148,148,148,1606,1606}, + {1148,542,1478,496,950,464,1011,235,136,180,2,416,758,453,2,909,2,2,2,2,2,2,2,2,2,2,1019,1019,2,2,2,2,165,2,2,2,2,2,2,2,2,2,2,2,165,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1329,1019,1019,1019,1019,1019,1019,1329,1019,2,2,1019,2,2,165,2,2,2,1019,1019,1019,1019,1019,1329,1329,1329,1329,1329,1329,1329,1329,1329,2,1329,1329,2,2,2,2,2,2,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,334,2,2,165,165,165,165,165,165,165,165,165,165,165,165,114,1329,2,2,2,458,458,458,458,2,2,1329,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,165,2,2,2,845,2,2,2,1329,1329,2,845,845,2,2,2,2,2,2,458,458,2,1329,1329,845,845,845,458,458,458,458,458,458,458,2,2,2,2,2,2,2,2,2,2,2,165,165,165,165,2,165,165,165,165,165,165,165,165,165,165,165,165,165,2,165,165,165,165,165,2,165,2,2,2,2,165,458,1019,165,165,165,165,165,2,2,458,458,165,165,165}, + {1495,1178,874,415,1100,368,1057,1228,562,215,31,31,680,680,680,1208,2,2,2,2,2,2,2,2,1208,2,2,2,2,1208,1208,2,2,1208,2,2,2,2,2,2,1208,2,2,1208,2,1208,1208,1208,1208,1208,2,2,1208,2,2,1208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1208,1208,2,2,2,2,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,2,1208,1208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1208,2,2,2,1208,1208,2,2,2,2,2,2,1208,1208,2,2,2,2,2,2,2,2}, + {1497,1166,1613,1403,107,803,993,539,1436,1289,2,240,334,634,532,1147,2,2,2,2,2,2,2,117,2,2,2,2,2,2,2,117,2,2,117,117,117,117,2,2,2,2,2,2,2,117,2,2,2,2,117,117,117,117,117,117,117,117,2,2,2,2,2,2,2,2,117,117,2,2,2,117,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,117,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,532,532,2,2,2,117,117,117,2,2,2,2,117,117,117,2,2,2,2,532,532,532,532,532,532,532,532,532,532,532}, + {1617,289,1033,169,355,260,30,45,721,906,88,44,44,418,417,218,2,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,846,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1642,766,1253,368,1344,282,1572,199,810,677,1182,1182,273,607,402,559,2,2,2,2,2,2,2,2,2,2,2,2,1182,2,2,2,2,2,2,1182,1182,1182,1182,1182,1182,2,2,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,2,1182,1182,1182,1182,1182,1182,1182,2,2,2,1182,2,478,478,478,478,478,1182,2,478,2,2,2,2,2,2,2,2,2,2,2,478,478,478,478,478,2,2,2,2,2,2,2,2,478,478,478,399,399,478,399,399,399,399,399,399,399,1182,399,399,1182,2,2,2,1182,1182,1182,1182,478,478,2,478,478,478,478,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,399,399,1182,1182,399,1182,1182,1182,1182,1182,2,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,2,2,1182,2,2,2,2,1182,1182,1182,1182,1182,1182,1182,1182,1182,2,1182,2,2,2,2,2,2,1182,478,399,399,399,478,478,478,1182,1182,1182,1182,2,1182,1182,1182,1182,1182,1182,878,1182,878,878,1182,1182,1182,2,1182,1182,1182,1182,1182,2,1182,1182}, + {1515,1002,1117,1023,561,1334,363,946,1023,982,2,258,260,260,1049,260,2,2,2,2,2,2,1049,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1049,1049,2,2,2,2,2,2,2,2,2,2,2,1049,1049,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1696,1696,1696,2,2,2,2,1696,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1628,721,400,239,728,1336,984,425,65,120,1232,463,463,640,349,616,616,2,2,2,2,2,2,2,2,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,2,2,2,349,349,349,349,229,229,349,349,2,349,349,349,349,2,2,2,2,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,147,147,147,349,349,349,349,2,2,2,349,349,349,349,349,349,349,349,349,349,147,147,349,349,349,349,349,349,349,349,147,147,147,349,349,349,349,627,627,2,349,349,349,349,349,349,349,349,349,1505,2,2,2,2,349,147,147,349,147,349,349,349,349,349,349,229,229,2,229,229,2,2,2,2,2,2,2,2,2,2,2,2,568,2,2,2,2,568,2,2,2,2,2,568,568,2,568,568,2,2,2,349,349,349,349,349,349,2,2,2,349,147,147,147,147,1505,1505,1505,1505,2,2,2,2,2,2,2,2,2,2,2,2,229,229,229,229,229,229,229,229,229,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1623,499,308,1058,1184,1230,63,1515,433,110,763,763,422,954,954,954,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,133,2,2,2,2,2,133,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1628,286,541,530,1610,201,1220,1592,272,181,2,38,263,1586,1157,1157,1157,2,2,2,1157,1157,2,2,2,1157,2,2,2,2,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,2,1157,1157,1157,2,2,2,2,2,2,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1157,1157,2,2,1157,1157,1157,1157,1157,1157,2,1157,1157,2,1157,2,2,2,1157,1157,2,2,2,2,1157,2,1157,1157,1157,1157,1157,1157,2,2,1157,584,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,761,761,2,2,2,2,2,2,2,2,761,1157,2,2,2,2,2,2,2,2,2,2,2,2,2,1157,761,761,761,2,584,584,584,2,2,1157,2,218,2,2,2,2,4,262,22,761,2,2,1032,262,306,1162,1048,1048,1319,1162,82,761,761,761,761,218,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761}, + {1531,621,210,755,482,82,1308,317,427,168,2,232,116,190,701,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,701,701,701,2,701,701,701,701,701,701,701,701,701,701,701,701,701,2,2,2,701,701,701,701,701,701,701,701,701,2,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,1420,1420,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,993,993,993,993,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1532,575,1245,360,249,630,133,1406,920,1539,63,63,76,82,82,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,974,974,974,974,974,974,974,2,2,2,974,974,2,2,974,974,974,2,63,63,2,2,2,2,2,2,2,2,63,2,2,63,63,2,2,2,2,2,2,2,2,2,63,63,63,63,63,63,63,63,63,63,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,2,2,2,63,63,2,2,2,63,2,2,1356,2,2,974,974,2,1356,1356,974,974,974,2,2,2,2,63,2,2,2,2,2,2,2,63,63,63,2,1356,1356,1356,1356,1356,1356,1356,63,63,63,63,1356,1356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,63,63,63,2,2,2,63,2,2,2,1028,2,2,2,2,974,974,974,974,974,974}, + {1102,785,118,93,1491,988,275,53,1328,26,2,2,240,647,240,761,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1478,722,113,1534,1751,115,1728,1234,777,282,508,508,1184,63,1184,855,855,2,2,2,738,738,578,578,2,2,2,2,2,2,2,2,2,2,2,2,2,704,704,578,2,2,2,2,2,2,2,2,2,2,578,2,578,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,578,578,2,2,2,2,2,2,2,578,2,2,578,578,578,578,578,578,578,578,578,578,2,2,578,578,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1268,1268,1268,1268,1268,2,2,2,2,2,2,2,2,2,2,2,2,1268,2,2,2,2,2,2,2,2,2,2,578,2,2,2,2,2,2,2,2,578,578,578,578,2,2,2,578,578,578,578,578,578,578,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1480,536,1421,164,429,84,970,1673,548,497,2,2,530,156,156,128,245,2,2,2,2,260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,690,690,2,2,2,2,2,2,2,2,2,496,496,496,496,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,690,2,2,1719,257,2,257,257,2,2,2,2,2,2,257,2,2,2,2,2,690,690,690,690,2,690,690,690,690,257,257,257,257,257,257,257,2,2,2,2,1066,257,2,2,2,2,690,690,257,257,257,257,257,257,257,257,52,52,52,52,52,257,2,2,2,2,690,690,690,257,257,257,690,257,1719,1719,1719,1719,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,2,2,690,257,257,2,257,2,2,2,257,257,2,2,690,690,690,257,1719,1719,1719,2,2,1719,1719,2,1719,530,1719,1719,1719,2,1719,1719,2,2,2,2,2,2,2,2,2,2,2}, + {1533,1302,1286,538,619,526,1669,145,1034,125,2,1038,1038,388,388,387,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,261,261,261,2,2,2,1420,2,1420,2,261,261,261,261,2,2,2,2,2,1420,2,2,2,2,2,261,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,1420,2,2,2,2,2,2,261,1420,2,2,1420,1420,1420,1420,2,2,2,2,2,2,2,2,1420,1420,1420,1420,2,2,2,2,2,2,261,261,2,261,261,2,2,261,261,2,2,2,2,261,261,261,261,2,2,261,261,261,261,261,261,261,261,261,261,261,261,261,261,1420,1420,261,261,261,261,261,1420,261,1420,1420,261,261,261,261,261,1420,1420,1420,1420,261,261,261,261,261,261,261,261,261,261,261,261,1420,1420,1420,1420,261,261,261,261,261,261,261,261,261,261,1420,261,261,261,261,261,261,261,261,261,261}, + {1482,961,1093,556,1746,628,427,689,510,751,684,37,37,1229,1256,882,1507,1507,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1472,852,533,433,924,57,53,1036,410,675,1212,1212,1212,600,600,1212,1259,1245,1245,1245,1245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1212,1212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1259,1259,1259,1259,1259,1259,1259,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1080,1369,902,155,403,580,98,850,835,608,2,2,694,1028,199,199,2,121,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1228,425,1030,699,407,171,568,925,1104,97,2,2,1286,1286,1286,502,2,1219,1219,1219,1290,2,1219,1219,1219,1219,2,2,2,59,2,2,2,59,59,2,2,2,2,1219,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1219,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1219,1219,1219,1219,1219,2,1219,2,1219,2,2,2,2,2,1219,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1219,2,2,2,2,2,1219,2,1290,1219,1290,1219,1219,1219,1219,1219,1219,1290,1290,1290,1290,1290,1290,1290,1290,2,2,1219,1290,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1290,1219,2,2,2,1219,1219,2,2,1219,1219,1219,1219,1219,1290,1219,1290,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219}, + {1547,657,777,695,1254,224,933,367,212,385,2,2,2,1422,749,245,885,710,2,2,710,710,710,45,710,710,710,710,2,336,710,2,2,2,2,710,710,2,710,710,2,2,2,2,2,2,2,2,710,2,2,2,2,2,2,710,2,2,710,710,781,2,2,2,710,2,2,710,710,710,2,2,2,710,710,45,45,710,2,2,2,710,710,710,710,710,781,710,710,710,710,710,2,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,2,2,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,2,710,710,710,710,710,710,710,710,710,710,2,2,2,1279,2,2,2,2,336,710,710,710,710,710,710,2,2,2,2,336,2,2,2,336,2,2,336,336,336,710,2,2,336,336,336,710,336,710,2,2,710,710,1279,336,245,2,2,2,336,336,710,336,336,336,2,710,336,2,710,2,710,710,710,2,2,2,710,2,2,710,710,2,710,710,710,710,2,2,2,2,2,710,2,710,2,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,119,119,119}, + {1678,466,549,145,351,816,1041,334,192,192,2,2,348,1017,130,4,4,180,180,180,180,512,2,2,2,512,512,512,512,512,128,8,8,1247,1247,2,2,1364,1364,1364,180,180,180,180,194,194,194,194,2,2,512,512,512,512,512,128,1247,1247,1247,1247,1247,1247,1364,682,682,682,682,575,575,575,399,859,297,297,297,549,594,594,594,594,594,859,594,859,859,859,575,575,575,575,575,575,913,549,549,1364,1364,549,2,549,549,549,1364,549,863,863,599,1247,1247,1364,1364,1364,1364,1364,1364,680,1364,194,194,194,194,194,194,1364,1364,1364,1364,1247,1364,1364,874,1247,1247,1247,1247,1364,682,1364,1364,1364,575,575,575,575,575,575,859,297,297,297,549,594,594,594,594,594,859,594,594,859,303,303,1110,1110,1110,1110,1110,1110,1110,1110,1110,154,1110,1110,1110,1110,154,154,154,154,154,154,154,154,154,154,194,1362,1362,194,194,194,194,194,194,194,194,194,194,194,874,590,590,590,194,590,590,590,590,590,590,85,85,1142,298,1375,555,939,939,1505,555,1423,85,85,85,314,628,157,874,1327,1327,1327,1142,1362,151,151,151,151,1050,1050,143,143,939,939,939,939,1086,939,939,1556,194,151,194,194,561,561}, + {1550,569,481,1041,1680,1114,1265,160,386,194,2,2,2,533,929,531,422,531,1355,1355,1355,1355,531,216,216,2,2,2,2,2,2,2,828,828,36,36,36,2,2,216,216,531,531,531,317,216,216,216,216,936,936,820,531,531,216,216,216,216,216,216,216,216,216,216,531,243,243,243,243,243,243,243,36,36,36,820,216,1764,1764,1764,1764,1764,1764,828,828,828,828,828,828,828,292,67,243,243,820,820,243,243,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,243,243,243,243,216,340,216,216,340,4,4,1764,1764,1764,1764,1764,1764,1404,1404,2,2,2,1029,1029,1029,1029,1029,334,334,334,334,334,334,334,2,2,162,162,162,162,162,54,54,54,54,334,340,340,340,340,820,820,820,820,1355,531,820,820,531,820,820,2,2,2,820,820,820,820,820,964,67,67,67,67,67,820,820,820,820,820,820,292,292,292,67,820,820,820,820,820,820,820,820,67,531,531,531,820,820,1029,820,419,419,419,419,419,828,419,594,594,594,594,594,594,594,594,594,1029,1029,67,67,67,387}, + {1559,462,850,289,1570,71,512,858,810,835,2,2,2,2,1028,1205,1205,546,546,546,1205,1205,1205,1205,1205,2,1205,1205,1205,1205,1205,1205,2,2,2,1205,1205,1205,1205,635,546,546,546,546,546,546,1205,1205,1205,1205,1205,1205,635,635,2,546,2,2,2,545,2,2,2,2,546,546,1205,1205,1205,1205,1205,1205,1205,1205,546,546,546,2,2,2,2,2,546,546,2,546,546,546,2,546,2,2,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,2,2,2,546,546,546,2,2,2,2,2,2,2,2,1205,1205,1205,1205,1205,1205,635,545,2,2,1205,546,1205,1205,1205,1205,1205,1205,1205,1205,1205,546,546,635,635,635,635,546,546,635,2,635,635,546,546,635,635,635,635,635,635,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,2,2,2,1205,546,546,546,546,546,546,546,546,546,546,546,1205,546,546,546,546,546,546,546,546,546,546,546,546,546,2,546,546,546,546,546,546,546,546,1205,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546}, + {1192,888,701,164,131,613,282,237,525,366,2,2,2,2,1737,845,845,750,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1261,1261,1261,2,1261,1261,1261,1062,1261,1261,2,2,1261,2,2,2,1062,2,2,1062,1062,1062,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1261,1261,1261,1062,1062,1062,1062,2,1062,1062,1062,1062,1062,1062,2,1062,1261,1261,796,796,796,796,1261,1062,1062,1062,1062,1062,1062,1062,1261,1062,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1062,2,2,2,2,2,2,2,1062,2,2,2,2,2,2,2,2,1062,2,2,1062,1062,1062,2,2,2,2,2,2,2,2,1062,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1062,1062,1062,1062,2,2,2,1062,1062,1062,1062,1062,2,1062,2,2,2,2,1062,1062,1062,1062,1062,1062,1062,2,2,2,2,2,2,2,2,1062,1062,1062,2}, + {1208,426,412,1072,274,248,1544,627,9,458,2,2,2,2,2,2,270,270,270,150,715,282,150,150,150,150,150,150,150,150,150,150,150,150,39,39,39,39,39,2,39,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,2,2,2,715,715,715,715,715,715,573,573,573,573,573,2,2,573,2,2,2,2,150,173,173,173,173,173,2,173,173,2,335,2,573,335,2,2,2,335,335,2,2,2,715,715,715,715,715,715,715,715,715,2,769,769,2,2,2,2,2,2,150,150,715,715,715,715,2,2,715,715,2,2,2,2,2,335,335,335,335,335,715,595,2,2,715,715,715,715,715,715,715,715,715,715,150,335,335,335,335,335,335,715,715,715,150,173,173,715,715,715,715,150,150,2,150,150,150,150,595,150,150,150,150,595,595,595,595,595,2,595,2,2,2,2,715,2,715,715,715,150,150,715,715,39,39,39,39,39,39,39,39,39,39,335,335,2,769,39,39,2,2,769,150,150,715,2,2,715,715,2,2,2,150,150,2,2,2,2,2,2,715,715,715,715,715,715,2,2,2,2,2,2,2,2,173}, + {1210,806,162,569,861,1002,1048,55,98,112,2,2,2,2,2,2,844,844,149,529,529,529,2,2,2,2,2,119,119,17,17,714,584,119,2,2,2,119,119,119,119,119,119,119,119,119,2,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,1332,1332,1332,119,119,119,119,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,1332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,119,119,119,119,119,119,119,119,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,119,119,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,393,1522,96,160,581,540,120,441,176,2,2,2,2,2,2,1427,551,1102,1102,328,328,592,592,592,592,592,592,592,592,592,592,592,592,2,2,2,924,924,592,451,451,451,924,924,924,924,924,924,924,924,924,924,924,924,924,451,451,451,451,451,451,451,451,451,451,592,924,924,451,592,592,592,592,924,451,451,924,924,2,924,924,264,264,264,264,264,264,264,264,451,451,451,924,702,924,924,924,924,924,451,451,451,451,451,451,451,451,451,451,451,924,924,924,2,2,2,451,93,93,93,2,2,2,2,2,592,592,592,2,2,924,2,924,2,2,2,924,924,924,924,924,924,924,924,924,924,2,2,924,2,592,2,2,2,2,2,592,2,2,2,2,592,592,2,2,2,451,592,592,592,592,592,592,2,2,2,2,592,592,592,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,592,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1202,538,171,1177,1090,690,1566,746,1012,1012,2,2,2,2,313,781,808,313,1125,1117,930,1117,1117,1117,1117,1117,1117,1117,1117,2,2,2,2,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,2,1117,1117,1117,1117,2,2,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,2,2,1151,766,766,766,766,766,766,766,766,2,766,766,766,766,766,766,2,2,766,766,766,766,766,766,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,766,2,1117,1117,1117,2,2,766,766,766,766,766,766,766,766,766,766,766,766,2,1117,1117,2,2,2,1117,1117,1117,2,2,2,2,2,2,2,1117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1117,1117,2,1117,1117,1117,2,2,1117,1117,2,2,2}, + {1567,1265,372,1633,613,484,243,1523,21,275,2,2,2,431,431,431,431,2,2,978,489,889,889,889,889,889,889,889,2,2,2,2,2,2,2,2,2,203,889,889,889,889,889,889,889,889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,889,889,2,889,889,889,2,889,1037,2,1037,1037,1037,1037,1037,2,2,1037,1037,1037,1037,889,1037,1037,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,889,889,2,2,2,2,2,2,2,2,2,889,889,889,889,889,2,2,203,203,578,578,2,578,578,578,578,578,578,578,578,578,578,2,2,2,2,2,2,2,889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,203,203,203,203,203,203,203,2,2,2,2,2,2,2,2,2,2,2,2,203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1707,577,414,457,554,146,230,446,629,283,2,2,2,1156,272,1582,1582,2,2,1260,1260,1260,1260,483,1260,1260,1260,1260,1260,1260,1260,2,2,749,749,1260,1260,1260,749,749,2,2,2,749,749,2,2,749,2,749,1260,2,2,2,749,749,749,749,749,749,2,2,2,2,1260,1260,2,2,2,2,2,1260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,483,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1260,2,2,2,2,2,483,483,483,483,483,483,483,2,2,2,2,1260,2,2,2,2,2,2,2,2,1260,2,2,2,926,1260,483,2,749,2,2,1260,2,2,2,926,2,2,2,749,749,749,749,1260,2,2,1260,1260,1260,1260,1260,1260,2,2,2,1260,1260,1260,1260,1260,1260,1260,1260,2,1260,1260,2,2,1260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1260,1260,2,1260,1260,2,2,1260,1260,2,2,1260,1260}, + {1566,982,815,133,891,412,1179,831,651,268,2,2,2,367,366,367,367,63,63,767,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1522,1422,1017,124,499,451,731,1112,1355,1355,2,2,2,854,854,336,854,336,1297,2,2,2,193,193,193,193,193,2,2,2,2,2,2,2,2,2,2,2,900,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,900,900,900,2,900,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1160,1331,917,1696,401,547,122,592,863,863,2,2,703,703,703,703,495,495,495,2,2,495,495,495,495,495,269,2,2,2,269,269,2,2,269,269,269,269,269,2,495,495,495,495,495,703,2,2,2,2,495,495,269,495,2,2,2,2,269,269,703,269,2,92,92,2,2,2,703,2,2,703,703,703,703,2,2,703,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,703,47,495,608,608,608,608,2,2,2,2,2,703,703,2,2,2,2,2,703,703,703,703,703,269,703,703,703,703,703,2,703,703,703,703,703,703,703,2,2,2,703,703,703,703,703,703,703,703,703,703,703,703,2,703,703,703,703,2,703,703,2,703,703,703,2,2,703,703,703,703,703,703,703,2,2,572,1353,1353,1353,1353,1353,1353,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,205,205,703,703,703,703,703,703}, + {1605,1499,454,1072,686,732,309,295,940,551,2,2,880,264,264,973,2,2,72,314,2,2,2,890,890,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,890,2,2,2,2,2,2,2,2,2,2,2,2,890,890,890,890,2,2,2,2,890,2,890,890,890,890,2,890,890,890,2,2,890,890,890,890,890,890,890,2,890,890,890,890,2,2,2,2,2,2,890,2,2,890,2,2,2,2,890,890,890,890,890,890,890,890,890,890,890,890,2,2,2,2,2,2,2,2,2,2,2,890,890,890,2,2,2,2,2,2,2,2,890,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,890,890,890,890,890,2,2,2,2,2,2,2,2,2,2,2,2,2,2,890,890,890,890,890,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,890,890,2,890,890,890,2,2,2,2,2,2,890,2,890,890}, + {1538,814,1027,677,524,226,756,202,242,102,2,2,912,564,1289,682,2,1125,1125,1125,1125,2,1289,1289,1289,1125,1125,1125,2,1289,1289,1289,1289,1289,1289,1289,1289,2,2,1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,2,1289,1289,2,2,2,1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,2,2,2,2,2,2,2,2,2,2,1289,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1598,397,1471,1471,1162,866,236,948,1557,737,2,2,153,737,1408,765,765,608,2,2,2,171,608,608,608,608,2,608,608,2,2,2,2,2,2,608,2,2,608,608,2,2,2,2,2,608,608,608,608,608,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,608,608,608,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,551,551,462,324,324,128,324,324,722,722,197,197,608,197,197,197,608,608,608,608,608,1865,867,867,765,765,765,765,765,2,765,608,765,765,765,765,765,1865,765,765,765,765,75,765,765,765,765,765,765,765,765,765,2,608,765,765,765,765,765,765,765,765,765,608,608,608,608,608,75,75,765,765,765,765,608,608,608,608,608,608,608,608,608,36,765,18,18,608,1187,424,424,424,1564,1564,1564,765,765,651,651,1341,876,41,41,765,765,765,765,765,1865,621,621,621,621,41,41,765,41,41,41,41,41,41,41,41,765,765,765,765,765,765,765,765,765,765,75,765,765,765,765,765,765,765,765,75,75,75,765,765,765,765,765,765,765,765,765,765,765,765,765,1637,1637,1637,765,765,765,765,765,765,817}, + {1598,434,107,270,148,1317,835,123,642,1236,2,2,67,633,771,878,771,878,878,2,2,2,771,2,2,2,2,2,2,2,2,2,217,217,217,217,217,217,2,2,771,771,771,878,2,878,878,878,748,878,2,2,878,878,878,2,771,771,771,2,2,2,2,2,2,2,2,2,2,2,2,2,2,771,2,2,2,2,2,2,2,2,878,771,748,878,771,771,771,2,771,771,2,2,2,748,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,771,771,2,2,2,2,771,771,771,2,771,2,2,2,2,2,2,2,2,2,2,2,771,748,748,771,771,2,748,771,2,771,771,771,771,771,771,771,771,748,2,2,748,771,2,2,2,2,771,2,771,771,771,771,2,2,771,2,2,771,771,771,748,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,748,771,771,771,771,2,2,771,771,2,771,771,771,771,771,771,771,771,771,771,771,2,771,771,771,771,771,771,771,771,771,771,771,771,771,771,2,2,771,771,771,771,771,771,2,2,2}, + {1628,1502,1042,822,80,403,1335,684,464,426,671,671,336,336,336,2,425,896,2,2,2,2,1337,1337,1337,1337,1337,1337,2,2,2,2,1337,1337,1337,1337,1502,1502,1337,1337,1337,1337,1337,1337,1337,1337,1337,1502,2,881,881,881,881,2,2,1502,1502,1502,1337,1337,1337,1337,881,2,1502,1502,1502,1502,1502,2,1502,1502,2,1502,2,1502,1502,2,2,2,1502,1502,2,2,2,1502,1502,1502,1502,1502,881,1502,2,2,881,881,2,2,45,45,147,1502,147,2,2,2,881,881,2,2,2,2,2,2,2,2,2,2,1337,2,2,2,2,2,2,2,2,2,1337,2,2,2,2,1337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1337,2,2,2,2,2,2,2,2,2,1337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1337,1337,1337,1337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1337,1337,1502,1337}, + {1630,715,1368,1273,993,293,385,545,1267,896,1038,1038,270,1325,1325,2,2,961,961,961,961,961,961,2,2,961,961,2,2,961,2,961,2,961,2,2,2,2,2,2,961,2,2,2,2,2,2,2,2,961,961,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,961,961,961,2,2,961,2,2,2,961,961,2,2,2,961,961,2,2,203,961,2,2,2,2,2,2,961,961,961,2,2,2,961,961,961,961,961,961,2,732,732,961,961,732,2,2,961,961,961,961,961,2,2,2,961,961,961,2,961,961,961,961,961,2,2,2,2,961,961,2,2,2,2,2,203,2,203,2,2,2,2,2,2,2,2,2,2,961,2,2,2,2,2,2,2,2,117,117,117,2,2,2,961,2,2,2,2,2,961,961,2,2,2,2,2,203,2,2,2,2,2,2,2,2,2,961,2,2,961,2,2,2,2,2,2,2,2,203,2,203,961,2,2,2,2,961,961,961}, + {1612,723,409,641,796,1087,1228,1398,623,262,740,740,870,870,397,2,2,893,893,2,2,1367,328,2,328,2,2,2,2,2,2,2,328,328,328,328,328,328,2,328,328,328,2,2,2,2,1367,1367,1367,1367,1367,1367,1367,2,2,2,2,2,2,1367,1367,1367,1367,1367,1367,1367,2,1367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,328,328,328,2,2,2,1367,1367,1367,2,2,2,2,1367,1367,1367,1367,1367,1367,2,2,2,2,328,2,2,328,2,2,2,2,2,328,2,328,328,328,2,2,328,328,328,2,2,328,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1614,588,652,105,441,844,734,912,532,878,1073,1073,62,1415,693,1431,1431,1431,1431,925,925,925,925,925,925,925,2,2,2,2,2,2,1431,1431,1431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1607,1503,1072,471,221,277,854,1236,263,752,2,694,1657,934,553,2,2,2,498,498,2,802,2,46,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1568,1453,1203,661,421,977,373,631,336,1483,2,522,81,146,587,1235,1235,1235,2,956,2,2,2,956,956,956,956,956,956,956,956,956,956,2,2,956,956,2,956,2,2,956,1383,1383,1383,1383,1383,1383,956,2,2,2,2,2,2,1383,2,2,956,956,2,2,956,956,956,2,956,956,956,956,956,956,956,956,956,956,956,956,956,1383,1383,1383,1383,1383,1383,2,2,956,956,956,956,956,956,956,956,2,956,956,956,956,956,956,956,956,956,956,956,956,956,2,2,956,956,956,956,2,2,2,2,2,2,956,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1383,1383,2,2,1383,2,2,2,2,2,1383,2,2,2,2,2,2,2,2,2,2,1383,1383,2,1383,2,2,2,1383,1383,1383,1383,1383,1383,1383,1383,2,2,1383,1383,1383,1383,1383,956,956,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,956,1383,956,1383,1383,2,2,1383,1383,2,2,956,956,956,1383,1383,1383,1383,2,956,1383,1383,2,1383,1383,956,2,1383,956,956,956,956,956,1383,1383,956,1383,1383,1383,1383,1383,1383,1383,1383,956,1383,1383,1383,956,956,1383,2,2,1383,956,1383,1383,956,956,956,956,2,2,2}, + {1172,987,140,1964,584,600,852,1725,456,1199,718,718,791,981,791,2,2,2,2,2,1260,2,2,2,2,2,718,2,2,718,2,718,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,718,2,2,2,2,2,718,2,718,2,2,2,718,718,2,718,718,2,2,2,2,2,2,2,2,2,718,718,718,718,718,718,718,718,718,718,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,718,718,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1756,1359,698,1584,446,724,729,419,660,1305,2,244,244,244,540,540,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,308,308,308,2,2,2,2,308,308,308,2,308,2,2,2,2,308,2,2,2,2,2,2,2,308,308,308,308,308,2,2,2,2,2,2,2,2,308,308,308}, + {1746,771,620,415,1057,437,613,1034,1662,837,2,1149,1466,1149,1149,1149,1466,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1093,2,2,1093,2,2,2,2,2,1093,1093,2,1093,1093,2,1093,2,2,2,2,2,2,2,2,1093,1093,2,1093,1093,1093,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1093,1093,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1093,1093,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1647,1092,860,89,1514,1745,69,237,890,86,2,1629,48,482,392,2,1013,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,835,1533,789,1259,174,1497,557,644,203,2,289,604,434,434,434,2,844,844,2,2,2,1111,1111,1111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1111,2,2,2,2,2,1111,1111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,282,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1269,783,1045,429,1829,417,143,72,856,1152,941,1152,1171,175,59,1729,2,2,2,2,2,2,741,2,2,2,2,2,2,2,2,741,741,2,2,741,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,741,2,2,2,2,2,2,2,2,2,741,741,741,416,416,416,416,416,416,416,2,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,2,741,416,416,416,416,416,416,741,741,741,741,416,416,416,416,416,416,416,416,416,416,416,416,416,416,741,416,416,416,416,416,416,416,416,416,2,2,2,416,416,416,416,741,416,741,416,416,416,2,2,2,416,416,416,416,416,416,416,416,2,2,416,741,2,416,416,416,416,416,416,416,2,416,416,416,416,416,2,2,2,2,2,2,2,2,416,416,416,2,2,416,416,416,416,2,416,416,416,416,416,416,416,416,416,416,416,416,416,2,416,416,416,2,2,2,2,2,416,416,2,2,2,416,416,2,416,2,2,2,2,2,2,2,2,2,2,2,2,2,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,2,416,416,416}, + {1272,884,388,1889,956,159,1172,595,219,645,2,629,107,107,1279,75,2,2,2,211,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,589,589,2,2,2,2,2,2,2,2,2,589,2,2,589,2,589,589,589,2,589,2,2,2,2,2,2,1537,1537,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,589,589,589,589,589,589,2,2,2,589,2,2,589,589,2,2,589,589,589,2,589,589,2,589,589,589,589,2,2,2,2,589,589,589,589,589,589,589,589,2,2,589,589,2,2,2,2,589,75,75,75,75,2,2,2,2,2,589,589,589,2,589,589,589}, + {1797,904,172,659,349,177,692,448,1141,990,640,99,1073,806,640,640,2,640,640,911,911,911,640,640,640,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,640,2,640,640,2,2,2,2,2,2,2}, + {1276,442,1008,1352,243,162,711,301,552,1002,668,668,384,71,384,384,2,2,2,2,2,727,727,727,777,777,777,777,777,777,2,777,777,777,777,777,777,777,777,777,2,777,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,777,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1147,2,777,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,777,777,777,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,534,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1130,171,1113,813,722,117,990,37,24,969,94,825,1398,1398,1398,1398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,969,2,862,969,969,969,969,969,969,969,2,969,969,969,969,969,969,969,969,969,969,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,969,969,969,969,2,969,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,969,969,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1198,496,714,609,644,1159,873,249,186,1539,136,239,379,1994,2,68,68,68,68,68,2,2,192,2,969,2,2,969,2,2,969,969,969,969,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,969,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,969,2,2,969,2,2,2,969,969,2,969,969,2,2,969,2,2,2,2,2,2,969,969,969,2,2,2,2,2,2,2,2,2,969,969,969,2,969,969,969,2,2,2,2,2,2,2,2,2,2,2,2,969,969,2,2,2,2,2,2,2,2}, + {1678,1316,460,1133,1003,150,1236,1316,1417,218,1763,1763,77,77,2,1491,771,771,771,771,771,2,771,2,2,2,2,2,2,2,2,2,2,2,2,2,2,771,2,2,925,2,2,771,2,2,2,2,2,2,2,2,2,2,2,2,771,771,2,2,771,771,771,771,2,771,771,771,771,2,2,2,2,771,771,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,925,925,2,2,2,2,2,2,2,2,2,2,2,2,2,771,2,2,2,2,2,771,771,2,2,2,2,2,2,2,2,2,2,771,771,2,771,1604,2,771,771,771,771,771,80,771,771,2,2,771,771,2,771,925,2,2,771,771,2,925,771,925,1604,771,771,771,771,2,2,2,2,2,2,2,771,771,771,771,2,1604,1604,771,771,1604,771,771,771,925,771,1604,1604,1604,1604,1604,2,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,1604,1604,771,771,771,771,771,771,771,771}, + {1682,449,1067,393,136,854,36,492,637,1053,247,1111,1111,1111,2,247,247,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1288,1690,702,760,420,333,1213,1911,805,351,67,67,1568,1568,2,2,604,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,215,215,2,2,2,2,2,2,2,342,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,342,342,342,342,342,2,2,342,342,2,2,342,342,342,2,2,342,342,342,342,342,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,342,2,2,2,2,342,342,342,342,342,2,2,2,342,342,342,342,342,342,342,342,342,342,342,342,2,2,2,342,342,342,342,2,2,2,2,342,342,342,2,342,2,2,2,2,2,2,2,342,2,342,342,342,342,2,2,342,2,2,342,342,342,342,342,342,342,2,342,342,342,342,342,342,342,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1288,1858,152,894,346,104,997,203,249,1006,1278,1489,1489,555,2,2,2,1074,1074,518,2,2,518,2,2,518,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,518,518,2,2,2,2,518,518,518,2,518,518,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1601,697,532,408,697,1140,1568,47,1499,780,1171,318,318,318,2,2,2,2,318,318,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,782,62,2,2,2,2,62,62,62,782,2,782,2,782,782,782,782,782,2,782,782,782,782,2,2,2,782,2,782,782,782,2,2,782,782,782,782,782,782,782,782,782,782,782,782,782,782,2,2,2,2,2,2,2,2,2,2,62,62,62,62,2,2,2,2,2,2,2,782,782,2,2,782,782,2,782,782,782,2,782,2,2,2,2,782,2,782,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,782,782,782,782,782,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,62,62,62,62,62,62,62,62,62,62,782,782,2,2,2,782,2,2,2,782,782,2,2,2,2,2,62,62,62,62,62,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1283,1078,791,873,655,412,389,835,292,958,1245,678,1611,1519,2,2,185,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,470,470,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,470,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1685,1610,1447,1093,1255,937,703,431,522,1384,988,988,253,988,2,1892,1892,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,382,382,2,2,2,382,382,2,2,2,2,2,382,382,2,2,2,382,382,2,2,382,382,2,2,382,382,382,2,2,382,382,2,2,382,382,2,2,2,2,2,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,382,2,2,382,382,2,2,382,2,382,382,2,382,382,382,2,2,382,382,382,382,2}, + {1822,589,236,205,797,39,241,1048,181,386,102,102,102,111,1361,1361,1361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,115,2,2,1454,1454,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1454,1454,2,2,2,2,2,2,1454,2,2,1454,1454,2,115,2,566,2,2,1454,2,2,1454,2,2,2,2,2,2,2,2,2,115,115,2,2,2,2,1454,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,2,115,115,2,2,1454,1454,1454,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1454,2,115,2,2,115,1454,1454,115,115,115,115,1454,1454,1454,1454,1454,1454,115,115,115,115,115,115,115,115,115,115,115,1454,115,115,2,115,115,115,115,115,2,2,2,2,115,115,2,1454,115,115,115,115,115,115}, + {1233,843,813,157,396,669,1531,439,640,733,996,996,996,1566,951,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,582,582,59,8,8,83,83,8,966,966,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1342,705,302,595,1200,52,83,647,519,139,103,103,103,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,496,496,496,496,496,2,496,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,496,2,2,2,2,496,496,496,496,2,2,2,2,2,2,496,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,513,2,2,2,2,2,2,1525,2,2,2,2,2,2,2,2,2,496,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1525,2,446,2,2,2,2,2,446,513,513,513,513,2,2,2,513,513,2,513,2,2,2,2,2,2,2,2,2,513,513,513,2,2,2,2,2,2,2,2,513,513}, + {1630,1244,142,767,1299,719,629,1716,419,837,1145,1136,1148,1405,1405,1405,2,2,2,2,2,309,309,309,309,309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1405,2,2,2,2,2,2,2,2,2,2,2,2,309,1405,1405,1405,309,2,1405,1405,2,2,309,309,1405,1405,1405,1405,2,2,2,309,309,309,309,309,309,309,309,309,309,2,2,2,309,1405,1405,1405,1405,1405,1405,1405,2,1405,1405,1405,2,2,2,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,1405,2,1405,1405,1405,1405,1405,1405,2,2,2,309,1405,309,1405,2,1405,1405,1405,1405,1405,1405,2,2,2,2,2,1405,1405,2,1405,309,1405,309,309,2,1405,1405,2,1405,1405,1405,2,309,309,309,309,309,2,309,309,309,309,309,2,2,2,309,309,309,2,309,309,309,309,1405,1405,1405,1405,1405,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1684,561,1405,1118,960,686,1490,1490,992,153,1315,1315,1222,1222,804,1222,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,427,2,2,2,427,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,427,427,427,427,427,427,427,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1636,974,279,419,893,1608,1491,156,1486,115,730,730,863,509,924,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,2,2,2,2,2,271,271,271,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,271,271,2,271,271,271,271,271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1708,237,748,68,1027,153,46,685,1370,1104,1131,1124,838,1289,1289,1288,2,1174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,291,2,2,2,2,1131,1131,1131,291,291,291,291,291,1174,1174,1174,1174,1174,1174,1174,1174,291,291,1131,1131,1131,1131,1131,1131,1174,291,291,291,291,291,291,291,291,2,2,2,291,2,2,291,291,291,291,291,291,291,291,291,2,2,1174,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1174,1174,2,2,1174,291,291,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1318,1234,213,1089,1567,602,1330,404,467,718,249,215,354,177,59,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1446,1446,1446,1446,1446,1446,1446,2,2,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,2,2,2,2,332,332,332,332,332,1446,1446,1446,1446,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,168,168,168,168,168,168,168,2,168,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,1446,332,332,332,332,332,332,332,332,332,332,332,1446,332,1446,1446,168,168,168,599,332,332,332,1446,2,2,168,168,168,168,168,168,168,168,168,168,168,332,332,332,1446,599,599,599,599,599,332,332,332,155,155,155,155,155,155,2,2,2,2,155,1446,168,599,332,332,332,332,332,332,332,599,155,155,155,155,155,155,155,155,2,332,332,332,1446,2,2,155,332,332,332,332,1446,1446,1446,1446,1446,332,2,2,599,599,599,599,599,599,332,332,332,1446,599,599,599,599,599,599,599,599,332,332,332}, + {1732,1771,584,533,297,1056,669,293,146,311,1176,311,590,590,277,2,2,2,2,2,2,2,2,2,539,539,2,2,2,2,2,2,2,1137,1137,1137,142,142,142,142,142,142,142,142,2,2,2,2,2,2,2,2,2,744,2,744,744,744,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1238,1238,2,2,2,2,2,2,1238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1238,1238,1238,1238,1238,1238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1137,1137,2,2,142,1137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1137,1137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,142,142,142,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1137,2,1137,1137}, + {1026,512,1196,394,1259,1313,762,549,311,1576,1576,465,465,140,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,82,2,2,2,2,2,2,2,82,82,82,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1360,383,1470,502,1010,153,1588,619,1246,396,1107,1107,112,423,423,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,202,202,2,2,2,2,2,2,2,2,2,2,2,2,847,847,2,2,2,2,2}, + {1320,1636,858,1210,509,194,1575,154,1424,455,1860,832,1075,581,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,740,2,2,740,740,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,740,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,740,740,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1749,326,968,886,610,1588,1083,976,1551,602,558,245,99,711,485,485,485,485,485,2,2,2,2,2,2,2,2,1234,1234,1234,1234,1234,1059,2,1059,1234,2,4,2,4,2,4,4,8,2,2,2,648,324,780,128,128,554,512,554,8,108,108,108,108,108,108,108,108,108,108,108,108,108,1319,2,1869,1869,1869,2,1319,1319,1319,1319,1319,1319,1319,1319,1319,1319,1869,190,190,190,380,576,9,9,9,811,811,18,1591,1591,144,144,144,18,729,729,729,485,485,485,1869,1869,485,485,485,485,485,485,485,1869,1869,1869,108,1869,1869,1869,108,1869,108,99,549,549,407,549,1628,970,968,968,86,43,43,43,1761,1572,1572,1572,1572,1572,1572,1572,1572,1761,1761,840,1761,1761,99,485,485,485,485,633,1869,1869,1869,1869,1869,485,485,47,47,47,47,47,47,47,786,1319,1319,48,1112,48,48,6,24,24,3,3,3,216,108,108,432,432,432,432,432,1234,353,1234,520,353,353,353,353,520,520,520,485,485,485,1869,1206,1869,1869,1869,1234,485,485,485,485,485,485,485,1131,1869,1869,1869,1869,1869,1869,1869,485,485,748,748,748,748,748,748,748,748,748,748,748,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,296,485}, + {1670,1350,689,1074,437,956,587,642,1154,439,196,1108,1108,1108,990,2,2,2,2,2,1112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,634,634,634,634,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,634,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,634,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,48,48,2,2,48,48,2,48}, + {1747,611,1788,1446,152,1335,710,1040,639,1279,788,788,265,1441,107,2,2,2,2,1441,1441,1441,1441,938,938,938,938,2,2,867,867,1441,1441,938,938,938,938,938,938,1441,2,2,2,2,1441,1463,1441,1441,1441,2,348,867,867,867,1441,867,867,867,1441,1441,2,1441,1441,1441,2,2,2,1441,1441,1441,1441,348,1441,1441,1441,1441,1441,1441,1441,1441,1441,1441,1441,1441,1441,2,2,867,1441,1441,1441,2,2,2,2,2,2,1441,2,2,2,2,2,2,867,867,867,867,867,867,867,1441,1441,1441,1441,1441,1441,1441,938,938,867,867,2,867,867,867,867,1441,867,867,1441,1441,867,2,2,867,867,867,867,867,867,867,867,867,867,867,867,1463,867,867,867,2,2,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,1441,1441,1441,1441,867,867,867,867,867,867,867,867,867,867,867,867,867,867,1441,1441,1441,2,867,867,867,867,867,1441,1441,1441,1441,1441,1441,1441,1441,1441,1441,867,1441,1441,1441,867,867,867,867,867,867,867,867,867,1463,1463,867,867,867,867,867,867,867,867,867,1441,867,867,867,867,867,867,867,867,867,867,867,867,867,1441,867,867,867,867,867,867,867,867,867}, + {1873,890,920,874,591,651,768,478,331,76,760,760,760,760,67,2,2,2,2,1241,1241,1241,1241,2,2,2,2,2,2,2,1241,1241,2,2,2,2,1241,1241,1241,1241,1241,1241,1241,1241,2,2,2,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,2,2,2,2,916,916,2,916,2,916,916,916,2,2,916,916,2,1241,1241,1241,2,2,916,916,916,916,916,2,2,916,916,916,1241,2,2,916,916,916,2,2,2,2,1241,1241,1241,2,2,2,2,2,2,2,2,2,1024,32,16,2,2,2,1483,1483,764,764,764,764,764,764,764,764,764,543,543,79,79,79,79,79,379,379,672,672,672,672,1024,1024,2,2,2,316,1241,1241,2,2,8,8,8,8,8,1241,1241,1241,1241,1241,2,2,2,1241,1995,1995,1995,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,252,2,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,2,2,252,252,252,916,916,2,2,916,916,916,1241,2,916,916,916,916,2,2,2,2,1241,1241,1241,2,2,2,2,298}, + {1682,867,333,102,628,891,654,506,995,684,961,563,1313,1313,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1073,1073,938,938,938,801,2,2,2,938,2,938,938,938,2,2,2,2,2,2,2,801,801,801,2,2,2,2,2,2,801,801,2,2,801,801,801,2,2,801,801,801,801,2,2,2,801,801,801,801,801,801,2,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,1397,1397,1397,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,1397,1397,1397,2,801,801,801,801,801,2,2,2,801,801,801,2,801,2,2,2,2,801,2,801,2,2,2,2,2,2,2,2,1397,1397,1397,2,2,1397,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1397,1397,1397,1397,1397,1397,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1397,1397,1397,1397}, + {1672,1248,429,813,262,92,809,1248,560,1365,1392,753,753,1259,1261,2,2,2,2,2,2,2,2,177,177,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,467,2,2,644,644,177,177,2,2,2,2,2,2,2,2,2,2,2,2,2,2,644,644,467,2,2,644,644,467,644,2,2,2,2,2,467,467,467,467,2,2,2,2,2,2,467,467,467,467,2,644,644,644,2,2,2,467,467,467,467,467,467,467,644,2,644,467,467,467,467,644,2,644,644,467,467,467,644,644,644,644,644,644,644,644,467,2,2,2,467,467,467,644,644,644,644,2,2,2,2,2,2,2,2,2,467,2,467,177,2,2,2,2,644,644,644,644,644,644,644,644,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,644,2,2,2,2,2,2,2}, + {1391,1598,1112,590,797,584,1354,47,1473,1291,1874,48,491,463,990,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,749,749,2,2,2,749,749,749,749,749,749,749,749,2,749,749,749,749,749,749,749,749,749,749,749,749,2,2,749,749,749,749,749,749,749,2,749,749,749,749,2,749,749,749,749,749,749,749,749,749,2,749,749,749,2,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749}, + {1875,1576,924,677,461,134,1525,1619,44,701,299,743,728,791,791,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791,2,359,791,2,791,791,791,2,2,791,2,791,791,791,2,2,2,2,2,2,791,791,791,359,2,2,2,2,2,359,175,175,175,1606,2,791,2,175,2,175,175,175,175,2,175,2,2,2,791,2,2,791,2,2,2,2,2,2,791,2,791,2,2,2,791,791,791,2,791,2,791,791,791,791,2,2,791,2,2,2,2,791,791,791,791,1606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1606,1606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1267,904,1187,1595,765,1451,494,1573,950,909,87,1265,757,1371,1005,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,1725,1725,907,907,907,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,2,1725,1725,1725,1725,568,568,568,1725,1725,1725,1725,1725,568,568,1725,393,568,568,568,568,568,568,568,568,568,568,568,568,568,568,1725,1725,1725,1725,568,568,568,568,568,1725,1725,322,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,1725,2,1725,1725,1725,1725,1725,322,322,322,1725,1725,1725,1725,1725,1725,1725,322,322,322,322,322,322,322,1725,1520,1725,1725,1725,1725,1725,1725,2,2,322,322,322,1725,322,2,2,568,2,2,2,2,2,2,2,1520,1520,1520,1520,1520,2,568,568,568,1520,2,957,957,957,957,957,957,2,2,2,2,957,957,1520,1520,2,2,568,568,568,2,2,2,2,957,2,2,1520,1520,2,1520,393,1520,2,393,393,393,393,393,393,393,393,393,393,1520,2,1520,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1744,1011,935,492,158,1645,795,1056,74,679,367,675,675,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,1229,2,2,2,2,2,2,2,2,2,2,1229,2,2,2,2,2,2,2,2,2,2,2,2,1229,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,2,2,2,2,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,2,2,1229,1229,1229,1229,1229,1229,1229,2,1229,1229,2,1229,1229,2,1229,1229,2,2,1229,1229,1229,1229,1229,1229,2,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,2,2,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229,2,2,2,1229,2,2,2,2,2,2,2,1229,2,2,2,2,2,2,2,2,1229,2,2,2,2,2,1229,1229,2,2,2,1229,1229,2,1229,1229,2,2,1229,1229,1229,2,2,1229,1229,1229,1229,2,1229,1229,2,1229,1229,1229,1229,1229,1229,1229,1229,1229,1229}, + {1360,1091,1478,1237,97,578,1616,494,1422,223,865,1092,359,2,1080,4,2,2,2,688,1965,2,1965,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,201,2,2,2,2,2,2,201,201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,201,201,201,2,2,2,2,2,2,2,2,2,2,201,201,201,688,688,688,2,2,688,688,2,688,688,2,2,2,2,2,2,688,688,201,2,201,1965,201,1965,1965,2,2,2,2,2,2,2,2,2,2,1965,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1750,386,393,840,723,791,1707,1319,1525,83,1302,571,280,2,280,73,2,2,2,1207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1207,1207,1207,2,2,2,2,2,2,1207,1207,2,2,2,2,2,2,2,2,1207,2,1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1988,1988,1988,1988,1988,1988,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1207,2,2,2,2,2,2,2,1207,2,2,2,2,1207,2}, + {1763,1018,1859,432,717,723,874,1294,1050,1800,1237,619,1074,2,10,1237,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1376,652,461,225,361,936,1073,1279,149,619,983,511,1994,2,2,1076,1076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1947,393,495,946,1375,391,2128,582,1143,695,1872,760,760,2,2,1456,974,974,435,974,974,435,974,2,974,974,2,2,2,2,2,2,2,2,2,974,974,974,974,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,974,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,974,974,2,735,735,2,2,2,2,2,974,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,974,974,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,735,735,735,735,735,735,2,2,2,2,2,2,2,2,2,2,2,2,735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,974,2,2,2,974,974,2,2,2,2,2,2,974,2,2,2,2,2,2,2,2,2,735,735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1297,943,275,618,180,460,370,1690,1406,1268,1325,356,428,712,712,712,712,2,2,802,802,2,1235,1235,1235,1235,1235,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1235,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1235,2,2,1235,2,2,2,2,2,2,2,2,2,2,2,1235,1235,2,1235,1235,2,2,1235,2,2,2,2,2,2,2,2,2,2,1235,1235,1235,2,2,2,1235,2,2,2,2,1235,1235,2,2,2,1881,2,2,1235,1235,1235,2,1235,1235,1235,2,2,2,2,2,2,2,2,2,2,2,2,2,1235,1235,1235,2,4,2,2,2,4,2,2,2,2057,213,213,1336,563,426,2057,2057,1339,1339,1339,1339,1339,2,1339,2,2,2,2,2,2,2,2,1235,1235,1235,1235,1235,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1235,1235,2}, + {1766,453,336,145,1519,1013,1243,569,1503,829,1401,1401,812,327,327,327,812,327,327,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,364,2,2,2,2,2,2,2,2,364,364,364,2,2,2,2,2,2,2,2,364,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,364,2,2,2,2,2,327,327,364,364,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,364,2,2,2,2,2,2,2,2,2,2,2,2,2,2,327,2,2,2,2,2,2,2,327,2,2,2,327,327,327,2,2,2,650,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,2,364,327,327,327,327,327,327,2,327,364,364,327,327,327,2,2,327,364,364,327,327}, + {1768,1463,531,1008,95,1677,362,1105,985,177,1682,1682,244,2,2,1234,1041,1041,1041,2,2,2,1041,1041,2,2,2,2,2,2,1894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,370,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1041,1041,2,1041,1041,1041,1041,2,2,2,1041,1041,1041,1041,2136,2,2,115,115,115,115,115,115,2,2,2,2136,115,115,1720,1720,1041,2,2,1041,1041,2136,2136,2,2,1720,1041,1041,1041,2136,1041,1041,2136,2136,2,2,1041,2136,2136,1041,2,2136,2136,2136,2136,2136,2136,2136,2136,2136,2136,2136,2136,2136,1041,1041,1041,1041,2136,2136,1041,1041,115,1041,1041,1041,1041,1041,1041,1041,1041,1041,2,2,115,1041,1041,1041,115,115,1041,1041,2,2,2,1041,1041,1041,1041,115,115,115,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041,2,2,1041,1041,1041,1041,1041,1041,1041,1041,1041,1041,2136,2136,2136,1041,1041,1041,1041,1041,115,115,115,1041,1041,1041,1041,1041,1894,1894,1894,1894,1894,2136,2136,2136,2136,1894,1894,1894,1894,1041,2136,1041,1041,1041,1894}, + {1912,489,572,826,1071,125,1508,49,512,437,20,48,884,1055,1055,1055,1055,1055,1055,1055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,679,2,2,2,2,2,2,679,679,1736,1736,2,2,1736,2,2,2,2,2,2,2,2,2,2,2,2,2,729,2,2067,2067,1055,2,2,2,2,2,2,2,2,2,1055,2,2,2,2,2,2,2,2,2,729,729,2,2,2,2,1842,679,679,2,2,2,2,2,2,2,2,2,1055,729,2,2,729,1055,1055,1055,1055,1055,1055,2,1055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,729,729,729,2,2,2,1055,2,2,2,1055,1055,1055,1055,2,2,1055,2,2,2,2,2,729,2,2,1055,2,1055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252,252,252,252,1238,1238,1238,252,337,337,337,337,337,679,679,2,2,2,337,337,337,2,2,337,337,337,2,2,2,337,1055,1055,630,630,630,630,630,630,630,630,630,630,630,630,337,2,1055,337,337,337,337,1055,337,337,337,1055,580,1055,1055,1055,1055,1055}, + {1780,1739,1357,1684,1586,736,208,966,1691,339,339,128,128,2,2,128,128,128,2,2,128,2,2,2,2,1929,2,2,338,2,2,338,338,2,2,2,2,2,341,2,2,2,2,2,338,2,338,338,2,2,2,2,2,2,338,2,2,2,2,2,2,2,2,338,338,2,2,338,338,2,2,2,338,2,2,338,338,338,338,338,338,2,2,338,338,338,338,338,338,2,2,2,2,2,2,338,338,2,2,2,338,338,338,2,338,338,338,2,338,338,2,338,338,338,338,2,338,338,338,338,338,2,2,2,2,2,2,2,2,2,2,2,338,338,338,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1387,1459,358,1409,1919,917,777,223,313,1847,1012,1024,1024,2,2,2,2,1420,1420,1428,1420,2,1420,1420,2,2,2,1420,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1420,1420,1420,1420,1420,2,1420,1420,1420,1420,1420,1420,1420,1420,1420,1420,2,1420,1420,1420,1420,1420,1420,1420,1420,1420,1420,2,322,322,1420,1420,1420,1420,1420,1420,1420,1420,1420,1420,1420,2,1420,1420,1420,1420,1420,1420,1420,1420,1420,2,1420,1420,1420,1420,1420,1420,322,1420,1420,1420,1420,1420,1420,1420,1420,2,147,147,147,2,828,2,2,2,2,2,2,1420,1420,1420,1420,1420,1420,1420,1420,1420,2,303,303,322,322,322,322,1420,1420,322,303,303,1420,1420,1420,1420,1420,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,303,303,2,2,1420,1420,1420,1420,1420,1420,1420,2,1420,2,2,2,2,2,2,2,2,2,2,1428,2,1420,1420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1420,1420,1420,1420,1420,2,2,2,1428,1428,2,2,2,1420,1420,1428,2,2,1428,2,828,828,2,2,828,828,303,828,828,303,303,303,303,2,2,828,303,303,2,2,303,303,303,303,2,2,303,303}, + {1362,1383,1137,1633,361,1393,1942,68,42,1224,51,592,1318,2,2,2,2,2,1753,560,410,410,410,410,1215,2,1215,1215,1215,1215,1215,1215,1215,482,2,2,482,482,2,2,2,2,2,482,482,482,482,482,2,482,482,482,482,482,2,2,2,2,2,482,482,482,2,2,2,2,2,1215,2,2,1215,1215,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1215,1215,2,1215,1215,2,2,2,2,2,1215,1215,1215,1215,2,2,2,2,2,482,2,482,482,2,2,2,2,2,2,2,2,2,2,2,1215,2,2,2,2,2,2,2,482,2,2,2,2,2,2,2}, + {1289,907,228,665,1695,1735,489,214,762,1777,321,1674,932,2,2,2,2,1358,709,2,1959,1959,372,2,2,372,372,2,2,372,372,372,372,372,2,2,1959,1959,1959,1959,372,1959,1959,2,1959,1959,1959,372,372,372,372,1959,1959,1959,1959,372,372,372,372,1959,1959,1959,372,1959,1959,1959,1959,709,709,709,372,2,2,372,372,1959,1959,1959,1959,611,611,2,2,1959,1959,1959,1959,372,372,372,372,372,1959,1959,1959,1959,709,709,372,709,709,372,372,2,709,2,1959,2,2,709,709,709,709,709,709,709,709,2,372,372,372,372,2,2,2,2,372,2,2,2,372,2,1959,1959,2,2,2,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,2,372,372,372,2,372,372,372,372,372,372,372,372,372,709,709,709,372,372,372,372,372,2,2,1959,1959,2,2,2,2,2,2,372,372,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,372,2,2,2,2,2,2,2,2}, + {1378,680,1117,1367,759,62,319,563,505,1138,1093,345,693,2,2,2,780,780,2,2,2,729,729,729,2,2,2,2,2,2,729,729,729,729,729,2,2,729,729,729,729,729,729,2,2,2,2,2,2,2,2,2,2,2,2,2,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,729,729,2,2,2,2,2,2,2,2,729,2,2,2,2,729,2,2,2,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,729,729,729,729,729,729,729,729,2,2,2,729,729,729,729,729,729,729,729,729,729,729,729,729,2,729,729,729,729,729,729,81,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,2,2,2,2,2,2,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,2,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,2,729,729,729,729,729,81,81,81,81,729,729,729,729,729,729,729,729,729,729}, + {1802,1645,453,1079,604,618,334,855,541,167,37,88,849,2,2,518,518,2,2,530,2,2,2,2,2,2,2,119,119,2,2,2,2,530,2,2,2,2,2,530,530,530,530,530,530,2,2,530,2,2,530,530,530,530,530,530,2,530,530,119,522,530,522,2,530,530,2,2,2,530,530,2,2,119,530,530,530,530,530,530,530,2,2,810,2,810,2,2,2,2,2,2,530,530,530,2,2,2,530,2,530,530,2,2,2,530,530,530,2,2,2,2,2,2,2,530,2,2,2,2,2,2,2,2,2,530,530,530,2,530,530,2,2,2,2,2,2,2,530,530,2,2,2,2,2,2,2,2,2,530,530,530,530,530,530,530,530,530,2,2,2,530,530,530,530,530,2,530,530,2,530,530,2,530,2,2,2,2,530,2,530,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,530,2,530,2,2,2,2,2,2,2,2,2,530,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,530,2,530,530,530,530,530,530,2,2,2,2,2,2,2,2,2,2,2,2}, + {1275,1612,143,1586,502,987,555,436,2236,1826,494,494,358,2,2,213,2,2,2,2,2,2,1585,1585,1585,1585,1585,1585,1585,1585,1585,1585,2,1151,1151,1151,1151,1151,2,2,2,2,1151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,425,1151,1151,2,2,2,2,2,425,425,425,425,425,2,2,2,2,2,1151,2,2,2,2,1151,2,2,2,2,2,2,425,2,2,2,2,2,1151,2,2,2,2,2,2,2,1151,1151,1151,1151,1151,1151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1151,2,2,1151,2,2,2,2,2,2,2,2,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,1151,2,1151,1151,1151,1151,1151,1151}, + {1277,1672,348,357,66,728,79,1416,300,1527,1885,439,439,2,2,232,1281,2,2,2,2,2,2,2,2,2,2,2,2,157,2,2,2,1281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,2,2,1165,1165,1165,1165,1165,1165,1165,1165,2,1165,1165,1165,1165,1165,1165,1165,236,1165,1165,1165,1165,1165,1165,1165,1165,1281,1165,1281,1281,1281,1281,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1268,1268,1268,1281,1268,1165,1165,1165,1165,1165,1281,1281,1281,1281,1281,1281,1165,1165,1281,1281,1165,1281,1165,1165,1165,1165,1165,1281,1281,1165,1165,1281,1281,1165,1165,1165,1165,1281,1281,1281,1281,1281,1281,1165,1165,1165,1165,1165,1165,1281,1281,1281,1281,1281,1281,1281,1281,1281,1165,1281,1281,1281,1281,1165,1165,1165,1165}, + {1322,512,560,432,365,87,1835,1137,515,1271,1739,309,309,1229,1229,1229,2,2,2,2,2,2,2,2,416,416,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,416,416,416,2,416,2,2,2,2,2,2,2,2,2,2,2,416,416,416,416,416,416,416,416,416,416,416,416,14,276,276,14,2,2,2,512,512,1334,1781,1781,137,1781,1781,137,612,612,1781,1781,1781,416,416,416,416,612,2,612,738,2,738,416,416,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,283,283,283,283,2,283,283}, + {1758,835,287,888,391,875,1834,516,1432,1171,98,408,302,976,976,1963,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1695,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1444,394,1613,796,645,1406,186,158,402,1364,314,588,606,2,577,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1845,1845,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,1845,2,2,2,2,2,872,2,2,2,2,2,2,2,69,2,2,2,69,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1845,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1845,1845,2,2,1845,1056,2,981,1845,981,2,2,981,2,2,2,981,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,981,2,2,2,2,2,2,2,2,2,2}, + {1337,1391,137,371,165,87,1026,20,419,99,572,572,918,854,918,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1150,2,2,1150,1150,1150,1150,1150,2,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,2,2,1150,1150,1150,1150,2,1150,2,2,2,2,1150,1150,1150,2,1150,1150,2,1150,1150,1150,2,2,2,2,2,1150,1150,2,1150,1150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1323,589,526,1555,1636,1172,86,42,1545,57,627,1769,1769,2,867,343,2,2,2,2,2,2,2,724,2,2,2,2,724,724,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,724,724,724,724,724,2,2,724,724,2,724,724,2,724,724,724,724,724,724,724,724,2,2,2,2,2,2,2,2,724,2,2,2,2,2,2,398,2,724,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,398,398,398,398,398,724,724,724,724,724,398,398,398,398,398,398,398,398,398,398,724,398,398,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,2,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,2,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,724,398,398,398,398,398,2,398,398,398,398,398,398,398,398,398,398,398,398,398}, + {1323,1647,384,301,270,549,1098,1144,1066,55,88,1805,683,2,945,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,2,2,1858,1858,2,2,2,2,1858,1858,1858,1858,1858,1858,1858,1858,1858,2,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,1858,2,2,1858,1858,1858,1858,1858,1858,1858,1858,1858,2,2,2,2,2,2,1858,1858,2,1858,2,2,2,2,1858,1858,2,2,1858,1858,1858,1858,1858,1858,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1858,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1325,1300,1353,1575,33,730,46,1476,84,84,189,457,352,2,1479,2,2,2,2,2,2,2,2,2,2,2,2,1565,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1181,1181,1181,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1181,1181,2,2,2,2,2,1181,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1419,590,223,345,1505,1226,1788,848,671,731,931,593,723,723,723,2,2,2,2,2,2,2,2,2,2,2,879,879,879,879,879,879,879,879,879,879,879,2,2,879,879,879,879,879,879,879,879,879,879,2,2,2,2,2,2,2,2,2,2,2,2,791,2,2,2,2,2,2,2,2,2,2,2,2,2,879,879,879,879,879,2,2,879,879,879,879,879,879,879,879,2,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,879,879,879,879,879,879,418,418,418,2,418,2,2,2,879,2,2,2,2,2,2,2,2,879,417,417,417,417,417,417,879,2,2,2,2,2,2,2,2,1377,1377,2,2,1377,2,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,418,418,2,2,2,879,2,879,879,2,2,791,2,2,2,418,2,2,879,879,879,2,2,2,2,2,2,2,879,2,2,879,2,2,2,2,879,879,879,2,2,2,2,2,2,2,2,2,2,2,2,418,879,418}, + {1327,1075,539,1017,926,350,1102,236,494,1268,286,286,1293,267,227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,1533,2,2,1533,1533,2,2,1533,2,2,2,2,2,2,2,2,2,1533,1533,2,1533,1533,1533,1533,2,2,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,2,1533,2,2,2,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,2,1533,1533,1533,1533,1533,1533,1533,2,2,2,2,2,2,2,2,1533,1533,2,2,1533,2,2,2,1533,2,2,2,2,2,2,2,2,2,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,2,2,1533,1533,1533,2,1533,1533,1533,49,49,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,2,2,1533,1533,1533,1533,1533,2,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,2,1533,2,2,2,2,2,2,2,2,2,2,1533,2,2,2,2}, + {1472,661,1538,487,94,2209,563,138,881,1735,718,203,1382,1473,1473,1473,1473,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1159,1159,2,1159,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1159,2,2,2,1159,1159,1159,2,2,2,2,1159,1159,2,2,2,2,2,1159,1159,2,2,1159,1159,1159,1159,2,2,1159,1159,1159,1159,1159,2,2,388,388,2,2,2,2,2,2,388,388,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,388,388,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1343,365,790,1047,983,1015,918,1469,1416,126,1238,1238,1238,1238,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1717,1717,1717,1717,1717,1717,2,2,2,1056,2,1056,2,2,2,2,2,2,1056,1056,1056,1056,1056,1056,1056,1056,1056,1056,1056,1056,2,2,2,2,2,2,2,2,2,827,827,827,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2,2,1422,2,1422,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1422,1422,1422,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1422,1422,1422,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1422,85,85,85,85,2,1422}, + {1413,766,349,1471,45,625,733,1082,170,58,1268,207,1081,1081,1081,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1111,1111,1111,1111,2,2,1111,2,2,2,2,2,2,2,1111,2,2,2,2,2,2,255,2,1111,1111,1111,1111,2,2,2,2,2,2,1111,1111,1111,1111,1111,1111,1111,1111,1111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1111,1111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1111,1111,1111,1111,2,2,2,2,2,2,2,1111,2,2,1111,2,2,1111,1111,1111,1111,2,2,2,2,2,2,2,2,2,1111,2,2,2,2,2,2,2,2,1111,2,2,1111,1111,2,2,2,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,2,2,2}, + {1861,1487,419,97,799,1791,458,1029,370,627,57,414,414,1540,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1881,716,268,387,2138,1212,999,408,1363,434,1429,1429,1648,1648,1007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,316,316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,316,316,316,2,316,316,316,316,316,316,316,316,2,2,316,316,316,316,2,316,2,2,2,2,2,2,2,2,2,2,316,2,2,316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,316,2,2,2,2,2,2,2,2,2,2,2,316,316,316,316,316,2,2,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,2,316,316,316,316,316,316}, + {1480,1131,1089,1688,340,962,505,1816,139,44,1350,403,1385,1996,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2018,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1868,650,1146,1690,948,43,497,692,1628,1302,1302,108,462,731,731,2,2,2,2,2,2,2,185,185,185,2,2,2,2,2,2,2,921,921,2,921,921,2,2,2,921,921,2,2,921,921,921,2,2,462,462,185,185,921,185,185,185,185,185,2,185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,462,462,462,462,2,462,462,462,2,462,462,462,2,2,2,2,185,185,2,2,2,2,2,2,2,2,2,2,2,2,2,921,921,2,2,2,2,921,921,185,185,185,185,185,2,921,921,2,921,185,921,921,921,2,2,921,921,185,185,921,921,921,2,2,921,921,921,2,921,921,921,185,185,185,921,921,921,921,2,2,2,2,2,2,921,921,921,921,2,2,2,2,921,2,2,2,2,2,2,2,2,2,2,2,921,921,2,921,2,2,2,2,2,921,2,2,2,921,921,2,2,921,921,2,2,2,921,2,2,2,2,2,921,921,921,921,921,921,2,2,2,2,2,2,2,2,2,921,2,2,2,2,2,2,2,2,921,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,921,2,2,2,2}, + {2023,1204,531,733,1054,618,668,363,783,218,1302,2055,559,2055,2055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,131,131,131,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1745,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1328,601,601,617,554,467,391,1545,162,1361,807,1565,1565,243,1344,2,725,510,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1808,1525,1129,652,1195,329,1410,558,1322,911,161,536,737,94,306,2,2,2,2,2,2,2,2,2,541,541,541,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,234,234,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,541,541,541,2,541,541,2,2,541,541,541,541,541,2,541,541,541,541,541,541,541,2,2,2,2,2,541,541,2,2,2,2,541,2,2,541,541,2,541,541,541,541,541,2,2,2,2,2,2,2,2,541,541,541,541,541,541,541,2,2,2,2,2,2,2,2,2,541,541,2,2,2,2,2,2,2,2,2,2,2,2,541,541,2,2,2,2,2,2,2,2,541,541,541,2,2,2,2,2,541,541,541,541,541,2,541,2,2,2,541,541,541,541,2,2,2,2,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2,2,541,541,541,2,541,541,541,541,541,541,541,541,541,541,541,2,541,541,2,2,2,2,541,541,2,541,541,541,2,541,541,541}, + {1911,1338,639,1106,854,128,19,1353,847,253,618,517,2054,2054,93,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1554,2,2,2,2,2,2,2,1554,1554,86,86,86,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,86,2,1554,1554,1554,1554,1554,1554,1554,1554,2,1554,1554,1554,2,2,2,2,2,2,2,2,1554,1554,2,2,2,1554,2,2,1554,1554,1554,2,2,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,86,86,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,86,86,1554,1554,2,86,86}, + {1825,850,180,1483,864,953,50,81,106,432,1372,1372,1212,10,10,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2024,488,1184,1484,105,151,788,1657,568,353,577,461,425,425,784,425,461,461,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,2,879,2,2,2,2,2,2,2,2,2,2,2,2,2,784,2,2,2,2,2,2,784,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1892,441,977,228,1252,604,735,136,889,878,1319,1319,2127,2127,1963,367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1289,1289,1289,1289,1289,2,348,348,2,2,2,2,348,2,2,2,2,2,2,348,348,348,348,348,1289,1289,348,348,348,348,348,348,348,348,2,1289,1289,348,348,348,348,348,348,348,348,348,348,348,1289,1289,1289,2,2,2,2,1289,1289,2,2,2,2,348,2,348,348,348,2,920,2,2,2,348,348,920,1289,593,348,348,348,348,348,348,348,348,348,348,920,920,920,920,920,657,920,920,920,920,920,2,2,593,593,593,2,593,2,593,593,593,593,593,593,593,593,920,920,920,348,920,920,920,920,920,920,920,348,348,2,2,920,920,920,2,2,920,920,2,920,1289,1289,1289,920,1289,2,593,593,920,920,920,2,920,920,920,2,2,920,593,593,2,593,593,593,593,593,593,2,920,920,920,920,593,2,2,593,593,593,593,593,593,593,593,2,593,593,920,593,593,348,348,593,348,2,2,348,348,2,593,2,2,593,2,348,2,2,920,920,593,2,593,593,593}, + {1912,769,703,1758,884,671,932,49,1943,138,480,1416,197,2211,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,693,693,693,693,693,2,693,693,2,2,693,2,2,693,693,2,2,2,2,693,693,2,693,693,693,693,693,693,693,2,2,693,693,693,693,2,2,693,2,2,693,2,693,693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,693,2,2,2,2,2,2,2,2,2,693,693,693,693,693,693,693,693,693,693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,693,693,693,693,2,2}, + {1820,1553,536,1351,425,1268,227,1742,429,348,1397,552,1151,1151,2,180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1475,485,218,1200,613,489,1861,634,156,2299,950,1221,530,530,530,530,530,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,239,239,2,2,2,2,2,2,2,67,239,239,239,239,239,2,2,239,239,239,239,239,239,239,239,239,2,239,2,239,239,239,239,2,2,2,239,239,239,239,239,2,2,2,2,2,2,2,2,2,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,2,2,2,2,2,292,292,292,239,2,239,239,239,292,292,292,292,239,292,292,403,403,239,239,239,239,239,239,239,239,239,292,292,292,292,292,292,292,292,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,67,239,239,239,239,239,239,239,239,239,239,239,239,500,500,67,239,239,239,239,239,239,239,500,500,500,500,239,239,239,239,292,239,239,239,239,239,239,239,239,239,239,403,239,239,403,403,403,403,403,403,403,403,403,403,403,239,239,239,239,239,239,239}, + {1453,1044,556,833,305,1493,989,1158,726,1790,532,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,259,2,2,2,2,2,420,2,2,2,2,420,420,2,259,259,2,2,2,420,420,420,2,2,2,2,2,2,420,420,420,420,420,420,420,420,420,259,2,420,420,420,420,420,420,420,420,420,2,420,420,2,420,420,420,2,420,259,259,259,420,420,420,420,2,420,2,2,2,2,2,2,2,420,420,420,420,420,420,420,420,420,420,420,420,420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,420,420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,420,420,420,2,2,259,259,2,420,420,420,420,420,420,2,2,2,420,420,420,420,420,420,420,420,420,420,420,259,259,2,420,420,2,2,2,420,420,420,420,420,420,420,420,420,420,259,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420}, + {1898,787,769,1166,799,479,1066,390,821,1061,201,201,1339,703,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,659,659,659,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,659,659,2,2,659,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,420,420,659,659,2,2,2,420,420,420,420,420,420,420,420,420,2,659,2,2,2,2,2,2,659,659,659,2,420,2,2,2,420,420,2,420,2,2,2,2,659,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,659,659,659,659,659,659,659,659,659,659,2,2,2,2,2,420,2,420,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2059,592,492,973,137,1331,392,334,635,1480,2254,1796,1796,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,377,2,2,2,2,2,2,2,2,2,2,2,377,377,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,377,377,377,377,377,377,377,377,377,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,377,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,377,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1460,986,709,268,755,824,83,893,115,656,2071,1323,1001,144,2,2,2,2,2,2,2,2,1527,1527,1527,1527,1527,1527,1527,2,801,801,2,2,801,1527,1527,1527,801,801,801,801,801,801,2,2,2,2,2,2,2,1527,1527,2,801,1527,2,2,2,2,2,2,2,1527,1292,1292,1527,1527,1527,1527,1527,2,1527,1527,2,2,2,1527,1527,801,2,2,1527,1527,1527,1527,1527,1527,1527,1527,801,801,801,801,1527,801,1527,1527,1527,1527,1527,1527,1527,1527,801,801,1527,1527,1527,1527,1527,1527,1527,1527,1527,801,2,2,2,1527,1527,801,801,2,1527,1527,1527,801,2,2,1292,2,801,2,801,801,2,801,801,2,2,1292,1292,2,2,2,801,2,2,2,2,801,801,2,2,2,801,801,801,2,2,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,1292,801,801,801,801,801,801,2,2,2,2,2,2,2,2,2,801,801,2,2,2,801,2,2,2,2,2,2,2,2,1480,1480,2,2,1480,1480,1480,2,1480,1480,1480,1480,2,2,2,2,2,2,2,2,2,2,731,731,2,2,801,801,1292,1292,1292,2,2,1292,1292,2,1292,1292,2,2,2}, + {1913,1311,498,499,287,603,677,1662,753,113,762,966,966,966,2,381,762,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,50,2,2,2,2,2,2,2,50,50,50,50,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,50,50,50,50,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,50,50,50,50,50,50,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1850,1476,792,840,2037,229,1578,526,431,1485,1450,1001,1001,1001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1595,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1595,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,618,2,2,2,2,618,618,618,618,1595,2,618,2,2,1595,1595,2,2,2,1595,618,2,618,2,2,618,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,618,2}, + {2078,1296,1018,1176,881,1169,642,1221,948,1462,519,1584,374,374,2,2,181,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1653,1653,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,635,2,2,2,2,2,2,2,2,2,2,2,2,2,1653,2,2,2,2,2,2,2,2,2,2,2,2,635,635,635,635,409,635,635,635,635,2,635,409,409,409,2,2,2,2,2,2,2,2,2,2,635,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1653,1653,2,2,2,2,2,409,2,409,409,409,1653,1653,1653,1653,2,2,2,409,2,1653,1653,1653,1653,1653,1653,2,2,2,2,2,2,2,2,2,2,2,1653,2,1653,1653,1653,2,1653,409,409,409,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,1653,2,2,2,1653,1653,1653,1653,2,1653}, + {2103,1065,290,608,2281,338,259,1160,1355,1696,876,1023,1023,489,2,2,1615,2,2,2,2,2,2,2,2,2,2,2,2,2,1615,1615,1615,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1615,1615,1615,1615,2,1615,1615,2,1615,1615,2,2,1615,1615,1615,2,1615,1615,2,2,1615,1615,1615,2,1615,1615,1615,2,2,2,2,1615,1615,2,2,2,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,2,2,1615,1615,1615,2,2,2,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,2,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,2,2,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615,1615}, + {1922,1383,813,346,1247,666,1931,1111,2042,79,682,501,1349,1930,2,2,681,681,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1922,542,1739,625,88,1376,259,49,338,318,505,788,1314,657,2,2,2,1314,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,849,2,849,2,2,2,2,2,2,2,2,2,2,2,2,2,849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,849,849,849,2,2,2,2,2,849,849,2,849,2,2,2,2,2,2,2,2,2,2,2,849,2,849,2,2,2,2,2,2,2,2,2,2,1350,1350,1350,1350,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,849,849,2,2,2,2,2,2,849,2,2,849,2,2,2011,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1948,1530,576,582,1069,119,2131,41,1178,1677,1677,1677,325,346,2,2,2,2,2,2,1401,2,33,2,2,2,2,2,2,71,71,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,71,71,2,71,71,71,71,71,2,2,2,2,2,2,2,2,2,2,2,2,65,2,71,71,2,2,2,2,2,2,2,2,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,71,71,2,2,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,71,71,71,188,188,2,188,188,71,71,71,71,188,71,71,2,188,188,2,2,2}, + {1928,1111,168,1252,1467,1083,1927,603,1278,714,1027,50,751,1970,2,2,2,2,621,2,100,2,2,10,10,2,2,2,2,793,793,793,793,793,2,2,2,793,793,2,2,793,2,2,2,621,621,2,621,621,2,2,2,2,793,793,2,793,793,793,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,793,2,2,793,2,2,2,621,621,621,621,621,621,793,793,621,621,621,621,621,2,2,793,2,2,2,2,2,793,2,2,793,2,2,793,2,793,793,793,793,793,2,2,2,2,2,2,2,2,2,2,793,2,2,2,2,2,2,2,793,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,793,793,2,2,2,2,2,2,2,2,2,2,2,793,2,2,2,793,793,793,793,793,793,793,2,793,793,793,2,2,2,2,2,2,2,2,793,2,2,2,2,2,793,793,793,793,793,2,2,793,793,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,793,793,793,2,2,2,2,793,793,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,793,2,2,2,2,2,2,2,2,2}, + {1394,896,674,2350,1375,1599,1858,135,762,722,628,685,705,28,2,2,2,2,2,2,2,2,2,2,2,855,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,855,855,855,855,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,855,2,2,2,2,855,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,855,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1540,791,518,419,1130,1068,299,1386,1378,134,859,859,71,162,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1719,1719,1719,2,1719,1719,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1832,471,500,447,1682,306,1146,545,1090,1787,1887,1039,430,321,1334,2,1395,2,2,2,2,2,2,2,2,2,2,559,2,2,559,2,2,2,2,2,1395,1395,2,1395,1395,2,766,2,2,2,2,1395,1395,1395,1395,2,2,559,2,2,1395,1395,1395,1395,1395,2,2,2,559,559,559,1395,1395,1395,1395,559,1395,2,559,559,559,559,559,559,559,559,559,559,1395,1395,1395,2,559,559,559,559,559,1395,1395,1395,1395,2,2,801,1395,1395,2,2,559,559,559,1395,1395,559,559,559,559,2,801,801,801,1395,801,1395,1395,1395,1395,1395,1395,1395,1395,1395,2,2,1395,559,559,559,2122,2,559,559,559,559,559,559,559,559,2,2,559,559,559,559,559,559,559,631,2122,631,631,1395,1395,559,559,2122,1395,2122,559,559,559,801,801,801,801,801,801,2,559,559,559,559,2122,1395,559,559,559,559,559,559,1395,2122,559,2,2,2,1395,1395,2,2,1395,1395,559,559,559,559,2,559,559,559,1395,1395,559,559,2122,559,559,2122,2122,2122,2122,559,559,559,559,559,559,559,559,559,559,559,1395,1395,559,1524,1524,1524,1524,1524,1524,559,1524,1524,1524,1524,1524,1524,1524,1524,1524,2,559,1395,1395,1395,1395,1395,1395,2}, + {2107,709,828,154,542,184,1094,1665,307,1549,177,2007,85,773,2,2,2,2,2,2,2,2,2,2,2,697,2,2,2,2,697,2,697,697,697,2,2,2,2,697,697,697,2,697,697,697,697,2,2,697,697,2,2,2,697,697,2,697,697,2,697,697,1163,1163,2,2,1163,1163,1163,697,697,697,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,691,2,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,697,2,697,697,697,697,2,2,2,697,2}, + {1882,1310,382,2087,769,1172,349,961,1479,76,1156,2264,1041,527,2,2,2,2,2,2,2,2,2,2,2,591,2,2,2,2,2,2,2,2,2,2,325,325,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,2,591,591,591,591,591,591,591,2,591,591,591,591,591,2,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,597,597,2,597,597,597,2,597,597,2,591,591,591,2,2,591,2,2,2,2,2,2,2,2,597,597,597,2,2,2,2,2,2,2,591,2,2,2,2,2,2,2,2,2,2,2,597,2,597,2,2,2,2,2,2,2,2,2,2,591,591,591,2,591,591,591,591,591,591,2,591,591,591,591,591,2,591,591,591,591,591,591,591,2,2,591,2,591,2,2,2,2,2,2,2,2,2,2,2,2,383,383,2,2,2,591,591,597,2,2,597,597,2,2,2,2,2,2,2,2,2,2,2,2,591,2,2,2,2,2,2,2,597,597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1977,1218,244,365,576,666,761,238,629,913,1907,986,1351,986,704,1257,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,163,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1508,1501,1057,166,882,1562,90,614,165,1870,1370,1158,783,1230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,157,2,2,2,2,2,2,2,2,2,1336,1336,1336,2,2,2,2,2,1336,1336,1336,1336,1336,2,1336,2,1336,1336,2,1336,1336,2,1336,1336,2,2,2,1336,1336,2,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,2,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336,1336}, + {1889,1210,1246,1326,668,1199,77,565,1277,1607,874,1433,1433,77,2,681,2,2,2,2,2,2,2,679,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,432,432,432,432,432,432,2,2,477,477,477,477,477,432,493,432,432,432,904,904,904,788,788,2,432,432,432,432,432,432,432,432,432,477,477,477,788,788,788,788,788,788,788,379,788,788,788,788,788,788,788,788,788,788,788,52,52,379,379,379,788,52,52,788,788,788,788,788,788,788,788,432,477,432,52,52,52,379,379,379,2,493,493,493,788,788,432,432,432,432,477,477,379,379,379,379,379,379,379,379,146,432,432,432,788,788,788,624,379,624,624,624,624,624,624,624,2,2,788,379,379,379,379,493,493,493,379,379,493,499,499,499,499,499,499,2,493,2,788,2,2,2,2,2,432,2,2,2,2,477,2,2,2,2,2,2,2,385,2,689,689,1713,1713,1713,1713,1713,1713,1713,1713,6,36,1713,2,2,1024,1024,137,2041,2041,2041,226,226,1258,1258,36,36,1642,904,748,379,624,624,624,379,379,379,379,379,379,379,379,379,379,379,379,379,2,2,2,2,624,624,624,624,493,379,379}, + {1496,1912,1291,1053,510,2322,1048,1530,2223,673,894,594,628,332,2,2,2,2,2,295,295,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,295,295,2,2,2,2,295,295,295,295,295,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,295,2,2,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1520,1107,1082,687,484,1732,676,1595,467,653,1091,428,2113,332,332,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,2,383,383,383,383,2,2,383,383,383,383,383,383,383,2,383,383,383,383,2,2,2,383,383,383,383,383,2,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,2,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,2,1247,1247,1247,1247,1247,1247,1247,1247,1247,2,2,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,2,2,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,1247,383,383,383,383,1247,383,383,383,383,383,383,383,383,383,1247,383,383,217,217,217,1247,383,1247,1247,1070,1247,1247,1247,1247,1247,217,217,1247,383,383,383,217,383,383,2,1247,383,383}, + {1905,612,920,848,562,2032,230,1305,1073,851,731,798,798,357,516,2,2,2,2,2,2,2,2,1465,1465,373,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,454,2,2,8,8,373,2,2,1816,78,454,454,649,312,312,1465,1465,312,373,454,373,1465,1465,1465,373,373,373,1465,1465,1465,1465,373,373,1465,373,373,373,373,1465,1465,373,373,373,1465,1465,1465,1465,1465,1465,1465,1465,373,1465,1465,1465,1465,1465,1465,1465,1006,1492,57,57,57,922,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,373,373,315,315,315,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,373,373,373,373,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,373,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1465,1630,1492,57,57,57,922,1006,1630,1630,1630,1630,1630,1630,1630,373,1630,1630,1630,1630,1630,1630,373,1630,315,315,315,1630,1465,1465,1465,1465,1465,1465,1465,1465,315,1465}, + {1428,1062,1016,75,297,1130,533,768,464,753,48,1510,1510,418,375,1626,2,221,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,280,2,2,2,2,2,2,2,2,2,2,283,283,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,221,280,221,221,2,2,280,2,2,2,2,280,280,2,283,2,283,2,2,2,2,2,2,2,2,2,2,283,2,2,2,2,2,2,2,2,283,283,283,283,280,280,1449,2,2,2,2,2,2,2,283,283,2,283,283,2,283,2,2,2,2,2,2,2,283,283,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,2,2,283,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,283,2,2,283,1449,1449,1449,1449,1449,2,2,2,1449,1449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1396,729,1710,337,371,489,1341,2117,132,1870,853,853,408,1079,328,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,999,2,2,999,999,2,2,999,999,999,999,999,999,999,547,547,999,999,999,999,2,2,2,2,2,2,999,999,999,999,999,999,999,999,999,999,999,999,999,999,2,2,2,2,547,547,547,547,494,999,999,547,547,999,999,999,2,2,999,999,999,999,999,999,999,2,2,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,2,2,2,2,2,494,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,999,2,2,2,2,2,2,2,999,999,999,999,999,999,494,494,2,494,999,999,999,2,999,999,2,2,999,999,2,999,2,2,999,999,999,999,999,999,999,999,2,999,999,2,2,999,999,999,999,999,999,999,999,999,999,2,2,999,999,999,999,999,2,999,999,2,2,2,2,494,2,494,2,494,494,494,999,999,999,999,999,999,999}, + {1978,1051,977,588,1423,1001,508,409,825,497,659,1063,384,463,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,2,2,2,2,2,2,765,765,765,765,765,765,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,765,2,2,765,2,2,2,2,2,2,2,2,765,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1534,854,2007,1207,947,1773,1571,1505,909,1471,1655,1655,2334,1327,409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1548,1548,2,2,2,2,2,2,2,2,2,2,1548,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1548,2,2,2,2,1548,1548,1548,1548,1548,1548,2,2,2,2,2,2,2,2,2,2,2,2,1548,1548,1548,2,1548,1548,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1548,1548,1548,1548,1548,2,2,2,1548,2,2,2,2,2,2,2,2,2,2,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,2,2,2,2,2,2}, + {1520,1595,1238,1238,131,969,1745,1121,822,865,716,571,571,1679,1679,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,992,992,992,992,992,992,992,992,2,2,992,992,992,2,992,992,992,1605,1605,2,2,2,2,2,992,992,992,992,992,992,992,992,992,992,992,992,2,992,1605,1605,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,2,2,992,992,992,197,2,2,2,197,197,992,992,197,197,197,992,992,70,197,2,992,992,992,992,197,197,197,197,197,197,197,197,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,70,70,992,70,70,70,70,70,70,70,70,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,1620,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,70,992,992,992,992,197,197,197,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,992,1605,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263}, + {2157,2106,679,238,378,49,1101,588,811,1313,1556,2301,475,812,812,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,900,2,2,2,2,2,2,2,900,900,2,2,2,2,2,900,369,369,369,369,369,900,900,900,900,900,900,2,1429,1429,1429,900,900,2,2,900,900,900,900,2,900,900,900,900,900,900,900,900,1429,2,2,1429,1429,2,2,2,900,2,2,2,2,2,2,1429,2,1429,1141,1429,900,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,432,900,900,2,2,2,432,900,900,900,900,2,2,900,900,2,2,2,2,2,2,2,900,2,2,2,900,2,2,2,2,900,2,2,2,2,2,2,2,2,2,900,900,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,397,397,397,397,397,397,866,27,27,620,815,815,815,900,900,2,125,462,900,2,2,2,2,125,125,125,2,125,125,125,900,900,462,462,462,2,462,2,2}, + {2187,1515,549,1416,1073,1613,47,1046,390,252,1214,1404,1404,933,1013,2,2,2,1025,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2145,1069,662,709,737,1141,1737,827,1384,1628,107,107,1032,277,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1505,2,2,2,1505,2,1505,2,2,2,2,2,2,2,2,2,1505,1505,2,2,2,2,2,2,2,2,2,1505,2,1505,2,1505,2,1505,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1505,2,1505,1505,2,2,2,2,2,2,2,2,2,2,1505,1505,2,2,2,2,2,2,2,2,2,2,2,2,2,1505,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1505,2,1505,1505,2,2,2,2,2,1505,1505,1505,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1505,1505,489,1505,1505,1505,1505,1505,2,2,2,2,2,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,1505,2,2,2,2,1505,1505}, + {1547,928,196,464,373,1696,1395,1546,967,735,1126,878,878,919,358,2,2,2,2,2,2,2,2,2,2,558,2,2,558,2,2,2,1254,2,2,558,1254,1254,1254,2,558,558,2,2,558,558,1254,1254,2,2,2,558,558,558,558,1338,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,558,558,558,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,558,2,2,558,558,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,558,2,558,558,558,2,2,2,2,558}, + {2173,1379,155,393,1578,610,1911,899,697,58,185,597,597,1249,1369,2,2,2,2,1369,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1016,2,2,2,2,2,2,2,1016,2,2,2,2,2,1016,2,2,1016,1016,1016,2,2,2,1016,2,2,2,2,2,2,2,2,2,2,2,2,2,1016,1016,2,2,2,2,1016,1016,1016,1016,2,2,2,1016,1016,1016,1016,1016,1016,1016,1016,2,2,2,1016,1016,1016,1529,1016,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1016,1529,1529,2,1529,1529,1529,1529,1016,1016,1016,35,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,2,2,1016,1016,1016,1016,1016,1016,1016,2,1016,1016,1016,1016,1016,1016,2,2,2,1016,1016,1016,1016,1016,1016,1016,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1016,2,2,2,2,306,1016,1016,1016,2,1016,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1016,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1016,2,1016,1016,2,2,2,1016,2,2,2,2,2,2,2,2,2,2,2,1016,1016,2,2}, + {1413,1589,1603,2268,520,333,1416,859,1619,867,1154,512,1291,413,413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,262,262,262,2,2,1621,2,2,2,2,2,262,2,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1621,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1274,1274,2,2,2,262,2,2,2,262,262,262,262,2,2,2,1274,1274,1274,2,2,2,2,2,2,2,2,2,2,2,2,2,262,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1823,1698,1268,623,583,1932,1674,522,529,1862,1281,246,989,246,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,601,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,601,601,601,601,2,2,801,801,801,2,2,2,2,2,2,2,993,993,993,993,2,2,2,2,993,993,993,993,993,2,2,601,993,993,993,993,993,993,993,993,601,2,601,601,2,601,601,601,601,993,993,993,993,993,601,2,601,993,993,601,601,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1017,993,993,993,993,993,601,601,2,2,2,2,601,601,601,601,601,601,601,601,601,601,601,601,601,601,2,2,2,801,801,801,801,801,801,2,801,2,2,2,2,2,2,2,2,993,2,2,993,2,2,2,2,993,993,801,801,801,2,2,801,601,801,801,801,801,801,801,801,801,801,601,601,801,801,801,801,801,801,601,2,801,801,801,801,801,801,801,801,801,801,801,601,801,801,801,801,801,801,801,801,801,801,801,801,801,601,801,801,801,801,801,801,801,801,801,601,601,801,801,801}, + {2212,842,1249,1202,1030,949,809,639,327,878,1241,1241,98,1542,1542,2,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,1591,2,2,2,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,2,1591,1591,2,1591,1591,1591,2,2,2,2,2,1591,1591,1591,2,2,1591,2,2,2,2,1591,1591,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,1591,2,2,2,2,2,2,2,2,2,2,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1559,992,174,1313,612,1487,1487,461,702,37,1660,839,2,95,1628,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1029,1029,1029,2,2,2,2,2,2,2,2,2,2,2,1029,1029,2,2,2,2,2,2,2,2,2,2,2,2,1029,1029,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,89,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,2,1029,1029,1029,2,2,1029,1029,2,2,2,2,2,89,89,2,2,2,1029,2,2,1029,2,2,2,2,2,2,1029,1029,89,89,1029,1029,1029,1029,1029,1029}, + {2066,1719,710,1294,2041,377,1005,690,132,756,1618,187,187,726,187,615,615,2,2,2,2,851,2,2,2,2,2,2,2,2,2,744,744,2,2,2,744,2,2,2,2,2,2,2,2,2,2,2,2,2,2,744,744,2,2,653,653,653,2,2,744,744,653,653,653,2,2,653,744,2,653,653,653,2,653,744,653,653,653,653,744,653,2,744,2,2,2,2,2,2,2,2,2,744,744,744,744,744,744,653,744,744,2,653,653,653,2,2,744,744,744,2,2,653,653,2,2,1486,744,744,2,2,2,744,653,653,2,2,653,653,2,2,744,744,744,744,744,744,744,744,744,2,2,2,2,2,2,2,653,653,744,653,653,653,653,653,2,2,2,2,2,2,2,2,2,2,2,851,851,2,2,2,2,2,744,2,653,2,653,2,2,2,653,653,744,744,635,2,1486,1486,2,1486,1486,1486,1486,1486,1486,1486,2,653,653,2,2,2,653,653,653,2,1486,653,653,2,2,2,2,1486,1486,1486,1486,1486,635,635,635,635,635,635,635,635,635,2,2,2,2,2,2,2,1486,1486,1486,2,2,635,653,635,635,635,1486,1486,1486,635,635,635,1486,1486,1486,1486}, + {1432,731,398,557,1903,1360,152,520,20,586,116,70,2,721,721,12,1557,2,2,2,2,2,2,2,2,2,2,2,2,687,2,2,2,2,2,2,687,687,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,687,687,2,2,2,2,687,2,2,2,687,687,2,2,2,2,2,2,2,2,2,831,831,831,2,2,2,687,687,2,687,2,687,2,2,2,2,2,2,2,687,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,687,2,2,2,2}, + {2192,1029,310,1609,592,1542,265,117,2006,82,162,205,2,2009,2009,1201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1570,1504,1414,1143,1999,1932,1015,1015,556,514,626,79,2,79,1795,1461,1461,2,2,2,2,2,2,2,1461,1461,1461,1461,1461,2,2,2,2,2,2,2,2,2,2,1461,1461,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1461,1589,1461,2,2,2,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,2,2,2,2,2,2,2,1510,1510,1510,1461,1510,1510,1461,1461,1461,1510,1510,1589,1589,1589,1461,1461,1461,1461,1461,1461,2,1461,1461,1461,1510,1510,1461,1461,1461,1461,1461,1461,1461,1510,1510,1510,1510,1461,1461,1461,1461,1461,1461,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,691,691,1461,1461,2,2,1589,1589,1461,1510,1510,1510,1510,1510,1510,1510,1510,1461,1461,1461,2,2,2,1510,1510,1510,1589,1589,1461,1461,1461,1461,1461,1461,1461,1461,1461,1510,1510,1510,1510,1195,1195,1195,1195,1195,1510,1589,1589,1589,2209,2209,2209,1589,1589,1589,1510,1510,1510,1510,2209,2209,2209,691,1589,1589,1589,1510,1510,691,2209,1461,2209,1589,1589,2209,2209,2209,1510,1510,1510,1461,1461,1461,1510,1510,1510,1589,1510,1510,1510,1510,2209,2209,1589,1589,1589}, + {1562,937,1964,934,1349,378,459,109,1676,1655,1339,1809,2,768,768,188,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1965,949,1057,1043,2256,1571,970,348,69,1324,1174,485,105,105,105,2172,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1625,1625,879,879,2,2,1625,2,2,2,1625,1625,1625,879,879,1625,1625,1625,1625,1625,1625,1625,879,879,879,879,879,879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1625,1625,1625,2,2,2,2,2,2,2,240,240,2,564,2,2,2,101,564,1024,1024,1024,1024,1217,1217,564,128,1625,1625,1625,1625,1625,1625,1625,1625,1625,1625,1625,1625,105,1625,1625,1625,2,2,2,2,726,726,726,726,726,2172,2172,2172,2172,2,2,726,726,1625,1625,1625,1625,1625,2172,199,1625,1625,726,2172,879,879,1625,1625,1625,1625,2172,2172,2172,726,1625,726,1625,726,726,726,726,726,726,726,726,726,1625,726,726,726,726,726,726,726,2172,2,2172,2172,2172,1625,1625,1625,1625,2172,2172,2172,2172,2,2,101,564,1024,1024,1024,1024,1217,2172,2172,2172,2172,2172,105,105,105,105,105,105,105,105,105,1625,1625,726,1625,1625,726,1625,726,726,726,726,1625,1625,1625,1625,1625,2172,2172,2172,726,726,2172,2172,1625,1625,1625,2172,1625,2172,726,726,726,726,726,1625,1625,1625}, + {2044,1869,838,1424,1097,155,1142,230,1335,420,235,1510,2,431,425,622,2,2,2,2,2,625,2,2,2,625,625,2,2,2,2,2,2,625,625,2,2,625,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,625,625,625,625,2,625,625,625,2,2,2,2,625,625,2,625,625,2,625,625,625,625,625,2,625,625,625,625,625,625,625,625,625,625,625,625,625,2,2,625,625,2,2,2,2,625,625,625,625,625,625,625,2,625,625,625,2,625,2,625,625,2,2,625,625,2,625,625,2,2,2,625,625,625,625,2,2,2,2,2,2,625,625,625,625,625,625,625,625,625,625,625,625,2,625,625,625,625,2,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,2,625,625,625,625,625,625,625,625,625,625,2,2,2,2,2,2,625,2,2,625,625,625,625,625,2,2,2,2,2,2,2,2,625,625,625,2,625,625,625,2,2,2,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,2,625,625,625,625}, + {1976,1433,820,504,421,1007,388,1083,635,82,1524,750,2,2,870,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1775,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1990,1948,1138,1787,253,115,312,1912,341,1624,260,1783,1315,1315,790,790,790,790,790,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,462,462,462,462,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1315,2,2,2,1315,1315,1315,1315,1315,1315,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1576,1286,934,661,1612,434,234,575,42,1431,333,1059,552,552,552,2043,2043,2,2,2,2,2,2,2,2,2,2,356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,356,356,2,2,2,2,2,2,2,2,2,2,2,356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1993,585,327,1393,1013,1671,1758,1436,1989,1217,1109,1476,2,2,1042,756,1042,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1765,2,2,2,2,2,2,2,1765,1765,2,2,1765,2,2,1765,2,2,2,1765,1765,2,2,1765,1765,1765,2,1765,1765,1765,2,1765,1765,1765,2,2,2,1765,1765,1765,1765,1765,2,1765,1765,2,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,2,2,2,2,1765,1765,1765,2,2,2,2,2,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,2,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,2,1765,1765,1765,1765,1765,1765,1765,2,1765,1765,1765,610,1765,1765,1765,1765,1765,1765,1765,2,2,1765,1765,1765,1765,1765,1765,2,1765,1765,1765,1765,1765,2,2,1765,1765,2,2,1765,1765,1765,2,2,2,2,1765,1765,1765,1765,1765,1765,2,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,1765,610,610,610,610,610,2,2,610,610,610,2,2,2,2,610,610}, + {2090,684,953,174,1349,182,1034,788,829,1296,1073,491,2,2,2,220,220,2,2,2,2,2,2,2,2,2,2,2,2,1776,1776,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,52,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,52,2,2,2,52,52,52,52,52,52,52,52,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,825,825,825,825,825,825,825,825,52,52,2,2,2,2,2,2,825,2,825,825,825,825,825,825,2,2,2,2,52,52,52,52,52,52,792,825,825,2,2,2,2,2,2,2,825,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,52,52,2,52,52,2,2,2,2,2,2,2,2,825,2,825,2,52,52,52,52,52,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1682,1682,1682,1682,1682,1682,2,1776,2,2,2,1776,1776}, + {2056,1062,1605,1943,680,445,113,857,650,1388,2016,1231,2,2,1292,1292,1292,2,1039,1039,1039,1039,1039,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1039,2,2,2,2,2,2,2,2,2,2,2,2}, + {2092,592,979,1733,2049,1251,673,1324,319,283,1212,1212,2,2,2,1363,1363,2,2,2,2,2,2,2,2,2,844,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,844,844,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1443,2,2,2,1443,1443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,844,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,844,844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,844,844,2,844,2,2,2,2,2,597,597}, + {2002,467,1228,150,1098,367,920,328,1204,276,685,1404,2,32,32,633,633,633,633,2,2,1024,32,32,16,16,32,32,32,2290,2290,2290,2290,32,2290,2290,2290,2290,2290,2290,2,2,1024,32,32,16,362,362,362,2290,2290,2290,2290,2290,2290,2290,2290,2290,700,700,175,175,175,181,362,181,1641,373,373,839,839,1311,1311,1311,1311,1311,1311,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,362,362,362,2290,2290,2290,2290,2290,2290,2290,2290,2290,700,700,175,175,175,181,362,181,181,362,373,839,839,839,1311,1311,1311,1311,1311,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,1796,2290,2290,2290,2290,1311,362,362,2290,2290,2290,2290,2290,2290,2290,2290,2290,2290,700,839,175,175,175,181,362,181,181,362,362,839,839,373,839,839,839,839,839,2290,2290,2290,2290,362,2290,2290,2290,2290,2290,2290,362,2290,2290,2290,2290,1796,2290,2290,2290,1796,2290,2290,2290,1796,1796,1796,2290,362,1796,1796,1311,362,362,2290,2290,2290,2290,2290,2290,2290,2290,2290,839,700,839,175,175,175,181,362,181,181}, + {2008,1773,416,1954,1314,742,1694,505,202,1747,785,375,2,2,2,477,1538,477,2,2,2,2,2,1309,1309,1309,1309,2,2,2,1309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1309,1309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1658,1008,258,749,427,1071,2052,263,1047,2152,1602,1602,2,2,2,1311,669,669,2,1897,1897,1897,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1557,1557,1557,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2286,1903,1793,1130,465,1956,651,220,1024,296,549,549,2,2,2,138,138,1034,180,180,2,2,1034,2,2,2,1034,1034,1034,1034,2,2,2,2,2,1034,1034,2,2,2,2,2,2,2,2,1940,1940,1940,1034,2,2,2,2,2,2,2,2,2,1034,138,1034,1034,1034,1034,2,2,1034,1034,2,2,2,2,1034,1034,2,2,2,2,1034,1034,2,1034,1034,1034,1034,1034,1034,2,2,2,1034,1034,1034,1034,1034,1034,1034,1034,2,1034,1034,1034,1034,1034,1034,2,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,2,2,2,2,1034,1034,1034,2,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,2,1034,1034,1034,1034,2,2,2,1034,1034,2,2,2,1034,1034,1034,1034,1034,2,1034,2,2,2,2,2,1034,2,138,138,138,138,138,138,138,138,138,1034,1034,2,1034,1034,2,2,2,2,2,2,1034,2,2,2,2,2,138,138,138,2,2,2,1034,1034,1034,1034,1034,1034,1034,1034,1740,1903,1034,1034,1034,1034,1034,1034,1034,2,1034,1034,1034,1034,1034,1034,1034,1034,799,799,799,1903,1034,1034,1903,1903,1903,1113,1113,1113,1034,1034,1034,1113,1113,1113,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034}, + {2285,396,182,1680,682,983,1634,1034,1304,1987,911,715,2,2,2,2,911,911,681,681,2,2,2,2,2,2,557,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,557,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2258,1887,1875,1021,863,604,543,1115,509,1243,312,213,2,2,2,2,335,770,770,2,1143,567,2,2,567,567,567,411,2,2,2,411,1143,1143,567,567,567,567,2,567,1143,567,567,567,411,1143,2,411,567,567,411,411,411,411,2,567,567,567,411,411,411,411,411,411,567,567,567,567,2,2,2,2,2,567,567,1734,1143,567,567,567,1143,567,567,1143,411,411,567,567,567,567,567,335,411,411,411,411,411,411,567,567,411,411,411,411,411,411,567,2,567,411,2,2,567,567,411,411,411,411,411,411,411,567,411,411,567,567,567,567,1734,567,567,567,567,567,567,567,567,567,411,411,411,411,411,411,567,567,567,567,567,567,567,567,2,2,567,567,567,567,567,1143,1143,567,2,2,2,1143,1143,2,1143,2,1143,567,2,2,2,2,2,2,2,2,2,2,2,2,2,411,567,567,2,2,2,2,1143,567,567,567,1143,1143,1143,1143,1143,1143,1143,1143,567,2,2,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,567,2,567,567,411,411,567,567,567,2,2,567,567,2,567,567,567,567,567,567,567,567,2,2,2,2,2,2,567,567,567,567,2,567,567,2,567}, + {2266,1872,991,1468,1168,939,907,833,624,701,386,1713,2,2,2,2,2,931,861,381,1299,2,861,2,2,2,861,861,861,861,861,2,2,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1299,1299,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,861,861,861,861,861,861,2,861,861,861,861,2,861,861,381,381,381,861,381,381,381,861,861,2,2,2,861,861,861,861,861,861,861,861,861,861,861,861,381,381,381,381,381,2,861,2,2,861,861,2,2,2,2,2,2,2,2,2,2,2,2,861,2,2,861,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2014,810,1106,470,299,1927,475,2123,958,367,1300,139,2,2,2,2,75,75,1443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,108,108,108,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,985,2,2,2,985,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2273,1510,803,2278,842,1245,1389,230,822,1564,113,1276,2,2,2,2,1350,273,273,2,2,2,2,2,1281,1281,1281,2,2,1281,1281,1281,2,2,1281,1281,2,2,2,2,2,1281,1281,1281,1281,1281,2,2,2,1281,1281,2,1281,1281,2,1281,1281,1281,1281,1281,1281,1281,1281,1281,2,2,2,2,2,2,2,1863,1863,1863,1281,1281,1281,2,2,620,2,2,2,2,2,2,2,2,2,1863,1863,1863,2,2,2,2,1281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1281,1281,1281,1281,1281,1281,1281,1281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1281,1281,2,2,2,2,2,2,2,2,2,1281,1281,2,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,2,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,2,1281,2,2,2,1281,2,2,2,2,2,1281,2,2,2,2,2,1281,1281,2,1281,2,2,2,2,2,2,2,2,2,1281,1281,2,2,2,2,2,1281,1281,2,2,2,2,2,2,2,2,2}, + {1480,807,1596,520,1139,213,1581,460,923,617,1305,939,2,2,2,2,53,53,1589,284,2,2,1589,1589,1589,1589,1589,1589,1589,1589,1589,1589,1589,1589,2,1589,2,2,2,1589,2,2,1589,1589,1589,1589,1589,2,2,1589,2,1589,2,2,2,2,2,2,2,2,1589,2,2,2,2,1589,2,1589,2,2,2,2,1589,1589,1589,1589,1589,2,2,1589,1589,2,1589,1589,1589,1589,1589,449,449,2,2,2,1589,2,2,2,1589,1589,2,2,1589,1589,1589,1589,1589,1589,1589,2,2,2,2,1589,1589,2,2,2,2,2,2,2,2,2,2,2,2,1589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1589,2,2,1589,1589,2,2,2,1589,1589,1589,1589,1589,1589,1589,2,449,449,1589,1589,1589,1589,1589,2,1589,1589,1589,1589,1589,1589,1589,1589,2,1589,1589,2,2,2,2,2,2,2,2,2,2,2,1589,2,1589,1589,1589,1589,1589,1589,2,1589,1589,1589,1589,1589,1589,2,2,449,449,449,449,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2278,1028,548,373,190,1443,614,2386,1940,930,557,2069,2,2,2,558,112,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1670,1730,153,1435,611,293,2077,1383,1353,1215,2031,1697,860,860,860,860,1172,1580,1580,2,2,1172,2,2,2,2,475,475,475,449,475,2,2,2,2,2,2,2,2,2,475,475,475,475,2,2,2,2,2,2,2,2,475,2,2,2,2,449,449,449,449,449,525,658,658,658,658,658,475,475,2,658,2,2,475,2,475,2,2,475,2,475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,475,2,2,2,475,475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,2,2,2,2,2,2,2,2,475,475,475,475,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,475,475,475,2,2,2,2,2,2,525,525,475,475,2,2,2,2,2,475,2,2,2,2,2,475,475,475,2,2,2,2,2,2,2,2,2,2,475,475,2,2,475,475,475,475,2,2}, + {2108,776,1568,342,2215,1882,681,1292,1601,586,1481,618,1930,1930,1930,1930,2146,89,89,2,2,2,2,2,2,2,1171,2,2,2,2,2,2,1171,1171,2,2,2,2,2,1171,1171,1171,2146,2146,2146,2,1171,1171,2,2,2,1171,1171,1171,1171,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1171,1171,1171,2146,2146,2,2,2,2146,2146,2146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2146,2,2,2,2,2,1171,1171,1171,1171,1171,1171,2,2,2,2,2,2,2,2,2,2,1171,1171,1171,1171,1171,2,2,2,1171,1171,2,1171,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1171,1171,1171,2,2,2,2,2,2,2,1171,1171,2,2,2,1171,1171,1171,1171,1171,1171,1171,1171,1171,2,2,2,2,2,1171,2,1171,1171,2,2,2,1171,1171,1171,1171,1171,1171,1171,1171,1171,2,1171,2,2,1171,1171,1171,2,2,2,2,2,2,2,2,2,2,2,2,1171,1171,1171,1171,2,1171,1171,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1171,1171,1171,1171,1171,1171,1171,1171,1171,1171}, + {2139,2177,1652,392,715,605,778,632,472,1619,64,64,2,2,2,1747,859,2,2,2,2,2,216,216,216,216,1747,1747,1747,1747,1747,1747,2,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,2,2,2,2,2,2,2,2,2,2,216,216,216,2,2,2,2,2,1747,1747,1747,1747,1747,1747,2,2,2,2,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,2,2085,1747,2,1747,1747,1747,1747,1747,1747,2,1747,1747,1747,1747,1747,1747,1747,1747,2,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,2085,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,2,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,1747,2,216,1747,1747,1747,216,1747,1747,1747,2,2,2,216,2,2,1747,1747,216,2,2,2,2,1747,1747,2,2,2,2,2,1747,2,2,2,2,1747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1617,836,2067,259,810,1597,565,275,896,1474,415,1678,2,2,415,415,383,2,2,2,2,1205,1205,1205,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,2,2,2,2,2,2,2,2,2,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,91,91,91,2,2,2,2,2,2,91,91,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2158,632,1665,480,99,219,1268,31,852,486,1051,2164,2,1190,1190,1190,1179,2,2,2,2,2,2,2,2,2,2,2,2,1179,1179,1179,1179,1179,1179,2,1179,1179,2,1179,1179,1179,2,2,2,2,2,1179,1179,1179,1179,1179,1179,1179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1492,448,271,135,1288,417,130,83,235,2313,482,746,2,2,746,609,611,611,611,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1881,1637,2,2,2,2,2,2,2,42,42,42,42,2,2,2,2,2,1637,1637,1881,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1881,1881,1881,2,2,2,2,2,2,2,2,1881,1881,1881,1881,1881,1881,1881,1881,1881,1881,2,2,2,2,2,2,2,2,1881,1881,2,1881,2,1881,1881,1881,1881,1881,2,2,1881,1881,1881,1881,2,2,1881,1881,1881,2,1881,1881,1881,1881,1881,1881,1881,1881,1881,1881,1881,2,2,2,2,2,1881,1881,1881,318,318,318,318,318,318,318,318,1637,1637,1637,1637,2,1306,1306,1306,2,2,1401,2,264,264,2,1881,1881,2,2,1881,1637,1881,1881,1881,1881,1881,2,2,1881,1881,1881,1881,1881,486,486,486,486,486,486,486,486,486,486,2,2,486,486,486,318,486,1306,318,486,1637,1637}, + {1628,846,1504,138,464,401,501,506,967,1027,1540,1035,2,1921,1539,1539,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1630,1677,1624,301,1038,909,887,374,411,143,1021,174,2,1393,19,634,2,2,2,2,2,2,2,873,2,2,873,873,2,2,2,2,2,2,2,2,2,2,2,873,873,873,2,2,2,2,2,2,2,2,2,873,873,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,873,873,2,873,873,873,873,873,873,2,2,873,873,2,2,873,873,873,2,873,2,2,2,2,2,873,2,873}, + {2117,1275,567,223,419,988,1996,88,1049,695,440,431,922,922,298,402,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,788,2,2,2,2,2,788,2172,1798,1798,2,1798,1798,788,1798,788,788,2,1798,1798,1798,2,2,1798,2,2,1798,1798,2,2,1798,1798,1798,1798,1798,1798,1798,1798,1798,1798,788,788,788,788,2172,2172,2,2,2,2172,760,788,2,2304,2304,788,2,788,788,788,2304,2304,2304,2304,2304,2304,2304,2,2304,2304,2,2,2304,2304,2304,2304,2,2304,2,2304,2304,2304,2,788,788,788,788,788,788,788,788,2304,2304,2304,2304,2304,160,2,2,2,922,922,922,922,922,922,2,2,2,2,2,2,2304,2,2,2,2,2,2,2,2304,2,2304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,265,265,265,265,265,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2,2,2,512,512,512,512,512,512,512,512,512,512,512,512,512,512,2,2,2,2,2,2,2,2,2,788}, + {1654,1131,2054,994,2170,548,801,252,87,219,488,2239,2,1232,1839,1822,2,2,2,968,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,291,291,291,291,291,141,141,141,141,141,141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,141}, + {1648,669,1340,1345,1074,370,80,173,1160,1670,263,772,754,754,754,1166,2,2,2,2,1304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1304,2,1304,1304,1738,1738,1738,2,2,2,2,2,2,2,2,1304,1738,2,2,2,8,8,32,128,2,2,2,1460,1460,1460,1460,512,512,512,512,365,1460,1460,1304,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,233,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,895,1738,1738,1738,1738,1738,2,2,365,1460,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,233,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,1738,233,233,233,1738,1738,1738,1738,1738,1738,1738,663,663,663,663,663,1738,1738,1088,1088,1088,1088,1088,272,17,17,17,1248,1248,1248,1552,97,97,97,97,97,78,78,78,286,286,286,286,286,286,286,286,286,895,895,1391,1391,1391,1391,1391,1391,1391,1738,1738,1016,233,233,233,233,1016,1171,1738,1738,1738,895,1738,1738,1738,2453,2453,2453,2453,2453,2453,1738,2091,2091,2091,2091,1016,2091,2091,2091,1171,2091,2091,1171,1171,1171,1171,1171,1171}, + {2065,1520,1423,1797,899,1425,1801,776,2365,58,646,695,2,998,998,1342,2,2,2,2,2,2,2,2,2,2,2,2,1150,1150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,218,2,2,218,2,2,2,2,2,2,2,2,2,1150,1150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,218,218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1150,1150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2304,1948,316,1063,237,607,1143,2575,1388,1022,127,251,2,438,1570,1570,1570,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,75,75,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2177,710,1912,617,809,1078,199,905,673,519,457,52,2,1348,1348,410,2,2,2,2,2,340,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,765,765,765,765,765,765,2,2,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,1982,2,2,2,2,1982,2,2,340}, + {2073,1543,1586,1296,2466,753,455,46,119,1694,2035,1592,206,206,206,2,2,2,2,2,2,2,2,1172,2,2,2,2,2,2,2,2,2,589,589,589,589,589,589,589,589,589,589,589,589,2,589,589,589,1172,1172,2,1172,1172,1172,589,1172,589,589,589,2,2,589,589,589,589,589,589,589,589,589,2,2,2,2,2,780,589,589,589,589,2,2,2,2,2,2,2,780,527,527,589,589,589,589,2,2,589,589,589,589,589,2,2,589,589,589,589,2,2,2,2,2,1172,1172,1172,1172,1172,1172,1172,2,2,589,589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,589,589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,589,2,2,2,2,2,2,2,589,589,589,589,589,589,2,2,589,589,2,589,589,2,2,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589}, + {2075,1056,874,2101,566,1790,1333,386,538,1560,2254,331,717,717,717,454,454,2,2,2,2,2,2,2,2,2,2,2,454,454,2,2,454,454,454,454,454,454,454,454,2,454,454,2,2,2,454,454,454,454,454,454,2,2,2,2,2,2,725,725,725,2,2,2,2,454,254,254,725,725,725,725,725,725,454,454,2,454,454,454,454,454,454,454,454,2,725,454,454,454,454,454,725,725,725,725,454,725,725,725,725,454,454,454,725,454,454,454,454,454,725,454,454,454,454,2,454,454,213,454,454,725,725,454,454,454,454,454,454,454,454,454,454,454,454,454,454,254,2,725,725,725,2,2,454,454,454,2,2,454,454,2,2,2,454,2,2,454,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,454,2,2,2,2,725,454,454,454,2,2,2,2,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,2,725,725,2,2,2,725,2,725,725,725,725,725,725}, + {2078,815,288,730,994,1968,1721,1248,2330,1394,1042,2126,982,286,1943,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1167,1167,1167,1167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1167,1167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1167,2,1167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2090,720,440,1851,579,2515,173,129,698,1225,695,1283,1897,1330,1330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,470,470,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1670,977,1540,553,855,1729,239,757,191,62,732,549,1092,1092,199,199,199,199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1433,1433,1433,2,2,2,2,1433,2,2,2,2,2,199,2,2,2,2,2,2,2,2,2,2,2,2,2,1433,2,2,2,1433,2,2,2,2,2,2,2,2,2,2,2,2,2,1433,1092,1092,1092,2,2,2,1433,2,2,1092,1433,2,2,2,1092,1092,1433,1433,1433,1433,1433,1433,2,2,1433,1433,1092,1433,1433,1433,2,1433,1433,1433,1433,1433,1433,1433,2,2,1433,1433,1433,1433,1433,2,2,2,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,2,2,2,2,2,2,2,2,2,1433,1433,1433,1433,1433,1433,1433,199,199,199,2,2,2,2,1092,2,2,2,2,1092,2,2,1433,1092,2,2,2,2,2,2,1092,2,1092,1092,2,2,2,2,1433,2,1433,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1433,1433,2,2,2,2,2,1433,1433,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2320,1529,674,1839,1633,244,281,1975,387,978,775,53,507,1527,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1630,1630,1630,1630,2,2,2,1630,2,2,2,2,1630,1630,2,2,2,2,2,2,2,2,2,2,2,1630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1630,2,2,2,2,2,2,1630,1630,2,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,1630,2,2,2,2,2,2,2,2,2,1630,1630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1630,1630,1630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2096,1155,2257,125,1986,245,1208,2146,2287,680,1413,73,467,1410,1410,2,2,2,2,2,133,133,133,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,327,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8,2,2,2,60,1800,2318,2318,532,1334,1334,578,1047,1047,1047,1047,333,333,333,2,2,2,2,2,2,1259,1259,2,2,1259,1259,2,2,2,2,2,2,2,2,2,2,2}, + {1538,1026,2157,1457,1784,2559,184,29,614,273,697,697,1922,697,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,525,2,2,2,2,2,2,525,525,525,2,525,525,525,525,525,2,2,525,525,2,2,2,525,525,525,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2173,2154,482,393,285,1418,1631,518,1156,32,67,352,352,352,1783,1500,1500,1500,1500,1500,2,2,2,2,2,2,2,2,2,2,2,2,2652,2652,2652,2652,738,2,738,2,2,2,2,160,160,160,160,160,160,160,2,2,2,1500,1500,1500,1500,1500,160,1500,1500,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,966,738,738,966,966,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1500,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1500,1500,1500,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2156,891,351,1633,81,1329,119,1150,679,673,1117,1785,1785,451,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,737,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,516,516,516,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,66,66,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,66,66,66,66}, + {2106,856,1025,382,389,272,425,672,1021,216,601,292,510,510,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1662,608,2478,266,1330,505,40,2058,964,724,596,1221,1221,310,42,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,529,2,529,2,2,529,2,2,529,529,529,529,529,529,529,2,2,2,2,2,2,2,2,2,2,529,529,529,2,2,529,2,2,2,2,2,2,529,529,2,2,2,529,529,2,2,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,2,2,2,2,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529}, + {2392,1719,1026,1290,844,1553,1421,1082,872,312,208,212,206,206,576,2,2,2,2,2,905,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,905,905,905,2,2,2,2,905,905,2,905,905,905,905,905,905,905,905,905,905}, + {1600,1338,196,1510,1371,1138,957,169,545,1176,1131,2460,1708,541,541,2,363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1708,1708,1708,1708,2,2,2,2,2,2,2,2,2,2,2,1313,2,1313,2,2,2,2,2,2,2,2,2,2,1313,1313,1313,1313,1088,1088,2,2,2,2,2,2,2,2,1313,2,2,2,2,1313,1313,1313,2,2,2,2,1313,1313,1313,1313,980,980,1313,2,1088,1088,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1313,2,2,2,2,2,1313,1313,1313,2,2,2,2148,55,2,2,2,2,2,1088,2,2,2,2,2,2,2,2,2,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,313,1414,1414,1414,1282,1857,1857,1857,18,506,18,2,2,2,2,2,1478}, + {2378,1005,1799,733,970,94,936,418,609,666,872,119,105,1051,142,2,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,398,2,2,2,398,398,398,398,398,398,2,2,2,2,2,2,398,398,398,2,2,398,2,2,2,398,2,2,2,2,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,2,398,2,2,2,2,2,2,2,398,398,398,398,398,2,2,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,2,2,2,2,2,2,2,2,2,398,398,2,2,398,398,398,398,398,398,398,398,398,2,398,398,398,398,2,2,2,2,2,2,2,398,398,398,2,2,2,2,2,398,398,398,2,2,2,398,398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,398,398,2,2,2,2,2,2,2,398,398,398,398,2,2,2,2,398,398,398}, + {2132,756,1097,166,202,411,640,717,514,1389,633,633,633,633,633,633,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,566,566,566,566,566,566,566,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,566,566,566,566,566,566,2,566,566,566,566,566,566,566,566,566,566,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,566,566,566,566,566,566,2,2,2,2,2,566,2,2221,566,566,566,2,2,2,2,2,2,2,2,2,566,2,2,2,566,2,2}, + {2386,748,620,478,647,898,320,53,1115,190,60,1860,1860,802,802,2,2,2,2,1264,1346,1346,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1346,2,2,2,1346,1346,1346,2,2,2,2,2,1346,1346,1346,2,2,2,1346,1346,2,1346,1346,1346,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1346,1346,1346,1346,1346,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1346,2,2,2,2,2,2,2,2,2,2,2,2,2,1346,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2125,996,1081,124,1140,628,1668,1913,151,2495,523,430,260,708,2190,2190,2190,2,2,2,2,2,1660,2,2,497,497,497,497,497,497,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1056,1660,1660,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2433,531,2067,2273,2167,1673,964,130,1429,688,737,737,737,261,261,1586,2,1309,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1539,2,2,2,1539,1539,1539,1539,1539,1539,2,1539,1539,1539,1539,2,2,2,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,2,2,2,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,2,2,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539,1539}, + {1602,1489,895,383,56,698,2081,1728,794,789,16,16,797,302,52,2,2,2,2,2,2,2,2,2,2,797,797,797,797,797,797,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,2,1808,2,1859,1859,1859,1859,2,1859,1859,2,2,2,2,2,2,2,2,2,1859,1859,1065,1859,2,2,1859,1859,1859,1859,1859,1808,2,2,2,2,2,2,2,2,2,2,2,2,1808,2,2,2,1808,1808,1808,2,2,1808,1808,2,1808,2,2,1859,1808,1808,1808,2,2,2,2,2,1808,1808,1808,1808,1808,1808,1808,1808,1808,1215,1215,2,1215,1808,1808,1808,1859,1859,1859,1859,1859,1859,2,1808,1808,1808,1808,1808,1808,1859,1215,1808,1859,1859,1859,2,1859,2,2,2,797,797,797,797,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,797,2,2,2,2,1859,1859,1859,1859,1859,1859,1859,2,2,1859,1859,2,2,2,2,2,2,2,2,1859,2,1859,1859,2,2,2,2,2,2,1859,2,2,2,2,2,2,2,2,2,2,2,2,2,1859,1859,1859,797,797,797,797,1859,2,1859,1859,1859,1859,1859,1859}, + {1623,1362,1669,701,747,749,1302,129,296,17,642,1497,723,2101,1004,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1605,1605,1605,1605,2,1605,1605,2,2,1183,1183,1183,1183,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1183,1183,1183,1183,1605,1605,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1183,2,1183,1183,1183,2,2,1605,2,2,2,2,1183,1183,1183,2,1183,1183,2,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1605,1605,1183,1183,1183,2,2,1183,1183,1605,1183,2,2,2,2,2,1183,2,2,2,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2210,606,901,547,131,1924,1852,1271,194,766,390,390,520,795,1429,1429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2390,1692,1090,533,305,825,28,840,1810,475,869,2800,233,1585,63,1350,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,687,713,713,573,938,209,209,209,209,209,209,2,2125,2363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2363,167,167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2363,2125,2,2,2125,2363,2363,2363,2363,2363,2363,2363,2125}, + {1731,599,817,724,718,1038,1082,2503,1341,936,421,1802,1304,1304,1491,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,2,2,2,1150,1150,59,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,2,2,2,2,2,229,229,2,2,2,229,229,2,229,229,229,229,229,2,229,229,229,229,229,2,2,2,2,2,2,2,2,2,2,2,2,1382,2,2,2,2,1150,1150,1150,2,2,1382,1382,229,229,229,229,229,229,2,2,2,2,2,2,1382,1382,2,229,229,2,2,270,2,270,2,2,2,2,2,2,2,2,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1150,1150,1150,1150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2447,1389,2281,1282,374,308,1587,48,1137,1275,1980,713,713,713,2,960,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1225,1225,1225,2,2,2,2,2,2,2,1225,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1727,822,712,1351,240,451,1645,340,296,2524,47,1131,1876,581,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,339,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1876,2,2,2,1876,1876,2,1876,1876,1876,1876,2,1876,1876,2,2,2,1876,1876,1876,2,2,1876,1876,1876,1876,1876,1876,2,1876,2,2,2,2,2,1876,1876,1876,1876,2,1876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1876,2,1876,2,2,2,1876,1876,2,2,2,1876,1876,1876,1876,1876,2,2,2,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,2,1876,2,1876,1876,2,2,2,1876,1876,1876,1876,1876,1876,2,2,2,2,2,2,1876,1876,1876,1876,2,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,1876,2,2,2,1876,1876,1876,2,1876,1876,1876,1876,1876,1876,1876}, + {2228,1000,544,327,2251,707,2235,598,1389,317,434,809,1560,1560,941,941,941,941,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2168,1532,769,2570,1303,357,1793,1633,1226,1025,205,1218,1984,764,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2335,2335,2335,2335,2335,2335,2335,2,2,2335,2335,2335,2335,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2234,1706,356,581,532,933,1704,387,1345,1345,34,135,350,307,614,614,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,87,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,909,909,909,909,909,909,909,909,1688,2,2,2,1688,1688,1688,1688,1688,621,621,2,909,1517,1517,909,909,1688,1517,1517,1517,1688,1688,1688,1688,1688,1688,1688,1688,1688,1688,1688,1688,2,2,1517,1517,909,909,909,621,909,909,909,1688,1688,621,621,909,909,909,909,909,909,909,909,909,909,909,1517,1517,1517,1517,621,621,621,1517,1517,1517,1343,909,909,909,909,909,909,909,2,2,2,2,909,1343,1517,1517,1517,1343,1343,1517,1517,1688,1517,1517,1517,1517,1517,1517,1517,1517,1517,1343,621,621,2,1688,621,2,1343,1343,1343,1343,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,2,2,2,1688,1688,621,1688,1517,1517,1517,1517,621,2,2,2,2,621,621,621,621,621,621,1688,1688,1688,1688,1517,2,621,621,621,621,621,621}, + {1750,1297,423,1018,963,2368,1854,722,139,221,945,1235,180,2704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1455,1455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1455,1455,1455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1455,1455,1455,1455,2,1455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1656,2093,354,310,306,1553,106,459,175,55,1482,958,254,254,2,356,356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,224,2,2,2,224,224,2,224,224,2,224,224,2,224,224,2,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,813,813,224,224,224,224,2,2,2,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,2,224,224,224,813,813,813,224,224,2,813,813,813,813,813,813,813,813,813,813,813,813,813,224,224,813,813,813,813,813,813,813,813,813,813,813}, + {1654,1035,330,533,1446,953,499,142,1527,1748,265,1437,265,510,2,2,2,2,2,2,2,1835,1835,1835,1835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1835,1835,1835,2,2,2,2,2,2,2,2,2,2,2,2,1835,2,2,2,603,603,603,603,603,603,603,603,603,2,2,2,2,2,1835,1835,1835,2,2,2,557,1835,2,1835,1835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,479,1457,246,2025,618,1612,2139,169,1492,1097,1327,2007,2007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,77,2,2,77,77,77,77,2,2,2,77,2,2,2,2,2,2,77,77,77,2,2,2,2,2,2,2,2,77,77,77,77,77,77,77,77,77,77,2,77,2,2,2,77,77,600,2,2,322,322,322,2,2,322,322,2,2,2,2,2,2,2,2,2,2,322,322,322,322,42,42,322,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,2,77,600,600,675,322,322,322,322,322,322,600,322,322,322,2,2,2,2,2,2,2,2,2,2,322,322,322,322,322,322,322,322,322,322,322,2,2,2,2,493,493,493,493,322,322,322,600,600,42,2,600,600,42,42,600,322,322,42,322,322,322,675,675,675,675,322,600,277,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,42,42,42,42,42,42,42,42,42,42,322,322,322,42,42,42,42,42,493}, + {2461,1123,1791,143,404,62,1381,185,691,115,357,692,357,357,2,2,2,2,2,2,2,2247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,759,759,2,759,759,759,759,759,759,759,759,759,2,759,759,759,2,759,759,759,759,759,759,759,2,759,759,759,2,2,2,2,2,759,759,759,759,759,759,759,759,2,2,2,759,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,759,759,759,759,2,2,759,759,759,2247,2247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,759,423,2,2,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2247,2,2247,2,2,2,2,2,2,2,2,2,2,759,2,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,759,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,490,2,2,2,2247,2247,2247,2,2247,2247,2247,2,2,2,2,2,2}, + {1744,447,845,2145,748,1555,1193,1312,916,1770,1294,546,794,323,2,2,2,2,2,1733,1733,2,2,1730,2,1733,1733,2,2,1733,551,551,551,551,1733,2,2,1730,1730,1730,2,551,59,1733,2,2,2,2,2,2306,2306,2306,2306,1733,1733,1733,2,2,1733,1733,1733,1733,551,551,551,551,551,551,551,1733,1733,2,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,2,1733,2306,2306,2306,1733,1733,2,2,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,2306,2306,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,2,1733,1733,2306,1733,1733,1733,1733,2,1733,1733,1733,1733,1733,1733,2,2,1733,1733,1733,2,1733,2,1733,2,2,1733,1733,1733,1733,1733,1733,2,2,2,2,2,1733,1733,1733,1733,2,2,2,2,1733,1733,2,2,2,1733,1733,1733,1733,1733,1733,2,2,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,2,1733,1733,1733,1733,1733,2306,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,1733,2306,1733}, + {1766,1558,1901,1393,987,1859,815,1165,50,2065,88,88,1453,1453,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1992,1992,161,1778,1813,1813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1615,1267,1242,1494,399,663,68,1209,1573,528,640,1200,248,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1051,2,2,2,2,2,2,2,2,2,2,2,2,2,1051,1051,1051,1051,1051,1051,2,2,2,2,2,1051,1051,1051,1051,1051,1051,1051,1051,1051,178,178,1051,1051,1051,2,2,178,178,178,178,178,178,178,1051,1051,1051,1092,1051,1092,1092,1051,1051,1051,1051,178,178,1051,1051,1051,1051,1051,1051,178,178,1051,178,1051,1051,1051,1051,1051,1051,178,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,178,1051,1051,1051,2,1051,1051,1051,1051,1051,1051,178,178,1051,1051,178,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,178,178,178,1092,178,178,178,178,178,178,1051,178,1051,1051,1051,1051,1051,178,178,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178}, + {1678,592,1351,509,312,721,163,1597,1262,199,2643,1330,1661,992,2,2,719,2,2,2,2,2,2,2,2,2,2,2,2,2,1704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,758,1704,1704,1704,2,2,2,2,2,758,758,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2207,970,838,2043,1016,561,267,329,584,608,679,303,832,1613,959,959,959,1409,1409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,959,959,2,959,959,2,959,959,959,959,959,959,959,959,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,959,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,832,2,2,2,2,959,2,959,959,2,959,959,2,959,959,2,2,2,2,2,2,2,2,2,2,832,832,2,1409,2,2,832,832,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2217,352,447,914,1200,561,614,1616,509,2292,1114,1114,1229,52,1053,1053,1053,2,2,2,2,2,2,2,2,2,2,2,2,2,795,795,795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2313,595,1593,1951,133,282,372,2396,1117,226,2104,267,374,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,951,2,2,2,2,2,2,2,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,951,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2167,747,211,681,989,503,1630,477,436,2085,419,290,419,1674,837,837,1674,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,415,415,2,2,2,415,415,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,415,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,16,2357,2,2,2,16,16,467,1294,1294,1294,890,890,32,32,2529,2529,2,2,2,2,2,2,2,2,2,2,2,2,2,415,415,2,2,2,2,2,2,2,2,2,415,415,2,415,2,2,2,2,2,2,2,2,2,360,2,2,2,2,415,415,360,415,415,415,415,415,415,415,415,415,2,360,2,360,360,360,360,360,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,415,2,2,2}, + {1771,1441,594,613,1667,2388,961,1355,545,876,2175,2404,887,887,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,810,2,2,2,2,2,2,810,2,2,810,810,810,2,810,2,2,2,2,2,2,2,2,2,2,810,2,2,2,2,2,2,2,810,810,810,810,2,2,2,810,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,810,810}, + {2312,1231,1604,997,652,1096,1070,320,481,662,911,1610,342,2527,606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,675,675,675,675,675,675,675,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2245,1541,1828,783,615,428,1282,1892,848,1219,2465,314,314,314,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,1323,2,2,1323,1323,2,2,1323,2,2,1323,2,2,2,1323,2,2,2,2,2,1323,1323,1323,2,2,1323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,2,2,1323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,1323,1323,1323,1323,1323,1323,332,332,332,2,2,2,2,2,332,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,2,2,2,2,2,1323,1323,1323,1323,1616,2,2,2,1616,1616,1616,2}, + {2354,1550,2394,1868,1418,2506,300,426,726,207,729,120,2152,951,235,927,927,1643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,927,1643,2,1643,1643,1643,1643,1643,1643,2,2,2,1643,1643,1643,1643,1643,1643,927,927,927,1643,1643,927,927,927,2,927,927,927,2,2,927,927,927,927,2,2,2,927,927,927,927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,927,927,927,927,927,2,927,927,927,927,927,927,927,2,927,927,927,927,927,927,927,927,2,1643,927,2,2,2,927,927,927,927,927,927,927,927,927,927,927,2,1643,927,927,927,927,927,927,1643,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,1643,1643,1643,1643,1643,1643,927,927,1643,1643,1643,927,927,1643,1643,927,1643,1643,1643,1643,927,927,927,927,927,927,927,1643,1643,1643,1643,1643,1643,1643,927,927,927,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,1643,927,927,927,927,927,927,927,927,927,927,927,153,153,1342,1342,1342,1342,1342,927,1342,1342,927,927,927,927}, + {2518,712,215,1937,1636,1101,340,2518,1093,2399,209,1986,1411,860,860,416,2,2,2,2,2,2,2,2,1693,2,2,1693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1693,2,2,2,2,2,2,2,2,2,2,644,1693,644,2,2,1693,1693,1693,1693,1693,1693,1693,2,2,2249,1693,1693,2,1693,1693,1693,1693,1693,1693,1693,2,1693,1693,2,2,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,1693,2,2,1693,1693,1693,1693,2,1693,2,2,2,2,2,2,2,479,479,2,2,2,1693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1374,2,2,2,2,479,479,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1374,1374,1374,1374,1374,644,1374,1374,479,479,479,479,1374,2,479,479,479,479,1693,1693,1693,1374,1374,1374,479,479,479,479,479,479,1374,1374,1374,1374,1374,479,2,479,479,479,479,479,479,479,479,1374,1374,1374,1374,1374,1693,1693,1693,1693,1693,1693,1693,2,2,2,644,644,644,2,644,644,2,2,2,644,644,2249}, + {2522,1030,324,1264,628,1339,480,234,2351,1085,1979,2333,1339,1356,1356,2286,2,2,2,2,2,2,2,2,2,2,2,2,2530,2,2,2,2,2,2,2,2,2,2,2530,2530,2,2,2,1981,1981,1981,1981,1981,1981,1981,1981,1981,2,2,2530,2,2,2,2,2,2,183,2,2,2,2,2,2,2,2,2,1981,1981,1981,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1981,1981,1981,1981,1180,2,183,2,2,2,2,2,2,2,183,2,1981,1981,1981,2,183,183,183,183,2,2,1981,2,1981,183,183,1981,1981,1981,1981,1981,1981,1981,1981,1981,183,2,2,2,2,1981,1981,1981,1981,1981,1981,1981,1981,2530,1981,1981,2,1981,183,183,2,183,183,2,2,2,183,1981,1981,183,2,2,2,1981,1981,1981,1981,1981,1981,1981,1981,1981,1981,1981,183,1981,1981,1981,1981,183,183,2530,2530,1981,1981,1981,1981,2530,2530,2530,1981,1981,1981,1981,1981,1981,2530,2530,183,1981,1981,1981,1981,183,183,183,183,183,183,183,1981,1981,1981,1981,1981,1981,1981,183,1981}, + {2518,750,591,854,454,1416,842,547,106,2496,786,878,2237,1024,1024,1024,2,2,2,2,2,2,1896,2,2,2,2,2,2,2,2,2,2,1896,1896,1896,2,2,2,2,2,2488,2488,2488,2,2,2,2,2,2,2,2,2,2,2,463,463,463,2,2,2,2,2,2,2,2,2,1345,1345,1345,2,2,2,2,2,1345,1345,463,1345,463,463,2,2,1345,1345,1345,1345,1345,1345,2,1345,1345,2,1345,1345,2,1345,2488,2488,2,2,1345,1345,1345,1345,2,2,2,2,2,2,2,2,2,2,1345,1345,1345,2,1345,1345,1345,1345,2,1345,1345,1345,1345,1345,1345,2,2,1345,1345,1345,1345,1345,1345,2,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,1345,2,1345,1345,2,2,2,2,2,2,2,2,2,2,2,1345,1345,2,2,2,2,2,2,2,2,1345,1345,1345,1345,463,2,1345,1345,1345,1345,1345,1345,463,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2488,2488,2488,2488,2488,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,92,92,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345}, + {2519,1136,612,209,994,1179,1060,2621,130,485,661,1444,2122,124,258,1114,2,2,806,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,945,945,945,945,945,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1122,1122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2524,1894,253,2072,1242,355,888,1362,28,480,452,1216,595,545,354,1145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,354,354,2,2,2,2,2,2,2,2,354,354,354,354,354,354,354,2,354,354,387,354,354,229,2,229,2,2,2,354,354,387,387,354,354,354,354,354,2,354,229,354,354,354,354,354,2,2,2,387,387,387,387,354,354,354,354,354,354,354,354,354,229,229,229,229,229,354,2,229,229,229,354,354,229,354,354,354,354,354,354,354,354,387,387,229,229,387,387,354,354,229,229,229,354,354,354,354,229,229,229,354,354,354,229,229,354,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,2,2,2,2,2,2,2,2,2,2,2,229,354,354,354,354,354,354,354,2,2,2,229,229,229,2,2,229,354,354,2,2,2,2,2,2,229,229,229,229,229,229,229,229,229,229,229,229,2,229,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2583,1475,879,503,672,392,470,1416,657,899,468,169,962,1263,1029,1029,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1077,1077,1077,1077,1077,1077,2,2,2,2,2,2,2,207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,207,207,207,207,207,207,207,207,207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,207,207,207,207,2,2,2,2,2,2,2,2,2,207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,207,207,207,207,207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,273,2,2,2,2,2,2,2,2,2,2,207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1244,1244,207,207,207,207,207,207,207,2,2,2,2,2,2,2,2,2,2,2,273,2,2,2,2,2,2,1077,1077,1077,1077}, + {2569,1356,1053,410,437,58,1508,831,2272,383,1725,615,1191,1191,1191,2493,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,669,2,2,2,669,388,2,2,2552,2552,2552,669,669,669,669,2,2,2,669,669,669,2552,2,2,2,2,2,2552,669,669,669,669,669,669,669,2,2,2,2552,2552,2552,2,2,2,2,2,669,2,2,2,2,2,669,669,2,2,2,2,2,2,2,2,2,2,2552,2552,2552,2552,2552,2552,388,388,388,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,388,388,388,2552,2552,522,522,2552,2,2,2,2,388,388,388,388,388,388,388,388,388,388,2,669,2,669,669,2,2,2,2,2,2,2,669,669,669,669,669,669,2,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,2552,2552,2552,2552,2552,2552,2552,2552,2552,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669}, + {2368,2136,1457,268,2326,1306,1258,2108,345,1837,1066,2186,2186,650,222,2,2,432,2,2,686,2,686,2,2,1405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2,2,2,2,2,2,2,2,2,2,2,1405,1405,2,2,2,2,2,2,2,2,2,2,916,916,916,916,916,2,916,916,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,916,916,2,916,686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,916,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2207,345,989,421,826,682,1888,476,144,912,654,1959,547,4,477,2,2,4,4,954,4,1099,4,1322,1099,1322,1322,1322,1322,1099,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,1322,2,1099,2,1099,1099,1099,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1099,1099,1099,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1099,1099,1099,1099,1099,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2386,1106,709,251,784,929,1551,2481,304,2148,1546,955,2453,866,866,2,2,2264,2264,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1314,1314,1314,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2317,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,549,2,2,2,2,2,2,2,2,2,2,2,2,2,549,2,2,2,2,2,2,2,2,2,2,2,1314,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1314,2,1314,1314,2,2,1314,1314,2,549,549,549,2,2,2,2,549}, + {2228,1163,1995,649,1000,680,325,1591,774,767,711,711,1418,524,711,401,976,2,2,2,2,2005,2005,2,2,2,2,2,2,1390,1390,2,2,1390,2,1390,1390,2,1390,2,2,2,2,2,2,2,2,418,418,1390,1390,1390,1390,1390,1390,1390,1390,1390,1390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,1390,1390,1390,1390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1390,1390,1390,2,2,2,1390,1390,1390,2,1390,1390,2,2,1390,1390,1390,1390,1390,1390,2,2,1390,1390,1390,2,1390,1390,2,1390,2,2,1390,2,2,2,1390,1390,2,2,1390,2,418,418,1390,1390,2,2,1390,1390,1390,2,1390,1390,1390,1390,2,2,2,1390,2,2,2,2,1390,2,2,2,2,1390,1390,1390,1390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2362,1706,564,1088,1296,1267,70,1015,496,1298,758,154,240,240,154,154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2079,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1715,2260,357,557,783,1195,2288,1997,1120,144,247,175,1277,203,203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2385,2385,2,2385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,641,641,641,641,641,641,2385,2385,2385,2,2385,2385,2385,2385,2385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,274,274,2,2,274,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,274,274,274,274,274,274,274,274,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2290,2505,677,843,527,593,1401,2106,2481,1151,741,741,1557,1872,72,267,2,1344,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,267,2,2,267,267,267,2,267,2,2,2,267,267,267,2,2,2,2,267,267,2,267,267,267,267,267,267,2,267,267,2,267,267,2,2,267,267,2,267,267,2,2,2,267,267,267,267,2,2,2,267,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,267,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2271,2140,373,403,2489,1262,1166,1867,834,126,1837,1462,1837,1124,1665,1147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,910,910,910,910,2,2,910,910,910,2,2,2,910,2,1708,1708,2,2,910,910,910,2,2,2,910,910,2,910,910,910,910,910,2,910,910,910,910,1708,910,2,910,910,2,2,2,2,2,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,2,2,910,910,910,910,910,910,2,910,910,2,910,2,2,2,910,910,910,2,910,910,910,2,2,2,2,2,2,910,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,910,910,910,910,910,910,910,910,910,1708,1708,2,910,1708,1708,1708,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1708,1708,1708,910,910,1708,2,2,2,2,1708,1708,1708,1708,1708,1708,1708,2,1708,2,2,1708,1708,2,2,2,2,2,1708,1708,2,1708,1708,1708,1708,1708,1708,1708,2,1708,1708,1708,1708,1708,1708,1708,796,796,796,1708,796}, + {2300,587,404,483,351,58,197,231,2093,1197,567,1197,2169,1197,1197,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1292,2,2,2,2,1292,1292,2,1292,1292,1292,357,357,357,2,357,357,357,357,2,2,2,2,357,2,2,2,2,2,2,2,2,2,2,2,357,357,357,357,357,2,2,2,2,2,1062,1062,1062,1062,1062,318,2,2,2,2,318,318,318,318,2,2,357,357,357,357,357,357,357,2,1292,1292,1062,2,1062,206,206,206,206,206,1292,206,2,357,357,357,357,2,2,1292,1292,2,2,2,2,1292,357,357,357,357,357,1292,1292,1292,1292,318,318,318,318,318,318,318,318,318,318,318,318,1062,1062,1062,318,318,318,318,1292,1292,318,318,2,1380,1380,1380,1292,2,1292,318,318,1292,1292,318,318,318,318,318,1292,1292,2,2,1292,1292,1292,318,318,357,71,318,1292,318,2,318,318,318,318,318,318,318,318,2,318,318,318,2,318,318,318,318,318,318,318,318,318,318,318,2,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,2,2,2,2,2,2,2,2,318,2,2,318,2,2,318,318,318,318,318,318,318,2,318,318,2,2,2}, + {2303,1018,316,280,1616,909,97,1126,1295,736,216,54,2045,726,1673,2,2,2,2,2,779,779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2390,491,1217,1148,2314,2250,2180,308,613,662,1346,1346,1346,1280,778,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1227,1227,2,2,2,2,2,2,2,2,2,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1227,2,2,2,2,2,1227,1227,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,430,430,1227,2,1227,1227,430,430,2,1227,1227,430,1227,1227,2,2,2,1227,1227,1227,1227,1227,2,1227,1227,2,2,2,2,2,2,2,2,2,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1227,2,2,2,2,2,2,2,2,430,430,2,2,2,2,430,2,430,430,430,430,2,430,430,430,430,430,430,430,430,430,430,2,2,430,2,2,2,2,430,430,430,430,2,2,2,2,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1732,527,1303,664,71,294,404,917,1074,180,2618,2412,441,1987,1750,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1987,2,2,1987,2,2,1987,2,2,2,2,2,2,2,2,2,2,2,2,137,137,137,137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,137,2,2,2,2,2,2,2,2,2,2,2,2,137,137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,137,2,2,2,2,2,2,2,2,2,2,2,1987,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,137,137,137,137,2,2,2,2,2,2,2,1987,137,2,1987,1987,1987,1987,1987,2,2,1987,1987,137,1987,137,137,137,137,137,137,1987,1987,1987,1987,1987,1987,1987,2,137,137,2,137,137,137,137,2,2,2,2,2,2,137,137,2,2,137,137,137,137,137,137}, + {1429,534,1192,299,329,1918,2193,637,1013,123,1196,132,554,1471,767,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2069,2069,2,2,2,2,2069,2,2,2,2069,2069,2069,2069,2069,2069,2069,2069,2069,2069,2,2,2069,2069,2,2069,2069,2,2069,2069,2,2069,2069,2069,1302,1302,1302,1302,2,1302,2,2069,2069,2069,2069,160,2069,2,2,2,2,2,2,2,2069,2069,2069,2069,547,160,547,2,2069,2069,1302,2069,1302,2,1302,2069,2069,2069,2069,2069,2069,547,2,2,2,2,2069,2069,2069,2069,2069,2069,2069,2069,2,2,160,160,1302,2,2,1302,1302,2069,2069,1302,2,2,2069,2069,1302,1302,1302,1302,1302,2069,2069,2069,547,547,1302,1302,1302,1302,1302,2069,2069,1302,2,1302,160,160,1302,1302,1302,160,1302,1302,1302,1302,2,2,2,547,160,547,1302,1302,160,160,2,1302,1302,1302,1302,1302,1302,2,1302}, + {2302,1308,843,1865,922,1354,1609,744,880,1994,1556,1789,2769,762,762,2,2,2,2,2,2204,2204,2204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2204,2204,2204,2204,2204,2204,2,2204,2204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1695,1287,1346,1181,1412,1653,830,2025,957,1720,1614,887,964,964,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,440,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1756,2308,1986,101,957,633,1940,1002,390,1237,95,1441,95,95,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,2,2,2,2,2,2,596,596,596,596,2,2,2,596,596,596,2,596,596,2,2,596,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,234,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,2,2,2,2,2,2,2883,2,2,596,1150,234,596,596,596,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2327,1317,671,1992,261,1580,1903,72,778,1032,1812,1784,2319,2059,2319,2,1523,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,612,612,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,612,612,612,612,612,2,612,612,612,612,612,612,612,612,612,612,935,612,2,2,612,612,2,612,612,2,935,935,612,2,612}, + {2461,1412,540,1183,229,300,47,585,518,402,1863,1863,560,1326,1326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,627,627,627,627,627,627,627,627,2,2,2,2,2,2,2,2,1673,2,1673,2,2,2,2,2,2,2,2,2,1673,2,2,1673,1673,2,2,2,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,2,1673,1673,1673,1673,1673,1673,1673,1673,2,1673,1673,1673,2,2,2,1673,1673,1673,1673,1673,1673,1673,1673,2,2,2,2,1673,1673,2,2,2,2,2,2,1673,1673,2,2,1673,1673,2,2,2,2,2,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,2,1673,1673,1673,2,2,2,2,2,1673,2,2,1673,2,2,1673,1673,1673,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1673,2,2,1673,1673,2,1673,2,2,2,1673,1673,2,1673,1673,1673,1673,1673,1673,1673,1673,2,2,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,1673,2,2,1673,1673,1673,1673,1673,1673,1673,1673}, + {1707,717,366,287,1883,50,599,1371,474,1551,947,2142,1885,947,2008,1004,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,323,323,323,323,2,323,1173,2,2,1173,1173,2,2,323,2,2,323,323,323,2,2,2,2,2,2,323,323,323,323,323,323,323,323,2,2,2,1173,1173,1173,1173,2,2,1173,323,323,2,1173,323,323,1173,1173,1173,323,323,323,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,2,245,245,245,245,323,323,323,323,323,323,323,323,323,2,2,323,323,323,323,323,323,2,2,2,1316,1316,323,2,2,2,2,2,2,2,2,2,2,2,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,323,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,323,2,2,2}, + {2623,1543,652,1824,634,367,43,1229,233,963,1408,2367,2367,1109,1109,56,1468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1943,1943,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1943,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1943,2,2,1747,1747,1747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1747,1747,2,2,1468,1468,1468,2,2,2,1468,176,1468,2,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,2,1468,1468,1468,1468,1468,2,2,2,1468,2,2,1468,1943,2,2,2,1468,1468,2,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1943,2,2,2,2,2,2,2,2}, + {2632,567,1149,1227,1156,2052,643,1585,1197,581,63,718,699,149,149,1940,2,2,2,2,2,2,2,2,2,2,2,2146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,149,149,149,149,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,149,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2146,2146,2146,2146,2146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2146,2146,2,2}, + {1774,716,469,1436,190,728,1795,225,685,1187,2691,119,650,1130,1130,1130,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1927,1927,1927,1927,2,2,1927,1927,2,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1418,2,2,2,2,1418,1418,1418,2,2,2,2,2,2,2,2,2,2,2,1418,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1927,2,2,2,2,1927,2,2,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1462,2,2,2,2,2,2,1927,2,2,2,2,2,2,2,2,1420,1927,1927,2,1420,1420,1418,1418,1418,2,1420,1420,1420,1927,1927,1927,1927,1927,1927,1927,1927,2,1418,1418,1927,1927,1927,1927,1420,1420,1420,1420,2,1927,2,2,2,2,2,2,2,1927,2,1927,2,1927,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2428,1343,459,220,1569,323,2615,1662,116,360,608,405,23,1836,875,2,2,2,2,2,2,2,2,2,2,2,2,825,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,128,512,512,512,2405,2405,611,611,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,650,137,137,137,548,137,137,956,956,956,956,956,137,956,956,1782,1782,1782,1782,745,1782,1782,1782,1782,1968,1782,1782,1782,1782,745,745,745,745,935,745,745,935,935,745,935,1782,1782,1782,1782,1782,1782,745,1782,1782,1968,745,745,1486,1490,55,55,55,880,880,880,220,880,880,880,880,263,880,263,880,935,935,935,1656,1968,1968,1968,1968,1968,1968,1968,1968,935,935,935,935,935,935,935,935,935,935,935,935,935,935,935,935,935,935,301,301,1453,847,847,602,1645,1645,57,57,57,1448,1448,1448,1576,1448,847,1885,1885,1885,1885,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,935,935,935,935,745,960,745,745,2003,2003,1782,935,1782,935,935,2003,2003,2003,2003,2003,935,935,935,1782}, + {2435,1920,394,1482,266,1637,911,1697,1689,1249,1085,1085,397,2292,1355,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2345,662,270,324,1061,1080,1952,593,1480,2111,2667,2093,2059,2120,955,1447,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,904,904,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1772,879,590,1348,820,891,1533,624,622,345,1054,105,55,55,55,347,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1777,455,1487,1190,455,1542,977,2308,437,1129,410,856,1420,412,412,766,2,2034,2034,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,811,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,811,2,2,2,2,2,2,2,2,2,2,2,312,2,2,2,2,1123,1123,1123,1123,1123,2,811,2,2,2,2,312,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,312,312,312,312,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1123,1123,2,2,1123,1123,1123,1123,1123,2,811,811,2,2}, + {2662,2224,1142,656,59,598,730,458,226,1151,741,1286,1015,2,688,2017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2017,2017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2017,2017,2017,2,1068,1068,1068,1068,1068,1068,1068,1068,1068,1068,1068,1068,1068,2,2,2,2,2,2,2,2,2,2,2,852,2,2,2,2,2,2,2,2,2,2,2,2,2,2,852,852,852,2,2,2,2,2,1349,2,2,2}, + {2666,768,529,990,2329,130,1678,2466,318,1083,387,1524,511,2,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,565,740,740,740,740,565,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,905,2,2,2,2,2,2,2,2,2,2,2,2,2,905,2,905,905,905,2,2,2,2,2,2,2,2,2,905,905,905,905,2,828,828,905,565,565,905,2,2,2,2,2,2,905,905,2,2,2,2,2,2,905,905,2,2,905,905,905,905,2,2,2,2,905,2,2,2,565,565,565,905,565,2,2,2,2,2,565,565,2,2,2,2,565,565,565,2,2,2,2,565,565,565,2,2,2,2,565,2,2,2,2,2,2,2,2,2,2,905,905,2,2,2,2,905,905,565,565,565,565,565,565,565,2,565,565,565,565,565,937,937,565,565,565,565,565,565,565,565,565,937,2,565}, + {2673,772,867,209,1487,657,1508,1333,1307,242,1588,1672,1329,1672,1672,1998,1672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,789,2,2,2,2,789,789,2,2,2,789,789,859,859,859,2,2,859,2,859,2,2,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2,2}, + {2501,1216,246,1278,718,704,2019,88,273,1203,67,1488,1828,2,2,1489,1489,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1808,667,1162,225,597,1410,1390,390,2207,968,1136,26,533,2,1807,1807,1397,1397,1397,1397,1397,1397,1397,1397,1397,2,2,2,2,1397,1306,1397,1306,2,2,1306,1306,1306,1306,1306,1306,2,2,2,2,1306,2,2,1306,2,2,2,1397,1306,53,1535,1535,53,2,2,2,2,2,2,2,2,2,2,2,2,1306,1306,2,2,2,1306,1306,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1306,1306,2,2,2,2,2,2,2,2,1306,2,2,2,2,2,2,2,2,2,2,2,1306,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1306,1306,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1306,2,2,2,2,2,2,2,2,2}, + {2474,2292,1818,2061,2833,751,2172,1708,1210,1675,370,131,163,2,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,213,2,213,213,267,2,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,213,213,2,267,267,2,2,2,213,267,267,267,213,213,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,267,267,2,213,213,213,213,213,213,213,213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,213,213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2}, + {1751,1575,889,828,82,1956,712,499,1420,1686,339,2326,2035,2,2,558,558,2,1234,2,2,2,2,2,2,2,2,2,2,2,1239,1239,1239,2,2,2,431,1239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1239,1239,2,2,1239,1239,1239,1239,1239,1239,1239,2,2,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1239,1055,1055,1055,1239,1239,1239,1055,1239,2,1055,1239,1239,1239,1239,1239,1239,1239,1055,2,2,2,2,2,2,2,2,1055,1055,1239,2,2,2,2,2,2,2,2,2,2,2,2,2,1055,1055,1055,1055,2,2,2,2,1055,1055,2,2,1055,2,2,2,2,2,2,2,2,2,2,1055,1055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1239,1239,1239,1239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1239,1239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2522,1148,1943,168,218,252,543,1535,2004,130,353,353,42,2,2,2,1173,1173,2,1547,2,2,2,2,2,2,2,1547,1173,1547,1547,2,2,2,2,2,2,1173,2,2,2,1547,1173,2,1547,1547,1547,2,1547,1547,1547,1547,1547,1547,2,1547,2,2,2,2,2,2,2,2,1547,2,1547,2,1547,1547,2,2,2,2,2,2,2,2,1547,2,2,2,2,2,2,2,1547,1547,2,2,1547,1547,1547,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1547,2,2,2,1547,1547,1547,1547,2,1547}, + {2695,432,1213,579,865,1637,1857,84,447,155,2492,347,1980,2,2,2,1155,1155,1155,2,1933,1933,1933,2,2,2,2,2,2,2,1901,1901,2,2,2,2,2,2,2,2,2,2,2,2,4,4,16,32,2,2,2,2387,1024,1024,2387,2387,2387,51,51,51,51,806,806,51,2,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,1907,1907,2,1907,1907,1907,1907,1907,81,81,81,2406,483,648,648,648,606,606,606,606,606,606,606,606,606,606,606,606,606,606,806,2523,2523,2523,2523,806,606,606,806,806,806,806,806,606,606,606,606,806,806,806,806,606,606,606,606,606,806,806,606,606,2,2,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,806,806,806,1156,1156,806,806,1055,1055,1055,1055,806,806,806,1055,1055,606,1907,36,36,36,36,36,36,9,9,9,918,36,2902,36,36,36,36,289,2947,2947,2947,289,289,289,289,289,289,289,36,36,1001,289,289,289,289,289,1001,606,606,289,2947,2947,2947,2947,2947,2947,606,606,606,606,606,606,606,606,606,1156,606,606,606,606,606,606}, + {1808,1683,474,1761,106,602,1416,217,1351,1602,366,393,1966,2,2,2,2,2,378,378,606,606,606,2,2,2,2,2,919,919,919,919,2,2,2,2,2,919,2,2,2,2,919,919,2,2,2,919,2,2,2,919,2,1963,919,919,919,919,919,919,919,919,2,2,2,919,2,2,2,2,919,2,2,2,919,919,919,2,919,919,2,2,919,919,919,919,919,2,2,2,919,919,919,2,2,919,919,919,919,919,2,919,919,2,2,919,919,919,919,919,2,2,2,2,2,919,919,919,2,919,2,919,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,919,2,2,919,2,2,2,919,919,2,2,2,2,2,919,919,919,919,2,2,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,2,919,919,919,919,919,2,919,919,2,919,919,919,919,919,919,2,2,919,919,919,919,2,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919}, + {2502,1713,1050,1694,1876,459,2000,674,2097,1461,2408,945,977,2,2,2,2,2,1263,1263,1263,1263,2,2,2,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,609,1263,1263,1126,1126,1126,1126,1126,1126,1126,1263,1263,1263,1263,1263,1263,2,2,2,2,2,2,609,609,609,609,609,609,2,609,609,609,609,2,2,2,2,2,2,2,609,609,2,2,2,609,609,1263,1263,1263,1263,1263,1263,2,1263,1263,1263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1827,651,1490,2046,484,1508,284,1993,2003,2072,2746,556,616,2,2,2,2,2,4,4,4,4,2027,2027,2027,2027,2027,2027,1618,1618,2027,2027,2027,2027,2027,2027,2027,108,108,2027,2027,2027,374,2,2,1082,36,36,374,374,374,36,708,2027,2027,2027,1082,374,708,708,708,708,708,708,708,708,708,708,708,708,708,4,148,108,108,108,108,108,108,108,4,4,108,4,2635,708,2635,96,2027,2027,2027,2027,2027,2027,768,4,4,2635,2635,2635,2127,688,339,232,232,232,232,232,232,232,232,232,232,232,232,2,2,96,1504,324,1504,1504,1504,232,236,236,236,232,232,236,2,2,2304,236,1504,2304,324,324,232,232,232,232,232,232,2127,1618,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,688,688,2027,2027,2027,2027,509,509,509,1082,1082,232,232,232,232,232,232,2027,2027,2027,2027,2635,2635,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,509,519,2178,2178,2178,1573,2127,2127,2127,339,339,339,339,339,339,339,339,339,339,472,472,310,310,472,472,472,872,59,59,1118,1118,559,559,559,1888,559,559,872,592,872,872,872,872,232,1082,1082,1082,1082,1145,1145,1145}, + {2428,1576,1692,449,2012,240,1167,418,272,1557,2197,645,645,2,2,2,2,2,2150,2150,2,2,562,715,2,2,2,81,81,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,349,349,349,846,846,846,846,846,846,846,349,349,846,846,349,2,2,2,2,2,2,2,2,2,2,1845,1845,1845,1845,1845,1845,1845,1845,2,2,2,2,2,1845,2,2,2,2,2,2,2,2,349,2,846,846,9,81,81,81,846,846,846,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,349,349,349,349,349,349,349,349,349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81,2,81,2,81,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2756,2,4,4,4,2,4,4,4,128,64,128,192,2,2,2,576,576,96,96,96,96,96,96,96,96,4,4,4,4,820,144,144,144,820,820,24,24,273,562,18,562,562,562,188,188,188,273,273,1431,1431,1431,135,135,135,135,135,135,135,349,349,349,349,846,846,846,846,846,846,846,2102,846,846,321,1100,321,321,1466,1466}, + {2721,1522,260,2512,2426,377,1659,704,323,1473,2020,395,306,2,2,2,2,886,886,2,805,2,2,2,2,2,2,1622,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,1852,1852,886,886,1852,1852,1852,1852,1852,1852,1852,1852,1852,1852,274,886,886,274,274,274,274,886,886,886,886,886,886,886,2,886,886,886,886,886,886,886,1852,2747,2747,1852,1852,2747,2747,2747,1852,2747,1852,1852,1852,1852,1852,578,2747,578,578,945,886,1852,1852,1852,1852,1852,945,945,945,945,945,945,945,945,945,945,945,1852,1852,1852,1852,1852,945,945,945,2,2,1852,1852,1852,886,869,869,2,869,869,886,886,2747,2747,2747,2747,2747,886,2747,2747,2747,886,886,1852,869,1852,886,886,886,2161,2161,2161,1852,2,1852,1852,2,1852,2,2,2,2,2,2,2,2,2,2,945,1852,1852,2,2,2,2,1852,1852,1852,2,2,2,1852,1852,1852,2,2,1852,2,1852,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1852,1852,1852,1852,1852,2,2,2,2,886,886,1852,1852,945,886,886,2,2,2,886,945,945,2,945,886,2,2,886,2,2,2,2,886,886,886,886,886,886,886,886,886}, + {1922,2418,759,2174,1560,472,1834,1133,327,183,782,782,1783,2,2,2,2,709,291,709,709,709,709,709,2,2,2,2,2,2,709,709,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,2,2,2,2,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,709,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2414,720,1022,2176,52,1108,2098,476,114,87,585,169,1201,2,2,2,1292,1292,1292,2,2012,2012,2012,2012,2012,2,2,2,2,2,2012,2012,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2012,2012,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2727,781,1689,1709,997,2563,1032,468,44,992,1214,725,75,2,2,2,2,360,360,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1458,1458,2,2,2,2,1458,1458,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,360,360,360,360,360,360,360,1458,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3003,2,2,2,2,2,267,267,267,360,360,360,360,360,267,267,577,577,2,267,577,360,360,360,360}, + {1948,1085,1344,2090,1435,2389,3193,1007,1003,244,667,1838,2062,2,2,2,1802,299,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,798,2,2,798,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,798,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,798,2,2,2,2,2,2,2,2,2,2,2,2,2,2,739,739,2,2,2,2,2,2,2,798,798,798,2,2,2,798,798,2,2,798,798,798,798,2,2,798,2,2,798,798,2,798,798,798,798,2,2,2,2,798,2,798,2,2,2,798,798,2,2,2,2,2,2,798,798,798,798,798,2,798,2,2,2,2,2,2,2,2,2,2,798,798,798,798,798,798,798,2,2,2,2,598,598,598,598,598,598}, + {1820,1726,1335,1818,2058,1579,2212,288,761,253,572,572,1836,2,2,2,1836,1196,2,1196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2433,932,689,818,2014,1498,749,1645,867,1627,47,1766,2193,2,2,2030,2030,2,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1800,1800,1800,1800,2,2,2,1800,2,2,2,1800,1800,2,2,2,1800,1800,1800,1800,1800,1800,1800,2,2,2,1800,1800,2,1800,1800,1800,1800,1800,2,1800,1800,2,2,2,1800,1800,2,2,1800,1800,1800,1800,1800,1800,1800,1800,1800,1800,2,1800,2,2,2,2,2,2,2,2,2,1800,2,2,2,2,1800,1800,2,2,2,2,2,2,2,2,2,2,2,2,1800,2,2,2,2,2,1800,1800,1800,1800,1800,1800,1800,1800,2,2,2,2,2,2,2,2,2,2,2,2,1800,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2463,712,1525,2092,2942,352,761,242,2178,2339,483,1905,1347,2,2,65,529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,811,2,2,2,811,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,811,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2547,920,386,925,74,579,323,2319,520,2332,1535,751,1591,2,770,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1804,1804,1804,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1804,1804,1804,2,1804,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1804,2,2,2,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,2,2,2,2,2,1804,1804,1804,1804,1804,1804,1804,1804,1804,2,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,1804,2,1804,1804,2,1804,2341,2341,2341,1804,1804,1804,1804,1804,1804,1804,2341,2341,2341,2341,2,1804,1804,1804,1804,1804,1804,1804,1804}, + {1947,718,981,2254,598,947,2091,1673,382,484,438,502,2169,2,766,766,766,2,2,2,2,2,2,2,2,2,2,2,2,1891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1891,1891,2,1891,2,2,2,1891,1891,1891,2,2,1891,1891,1891,1891,1891,1891,1891,2,2,1891,1891,2,1891,2,1891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1891,2,1891,1891,1891,1891,1891,2,2,2,2,2,2,2,2,2,2,2,1891,1891,1891,1891,1891,2,2,2,2,2,2,2,2,2,2,2,2,1891,2,2,1891,2,1891,1891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1891,2,2,1891,1891,2,2,2,2,2,2,2,2,1891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1891,1891}, + {2596,897,695,155,863,1307,190,381,356,1003,2596,3024,460,2,611,611,611,611,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1276,1276,1276,1276,1276,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2452,2588,2055,665,818,2622,413,1260,965,211,989,1219,166,2,1251,1251,2,1256,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1607,1607,2,1607,1607,2,1607,1607,396,2,2,396,396,2,2,396,396,396,1607,2,2,1607,396,2,2,2,2,1607,2,2,1607,2,1607,1607,2,2,2,1607,1607,2,2,2,2,2,1607,1607,1607,1607,2,2,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,2,2,2,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,2,396,396,1607,1607,1607,1607,1411,1607,396,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,1607,396,1607,1607,1607,1607,1607,1607,1607,2,1607,1607,396,1607,1607,1607,1607,1607,1607,396,2,396,396,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,396,396,2,396,2,2,2,2,2,1607,1607,2,2,396,396,2,2,2,396,396,396,2,2,2,2,1607,1607,2,2,401,2,2,2,2,1607,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1978,796,582,1580,436,927,2520,2677,1176,1991,1952,2781,2781,1379,1379,880,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,555,2015,2015,2015,2015,2,774,774,413,413,2,2015,2,2,2015,413,413,413,2,2,774,2,2,413,413,413,413,413,2,413,413,413,2,2,2015,2,2,2,2,2,2,2,2,2,2,413,483,2,413,413,413,2,2,2,2,2,2,2,2,413,413,774,774,774,774,774,774,774,2,774,774,413,2,2,2,2,774,774,774,2,774,774,774,2,2,774,2,2,2,2,774,774,774,774,774,774,2,774,774,774,2,774,2,2,2,2,2,2,2,2,2,774,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,774,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1957,2311,993,276,293,2826,1087,880,927,1811,1122,2974,2974,2,2,590,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1779,1779,1779,2,2,2,2,1779,1779,1779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1779,1779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2552,998,533,827,1619,831,1861,918,750,1955,241,1899,448,2151,2151,449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2551,2123,2748,2283,1471,2939,1746,244,1212,1055,1602,896,765,765,765,149,2,2,2,2,2,2,2,2,2,2,641,2,2,2,2,2,641,641,2201,2,2,2,2,2,2,2,2,2,2,2,2201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,641,2201,2201,2201,2201,2,2201,2201,2201,2201,2201,2,2,2,2,2,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2,2,2201,641,2201,2201,2201,2,2201,2201,2201,2201,2201,2201,2201,2201,641,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,2201,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641}, + {1860,579,1000,1575,898,170,185,1032,293,2754,438,459,459,2,1199,1199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1668,1668,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1668,1668,1668,2,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,1668,2,1668,1668,1668,2,2,2,1668,1668,1668,2,1668,1668,2,1668,1668,1668,2,1668,1668,1668,1668,1668,1668,1668}, + {2602,2417,1888,2528,1410,669,1543,233,814,2478,225,1449,1449,224,1671,1671,2,2,931,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,457,2,2,2,2207,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2207,2207,2207,2207,2207,2207,2207,2207,2207,2207,2,2,931,931,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1977,1090,1949,3135,1816,896,2042,2686,780,2002,1823,1823,139,888,888,888,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2118,2118,2118,2118,2118,2,2,2,2,334,2118,2118,2118,2118,2,334,334,334,334,334,2,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,2118,2118,2,2118,2118,2118,2118,2118,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,1726,545,545,545,545,545,545,334,334,334,334,334,334,334,545,334,334,334,334,334,334,2059,2059,2059,545,545,917,1726,2059,1726,1726,1726,545,545,545,2059,545,545,545,2059,2059,2059,2059,2059,2,2059,2059,2059,2059,2059,2059,2059,2059,2059,2059,2059,2059,86,2059,917,1726,1726,1726,1726,1726,1726,1726,1726,1726,917,2059,334,334,2059,2059,2059,545,1726,2059,2059,1726,1726,1726,2059,2059,2059,2059,2059,2059,234,234,234,234,234,234,234,234,234,234,2059,2059,2059,2059,2059,2059,2059,1726,1726,1726,1726,1726,1726,1726,917,1726,2059,2059,2059,2059,2059,2059,2059,2059,2059,2059,917,917,917,1726,2059,2059,2059,2059,2059,2059,2059,1726,1726,1726,1726,2059,1726,1726,1726,1726,1726,1726,1726,1726}, + {1889,2527,1366,1371,387,925,1751,162,250,1064,292,467,467,546,1244,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2943,838,301,1319,859,2508,2032,902,1466,2979,170,503,503,503,176,2,2,2,263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,263,263,263,263,263,263,2,2,2,263,263,247,247,2,247,263,263,263,263,263,263,263,263,263,247,247,2,247,247,247,247,2,2,2,2,2,263,2,2,2,2,2,2,2,1527,2,247,2,2,2,2,2,2,263,263,2,247,263,2,2,263,263,263,247,247,247,2,2,2,2,2,247,247,247,2,247,2,2,247,247,247,2,263,247,247,247,247,247,247,247,247,247,247,247,247,2,2,2,2,1527,2,1527,263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1527,2,1527,1527,2,2,2,2,2,2,2,2,2}, + {2492,1186,1350,1616,2749,1962,33,708,279,813,1390,489,1203,268,173,2410,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2497,941,2366,712,1217,761,1798,208,1638,20,73,199,199,199,199,355,518,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,440,440,440,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,473,2,2,2,2,2}, + {2500,1575,423,541,561,380,262,1564,1923,1242,2084,1758,1283,2213,924,924,2,2,2,2,2,2,2,2,2,2,2,1827,1827,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,924,924,2,2,2,2,2,2,924,2,924,924,2,2,2,2,2,2,1827,1827,1827,1827,1827,2,924,924,924,924,2,2,2,2,924,924,924,924,924,924,924,924,924,2,2,2,2,924,924,635,635,924,924,924,924,924,924,924,924,924,924,924,924,924,1827,924,924,635,2,1827,1827,2,2,2,2,2,924,924,924,924,924,924,635,635,635,635,635,635,635,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,924,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,2,924,924,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,1302,2,2,2,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,635,635,635,635,635,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,2,2,2,2,924,924,924,924,635,2,2,2,635,924,924,924,924,924,924,924,924,1302,1302,1302,1302,1302,924,924,924,924,924,924,924,924,924,635,2,635,635,635,635,635,635}, + {1842,1736,489,743,1539,1681,683,1412,1418,312,2778,2778,1975,1975,803,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2025,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2025,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2025,2025,2,2025,2025,2025,2,2,2,2,2025,2,2,2025,2025,2,2,2025,2025,2025,2,2,2,2,2,2025,2025,2,2025,2025,2025,2,2025,2025,2025,2025,2025,2,2,2,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2,2,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2025,2,2,2,2,2,2,2,2,2,2025,2025,2025,2025,2025}, + {1843,1934,741,1145,177,650,766,332,832,441,1014,1616,1123,1123,1123,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1671,1671,1671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1671,1671,1671,2,1671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1671,2,2,2,1671,1671,2,2,2,2,2,1671,1671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2824,1183,2201,278,241,2230,1591,1648,1036,818,1321,1312,754,813,813,813,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1253,1253,2,2,2,2,2,2,2,2,2,1253,1253,1855,1855,1855,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1253,2,2,2,2,2,2,2,1253,1253,1855,1855,1855,1855,1855,1855,1855,1855,1855,1855,1253,1253,1253,1253,1253,1855,1855,1855,1855,1253,1253,2,2,444,1253,1253,1253,1253,1253,1253,444,444,1253,1855,1855,1855,1253,1253,1253,1253,1253,1253,1253,1253,1253,1855,1855,1253,1253,1855,2700,2700,2,2,2700,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1855,1855,1855,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,444,444,1253,1253,2751,1253,2751,2751,1253,1253,2751,2751,1253,1253,1253,1253,1253,1253,1253,1253,1253,861,861,861,861,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253}, + {2617,617,259,1016,1473,1772,560,2415,370,207,1159,1349,2503,152,415,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1735,2,2,2,2,1735,2,2,2,2,2,2,2,2,2,2,2,2,2,1735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,543,543,543,2,2,1735,2,19,19,19,19,2,1735,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1900,2506,952,1059,163,870,681,1235,1271,1188,2071,1705,1183,648,404,2,2,2,2,2,2,2,2,2236,2236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2236,2236,2236,2,2,2236,2,2,2236,2,2,2,2,2,2,2,2,2,2,2,2,2,2236}, + {2662,1208,2848,426,2165,402,954,1804,555,41,916,724,674,1082,1783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2662,1443,2327,132,490,1149,1572,744,429,621,1763,2383,1903,1246,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,337,2,2,2,2,2,2,2,2,2,337,2,2,2,2,2,337,2,337,2,2,2,2,337,337,2,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,337,337,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2673,2182,1307,1776,1233,1828,1828,340,249,216,503,160,160,582,926,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2,1018,1018,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,2,2,2,2,2,2,2,899,899,899,899,899,899,1018,1018,899,899,899,899,899,899,2,899,2,2,2,391,391,391,391,391,391,391,391,2,2,2,391,2,2,2,2,1018,592,592,592,592,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1103,1103,2,2,2,594,594,594,594,594,2,1018,1018,2,1018,1018,1018,1018,1018,1018,1018,1018,1018,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1018,2,1018,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1018,1018,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1018,1018,2,2,2,2,2,2,2,2,2,2,1018,1018,1018,1018,1018,2,1018,1018,2,2,2,2,2,2,2,1018,1018,2,2,2,2,2,2,2,2,2,2,2,2,1018,1018,2,2,2,2,2,2,2,1018,1018,1018,1018,1018,1018,1018,2}, + {1912,1494,301,682,1524,2974,1138,330,1113,114,2687,234,442,442,606,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,2,2,1165,1165,1165,2,2,2,2,2,606,1165,1165,2,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,1165,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2042,620,1074,2057,2758,859,815,1127,766,1693,252,808,981,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,452,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,452,452,452,452,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,452,452,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2102,881,2170,1673,705,101,58,1712,1568,214,758,488,1007,269,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,243,243,2,2,2,2,2,2,2,2,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,243,2,2,2,2,243,2,243,243,243,243,243,243,243,243,243,243,2,243,243,2,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,243,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,243}, + {1913,1232,1826,1053,2045,865,1492,789,1475,1985,2626,2830,1205,206,394,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2876,2190,1370,1614,1651,1936,1346,987,2412,1951,2275,15,1418,611,1876,2,1876,2263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1291,1291,1291,2,1291,2,2263,2,2263,2,1291,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2692,2665,961,1478,324,429,1311,376,1648,130,2083,1047,409,343,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,587,2,2,2,2,2,2,587,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2116,2116,2,2,2,2,2,2,59,59,59,59,59,59,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2280,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,46,46,46,46,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2126,2895,2856,306,1475,1404,924,3236,2277,27,285,340,1560,335,2621,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1229,2,2304,2,2,2,2,2,2,2304,2,2,2,2,2,2,2,2304,2304,2,2,2,2,2,2,2,2304,2304,2304,2304,2304,2304,2,2,2,2,2,2,2,2,2,2304,2,2,2,2,2,2,2304,2304,2304,2304,1229,1229,1229,1229,2,2,2,2,2,2,2,2,2,2304,2304,2304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2304,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2122,1087,563,1669,647,2996,151,2458,250,310,71,1348,355,965,2815,1333,1333,2,2,2,2,2218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2218,2,2,2,2,2218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2218,2218,2,2,2,2,2,2,2,2,2218,2218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2218,2218,2,2218,2,2,2,2,2218,2218,2218,2218,2218,2218,2218,2218,2,2668,2,2,2,2,2218,2,2668,2668,2668,2,2,2,2,2,2,2,2,2223,2,2,2668,2223,2223,2668,2668,2668,2668,2,2,2,2,2,2,2,2,2,2668,2668,2668,2218,2,2,2,2,2,2,2,2,2,2218,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2223,2223,2223,2,2,2,2,2223,2223,2,2,2}, + {2582,1029,382,1035,39,962,892,1580,1357,741,1409,1184,2823,1747,775,2,2,2,2,2,2,2,1848,1848,1848,1848,1848,1848,2,2,2,2,1848,1848,2,1848,1848,1848,1848,1848,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1848,1848,2,2,2,1848,2,2,2,1848,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1848,2,2,2,2,1848,2,2,1848,2,2,2,2,2,2,2,2,2,2,2,2,2,1848,1848,2,2,2,2,2,2,2,2,2,2,2,2,1848,1848,1848,2,2,2,2,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,2,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,2,2,1848,1848,1848,2,2,2,2,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,2,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848}, + {1952,1968,2260,2945,2464,1055,2626,570,1316,1828,1828,970,970,221,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1813,1664,1664,1664,1664,1813,1813,2,1813,1664,1664,1664,1664,1664,2,2,2,2,1664,2,2,2,2,2,2,2,2,1664,2,2,2,2,2,2,2,2,1664,1664,1664,1664,1664,1664,1664,2,1664,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1813,1813,1813,2,2,2,1813,1813,1813,2,2,1813,1664,1664,1813,1813,1813,1813,2,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,2,2,2,1813,1813,1813,1813,2,2,1813,1813,1813,1813,1813,1813,2,1813,1813,1813,1813,1813,1813,1813,2,1813,1813,1813,1813,2,2,2,2,2,2,2,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,2,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,1813,2,2,2,2,1813,1813,2,2,1857,225,427,1058,2048,2048}, + {2600,985,1174,2932,1567,1379,2566,1537,15,850,282,634,634,2267,226,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1194,2,2,2,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,2,2,2,2,1194,1194,1194,1194,2,2,2,2,1194,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1194,2,1194,1194,2,2,1194,2,2,2,2,2,1194,1194,1194,1194,2,2,2,2,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194}, + {2583,892,2011,697,2672,329,206,2725,2008,765,590,2233,1400,2591,1272,860,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,308,308,308,308,308,308,308,308,308,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,308,2,2,2,2,2,2,2,2,2,2,2,2,2,308,2,2,308,2,2,2,308,308,308,308,308,308,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,308,2,308,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2687,629,1634,712,512,363,1855,343,1002,161,1531,191,1515,967,1239,1239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1345,1345,1345,1345,1345,1345,2,2,2,2,2,2,2,2,1345,1345,2,2,2,2,2,1345,1345,1345,1345,2,2,2,2,2,2,1345,1345,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,1345,2,2,2,1345,2,2,1345,2,2,2,2,2,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,1345,1345,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1345,2,2,2,1345,2,2,2,2,2,2,2,2,1345,1345,1345,1345,2,2,2,2,2,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,2,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345}, + {1947,1699,1341,486,1765,1960,264,899,1082,1674,987,1878,930,1008,930,930,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1637,2,2,2,2,2,2,2,2,2,1637,2,2,2,2,2,2,2,2,2,1637,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1329,1329,2,1329,1329,2,2,2,1637,1329}, + {1953,1527,1643,591,1517,2427,1232,1555,2542,495,675,2534,2534,3106,83,3106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1541,1541,2,2,2,2,2221,2,2,2,2221,2,2,2,2221,2221,2221,2,2221,2221,2,2221,2,2,2,2221,2221,2221,2221,2221,2221,2221,2,2221,2221,2221,2221,2221,2221,2,2,1622,638,922,1575,1575,1135,1783,1783,1783,82,82,2221,2221,2221,2221,2221,2221,1541,2221,2221,1541,769,769,2221,2221,2221,2221,2221,2221,2221,2221,2221,2221,2221,2221,2221,2221,1541,1541,1541,1541,1541,769,1541,1541,769,769,769,769,769,769,1541,1541,1541,1541,1541,1541,2221,769,2221}, + {2588,2051,794,2299,1480,1795,804,1763,1562,677,465,1404,271,271,1495,1645,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,947,947,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2744,1728,2213,792,761,1667,1908,31,447,442,815,2865,762,762,762,762,2,2,2,2,2,2,2,2,2,2,2,2,649,649,649,2,2,2,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,2,92,92,92,2,649,649,649,92,92,92,92,92,92,92,92,92,92,92,92,481,2,2,484,2,2,649,2,2,2,2,484,484,484,484,484,484,484,484,2,484,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,481,2,2,2,2,2,481,481,481,481,481,481,2,2,2,484,484,484,2,481,481,168,649,92,2,2,2,2,2,2,2,2,2,2,649,2,2,2,2,2,2,2,2,2,2832,2,2,649,649,649,649,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,649,484,484,484,2,2,649,649,649,649,649,2,2,2,2,2,2,2,649,2,2,2,2,2,2,2,2,2,2,649,649,649,649,649,649,649,649,2,2,2,2,2,649,2,2,2,2,2,2,2,2,2,2,649,649,2,649,2,649,649,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2722,1406,1257,807,2191,3017,1330,1023,602,2124,794,530,733,733,1083,2528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1720,2,2,2,2,2,2,2,2,2,1720,1720,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,952,2,2,2,2,1720,1720,1720,2,2,1720,1720,1720}, + {2604,2214,2076,2441,2223,1489,424,117,1855,1391,1404,414,414,2048,2048,303,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,2,2,1418,2,2,2,2,2,2,2,2,2,2,2,1418,1418,433,2,2,433,433,433,433,2,2,2,2,1418,1418,1418,1418,1418,1418,1418,1418,1418,2,1418,433,433,433,433,433,433,433,433,433,433,433,2,2,433,433,433,433,2024,2024,2024,2024,2024,2024,2024,2024,2024,779,779,433,433,433,433,433,433,433,433,433,433,433,433,779,779,2,2,2,2,779,779,1418,2024,2024,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,779,2,2,2,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,406,779,779,433,779,2024,2024,433,779,779,779,779,779,1418,1418,779,779,1418,1418,1418,1418,1418,1418,433,433,433,433,433,433,433,433,433,1418,433,433,433,433,433,433,366,366,366,366,366,366,366,366,366,366,366,366,366,366,2,1418,2,2,2,779,2,2,2,779,779,779,779,779,779,779,779,2,779,779,779}, + {2720,1547,1527,1995,564,995,845,1152,395,848,483,2371,299,299,1000,1000,2,2,2,2,2,2,2,2,2,1375,1375,1375,1375,1600,2,2,1375,1375,1375,2,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,2,2,2,2,2,2016,2016,2016,2016,2,2,2016,2016,1600,1600,1600,2,2,2,1375,1375,1375,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1375,1375,1375,2,2,1375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1375,1375,1375,2,1375,2,2,2,2,2,2,2,2,1375,1375,2,2,2,2,2,2,2,2,2,2,1375,1375,1375,1375,1375,1375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2728,908,2523,497,1747,524,316,382,1156,274,50,1215,809,134,134,452,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1661,1661,1661,1661,1661,1661,2,2,1661,1661,2,2,2,2,1661,2,2,2,2,2,2,1489,1489,1489,1489,1489,1489,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1661,2,2,2,2,2,2,2,1661,1661,2,2,2,1661,1661,2,2,2,2,2,1661,1661,2,1489,2,2,1661,1661,2,1661,2,2,2,2,2,1661,2,2,2,2,2,2,2,2,2,1489,1661,2,1661,2,2,2,2,2,2,2,2,2,2,2,2,2,1489,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,771,771,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1661,1661,2,2,2,2}, + {2626,2468,2838,845,2060,218,1080,912,911,1973,1365,920,1316,1316,2,1316,1316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1013,1013,2,2,2,1013,2,2,2,2,2,2,2,2,2,1013,1013,1013,1013,1013,1013,1013,1013,1013,2,1013,1013,1013,1013,1013,1013,1013,1013,1013,1013,1013,721,721,721,1013,2,1013,1013,1013,1013,1013,1013,1013,1013,721,721,1013,2,1013,1013,1013,1013,721,2,721,721,721,721,1013,2,2,2,1013,1013,2,2,2,2,2,1013,1013,1013,2,2,1013,1013,2,1013,2,2,2,2}, + {2734,1727,1743,1026,809,1154,779,244,1238,1616,812,784,825,1810,1810,1810,1810,1559,1559,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1559,2,2,1559,1559,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1559,2,2,1559,1559,2,2,2,2,1559,2,1559,2,2,2,2,2,2,2,2,2,1559,1559,1559,1559,2,2,2,2,2,2,2,2,1559,1559,1559,2,2,2,1559,1559,1559,2,1559,1559,1559,1559,1559,1559,1559,1559,1559,1559,1559,1559,2,2,2,2,2,2,2,2,2,2}, + {2947,875,1603,1364,2297,570,2949,1952,701,84,296,1958,2709,1958,144,144,605,2,2,2,2,2,2310,2,2,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,605,2,2,2,2,605,2310,2310,2,2310,2310,2,2310,2310,2,2310,2310,2310,2310,2310,2310,2,2,2310,2,2,2310,2310,2310,2310,2310,2310,2310,2,2310,2310,2,2,2,2310,2310,2310,2,2310,2,2,2,2310,2310,2310,2310,2310,2,2,2,2,2,2,2,2,2,2310,2310,2310,2,2,2,2,2,2,2,2,2310,2310,2310,2310,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2310,2310,2310,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2180,2262,1651,204,3193,2121,2725,1016,629,1834,603,2848,26,26,728,728,728,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,487,487,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,487,2,2,2,2,2,2,2,2,2,2,2,487,487,2,487,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2669,1418,506,671,2202,343,617,583,21,2496,983,449,1671,1193,2,2502,2502,2,2,2,2,2,2,2,2,2,2,2,2,2,384,384,2,2,2,2,2,1849,1777,384,384,384,384,2,2,2,2,2,2,2,1849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1849,1849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1777,1777,1849,1849,1849,1849,1849,1849,1849,1849,1849,1849,1849,1849,1849,2,2,1849,1849,1849,1849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1515,1515,1515,1515,1515,2,1777,1777,1515,1515,1515,2,1515,1515,1515,2,2,2,2,2,2,2,2,2,2,2}, + {2131,752,2841,458,201,361,935,3205,2815,904,35,2699,555,1344,2,664,1377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,264,264,264,2,264,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2330,2,2,2,2,2,2,2,2,2,2,2,2,2330,2330,1187,1187,1187,2330,2330,2330,2330,2,2330,2330,2330,2330,2330,2330,2330,2330,2,2,2330,2330,2,2330,2,2,2,2,2,2,2,2,2,2330,2330,2,2,2,2,2330,2,2330,2,264,264,264,264,264,2,2,2,2,2330,2330,2330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2648,1328,2578,133,1377,105,2485,2139,323,1045,145,761,1201,1848,2,814,814,814,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1914,2,2,2,2,2,2,2,1914,1914,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,104,104,2,2,2,2,2,2,2,761,2,761,2,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2741,2814,691,1055,749,2147,821,1246,2190,453,1133,2673,1689,630,2,2,2274,2274,2,2,2,2,2,2,1423,1423,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,1423,1423,2,2,2,2,1423,1423,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,1423,1423,1423,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1423,1423,1423,1423,2,2,2,2,1423,2,2,2,2,2,1423,2,2,2,2,1423,1423,1423,1423,2,1423,1423,1423,1423,1423,1423,2,1423,2,2}, + {2999,358,250,1379,102,2349,1491,2074,42,376,2811,1220,296,296,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1844,1844,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1214,1214,1214,1214,1214,1214,2,1214,2,1214,1214,2,2,2,2,2,2,2,2,2,2,2,1214,2,2,2,2,2,2,1214,2,2,2,2,2,1214,2,1214,1214,1214,2,2,2,2,2,1214,1214,2,2,2,2,2,1214,2,2,2,2,2,2,2,2,1214,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2020,1662,656,1990,2334,1370,452,962,416,1709,1384,685,843,540,1193,1193,1193,1193,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1193,1193,1193,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2810,1274,499,742,1724,425,190,1561,1302,2603,2255,917,661,661,2,2,2,495,2,2,2,2,2,2,2,2,2,2575,2,2,2,2,2,2,2,2,2575,2575,2575,2575,2575,2575,2,2,2,2,2575,2575,2575,2575,2,2,2,2,2,2575,2575,2575,2575,2575,2575,2575,2,2575,2575,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2575,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2575,2,2,2,2,2,2,2,2,2,2575,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2150,589,876,1616,2655,432,902,1028,433,1375,574,1400,1400,1400,2,2,2,2,2,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,2,2,2,1529,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,1529,2,1529,1529,1529,1529,1529,1529,1529,2353,2,2,2,2,1529,1529,1329,1329,1329,1329,2,1529,1529,1529,1529,2,2,2,2,2,2,643,1529,58,58,2,58,58,58,643,643,2,643,643,1529,1529,1529,1529,1529,1529,1529,643,643,643,1529,2353,2353,1529,2353,2353,1529,2353,2353,2353,2353,1529,1529,1529,643,643,1529,1529,1529,1529,1529,1529,1529,1529,2,1529,1529,1529,2,2,2353,2353,1529,1529,1529,1529,1529,1529,1529,643,643,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,2353,2353,643,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,643,643,643,643,643,643,643,1529,643,643,643,643,643,643,643,643,2353,2353,2353,1529,1529,1329,643,643,643,643,643,643,1329,643,643,643,2,1329,1329,2353,2353,2353,2353,2353,643,643,643,643,643,643,1529,1529,1529,1529,2353,1529,643,1529,2353,2353,643,643,1529,1529,1529,1529,1529,643,643,643,1529,1529,1529}, + {1665,1856,201,824,796,249,1217,590,1375,1175,1599,824,824,3319,2,2,2,601,1961,1961,2,2,2,1961,2,2,2,2,2,2,1961,2,2,1961,2,2,2,2,2,2,2,2,2,2,2,2,1961,2,2,2,2,2,2,2,2,2,2,2,2,2,2,601,2,2,601,2,2,2,601,2,2,601,2,2,2,2,2,2,2,2,2,601,2,2,2,2,2,2,2,601,601,2,2,2,2,2,2,2,601,601,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,601,2,601,601,601,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,601,2,2,2,2,601,2,2,2,2,2,2,2,2,2,2,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2685,530,1962,387,1702,243,1766,189,762,448,1907,855,855,2022,2,2,2,2143,2143,2,2,2,199,199,2143,2143,2143,2143,2,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,199,199,2143,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,2,2,2,2143,2143,2143,2143,2143,2143,2143,1782,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2143,2}, + {2684,2316,1226,578,1475,1871,1387,2840,775,1628,2327,1689,1930,1930,2,2,2,2,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1504,1504,1504,2,2,1504,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2704,2239,1260,140,2161,2781,1840,574,2353,343,3218,61,2108,2038,1873,2,1833,1408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,671,671,671,671,671,660,660,2,2,671,2,671,671,660,660,2,2,2,671,671,671,671,671,671,671,671,671,671,671,671,2,2,2,671,671,2,2,2,671,2,398,660,660,2,2,2,2,2,671,671,660,1475,2,1475,1475,671,1475,2,2,671,671,660,660,1475,671,671,671,671,398,398,1475,1475,1475,398,398,671,671,1475,1475,2,671,671,671,671,671,671,671,660,2,398,2,2,1475,1475,2,660,660,660,671,671,2,2,2,671,671,671,671,671,671,671,671,671,671,671,671,671,2,2,2,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,398,671,671,671,671,671,671,671,671,671,671,2,398,671,671,671,398,398,398,398,398,398,398,398,398,671,671,671,671,671,1475,398,398,398,398,398,671,660,398,660,660,660,660,660,671,660,660,660,660,660,660,660,660,660,660,1873,660,660,660,660,660,1475,1475,660,660,660,660,660,1475,1475,671,660,660,671,671,671,660,660,660,660,660,660,660}, + {2692,1325,2489,1207,1705,1164,2582,2701,3300,703,214,501,1167,853,2,2,2,1642,2,2,2,2,1163,2,2,1163,1163,2,2,1163,1163,1163,2,1163,1163,1163,1163,1163,2,1163,1163,1163,1163,1163,1163,2,2,2,2,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,2,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,2,1163,1163,1163,1163,1163,1163,1163,1163,2,2,2,2,2,2,2,2,2425,2425,2425,2425,2425,2425,2425,2,2,318,318,318,2,2425,2425,2,1163,1163,1163,318,2,2425,2425,2425,2425,2425,2425,2425,2,2425,2425,2425,2425,2,2425,2425,2425,1163,1163,1163,2425,2,2,2,2,2,2,2,2,2,1163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1163,2,2,2,2,2,2,2,2,2,2425,1163,1163,318,2,1163,318,318,2,1163,1163,1163,2,1163,1163,1163,318,318,1163,318,318,2,1163,1163,1163,1163,318,318,318,318,318,318,318,2,1163,2425,2425,2,318,2,1163,1163,2,2,318,318,2,2,2,2,2425,2425,318,2,1163,1163,1163,318,318,1163,318,318,318,318}, + {3006,482,1886,648,2094,692,1169,810,39,667,1105,1454,724,724,1165,1165,1904,1762,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1614,1614,1614,1614,1614,1614,1614,1614,2,2,1614,1614,1614,1614,1614,1614,374,374,374,374,374,374,374,1165,1165,1165,1165,1165,1165,1165,1165,374,1614,374,1614,1165,1165,374,374,1614,2,374,1710,1710,1710,1710,2,2,2,1614,1614,2,1614,1614,1614,1614,1614,1614,1614,1614,1614,374,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1614,1614,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2173,876,802,2197,3338,176,1783,224,1763,1160,1264,1264,2864,554,2,552,552,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,710,2,710,710,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,710,710,710,710,2,2,710,2,2,2,2,2,2,2,2,2,2,2,2,2,710,710,710,710,710,2,2,710,710,710,2,2,710,710,710,2,2,2,2,710,710,710,2,710,710,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2023,2607,1499,456,670,882,1161,800,2412,398,96,1997,1342,338,121,121,81,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2708,1663,2279,824,836,1598,2101,1620,1202,1606,1368,1079,1167,1999,2848,2848,2848,1101,1101,1101,2,2,2,662,2,2,2,2272,2,2,2,2,2,2,2,2,2,2,2,2272,2,2,2,2,2,2,2,2,2,2272,2,2,2,2,2,2,2272,2272,2,2272,2272,2272,2,2,2272,2272,2272,2272,1101,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,1101,2272,2272,2272,2272,2272,2272,2272,1101,1101,2272,2272,2272,2272,2272,2272,2272,2272,2272,1101,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2,2272,2272,2,2,2,2272,2272,2272,2272,2,2,2272,2272,2,2,2,2,2,2,2272,2272,2272,2272,2272,2,2,2,2,2,2,2,2,2,150,2,150,150,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2272,2272,2,2272,2272,2,2,2272,2272,2272,2272,2272,2272,2272,2272,2,2,2,1101,1101,1101,2,2,2,2,2,2,296,296,296,788,2,2,2,150,2,2,296,296,2,2,2,2,2,2,2,2272,2272,788,788,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,2272,1101,1101,2272,2272,2272,2272,2272,2272,2272,2272,2272}, + {1987,1463,2328,1890,1443,2086,283,2895,522,1577,1514,1657,2605,891,2,1181,1181,2,2,2121,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2153,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2153,2,2153,2,2,2153,2,2,2,2,2,2,2153,2,2,2,2,2,2,2,32,128,1050,128,905,1050,1050,2417,2153,2153,2153,2153,2153,2153,2153,2153,2,2,2153,2153,2153,2,2153,2153,2153,2936,2153,2153,2153,2153,2153,2153,2153,2153,2153,2153,2153,1703,2153,2153,2153,2153,2121,2153,2153,2153,2153,2153,2153,2153,2153,2153,2153,2153,347,347,347,2153,2153,2153,2153,2153,2153,2153,2153,2153,2121,2121,2153,2153,2121,2121,2153,2153,2153,1703,1703,2121,2153,2153,2153,2153,2153,2153,2153,2121,2121,2153,2121,347,347,347,347,2153,2153,1009,1009,2153,1009,1009,2153,2153,2153,1009,1009,2153,2153,2153,2153,2153,1703,1703,1703,1703,1703,1703,347,1703,1703,1703,1703,2121,1703,2153}, + {2040,1634,930,2588,760,461,1059,78,1831,1413,1788,1788,1788,1788,663,2696,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,945,2,2,2,945,2,2,2,2,2,945,945,2,2,1159,2,945,2,2,2,2,2,2,2,2,945,945,945,2,2,2,945,945,945,945,945,945,945,945,945,945,945,2,945,2,2,2,2,945,2,2,2,945,945,945,2,2,2,2,2,2,2,2,2,2,945,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,945,945,945,945,2,945,945,945,945,945,2,2,2,2,2,2,2,2,2,2,2,2,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,2,2,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,2,945,945,945,945,945,2,2,945,945,945,945,2,2,945,945,945,945}, + {2173,1637,1139,905,1802,1378,296,439,1507,1017,1427,209,708,462,1508,1508,1508,2,2,2,2,2,2,2,2,2,2,2240,2240,1459,1459,1459,2240,2240,2,2,2,2240,2240,2240,2,2240,2240,2240,2240,2240,2240,2240,2240,2240,2240,2240,2240,1459,1459,1459,1459,1459,1459,1459,1459,1459,2,2,1459,2240,2,2,2,2240,2240,2240,2240,2240,2240,2240,2240,2,2,2,2,2,2,2240,2,2,2,2,2,2240,2240,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2240,2,2,2,2,2,2,2,2,2240,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2240,2240,2,2,2,2,2240,2240,2,2,2240,2240,2240,2240,2,2240,2240,2240,2240,2240,2240}, + {2206,1526,628,2877,802,2587,1253,1258,1044,2195,3246,40,2898,2898,1704,598,2,2145,2,2,2,2145,2,2,2,2,2,2,2,2,2,2,2,2,2,2145,2,2,2,2145,2,2,2,2,2,2,2,2,2,2,2,2,2145,2145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2437,2,2,2,2,2,2,2,2,2,2,2,2,2437,2437,2,2,2,2,2437,2437,2437,2,2437,2,2145,2,2,2145,2145,2145,2145,2145,2145,2437,2437,2437,2,2,2,2,2437,2437,2437,2437,2437,2437,2267,2437,2437,2437,2437,2437,2437,2437,2437,2,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2,2,2,2,463,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,463,463,463,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2,2,2,2437,2437,2437,2437,2,2437,2437,2437,2437,2437,2437,2437,2,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2437,2,2,2,2,2,2,2,2}, + {2852,943,708,2224,1072,178,618,2577,1039,413,389,897,710,2541,131,2224,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2443,2443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1099,2,2,2,2,2,2,2,2,2,2,2,2443,2443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3133,2051,2507,1339,1775,149,1451,1638,1686,1716,555,1660,287,627,1929,1335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1335,1335,1335,1335,1335,1335,1335,1929,1929,1929,2,2,2,2,2,2,1335,1335,1335,1335,1335,1335,1335,2,2,1335,1335,1335,1335,1335,1335,1335,1335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1335,1929,1929,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1929,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1929,1929,1929,1929,1335,1929,1929,1929,1929,1929,1929,1929,1929,1929,2,1929,1929,1929,2,2,1929,1929,1929,1929,2,2,2,2,1929,1929,1335,1335,1335,1929,1929,1929,1335,1335,1335,1335,1335,1335,2,2,2,1929,1929,1929,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335}, + {2182,618,1022,1433,1138,1580,2590,149,796,2090,743,294,294,1117,720,3003,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2765,757,915,2063,679,988,1224,776,3584,919,544,1248,129,2112,2112,1561,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2857,556,2345,1882,1856,558,1708,2532,619,755,2458,722,332,2752,1823,2248,2,2,2,2,2,2055,2055,2,2055,2,2,2,2,2,2,2,2,2,2,1707,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1707,2,2,2,1707,1707,2,2,2,2055,2055,2,2,2,1707,1707,1707,1707,2,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,2,2,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,2,2,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,1707,909}, + {2284,1034,1105,1724,446,1374,714,54,313,1383,665,2659,2659,904,904,1826,2,2,2,2,2,2499,825,2499,2,2,1210,1210,1210,1210,1210,1210,1210,1210,1210,437,437,437,437,437,1210,437,437,2,2,2,2,2,2,1210,437,1210,1210,1210,2,2,2,1160,1160,1160,2332,2332,2332,2332,2332,437,437,1160,1160,1160,1160,1160,1160,1160,2,2,2332,2,2,2,2,2,2,2,2,437,437,2,2,2,1210,1210,1210,1210,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,588,3226,3226,3226,3226,3226,3226,3226,3226,611,611,2659,1210,1210,1210,1210,2,2,1210,1210,1210,1210}, + {2773,672,462,2359,2988,1148,41,81,1615,1374,2005,2005,603,1648,660,180,2,2,2,660,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1521,2,2,2,2,2,2,2,2,2,1521,1521,1521,2,2,2,2,2,2,1521,1521,1521,1521,1521,2,1521,1521,1521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1521,2,2,1521,2,2,2,2,1521,1521,1521,2,2,1521,2,2,2,2,2,2,2,2,2,2,1521,2,2,2,2,2,2,2,1521,1521,1521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1521,1521,1521,1521,2,2,2,2,2,2,2,2,540,1521,2,540,540,540,540,540,1521,1521,1521,1521,1521,1521,1521,1521,2,1521,2,2,540,540,540,1521,1521,1521,2,540,2,2,2,1521,1521,1521,1521,2,540,2,540,2,2,2,540,2,2,2,2,2,2,540,540,540,540,540,540,540,540,540}, + {2231,1319,816,2030,1682,1751,1827,2319,1878,2483,2449,499,2122,203,1603,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,127,127,127,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,127,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,127,127,127,127,127,127,127,127,127,127,2,2,2,127,127,127,127,2,2,2,2,2,2,2,2380,2,2,2,2380,2}, + {2234,1035,1239,696,2653,131,654,1615,3333,629,1687,1907,1907,1551,102,724,2,2,1641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1665,1665,1665,2,2,2,1665,1665,2,1665,2,2,2,2,1665,1665,1665,1665,1665,2,2,2,1641,1665,1641,1641,1641,1641,1665,1665,1665,1665,1665,1665,2,2,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,1665,2,1665,2,2,2,2,2,2,2,1665,1665,1665,1665,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1665,1665,2,1665,1665,2,1665,2,2,2,2,2,2,2,2,2,2,2,2,2,1665,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2456,2456,2,2456,2456,2456,2456,2456,2456,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2083,1465,847,1450,502,447,2168,794,1761,1324,162,188,2853,2853,636,973,2,563,2,2,2,2,2,2,2,2089,2089,2089,2089,2089,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2089,2089,2,2089,2089,2,2089,3333,2,2,2,2,2089,2089,2089,2089,2,3333,3333,2089,2089,2089,2089,563,563,563,3333,3333,3333,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2089,2,2,3333,3333,3333,3333,2089,2089,2089,3333,2089,2089,2089,2089,2089,2089,2089,2089,2,2,2,2,2,2,3333,3333,563,2,2,2,2,2,3333,2,2,2,2,2,2,2,3333,3333,3333,3333,3333,3333,2,3333,3333,3333,3333,2,2089,2,2,2,2,2,2,2,2,2,2,2,2,3333,2,3333,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3333,3333,3333,3333,3333,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2089,2,2,2,2,2,2,2,2,2,2,2089,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2293,2688,1529,600,3219,80,167,3231,1004,3516,1792,1892,894,894,894,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,365,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,989,989,989,989,2,2,365,989,989,365,2,2,2,2,2,2,2,989,989,989,2,365,365,365,365,365,365,365,365,365,2,365,365,2,2,2,365,365,365,365,2,2,2,365,365,365,365,365,2,365,365,365,365,365,365,365,365,365,365,365,365,365,365,2,365,365,365,2,365,365,365,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,365,365,365,365,365,365,365,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2923,2303,203,508,472,648,3169,269,515,3147,2415,1700,1700,1700,1461,1461,1461,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1197,1197,1197,2,2,2,2,2,2,2,2,1197,2,1197,1197,1197,1197,2,2,2,2,2,1912,1912,2,2,2,2,2,2,2,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1912,1197,1197,1197,1197,2,1197,2,2,2,2,1197,1197,1912,1197,2,2,2,2,2,2,2,2,1197,1197,2,1197,2,2,2,2,2,2,2,2,2,2,2,1197,1197,2,2,2,1197,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1912,2,1912,1912,1912,2,1912,1912,1912,2,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,2,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,2,2,2,1912,1912,1912,1912,2,2,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912,1912}, + {2218,572,1615,1016,1397,39,1794,1089,1631,737,198,1122,728,832,832,1441,690,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1853,1853,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1853,1853,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2300,1116,1555,2794,1095,998,1999,894,963,753,324,2130,2675,2675,554,2045,2,2,2,2,2,2,2,2130,2130,2130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2045,2045,2,2045,2045,2045,2,2,2,2045,2,2,2,2,2,2,2,2,2,2045,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2045,2,2,2,2,2,2045,2045,2045,2045,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2045,2,2,2045,2,2,2,2,2,2,2,2,2,2,2,2,2,2045,2,2,2,2,2,2045,2,2,2,2,2,2,2,2045,2,2,2,2,2,2,2045,2,2,2,2,2,2045,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2807,2008,2435,1197,1119,1799,631,281,2955,24,1729,527,1026,1026,1026,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,163,2,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,2,2,2,2,2,2,163,163,2,2,2,2,163,163,163,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,163,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,163,163,163,163,163,163,163,163}, + {2103,768,702,1548,1486,2228,2846,861,665,1497,1046,1046,2252,394,394,1901,1155,2,2,2,2,2,2,2,2,2,2,2,192,192,192,192,2,2,2,859,694,2,694,694,1025,2,2,2,2,859,859,859,859,859,2,859,859,859,2,2,2,2,2,2,2,2,2,2,2,859,859,859,2,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,859,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,859,859,859,859,859,2,2,2,2,859,2,2,2,2,2,2,2,2,2,2,859,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2909,706,323,605,540,2093,2474,255,2108,2456,2726,476,357,2039,357,2,641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2923,640,661,2179,1207,182,872,171,738,269,1372,222,908,2069,2069,2,1550,516,2,2,2,2,2,2,2,2,2,2,1109,2,2,2,2,2,2,2,2,2,2,2,1109,1109,1109,1109,1109,1109,2,2,2,2,2,2,2,2,2,2137,2137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1109,1109,516,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2137,2,2,2,2,1109,2,2,2,2,2,2,1109,1109,1109,1109,1109,2,2,2,2,2,2,2,2,2,2,2,2,2,1109,2,2,2,2,2,2,2,2,2,2,2,1109,2,2,1156,2}, + {2262,2121,2519,1460,1614,210,405,1605,592,365,1930,1496,220,3463,1700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,2,2,2,2,2,2,686,2,2,2,686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,2,686,2,686,686,686,686,686,686,2379,2379,2,2,686,686,2379,686,367,686,686,686,2379,2379,2379,2379,686,686,686,686,686,686,686,686,686,686,686,686,2379,2379,2379,2379,2379,2379,2,2379,2379,2,367,367,367,2,2379,2379,2,2379,2379,2379,2,2,2379,367,367,367,367,367,2,367,367,367,686,686,686,2379,367,367,367,367,2,367,686,2,2,2,686,367,367,2,2,686}, + {2957,1025,415,854,1866,364,176,275,1711,663,2645,2246,561,1232,1232,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1108,1108,2,2,2,2,2,2,2246,2246,2,2,2,2,2246,2246,2,2,2,2,2,2,2,2,2,2,2,2246,2246,2246,2246,2246,2,2,2246,2246,2,2,2,2,2,1108,1108,1108,1108,1108,1108,1108,1108,2,1108,2,1187,2,2,2,2,2,2,2,2246,2246,2246,2246,2246,2246,1108,2246,2246,2,2,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2,2,2,1108,2246,2246,2246,2246,2246,2246,2246,2246,2,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2246,2,2246,2246,2246,2246,2246,2246,2,2,2,2,2,2246,2,2,2,2246,2,2,2246,2246,2246,2246,2246,2246,2,2246,2246,2246,2,2246,2246,2,2246,2,2,2246,2246,2246,2246,2246,2,2246,2246,2246,2,2246,2,2,2,2246,2246,2,2246,2,2,2246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2246,2246,2,2246,2246,2246,2,2,2246,2246,1108,1108,2,2,2,2,2246,2,2,1187,2,2,2,2,1187,2,2,2,2,2,2,2}, + {2833,2005,387,733,562,468,317,224,94,478,1606,2522,1606,2001,1087,2,2,1087,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2247,2496,811,776,385,94,119,1880,1383,1250,2421,4,4,4,4,2,2,2406,1569,2,2,2,2,1569,2,2,2,2,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,356,356,1569,1569,2,1569,2,1569,1569,1569,1569,356,356,356,356,1569,1569,1569,1569,1569,1569,1569,2,1569,2,2,1569,2,1569,2,2,2,1569,1569,2,2,1569,1569,2,2,2,2,2,2,2,2,2,2,2,2,1569,1569,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1569,1569,2,2,2,2,2,2,2,1569,1569,1569,1569,1569,1569,1569,1569,1569,2,2,2,1569,356,2,356,356,356,1569,2,1569,2,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,1569,2,2,2,2,1569,1569,1569,1569,1569,1569,1569,356,1569,2,356,356,2,2,2,2,356,356,356,356,1569,1569,2,2,2,356,356,356,1569,1569,1569,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356}, + {2920,2732,2654,1237,952,933,709,783,205,481,1763,966,966,3255,3255,2,2,1114,1114,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2281,2281,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3165,1977,628,168,1015,1174,954,1911,1211,2463,1624,563,233,1660,2424,677,677,677,677,677,677,2,2,2,2,677,677,646,646,646,646,646,646,646,646,646,2353,2,2353,2,2353,2,646,2353,677,677,2,2353,2353,2,2,2,2353,2353,2,2,2,2,2353,2,646,2,2,2353,2353,2353,2,2,2353,2353,2353,2,2353,2,2,2,2,2,2,2,2,2,2,2,2353,2,2353,2,2,2,2,2,2,677,677,2,2353,2353,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2353,2,2,2,2,2,2,2353,2353,2353,2353,2353,2353,2,2353,2353,2353,2353,2353,2353,677,677,2,2353,2,2,2,2,2,2,2,2,2,2353,2353,2353,2,2,2,2,2,2353,677,677,677,2,2353,677,677,2,2353,2353,2,2353,2353,2,2,2,2,2,2,2353,2353,2353,2353,2353,2353,2353,2,2,2,2,2353,2353,2353,2353,2,2,677,2,2353,2,2,2,2353,2353,677,677,2353,677,677,2,2353,2353,2353,2353,2353,2353,2353,2353,2353,2,2353,677,677,677,677,2353,2,2,2353,2353,2353,677,2,2353,2,677,2,2353,2,2}, + {2953,1059,205,3093,138,132,2148,1345,1499,216,151,1296,2446,1610,1632,2,2,2,2,4,4,2,2,2,987,987,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2286,1503,3217,2108,596,3099,729,2171,1337,938,99,869,245,245,33,2,2,2,2,2,2,398,398,398,2,2,2,2,2,2,2,2,398,398,2,2,2,2,2,2,2,2,398,2,2,2,2,2,2,2,398,398,2,398,398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,398,2,2,2,2,2,2,1116,2,1116,1116,1116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1116,1116,2,2,398,398,398,2,2,2,2,2,2,2,2,2,2,2,2,2,1116,2,1116,1116,398,398,398,398,398,398,398,398,398,398,398,2,2,398,2,2,2,1116,1116,1116,1116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,398,2,1116,1116,2,2,2,2,2,2,1116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1116,1116,615,2,615,398,398,615,615,615,398,398,1116,1116,398,398,615,2,2}, + {3199,1431,593,2050,2785,507,1540,1103,1740,459,62,1766,1781,1121,1600,2,1600,1600,125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,208,2,2,2,2,2,2,2,890,2,2,2,2,2,682,682,2,682,682,2,682,682,682,682,682,682,682,2,2,2,2,682,2,2,2,2,2,2,2,890,890,890,890,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,890,682,682,682,682,890,2,2,682,890,890,890,2,2,2,2,2,2,2,2,2,2}, + {3244,1981,1089,1377,860,1568,2257,1890,1050,1179,1334,1049,957,888,393,2587,2587,2029,2029,2029,2,2,2,2,2,580,161,2,2,1150,2,1605,1331,2,2,2,2,2,2,2,2,1331,1331,1331,1331,1331,1331,1331,1331,2,2,1331,2,2,2,2,2,2,2,1331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1331,2,2,2,2,2,2,2,2,2,2,2,2,2,1331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1331,1331,2,2,1331,1331,2,1331,1331,1331,2,2,2,2029,2,2,1331,1331,1331,1331,1331,2,1331,1331,1331,2,1331,1331,2,2,1331,1331,1331,1331,2,1331,1331,1331,1331,2,1331,1331,1331,2,1331,2,2,2,2,2,1331,2,1331,1331,1331,2,2,2,1331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1331,2,2,2,1331,1331,1331,2,1331,1331,2,2,2,2,2,1331,2,2,1331,2,2,2,2,2,2,2,2,1331,1331,2,2,2,2,2,2,1331,2,2,2,2,2,2,2,2,2,1331,2,2,2,2,2,2,1331,1331,2,1331,2,2,1331,1331,1331}, + {2258,1714,415,373,1919,2605,693,827,1918,496,1479,1903,86,1083,415,2,2,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,436,2780,436,436,2,2,2,2,2,436,436,2,2,2,2,2,2,2,2,2,2,436,436,436,436,436,436,436,436,1879,436,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,436,436,436,2,2,436,2,436,2,2,2,2,2,2,2780,2780,2780,2780,2780,2780,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1879,2,2,2,1879,1879,1879,436,436,436,1879,1879,1879,1879,1879,1879,1879,1879,1879,1879,1879,2,436,436,436,436,436,436,436,436,436,436,436,436,2,2,2,2,2,2,2,2,2,2,2,436,2,2,2,2,1879,1879,1879,1879,1879,2,2,2,436,2,2,436,436,436,436,436,436,436,436,436,436,436,436,2,2,436,2,2,2,2,2,436,436,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,436,2,436,436,436,436}, + {3216,628,748,1165,930,2158,369,79,2773,1095,1357,2586,2586,2205,2205,2205,2205,2586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3289,2032,329,2169,2323,1599,517,1704,1847,804,632,40,40,40,40,40,40,40,40,2,2,1600,2,2,1600,2,2,2,2,2,2,2,2,2,2,2,2,2,2,963,1600,2,2,1600,1600,2,2,1600,1600,1600,1600,1600,1600,1600,1600,2,2,963,2,2,2,2,2,445,2,2,2004,2004,2004,2004,2004,2004,2004,2004,2004,2004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,963,2,2,2004,2004,445,445,445,445,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,963,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2180,3153,1530,1799,1734,511,2146,400,802,1568,353,2565,2565,1282,1282,1282,1282,2,2,2,2,2,2,2,2,2,2,2,2,2,2052,2052,2,2,2,2,472,2,2,2,2,2,2,2,2,2,2,2,2,2,472,472,472,472,472,472,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1427,1427,1427,1427,1427,1427,2,2,2,2,1427,1427,2,1427,1427,1427,2,2,472,963,2,2,1427,1427,1427,2,472,472,472,472,472,2,1427,1427,1427,1427,2,1427,1427,1427,2,1427,472,1427,1427,1427,1427,1427,2,1427,1427,1427,472,1427,1427,472,472,2,1427,2,2,2,472,472,472,472,472,472,2,2,1427,2,472,472,2,2,2,1427,1427,1427,1427,1427,1427,1427,472,472,472,472,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1427,472,472,2,2,2,2,1427,1427,1427,1427,1427,1427,2,1427,2052,2052,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1427,1427,1427,2,2,2,2,1040,2,2,2,1427,1040,2,1040,1040,2,2,1040,1040,1427,2,2,2,2,2,2,2,2,472,2,1427,2,1427,2,2}, + {2165,2725,2293,368,705,3063,494,103,12,1332,175,2331,3144,2165,1709,1709,2090,2,2,2,2,1363,1363,2,566,2,2,2,2,2,2,2,1670,1670,2,1670,1670,1670,2,2,1670,1670,1670,1670,2,1670,1670,2,1670,1670,1670,2,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,2,1670,1670,1670,1670,1670,1670,566,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,566,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,566,566,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,2,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,566,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,566,566,566,1670,2,2,2,1109,1109,1109,1109,1109,445,445,445,445,445,445,445,445,445,445,445,566,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,566,566,566,566,566,2,566,566,566,566,445,445,566,566,566,566,445,566,566,566,566,566,566,2,566,566,566,566,566,566,566}, + {2290,1042,276,872,642,603,1633,2704,978,2858,930,208,208,1091,1091,3443,245,2,2,2,245,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2882,2900,1219,1979,2296,361,1171,2061,1078,2232,2222,1109,1109,1788,2698,1380,2102,2,2102,2102,2,2102,2102,2102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2102,2102,2102,2,2,2,2,2,2,2,2,2102,2,2,2,2,623,2,2,2,2102,623,623,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2102,2,2,2,2,623,623,2102,623,623,2,623,623,623,623,2,2,2,623,2,623,2,2,2102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2102,2,2,2,2,2,2,2,2,2,2,2,2102,2102,2,2,2,2,2,2,2,623,623,2,623,623,2,623,623,2,623,623,623,623,623,2,623,623,623,2,2,623,623,623,2102,623,2,623,2102,2102,2102,623,2102,2,2,623,623,2,623,623,2,2,2,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,2102,1109,623,92,92,92,2102,2102,1109,1109,1109,1109,1109,623,2102,2102,2102,623,623,623,623,2,2,623,623,623}, + {2300,1070,2169,2540,734,1002,912,1386,2215,224,1285,880,2052,2052,1301,959,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,894,2,2,2,2,894,894,894,894,894,894,894,894,2,894,2,2,894,894,894,2,2,2,2,2,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1120,1120,2,1120,1120,2,2,2,2,2,2}, + {3292,1037,1080,993,1162,921,1618,2587,897,3059,2578,932,932,633,789,186,85,2553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2553,2553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2553,2553,2,2,2,2,2,2,2,2,2,2553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2553,2,2,2,2553,2553,2,2553,2553,2553,2553,2553,2553,2553,2,2553,2553,2553,2553,2553,2,2553,2553,2553,2,2553,2553,2553,2553,2,2,2,2,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2553,2,2,2553,2553,2553,2,2,2,2,2,2,2553,2,2,2,2,2,2,2553,2553,2,2553,2553,2,2553,2,2,2,2,2553}, + {3056,2180,3012,408,768,1019,1699,2418,88,236,1934,178,89,89,89,321,1180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1812,1812,1812,2,2,1812,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1812,2,2,2,2,2,2,2,2,1812,1812,2,2,2,2,2,2,2,2,2,2,2,2,1812,1812,2,2,2,1812,1812,1812,2,1812,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1812,1812,2,1812,1812,1812,2,2,1812,2,2,2,2,2,2,2,1812,1812,1812,1812,2,2,2,1812,1812,1812,1812,2,1812,1812,2,2,2,2,1812,1812,1812,1812,1812,2,2,2,2,2,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,2,2,1812,1812,1812,1812,2,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,1812,2,2,2,2,2,2,2,2,2,2,1812,1812,1812,1812,1812,2,1812,1812,2,2,2,2,2,2,2,2,2,2,2,2,1812,2,2,2}, + {3267,1852,1037,648,611,1250,432,853,1467,179,715,2,2033,841,2607,2607,2607,2607,2,2,2,2,1874,1874,2,1874,899,2,2,2,2,2,2,899,2,2,2,1874,1874,1874,1874,2,2,2,1874,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1874,1874,1874,1874,2,2,2,2,2,2,2,2,2,2,2,1874,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1874,1874,1874,2,2,2,2,1874,1874,2,1874,2,2,2,2,2,2,1874,899,1874,1874,2,2,2,1874,2,2,1874,1874,1874,1874,2,2,1874,1874,1874,2,2,899,899,899,899,2,899,899,899,899,899,2,1874,1874,1874,1874,1874,1874,983,1874,1874,2,2,899,1874,1874,2,1874,1874,983,1874,1874,1874,983,2,2,2,983,983,1874,1874,983,983,983,983,1874,1874,1874,1874,1874,1874,1874,1874,1874,1874,1874,1874,983,983,983,983,983,983,983,983,983,983,983,983}, + {2901,2115,2771,1709,1398,1766,286,829,686,3018,89,2,667,1780,399,399,2,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1362,2,2,2,2,1362,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3068,1521,514,1664,1844,3890,1170,1091,2739,15,535,2,3345,1651,1651,1595,2,2,2384,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,89,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,89,89,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,89,89,89,89,89,89,89,89,89,2,2,2,2,2,2,2,2,2,2,2020,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2020,2,2,2,2020,2020,89,89,89,2020,2020,2020,2020,2,2,2,2,2,2,2,2,89,2,2,2}, + {2304,1840,264,171,928,320,231,200,248,1051,817,2,1789,837,837,912,2,2,507,507,2,1875,2760,2,2,1875,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1875,1875,1875,1875,1875,1875,1875,1875,1875,1875,1875,2,1875,1875,1875,1875,1875,2,1875,1875,1875,1875,1875,1875,1875,1603,1603,1603,1875,1875,1875,2,2,507,507,1875,1875,1875,1875,1603,1603,1603,1603,1603,1603,2,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,2,1603,1603,2,1603,2,2,1603,1603,2,2,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,1603,2,1603,1603,2,2,2,2,2,2,2,2,2,2,2,1603,1603,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1875,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1603,2,2,2,2,2,2,2,2,2,2,1875,2}, + {3038,2399,1450,1276,1222,727,552,646,1055,2351,686,63,252,504,3166,1802,2,2,1165,1165,1165,2,2,2,2,1165,1165,1165,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,1165,1165,1165,1165,1165,2,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2,2,1165,1165,2,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,2,2,2,2,2,2,2,2,1165,2,2,2,2,2,2,1165,1165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,2}, + {2351,895,559,487,668,1149,3552,761,479,935,1756,2,2530,2530,2092,75,2,2,738,738,738,2,2,2,738,738,738,738,2,738,738,2,2,2,738,738,738,738,2,2,1943,738,2,2,738,2,2,2,2,738,2,2,2,2,2,2,1943,1943,738,1943,1943,1943,1943,1943,1943,1943,738,1943,1943,1943,1943,2,2,1943,2,2,2,2,1943,1943,1943,1943,1943,1943,1943,1943,1943,1943,1943,2,2,2,2,2,1943,1943,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2684,2684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3038,2519,1494,107,2597,802,535,1669,1695,1928,1940,1580,1580,85,2274,1551,2,2,2431,560,560,560,2,2,1098,2,2,2,2,2,2,2,2,2,2,522,522,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1098,1098,1098,2,2,1098,1098,1098,2,2,2,2,738,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3040,1044,1927,1952,1479,3124,1373,1990,588,2550,1277,2,629,2671,1842,2712,840,1702,2,1669,2,1347,2,2,2,2,1669,1669,1669,1669,2,1669,1669,1669,1347,1669,1669,2,1669,1669,1669,1669,1669,1669,1669,1669,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1702,1702,1347,1347,1347,1702,1702,1347,1347,1347,1347,1702,1347,1347,2,2,2,2,2363,2,2,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,2363,2363,2363,1347,2363,2363,2363,2363,2,175,2,2,2,1572,1572,1572,2,1347,1347,1347,2,2,2,1347,1347,1347,1347,2,2,2,1347,1347,1347,1347,1347,2,2,1347,1347,1347,1669,1669,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,2,1347,2,1347,1347,1347,1347,1347,1347,1347,2,2,2,2,2,2,2,1347,2,2,2,2,2,2,1347,426,426,175,175,175,175,175,2,2,2,1347,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1347,1347,2,1347,2,2,2,1347,1347,1347,1347,1347,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2430,2849,3235,1857,2527,2042,720,817,250,1416,3197,2,2026,2026,2026,2628,2628,2628,2,2,2,1910,2,2,2,2,2581,2581,2,2,2,2581,2581,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1910,1910,2,2,1910,1910,1910,1910,1910,2,1910,1910,1910,1910,1910,2,1910,1910,1910,2,2,2,1910,1910,2,1910,1910,2,155,155,155,155,155,155,2,2,2,2,2,2,2,2,2,2,2,155,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1910,155,2,2,1910,1910,1910,1910,1910,2,2,2,2581,2581,2581,2581,2581,2,2,2,2,2,2,1910,2,1910,1910,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1910,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3312,1276,1851,912,3548,665,1170,3248,72,748,598,2,2753,2753,1922,2031,185,185,2,2,824,2,2,2,2,2,1964,1964,1964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2061,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2061,2061,2,2,2,2,2,1964,2,2,2,2,2,2,2,2,1964,1964,1964,2,1964,1964,2061}, + {3044,1494,980,316,702,1657,225,3021,1936,838,436,1014,1014,907,907,907,907,478,478,2,2,2,2,2,2,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,478,478,778,778,778,778,778,2,2,2,2,2,2,2,778,778,778,778,2,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,478,778,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,778,2,2,778,2,2,2,2,2,2,778,778,778,778,2,2,778,778,2,2,2,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,2,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,2,778,778,778,778,2,778,778,778,778,778,778,778,778,778,778,778,778}, + {3056,1567,691,1243,653,751,248,842,1954,480,458,2,2,2451,934,3172,3556,2259,2312,2,2562,2562,2,2,2562,2562,2562,2562,2562,2,2,2,2,2,2,2562,2562,2562,2,2,2,2,2,2,2,2,2,2562,2562,2562,2562,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2562,2562,2,2,2,2,2,2,2562,2562,2562,2562,2,2,2,2,2,2,2,2,2,2,2562,2562,2,2,2562,2562,2,2,2,2,2,2,2,2,2,2,2562,2562,2,2,2,2,2562,2,2,2,2,2,2,2,2,2,2,2,2,2562,2,2,2,2,2562,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2245,639,1016,262,2452,78,144,833,204,725,2849,2,2,2014,2578,2959,369,2,371,371,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,796,796,796,796,2,2,796,2,2,2,2,2,2,2,2,2,796,2,2,2,2,2,2,2,2,2,2,2,796,796,796,2,2,2,2,2,2,2,2,2,2,2,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2959,2553,1333,877,2492,3169,2498,686,2030,2820,3233,1313,1313,1471,1471,1471,1471,2,2,1471,1471,2,2,1481,2,1887,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1471,1471,2,2,2,1471,2,1471,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1788,1788,1788,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1471,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2963,1521,3059,344,62,1511,805,73,1550,2603,1312,2,2,910,1651,1411,2484,2,2,2,2147,2554,2,2554,2,2,2,2,2,2,2,2,2,2,2,2,2,564,564,564,2,564,564,564,564,564,2,564,564,564,2,1584,1584,564,564,564,2,2,2,2,2,2,564,1584,1584,1584,564,564,564,564,564,564,2,564,564,1584,564,1584,1584,1584,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,1584,1584,1584,1584,1584,1584,2,2,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,799,799,799,799,799,2,2,799,799,799,799,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,1584,564,564,564,564,564,564,1584,564,564,564,1584,564,564,564,564,564,564,564,564,564,564,564,564,564,564,799,799,799,2,2,564,564,564,564,1605,1605,1605,1605,1605,1605,1605,799,1605,1605,1605,1605,1605,1605,1605,1605,1605,1605,1605,1605,1605,1605,564,2,1605,1605,1605,1605,2,2,2,2,564,564,2,564,564,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,564,564,2,2,2,564,2,2,2}, + {2967,607,789,2376,2598,1067,327,363,854,1123,112,2,2,1895,2706,1313,2185,676,676,676,2,2,799,799,799,2,2,1765,799,799,799,2,2,2,2,2,2,2,2,2,2,2,799,799,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3396,1321,2380,1528,570,1064,1443,2214,3219,1167,1943,1715,1715,1715,1715,1715,1096,1096,1096,1147,1096,2,2,1096,1096,1096,1096,1096,2,2,2,2,2,2,2,2,2,2551,2551,1096,2551,2551,2551,1096,1096,2551,2551,2551,2551,1096,2,1096,1096,2551,2,2551,2551,1096,2551,2551,2551,1096,2551,2551,1096,1096,1096,2,2,2,2,1096,1096,1096,1096,1096,1096,1096,1096,2551,2551,2551,2,2,2551,2551,2551,2551,2551,2551,2551,2551,2551,1096,1096,1096,1096,1096,2551,2551,2551,2551,1096,1096,1096,2,2551,2551,2551,2,2551,2,35,2551,2,2,2,2,2,2551,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2551,1096,1096,1096,1096,2,1096,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2551,2551,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2977,924,2286,507,1083,660,3500,152,2838,986,2507,2875,2875,2875,1269,2351,1310,1310,655,2,655,2,2,2,2,2,1263,1263,1263,1263,1263,2,2,2,2,2,2,2,2,128,128,128,512,512,8,512,512,2,2,2,1007,1007,512,128,128,128,128,128,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,2875,1612,1612,1612,1612,1612,1612,1612,1612,1612,2,2,1007,1007,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,2875,2875,2875,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,2744,2744,1612,1612,1191,1542,1534,241,241,241,403,2774,2145,2145,403,403,403,403,403,2145,403,2875,2145,2145,2145,2197,403,2197,2197,2197,2197,2197,1612,1612,1612,1612,1612,1612,1612,1612,785,785,785,785,785,785,785,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,1612,785,785,785,785,785,785,785,785,585,585,585,585,585,585,1612,1612,1612,1612,1612,1612,1612,1612,1612,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,1612,785,585,585,585}, + {3362,2797,1263,2886,845,2348,2064,2913,44,1990,2013,2,2,2,991,1024,1024,3074,1988,1988,1988,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2379,3034,166,302,2108,1078,2976,68,158,134,1567,2,2,1514,1514,1514,1883,1883,2,2,1883,1883,1883,1883,1883,1883,1883,1883,1883,2,2,2,2,2,2,2,2,2265,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2265,2,2,2,2,1883,2,1883,1883,2,2,2,2,2265,1883,2,2265,2265,2265,2265,2,2,2,1883,2,2,2,1883,1883,1883,1883,1883,1883,1883,1883,1883,2265,2265,2265,2265,2,1883,1883,1883,1883,1883,2,2,2,1883,1883,2265,2265,2265,2265,2265,2,2,2265,1883,1883,1883,2,2,2,2,1883,1883,1883,1883,1883,1883,1883,2265,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,2265,2265,2265,2265,2265,2265,2265,2265,1883,1883,1883,1883,1883,2265,1883,2265,2265,2265,2265,2265,1883,2265,2265,1883,1883,1883,1883,1883,1883,1646,1883,1883,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2265,2,2265,2265,2265,1646,2,1646,1646,2265,1883,2265,2265,2265,2265,2265,2,2,2265,2265,2265,1883,1883,1883,1883,1883,2,1883,1883,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2471,2471,2,1646,1646,2471,2,2,1883,2,2,2,1646,1646,1646,1646,2265,1646,1646,2265,1646,2265}, + {2286,1268,1670,879,2377,993,363,1212,212,1282,3002,2,2,2,2,483,1872,483,2154,2154,2774,2154,2154,2154,2154,2154,2,2,2,2,2,1492,1492,1492,2774,2,2,1492,1492,1492,1492,2,2,1492,1492,1492,1492,2154,2,2,2774,1492,2154,2154,2154,2154,2154,2154,2154,2154,2154,2,2154,2,2,2,2,2,2,1492,2,2,2154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2774,2,2,2,2,2154,2154,1492,2154,2,2,2154,2154,2154,2154,2,2,2,1492,2,2,2,2,2,2,2,2,1492,1492,1492,2,2154,1492,1492,2154,2154,2154,2154,2154,2154,2,2154,2,2154,2154,2,2154,2154,2,2154,2154,2154,2154,2154,2154,2154,2,2,2,2,2,2,2,2,2154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2154,2154,2154,2154,2154,2154,2154,2154,2154,2154,2154,2,2,2154,2154,2,2154,2154,2,2,2,2,2,2,2,2,2,2154,2154,2154,2154,2,2,2,2,2,2,2,1492,1492,1492,1492,2,2,1492,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2386,1270,1204,1032,1474,224,496,2296,1536,1219,311,2,2,2,2,1238,2108,2108,2108,2108,2108,2108,2108,2108,1444,1444,1444,1444,1444,1444,1444,2,1444,1444,1444,1444,1444,2,2,2,2,2,2,1444,2,2,2,2,2,2,1444,38,38,38,38,485,485,485,485,485,485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1444,2,2,2,2,2,2,1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,2,1444,1444,1444,2,2,1444,1444,1444,1444,2,1444,1444,2,2,2,2,1444,1444,1444,1444,2,2,2,1444,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1444,1444,1444,1444,1444,1444,2,2,2,2,2,1444,1444,1444,1444,1444,1444,1444,1444,1204,2,2,2,2,2,2,2,2,1444,1444,2,2,2,2,2,2,2,1452,2,2,2108,1444,1444,2,2,473,473,166,473,473,473,492,2080,492,1204,1204,2,1204,166,1204,1204,1204,38,1204,1444,1444,1444,1444,1444,1444,300,300,38,38,38,300,300,300,38,38,38,1204,1204,300,300,300,300,38,485,485,485,485,2108,2108,1204,1204,485}, + {2393,1288,306,720,1909,212,3187,1652,486,1612,1747,1659,1659,1659,1659,1659,1627,1627,152,289,170,2,289,560,560,560,560,560,560,560,2,560,3550,2,3550,2,3550,3550,289,289,289,289,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,152,152,2,2,152,2,2,2,2,2,2,2,2,2,2,2,2,2,289,2,2,2,2,2,2,2,152,152,152,2,152,152,2,2,1659,152,152,152,152,2,2,152}, + {3003,2560,1826,781,864,2791,1573,2539,2738,2560,2795,2,2,2,2,2,669,669,1660,1624,2943,2943,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,1794,2,2,2,2,2,2,2,2,2,2,2,3654,2,2,2,3654,3654,3654,2,2,3654,3654,3654,3654,3654,2,2,2,2,2,2,2,1794,1794,1794,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1794,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2431,739,2488,1386,1632,2107,2602,2139,1751,349,3147,2,2,64,16,8,32,4,4,32,728,728,728,728,2,2,64,16,8,180,180,180,180,180,180,364,45,45,45,728,1533,364,364,364,364,728,728,364,364,364,364,1440,1440,1456,1456,557,476,476,476,826,238,238,119,119,119,238,119,119,119,119,952,1009,119,119,721,721,45,45,1440,1533,728,728,364,214,714,2455,3141,214,107,107,107,3751,3751,1629,2137,2137,1343,1343,1343,1343,1343,1343,1343,1343,1343,2137,357,2137,2613,2613,2613,2613,2613,3453,61,61,61,3453,1285,1285,1285,1285,1285,383,383,3453,3453,3453,119,119,238,119,119,119,119,1009,1009,119,119,3357,721,3357,3357,2423,2423,2423,1952,1952,1532,605,605,605,605,605,605,605,486,486,486,486,486,486,486,486,1146,1146,1146,1146,214,214,214,214,214,214,214,214,2455,3141,214,107,107,107,689,3751,1629,3888,3888,1343,1343,246,332,1875,83,83,83,1718,1718,1718,2203,2203,2203,2203,333,1418,1418,1418,2638,2638,2638,1447,664,2638,664,664,664,2519,1718,166,166,166,166,621,621,937,166,166,2613,2613,166,166,166,166,61,61,3453,1285,1285,1285,1285,1285,383,383,3453,3453,3453,3453,3797,3797,3797,3797,1811,1811,1811,2608,1549,1549}, + {2287,740,1265,1600,629,2606,1636,3234,1013,285,938,2,2,2,2,2,1799,2747,2747,2563,2398,2398,1353,1353,1353,1353,1353,1353,1353,2398,2398,2398,2,1353,1353,2185,2185,871,871,871,871,871,2398,2398,1353,1353,1353,2398,1353,657,2398,2398,2398,2398,2398,2185,2185,2185,2185,2185,2398,2,2,2,2398,1353,2398,2398,2398,2398,2398,2398,2398,2,2,2,2,2,2,2,2,2,2185,2398,2,2,2398,2398,2398,2398,2,2398,2398,2398,2398,2398,2398,2398,2398,2398,2398,2398,1353,2,2,2398,2398,1353,2,2,2,2,2,1353,1353,1353,1353,1353,1353,2398,2398,2,2398,2398,1353,1353,1353,1353,2,2398,2398,1284,2185,1353,1353,2398,1353,1353,2398,1353,2398,1353,2,1353,2,2,1353,682,1353,1353,682,682,682,682,1353,1353,1353,682,2185,2185,1353,1353,1353,1353,2,2,871,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,2398,2398,1353,1353,1353,2398,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,2,1284,1284,1284,1353,2,2,2,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,1353,657,657,657,657,657,657,657,1353}, + {3139,519,716,3260,1763,1454,3070,2470,1889,979,645,2745,2745,2745,1798,1798,1798,1798,2718,1609,1579,1420,1420,2094,1420,1420,2094,2094,2094,2,2,2,2,2,2,2,2,975,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2094,2094,2,2,2094,2094,2094,2094,2094,2094,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2094,2094,2,2,2,2,2,2,2094,2094,2094,2094,2094,2094,2,2,2,2,2094,2,2,2,2,2,2,2,2,2,2,2,2,2,2094,2094,2094,2,2,2,2,2,2,2,2,2,2,2,2,2,2094,2,2,2,2,2,2,2,2,2,2094,2094,2094,2094,2094,2094,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2094,2094,2,2,2,2,2,2,2,2,2,2,2}, + {2428,2233,1420,270,3560,221,1568,213,1946,1404,430,2,2,2,2,3252,631,1642,1345,1270,567,2,2,814,814,814,814,814,2,2,2,2,814,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1159,2,2,2,2,814,2,2,814,814,2,2,2,2,814,814,814,814,2,814,814,2,814,814,814,814,814,2,2,2,814,814,814,814,814,814,814,814,814,814,814,2,814,814,814,814,814,814,814,814,814,814,2,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,2600,2600,2600,2,2600,814,814,814,814,814,814,2600,2600,2600,814,814,814,814,814,814,814,814,814,814,814,2,814,814,814,814,814,814,2,814,2,2,2,2,814,2,2,2,2,2,2,2,2,2600,2,2600,2600,2600,1159,2,814,1159,1159,1159,1159,2,1159,1159,2,2,1159,1159,1159,2,1159,1159,2,2,2,2600,2600,2600,2600,2600,2600,2600,2600,2,2,2,2,2,2,2,2,2,2600,2600,2600,2,2,2600,814,814,2600,1159,1159,1159,1159,1159,1159,2,2,2,2,2,2,2,2,2,2,2,2,814,814,814}, + {3452,1687,2969,2249,278,1777,2246,3491,934,1490,969,2,2,2,3251,935,1686,1686,1686,712,712,558,2,2,712,712,712,712,2,2,712,712,2,712,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,712,2,2,578,578,712,2,2,712,712,2,712,712,712,712,2,2,2,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,2,712,712,712,712,712,2,2,2,712,712,712,712,712,712,712,712,2,712,712,712,712,712,712,712,712,712,712,712,712,712,2,712,712,712,712,712,712,712,712,2,2,2,712,2,712,712,2,2,2,2,2,712,712,2,2,2,712,2,2,712,712,712,712,712,712,712,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,712,2,2,2,712,712,712,2,2,2,2,2,2,2,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,2,712,712,712,712,2,2,2,712,712,712,712,712,2,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712}, + {3157,1230,685,1513,663,1335,2100,1441,1826,1670,1539,2,2,2,2899,2899,1378,54,2,46,46,2,2,1362,1362,2,2,2,2,2,2,2,2,2,2,1362,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1362,1362,2,1362,2,1362,1362,2,1362,1362,1362,1362,2,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,2,1362,1362,1362,2,2,2,1362,1362,2,2,1362,1362,1362,2,1362,1362,2,2,2,2,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362,1362}, + {2407,1424,989,848,1496,710,713,2778,947,2172,295,2,2,2,417,321,1507,1507,1507,3180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2311,2385,967,2125,611,428,983,418,97,11,1971,2,2,2,136,2524,1341,1341,1341,2,2,1341,1341,2,1341,1341,1341,2349,1341,2,1341,1341,1341,1341,2,2,2,1897,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1341,1341,1341,2,2,2,2,2,2,2,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,2,1341,1341,1341,1341,1341,1341,1341,1341,2,2,1341,1341,1341,2,2,2,2349,1341,1341,1341,2,1341,1341,1341,2,2,2,2,2,2349,2,2,2,2,2,2,2,1341,2,2,2,2349,2349,2349,2,2,2,2349,2349,2,2,2,2,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,186,186,2,2,2,2,2,2,2,2,2,2,2,2,186,2,2,186,186,186,186,2,2,2,186,186,2,2,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1341,2,2,2,2,2,2,186,2,2,2,186,2,2,2,1341,1341,1341,1341,1341,1341,2,2,1341,1341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2432,782,2478,2428,250,1111,1586,45,526,618,1242,2,2,2018,266,1342,265,265,265,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1745,1745,2,1745,2,2,1745,1745,1745,1745,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1745,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2457,2111,1929,2300,1182,612,2969,270,2062,2297,131,2,2,1968,1497,1157,1157,2,2,2234,2234,2234,2234,2234,2234,2234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3243,1411,909,170,533,1548,181,403,1224,90,1243,3330,3330,1657,1657,1657,1657,2,2,595,1657,1657,1657,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2455,2,2,2455,2455,2455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,2,2,2,317,1443,32,32,32,3031,3031,32,32,1305,32,875,875,875,875,875,875,875,875,875,2,875,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2463,2664,2825,1208,882,629,428,428,356,343,1730,2,769,769,769,1714,769,2,2,955,769,2,2,955,955,955,2,2,2,955,955,955,2,955,955,2,955,955,955,2,955,955,2,2,2,2,2,955,769,2,2,2,2,769,769,955,955,955,955,2,769,955,955,2,2,2,955,955,2,2,2,769,2,2,955,955,955,2,955,955,955,955,955,955,955,955,955,955,769,955,955,2,955,955,955,955,955,955,955,2,955,955,955,955,2,2,955,955,955,2,2,2,2,955,955,955,955,955,955,955,955,955,955,955,955,2,2,955,955,955,955,955,955,955,955,955,955,955,955,955,955,2,955,955,955,955,955,955,955,955,955,2,2,2,2,2,955,955,955,769,769,769,955,955,955,955,2,2,955,955,2,2,2,2,2,2,2,2,2,2,2,2,2,769,955,955,2,2,2,2,955,2,2,2,2,2,955,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,955,2,2,2,2,2,2,2,955,955,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,955,2,2,2,2,2,2,2,955,2,2,2,2,2,2}, + {3090,2601,190,314,1502,216,1865,1524,130,961,2128,1036,1036,1036,2298,99,2687,2485,2485,2,2,2601,1377,2,2,2,997,2,1377,1377,1377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,997,997,997,997,2,997,997,997,997,997,997,997,2,2,2485,2485,2485,2485,2,2485,2,2,2,2,2,2485,997,2485,997,2601,2601,997,997,997,997,2485,2485,997,2,2485,2485,2485,2485,2485,2,2485,2485,2485,2485,2485,2485,2485,2601,997,997,997,1377,997,997,2,997,997,997,997,2,2,997,997,997,2,2,2,997,997,997,997,2,2,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,2,2,336,1520,1436,2809,132,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997}, + {2312,980,758,1732,694,158,629,1926,427,477,1576,2,2,3470,3470,3470,3470,3470,1706,2,2141,2,2,2,2,2,2,2,2,2,2,2,2,2,2141,2141,2141,2,2141,2,2,2,2,2,2,2,2,2,2,2,2,2,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2141,2,2141,2,2,2,2141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,2,112,2,2,112,112,112,112,112,112,112,2,2,2,112,112,112,2,112,112,2,2,2,2,2,2,2,2141,2141,112,112,112,112,112,112,112,112,112,112,2,2,2,2,2141,2141,2141,2141,2,112,112,112,112,2,112,112,112,2,112,112,112,112,112,112,112,2,112,112,112,112,112,112,112,112,112,112,2,112,112,112,2,112,112,2,112,2,2,112,112,112,112,112,112,112,2,2,112,112,112,112,112,2,112,112,2,2,2,112,112,112}, + {3094,481,2710,1587,300,857,1509,1670,1227,1935,2620,2,1229,2070,2070,331,2557,2557,2,329,2,2,2,2267,2,2557,2557,2,2267,769,769,2,2,2557,2557,2,2,2,2,2,2,2,2,2,2,2,2,2557,2,2267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2557,2,2,2557,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1165,1165,1165,1165,1165,1165,1165,1165,1165,2,2,2,2267,2,2,2,2,2,2267,2267,2,2,2,2,2,2,2,2,2,2,2267,2,2,2,2,2,2267,2267,2267,2267,2267,2,2267,2,2267,2267,2267,2,2,2,2,2267,2,2,2,2,2,2,2,2,2,2267,2267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2267,2,2,2,2,2267,1140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2453,3173,1281,806,2177,969,722,2107,2294,1458,923,2,2946,481,796,796,796,3043,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,267,267,267,2,2,267,2,267,2,2,267,267,267,2,267,2,267,267,2,267,267,2,267,2,2,2,2,2,2,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,267,267,267,2,2,2,2,2,2,2,2,2,2,2,267,267,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2548,872,623,700,804,472,1602,2985,631,2642,1320,2,2,1825,1825,1825,1825,3099,2,2,2,2,418,418,418,2,880,2,2,2,2,418,3370,3370,3370,3370,2,3370,418,418,2,2,2,2,2,2,2,3370,2,2,3370,2,2,2,2,2,2,2,2,2,2,418,102,2,418,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,102,3370,3370,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3094,1638,1514,843,1503,1884,1481,727,723,1319,226,2,676,2401,1699,562,639,639,1176,2,2,2,2,824,2,2,2,2,2,2,2,2,2,584,2,2,2,824,2,240,2,2,2,2,2,2,2,2,639,639,639,639,639,2,2,2,639,639,639,2,2,824,824,639,639,2,639,639,2,639,2,2,2,2,639,639,918,639,639,639,639,639,639,639,2,2,2,944,639,2,2,628,2,944,2,639,944,639,944,2,2,639,639,639,639,2,2,2,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,2,2,639,639,639,639,639,639,2,824,639,639,2,639,639,639,639,639,639,639,2,2,2,639,2,639,639,639,639,639,639,2,2,2,2,2,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,628,628,628,628,628,628,628,628,639,639,639,639,639,2,2,639,639,639,639,639,639,639,639,639,639,639,824,824,944,639,2,2,639,639,639,2,2,639,639,2,639,639,639,639,2,944,944,639,639,639,639,639,639,639,944,944,639,639,639,639,639,639,639,639}, + {3561,2048,3154,2336,581,1221,1351,1419,3362,785,1008,861,1722,1722,2191,2189,2,2189,569,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,569,569,569,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,569,569,569,569,2,569,569,569,569,2,2,2,2,569,569,2,2,569,2,569,2,569,2,2,2,569,569,2,569,569,569,2,2,2,569,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,569,569,569,569,569,569,569,2,2,2,1463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3461,1029,2298,1057,2177,1518,728,728,452,1270,235,2,1794,765,765,1543,2,2,610,610,2,2,2,610,610,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,464,464,464,464,2,2,464,464,2,464,464,2,2,2,2,2,2,464,464,464,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,464,464,2,2,2,2,2,2,464,464,464,2,2,2,2,2,2,2,2,2,2,464,464,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1589,2,464,464,464,464,464,2,2,2,2,2,2,2,464,464,464,464,2,2,2,2,2,2,2,2,2,2,2,2,2,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,883,2,2,2,464,464,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3125,2004,547,2986,2919,471,948,1747,201,1862,802,2,1238,1277,1277,1277,2,2,1245,1245,1245,2,2,2743,1245,1245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2743,2743,2743,2,1245,1245,1245,2,1245,1245,2,2,2,2,2,2,2,1245,2,2,2,2,2,2,2,2,2743,2,1245,1245,2,1245,1245,1245,1245,2,2,2,2,2,2,2,2,2,2743,1245,2743,2743,2743,2743,2,2,2743,2743,2743,2743,2743,2743,2,2743,2,2743,2743,2743,2743,2743,2743,2743,2743,2743,2,2743,2,2,2,2,2,2,2,2,2743,2743,1245,2,2743,2743,2743,2,2743,2743,2743,2743,2,2743,2743,2743,2743,2743,2743,2743,2743,2743,2743,2743,2,1245,2,2,2,2743,2743,2743,2743,2743,2743,2743,2,2,2,1245,1245,1245,2,2,2,2,2,2743,2743,2743,2743,2743,2743,2743,2743,2743,2,2,2,2,2,2,2,2,2,2,2743,2,2743,2743,2,2,2,2,2,2,2743,2743,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245,2,2743,2,2743,2743,2743,2743,2743,2743,2743,2743,2743,2743,2,2,2,2,2}, + {3244,1348,2256,1262,586,1956,147,4014,1382,462,237,2,548,548,548,548,2,2,2,739,2,2,2,739,739,739,739,739,739,739,739,739,739,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,739,739,739,739,739,2,2,2,2,2,739,739,739,2,739,739,739,739,739,2,2,2,2,739,739,739,2,2,2,739,739,739,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2582,2469,533,1726,1575,1505,2448,2031,1257,427,588,1633,202,3553,1938,672,195,195,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,672,672,672,2,672,672,2,2,2,2,2,2,2,672,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3526,1264,2113,1020,2267,3486,1406,456,367,101,467,2272,2205,2205,2205,2205,2205,2205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,269,269,269,2,2,2,2,269,113,113,2,2,2,2,269,269,113,269,269,269,269,269,113,2823,269,269,2,2,2,2,269,269,269,269,269,269,3546,269,269,269,269,113,113,113,113,113,113,2,113,2,2,2,2,113,113,113,2,2,2,113,113,113,2,2,2,2,2,2,2,2,2,2,2,269,2,113,113,113,269,269,2,2,2,2,2,2,269,113,113,113,113,113,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2823,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3148,954,954,397,2302,1820,762,3225,538,309,678,2575,2575,2575,2647,1938,2605,2605,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1659,2657,2,2,1659,2,1659,1659,1659,1659,1659,2,2,2,2,2657,1659,1659,1659,2,2,2657,2657,2657,2657,2657,2657,1659,1659,1659,1659,1659,1659,2657,2657,2657,2,2,2,2,2657,2657,2657,2657,2657,2,1659,1659,2657,2,2,2657,2657,2657,2,2,2657,2657,1659,1659,1659,1659,1659,1659,2657,2657,2,2,2,1659,2657,2,1659,1659,1659,1659,1659,2657,2657,2657,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2657,2657,2,2657,2657,2657,2,2,2657,2657,2657,1659,1659,1659,2657,1659,1659,1659,2,2657,2657,2657,2657,2657,2657,2657,1659,2657,2,2657,2657,2657,2,2,2,2657,2657,2,2,2,2,2,2657,2657,2,2,2,1659,1659,1659,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1659,1659,1659,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1659,1659,1659,1659,2,2,2,2,2,2,2657,2,1659}, + {2378,636,1958,1628,1255,2285,2208,1626,719,2944,1086,1436,1436,1719,2111,655,2637,2637,2,2,2,2637,2637,2,2637,2637,2637,2637,2637,2,2637,2637,2,2637,2,2,2,2,2,2637,2637,2637,2637,2637,2637,2,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2637,2,2,2,2,2,2,2637,2637,2637,2637,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2637,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2637,2,2,2,2,2,2,2,2,2,2,2,2,2637,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2637,2637,2637,2,2,2,2,2,2,2,1378,2,2,2,2,2,2637,1378,1378,2637,2637,2637,2637,2637,2,2,2637,2637,2637,2637,2,2,2,2,2,2,2637,2637,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2386,1298,3667,1448,442,939,293,1459,2060,512,66,210,210,1378,1378,1378,1734,1734,2,2935,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2039,2039,2,2,2,2,2,2,2,2,2039,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,196,2,2,2,2,2,2,196,196,196,196,196,196,196,196,2,2,2,2,2,196,196,196,2,2,2,2,2,2,2,2,2,2,2,2,2039,2,2,2,2,2,2,196,196,196,196,2,196,2,2,2,2,2039,196,2,2,2,2,196,196,196,196,2,2,2,2,2,2,2,196,196,196,196,196,196,196,196,196,196,196,196,196,2,2,2,2,2,196,196,196,196,196,196,2,2,2,2,2,2,2,2,2,2,196,2}, + {3248,1152,677,1852,368,590,1048,1469,578,578,1857,647,842,842,842,842,512,512,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,647,647,647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,647,2,2,2,2,2,647,647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,647,647,2,647,647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,647,647,2,2,2,2,2,2,647,647,647,2,2,2,2,2,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,2,2,2,2,647,647,647,2,2,647,2,2,2,2,2,647,647,2,2,2,2,2,2,2,2,2,2,444,647,647,647,2,647,647,2,647,647,647,647,2,647,2,2}, + {2372,3079,2161,515,368,847,955,1257,1937,315,2666,1938,1723,1252,1252,362,362,2,2205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,340,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3550,2364,2761,1050,1452,3139,1203,3135,259,1430,2768,1154,1154,1154,1098,1098,1098,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,179,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,179,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,179,179,179,179,179,179,179,179,179,179,179,179}, + {3283,1895,3287,884,1227,2089,1428,738,2392,1433,3204,65,65,2010,1412,1152,2693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3526,2781,2027,3367,2471,2426,2023,287,2027,2500,1677,1982,1982,1982,1982,1067,1067,2,2,2,2,2,2,2,2,2,2,2589,2589,2589,2,2,2,2,2,2589,2589,2,2,2,2589,2589,2,2,2,2,2589,2589,2,2,2,2,2,2589,2,2,2,2589,2589,2589,2,2589,2589,2589,2589,2,2,2589,2,2,2,2589,2,2,2,2,2,2589,2,2,2,2,2589,2,2,2,2,2,2,2,2,2589,2589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2589,2589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2589,2,2,2,2,2,2,2,2,2,2,2,2,2,2589,2589,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2518,2060,1055,362,1455,1899,1105,1560,2237,2451,2080,181,2346,181,1829,1829,1829,2,2,1509,1509,1509,2,1509,2,2,2,2,2,2,2,2,2,1509,1509,1509,1509,2,1509,2,2,2,2,1509,2,2,2,1509,2,2,1509,2,2,2,1509,1509,1509,2,2,1509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2019,2019,2,2,2,2019,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2405,2951,1024,864,3352,613,509,2752,1998,1315,704,558,2114,2114,2114,2114,2114,2,2,2,2,2,2,1686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3092,3092,2,2,1686,2,2,1686,2,2,2,2,2,2,2,2,2,1686,1686,1686,1686,2,2,2,2,2,2,2,2,1686,1686,1686,2,1686,1686,1686,2,1686,1686,1686,2,1686,1686,2,1686,2,2,2,1686,1686,1686,1686,1686,1686,2,2,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,1686,2,2,3092,3092,3092,3092,3092,3092,3092,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1686,1686,1686,1686,1686,1686,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3572,3317,1644,1365,912,2200,1134,3115,1402,1456,2070,791,2291,1155,653,2572,1052,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,308,308,2,2,2,308,308,2,2,2,2,2,2,2,2,2,2,2,161,161,161,161,2,2,2,2,2,161,161,2137,2137,2137,2137,2,2,2,2,2,2,2,2,161,2,161,161,161,161,2,2,2,2,2,2,2,2,2,2,2,2,2137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2137,2137,2137,2137,2,2,2,2,2137,2137,2,2,2,2,2,2,2,2,2,2,161,2,2,161,161,2,2,2,161,161,2,2,2,161,161,161,2,161,2137,2137,2137,2,2,2,161,161,2,2,2,161,2,2137,2,2,2137,2137,2137,2,2,161,161,2137,2137,161,161,161,161,2137,2137,2,2,161,2137,2137,161,161,161,161,2137,161,161,2137,2137,161,2137,2137,161,2137,2137,161,161,161,2137,2137,161,161,161,161,161,161,161,161,2137,2137,2137,2137,161,161,2137,2137,2137,2137,2137,2137,2137,161,2137,161,161,161,2137,2137,2137,2137,2137,2137,2137,2137,2137,2137,2137,2137,2137,161,2137,2137,2137,2137}, + {2335,881,3740,2147,2388,1267,355,326,1183,688,359,865,86,1341,1699,457,66,132,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3017,3017,3017,3017,2,3017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3592,2125,3245,1071,1973,453,396,3339,90,2128,349,772,141,2454,777,2,911,911,2,2,2,2,2,2,2,2,2,2,2,2,2,2005,2,2,2,2,2,2,2,2,2,2,2,2005,2,2005,2005,2,2,2,2,2005,2005,2005,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2005,2005,2005,2,2005,2005,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2005,2,2005,2005,2005,2005,2005,2005,2,2,2005,2,2,2,2,2,2,2,2,2}, + {3186,809,1534,1060,1206,2817,1214,1285,1367,1155,2023,943,2165,405,2850,2,2850,2850,2,2,2,2,2,2,2,2,2,2,2,2,2,1195,1195,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,489,489,128,489,1793,3011,3011,3011,1195,1195,1195,1195,1195,1195,1195,2147,1195,2147,1195,2147,2147,1195,2147,2147,2147,1195,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,1195,1195,1195,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2147,2707,2707,2707,879,93,93,93,1649,1649,1649,2707,1649,1649,259,259,1782,1782,1782,1782,1782,2147,2147,2147,2147,2147,2147,586,2147,586,2147,2147,2147,586,586,2147,2147,586,726,726,726,726,2465,2465,2465,2465,2465,726,726,726,2147,2147,2147,2147,699,2147,364,364,364,364,364,364,364,364,364,829,1195,2147,2147,2147,364,2147,2147,2147,2147,2147,1260,1260,2147,2147,663,663,663,663,663,663,663,2147,829,829,829,829,829,829,829,829,829,829,829,829,663,44,2147,2147,663,663,44,663,663,663,663,44,663,663,663,663,663,663,663,663,663,663,663,663,663,663,1902,1902,1902,1902,93,93,1902,1902,1902,1902,1902,829,829,829}, + {3362,1718,1285,290,2071,2685,2040,1046,513,1743,2093,3399,488,1536,2181,2,2,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3574,1205,2862,1345,667,1230,1023,512,2015,1045,2343,1819,372,675,2577,2,2577,2577,1298,2,2,2,2,2,1298,2,2,1298,1298,2,2,2,2,1298,1298,1298,2,1298,2,2,1298,1298,1298,2,2,1298,2,2,2,1298,1298,1298,1298,2,2,2,2,2,2,2,2,2,772,2,2,2,772,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,245,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3617,3106,427,3428,751,1008,1505,2329,1848,1122,1163,1355,2151,187,296,2,2,2,1772,1772,2,2,1465,1465,2,1465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,385,2,2,2,2,2,385,385,2,2,2,385,385,385,385,2,2,2,2,2,2,2,2,2,385,385,385,385,2,2,2,2,2,385,1772,2,385,385,385,385,2,2,2,385,385,385,385,1465,1465,1465,1465,385,385,385,385,385,385,385,385,385,385,385,385,385,385,2,385,385,2,385,385,385,385,385,385,385,385,2,2,385,2,2,2,2,2,2,385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,385,385,2,2}, + {2560,1281,3140,2453,1350,2580,872,1188,3052,3003,745,4,4,2107,2107,2,2,2,2,2,2107,2107,2107,368,2,2,2,2,2107,1721,1721,1721,368,368,368,368,368,1721,1721,1721,368,368,368,368,368,2,2,1721,1721,368,368,368,368,1721,1721,1721,1721,1721,1721,1721,1721,368,368,368,368,2646,368,368,368,368,2,710,2646,2646,2646,2646,2646,368,368,2646,2646,2646,2646,2646,2,2646,2646,1721,1721,368,368,2646,1721,368,368,368,368,2,1721,368,368,1721,368,2646,2,1721,1721,1721,1721,1721,2646,2646,2646,2646,2646,2646,2646,2646,2,2646,2,2,2,2,2,2,2,2646,2646,2646,2646,2646,2646,2646,2646,2646,2646,2,2,2,2,2,880,2646,2646,2646,2646,2646,2646,2646,2646,2646,2646,2646,2,2,880,880,2646,2646,2,2646,2646,1721,1721,1721,1721,710,2646,2646,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,710,2,2,2,710,2,710,1721,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1721,2,1721,2,2,2,2,2,2,2,2,2,2,2}, + {3215,2004,3333,2271,3283,1660,2135,1696,1413,1362,834,253,253,253,3802,2,2,2,1881,690,690,2,2,2,1881,1881,1881,1881,1881,2,1881,1881,2,2,1881,1881,1881,1881,1881,1881,1881,1881,2,1881,1881,1881,1881,1881,2,2,2,2,1881,1881,1881,1881,1881,2,2,1881,1881,2,2,2,2,2,1881,1881,2,2,2,2,2,2,2,2,2,2,2,2,1881,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3346,2602,959,3774,734,1363,2513,1183,93,196,887,1084,1195,386,386,137,137,137,137,137,137,137,2,2,2,2,2439,2439,2439,2439,2,2439,2439,2,2439,2439,2439,2439,2439,2,2439,2439,2,2,2,2,2439,2439,2439,1261,1261,1261,1261,1261,1261,2439,2439,2439,2439,2439,2,2439,2439,2,2,2,2,2439,2,2,2,1261,2,2,2,2,2439,2439,2439,2439,2439,2439,2439,2,2439,2439,2439,1261,2439,2439,2439,2439,2439,930,930,2439,2439,2439,2439,2439,2439,2439,2439,940,940,2439,2439,2439,2439,2439,2,2439,2,2,2439,2439,2439,1261,2439,1261,1261,2439,2439,2439,2439,2439,2439,2439,2439,2,2,2,1011,2,2,2,2,2439,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2439,2439,2,2,2439,2,2,930,930,2439,2,2,2439,2439,2,2,2,2439,2,2439,2,2439,2,2,2,2,2439,2,2,2,2439,2,2,2,2,2,2,2,2,2,2,2,2439,2439,2439,2439,2439,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3227,1852,987,168,1032,2586,1325,1717,2411,2150,182,3216,3029,3740,454,2,66,66,2,2,2,2,2,2,2,703,703,703,703,703,703,703,703,906,906,906,906,906,906,906,906,906,906,2,906,906,2,906,906,906,906,906,2,906,906,906,906,906,906,906,906,906,2,2,2,2,2,2,2,2,2,2,2,2,906,906,2,2,906,2,906,906,2,2,2,2,2,2,2,2,2,2,906,906,906,2,2,2,2,2,906,906,2,2,2,906,906,906,906,906,2458,2,906,906,906,2,906,906,2,906,906,906,906,906,906,906,906,2,906,906,906,906,906,906,906,906,906,906,2783,2,2,2783,906,906,2,906,2,2,2,2,2,2,906,2,2,906,906,2,2,906,906,2,2,2,2,2,2,2,2,2,2,2,2,2,2,906,2,2,906,906,906,2,906,906,2,906,906,906,906,906,906,2,906,906,906,2,2,906,2458,2458,2458,2458,2458,2458,2458,2458,2458,2458,2458,906,906,906,906,906,906,2,2,906,906,2,906,906,906,2,906,906,906,906,906,2,2458,2458,2458,2458,2458,2458,2458,2458,906,906,906,906,906,906,906,906,314,314,314,314,906,906,2,2,2,2}, + {3362,1624,1609,972,1056,598,1108,871,3438,473,2253,1396,308,2053,2053,2,2,491,1202,2,2,2,2,2,2,2,2,2,2,1202,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3365,1995,213,1204,2954,858,2100,1428,2033,1185,1904,3415,2297,1656,294,2,1518,1182,2,2,2,311,2,2,2,2,2,842,2,2,2,2,2,842,2,842,2,2,2,2,2,2,2,2,2,2,842,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1182,1182,1182,1182,1182,2,1182,2,2,2,1182,1182,842,842,842,2,2,2,1182,1182,2,842,842,842,2,2,2,2,2,2,1182,842,842,842,2,842,2,2,2,2,2,2,2,2,2,2,2,2,2,1182,1182,2,2,1182,2,2,2,2,2,842,842,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3417,1145,2444,1131,1503,578,1177,2790,1481,479,727,2319,173,1123,229,2,709,709,2,2,2,2,2,2,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,709,709,2,2,2,2,2,2,2,2,1244,709,2,1244,1244,1244,2,1244,1244,1244,1244,2,2,1244,1244,709,709,709,709,1244,1599,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,2,2,2,2,2,1244,1244,709,709,709,1244,2,1244,1244,709,2,2,1244,1244,1244,709,709,709,709,709,709,709,1244,1244,1244,1599,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,1244,2,1244,1244,1244,1244,1244,1244,1244}, + {3620,1734,917,337,1356,2011,1576,1762,2739,3686,486,1461,1461,694,694,2687,1426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1821,1821,1821,1821,1821,1821,2,1821,1821,2,2,2,2,1821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,612,612,612,612,612,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3125,3125,3125,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1200,2,2,2,2,2,1200,1200,1200,1200,1200,2,1200,1200,2,2,125,125,2,2,2,2,2,2,2,2,2,2,2,2,2,612,612,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1821,1821,1821,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3125,3125,3125,3125,2,2,2,125,125,125,125}, + {3249,1309,1232,472,711,2557,1479,1027,145,489,1377,2928,2928,3522,3522,3522,968,415,415,2,2,2,2,1332,1332,1332,2,1332,2891,2,1332,2891,2891,2,2891,1332,1332,1332,1332,1332,1332,1332,1332,1332,2,2,2,1332,1332,1332,2,2,2,1332,1332,2,2,2,2,2,2891,2891,1332,1332,1332,2,2,2,2891,2891,1332,2891,2891,2891,2891,2,2,2,2,1332,2,2,2,2,2891,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1332,1332,1332,1332,2,2,2,2,2891,2891,1332,1332,1332,2,2,2,2,2,2,2,2,2,2891,2891,2,2,2891,2891,2891,2891,2,2,2,2891,2891,2891,2891,2891,2891,2,2,2,2,1332,2891,2891,2891,2,2,2,2,2891,2891,2891,2891,2891,2,1332,2891,2891,2891,2891,2891,2,2,2,2,2,2,2,2,2,2,2,2,1332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2891,2891,2,2,2,2,2,2,2891,2891,2891,2891,2891,2,2,2,2891,2,2,2891,2,2,2,2,2,2,2,2,2,2,2891,2,2891,2,2,2,2,2,2891,2891,2891,2891,2891,2891}, + {3427,790,950,2728,1624,2759,1506,2317,2025,640,1156,230,2803,593,3028,44,2156,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,2,2,2,2,1431,2,1431,1431,2,2,2,2,2,2,2,1431,1431,2,2,1431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1431,1431,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1431,1431,1431,1431,1431,2,1431,2,2,2,2,2,2,2,2,2,1431,773,1431,1431,1431,2,2,1431,1431,2,2,1431,2,2,1431,1431,1431,2,2}, + {3296,2249,454,1782,1084,2273,2336,107,2220,2220,779,589,1578,595,595,396,1171,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1088,1088,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1088,2,2,2,2,1088,1088,1088,2,2,2,2,2,2}, + {2628,2163,1961,3271,1440,247,3837,1621,1449,1449,1570,1450,2900,2900,1964,1964,1964,2,2,2,2,2,2,2810,2810,2,2810,2810,2810,2810,2810,2,2,2,2,2,2810,2810,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2810,2,2,2,2,2,2,2,2810,2810,2810,2810,2810,2,2,2,2810,2810,2,2,2810,2,2,2,2,2,2,2810,2810,2810,2,2,2,2,2,2,2,2,2,2,2810,2810,2,2,2,2,2,2,3236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2462,1962,257,2244,1966,1905,204,262,799,319,752,1696,971,971,3781,1426,1426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1196,1196,1196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1196,1196,1196,1196,1196,2,1196,1196,2,2,2,2,2,2,2,2,2,2,2,2,2,1196,1196,2,2,2,2,1196,1196,1196,2,2,1196,1196,2632,2,2632,1196,1196,1196,1196,2,2,2,2,1196,2632,2632,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,2632,1196,1196,1196,1196,1196,1196,2,2632,2632,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,2,1196,1196,1196,1196,1196,1196,1196,1196,1196,2632,2632,2632,1196,2632,2632,2632,2632,2632,2632,2632,1196,1196,1196,1196,1196,82,82,2632,2632,2632,2632,2632,2632,1196,1196,2632,2632,2632}, + {2407,2157,3828,1024,570,3052,906,2923,3303,1624,1070,2059,1442,516,516,516,516,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,438,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,438,438,2,2,2,2,2,2,2,2,2,2,438,438,2,2,2,2,2,2,2,2,2,2,438,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,438,438,438,438,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,438,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2475,1006,2721,2591,2253,3513,2591,2297,1110,135,1045,629,533,3647,761,761,2693,2693,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1103,1103,2,2,2,2,2,2,1718,2,1103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2713,409,2186,1816,1653,744,2899,2899,796,1925,378,3807,1372,1594,1594,207,2,2,1636,1636,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,740,740,740,2,2,2,2,2,2,2376,2376,2376,2,2,2,2,2,2,2,2,1636,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3434,3131,1399,3413,1533,281,3288,1242,810,135,2506,2506,1742,946,1015,1044,1044,1044,2,2,2,2,1044,1837,1837,1837,1837,1837,2,2,2,2,2,2,2,2,2,2,2,2,2,1837,1837,1044,1044,1044,1044,1837,2,1044,1044,1044,1044,2,2,2,2,2,2,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,2,2,2,1837,1837,1837,1837,1837,1837,1837,1837,1044,1044,1837,1837,1837,1837,2,2,2,2,2,1837,914,1837,1837,1044,1044,1837,1837,1837,1837,1044,1044,1837,1837,1837,1837,1837,1837,1044,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,914,914,914,914,1837,1837,1837,1837,2384,1044,2384,2384,2384,1044,1044,1044,1044,1044,1044,1837,1837,1837,1837,1837,1837,1837,508,1837,914,1044,1044,1044,914,914,1044,914,914,914,914,914,914,914,914,914,914,3615,3615,3615,3615,3615,3615,3615,3615,1044,914,914,1837,1837,1837,1837,1837,1837,1837,1837,1044,1044,1044,1044,1044,1044,1044,1044,1044,1136,1136,1136,1136,1136,1136,1136,1044,1136,1136,1136,1136,1136,1136,1136,1044,1044,1044,1044,1837,1044,1044,1837,914,914,914,1837,914,914,914,914,914,914,1136,914,914,914,914,914,914,914,914,914,914,914,1044,1044,508,508,2,2,2,2,2,1044,1044,1044,1044,1044,1044}, + {2623,549,625,327,1654,329,2282,2056,3059,2037,273,2669,701,162,162,1643,2,1643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2976,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,116,2,2,2,2,2,2,2,2,2,2,2,2,116,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3437,1647,471,1736,2343,847,1051,2890,2223,131,80,629,629,2490,717,717,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2187,2187,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2187,2187,2,2187,2187,2,2187,2187,2187,2,2,2,2,2,2,2,2,2,2,2,2,2,2187,2187,2,2187,2,2,2,2,2,2,2,2187,2,2,2,2187,2187,2,2187,2187,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3798,2207,1470,1527,1851,496,1578,1221,143,2273,684,744,660,555,555,618,2,2,3011,3011,3011,3011,3011,3011,3011,3011,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3335,455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,455,2,455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,455,2,2,2,2,2,2,2,2,2,2,455,455,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,455,455,2,2,2114,2114,455,455,455,2114,455,455,455,455,455,2,2,455,455,455,455,455,455,455,455,455,455,455,455,2,2,2,2,2,2,2,2,2,2,2027,2027,2027,2027,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2027,2027,2027,2,2,2,1204,2,2,2,2,2,2027,2027,2,2027,2027,2027,2027,455,455,455,455,2,2027,2027,2027,2027,2,2}, + {3334,1429,2637,986,2601,774,162,1400,1649,1844,118,1732,1022,1659,1659,1659,2,2,2,1334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1071,1071,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1358,2,2,1071,163,163,163,163,2,163,163,2,2,2,1071,2,1358,2,2,1358,1358,2,2,2,2,1071,1071,1071,2,2,2,2,2,2,1358,1358,2,2,1358,1358,1071,1071,1071,1071,2,2,2,1071,2,2,1358,2,1071,2,1071,1071,2,2,1358,2,2,1071,1071,1071,1071,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2518,1200,631,596,1946,365,2960,413,592,3878,242,2714,2364,1402,1402,2322,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,1591,1591,2,1591,1591,1591,1591,1591,1591,1591,1591,1591,2,1591,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1591,1591,2,2,2,2,2,2,1591}, + {2522,1382,2025,1057,2443,1252,339,1116,576,922,2814,2528,2819,225,1642,261,2,2,2,2,2,2,1523,1523,2,2,2,2,2,2,2,2,2,1647,1647,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1523,1523,1523,2,2,2,1523,1523,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3268,1529,1522,1096,2152,3137,1015,1440,3464,313,2250,3108,2250,1339,636,2782,2,2,2,1014,2,2,2,2,2,2,2,2,1856,2,1014,2,2,1014,1014,2,2,1014,1014,435,435,1014,1014,1014,1014,1014,1014,1014,1014,1014,1856,1014,1014,1014,1014,2,2,2,2,1856,1856,1856,1856,1856,1856,1856,2,2,2,1856,2,2,1856,1014,1856,1856,1856,1014,1014,2,2,2,2,2,2,2,1014,1014,1014,1014,1014,2,2,1856,2,2,2,2,2,2,2,2,1856,1856,1856,1856,1856,2,2,3412,3412,3412,3412,3412,2,435,435,2,2,1856,2,2,2,1014,1856,2,1856,1856,1856,1856,1856,1856,1856,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1856,1856,2,2,1856,1856,2,2,1014,1014,1856,1856,2,1856,2,2,2,2,2,2,2,2,2,1014,1014,1014,1014,1856,1856,1856,1856,1856,2,1014,1014,1014,1014,1014,1014,1014,1014,2,2,1014,1014,2,2,1014,1014,1014,1014,1014,1014,1014,1014,2,2,2,2,2,1856,1856,1856,1014,1014,3412,3412,1856,1856,1856,1856,1856,1856,1856,1014,1856,1856,2,2,1856,1856,1014,1014,1014,1014,1014,1014,1014,1014,1856,1856,1856,1856,1856,1856,1856,1856,1856,1014,1856,1856,1856,2,3412,3412,3412,1856,1856,1856,1856,1856,3412,3412}, + {2546,3445,689,3696,1988,1922,62,1371,1353,162,674,278,278,278,278,1425,1786,1786,1786,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,547,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2058,2058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,547,2,2,2,2,547,547,547,547,547,547,547,2,2,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,2,547,547,547,547,547,547,547,547,547,547,547,547}, + {3362,2012,1759,2002,1365,150,3120,471,1590,3246,1296,196,196,196,2984,2323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1920,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1920,2,2,2,2,2,1920,2,2,2,2,1920,2,2,1920,2,1920,1920,2,1920,2,2,2,2,2,2,2,2,2,2,2,2,1920,2,2,1920,1920,2,1920,2,2,1920,2,1920,1920,1920,1920,2,2,2,2,1920,2,2,1920,2,1920,1920,1920,2,2,1920,1920,2,1920,2,2,2,1920,1920,1920,1920,1920,2,2724,2323,2,1920,2,1920,1920,1920,1920,1920,2,1920,2,1920,2,2,2,2,1920,1920,1920,1920,1920,2,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,2,2,1920,2,2,2,2,2,2,2,1920,1920,2,2,2,2,1920,1920,1920,1920,2,2,2,1920,1920,1920,2,2,2,1920,1920,2,2,2,2,2,2,2,2,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920,1920}, + {2667,2308,2618,396,844,797,709,1580,1014,201,3198,3529,1002,393,1907,393,2,2,2,2,2,1907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2618,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1907,1907,1907,1907,1907,2,2,2,1907,1907,1907,1907,2,2,2,2,2,2,2,2,2,2,2,2,2,1907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3365,1395,2404,569,570,1941,97,1216,225,3465,2116,2455,1323,1974,1974,330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,379,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1311,2,2,2}, + {2547,3409,1956,1219,820,1321,2253,1431,378,3135,1484,4056,4056,4056,4056,4056,2,2,2,2,2,2,2,2,2,2,2,2756,2756,2756,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,615,615,2,2,2,2,2,615,615,2,2,2,615,615,2,2,2756,2756,2756,2756,2756,2,2,615,615,615,615,615,615,615,615,615,615,615,2,615,615,615,2756,2756,2,2756,2756,2756,2756,2756,615,615,615,615,615,615,615,2756,615,615,2,2756,2756,2756,2,2,2,2,2,2,2,2,2,2,2756,2,2756,2756,2,2756,2756,2,2,2,2,2756,2756,2756,2756,2,2,2,2,2,2,2,615,615,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,615,615,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,615,2756,2,615,615,615,2756,615,2,615,2756,2756,615,615,2,2,2,2756,2,2,615,615,2,2,615,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2756,2,2,2756,2756,2756,2756,2756,2756,2,2}, + {2702,1950,1347,2470,1230,334,1565,785,3725,161,1816,389,3102,2874,1866,1866,1866,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1866,1866,2,2,2,2,2,2,2,2,2,2,2,2,1866,1866,1866,1866,1866,1866,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1675,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1866,1866,1866,2,1866,1866,1866,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1866,2,2,2,2,1866,2,2,2,2,1675,1866,2,2,1675,1866,1866,2,2,2,2,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,2,1866,1866,1866,1866,1866,1866,1866,1866,1866,1675,1675,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,1866,2,2,2,2,2,2,1866,2,1866,2,1866,2,1866,1866,1866,1866,2,1866,1866,2,2,2,2}, + {2536,2188,2575,581,2585,987,2538,1244,2800,2617,2491,3490,223,462,1563,4295,1925,2,2,2,2,2,2,2,1925,2,2,2,2,1925,1925,1925,2,2,2,2,2857,2,2,2,2,2,1925,2,2,2,2,2,2,2,2,2,2857,2857,2,2,2,1925,1925,1925,1925,2,1925,1925,1925,1925,1925,1925,1925,1925,1925,2857,2857,2857,2857,932,2857,2857,2857,932,932,1925,932,2857,2857,2857,2,2857,2857,2857,2,2,2857,2,2,2857,2857,2,2857,2857,2,2857,2857,2857,2,2,2857,2,2,2,2857,1925,1925,2,2857,2857,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,932,932,932,932,932,932,932,1925,2,2,2,1925,1925,1925,1925,1925,1925,1925,1925,2,1925,1925,1925,1925,1925,1925,1925,1925,1925,1925,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,932,932,2857,2,2,2,2857,2857,2,2,2,2,2,2,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857,2857}, + {3554,2059,585,409,1280,620,1669,98,2768,2102,1458,2515,893,893,1111,2556,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,1205,2,1205,1205,1205,1205,2,1205,1205,1205,2,2,2,2,1205,1205,2,1205,1205,1205,2,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,1205,1205,2,1205,2,2,2,2,2,2,1205,1205,2,2,1205,1205,2,2,1205,1205,2,2,2,1205,1205,1205,1205,1205,2,2,2,1205,1205,1205,1205,2,1205,2,2,2,2,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,1205,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1205,2,2,2,2,2,2}, + {3561,1030,476,1998,2687,490,262,3659,1029,1010,1861,1326,1326,1326,1326,16,16,2,2,2,2031,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2031,2031,2,2,2,2031,2031,2031,2,2960,2960,2,2,2,1107,784,2960,2031,2031,784,2031,784,784,2,784,784,2,2,784,2031,784,784,2,2,2,2,2,2,2,1845,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2031,784,2,2,2,2031,2031,2031,2031,1845,784,784,2031,2031,784,2960,2960,2960,784,2,2031,2031,2031,1845,2,2031,2031,2031,2031,2031,2031,2031,2031,2031,2031,784,2031,2031,2031,2031,2031,2,2031,784,2,2,2031,2031,2031,2031,2031,2031,2031,784,2031,2031,2031,784,2031,2031,2031,2031,2,784,784,784,2,2031,2031,2031,2031,2960,2031,2960,2031,784,784,784,2031,2031,2031,2031,2,2960,1107,1107,784,784,784,2031,2031,2031,2031,2031,2031,2031,2031,2960,2960,784,784,784,784,784,784,784,784,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,1845,784,784,784,784,784,1845,2031,1845,1845,2960,1845,1845,1845,2960,2960,2031,1845,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,1845,1845,2960,784,784,2,1845,2960,2960,2960,2960,1949,1949,1949,1845,1845}, + {2547,3563,2848,1569,632,2183,3303,536,620,1267,2349,1888,878,878,2,349,517,2,2,2,2,2,2,2,2,2,2,2,2,2,618,618,1592,1592,1592,618,618,618,618,618,618,618,2,2,2,2,618,618,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1592,1592,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1592,1592,1592,1592,1592,1592,2,1592,1592,1592,1592,1592,1592,1592,1592,1592,2,1592,1592,1592,1592,1592,1592,1592,2,2,2,2,2,1592,1592,1592,2,2,2,2,2,2,2,2,2,1592,2,2,2,1592,2,2,2,2,2,2,2,2,2,2,2,2,2,1592,1592,1592,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2697,587,2342,1952,1828,2352,1269,2395,1111,1071,169,1840,2612,2612,2,751,3246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,997,997,997,997,997,997,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,997,997,997,2,997,997,997,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,997,2,997,997,997,2,2,2,2,2,2,2,2}, + {2728,1334,274,1330,2674,2614,931,2250,883,1506,2193,1345,1089,500,2,219,390,2,2,2,2,2,2,2,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3057,3057,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3057,3057,3057,3057,3057,390,2,2,2,2,2,2,2,2,2,2,2,2,3057,3057,2,2,2,2,2,390,390,2,3057,390,390,390,390,390,390,3057,390,390,3057,3057,3057,3057,390,390,390,3057,2,2,2,2,2,390,390,390,390,2,2,2,2,3057,390,390,390,390,390,390,390,390,390,2,2,390,3057,390,2,2,390,3057,3057,3057,3057,390,390,390,390,390,390,390,2,390,390,390,3057,390,390,390,2,2,2,390,390,390,390,390,390,390,390,390,390,390,390,390,3057,390,390,390,390,390,390,390,390,390,390,618,618,618,618,618,618,618,618,618,618,3057,390,390,390,618,618,2,390,618,3057,3057,618,390,390,390,3057,390,390,390,390,2,390,390,390,390,390,3057,3057,3057,3057,3057,3057}, + {3568,1820,2374,2294,3151,665,1172,3639,3261,2752,48,288,708,3016,2863,2863,2863,2,2,2,2,2,2,2863,2863,2863,2863,1610,2863,1610,2,2,2,2,2,2,2,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,2863,2863,2863,1610,2,2,2,1610,1610,1610,1610,1610,2402,1610,2402,2402,1610,811,811,811,1610,1610,1610,1610,1610,1610,2,2,1610,1610,1610,1610,1610,1610,1610,1610,1528,1610,1610,1528,1528,1610,1610,1610,1610,1610,811,811,811,1528,1610,1528,1528,1610,1610,1528,1528,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1528,1528,1528,1528,1528,1610,1610,1610,1610,1528,1528,3332,3332,3332,3332,3332,1610,1610,1610,1610,1610,1610,1528,1528,1528,1528,1528,3930,3930,3930,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,1610,3930,3930,3930,3930,811,811,811,811,3930,3930,3930,3930,1610,1610,811,1610,1528,1528,3332,1528,1528,3930,3930,3930,3930,3930,3930,3930,3930,3930,3930,3930,3930,3930,495,3930,568,811,811,811,3930,1610,3930,1610,3930,3930,3930,3930,3930,3930,3332,3332,3332,263,263,3332,263,263,263}, + {3841,1526,728,371,165,240,35,1761,2632,646,1427,554,554,554,554,554,554,4343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3063,3063,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,180,180,2,2,180,180,180,180,180,2,180,180,2,2,2,2,2,2,2,180,180,2,2,2,2,2,180,180,180,180,180,2,2,2,180,180,2,2,2,180,180,180,180,2,2,180,180,180,180,180,180,180,180,180,180,180,2,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,2,2,180,180,180,180,180,180,180,180,180,180,180,180,180,180,3063,3063,180,180,180,180,180,180,4408,4408,3063,3063,180,180,2,180,180,180,180,2,180,180,180,180,180,180,180,180,3063,3063,180,180,3063,3063,3063,2,2,180,180}, + {2743,1720,981,308,637,2946,3695,2641,1928,658,343,1763,746,746,2,2,1703,3478,2,2,2,2,2,2,2,2,499,1672,1672,1672,1672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1672,1672,1672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1672,1672,2,2,2,1672,1672,1672,1672,2,3534,1672,2,2,2,499,499,2,2,2,2,2,2,2,2,2,2,2,2,2,499,499,499,499,499,499,499,499,499,2,2,2,2,2,2,2,2,1672,2,2,3534,3534,3534,3534,3534,3534,3534,2,2,2,2,2,2,2,2,499,499,499,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,3534,827,827,1754}, + {2743,3246,1716,1257,201,1379,265,475,639,2737,466,2517,3336,496,2,2,378,3723,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2318,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2727,2610,1614,2813,315,2920,1987,1311,550,632,1360,555,2151,1266,2,2,705,1266,1266,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2436,2436,2436,2436,2436,2436,2436,672,2436,2436,2436,2,2436,2436,2436,2,2,2,2,2,2436,2436,2,2436,672,2436,2436,672,2436,2,2,2,2436,2436,672,672,672,672,672,672,672,672,672,672,672,672,672,2,2,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2436,2,2436,2436,2436,2436,2436,2436,2,2,2,2,2436,2,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,672,2,2,2,2,2,2,2,2,2,672,672,2,672,2,2,2,2,2,2,2,2,2,2,672,672,672,2,2,2,2,2,2,2,672,672,672,672,2,672,672,672,672,2,672,672,672,672,672,672,672,672,672,2,672,672,2,2,672,2,2,2,2,2,2,672,672,672,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2436,2436,672,2,2,2,2,2,2,2,2,672}, + {3855,2471,1322,4343,678,3880,1418,1892,703,2657,886,2938,2464,134,2,2,2,699,3472,2,2,2,2,2,2,2,2,2,2,2,2,2,869,2,2,2,2,2,2,2,2,2,2,2,2,869,2,869,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3428,2242,1311,1602,2823,4010,466,1697,1227,864,2416,94,2416,651,2,2,2,2617,2617,2617,2,2617,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2584,1707,1569,1370,2947,836,2055,1055,2862,495,1058,641,1557,44,2,2,2,2,1634,3041,713,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3563,1502,254,2975,1699,1872,1542,3067,1993,485,122,739,2029,2821,2,2,2,2,2217,2217,1835,2217,2217,1835,2,2,2,2,2,2,2217,2217,2217,2217,2217,2,2,2,2,2,2,2,2,2,2,2,1835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2217,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2217,2217,2217,2,2217,2,2,2,2,2,2,2,2,2,2,2,2,2217,2,2,2,2,2,2217,2217,2,2,2,2217,2217,2,2,2,2,2,2,2217,2217,2217,2217,2217,2,2,2,2,2,2,2,2,2217,2217,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1835,1835,2,2,2,2,2,2217,2217,2217,2,2,2,2,2,2,2217,2,2,2,2,2217,2217,2217,2,2,2217,2217,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1835,1835,2,2,2217,2,2,2,2,2217}, + {2583,1148,1816,822,4422,130,3844,2715,1288,1245,2737,2162,1609,3467,2,2,2,2976,2976,2976,2976,2976,2,2,2,1160,2,2,2,2,2976,2976,2976,2,2976,1896,1896,2976,2976,2976,2976,2,3980,3980,3980,3980,3980,3980,3980,3980,3980,2,2,2,2976,2976,2976,2,2976,2976,2976,1896,1896,1896,2976,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3980,3980,3980,3980,3980,2,2,2,895,895,1160,2,2,3980,3980,895,895,895,895,2,1620,1490,1490,1490,2976,1160,1160,2,2,1620,1620,1620,2,3980,3980,2,3980,3980,3980,3980,3980,3980,3980,3980,3980,1160,1160,1160,2,2,2,2976,2,1160,2,1620,1620,2,2,1160,1160,2,2,2,1160,1160,2976,1160,3980,3980,3980,3980,2976,2976,2,1160,3980,3980,3980,3980,3980,3980,3980,3980,2976,2,3980,3980,3980,3980,3980,3980,3980,3980,2,3980,2976,2,2,2976,2,2,2,2,2,2976,2,3980,3980,3980,3980,3980,3980,3980,2,2,2,2,2,2,3980,3980,3980,3980,3980,3980,2,3980,3980,3980,3980,3980,2,3980,3980,1620,2976,2976,2976,1160,3980,3980,3980,3980,2976,2976,2976,2976,2,3980,3980,1160,1620,2,2,1620,1620,1620,895,2976,1620,1620,1620,1160,2976,2976,2976,2976,1160,2976,2976,2,2,2,2}, + {3475,932,501,2551,500,77,1485,388,2432,545,82,1851,2435,2435,1175,1175,1175,1175,1175,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1696,1696,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1696,1696,1696,1696,2,1696,1696,1696,1696,1696,2,1696,1696,1696,1696,1696,1696,2,2,1696,1696,1696,1696,1696,1696,1696,1696,1696,2,1696,1696,1696,1696,1696,1696,1696,2,2,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,2,1696,2,2,2,1696,1696}, + {2757,3466,1411,1168,340,2760,1053,524,53,2090,1227,26,260,830,2,2,2,1139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3154,3154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2120,2120,2,2,2,2,2,2,2,2,2}, + {3872,1852,1020,3421,1850,2159,1511,901,55,384,308,3338,288,456,1211,1211,1211,1211,2,2652,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1211,1211,2,2,2,2,2,2,2,2,2,1211,1211,2,2,2756,2,1211,1211,1211,1211,1211,1211,1211,2,2,2,2,1211,2,2,2,2,2,1211,1211,1211,2,2,2,2,2,2,2,2,2,1211,1211,2,2,2,2,2,2,2,1211,1211,2,1211,1211,2,1211,1211,1211,1211,1211,1211,1211,1211,2,1211,1211,1211,2,2,1211,1211,2,1211,1211,1211,1211,1211,1211,1211,2,362,362,1211,1211,1211,1211,1211,1211,1211,1211,1211,2,2,1211,1211,130,2,1211,1211,1211,1211,2,1211,1211,2,2,2,1211,1211,2,2,2,2,2,2,2,2,1211,2,2,2,2,2,2,2,2,2,2,2,2,3309,2,2,2,2,2,1211,1211,1211,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1211,1211,1211,1211,1211,1211,2,2,2,2}, + {2804,3002,554,1797,347,1895,76,965,926,2807,283,40,2433,2433,2,2,168,1971,2,2,2,2,2073,2,2,2,2,2,2,2,1483,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1483,2,1483,1483,2,2,1483,1483,2,1483,1483,2,2,2,2,2,2,1483,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1903,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3964,1838,1032,1785,835,2026,1883,801,1408,631,195,3076,3076,3076,2,523,1511,1511,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2557,1972,1743,4367,1391,662,1037,1098,3607,2537,1474,902,1364,1301,2,1917,1646,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1373,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,627,2,2,1373,1373,1373,2,1373,1373,2,2,627,627,1373,1373,1373,2,2,2,1373,627,627,1373,1373,1373,1373,1373,1373,627,627,627,1373,1373,1373,1373,1373,1373,1373,1373,1373,1373,1373,1373,1373,2,2,1373,1373,2,2,1373,2,2,2,2,1373,2,2,2,2,2,2,2,2,2,2,2,2,2,2,627,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1373,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3623,1074,201,1409,3910,2611,2343,1134,1280,2994,2243,1914,15,28,2,741,1612,2,2,2,2,2,2,2,2,764,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3673,537,872,1983,2478,2297,1613,1535,1360,736,2586,623,1819,1819,2,907,907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2913,2913,2913,2,2,2,2913,2,2913,2,2,2,2913,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1927,1927,1927,2,2,2,2,2,2,2,2,2,2,2,1927,1927,1927,1927,1927,1927,1927,2,2,2,2913,2913,2913,2913,1927,2913,2913,2913,2913,2913,2913,2913,2913,2,2913,2,2,2,2,2913,2913,2,2,2,2,2,2,2,2,1927,2,1927,1927,2913,2,2,2913,2913,1927,1927,1927,2,2,2913,2913,2913,2913,2913,2,2,2,2,2}, + {3680,637,4064,1504,1531,1271,2659,2881,1792,178,2794,2747,912,2141,2141,1682,2141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,169,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1319,1319,32,1319,32,32,2514,1501,1501,1501,2,2,169,2,2,2,2,169}, + {2662,902,2371,1920,1097,1476,1008,1012,3556,468,3374,2560,591,1446,2,298,298,149,149,149,149,149,3135,3135,3135,3135,3135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2826,3005,1262,3027,2874,816,1460,40,957,492,4067,100,84,84,2,541,1266,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,835,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,2,2,2,2,2,2,2,2,2,835,835,2,2,2,2,2,2,2,835,835,835,2,2,835,835,2,2,835,835,835,2,2,835,2,2,835,835,835,835,835,2,2,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,835,835,2,2,2,2,2,2,2,2,835,835,835,835,835,2,835,1129,1129,1129,2,2,2,835,835,835,835,835,2,2,384,384,2,835,2,2,2,2,2,835,2,835,835,835,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1129,2,2,2,2,2,2,2,835,1129,1129,2,835,835,835,835,835,835,835,835,835,2,835,2,2,2,2,2,835,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1129}, + {2673,1823,1673,332,1828,100,1262,1108,863,2148,16,2861,123,2861,2861,2861,2,2,899,2893,2893,2,2,2,2,2,2,2,2,2,2,2,2893,4061,4061,2,2,2893,2,2,2,2,2,2,2893,2893,2893,2893,2893,2,2,2,2893,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4061,2,2,2,4061,4061,2,4061,2,2,2,2,2,2,4061,2893,2,2,2893,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3713,1569,2869,1783,2294,613,2857,2210,1851,2060,710,3457,662,2079,2344,3094,1761,1466,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1761,1761,1761,1761,1761,1761,1761,1761,2,2,2,2,2,2,2,2,2,2,2,2,485,485,2,2,2,1761,1761,485,485,485,485,1761,1761,1761,1761,1761,1761,1761,1761,1761,2,2,2,2,2,2,2,2,2,1761,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1761,2,2,2,1761,1761,1761,1761,1761}, + {3554,3047,2524,365,4249,2531,430,3815,301,1103,1159,3122,70,203,2448,2448,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3458,1992,2688,355,1542,1642,1448,371,805,1593,1593,924,924,198,198,3602,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3053,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3053,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3053,3053,2,3053,2,2,2,2,2,2,2,2,3053,2,2,3053,3053,3053,3053,2,2,2,2,2,2,3053,3053,3053,3053,3053,3053,2,2,3053,3053,3053,3053,2,1533,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3735,1183,2701,1627,2274,384,2540,1176,457,2678,4107,27,27,27,3857,3857,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,101,101,101,101,101,101,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,101,101,2,2,2,2,2,2,1632,1632,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1632,2,2,1632,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1632,1632,2,1632,1632,2,2,2,2,2,2,2,2,2}, + {4034,1737,713,630,1446,1119,1569,311,311,1603,570,297,523,2099,2099,2099,2,2,2,2,2,2,2,2,2,2,2,2,2,1747,1747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1747,1747,1747,1747,2,2,2,2,2,1747,1747,1747,1747,1747,2,2,2,2,2,1747,1747,1747,2}, + {2852,1709,2792,619,1259,436,118,1947,4133,594,875,69,181,840,948,2555,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3703,909,3204,468,3987,486,1684,2060,1723,2755,1255,455,276,1639,1639,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2141,2,2,2,2,2,2,2,2,2,2,2,2141,2141,2,2141,2141,2,2,2,2,2,2,2,2,2,2141,2141,2141,2,2,2,2,2,2,2141,2,2,2,2,2,2,2,2141,2141,2,2,2,2,2,2141,2,2141,2141,2,2,2,2,2,2,2141,2,2141,2,2,2,2,2,2,2,2,2,2,2,2141,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2861,1407,1848,245,2186,1209,164,2577,625,132,657,2333,2333,2213,2213,2213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1823,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,591,2,2,591,1823,2,2,2,926,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,926,1823,1823,1823,1823,1823,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3586,1682,414,683,2259,102,3055,2722,74,1814,1814,3582,110,116,970,779,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2192,2192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2192,2,2,2192,2,2,2,2,2,2,2,2,2,2,2,2,2192,2192,2,2,2,2192,2192,2192,2192,2192,2192,2192,2192,2192,2,2,2,2192,2192,2192,2192,2192,2,2,2,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,400,400,400,400,2192,2192,2192,2192,2192,2192,2192,2192,2069,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2,2192,2029,2029,2029,2029,2029,2029,2029,2192,2192,2192,2192,2192,2192,2192,2192,2192,2192,2029,2029,2029,2029,2029,2192,2192,2,2192,2192,2029,2192,2192,2192,2192,2192,2069,2069,2069,2069,2069,2069,2069,2069,2069,2069,2069,2069,2069,2029,2069,2069,2192,2192,2192,2192,2,2,2069,2069,2192,2069,2192,2571,2571,2192,2192,2192,2192,2192,2192,2192,2192,2192}, + {2967,3127,2698,2547,2618,3281,1906,796,2265,3752,44,2657,1535,1535,2657,2657,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,327,327,327,327,2,2,2,2,1027,1027,2,2,2,1027,1027,2,2,2,2,327,327,2,2,2,2,327,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,832,2,832,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,832,2,2,2,2,2019,2379,2379,2379,832,2019,2019,2,832,832,832,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,327,2,2,2,327,327,327,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,832,2,2,2,2,2,832,2,2,1027,2,2,2,2,2,832,2,832,2,2019,2}, + {4020,3512,326,1782,2738,298,2949,376,1624,1085,329,1161,2014,2014,369,3628,2,2,878,878,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2889,2889,2889,2,2,2,2,2,2,2,2,2,2889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2889,3231,3231,3231,3231,3231,2,2,2889,2889,2889,2,2889,2,3231,3231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,878,878,2,878,878,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4096,1167,2529,1528,1143,960,1993,15,119,795,1064,1064,2835,2367,3836,3836,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,847,847,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847,847,847,847,847,847,847,2,2,2,2,847,847,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2703,3042,1879,490,418,3773,3382,1756,2631,1500,4288,1530,2180,2180,652,652,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2191,2,2,2,2191,2,2,2,2191,2,2,2,2191,2191,2191,2191,2191,2,2191,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2966,2966,2,2,2,2,2,2,2966,2,2,2,2,2,2,289,2784,2,289,2,2,2,2,2,2,2784,2,2784,2784,2784,2784,2,2,2,2,2,2966,2966,2966,2966,2966,2,2966}, + {3715,1366,2348,1698,1521,1521,2348,584,584,2102,3667,1917,592,2363,2363,2363,2363,2363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3083,1034,2,2,3083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2137,2,2,2,2,2,2,2,1034,2,2,2,2,2,3083,2137,2137,2,2,2137,2137,2137,2137,2137,2137,3318,2137,2,2,2,2,2,2137,2,2137,392,392,2,2,2,2137,2137,1700,2,2,2,3083,3083,2,2137,2,3083,2,2,2,2,1034,1034,1034,2,2,2,2,2,2,2,2,2,2,2,1700,3083,3083,2,3083,1700,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,2137,2137,2,2,2,2,2,1199,1199,1199,1199,1199,2,2,2,1199,1199,1199,77,2,2,1034,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3083,3083,1034,1034,1034,1034,1034}, + {2646,2049,300,479,1950,1168,789,1246,238,860,3202,1238,165,3078,1948,2957,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,99,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1555,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2876,3171,3052,820,344,277,2596,748,2791,3647,102,2053,2053,2464,2464,2356,2,2,2,2,2,2,2,2,2,2,2,1501,1501,1501,2,2,2,1501,1501,2,1501,1501,2,2,2,2,1501,1501,1501,1501,336,336,336,336,336,336,336,2516,1501,2516,2516,336,2516,2516,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,1501,336,336,336,336,1501,336,336,336,2516,2516,2516,2516,2516,2516,2516,2,2516,2516,2516,2516,2516,2,2516,2516,2,2,2516,2516,2,2,2,2516,2516,2,2,2516,2516,2,2,2,2516,2516,2516,2516,2516,2516,176,2516,2516,2516,2,2,176,176,1501,336,336,336,336,336,2,336,2231,2,2,2,2,1501,1501,2516,2516,2516,2516,2516,2516,2516,2516,2516,2516,2516,336,1501,2516,336,2516,2516,336,336,336,336,336,2,336,336,336,336,336,2,336,336,336,336,336,336,336,336,336,2516,2,336,2,336,336,336,2,2,2,2,2,2,2,2,2,336,2,2,2,2,2,336,336,336,336,336,336,336,336,176,176,176,176,176,176,336,336,336,176,176,176,2,2,336,336,2,2,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2909,2526,2521,897,489,3799,1599,1316,848,1788,2192,1082,735,533,1397,1397,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1533,1533,2,2,2,2483,2,2,2,2,2,2,2,2,2,2,2,1533,1533,1533,2,2,2,2,2,2,2483,2,2,2483,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2483,2483,2,2483,2483,2483,2483,2,2,2,2,2,2,2,2483,2,2,2,2,2483,2483,2483,2483,2483,2,2,2483,2483,2,2483,2483,2,2,2,2,1533,2,2,2,2483,2,2,2,2483,2483,2483,2483,2483,2483,2483,2,2,2,2,2483,2483,2,2,2,2,2483,2483,2483,1533,1533,2483,2483,2483,2483,2,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,1533,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2483,2,2483,2,2,2,2483,2483,2,2483,2,2,2,2,1533,2}, + {2908,880,2377,2070,175,2199,2074,585,81,2646,3447,565,99,4735,4165,4165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,995,995,995,995,995,995,995,995,995,995,995,2,2,995,995,995,2,995,3460,995,2,2,995,995,2,2,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995,995}, + {2883,3203,1862,572,2683,4862,130,173,832,825,195,1184,2151,2151,60,1063,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1321,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,311,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1321,1321,2,2,2,1321,1321,1321,1321,1321,1321,1321,1321,1321,1321,1321,1321,1321,1321,2,2,2,2,1321,1321,2,2,2,2,2,2,2,2,2,1321,1321,2,2,2,1321,2,1321,2,2,2,2,1321,1321,1321,2}, + {2738,2414,2332,135,1239,507,1909,1026,629,1075,297,247,2209,2585,2704,682,2077,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2077,2077,2077,2077,2,2,2,2,2,2,2077,2077,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2077,2077,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2077,2077,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2077,2077,2077,2077,2077,2077,2077,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2077,2077,2077,2077,2077,2077,2,2077,2077,2077,2077,2077,2077,2077,2077,2077,2,2,2077,2077,2077,2,2,2,2,2,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,133,133,133,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,133,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077,2077}, + {2927,1924,419,310,309,1727,394,19,1212,95,3764,2221,2221,642,1452,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2656,1922,1914,585,636,1819,668,479,2085,3809,739,693,2308,529,647,647,2343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,939,2,2,2,2,939,2,2,939,939,939,939,2,2,939,939,939,939,2,939,939,939,939,939,939,939,939,939,939,939,939,2,2,2,2,939,939,939,939,939,939,939,2,939,939,2,2,2,2,939,939,2,939,939,2,2,2,939,939,939,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,939,939,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,939,2,2,939,2,939,2,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,2,2,2,2,2,939,939,939,939,939,939,939,939,939,939}, + {2908,887,2514,568,547,2994,465,1913,1522,1029,4149,1585,1585,224,1600,2,2103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1836,1836,2,1836,1836,1836,2,2,2,2,2,2,2,2,3109,2,2,2,2,3109,3109,2,3109,3109,1836,3109,3109,3109,3109,2,2,2,2,3109,1836,3109,2,1836,2,2,3109,3109,3109,2,2,2,2,1836,2,2,1836,1836,1836,1836,2,1836,3109,2,2,2,2,1836,2,2,2,2,1836,1836,1836,1836,1836,1836,2,2,2,2,3109,1836,1836,1836,3109,3109,3109,3109,3109,3109,3109,1836,3109,3109,3109,3109,3109,3109,3109,3109,3109,1836,2,3109,3109,3109,1836,1836,1836,3109,2,3109,3109,3109,3109,2,2,1517,4418,4418,4418,128,3109,3109,1836,3109,3109,3109,3109,3109,3109,1836,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,1836,1836,1836,1836,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,1836,1836,1836,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,3109,1836,1836,1836,440,3109}, + {2941,1122,3674,2894,3555,865,1461,1236,1571,4709,103,737,667,1446,3578,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2786,819,1803,1811,1615,2270,1788,311,3586,175,854,733,240,2390,506,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1519,1519,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2757,1597,915,3952,276,2516,3009,1503,2377,795,2023,1374,367,1374,942,2,2797,2797,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,846,2,965,2,2,2,2,2,2,2,2,2,2,2,2,2,1811,1811,1811,1811,1811,2,1811,2,2,846,2,2,2,2,846,846,846,846,846,846,1811,846,846,2,2,1811,1811,1824,2,2,2,2,2,2,2,965,965,2,1811,1811,1811,2,2,1811,1811,1811,1811,965,965,965,965,965,1811,1811,1811,1811,1811,2,846,2,2,2,2,1811,1811,2,2,2,2,2,2,2,2,846,2,846,846,1811,1811,2,2,2,2,2,1824,1811,1811,2,2,846,846,846,1824,846,846,965,2,2,965,2,2,2,2,2,2,1811,1811,2,2,1811,1811,1811,1811,1811,1811,2,846,2,2,846,846,1824,2,2,2,2,1811,1811,1824,1824,1824,1824,1824,1824,1824,1811,1811,2,2,2,2,965,1811,1811,1824,1811,1811,1824,1824,1811,846,846,846,1824,1824,1824,846,846,846,1824,1811,1811,1811,1811,1811,1811,1811,1811,1811,846,846,1811,846,1824,1824,1824,1824}, + {3822,544,1206,198,2240,2304,436,470,1554,480,1004,684,684,1447,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2641,2641,2641,2641,2641,2641,2,2641,2641,2641,2641,2641,2641,2641,2,2641,2641,2,2641,2,2,2641,2641,2,2641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2641,2641,2641,2,2,2641,2641,2,2641,2641,2,2,2,2,2,2,2,2,2,2,2,2,2641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2065,2065,2065,2065,2065,2065,2065,2065,2065,2065,2065,2065,2065,2,2,2,337,2641,2641,2641,2,2,2641,2641,2641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2641,2641,2641,2641,2641,2641,2,1286,2641,2,2,2,2,2,2,2,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,1286,1286,1286,1286,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641,2641}, + {3037,2253,481,1560,1445,662,1851,646,1118,483,1026,3500,1610,1020,1569,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2835,2835,2835,2835,2835,2,2,2795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2795,2835,2795,2795,2,2795,2,2,2,2,2,2,2795,2795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2795,2795,2,2795,2,2,2,2,2,2795,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3713,1290,2595,2244,1373,567,1413,2920,2171,2125,1438,1438,1521,325,195,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1197,1197,2,1197,2,947,2,947,1197,1197,2,1197,1197,1197,2,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,2,2,1197,1197,1197,1197,1197,1197,2,2,1197,2,1197,2,1197,1197,1197,1197,1197,1197,947,947,947,947,2,2,2,1197,1197,1197,1197,2,2,2,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,2,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197,1197}, + {3817,3054,2707,854,1986,902,1940,712,1172,1792,725,1060,1906,1173,1173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2783,2783,2,2,2,2,2913,2,2,2,2,2783,2913,2783,2,2913,2913,2,2783,2783,2,2,2,2783,2783,2783,2783,2913,2783,2913,2913,2913,2913,2913,2913,2913,2783,2783,2783,2783,2783,2783,2,2,2783,2783,2,2,2783,2913,2783,2783,2783,2783,2783,1648,1648,1648,1648,1648,1648,1648,2913,2783,3834,2783,2783,2783,2783,2783,2783,3834,3834,3834,3834,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2913,2913,2783,2,2,1440,1440,1440,2,2,2,2,2,2,3834,2,3834,3834,3834,2913,2913,2913,2,2783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2783,2783,2,2,2,2,2,2913,2913,2913,2913,2913,2,2,2,2,2783,2783,2,2,2,2783,2783,2783,2783,2783,2,2783,2783,2783,3834,3834,2783,2783,2783,2783,2783,2783,2783,2,2783,2783,2783,2783,2,2,2,2783,2,2783,2783,2783,2,2,2,2783,2783,2783,2783,2783,2,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2783,2,2783,2783,2783,2,2}, + {3850,1354,2055,1817,836,816,1573,1220,2033,1981,675,3143,3056,2729,2603,2,2,2,2,1689,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1210,1210,1210,2,1210,1210,1210,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1210,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1210,2,2,2,1210,2,2,2,2,2,2,2,1210,2,2,2,2,2}, + {2784,1092,1665,1465,4427,67,1038,1041,215,13,1066,1719,239,183,3253,2,2,2,2,2,2386,2386,2386,2,1190,2386,2,1190,1190,2,2,2,1190,1190,1190,1190,2,2,2,1190,1190,2,2386,1190,2386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1710,1190,2,2,2,1190,2,1190,1190,2,1190,2,2,2,2,1190,1190,1190,1190,2,2,2,2,2,1190,1190,2,2,2,2,2,1190,1190,2,2,2,2,2,2,2,2,2,2,2,1190,1190,2,2,2,2,2,2,2,2,1190,1190,1190,2,2,2,2,2,2,2,2,2,2,2,2,1190,1190,1190,1190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1190,1190,1190,1190,1190,1190,1190,2,2,2,1190,2,2,2,789,1190,1190,2,2,2,2,2,1190,1190,2,2,2,1190,1190,1190,2,2,1190,2,2,2,1190,1190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1190,1190,2386,2386,2,2,2,2,2,2386,2386,2386,2386,2386,2,2,2386,2386,2,1710,2,2,1190,1190,2,2,1190,1190,1190}, + {2957,2072,1889,972,2900,2193,2533,150,1468,459,459,982,422,2027,2027,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3071,3016,1170,3432,1426,816,1935,110,787,1891,1338,2533,3141,851,3040,2,2,2,2,2,2,2,2,2,2,2,2,3143,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2312,1890,3591,553,532,2974,1292,4516,4456,875,3883,135,1944,1680,1680,2,2,1533,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1771,2,1771,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1771,2,2,2,1771,1771,2,2,2,2,2,2,1771,1771,1771,1771,1771,1771,1771,2,2,2,2,2,1771,1771,1771,2,2,2,2,2,2,2,2,2,2,2,1771,2,2,2}, + {2827,1081,795,1356,1066,516,2526,25,1481,1481,2438,2438,1230,110,756,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3929,1885,555,1295,141,2892,885,422,4016,43,1671,536,774,1219,1219,2,2,1167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2367,2367,2,2,2367,2367,2,2367,2,2,2,2,2,2,2367,2,2,2,2367,2367,2,2,2367,2367,2,2,2367,2,2,2,2,2367,2,2367,2925,2925,2,2,2,2,2367,2,2,2,2,2,2,2367,2367,2367,2367,2367,2367,2367,2367,2,2367,2367,2367,2367,2,2,2,2,2,2367,2367,2367,2367,2367,2,2,2,2367,2367,2367,2367,2367,2367,2367,2367,2367,2367,2367,2367,2,2,2,2,2,2,2925,2367,2367,2367,2367,2367,2,2,2,2367,2367,2367,2367,2367,2367,2,2,2,2,2925,2925,2925,2925,2925,2925,2925,2925,2925,2367,2367,2367,2367,2367,2367,2367,2907,2907,2367,2367,2367,2,2367,2367,54,2367,2367,2367,2367,2367,2925,2367,2925,2925,2367,2367,2367,2367,2367,2367,2367,2367,2367,2925,2925,2925,2925,2925,2367,2367,2925,2367,2,2367,2367,2367,2367,2367,2367,2,2367,2367,2367,2367,2367,2367,2367,2367,2367,2,2,2367,2367,2367,2367,2367,2367,2367,2367,2907,2907,2907,2,2,2,2367,2367,2,2367,2367,2925,2925,2925,2,2,2,2,2925,2367,2367,2925,2367,2367}, + {3740,2476,4480,2009,1139,3887,1813,1090,587,1480,688,1392,925,3285,2521,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,991,2,214,2,991,991,991,2,2,2,2,2,2,2,2,2,2,2,214,214,214,214,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2419,2,2419,2419,2419,2419,2419,2419,2,2,2,1822,1822,1822,1822,2,2,2419,2419,2,2,2,2,2,2,2,2,2419,1822,2,1822,1822,2,1822,2419,2,2419,2419,2419,2419,2419,214,2,1822,2,2,2,1822,214,2419,2419,2419,2419,2419,2419,2419,2419,2419,2419,1822,2,2,1822,214,214,2,2,2,2419,2419,2419,2,2,2,214,214,991,991,991,991,991,991,991,991,214}, + {3893,2617,1958,2430,111,131,3612,960,2822,1651,3680,1718,3985,3105,3105,2,1407,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,721,721,2,2,2,2,2,2,2,2,2,2,2,721,721,2523,721,721,721,2,2523,721,2,721,721,721,2,721,721,721,721,721,721,721,721,721,721,721,721,721,2523,721,721,2,2,721,2,2,2,721,721,721,721,721,721,721,721,2,2,2,2,2523,2,2,721,721,2,721,721,2,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,2523,2,2,721,721,721,2,2,2,2,2,721,721,721,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,2,721,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2523,2,2,2523,721,721,721,2}, + {4220,2077,1066,4432,821,1617,1025,2112,3111,842,3421,2571,2571,272,272,2,3721,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3663,3663,3663,3663,3663,2,2,3663,3663,2,2509,2,2509,2509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3663,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4281,1769,1413,381,1071,3091,2349,3044,2706,1888,350,1794,4058,521,2799,2,88,2,2,2,2,2,2,760,760,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,760,760,2,2,760,760,760,760,760,760,760,760,760,760,2,2,760,760,760,2,2,760,2,760,760,760,760,760,2,2,2,2,2,2,2,2,2,760,760,760,760,760,760,760,2,767,767,767,803,803,803,760,760,760,2,2,2,2,2,2,760,760,2,803,767,767,767,767,767,2,2,767,767,760,760,760,760,760,760,760,760,3481,3481,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,3481,3481,3481,3481,760,760,760,418,418,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,767,2,2,2,3481,3481,3481,3481,3481,2,2,3481,685,685,760,2,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,767,767,760,3481,3481,767,767,767,767,767,767,767,767,767,767,767,767,767,767,3481,3481,767,767,767,767,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481,3481}, + {3044,903,2580,421,1005,3176,993,1860,1266,764,1719,696,2157,16,537,2,696,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,925,2,2,2,2,2,2,925,925,2,2,2,925,2,2,2,2,925,925,2,2,925,925,925,2,2,2,2274,2274,2274,925,925,925,925,2,925,925,925,2,4465,4465,2,2,2,925,925,2,2,2,925,925,2,2,2,2,2,2,2,2,2,2,2,2,2274,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3793,1510,4182,3018,280,1377,1215,2989,2326,364,1120,2103,2465,1295,1295,3252,3252,2,2,2,2,2027,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2027,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3778,2242,2108,1380,1643,2739,1533,1053,59,2127,778,2679,2679,2679,1324,1330,296,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1729,1729,2,2,2,2,1729,1729,1729,1729,1729,1729,1729,2,1729,1729,1729,2,2,1729,1729,1729,1729,1729,2,2,2,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,2,2,1729,1729,1729,1729,1729,1729,2406,2406,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,2908,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,1729,2,2,2,2,2,2,2,2,2,2,2,1729,1729,1729,2,2,2,1729,2,2,2,2,2,2,1729,1729,1729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3118,728,620,1332,409,4537,668,2938,443,738,1562,616,642,423,811,811,1590,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2849,3597,1986,3387,3239,1197,4305,2790,639,2883,164,3397,2905,2849,4119,3660,2359,3485,3485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3311,2,2,2,2,2,2,2,3311,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3311,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3311,2,2,3229,2,2,3229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3229,2,2,2,3229,3229,3311,3229,2,2,3229,2,2,2,2,3229,2,2,2,3229,3229,2,2,2,2,3229,3229,2,2,3229,3311,2,2,2,3229,3311,3311,3311,3229,3229,3229,3229,3229,3229,3311,3311,3311,3311,3229,3229,3229,3311,3311,3311,3229,2,2,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3311,3311,3229,3229,3229,3229,3229,3229,3229,3311,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229,3229}, + {4279,1202,2743,1390,117,400,1525,1642,1013,3177,445,1524,227,3847,3161,1319,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,889,889,2,2,2,889,631,631,631,889,889,889,889,889,889,889,2,2,2,2,2,2,2,2,2,889,889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2889,2748,1621,1037,2858,797,3236,4003,1111,562,1801,465,465,930,1644,934,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2083,2,2,3267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2083,2083,2083,2,2,2,2083,2083,2083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2,2,2,2,2083,2083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2083,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3967,1825,792,1863,2341,632,214,1720,274,387,2240,382,1508,571,705,776,3045,3045,2,2,2,2,2,2,2,2,2,2,2,2,2,4677,2,4677,2,2,2,2,2,2,2,2,2,3054,3054,3054,2,2,3054,3054,2,2,2,2,2,2,2,2,2,3054,2,2,2,3054,2,2,3054,3054,2,2,2,2,2,2,3054,3054,3054,2,2,2,2,2,2,72,3054,72,2,3054,2,2,2,3054,3054,3054,3054,3054,3054,3054,3054,3054,3054,3054,3054,3054,2,2,2,3054,3054,3054,3054,3054,3054,3054,3964,3964,3964,2,2,2,2,2,3054,2,2,2,2,2,2,2,3054,3054,3054,2,2,2,2,72,72,72,72,72,72,2,3964,3964,2,2,4677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3964,2,3964,3964,3964,3964,3964,3964,3964,3964,2,3964,3964,3964,2,2,3054,72,4677}, + {3086,2303,2196,3389,1223,1070,3437,4307,690,919,2013,2640,954,954,816,2209,2,680,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,305,305,305,305,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,680,680,680,2,680,680,2,680,680,680,680,680,680,680,680,680,680,680,680,2,680,680,2,680,680,680,680,2,2,2,2,2,680,680,2,2,2,2,680,680,680,680,680,680,680}, + {3979,2529,771,1317,685,1603,2910,3278,539,2573,728,501,1044,1002,2004,1002,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3185,3185,2,2,2,2,2,2,2,2,2,2,2,2,2,3185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3185,3185,3185,3185,3185,2,2,3185,3185,3185,3185,2,2,2,2,3185,3185,3185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3185,3185,2,2,2,2,2,2,3185,2,2,2,2,3185,2,2,2,2,3185,2,2,3185,3185,3185,2,3185,3185,3185,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4309,2339,547,854,1172,522,1792,473,795,2158,981,1685,1685,1685,1685,1685,1588,1588,1588,2,2,2,2,2,2,2,1808,1808,2,2,2,1808,2,2,2,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,2,1808,1808,1808,1808,1808,1808,2,1808,2,1808,1808,2,2,2,216,2,2,1808,1808,1808,1808,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1808,1808,2,2,2,502,502,1808,2,2,2,2,216,2,2,216,216,216,216,1808,2,2,2,1808,2,2,1808,2,2,2,1808,1808,2,2,2,1808,1808,1808,216,1808,1808,1808,1808,2,2,1808,1808,1808,216,1808,1808,1808,2,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,1808,2,1808,2,1808,2,2,2,1808,2,1808,1808,1808,2,1808,2,2,2,2,2,2,2,1808,1808,1808,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,216,2}, + {2914,2810,976,986,1009,170,337,4358,2455,3232,648,648,1708,161,161,1205,2,2,2,2,2,2,2,2,2,2,2963,2,2,2963,2963,2963,2,2,2,2,2,2,2,2787,2787,2963,2787,2,2787,2787,2,2,2,2,2,2,2787,2787,2787,2,2,2787,2963,2,2,2,2,2,2,2787,2787,2,2,2,2,2,2,2,2787,2787,2,2787,2,2,2,2,2,2,2,2,2,2787,2787,2,2,2787,2,2,2,2,2,2,2,2,2787,2787,2,2,2,2,2,2787,2787,2787,2787,2787,2787,2787,2787,2787,2,2,2787,2787,2787,2787,2787,2787,2787,2787,2787,2787,2787,2787,2,2787,2787,2787,2787,2,2787,2,2787,2,2787,2787,2,2,2,2,2,2,2,2787,2787,2,2787,2787,2787,2787,2787,2,2,2,2,2,2787,2787,2787,2787,2787,2787,1220,1220,1220,2787,2787,2787,2787,2787,2787,2787,2026,2026,1220,2,2,2,2787,2787,1220,2787,1220,1220,1220,1220,1220,1220,2787,2787,2787,2,1220,1220,2787,2787,2787,2787,2787,2787,2787,2787,2787,2787,1220,2787,2026,2026,1220,2026,2026,2026,2026,2787,2963,2963,4161,2787,2787,2787,2787,1220,1220,1220,2787,2787,2787,2787,2787,1220,1220,1220,1220,1220,1220,1220,4161,1220,2512,2512,2787,2787,2787,1220,2787,1220,1220,1220,1220,1220}, + {2919,2029,2784,1475,3857,413,3489,327,439,1429,119,930,198,222,3409,3392,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3836,1091,2137,3008,2859,1937,2540,2048,2657,1786,60,4519,2935,3585,1117,1117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2931,1188,4468,518,1131,335,958,2312,4013,1466,1026,824,2024,2024,3130,869,2,2,2,2,2,2,1540,909,909,1277,2,2,909,909,909,909,909,845,1277,909,909,1277,1277,2,1277,1277,1277,2,2,433,2,2,2,2,2,2,909,909,909,909,909,2,2,909,2,909,2,2,909,909,2,2,2,2,2,2,2,433,2,2,2,2,2,433,2,2,2,909,2,2,909,909,2,2,2,1277,1277,2,1277,1277,1277,1277,2,1277,1277,1277,2,1277,1277,2,2,1277,1277,1277,2,2,2,1277,1277,1277,1277,1277,1277,1277,2,2,2,2,909,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,909,1277,4235,4235,4235,4235,1277,1277,1277,1277,1277,1277,2,1277,1277,2,2,2,2,1277,1277,1277,2,1277,1277,2,2,2,2,2,2,2,2,2,1277,2,2,2,1277,2,2,2,2,2,1277,1277,2,909,909,1277,2,2,2,2,1277,1277,2,1277,1277,2,2,2,2,1277,1277,1277,1277,2,2,2,2,909,909,909,909,909,909,909,909,909,909,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4061,2448,1182,361,2559,331,117,1934,2666,2443,972,2592,644,1577,1283,1283,2,2,2360,2360,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4003,2758,3675,2506,2313,547,1993,1923,3153,998,1718,3236,3236,4393,4393,4393,2,2,2,2,2029,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1955,2,2,2,1955,1955,1955,1955,2,1955,1955,2,2,2029,2029,2,2,1534,2,2,2029,2029,1955,2,2,2,2,1955,1955,2029,1955,1955,1955,1955,2,2,2029,2029,2029,2,2,2029,1955,1955,2,1955,1955,2029,2029,2029,2029,2029,1955,2029,2029,2029,2029,2029,1955,2,2,1955,1955,1955,1955,1955,1955,1955,2029,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,1955,2029,1955,1955,1955,1955,2029,1955,2029,2029,2029,2029,2029,2029,2029,2029,2029,2,2,2029,2029,2029,2029,2029,2029,2029,2029,2029,2029,2029,2029,2029,1955,2029,2,2,2,2,2,2,2,2029,2029,2,2,2,2,2,2,2,2029,2,2,2,2,2,2,2029,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3865,1665,1709,3099,1335,924,2281,2239,244,2497,24,2006,1364,1364,1071,1675,2,2,2,2,2,2,2,2,2,2,2,2,2,722,722,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1264,1264,1264,1264,1264,1264,1264,1264,1264,2790,2790,2,2,2,2,2,2,722,722,722,722,722,722,722,722,2790,2790,2790,722,722,722,722,2,722,722,2,722,2,2,722,722,2,2,2,2,2,2,2,722,722,38,722,722,722,722,722,722,722,722,722,722,2365,722,722,722,2790,2790,722,722,2,722,2,2,2,722,722,2,2,1526,1526,1526,2,2,2,2790,2790,2,722,722,722,722,722,722,722,722,722,2,2,2,2,1264,2,2,2,2,2,1526,1526,2,2,1526,1526,2,2,2,2790,2,2,2,2790,2790,2790,2790,2790,2790,2790,2790,2,2,2,2,2,722,722,2,2790,2,2,2,2790,2790,2790,2,2,2,2,2,2,2,2,722,2,2,2,2790,2790,2,2,2,2,2790,2790,722,2,1526,1526,1526,1526,722,722,2,2,722,722,722,2,2,2,722,722,722,722,722,722,722,722,2,2,2,2,2,2,2,2,2,2,2}, + {3117,2133,1835,2144,758,3030,2342,609,1867,702,1924,3379,607,2939,1240,473,3178,3178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3178,3178,3178,2,2,3178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2606,2606,2606,2606,2606,2606,2606,2,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,1009,2,2606,2606,2606,2606,3178,2606,2606,2606,2606,2606,2606,2606,2606,2606,1009,1009,1009,1009,2606,2606,1488,2,2,2606,2606,2606,2606,2606,2273,2606,2606,2606,2606,3178,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,1009,1009,2606,1009,1009,2606,1009,2606,1009,2606,2606,2606,2606,1009,2606,2606,1009,1009,1009,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,2606,1009,1009,2606,2606,2606,2606,2606,2606,2606}, + {2960,1023,3429,2869,274,476,2469,2574,694,2021,3344,3052,4080,2918,2176,101,2741,2741,2,2,2,2,1056,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4029,3266,4148,1744,5028,220,1274,3538,1038,2060,102,803,2841,3030,2346,283,805,805,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2318,2318,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3926,1121,661,2102,238,1768,1074,632,2422,1627,1627,1734,2298,574,2629,4123,2628,2,2,843,843,843,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1988,2,2,2,2,1988,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3927,2090,603,1313,3378,133,915,200,2193,486,2989,4632,2383,2383,2383,944,944,2,2,2341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2341,2341,2,2,2,2,2,2,2,2,2,2,319,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,319,319,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2341,2341,2,2,2,2,2,2,2,2,2,2,2,319,319,2,2,2,2,2341,2341,2,2,2,2,2,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2,2,2341,2341,319,319,319,319,319,319,319,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341,2341}, + {3151,2448,2450,553,500,1174,1063,1150,1782,746,1624,5060,419,2,852,3115,330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2847,2,2847,2847,2,2,2,2,2,2}, + {4124,4475,2691,816,164,1400,2574,2093,2607,2418,3275,411,2807,2436,2436,1871,1300,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3507,3507,2,3507,3507,3507,3507,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4063,771,1807,4122,831,1529,1979,1472,481,581,1011,123,2317,2,300,40,40,1670,1670,1670,1670,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,407,2,2,2,2,2,2,407,407,407,407,2,2,2,2,2,2,2,2,2,2,2,2,2,2,407,407,2,2,2,2,2,407,407,407,407,2,2,407,407,407,407,2,407,407,407,407,407,2,2,2,2,407,407,2,407,2,407,2,407,2,407,407,407,2,407,407,2,2,407,407,407,407,407,407,2,407,407,407,407,407,407,2,2,2,407}, + {2947,3808,1269,2495,3122,2381,1435,1247,288,953,5041,461,461,2,932,932,579,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1033,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,466,2,2,2,2,2,2,2,2,2,466,2,2,2,2,2,2,2,2,2}, + {2882,1818,3965,375,1684,2011,2654,4758,1735,4774,1834,912,912,2,167,2879,2879,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3330,3330,3330,3330,3330,3330,3330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,659,391,2,2,2,2,2,2,2,659,659,659,659,659,2,2,2}, + {4103,1234,2410,2882,3267,2090,1213,615,1821,1645,1225,1542,3789,2,1578,1990,2840,1209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,885,1177,1177,1177,1177,2,2,2,2,2,2,2,2,2,2,2,2,2,885,2,885,2,2,2,2,2,1177,1177,885,2,2,2,885,885,2,2,1177,1177,1177,885,2,2,2,2,2,2,2,2,2,1177,1177,2,2,2,1177,2,2,2,2,2,2,2,2,885,885,1177,1177,1177,1177,1177,2,2,2,1177,1177,1177,1177,885,885,885,885,885,885,2,2,885,885,885,885,885,885,885,885,885,1177,1177,1177,1177,2,1177,1177,1177,1177,1177,1177,1177,1177,2,1177,885,885,885,2,1177,1177,1177,2,1177,1177,1177,2,2,2,2,2,2,2,2,2,2,1177,2,2,2,2,2,2,2,2,1177,1177,2,2,2,2,885,885,2,2,885,1177,1177,2,2,1177,1177,1177,1177,1177,2,2,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,814,814,1177,1177,1177,1177,1177,814,814,814,885,1177,1177,885,885}, + {2977,2211,1109,1245,4545,508,1234,1697,2354,3065,234,3101,3973,2,2,1301,1301,2405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2405,2405,2405,2405,2,2,2,2405,2405,2,2,2405,2,2405,1040,2,2,1040,2405,2,2,2,2405,2405,2405,2,2405,2405,2405,2405,2,2,2,2,2405,2405,2405,2405,2405,2,2405,2405,2,2,2405,2405,2405,2405,2405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2,2405,2405,2,2405,2405,2405,2405,2405,2405,2405,2405,2405,2,2,2,2,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2,2,2405,2405,2405,2,2,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,606,606,606,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2405,2,2,2405}, + {3957,2654,1394,1232,3151,735,557,2919,4475,134,3155,373,357,2,2369,2369,2369,2369,2369,2369,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3086,3086,2,3086,3086,2,3086,3086,2,2,2,2,2,2,2,3086,3086,2,2,3086,2,2,2,2,2,2,2,3086,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4525,1142,664,807,2035,1848,4105,1969,972,4246,1353,1405,1405,2,2,3387,2631,2631,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3149,2305,1769,836,2421,2534,3437,4108,1011,1939,2073,2421,3867,2,2,4271,4271,4271,1976,1976,2,1976,2,2,2,2,2,2,2,2,2,2,1976,1976,1976,1976,1976,2,1976,1976,1976,2,2,1976,1976,1976,1976,1976,1976,1976,1976,1976,1976,1883,1883,1883,1883,1883,1883,1883,1883,1883,3215,2,2,1976,1976,1976,1883,1883,2,2,2,2,2,3215,1883,1883,1883,1883,1883,1883,1883,1883,1883,3215,3215,3215,1883,2,1883,1976,1976,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,1883,3215,3215,3215,1883,3215,3215,3215,3215,3215,2,2,3215,3215,3215,3215,3215,3215,1976,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,1883,1976,1883,3215,2,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,3215,1883,1883,2,2,2,2,2,2,1883,1883,2,878,878,878,878,878,878,878,878,878,878,878,2,2,1883,1883,2,1883,2,1883,1976,1976,2,2,2,2,2,2,1976,1976,2,1976,2,2,2,2,2,2,2,2,2,1976,1976,1976,1976,2,2,2,2,2,2,2,2,1883,2,2,1976,1976,1976,1976,1976,1976,2,2,1883,1883,2,1976,1976,1976}, + {3985,640,1503,3318,1146,365,2600,1834,2010,1058,335,4213,242,2,2,499,499,499,499,499,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4145,1636,3109,710,2245,2940,3513,2900,2396,1887,2137,3397,1126,2,2,2,3033,3071,3071,2,2,2,2,2,2,2,3071,3071,3071,3071,3071,3071,3071,3071,2,2,2,2,3071,3071,3071,3071,3071,3071,3071,3071,3071,3071,3071,3071,3071,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,542,542,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,542,542}, + {4000,1861,1086,427,245,1445,4145,1532,2038,2188,326,3180,848,2,2,2,4541,2270,3529,1085,2907,2,2,2,2,2,2,2,2907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2907,2,2,2907,2907,2907,2907,2907,2,2907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2907,2907,2907,2,2907,2,2,2907,2,2,2,2,2,2,2,2,2,2907,2907,2907,2,2,2,2,2,2,2,2,2,2,2,2907,2907,2,2,2,2,2,179,179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2907,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2907,2,2,2,2,2907,2907,2907,2907,2,2907,2907,2907,179,179,179,179,179,179,2,2907,2907,2907,2,2,2,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2907,2,2,2907,2907,2907,2,2907,2907,2,2907,2907,2907,2907,2907,2907,2907,2907}, + {4141,2797,3009,4138,573,2805,2158,1116,3330,1879,332,2489,2489,2,2,2,2,1779,719,3236,2,3236,3236,2,2,2,3236,2,3236,3236,3236,3236,3236,2,2,2,2,2,2,2,2,3236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3236,3236,2,2,3236,3236,3236,3236,2,2,3236,3236,3236,3236,2,2,3236,3236,3236,3236,3236,3236,3236,3236,2,3236,2,2,3236,2,3236,2,3236,2,2,3236,2,2,2,2,3236,3236,3236,2,3236,2,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236,3236}, + {4029,1132,524,2837,802,961,627,892,3173,809,837,1290,4920,2,2,2,2,2,1419,1419,1419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3249,2480,4274,713,4323,5144,3733,3948,1815,2310,2943,4193,4193,2,2,2,2,2,3263,3263,3263,2,2,2,2,1022,1022,3263,3263,3263,3263,3263,3263,3263,2,3458,2,2,2,2,2,2,2,3458,3263,3263,3263,495,3458,2,2,2,2,2,2,2,2,2788,2788,2788,2788,2881,2881,2,3263,2881,2,3458,3458,3263,3263,3263,3263,3263,2,3263,2,2,3263,3263,495,2,2,3263,3263,3263,3263,2,2,3263,3263,3458,3458,3458,2,2,2,2,2,2,2,2,2,2,3263,3263,3263,3263,3263,3263,3263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3263,3263,3263,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2096,2096,3263,3263,3263,3263,3263,3263,1022,2,495,495,495,2,1022,1022,1022,1022,3263,3263,3263,3263,3263,3263,2788,2,1022,3263,3263,2788,3263,3263,1022,3263,3263,3263,2,2,2,1022,3263,3263,3263,3263,3263,2881,2881,1022,3263,3263,2788,2788,1022,1022,1022,3263,3263,3263,3263,3458,3263,3263,495,495,495,3263,2,3263,3263,3263,3263,3263}, + {4048,2412,1756,924,1633,446,934,2031,2387,178,220,1936,1202,2,2,2,1937,2450,2450,2450,2,2,1675,2450,2,2,2,1675,1675,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1173,1173,1173,2,2,2,2,2,2,2,2,2,525,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,525,1173,1173,1173,1173,2,2,2,2,2,1173,1173,2,525,525,525,525,525,2,2,2,525,525,525,2,2,2,2,2,2,525,2,525,525,525,525,2,2,2,2,2,2,2,2,1173,1173,1173,2,2,2,2,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,525,525,2,525,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1173,1173,1173,2,525,525,525,525,525,525,525,525,525,525,525,525}, + {2963,2817,543,1151,326,2434,890,1958,104,104,3763,88,1444,2,2,2,2711,4019,4019,4019,4019,4019,2,2,2,2298,2298,2,2,2,2,2,2,2,2,2,2,2,2,2298,2,2,2,2,2298,2,2,2298,2298,2,2,2,2,2,2,2,2,2,2298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2298,2,2,2,2,2,2,2,2,2,2298,2,2,2,2,2,2,2,2,2,2,2,2}, + {4058,2056,5016,3532,966,3023,3095,1597,161,293,3349,530,2470,2,2,2,1261,775,1061,2,1756,2,2,2,2,2,2,2,2,2,1756,1756,1756,885,2,1756,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1756,1756,1756,1756,1756,1756,1756,1756,1756,2,1756,1756,2,1756,1756,1756,2,2,2,2,1756,1756,1756,1756,1756,1756,1756,1756,2,2,1756,1756,1756,1756,1756,1756,1756,1756,1756,1756,1756,1756,1756,1756,2,1756,1756,1756,2,2,2,2,2,1756,2,2,1756,1756,1756,2,1756,2,2,2,2,2,2,2,2,2,2,1756,2,2,2,2,2,2,2,2,1756,2,1756,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4253,3758,1702,2698,310,2361,929,642,3072,1046,573,5000,5000,2,2,2,886,760,364,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1179,1179,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,246,246,246,246,246,246,246,246,2,2,246,246,246,246,2,2,2,2,246,246,2,246,2,2,2,2,2,246,2,246,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3231,3353,4269,4866,3076,2434,761,208,3119,1209,1773,3363,3022,2,2,2597,1903,1495,2,2,689,2,2,560,560,560,560,2,2,2,560,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,105,2,2,2,2,2,2,2,2,2,105,105,105,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4221,724,426,529,1809,4609,1953,191,1416,668,2635,494,494,2,2,3247,3247,1535,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,673,673,2,2,2,2,2,2,2,673,673,673,673,2,2,2,673,2,2,2,2,2,673,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,673,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,673,673,2,673,673,2,2,2,2,2,2,2,2,2,673,673,673,673,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,673,673,673,673,673,673,673,673,2,673,673,673,673,673,673,673,673,673,673,673,2,673,673,673,2,673,673,673,673,673,2,2,2,673,673,2,2,2,2,673,2,2,673,2,673,2,2,2,2,2,673,673,673,2,2,673,673,2}, + {4093,3585,818,3430,1179,4367,1162,209,3785,2224,3241,1180,3875,2,2,801,2409,801,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,522,522,522,522,2,2,2,2,2,2,2,2,2,2,2,2,2,522,522,2,2,2,2,2,522,522,522,2,522,522,522,522,522,2,2,2,2,2,2,2,2,2,2,2,2,522,522,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4235,3546,3425,134,1242,949,598,3132,397,1314,2020,2838,1245,2,2,3559,3559,3559,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3630,3630,2,2,3630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3630,3630,2,2,2,2,3630,3630,3630,3630,3630,3630,3630,3630,3630,3630,651,3630,3630,3630,3630,3630,3630,3630,3153,3153,3153,3630,3630,651,651,651,651,651,3153,3153,3153,3630,3630,2,3153,3153,3153,2,2,2,2,3630,651,651,651,2,651,2,2,2,651,651,3630,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3630,3630,3630,3630,3630,2,2,2,2,2,2,2,2,2,3630,2,2,2,3153,3153,2,2,2,651,651,651,2,3153,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2587,2176,3080,3000,1886,3313,4523,130,474,232,242,4700,3388,2,75,2220,2481,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3306,3306,3306,3306,3306,3306,3306,2947,2947,2947,2,3306,2,2947,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2947,2039,2947,2947,2,2947,2947,2947,2,2947,2947,2947,2,2947,2,2,2,2,2,2,2,2947,2947,2,2,2039,2039,2039,2039,2039,2947,2947,2,2,2947,2947,2,2,2,3306,2,2,3306,3306,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2947,2947,2947,2947,2947,2947,2,401,401,401,2,401,401,3581,2,209,209,648,648,2,2,2,2,2,2,3581,2,2,3581,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4303,2053,3511,2890,1223,100,4246,2124,1137,3974,1840,1652,5119,696,435,435,435,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,435,435,435,435,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,435,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3108,2288,1189,1259,985,486,953,4524,3134,3684,883,2589,5237,2,780,780,780,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4106,703,1448,1245,2892,2305,490,4924,797,1130,140,1298,3585,2,3150,3150,3150,2,2,3383,3383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3383,3383,3383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3383,3383,2,2,3383,2,2,2,2,2,2,2,2,2,443,443,3383,3383,3383,3383,3383,3383,3383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,443,443,443,2,443,443,443,443,2,2,2,2,2,443,2,2,2,2,2,2,2,3383,2,2,2,2,2,2,2,2,2,443,2,443,443,443,2,2,2,443,443,2,2,443,443,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,443,2,2,2,2,2,2,2,2,2,2,2}, + {4251,1365,1222,1793,1149,2572,5022,95,904,732,94,2017,2845,2845,2845,3613,1105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4259,2030,795,440,2164,4790,1308,1880,1768,150,161,3148,1199,2099,972,753,753,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,889,889,2,2,2,2,2,2,2,2,2,2,2,2,889,2,2,2,2,2,2,889,2,2,2,889,889,889,2,2,2,2,2,889,889,889,889,889,889,889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,889,2,2,2,2,2,2,120,120,889,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,120,2,889,889,889,889,889,2,2,2,120,120,120,889,889,889,2,889,889}, + {3094,2441,2347,1668,2733,2457,1097,3305,498,3614,1525,3660,1524,994,994,497,497,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,480,480,2,2,2,2,2,2,480,480,480,480,480,2,2,480,480,2,2,2,2,5227,5227,2,2,2,2,2,480,2,2,2,2,2,2,2,2,480,2,480,480,480,480,2,2,2,2,2,2,2,480,480,480,480,480,480,480,480,480,480,480,832,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,480,480,2,2,2,2,2,2,2,2,480,480,2,480,2,2,2,2,2}, + {4131,3529,3105,2584,2938,232,408,640,1759,3125,1292,3851,3652,1129,1792,1792,3881,3881,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,75,75,1018,2,75,75,75,75,75,75,75,75,75,75,75,75,2,2,2,2,2,2,2,75,75,75,2,2,2,2,2,2,2,2,2,2,2,2,1678,2,2,1678,2,2,2,2,75,75,75,75,75,75,75,75,75,75,75,75,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,2,2,486,2,2,3889,3889,3889,3889,3889,3889,1678,486,3889,3889,3889,3889,3889,3889,75,75,2,2,2,2,2,2,2,2,2,2,2,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,1678,2,2,1678,2,2,2,2,1678,2,2,2,2,2,2,1678,1678,1678,1678,1678,1678,2,1678,2,1678,1678,1678,1678,2,2,2,1678,2,2,2,2,2,2,1678,486,486,486,486,486,486,486,486,486,486,1678,2,486,2,2,2,3889,1678,1678,1678,2,2,2,1678,1678,1678,2,2,3889,2,2,2,2,2}, + {4307,3017,4154,1460,3163,489,751,4514,703,3418,3995,3815,1943,428,428,428,2,2,2,2,2,3410,3410,3410,2,2,2,2,2,2,2,2,3410,3410,2,3410,3410,2,249,249,3410,3410,3410,249,3410,2,2,3410,3410,2,3410,3410,3410,3410,3410,2,3410,3410,2,3410,3410,3410,2,249,2,2,2,3410,3410,3410,3410,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3410,2,2,3410,2,2,3410,3410,3410,3410,3410,3410,2,2,3410,3410,3410,2,3410,3410,3410,3410,3410,3410,3410,2,2,3410,3410,249,249,249,249,249,249,3410,3410,3410,2,2,3410,2,3410,3410,2,3410,3410,3410,3410,3410,3410,3410,3410,3410,3410,3410,2,3410,3410,3410,3410,3410,2,2,2,3410,2,2,3410,3410,3410,3410,2,2,3410,2,2,2,3410,3410,3410,3410,249,2,2,2,2,2,249,249,249,2,2,2,2,2,2,249,249,2,2,2,2,2,249,2}, + {3110,1665,2544,745,1280,2888,2889,3423,2544,693,1179,355,2346,3437,3640,1635,1635,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4368,2924,3970,4785,215,1847,715,3260,2119,2101,152,2149,209,2515,1296,2302,2302,2302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2302,2302,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4646,2149,329,3876,2159,1008,1579,89,1344,4359,774,2390,5589,2133,2373,1053,2,2849,2849,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1101,1101,2,2,2,2,2,2,2,2,2,2,1471,2,1471,2,2,2,2,2,2,2,821,1101,2,1101,1101,2,1101,1101,1101,1101,1101,1101,1101,1101,1101,2,1101,1101,2,2,2,1101,1101,1101,1101,1101,1101,919,2,2,2,2,1101,1101,1101,1101,914,2,1101,1101,2,2,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,4465,1101,1101,1101,2,1101,1101,1101,1101,2,1101,1101,1101,914,914,914,2,2,914,2,2,1101,1101,914,914,2,914,914,914,914,914,914,914,914,2,914,914,1101,2,1101,1101,1101,1101,914,2,2,2,2,914,1471,1471,1471,2,2,914,914,914,914,914,914,914,914,914,914,2,914,914,914,1101,1101,1101,1101,1101,914,914,2,914,914,914,2,2,2,821,1101,1101,2,2,2960,524,524,1150,2700,512,512,512,512,914,914,3471,3471,3471,3471,3471,3471,3471,914,1101}, + {3359,2319,3814,767,2963,2993,2755,949,2863,2723,673,1738,3078,1628,3602,3946,511,511,2,2,2,2,2,2,2,2,2,2,2,2,2,2361,2,2,2,2,2361,2,2,2,2,2,2361,2361,2361,2361,2361,2361,2,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2361,2,2,2,2,2,2,2,2,2,2,2,2,2,2361,2361,2361,2361,2361,2361,2361,2361,2,2,2,2,2361,2361,2,2,2361,2,2361,2361,2361,2361,2,2361,2361,2361,2361,2361,2361,2361,2,2361,2,2,2,2,2361,2361,2361,2361,2361,2361,2361,2361,2,2,2,2,2,2,2361,2361,2361,2361,2361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2361,2361,2361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4174,3328,616,4311,300,1370,2404,1307,3341,248,2506,1474,840,5080,1877,426,2,2,2,2,2,2,2,2641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1773,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1773,1773,1773,2,2,1773,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1773,1773,1773,1773,1773,1773,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1773,1773,2,2,2,2,2,2,2,2,1773,1773,2,2,2,1773,1773,1773,2,1773,1773,1773,1773,1773,1773,1773,1773,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1773,2,2,2,2,2,2}, + {4327,4495,472,2331,2366,701,357,1676,1766,2775,935,659,622,496,2937,2937,2,2,2,2,2760,1731,1731,2,1731,2,2,2,1731,1731,2,2,2,2,539,539,539,1731,1731,2,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,539,2,2,1731,1731,1731,1731,1731,1731,1731,373,2,2,373,373,373,373,373,2,2,373,2,2,1731,1731,1731,2,2,2,2,2,1731,1731,1731,1731,373,373,373,373,373,373,373,373,373,539,539,373,373,1805,1805,1805,1805,1805,1731,1731,1731,1731,1731,2,1731,1731,1731,1731,1805,1805,1805,539,539,1731,1731,1731,1731,1731,2,2,2,2,1731,1731,1731,1731,1731,1731,1731,1731,1731,2378,1805,1805,2378,2378,539,2378,2378,2378,1805,1805,2378,2378,2378,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1731,1805,1805,1805,1805,1805,1805,1093,1093,1093,1093,1093,1093,1093,1805,1805,1805,1805,1805,1805,1805,1093,1093,1093,1093,2378,2378,2378,2378,2378,2378,2378,2378,3487,2378,1805,1805,1805,1805,1805,2378,2378,1805,1805,1805,1805,1805,1093,3586,3586,546,1093,1093,1731,1093,1093,1093,2378,2378,2378,2378,2378,2378,2378,1093,373,373,1093,1731,2378,2378,2378,2378,2378,2378,373,1731,1731,2378,2378,373,373,373,373}, + {4321,1288,1049,620,262,2606,1427,2019,566,683,752,447,287,1167,5054,5054,2,2,2,1130,1130,2,2,2,2,2,2,2,2,2,2,2,2,2,2899,2899,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,864,864,864,864,864,864,2,2,2,2,864,864,864,2899,2,2,864,864,864,864,864,864,864,864,2,2899,2899,864,2899,864,864,864,864,864,864,864,864,864,864,864,864,2,864,2,864,864,2899,864,2,2899,2899,2899,864,864,2899,2899,2899,864,864,2899,2899,2,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,2899,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,2,864,864,864,2,859,859,859,859,859,864,864,864,864,864,864,864,864,2,864,864,864,864,864,864,864,864,864,2,864,864,864,864,864,2899,2899,2899,2899,864,864,864,864,864,2899,2,864,864,864,864,864,2}, + {4331,680,703,2747,700,4787,818,875,1521,1758,1691,2925,2925,2925,2130,1134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4444,2743,3035,2582,2170,2917,289,2906,375,810,3764,2960,79,151,3561,3561,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1929,2,2,2,2,2,1929,1929,1929,2,2,2,2,1929,2,2,2,2,2,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,4693,4693,4693,2,1929,1929,1929,1929,1929,2,2,1929,1929,1929,2,2,1929,1929,1929,2,2,2,2,2,2,2,2,2,1929,1929,1929,2,2,2,2,2,1929,2,2,2,2,2,2,1929,1929,1929,1929,1929,2,1929,1929,1929,2,1929,1929,1929,2,1929,1929,1929,1929,1929,1929,2,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,1929,2,1929,1929,2,2,2,2,1929,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1929,2,2,2,2,2,2,2,2,1929,1929,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4223,2572,1394,1562,4430,2932,888,1376,1437,1082,2056,1082,1301,3364,204,3364,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4276,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4744,3698,1767,2534,1226,3419,1776,2628,4687,660,711,4962,1340,4962,4962,1104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,597,597,597,2,2,2,2,2,2,2,2,2,2,2,2633,597,2,2,597,2,2,2,2,2,2,2,2633,2,2,2,2,2633,2,2,2633,2633,2633,2,2,2633,2,2,2,2,2,2,2633,2,2,2,2,2,2,2,2,2,2633,2633,2633,2633,2633,2633,597,597,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,597,597,597,597,597,597,2633,2633,597,597,597,597,2633,597,2633,597,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,597,2633,2633,597,2633,2633,2633,2633,597,2633,2633,2633,2633,2633,2633,2633,2633,2633,597,597,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,597,597,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2633,2}, + {4771,2156,4334,2205,2377,2852,848,2798,3197,1382,2039,2222,1005,1005,1005,1005,2,3270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,917,917,2,2,2,2,2,2,2,2,2,2,1588,2,2,2,917,917,2,2,917,2,2,2,917,2,2,2,2,2,917,2,2,2,2,2,2,2,2,2,917,917,917,917,917,917,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,917,2,2,2,2,2,2,2,2,2,2,917,917,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,917,917,2,2,2,2,2,2,917,917,917,2,2,917,2,2,2,2,917,917,2,917,917,2,2,2,917,917,917,917,2,917,2,2,917,917,2,917,2,2,2,2,2,2,2,917,917,917,2,2,917,917,917,917,2,2,2,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,2,2,2176,2176,917,917,917,917,917,2176,917,1588,2,2,917,2,2,2,917,1588}, + {3363,1627,2360,4953,3960,1918,3364,1295,1539,2678,680,591,4068,16,738,738,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1204,1913,2,1913,1913,1913,2,2,2,1913,1913,2,2,2,2,1913,1913,2,2,1913,1913,1913,1913,2,2,1913,1913,1913,2,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,2,1913,1204,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1204,1204,1204,2,1204,1204,1204,1204,2,1204,1204,1272,1272,1272,1913,1913,1913,1913,1913,1913,1913,2,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,2,2,2,2,2,2,1204,1204,2,2,2,2,2,2,2,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,2,2,2,2,2,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1913,1204,1204,1204,1204,1913,1913,1204,2294,1913,1272,1272,1204,1204,1272,1272,1272,1913,1913,1913,1913,1913,1913,1272,1913,1913,1913,1913,1913,1913,1204,1204,1204,1204}, + {3191,1484,856,1118,1315,2931,3575,1068,3816,1317,2951,495,1696,255,255,1789,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,76,76,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2463,2463,2463,2463,2463,2,2,2,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2,2,2,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463,2463}, + {4258,1372,2035,1344,4398,3198,797,179,1561,544,3992,1745,1221,2452,3124,3124,1562,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2986,2986,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2986,2,2986,2986,2,2,2,2,2,2,2986,2,2,2986,2,1544,2,2,2,2,2986,2986,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,1544,2986,2,1544,1544,2,2,1544,2986,2986,2986,2,2,2,2,2,2,2986,2986,2986,1544,2986,2986,2986,2986,2986,2986,2986,2986,2,2986,2986,2986,2986,2,2,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2,2,2986,2986,2986,2986,1544,1544,2,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2,1544,1544,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2986,2,2,1544,2,2986,2986,2986,2986,2986,2986,2,2,2,2,2986,2986,2986,2986,2986,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3451,2156,3807,2475,1923,620,715,1020,1213,84,2809,1641,254,824,824,1212,1212,2,2,2,2,2,2,3393,2,2,2,2,2,3547,3547,3547,3547,3547,3547,3547,2,2,2,2,2,2,2,2,2,2,2,2,3393,3547,2,3393,3393,3393,3393,3393,2,2,2,1352,278,278,278,278,278,2,2,2,2,2,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,2,3393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2725,2,2,2,2725,2725,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3393,3393,2,2,3393,2,2,2,2,2,2,2,449,449,449,449,2,2,2,449,449,449,449,449,449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,449,2,1352,1352,1352,1352,2,2,3393,3393,2,2,2,2725,2725,3393,3393,3393,3393,3393,2,2,3393,3393,2,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393,3393}, + {3407,4018,3750,1764,653,3122,1071,4341,3483,361,1921,674,674,58,1638,2121,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3097,3097,2,2,3097,3097,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3097,2,3097,2,2,3097,3097,3097,3097,3097,3097,2,2,3097,3097,2,3097,3097,3097,3097,3097,3097,3097,3097,2,3097,3097,3097,3097,3097,3097,3097,3097,3097,2,3097,3097,3097,2,2,3097,3097,3097,3097}, + {4447,1190,950,4349,3246,755,475,4183,2708,1739,3188,1542,1826,1341,2002,2002,2002,2,2,2,2,3751,3751,3751,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3751,3751,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,187,187,187,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,187,187,2,2,2,187,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3751,2,2,2,2,2,2,3751,3751,2,2,2,2,2,2,1642,2,2,2,2,1642,1642,1642,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4220,1731,1633,3483,97,1506,4029,3010,813,2764,582,2865,145,1624,787,812,1046,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4478,1850,4006,2865,2234,994,5022,519,2719,3495,3570,409,1221,5141,2794,5141,5141,3241,3241,2,3241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1439,2,2,2,2,2,1580,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1439,2,2,1439,1439,1439,2,2,2,2,2,2,1439,1439,1439,1439,1439,2,1439,2,2,2,1580,1580,2,2,2,2,1439,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1439,1439,1439,2,1439,1439,1439,2,2,2,1439,1439,1439,2,2,1439,1439,2,2,1439,1439,2,1439,2,2,2,2,1439,1439,1439,1439,1439,1439,1439,2,2,2,1439,1439,2,2,1439,1439,2,2,2,1439,1439,2,1439,2,2,1439,2,2,1439,1439,2,1439,1439,2,2,2,2,2,2,1439,1439,2,2,2,2,2,2,2,2,2,2,2,1439,2,2,2,2,2,2,2,2,2,2,2,2,2,1439,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3267,3968,350,2514,2909,2516,214,2131,1573,4844,4156,1574,117,87,3020,3020,3020,3020,3020,2,2,2,2,2,2,2,2,2,2,2,2,2,645,645,2,2,2,2,2,2,645,645,2,645,2,2,2,2,2,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,645,645,645,645,645,645,645,645,2,645,2,645,2,645,645,645,645,2,645,645,645,2,645,645,645,645,645,645,645,645,645,645}, + {4337,2884,2692,1450,472,2264,5178,443,14,3878,674,3294,3294,153,1286,306,306,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1375,1375,2,2,2,2,2,1375,2,2,1375,1375,2,1375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3730,2,1375,1375,1375,2,2,2,1375,2,2,2,2,2,2,1375,1375,1375,1375,1375,1375,1375,2,2,1375,1375,1375,2,1375,1375,2,1375,1375,1375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1375,1375,1375,2,2,1375,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1375,2,2,2,2,1375,2,2,1375,1375,3730,3730,2,2,2,2,2,1375,2,2,1375,1375,2,2,2,2,2,2,2,2,2,2}, + {3245,4095,3066,1805,3205,307,337,3581,3581,427,440,497,1128,840,3227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1300,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,775,775,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,775,775,775,775,1300,775,775,775,775,775,2,2,3210,775,775,2,1902,1902,1902,1902,1902,1902,1902,775,775,2,2,2,775,2,2,2,2,545,1300,545,545,545,545,2,2,2,2,2,775,2,2,2,2,1902,1902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,775,1300,2,2,2,2,2,2,2,2,2,2,2,2,2,775,2,2,2,2,2,2,2,2,2,2,2}, + {4333,994,618,1741,1163,436,978,2745,1988,1247,3020,3541,2553,452,400,2,1939,3100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,947,947,947,947,947,947,947,947,947,2,947,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3275,3275,3275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1316,3275,3275,3275,3275,3275,3275,3275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3275,2,2,2,3275,947,947,947,3275,2,2,2,2,2,2,2,2,2,2,2,2,947,2,2,2,2,2,2,2,2,2,2,2}, + {4576,3009,3125,2268,3797,174,503,990,1801,2840,377,333,1703,3179,3179,532,532,532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3103,2,3103,2,3103,3103,3103,3103,2,2,2,532,2,2,2,2,2,3103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4574,1251,1066,787,2570,3266,219,773,2719,2912,2912,620,2524,4568,1068,361,361,361,2,2,2,2,2,2,2,2,2,1194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1194,1194,2,2,2,2,2,2,2,2,2,2,2,2,1194,1194,1194,1194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1194,1194,2,2,2,2,2,2,2,2,1194,2,1194,2,1194,1194,2,2,1194,2,2,1194,1194,1194,1194,1194,1194,1194,2,1194,1194,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,2,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,1194,1194,1194,1194,1194,1194,1194,1194,1194,2,2,2,2,1194,1194,1194,2,2,2,2,2,2,2,2,2,2,2,1194,1194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4387,4158,960,1305,1353,4386,2402,3590,1150,895,914,914,4708,2843,2843,2,2,2903,2903,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1959,2,2,1959,1959,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1959,1959,2,1959,1959,1959,1959,2,2,2,2,2,2,2,2,2,2,2,2,1959,2,2,2,2,2,2,2,2,1959,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4365,3433,4140,536,1112,656,3135,73,1538,1231,2169,999,1066,1066,2852,2,2,2,3775,3775,2,2,2,2,3682,3682,3682,2,2,2,2,2,3682,3682,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3682,3682,2,2,2,2,2,2}, + {4375,2791,1011,516,841,3025,912,2200,3429,1324,2873,605,2136,1268,4710,2,2,2,2,1771,1771,2,4710,4710,4710,4710,4710,4710,1771,1771,1771,1771,1771,1771,1771,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,2,2,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,1771,1771,1771,2,1771,1771,1771,2,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,1771,1771,2,2,2,2,2,2,2,2,2,1771,1771,2,2,2,2,1771,2,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,1771,1771,2,1771,1771,2,2,1771,1771,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2,2,2,2,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,1771,2}, + {3202,2928,3842,4419,1803,933,1743,4021,2695,1659,506,4379,4379,541,541,745,745,745,745,745,745,2678,2678,2678,2,2,2,2,2,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5051,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3339,1529,585,386,2258,2921,1719,2957,1730,2035,1062,932,1508,118,470,2,2,2,3861,987,2,2,3631,2,2,2,2,2,3631,3631,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,987,3631,3631,3631,987,2641,2641,2,987,987,2,987,987,987,3631,3631,2,3631,3631,3631,2,987,2,2,987,987,987,987,2,987,987,2,987,987}, + {4553,1855,2366,1715,3628,2259,1675,3754,1385,1201,625,1872,97,520,520,2684,2684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3853,3853,3853,2,3853,3853,3853,2,2,2,2,2,2,134,2,2,2,3297,2,2,2,2,2,2,2,2,2,134,134,2,2,2,2,2,2,2,2,2,3853,2,2,2,3853,3853,2,2,2,2,2,2,2,2,2,2,2,2,2,3853,3853,3853,3853,3853,3853,3853,3853,3853,2,3853,3853,3853,3853,3853,3853,3853,3853,3853,134,134,134,134,134,134,134,134,134,134,3853,3853,3853,3853,3853,3853,3853,3853,3853,134,134,134,3853,3853,3853,2,2,2,3853,3853,2,3853,3853,3853,2,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,2,2,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,3853,134,134,134,134,134,134,3853,3853,3853,3853,3853,3853,2,3853,3853,3853,3853,3853,2,2,2,2,2,3853,3853,3853,2,2,2,3853,3853,3853,3853,3853,2,3853,2,3853,2,3853,3853,3853,2,4365,134,4365,4365,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3853,3853,3853,2,2,3853,2,2,2,2,2,2}, + {4964,1353,4940,1474,2521,519,1956,161,590,2047,5037,1519,3729,5581,5581,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3444,2,2,2,2,3444,3444,3444,3444,2,3444,2,2,2,2,2,3444,3444,2,3444,3444,2,3444,3444,3444,3444,3444,2,2,2,2,3444,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3444,3444,3444,2,3444,3444,3444,3444,2,2,2,2,3444,3444,3444,3444,3444,2,2,2,2,2,2,2,2,2,3444,2,3444,3444,3444,2,2,2,2,2,2,2,2,2,3444,3444,2,3444,3444,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3444,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3444,2,2,2,2,2,2,3444,2,3444,2,2,2,2,3444,3444,2,3444,3444,3444,2,2,2,2,2,2,2,2,2,2,2}, + {4436,2901,1282,1057,649,1997,3072,927,899,2289,3196,1044,786,2574,2374,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4469,3924,568,3100,1594,1858,123,929,4647,382,2485,2342,189,1506,3139,2,2,2,2,2,2,2,2,663,663,2,2,2,2,2,2,2,2,2,2,2,2,663,2,663,663,2,2,2,2,2,2,663,663,663,663,2,663,2,2,2,2,2,663,663,663,663,663,663,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1558,1558,2,2,2,2,2,2,2,2,2,2,275,275,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,663,2,2,2,2,2,2,2,2}, + {4677,1743,1166,2283,3170,3228,4905,850,1162,1149,978,282,1104,2585,2972,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,453,453,453,453,453,453,453,453,453,2713,2,2713,453,453,453,453,453,453,453,2713,2,2713,2713,2713,2713,2,2713,2,2,2,2,2,2,453,2,2,2,453,453,453,453,453,453,453,453,453,453,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5076,5076,453,453,2713,2713,2713,2713,2713,2713,2,2,453,453,453,2,2,2,453,2,2,453,2,2,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,2,2,453,453,453,453,2,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,2,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,2,453,453,453,453,453,2,2,453,453,453,2,2,2,2,2}, + {3671,3092,3442,640,3586,227,4981,5389,92,637,1235,2625,2300,380,380,1740,1596,1596,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,291,291,291,2,2,2,339,339,339,339,339,339,339,2,2,2,2,2,2,2,2,2,291,291,291,291,339,339,339,339,291,339,339,339,339,339,339,339,339,2,2,2,2,2,2,2,2,2,2,339,2,2,291,2,2,2,2,291,2,2,2,2,2,2,2,291,291,339,2,2,2,2,339,339,2,339,339,2,2,2,2,2,291,291,291,339,339,339,339,339,339,339,2,2,2,2,2,2,2,2,2,2,2,291,291,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,291,291,291,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4493,5031,3310,1700,3980,136,1041,3523,2789,328,4698,3898,504,504,637,637,3271,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1709,2,1709,2,2,2,2,2,2,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,2,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,2,1709,1709,1709,1709,1699,1699,1709,1709,2,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,1709,3238,3238,3238,3238,3238,3238,3238,3238,3238,3238,1699,1699,1699,1699,1699,1699,2,2,2,1699,1699,1699,1699,1699,1699,1699,1699,1699,1699,1699,1699,1699,1699,1709,1699,1699,1699,1699,1699,1699,1699,1699}, + {3357,1862,1879,545,2113,2652,4639,1793,2530,647,3530,3964,123,3760,2746,2746,2746,2,2,2,2,2,2,2,2,2,2,2,2,2,2413,2413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4276,2,2,2,2,2,2,2,2,2,2,2413,2,2,2,2,2413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4276,4276,4276,2,4276,2,4276,4276,2,2,2413,2413,2}, + {3392,3970,2069,874,4556,3459,1396,4343,1022,2204,1382,673,3367,1908,1389,350,350,4197,4197,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1404,2,2,2,2,2,2,2,2,2,2,2,2993,2,2,2993,2,2,2,2,2,2,2993,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1404,1404,1404,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2993,2993,2993,2,2,2,2,2,1404,2,2,2,2,2,2993,1404,2,2,2,2,2,2,2,2,2,2,2,458,458,2,458,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1404,1404,2,2,2,2,2,2,2,2,2,2,2}, + {4718,4329,359,2450,5093,1145,3855,1909,2524,471,702,2756,1292,5052,3740,5052,5052,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2837,2837,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2837,2837,2,2,2,2837,2837,2,2837,2837,2837,2837,2837,2,2,2,2,2837,2837,2837,2837,2837,2837,2837,2837,2837,2837,2837,2837}, + {3406,2184,545,2340,1975,1455,1667,801,1811,2903,1189,3378,3858,3858,1690,2361,2361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2361,2361,2,2,2,2,2,2,2361,2361,2,2,2,2,2,2,2,2,2361,2,2,2361,2361,2,2,2,2,2,2,2,2,2361,2361,2,2,2,2,2,2,2361,2361,2,2,2361,2361,2361,2361,2361}, + {4521,4410,2184,934,578,735,2914,1319,2497,664,2218,155,4688,3798,1295,739,2243,2243,2,2,2,2,2,3384,2,2,3384,2,2,2,2,2,2,2,2,2,2,3384,3384,3384,3384,2,2243,2243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3384,3384,3384,3384,3384,2,2,2,2,3384,3384,2243,2243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3384,2243,2243,2,2243,3384,3384,3384,3384,2,3384,3384,3384,3384,3384,2,2,2243,2243,3384,3384,2,3384,3384,2,2,3384,3384,3384,2,2,3384,3384,3384,3384,3384,3384,955,2243,2243,2243,2243,2,2,3384,3384,3384,2,3384,3384,3384,3384,3384,3384,3384,2,2,2,2,2,2,3384,3384,2,2,2243,2,3384,2,2,2,2,955,955,955,3384,2,3384,3384,2,2,2,3384,3384,2243,2243,2243,2243,2,3384,3384,3384,2,3384,3384,3384,3384,3384,3384,2,955,955,2243,955,955,955,3384,955,955,955,2,2,2,3384,2243,2243,3384,3384,3384,3384,3384,3384,3384,955,955,3384,3384,3384,3384,3384,1219,1219,1219,1219,3384,3384,3384,3384,2,2,3384,3384,3384,3384,2243,2243,2,3384,3384,2,2,3384,2,3384,2243,3384,2243,1018,2,2,2,1710}, + {3740,754,2658,1308,1461,3975,4453,873,256,1392,521,521,460,3347,3316,3316,1532,3316,3316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,3139,2,2,2,2,3139,2,2,2,2,2,2,2,2,3139,2,2,2,2,3139,2,2,3139,2,3139,2,3139,2,2,3139,3139,3139,2,3139,3139,3139,3139,3139,2,3139,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3139,3139,2,2,2,2,3139}, + {3748,2490,1212,408,4308,1499,722,2994,2082,2694,1061,763,1098,701,3188,739,3534,2,2,2,3534,1767,1767,1767,1767,1767,2,1550,1550,1550,2,2,2,1550,1103,2,2,2,2,1103,1103,2,2,2,2,2,1103,1103,1103,1103,1103,1550,1550,1103,1103,1103,1103,2,1103,1377,1377,1377,1377,1103,1103,1103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1103,1103,2,1103,2,1103,1103,1103,1103,2,2,1103,1103,2,2,2,2,2,2,2,1377,1377,1377,1377,1377,1377,1377,2,2,1103,1103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4552,2806,1749,1749,3634,3866,3039,4403,1120,996,236,2685,72,3962,3084,2891,2891,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4714,798,822,855,243,1136,2984,2036,1213,1475,3699,1361,570,94,94,975,3989,1181,2,2,2,2,2,2,3592,3592,3592,3592,3592,3592,3592,3592,3592,2,1804,1804,2,1181,1181,1181,1181,1181,1181,2,1181,1181,2,2,2,1181,3840,3840,3840,3840,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2755,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4670,2,4670,1181,2,4670,4670,4670,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1181,2,2,2,2,2,1181,1181,2,1181,1181,1181,1181,2,1181,1181,2,2,2,1181,1181,2,2,1181,1181,1181,1181,1181,1181,1181,1181,2,2,1181,1181,1181,1181,2,1181,1181,2,2,2,1181,1181,1181,1181,2,2,2,2,2,2,2,2,1181,2,2,1181,2,1181,1181,2,2,1181,1181,1181,2,2,1181,2,2,1181,1181,1181,1181,1181,1181,1181,1181,1181,2,2,1181,1181,2,2,2,2,2,2,1181,2,2,2,2,1181,1181,1804,4670,4670,2,1181,1181,1181,2,1181,1181,1181,1181,1181,1181,1181,1804,1804}, + {3322,879,1863,1460,2369,3954,1029,65,4978,2465,2404,176,176,5178,1622,3682,3682,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3461,2642,1761,4171,1064,900,163,4640,209,209,2363,2363,623,623,623,2659,2,208,208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,504,504,504,1071,2,2,2,2,2,2341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1071,1071,1071,1071,2,2341,2,2341,2341,2,2,2,2,2,2,2,2341,2,2,2,2341,2341,2341,2,2341,2341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1071,2,2,2,2,2,2,2,2,2,2,2,2,2,1071,1071,1071,2341,2341,2341,2341,2341,2341,2,2,2,1071,1071,1071,1071,2,2395,2395,2395,2,2341,2341,2341,2,2,2341,2341,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2341,2341,2,2,2,2,2,2,320,2,2,2,2,2,2,2,1071,2,2,2,2,1071,2341,2341,2,1071,2341,2341,2341,2,2,2,2,2,2,2,2,2,2}, + {4606,3202,2286,726,282,250,3044,1348,3081,323,2412,2785,5435,2075,5435,5435,616,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2251,124,124,124,124,2251,2251,2251,124,2251,2251,2251,2251,2,2,2251,2251,2,2,2251,2251,2251,2,2,2,2,2,2,2,2251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4260,4260,4260,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3677,1025,1094,947,1906,2329,3995,2019,4080,2362,960,4152,1665,1665,998,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,641,641,641,641,641,641,641,2,2,641,641,641,641,2502,2502,2,2,641,641,641,641,641,641,641,641,2,641,641,641,641,2502,2502,2502,2502,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2502,2502,2,2,2,2,2,2,2,2502,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,229,229,229,2,2,2,2,2,2502,2502,2,641,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,2,2,2,2502,229,2,2,2,229,229,229,229,2502,2502,2502,2502,2502,2,2502,641,2,2,2502,2502,2502,2,2502,2502,641,641,2502,2502,2502,2502,2502,2502,2502,2502}, + {3452,1199,1617,1009,990,101,2436,3960,3407,2709,2709,578,1568,4341,1167,3392,2,2,2,2,2,4643,4105,2,2,1601,1601,1601,2,1601,1601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4105,4105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3604,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4753,4427,313,1014,1463,1987,4152,2101,3059,732,1048,912,818,970,3758,282,2,2,2,2,2440,2,2,2,2,2,2,2,2,2849,2849,2849,2849,2849,1003,1003,2849,2849,2849,2849,2849,2849,2849,900,2849,1003,1003,2849,2849,2849,1003,1003,2849,1003,1003,1003,1003,2,1003,2849,2849,1676,1676,2,1676,1676,2,2,2849,2849,2849,2849,2849,900,900,900,900,900,900,900,900,2,900,900,900,900,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,4740,2849,2849,363,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2849,2,2849,2849,2849,2849,2,2,2,2,1676,1676,2849,2849,2849,2849,2849,2,2,2,2849,2849,2849,2849,2849,2849}, + {3673,4536,2243,2107,1113,893,339,1615,3920,2473,4471,278,1304,1700,414,1499,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3991,3991,2,3991,2,2,2,2,2,2,3991,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3991,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3991,3991,3991,3991,3991,2,2,3991,3991,2,2,2,2,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,3991,2,2,2,3991,3991,3991,3991,2,2,2,2,2,2,2,2,2,2,2,3991,3991,2,2,2,2,2,2,2,2,2,2,3991,3991,3809,2,2,2,2,3991,2,3991,3991,3991,3991,3991,3991,3991,3991,2,2,2,2,2,2,2,2,3809,3809,2,2,2,2,2,2,2,2,3991,2,2,2,3809,3809,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3991,2,2,3809,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3809,2,3809,3809,2,2,2,2,2}, + {3474,2211,1349,413,725,4174,1121,3265,301,2283,909,732,3530,2317,2180,2180,2,2180,1437,2,2,2,2,2,2,2,2,1437,2,2,2,2,3436,3436,2,1437,2,2,2,2,2,2,2,2,2,2,2,2,3436,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3436,3436,3436,3436,2,2,2,2,2,2,2,3436,3436,3436,3436,3436,3436,3436,2,2,2,2,2,3436,3436,2,2,2,2,2,2209,2209,2209,2209,2,2,3436,3436,2,2,3436,3436,3436,3436,3436,3436,3436,2,3436,3436,3436,3436,3436,3436,3436,3436,2,2,2,3436,3436,2,2,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,2,2,2,3436,3436,3436,3436,3436,3436,2,2,3436,3436,3436,3436,3436,3436,3436,3436,3436,3436,2,3436,3436,3436,3436,3436,3436,2,2,3436,3436,3436,3436,3436,3436,3436,3436,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3679,1883,1599,3412,1759,1902,64,798,5786,1874,3821,731,731,1841,2015,3121,2,2,2628,2,2,2,2,2,2,2,2,2,2,2628,2,2628,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,805,2,805,805,2,805,805,805,805,805,2,805,2,2,2,2,2,805,805,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,805,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,805,805,2,805,2,2,805,805,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2786,2,2,2,2,2,2,2,2,2,2,580,2,580,580,580,805,805,805,2,805,805,805,805,805,805,805,805,805,805,805,805,2,2,2,805,805,805,805,805,2243,2243,2243,2,2243,580,580,580,580,580,580,580,580,580,2786,2786,2,2,805,805,805,805,805,2786,2786}, + {3516,887,520,2062,209,736,2202,175,2778,2857,4609,4609,774,3765,712,712,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3018,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2179,2179,2,2,2179,2179,2179,2179,2179,2179,2179,2179,2179,2,2,2,2179,2,2,2,2,2179}, + {5295,916,2098,175,1340,684,2313,5211,2472,1855,3676,161,207,2000,3541,6015,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5347,2686,1873,5422,4072,3384,79,1487,3174,1541,1206,935,1618,1618,812,812,2,1939,1939,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1939,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1939,1939,1939,1939,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4659,1616,5129,1168,2057,1048,2234,485,2202,3677,3654,589,1276,595,2343,2343,1667,2,2,2,1667,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1667,1667,1667,1667,2,2,2,2,2,2,2,1667,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,382,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,382,382,382,382,382,382,2,2,382,382,382,382,382,382,382,382,382,2,382,2,382,382,2,382,2,2,382,2,2,382,2,2,2,2,2,2,2,2,2,2,2,382,2,2,2,2,2,2,382,2,2,2,382,382,2,2,2,2,2}, + {3516,2623,413,5566,1015,457,490,3052,2585,79,88,2559,2954,55,4465,4465,870,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,870,870,870,870,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4605,3269,2100,548,3619,627,2450,2218,3850,4055,2488,405,1326,876,2609,846,1462,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3793,2,2,2,2,168,732,732,2,2,2,2,2,2,2,2,2,3793,3793,2,2,2,2,2,2,2,2,3793,2,2,3793,3793,2,2,2,2,2,2,2,2,3793,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3793,3793,3793,2,2,2,2,3793,3793,3793,3793,3793,2,2,2,2,2,2,2,2,2,2,732,732,2,2,732,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,732,2,2,2,2,2,2,732,2,732,2,2,2,2,2,2,1144,1144,1144,732,732,1144,732,1144,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,3793,3793,732,732,732,2,732,732,732,732,732,732,732,3793,3793}, + {4985,1954,4596,1454,3611,187,1897,1134,3237,1722,1532,2908,195,195,4045,4045,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4964,4109,2421,1581,4255,1687,1630,99,1178,2380,595,3355,2977,624,1089,965,2651,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1722,1722,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1722,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1722,1722,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1722,2,1722,1722,2,1722,2,2,2,1722,1722,1722,1722,1722,1722,1722,1722,1722,1722,1722,2,2,1722,1722,1722,1722,1722,1722,1722,1722,2,2,2,2,1722,1722,1722,2,2,2,2,2,1722,1722,1722,1722,1722,2,2,1722,1722,1722}, + {5272,2169,2186,718,289,675,1481,4386,3173,3326,3609,498,1049,1643,3505,4136,4136,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1233,1233,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2595,2,2159,2,2,2,2,2,2,2,2,2,2,2159,390,2,2,2,2,2,2,2,2159,2,2,2,2,2159,2,1233,2,2,2,2159,2159,2159,212,212,1233,2,1233,1233,2,2,2159,2159,2159,2159,2,2,2,2159,2159,2159,212,2,2,2159,2159,2159,2,2,2159,2159,2159,2159,2159,2159,212,2159,2,2,2,2159,390,390,390,2,2,2159,2159,2159,1007,1007,1007,1007,1007,1007,1233,1233,1233,2,2,2,1233,1233,1233,1233,1233,1233,1233,2159,2159,2159,2159,2159,2159,1233,3505,3505,3505,212,212,1717,2159,2159,212,212,212,212,212,212,212,212,1233,1233,1233,1233,1233,1233,1233,1233,2159,2159,2159,2159,1233,2159,2159,2159,2159,2159,2433,3505,3505,878,3505,2433,3505,1233,3505,3505,3505,1233,1233,1233,1233,1233,1233,1233,1233,1233,390,390,390,390,390,390,3505,2,3505,3505,3505,3505,3505,3505,3505,3505,3505,3505,4576,4576,4576,2159,2159}, + {4924,4842,2789,4577,2328,194,5654,2541,963,3120,983,2348,123,498,3119,3119,3307,2,3119,2,2,1129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1848,2,2,2,1848,1848,1848,2,1848,1848,2,2,1848,2,2,1848,1848,1848,1848,1848,1848,387,2,2,1848,1848,1848,1848,1848,1848,1848,1848,1848,387,1848,387,387,387,387,387,1848,1848,2,2,2,2,1848,1848,1848,1848,1848,387,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,2235,387,387,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,2,2,1848,1848,1848,1848,1848,1848,2,2,2,2,2,2,2,1848,1848,1848,1848,1848,1848,2235,2235,1848,1848,1848,1848,2235,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848,1848}, + {3776,1505,2635,1017,3761,939,389,4325,4589,1118,3324,2557,2557,1700,1700,1700,1700,1771,2,2,2,2,2,4214,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4214,2,2,2,2,2,2,4214,4214,4214,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4214,912,2,2,2,2,2,2,912,912,912,912,2,912,912,912,2,2,912,912,912,912,912,912,912,2,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,2,2,912,912,912,912,2,912,912,912,912,912,912,912,2,2,2,2,4214,2,2,2,2,2,2,2,2,2,2,2,4214,4214,4214,2,2,2,2,2,2,2,2,2,2,4214,4214,4214,4214,4214,4214,2,4214,4214,4214,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4214,4214,2,2,2,2,2,4214,2}, + {5355,3004,2566,368,2515,932,5320,460,3175,2725,776,738,952,1179,2,1179,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1227,1227,2,2,2,2,1227,1227,2,2,2,2,2,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,2,2,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,2,2,2,1227,1227,1227,1227,1227,1227,1227,2,2,2,2,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,2,1227,1227,1227,1227,2,2,1227,1227,1227,1227,1227,1227,1227,2,1227,1227,1227,2,2,1227,1227,2,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,1227,2,1227,4937,4937,4937,4937,4937,4937,4937,4937,2,2,1227,2,2,1227,1227,2,2,2,2,2,1227,1227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3950,1886,684,840,89,1886,2007,997,717,1347,2023,2987,4027,44,2,5003,5003,5003,2,2,2,2,2,2,2,2,2,1999,1999,1999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1999,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1999,1999,1999,2,2,2,2,2,2,2,2,1999,1999,1999,1999,2,2,2,2,1315,1315,1315,2,2,2,1315,1315,1315,1315,2,1315,1315,2,1315,2,1315,1315,2,1315,1315,2,2,2,2,2,1315,1315,1315,1315,1315,1315,2,1315,2,1315,1315,2,2,1315,1315,1315}, + {3617,3159,5361,2098,2990,659,5373,1727,2989,860,1289,974,4247,2053,2,2,5453,3711,2,2371,2,2,2,2371,2,2,2,2,2,2,2,2371,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3804,3139,1695,3525,2932,632,178,435,951,281,1555,1404,1952,1089,2,2,1408,250,3586,2,2,981,981,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3586,2,2,3586,3586,2,2,2,2,2,2,3586,3586,3586,3586,2,3586,3586,3586,3586,3586,3586,3586,2,2,2,2,2,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,547,547,547,547,3586,3586,3586,547,547,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,547,547,547,547,547,547,547,547,3586,3586,3586,3586,3586,3586,3586,3586,547,3586,3586,547,547,547,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,547,547,547,547,547,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,1476,1476,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,2,547,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,1476,1476,1476,547,3586,3586,547,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,3586,5955,5955,5955,5955,5955,3586,3586,3586,3586,3586,3586,547,3586,3586,547,3586,3586,547,547,3586,547,3586,3586,3586,3586,3586,3586,547,547,547,547,547,547,547,547,547,547,3586,3586,3586,3586,3586}, + {4963,3808,1792,2748,2553,685,1168,4592,1146,2631,1868,798,406,406,2,2,2,1688,3380,2517,2517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2517,2,2,2,2,2517,2517,2,2,2,2517,2517,2517,2517,2517,2517,2,2517,2517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3380,110,110,110,3380,110,2,2,2517,2517,2517,2517,2517,2517,2517,2,2517,2517,2,2517,2,2517,2517,2517,2517,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3652,3712,3890,3158,2100,4805,4384,2700,2199,1094,173,3014,2117,2117,2,2,2,2,3998,3998,3998,3998,2139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2139,2139,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3313,3313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2139,2139,2,2,2,2,2,2,2,2,2,2,3313,2139,2139,3313,2,2139,2139,3313,3313,3313,3313,3313,3313,3313,2,2,2,2,2,2139,2139,2,1597,2,2,2,2,2,2,2,2,2,2,1597,1597,2,2,2139,2139,2139,2,2,2,2,2,2,2,2,2,2,2,1597,1597,1597,2,2,2,2,2,2,2,1597,1597,2,2,2,1597,1597,2,1597,1597,1597,1597,2,2,1597,2,2,1597,1597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1597,1597,1597,1597,1597,1597,1597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1597,2,2,2,2,1597,1597}, + {4979,1811,2448,4842,4884,2488,948,497,2529,1597,3299,2499,2980,2980,2,2,2,2,4199,4199,4199,4199,4199,4199,4199,4199,2,2475,2,2,2,2,2,2,2,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,2,4841,4841,4841,4841,4841,4841,2,2,2,2,2,2,4841,4841,4841,4841,2,4841,4841,4841,4841,2475,2475,2475,2475,2475,2475,2475,2475,2475,2475,2475,2475,2475,4841,4841,4841,4841,4841,4841,4841,4841,2475,2475,4841,2475,2475,4841,4841,4841,2,4841,4841,1935,1935,1935,1935,1935,1935,1935,2475,1935,2475,2475,2475,2475,2475,4841,2475,4841,4841,2,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,2524,2524,2524,2524,2524,2524,2524,4841,4841,4841,4841,4841,4841,4841,4841,4841,2,2,2475,2475,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,2,4841,4841,4841,4841,2,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,2,4841,4841,4841,2,2,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,4841,2,2,2,2,2,2,2,2,2,2,2,2,2,4841,4841,4841,4841,4841,4841,2,2,2,2,2,2,2,2,2,2,2}, + {5023,1540,927,245,2075,2301,5467,4874,3291,3051,3294,760,2306,1312,2,2,2,590,590,590,2,2,2,2371,2371,2,2,2,2,2,2,2,2,2597,2597,2597,2597,2597,2597,2597,2597,2,2597,2597,2597,2597,2597,2597,2597,2371,369,2371,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,369,369,2597,2,2,2597,2597,2597,2,2371,2371,2,2,2,2,2597,2371,2371,2371,2371,2371,2371,2371,2597,2597,2597,2597,2597,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2371,2,2371,2371,2371,242,242,242,242,242,242,242,242,242,242,242,2597,2597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2597,2597,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2371,2597,2,2597,2597,2371,2,2371,2371,2371,2,2597,2597,2597,2,2597,2,2,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2597,2,2,2,2,2,2,2597,2597,2597,2,2,2,2,2,2,2,2,2,2,2,2597,2,2597,2597,2,2,2,2,2,2597,2597,2597,2597,2,2,2,2}, + {5443,2941,347,1060,5432,5651,301,2162,665,2055,4381,98,2739,3194,2,2,2,4969,227,2,2,2,2,2,2,2,2,2,2,2,1870,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1870,1870,2,2,2,2,2,2,2,2,2,2,2,347,347,347,347,2,2,347,347,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1870,1870,2,1870,1870,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1870,1870,1870,1870,2,1870,1870,1870,1870,1870,1870,1870,1870,1870,1870,1870,1870,2,2,2,2,2,1870,2,2,2,2,2,2,1870,1870,2,2,2,1870,2,156,156,2,2,2,1870,1870,1870,2,2,1870,1870,2,1870,1870,1870,1870,2,2,2,2,2,1870,1870,2,2,2,2,1870,1870}, + {3658,1253,870,2758,2146,2477,2412,4259,3502,398,868,3053,449,1881,2,2,958,4704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3985,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,799,799,2,799,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3333,3333,2,2,2,2,2,2,2,2,2,3333,2,2,2,2,2,2,2,2,2,2}, + {5067,2597,6011,2402,413,3512,2653,4334,390,2692,5283,3178,1799,4788,2,2,1641,2691,2691,3929,2,2,2,2,2,3145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3145,3145,2,2,2,521,521,2,521,2,521,2,2,2,2,2,2,2,521,2,2,2,521,2,2,2,521,2,2,2,521,2,2,2,2,2,2,2,521,521,521,521,521,521,2,521,521,521,2,2,521,2,521,2,521,521,521,521,521,2,521,521,521,2,2,2,2,2,521,2,2,2,2,2,2,2,2,2,521,521,2,521,521,521,521,521,521,521,521,2,2,521,521,521,521,521,521,521,521,521,2,521,521,521,521,521,521,521,521,521,6065,521,521,521,521,521,521,2,2,521,521,521,521,521,521,521,521,521,6065,6065,6065,6065,521,2,2,521,521,521,521,521,521,521,521,521,521,521,521,2,521,521,2,2,2,2,2,6065,521,6065,521,6065,521,521,521,521,2,2,6065,6065,6065,521,521,6065,2,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,6065,521,6065,6065,6065,6065,521,521,521,6065,521,521,521,521,521,521,521,521,521}, + {3885,3052,2835,523,2045,83,2098,4007,3517,1262,981,4508,2609,2609,2,2609,4534,4534,2,2,2,2000,2000,2,2000,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2000,2000,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2000,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5055,3401,2410,1529,394,1543,1133,1103,3701,3966,2974,3068,677,677,2,677,1879,1822,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5098,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4001,4001,4001,4001,4001,2,5098,2,2,5098,5098,2,5098,5098,5098,2,2,5098,5098,2,5098,4001,2,4001,4001,5098,5098,5098,5098,5098,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4001,4001,4001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4001,4001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5098,2,5098,2,5098,2,5098,2,2,2,2,2,5098,5098,2,2,2,2,4001,5098,2,2,5098,5098,2,2,2,2,4001,4001,4001,5098,2,2,5098,4001,4001,4001,4001,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,4001,4001,5098,4001,4001,4001,5098,5098,5098,5098,5098,5098,5098,5098,2,2,2,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,5098,2,2,5098,5098,2,5098,2,5098,2,2,2,2,5098,2}, + {4048,3672,616,1520,2274,3021,4421,4072,152,1312,609,2967,716,978,2,659,4216,2,2881,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,245,2,2,2,2,2,245,245,245,245,245,2,2,245,2,2,245,245,245,245,245,245,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,245,245,245,245,245,245,2,2,2,245,245,245,245,245,245,2,2,2,245,245,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3916,1447,3984,2374,3691,4938,5363,1530,245,2887,2776,2026,410,1152,2,1513,1815,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,16,4,4,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,6034,6034,638,638,638,638,638,16,16,16,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,16,4,4,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,6034,638,638,638,6034,6034,638,638,638,638,2,638,638,2,2,2,2,2,2,2,2,2,2,2,2,2,6034,4,4,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,638,638,638,638,6034,6034,6034,638,638,638,2,16,16,638,638,16,2,256,2,2,2,2,2,2,2,2,6034,4,16,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,638,638,638,638,6034,6034,6034,638,638,638,2,16,16,638,638,638,638,256,2,2,2,2,638,638,2,2,6034,4,16,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,638,638,638,638,6034,6034,6034,638,2,638,2,2,16,638,638,638,638,256,2,256,2,2,638,638,2,2,2,4,16,2,2,2,2048,2048,6034,6034,6034,6034,6034,6034,6034,638}, + {3919,1125,5765,2380,668,2948,502,1883,69,60,690,1095,1095,1095,952,32,2203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,2,2,2,2,2,2,2,2,1573,1573,1573,1573,1573,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,1573,1573,1573,2,2,2,2,2,2,2,1573,2,1573,2203,2203,2,2,1573,1573,1573,1573,2203,2203,2203,2203,1573,1573,1573,1573,1573,1573,2,1573,2,1573,1573,1573,1573,1573,2,2,1573,1573,1573,1573,1573,1573,1573,2,2,2,2,2,2,2,2,2,1573,2,2,1573,1573,1573,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,1573,1573,1573,1573,2,2203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,1573,1573,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,1573,1573,1573,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,2,2,2,1573,1573,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1573,2,2}, + {3715,3458,1970,870,1037,758,115,197,2841,2644,3665,109,109,404,2170,3221,3221,2,2,2,2,2,4255,3021,3021,3021,4255,4255,4255,2,4255,2,2,2,2,2,4255,3021,3021,4255,4255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4255,4255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4255,4255,4255,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4255,4255,4255,4255,4255,4255,4255,4255,2,2,4255,4255,3021,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4255,2,2,4255,2,2,2,2,2,2,2,2,2,2,4255,4255,2,2,2,2,2,2,2,2,2,2,2,2,3021,2,2,2,2,2,2,2,2,2,4255,4255,4255,4255,2,541,4255,4255,4255,2,2,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,2,4255,4255,2,2,4255,4255,4255,4255,4255,3021,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,2,2,3021,3021,3021,4255,4255,4255,4255,4255,4255,4255,2,2,4255,2,2}, + {5212,3272,1609,4226,5381,4456,1368,2187,556,556,5895,1306,3255,2069,2069,3294,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,875,875,2,875,875,875,875,875,875,875,875,2,2,2,2,2,2,2}, + {5662,5822,4817,1149,217,3219,2586,286,871,2578,3042,328,328,955,1541,483,483,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3747,3747,3747,2,2,2,3747,3747,3747,2,2,3747,3747,3747,3747,3747,3747,3747,3747,3747,3747,3747,3747,3747,2820,2820,2,3747,3747,3747,3747,3747,3747,2820,2820,2,3747,2,2820,2820,2,2,2820,3747,3747,2820,3747,2,3747,2820,2820,2,2,2,2,3747,2,3747,3747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2820,2,3747,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5146,2024,4990,416,543,2059,113,4939,3497,2950,2710,2699,2699,2699,1653,3311,2969,2,3465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2656,2,4811,2,4811,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,898,2,2,2,2,2,2,2,2,2,2,2,2,898,898,898,898,2,2,2,2,2,898,898,898,2,2,2,2,898,898,898,898,898,898,898,2656,2656,898,2656,2656,898,2656,2656,2656,2656,2656,2656,2656,2656,2656,2656,2656,2656,2656,2,2656,2656,2656,2656,2656,2656,898,2656,2656,2656,2656,2656,2656,898,898,898,898,2,898,898,898,898,898,898,2656,2656,2656,898,898,2656,2656,2656,2656,2656,2,2656,2656,2656,2656,2656,2656,2,2,2,2656,2656,2656,2656,2656,898,2656,2656,2656,2656,2656,2656,898,898,898,2656,2656,2656,898,2656,2656,898,898,2656,2656,2656,2656,2656,898,898,2656,898,2656,898}, + {3740,1782,2190,876,1140,2757,4149,6037,3133,1963,5011,310,1381,724,724,2583,2583,2583,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2904,2904,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2904,2904,2904,2904,2,489,489,2,1662,2904,2904,2904,2904,2,2,2,2,2904,2904,2904,1662,1662,1662,1662,1662,1662,1662,1662,1662,1662,2,2,1662,1662,2904,2904,2904,1662,2,1662,1662,2904,2904,2904,489,489,489,489,2904,2904,2904,2904,2904,1662,1662,1662,2904,2904,2904,2904,2904,2904,2904,1662,1662,1662,2904,2904,2904,2904,1662,2904,2904,1662,1662,1662,1662,1662,1662,1662,1662,1662,1662,4219,4219,4219,1662,1662,1662,1662,2904,2904,1662,1662,1662,2904,1662,1662,1662,1662,1662,1662,1662,2904,1662,1662,2,2,1662,1662,1662,1662,1662,1662,1662,1662,1662,2,1662,1662,1662,1662,1662,1662,1662,1662,1662,2,2904,2904,2904,2904,1662,1662,1662,2,1662,1662,1662,2,2,2904,3386,3386,3386,1662,2904,3386,3386,3386,3386,2904,2904,2904,2904,1662,1662,407,2,2,2,2,2,1662,3386,2904,2904,2904,2904,1662,3386,3386,1662,1662,1662,1662,3386,3386,3386,2904,2904,3386,2904,3386,3386,3386,3386,3386,2,2904,2904,2904,2904}, + {5183,2522,5684,3654,1465,5348,1013,4419,2221,1177,1177,682,682,3960,709,3305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,1655,1655,1655,1655,2,2,2,2,2,2,2,1655,2,1655,2,2,2,2,2,2,2,2,2,2,2,1655,1655,2,2,2,1655,1655,2,2,2,2,2,1655,2,2,1655,1655,1655,1655,1655,1655,1655,1655,1655,1655,1655,2,2,2,2,1655,2,2,2,2,2,2,1655,1655,1655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,1655,1655,2,2,2,2,1655,2,2,1655,2,2,2,2,1655,1655,2,2,2,1655,1655,1655,1655}, + {5069,3278,2817,4849,2324,4827,2210,1085,5076,1706,797,4305,438,665,3603,763,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,3340,212,212,2,2,2,4944,53,212,32,32,32,32,32,1616,1616,1616,32,32,32,1616,1616,1616,1616,1616,1616,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1624,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,851,2,3630,32,3340,212,212,2,2,2,4944,53,53,32,32,32,32,32,1616,32,32,32,32,53,53,53,53,53,101,101,2,212,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5233,791,2594,3255,1692,590,2406,2903,3852,282,629,3212,174,215,2867,49,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3053,3053,3053,3053,3053,3053,2,3053,3053,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3395,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5244,2671,2818,2774,4981,3565,5793,4428,2037,2886,78,5719,1672,1672,261,261,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1985,2,816,2,816,816,816,816,2,2,2,816,816,816,816,2,2,2,1985,1985,1985,1985,2,2,1985,2,2,816,1985,1985,1985,2,1985,1985,1985,1985,1985,1985,1985,1985,1985,816,1985,1985,1985,1985,2,1985,1985,1985,1985,1985,1985,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1985,1985,1985,1985,2,2,2,2,2,2,2,1985,1985,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1985,2,2,1985,1985,1985,1985,1985,1985,2,2,1985,2,2,1985,1985,1985,1985,2,1985,1985,2,2,2,2,1985,1985,1985,1985,1985,1985,2,1985,1985,2,2,2,2,2,2,2,2,2,2,2,1985,1985,1985,2,2,2,1985,2,1985,2,2,2,2,2,2,2,2,2,2}, + {5322,922,1084,4184,161,5283,383,3534,714,4515,726,662,3712,2079,2079,2079,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5378,5378,5378,5378,5378,2,2,2,2,2,2,2,2,2,2,2,2,2,4573,4573,4573,4573,2,2,2,2,2,2,3076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3076,3076,2,2,2,2,2,2,2,403,2,2,2,2,2,2,2,2,2,2,2,403,403,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,2,2,2,403,403,403,403,403,403,403,2,2,2,2,2,4573,2,4573,2,2,2,2,2,2,2,2,2,2,3076,2,2,2,2,403,1198,1198,1198,403,2,2,1198,2,2,2,2,2,2,2,2}, + {5804,2537,4928,1129,781,91,219,1950,829,1381,1328,445,445,445,425,4204,2,2,2,815,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5673,5673,5673,5673,2,2,2,5673,5673,5673,5673,5673,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4059,2714,3895,3105,2189,3346,4891,5469,2186,3378,5236,4294,4802,4286,4286,1519,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3089,3089,3089,2,2,2,2,2,2,2,2,2,3089,3089,3089,2,2,3089,2,2,2,2,3089,3089,3089,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3089,2,2,2,2,3089,3089,3089,3089,3089,3089,2,2,2,2,2,2,2,2,3089,2,2,2,2,2,2,2,2,2,3089,2,2,2,2,2,2,2,2,2,2,2,3089,2,2,2,2,2,2,2,2,2,3089,3089,3089,3089,2,2,2,3089,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3089,3089,2,2,2,2,2,2,2,2,2,2,2}, + {5708,2052,1810,2084,3267,5414,2599,1730,480,3401,3327,4647,1748,2161,2161,1874,2,1874,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1216,1216,2,2,2,2,2,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1216,1216,2,2,2,2,2,2,2,2,2,1216,2,1216,1216,1216,1216,1216,1216,2,2,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,2,1216,1216,1216,1216,2,2,1216,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1216,1216,1216,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5167,3267,4478,526,238,4744,2894,1249,1449,2608,3908,2956,2302,942,3139,4,2,2468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6319,6319,6319,6319,6319,6319,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5779,4265,1332,3103,3199,2704,4797,1444,134,2110,1077,1505,1268,3258,3258,3258,2,2,2,2,3023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5206,5206,2,2,2,2,2,2,2,2,2,2,5206,5206,5206,5206,2,5206,5206,2,2,5206,5206,5206,2,2,2,2,2,2,2,5206,2,5206,5206,5206,5206,5206,5206,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4109,5508,3813,1006,3515,4723,737,724,6208,83,1987,6265,6265,6265,3440,3440,3440,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1994,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1298,1298,2,277,277,1298,2,2,2,2,2,2,2,2,2,2,1298,1298,1298,2,2,2,2,2,2,2,2,2,2,2,1298,1994,1994,1994,1298,1994,2,2,2,1994,1994,1994,1994,1994,1994,1994,1994,1298,1994,1994,1994,1994,1994,2,2,2,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1298,1298,1994,1994,1994,1994,1994,1994,1994,1994,1994,1628,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994,1994}, + {5166,4507,3355,2589,6243,1427,1072,3932,2199,628,1694,1694,4032,673,3476,158,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,915,915,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4133,4348,5825,2390,3111,376,828,347,5825,1701,634,409,676,676,676,676,2376,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1349,2,2,2,2,2,2,2,1349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1349,1349,2,2,2,2,1349,1349,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5417,1192,700,4364,4180,1484,1398,3796,5333,1357,1579,3291,1467,2831,2831,1278,1278,2,2,2,901,901,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,119,119,119,119,119,119,119,119,2,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,2,119,2,2,119,119,2,119,119,119,119,119,2,119,119,119,119,119,119,119,119,119,2,119,119,119,119,119,2,2,119,119,2,2,119,2,2,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,2,2,2,542,119,2,2,119,901,119,119,119,119,119,119,119,2,2,119,119,2,2,901,901,901,901,901,901,901,901,2,2,119,2,2,2,2,119,2,2,2,2,2,2,119,2,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,119,2,119,2,2,2}, + {5248,4840,1313,1073,1888,6180,3435,2029,1949,2602,1512,2808,3344,3344,3344,638,4127,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4587,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4587,4587,4587,4587,2,4587,2,2,2,2,2,2,2,2,4587,4587,2,2,2,2,2,2,4587,4587}, + {4207,2203,472,676,2009,831,2009,1629,2964,4153,1536,640,6305,6305,4269,3614,219,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1269,2,1269,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1269,1269,2,2,2,2,1269,2,2,1269,2,2,2,1269,1269,2,2,2,2,2,1269,1269,1269,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1269,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4365,1463,1740,795,1858,472,1283,2657,2929,4034,1601,1530,1399,161,2928,2928,2928,2,2,2,2,2,2,2,2,2,2,5097,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,2,2,1655,1655,1655,2,2,1655,1655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,1655,2,1655,2,1655,1655,2,2,2,1655,1655,2,2,1655,2,2,2,2,2,2,2,2,2,1655,2,2,2,2,2,2,2,2,2,2,2,1655,1655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,2,2,2,1655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1655,2,2,2,2,2,2,2,2,1932,1932,1932,2,2,2,2,2,2,1932,1932,1932,2838,2838,2838,2838,1655,1655,1655,1655,2,2,2,2,2,2,2,2,2,1655,1655,1655,2,2,2,1655,2,2,1655,2,2,1655,1655,2,2,2,2,1655,2,2,1655,1655}, + {4375,1446,4054,5039,941,5576,1387,6392,1969,1750,3465,385,4423,385,5112,2,3035,2450,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3277,3277,3277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1170,2,1170,1170,1170,2,3277,3277,3277,3277,3277,3277,3277,2,2,2,2,2,2,2,2,2,2,2,2,3277,2,2,2,2,2,3277,2,2,3277,2,3277,2,2,2,2,3891,2,2,2,2,3891,2,3891,3891,3891,3891,2,2,2,2,3277,3277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5562,5133,6411,1617,136,945,2433,4497,6453,4605,6868,1372,2356,771,2623,5924,1674,1674,2,2,2,2,2,1523,1523,1523,1523,1523,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1523,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4269,1508,301,1058,3289,941,365,3960,2588,115,1486,3279,2288,2288,2288,2,2,5672,5672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4287,3435,804,5943,5354,4271,3731,1455,5412,3316,4206,6714,4849,3944,1572,2363,2363,2,3315,3315,2,3315,3315,2,2,2,1775,1775,1775,1775,2,2,2,2,2,1775,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2363,2363,2363,2363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5353,3815,5121,3481,349,2426,3182,1046,858,2925,840,1169,5011,5720,248,2,2,2,2,2,2,2,4,4,4,4,1238,1238,1238,3693,3693,3693,3693,3693,3693,3693,3693,3693,3693,3693,3693,3693,3693,1715,2,1514,1514,1514,1514,1715,1514,1514,1238,1238,1238,1238,1238,1238,1238,1238,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,2,3306,3306,3306,1715,1715,2479,2479,2479,2479,2479,2479,1238,1238,1238,1238,2479,2479,2479,1238,1238,1238,1238,1238,1980,1514,692,692,848,1238,1980,848,1514,692,1238,692,1238,848,1238,848,848,848,1011,1011,1011,1011,2,1011,1011,1011,2,2,2,2,2,3306,2,2,2,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,3306,1980,166,166,3693,3693,166,1514,166,166,166,166,166,166,166,166,166,166,2,2,2,166,166,166,2479,2,2,2,2,2,2,2,2,2,2479,2,2,2479,2,2,2479,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,848,2,848,848,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4048,2321,5128,4127,4697,2138,3200,290,4303,2102,2958,182,1302,1628,1302,2,2,1302,1302,2,2,4409,2,2,2,2,2,2,4409,4409,2,2,4409,4409,2,4409,2,2,4409,4409,4409,4409,2,4409,2,2,4409,4409,4409,4409,4409,4409,2,2,2,2,2,2,2,2,2,2,2,2,4409,2,2,2,2,2,4409,4409,4409,4409,4409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5620,3125,3521,474,611,2430,3045,1331,2955,2809,3981,3110,1317,2479,1399,2171,2171,3402,2171,2,2171,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2171,2,2,2,2,3011,2,2,2,2,2,2171,2,2,2,2837,2,2,2,2,2,2,2837,2,2,3011,2,2171,2,2,2171,2,2,1720,1720,1720,1720,1720,2,1720,1720,2,6192,2,2,2,2,2,2,2,2,2,2,2,2,2837,2,2,2,2,2,2,2,2,2,2,2,2837,2,3011,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6192,2,6192,6192,2,2,2,6192,2,6192,6192,2,6192,6192,2,6192,6192,6192,6192,2,2171,2171,2171,2171,2171,6192,2,2171,2171,2,2171,6192,2,6192,6192,6192,6192,6192,2,2,2,2,2171,2171,2171,3011,2171,6192,6192,2171,2,2171,2171,6192,2171,6192,2171,2171,2171,2171,2171,2171,2171,2171,2,2,2,2,2,2,2171,2,2,2,2,2,2,2171,2171,2,2,2171,2171,2171}, + {5453,3563,942,1798,3278,2524,3087,957,470,1155,2694,3329,367,1071,2554,4399,4399,2845,2,2,2,2,2,2,2,2,2,2,2,3529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3529,3529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3529,3529,2,2,3529,3529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3137,3137,3137,2,3137,3137,2,3137,3137,2,2,2,3529,3529,2}, + {5626,2346,3777,3493,5149,2692,2414,886,343,144,327,3637,330,594,3873,1244,1244,2837,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4485,4485,4485,4485,4485,2,2,4485,4485,4485,2,4485,4485,4485,2,4485,2,2,2,2,4485,2,4485,2,2,2,2,2,2,2,2,2,2,4485,4485,2,2,2,2,2,2,4485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4485,2,4485,4485,4485,2,4485,2,2,4485,4485,4485,4485,2,4485,2,4485,4485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4485,2,4485,4485,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4485,4485}, + {5444,1794,999,2466,641,2137,3171,4129,715,223,2107,1050,3889,3889,4830,2641,4794,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5775,982,901,1782,1640,1974,1669,99,1251,1688,2053,2274,708,1622,3556,894,1119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,894,2,2,6406,6406,2,2,2,2,2,894,894,894,894,2,839,894,894,894,2,894,2,894,894,2,894,894,894,839,2,2,2,894,894,2,2,2,894,894,894,894,894,2,2,2,2,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5803,2854,4083,2039,1441,232,3329,2148,597,280,2938,3496,487,487,696,843,1591,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3476,3476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3476,3476,2,2,3476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3476,2,2,2,2,2,3476,3476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5849,2753,4125,3526,4149,5602,1925,2971,2117,684,551,283,5748,5537,1920,1920,1920,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {6280,2350,1452,3594,3198,1796,2975,968,1155,5005,5005,821,2410,2410,2410,4406,2530,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3104,2,3104,3104,3104,2,2,2,2,2,2,2,2,2,2,2,2,3104,3104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3104,2,3104,3104,717,2,2,2,2,2,2,2,2,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3821,3821,3104,3104,3104,3104,3104,3821,3104,3104,2,3104,3104,3104,2,3104,3104,2,2,2,2,2,2,3104,3104,3104,2,2,2,2,2,3104,3821,3104,3104,2,2,2,2,2,3821,2,2,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,2,3104,3104,3104,3104,3104,3821,3104,3821,3821,3104,3104,3104,3821,3821,3821,3821,3821,2,2,2,2,3104,3104,2,3104,717,717,717,717,2,3104,3104,3104,3104,2,2,2,2,3104,3104,3104,3104,3104,3104,3104,3104,3104,3104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {6305,1257,3705,2637,1366,526,2307,2419,1906,857,2757,4855,1251,1251,4469,4469,4469,1995,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1403,1403,1403,2,2,2,2,1403,2,2,2,2,2,2,2,1403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1403,2,2,2,2,2,2,2,2,2,2,1403,2,1403,2,2,2,2,2,2,2,2,2,2,2,2,1403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1403,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1403,2,2,2,2,2,2,2}, + {5838,1426,920,320,2216,1897,1111,1071,685,931,3243,2425,3730,568,3730,862,2,2,345,345,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {4517,2905,4274,148,3162,1789,5744,1424,3641,3321,172,100,4400,2530,2583,2794,2,2,2,2,1206,2,2794,2,2,2,2,2,2,2794,2794,2,2794,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2794,2,2,2,2794,2794,2794,2794,2794,2,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2,2,2794,2794,2794,2794,2794,2794,2,2,2,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2794,2,2794,2794,2,2,2,2,2,2,2794,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2794,2794,2,2794,2794,2794,2,2794,2794,2794,2794,2794,2140,2140,2794,2794,2794,2794,2794,2794,2794,2,2,2794,2794,2,2,2,2,2,2,2}, + {6444,2317,739,1363,5943,3777,636,3242,2307,2065,5947,6223,110,110,110,110,2,1020,2893,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1837,1837,1837,2,2,1837,1837,2,2,2,1837,1837,1837,1837,1837,1837,1837,1837,1837,1837,2,2,1837,1837,1837,1837,1837,1837,1837,1837,2,2,2,2,2,1837,2,2,2,2,1837,2,2,2,2,2,1837,2,2,2,1837,1837,1837,1837,1837,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1837,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1837,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {6082,1791,764,4581,2353,3979,760,3061,1937,965,4982,3689,2099,1809,552,552,3316,6819,2,2,3491,3491,3491,3491,3491,3491,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,899,2,2,2,2,2,899,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2099,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2099,2099,2,2099,2,2,2,2,2,2,2,2099,2,2,2,2099,2099,2,2,2,2,2,2099,2,2,2,2,2,2,2,2,2,2,2,2,2099,2,2,2,2,2099,2099,2,2,2,2099,2099,2099,2099,2,2,2,2099,2099,2099,2099,2099,2,2,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099,2099}, + {5851,2331,5843,3055,3415,2664,1767,4171,3970,1104,6287,2997,2621,2621,3518,4538,790,2,902,2946,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2946,2,2,2,2,2946,2946,2,2946,2,2,2,2,2,2946,2,2,2,2946,2946,2946,2,2,2946,2946,2946,2946,2946,2946,2946,2946,2946,2946,2946,2946,2,2946,2946,2946,2946,2946,2946,2946,2946,2,2,2,2946,2946,2946,2946,2946,2946,2,2,2,2,2,2,2946,2946,2946,2,2,2946,2946,2,2,2,2946,2946,2946,2,2946,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {5893,6318,2368,4197,776,1648,1404,5994,530,2306,2339,902,2,352,564,463,564,3672,3672,2,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2} +}; diff --git a/src/external/libCuba/src/divonne/KorobovCoeff.c-2423 b/src/external/libCuba/src/divonne/KorobovCoeff.c-2423 new file mode 100644 index 00000000..658b94ac --- /dev/null +++ b/src/external/libCuba/src/divonne/KorobovCoeff.c-2423 @@ -0,0 +1,267 @@ +#define KOROBOV_MINDIM 2 +#define KOROBOV_MAXDIM 33 +#define MAXPRIME 2423 + +#define Hash(x) ((4973 - x)*(-47 + x))/25245 + +static int prime[] = { + FIRST,47,53,59,61,67,73,79,83,89,97,101,103,109,113,127,131,137,139,149, + 151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241, + 251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353, + 359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461, + 463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587, + 593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691, + 701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823, + 827,829,839,853,857,859,863,877,881,887,907,911,919,929,937,941,947,953, + 967,971,977,983,991,997,1009,1019,1021,1033,1039,1051,1061,1069,1087, + 1091,1097,1103,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201, + 1217,1229,1237,1249,1259,1277,1279,1289,1297,1307,1319,1327,1361,1367, + 1373,1381,1399,1409,1423,1427,1429,1439,1453,1459,1481,1489,1499,1511, + 1523,1543,1553,1567,1579,1597,1607,1621,1637,1657,1663,1669,1697,1709, + 1723,1741,1759,1777,1789,1811,1831,1847,1867,1889,1907,1931,1951,1973, + 1999,2027,2053,2081,2111,2143,2179,2221,2269,2333,MarkLast(2423) +}; + +static short coeff[][32] = { + {13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2}, + {23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14}, + {18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5}, + {17,21,7,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,6,2,2,2,17,7}, + {18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2}, + {27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6}, + {29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2}, + {30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2}, + {35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17}, + {39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2}, + {37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2}, + {45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2}, + {35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10}, + {29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25}, + {50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2}, + {31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2}, + {39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2}, + {44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16}, + {46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15}, + {62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9}, + {46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2}, + {64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2}, + {74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58}, + {70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2}, + {81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2}, + {64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2}, + {68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2}, + {94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66}, + {94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8}, + {89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32}, + {70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63}, + {70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2}, + {71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11}, + {109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55}, + {75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2}, + {80,38,62,66,39,59,2,36,48,33,2,2,41,2,48,48,2,2,2,2,2,2,48,2,2,2,2,2,2,2,2,2}, + {81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56}, + {109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2}, + {81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13}, + {119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54}, + {115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33}, + {119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65}, + {121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2}, + {129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16}, + {128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98}, + {101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2}, + {106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2}, + {105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79}, + {109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2}, + {115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80}, + {119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2}, + {121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2}, + {155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96}, + {179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39}, + {136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36}, + {131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91}, + {165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41}, + {169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37}, + {135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146}, + {144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2}, + {145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2}, + {191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2}, + {186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2}, + {151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143}, + {144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136}, + {189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2}, + {165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95}, + {169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2}, + {211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2}, + {154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2}, + {169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2}, + {229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71}, + {165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2}, + {221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52}, + {230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97}, + {181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2}, + {239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144}, + {234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47}, + {179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2}, + {246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103}, + {239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2}, + {177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195}, + {259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2}, + {264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2}, + {264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284}, + {194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2}, + {196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2}, + {271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2}, + {288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2}, + {311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113}, + {311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2}, + {176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2}, + {283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2}, + {334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2}, + {240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263}, + {246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2}, + {229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2}, + {251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185}, + {232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90}, + {246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2}, + {322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101}, + {264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83}, + {254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88}, + {341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125}, + {355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53}, + {349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125}, + {283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2}, + {287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22}, + {284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285}, + {359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2}, + {288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2}, + {277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2}, + {292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2}, + {282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323}, + {282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2}, + {374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122}, + {288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167}, + {286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2}, + {398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2}, + {390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2}, + {408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2}, + {417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2}, + {456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158}, + {432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234}, + {437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139}, + {434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2}, + {453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252}, + {438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81}, + {324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2}, + {478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2}, + {485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2}, + {378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2}, + {495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2}, + {485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2}, + {507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2}, + {380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445}, + {507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2}, + {509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2}, + {434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401}, + {542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217}, + {546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456}, + {555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2}, + {576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206}, + {622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2}, + {445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528}, + {425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2}, + {437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2}, + {610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6}, + {612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343}, + {486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2}, + {462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2}, + {639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2}, + {521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383}, + {672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2}, + {791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222}, + {539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84}, + {744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2}, + {468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2}, + {563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79}, + {781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2}, + {818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2}, + {901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418}, + {859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2} +}; diff --git a/src/external/libCuba/src/divonne/KorobovCoeff.c-3319 b/src/external/libCuba/src/divonne/KorobovCoeff.c-3319 new file mode 100644 index 00000000..286cb280 --- /dev/null +++ b/src/external/libCuba/src/divonne/KorobovCoeff.c-3319 @@ -0,0 +1,356 @@ +#define KOROBOV_MINDIM 2 +#define KOROBOV_MAXDIM 33 +#define MAXPRIME 3319 + +#define Hash(x) ((6967 - x)*(-47 + x))/36952 + +static int prime[] = { + FIRST,47,53,59,61,67,73,79,83,89,97,101,107,113,127,131,137,139,149, + 151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241, + 251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353, + 359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461, + 463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587, + 593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691, + 701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823, + 827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947, + 953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049, + 1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151, + 1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249, + 1259,1277,1279,1283,1291,1297,1307,1319,1321,1327,1361,1367,1373,1381, + 1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1493, + 1499,1511,1523,1531,1543,1549,1559,1567,1579,1583,1597,1607,1613,1621, + 1637,1657,1663,1667,1669,1693,1697,1699,1709,1723,1733,1747,1753,1759, + 1777,1787,1801,1811,1823,1831,1847,1861,1867,1877,1889,1901,1913,1931, + 1933,1949,1951,1973,1979,1993,2003,2017,2029,2039,2053,2069,2081,2099, + 2111,2129,2137,2153,2161,2179,2203,2207,2221,2237,2243,2267,2273,2293, + 2309,2333,2339,2351,2371,2389,2399,2417,2437,2459,2473,2503,2521,2531, + 2549,2557,2591,2609,2621,2647,2671,2693,2713,2741,2767,2789,2819,2843, + 2879,2897,2927,2963,2999,3037,3079,3121,3181,3229,MarkLast(3319) +}; + +static short coeff[][32] = { + {13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2}, + {23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14}, + {18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5}, + {17,21,7,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,6,2,2,2,17,7}, + {18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2}, + {27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6}, + {29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2}, + {30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2}, + {35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17}, + {39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2}, + {41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2}, + {35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10}, + {29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25}, + {50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2}, + {31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2}, + {39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2}, + {44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16}, + {46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15}, + {62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9}, + {46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2}, + {64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2}, + {74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58}, + {70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2}, + {81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2}, + {64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2}, + {68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2}, + {94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66}, + {94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8}, + {89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32}, + {70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63}, + {70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2}, + {71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11}, + {109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55}, + {75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2}, + {80,38,62,66,39,59,2,36,48,33,2,2,41,2,48,48,2,2,2,2,2,2,48,2,2,2,2,2,2,2,2,2}, + {81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56}, + {109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2}, + {81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13}, + {119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54}, + {115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33}, + {119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65}, + {121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2}, + {129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16}, + {128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98}, + {101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2}, + {106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2}, + {105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79}, + {109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2}, + {115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80}, + {119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2}, + {121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2}, + {155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96}, + {179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39}, + {136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36}, + {131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91}, + {165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41}, + {169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37}, + {135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146}, + {144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2}, + {145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2}, + {191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2}, + {186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2}, + {151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143}, + {144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136}, + {189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2}, + {165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95}, + {169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2}, + {211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2}, + {154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2}, + {169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2}, + {229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71}, + {165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2}, + {221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52}, + {230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97}, + {181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2}, + {239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144}, + {234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47}, + {179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2}, + {246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103}, + {239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2}, + {177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195}, + {259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2}, + {264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2}, + {264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284}, + {194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2}, + {196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2}, + {271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2}, + {288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2}, + {311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113}, + {311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2}, + {176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2}, + {283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2}, + {334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2}, + {240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263}, + {246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2}, + {229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2}, + {251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185}, + {232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90}, + {246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2}, + {322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101}, + {264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83}, + {254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88}, + {341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125}, + {355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53}, + {349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125}, + {283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2}, + {287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22}, + {284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285}, + {359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2}, + {288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2}, + {277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2}, + {292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2}, + {282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323}, + {299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2}, + {282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2}, + {374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122}, + {288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177}, + {288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167}, + {286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2}, + {407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119}, + {398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2}, + {390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2}, + {393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2}, + {408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2}, + {415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206}, + {417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2}, + {456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158}, + {307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234}, + {437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139}, + {434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2}, + {453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252}, + {438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81}, + {324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2}, + {335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2}, + {360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2}, + {478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2}, + {485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2}, + {490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2}, + {485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2}, + {364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266}, + {507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2}, + {380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445}, + {507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2}, + {509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2}, + {434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401}, + {542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217}, + {546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165}, + {422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456}, + {522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2}, + {555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2}, + {548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2}, + {445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528}, + {453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2}, + {463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435}, + {448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6}, + {612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343}, + {486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2}, + {612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2}, + {670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2}, + {678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2}, + {512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2}, + {660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512}, + {669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383}, + {693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2}, + {672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2}, + {703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2}, + {709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222}, + {587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2}, + {741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798}, + {539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2}, + {580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207}, + {765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226}, + {587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493}, + {841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352}, + {468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2}, + {792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79}, + {802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2}, + {781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2}, + {780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2}, + {622,309,913,550,994,90,257,588,29,526,526,526,496,496,576,2,2,2,2,2,182,182,182,2,2,447,447,447,447,447,447,182}, + {593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424}, + {629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418}, + {669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434}, + {610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141}, + {898,559,396,742,51,143,411,221,116,756,756,756,2,2,2,701,701,2,2,2,2,240,225,256,322,322,240,240,240,240,240,322}, + {982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656}, + {642,757,247,513,372,54,546,971,271,61,61,1018,2,143,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {718,359,103,558,684,560,67,35,120,342,680,265,265,265,2,2,265,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2}, + {900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {940,226,320,666,269,54,542,174,109,290,754,524,649,2,202,2,2,2,2,2,2,2,776,202,776,776,776,2,2,202,202,202}, + {672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523}, + {982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394}, + {1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2}, + {738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234}, + {1028,730,807,119,209,146,230,498,164,309,309,2,2,2,693,912,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {802,298,672,424,104,623,152,159,476,760,66,2,2,2,215,215,490,490,490,2,2,2,2,2,490,490,490,490,490,490,490,490}, + {1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2}, + {1078,527,589,244,170,892,827,606,1165,773,189,2,2,240,22,2,2,2,2,2,2,759,621,621,621,621,621,621,621,621,621,621}, + {1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2}, + {1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2}, + {1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2}, + {1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2}, + {820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2}, + {1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847}, + {1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953}, + {966,590,140,297,189,844,633,12,847,742,742,244,281,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2} +}; diff --git a/src/external/libCuba/src/divonne/KorobovCoeff.c-5879 b/src/external/libCuba/src/divonne/KorobovCoeff.c-5879 new file mode 100644 index 00000000..fc4588e1 --- /dev/null +++ b/src/external/libCuba/src/divonne/KorobovCoeff.c-5879 @@ -0,0 +1,571 @@ +#define KOROBOV_MINDIM 2 +#define KOROBOV_MAXDIM 33 +#define MAXPRIME 5879 + +#define Hash(x) ((12013 - x)*(-47 + x))/68400 + +static int prime[] = { + FIRST,47,53,59,67,71,73,83,89,97,101,103,109,113,127,131,137,139,149, + 151,157,163,167,173,179,181,191,197,199,211,223,227,229,233,239,241,251, + 257,263,269,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367, + 373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467, + 479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599, + 601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709, + 719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829, + 839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967, + 971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061, + 1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163, + 1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277, + 1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373, + 1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481, + 1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571, + 1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667, + 1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783, + 1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889, + 1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003, + 2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111, + 2113,2129,2131,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239, + 2243,2251,2267,2269,2273,2281,2293,2297,2309,2311,2333,2339,2347,2357, + 2371,2377,2383,2393,2399,2411,2423,2437,2441,2447,2459,2467,2477,2503, + 2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633, + 2647,2657,2659,2671,2677,2687,2699,2707,2719,2729,2741,2749,2753,2767, + 2777,2791,2803,2819,2833,2837,2843,2857,2861,2879,2887,2897,2909,2917, + 2927,2939,2953,2963,2971,2999,3001,3011,3023,3037,3041,3061,3067,3079, + 3089,3109,3119,3121,3137,3163,3167,3169,3187,3191,3209,3221,3229,3251, + 3259,3271,3299,3301,3307,3319,3331,3347,3359,3371,3389,3391,3413,3433, + 3449,3457,3463,3469,3491,3499,3517,3529,3547,3559,3571,3583,3593,3613, + 3631,3643,3659,3671,3691,3701,3719,3733,3739,3761,3779,3793,3803,3821, + 3833,3853,3863,3881,3907,3917,3931,3947,3967,3989,4001,4013,4027,4049, + 4073,4079,4099,4127,4139,4157,4177,4201,4211,4231,4253,4271,4289,4297, + 4327,4349,4373,4391,4409,4423,4451,4481,4493,4519,4547,4567,4591,4621, + 4637,4663,4691,4721,4733,4759,4793,4817,4861,4877,4909,4943,4973,5003, + 5039,5077,5113,5147,5189,5231,5273,5323,5381,5431,5483,5557,5623,5737, + MarkLast(5879) +}; + +static short coeff[][32] = { + {13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2}, + {23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14}, + {18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5}, + {18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2}, + {21,22,7,21,2,20,20,2,2,2,2,22,2,2,2,2,2,2,2,6,6,21,2,2,2,2,2,2,2,2,6,6}, + {27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6}, + {30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2}, + {35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17}, + {39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2}, + {37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2}, + {45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2}, + {35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10}, + {29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25}, + {50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2}, + {31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2}, + {39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2}, + {44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16}, + {46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15}, + {62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9}, + {46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2}, + {64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2}, + {74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58}, + {70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2}, + {71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2}, + {64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2}, + {68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2}, + {94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66}, + {94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8}, + {89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32}, + {70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63}, + {70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2}, + {71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11}, + {109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55}, + {75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2}, + {81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56}, + {109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2}, + {81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13}, + {119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54}, + {115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33}, + {119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65}, + {121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2}, + {129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16}, + {128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98}, + {101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2}, + {106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2}, + {105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79}, + {109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2}, + {115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80}, + {119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2}, + {121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2}, + {155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96}, + {179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39}, + {136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36}, + {131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91}, + {165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41}, + {169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37}, + {135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146}, + {144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2}, + {145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2}, + {191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2}, + {186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2}, + {151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143}, + {144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136}, + {189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2}, + {165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95}, + {169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2}, + {211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2}, + {154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2}, + {169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2}, + {229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71}, + {165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2}, + {221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52}, + {230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97}, + {181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2}, + {239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144}, + {234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47}, + {179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2}, + {246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103}, + {239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2}, + {177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195}, + {259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2}, + {264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2}, + {264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284}, + {194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2}, + {196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2}, + {271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2}, + {288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2}, + {311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113}, + {311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2}, + {176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2}, + {283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2}, + {334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2}, + {240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263}, + {246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2}, + {229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2}, + {251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185}, + {232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90}, + {246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2}, + {322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101}, + {264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83}, + {254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88}, + {341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125}, + {355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53}, + {349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125}, + {283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2}, + {287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22}, + {284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285}, + {359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2}, + {288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2}, + {277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2}, + {292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2}, + {282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323}, + {299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2}, + {282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2}, + {374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122}, + {288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177}, + {288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167}, + {286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2}, + {407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119}, + {398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2}, + {390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2}, + {393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2}, + {408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2}, + {415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206}, + {417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2}, + {456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158}, + {307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234}, + {437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139}, + {434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2}, + {453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252}, + {438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81}, + {324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2}, + {335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2}, + {360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2}, + {478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2}, + {485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2}, + {490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2}, + {474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {498,447,112,241,552,119,227,189,140,140,140,140,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {505,132,169,418,342,28,319,301,172,530,317,317,335,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2}, + {397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2}, + {485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2}, + {364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266}, + {507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2}, + {380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445}, + {507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2}, + {509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2}, + {434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401}, + {542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217}, + {546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165}, + {422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456}, + {522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2}, + {555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2}, + {400,136,112,136,273,277,205,578,122,122,230,230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2}, + {576,421,115,52,253,373,17,657,43,178,178,58,485,485,485,485,485,485,2,2,2,159,159,159,159,2,619,2,2,2,2,2}, + {576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206}, + {548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2}, + {445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528}, + {453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2}, + {456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {434,372,239,508,478,26,375,255,151,151,650,112,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2}, + {463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {611,211,491,224,47,54,124,268,271,271,223,2,2,2,2,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,2}, + {590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {478,388,612,404,491,561,180,80,262,58,94,2,2,275,2,2,2,2,2,151,2,2,2,2,2,312,312,312,2,2,2,275}, + {629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435}, + {671,275,392,298,612,328,337,215,58,58,124,2,2,490,392,2,2,2,125,457,457,2,2,2,2,2,2,2,2,2,2,457}, + {448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,246,160,68,737,203,168,628,46,128,358,2,2,2,121,121,2,2,2,2,2,2,560,121,2,2,2,2,2,2,2,121}, + {635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6}, + {612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343}, + {486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2}, + {612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,257,290,122,109,523,95,26,282,49,374,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,2,2}, + {653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2}, + {670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2}, + {678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2}, + {512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2}, + {498,431,217,101,78,143,111,113,181,825,458,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512}, + {669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383}, + {693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2}, + {672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {715,521,636,304,402,459,435,571,611,214,214,43,43,358,2,2,2,2,358,2,2,2,2,2,2,358,358,358,2,2,358,358}, + {768,224,219,425,467,147,151,643,316,263,263,263,263,263,2,2,2,2,2,272,139,2,2,2,2,2,2,2,2,2,272,53}, + {555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {690,206,572,877,600,129,288,52,19,147,222,222,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2}, + {703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2}, + {709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222}, + {587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2}, + {741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798}, + {539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,229,328,91,272,815,483,749,468,2,92,92,4,92,2,2,2,258,258,258,2,258,258,2,2,2,2,258,2,2,258,258}, + {580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207}, + {457,520,93,460,275,525,300,184,354,147,147,147,147,179,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84}, + {765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226}, + {833,634,228,520,113,329,279,420,581,2,2,385,385,110,450,2,733,2,2,2,561,561,2,561,2,2,2,2,2,2,2,2}, + {587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493}, + {744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2}, + {841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352}, + {468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2}, + {610,289,503,744,775,512,605,454,484,2,2,2,444,466,145,631,2,631,631,631,631,631,631,631,631,631,2,2,631,631,631,858}, + {792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79}, + {795,185,350,211,82,537,106,680,62,2,2,537,423,423,423,2,2,501,501,2,501,2,501,2,2,2,2,2,2,2,2,2}, + {633,425,295,548,497,163,381,461,89,2,2,831,583,896,38,2,625,2,2,2,276,276,2,2,276,2,2,2,2,2,2,2}, + {767,318,84,97,208,387,423,196,417,2,396,396,396,396,396,128,128,2,2,2,328,328,4,4,4,4,101,2,2,328,82,16}, + {802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2}, + {781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2}, + {807,377,237,443,388,286,158,349,491,32,32,260,260,260,2,2,260,615,615,615,2,2,260,260,260,260,260,615,615,615,615,615}, + {780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2}, + {788,497,334,93,319,169,273,540,904,2,903,569,569,569,272,272,2,2,2,2,571,571,571,571,571,571,571,571,571,571,571,571}, + {814,652,456,774,624,870,27,739,464,2,108,578,578,561,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2}, + {593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424}, + {629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418}, + {669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434}, + {610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {929,360,102,893,329,136,515,33,170,581,268,35,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {655,330,324,151,166,431,58,174,142,115,1003,66,724,778,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {623,330,182,489,212,223,741,490,40,412,801,681,681,801,2,2,71,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2}, + {859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,397,121,526,321,660,848,729,357,137,268,711,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,521}, + {670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {678,274,695,790,169,701,707,1084,470,123,846,846,217,121,317,2,2,2,83,83,83,83,83,83,83,83,83,2,2,2,2,2}, + {877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {882,417,475,424,311,646,346,207,74,157,590,356,2,2,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141}, + {693,726,117,167,535,725,224,78,716,100,460,299,2,2,2,2,921,744,2,2,2,2,2,378,2,2,178,178,178,2,178,178}, + {697,540,358,391,932,309,103,73,35,353,353,503,2,2,353,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656}, + {695,881,335,126,429,476,772,667,974,98,433,49,129,129,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544}, + {705,770,134,178,940,944,654,600,46,797,797,591,2,145,616,2,2,2,2,2,2,389,389,2,122,2,2,2,389,389,909,389}, + {988,271,675,163,379,108,48,472,870,485,485,18,2,485,528,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {923,397,722,186,203,575,24,144,36,526,206,787,12,100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2}, + {900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {903,259,153,106,289,916,861,41,441,368,131,131,262,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {945,358,160,196,82,403,362,195,376,877,521,336,521,77,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {753,242,194,619,345,94,463,485,163,85,412,575,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {915,210,456,377,303,237,225,521,621,175,569,20,124,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523}, + {982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,604,126,65,633,657,22,776,161,45,725,44,4,2,2,2,2,2,2,2,2,2,269,269,2,2,2,2,2,2,2,2}, + {745,600,284,1117,459,1135,300,52,845,331,334,334,334,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {986,241,233,45,721,325,350,222,35,1065,1065,1065,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {981,626,987,827,466,458,578,346,475,223,223,223,342,1058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728}, + {949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {992,723,625,251,431,544,309,466,700,644,484,837,904,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394}, + {999,674,212,673,279,579,462,754,89,866,345,110,110,887,2,2,2,2,2,707,707,2,2,2,2,2,2,2,2,2,2,707}, + {1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2}, + {1005,260,389,960,501,714,118,73,334,1019,704,204,504,205,822,822,2,2,2,2,2,2,2,2,2,2,684,2,2,2,2,2}, + {738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1010,937,449,474,154,456,766,318,275,444,709,2,778,778,778,806,779,779,2,2,2,2,2,2,2,2,806,2,2,2,287,287}, + {1011,780,134,945,183,42,741,25,252,164,205,222,222,222,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234}, + {722,375,264,390,515,498,1161,391,884,551,238,2,2,825,549,2,2,2,551,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1022,409,93,359,983,345,280,280,104,940,940,2,2,382,1039,2,2,2,2,831,2,2,2,2,2,2,2,2,2,2,2,2}, + {997,525,680,120,466,728,288,110,1082,544,572,2,2,663,290,290,2,2,754,2,2,2,2,2,582,582,582,582,582,2,2,2}, + {1055,395,795,561,222,85,294,433,377,89,89,2,2,2,456,821,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,788,124,501,561,1015,419,787,48,620,705,2,2,2,2,88,18,2,215,215,215,2,2,215,215,2,2,2,215,2,2,2}, + {807,433,721,434,449,242,170,842,21,4,642,2,2,2,2,2,4,4,4,4,2,856,856,856,885,885,856,856,856,856,856,885}, + {1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1017,568,930,1113,556,1299,114,881,690,475,641,2,2,2,779,779,103,2,528,2,2,2,2,2,2,528,528,2,2,910,910,2}, + {814,473,286,752,476,779,420,569,742,164,490,2,2,2,793,812,812,812,2,812,812,2,2,526,526,812,526,2,2,2,526,526}, + {818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2}, + {820,249,292,1017,1017,143,403,37,433,456,515,2,2,69,640,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2}, + {865,1132,428,582,254,408,536,376,825,116,116,1266,1266,1266,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {635,503,594,203,456,1246,221,396,1151,178,66,2,781,587,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2}, + {830,397,932,519,818,113,367,694,88,535,535,414,343,175,2,2,2,2,2,2,2,2,2,2,414,864,2,2,864,864,864,864}, + {793,463,329,730,390,551,968,92,511,470,424,563,672,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2}, + {1090,255,271,110,159,235,158,236,271,815,1300,416,416,416,2,2,416,416,2,2,2,399,791,791,2,791,2,2,2,2,791,791}, + {1058,417,271,172,312,363,184,191,28,183,759,214,759,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,846,985,1085,764,124,764,51,874,612,478,801,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2}, + {1106,662,258,190,1315,214,530,263,318,904,877,1317,318,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1206,469,299,1052,655,114,189,213,321,188,64,475,475,2,2,662,662,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2}, + {1076,596,553,545,79,727,881,121,298,169,639,368,695,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1130,177,84,673,350,543,543,95,128,954,430,884,884,2,884,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2}, + {1091,946,437,51,527,802,597,639,587,645,510,586,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,168}, + {1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1103,276,174,408,233,170,955,108,530,354,585,38,677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,476}, + {1167,478,1169,1053,563,371,108,772,413,497,1338,991,660,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2}, + {1116,331,280,422,1109,341,570,243,849,241,566,61,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1099,1187,300,240,268,413,1366,634,184,768,773,365,783,224,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {904,660,1283,46,33,124,416,218,152,970,1241,305,307,307,307,260,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1127,553,287,58,739,99,514,739,766,42,580,241,598,598,936,936,936,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2}, + {1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847}, + {1297,600,419,985,846,493,186,109,147,239,197,762,762,327,327,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1181,615,482,653,238,130,313,506,98,1314,730,730,730,730,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {921,613,628,1288,111,150,191,233,633,83,387,602,105,394,2,2,2,2,2,2,2,351,2,2,351,351,351,2,2,2,351,351}, + {1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953}, + {1160,617,505,1205,374,906,23,408,194,91,91,91,585,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1203,1101,497,352,254,309,464,123,607,1080,265,1145,1145,1145,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1210,656,1026,782,802,442,1319,734,794,165,165,796,93,796,2,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {963,646,721,1161,219,667,1088,485,692,692,663,535,553,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2}, + {941,231,1038,309,173,770,413,560,855,660,721,1103,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,2,2}, + {1213,305,656,983,1399,1196,692,986,9,339,754,308,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1330,671,528,831,1426,735,33,425,364,119,363,978,2,761,483,476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1190,286,513,881,390,215,387,130,749,554,1110,519,160,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {893,560,132,1420,721,191,568,799,412,22,322,93,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {882,1038,211,110,942,337,1305,1225,661,183,381,381,2,2,2,2,347,2,2,2,2,2,2,2,600,431,431,431,431,431,431,431}, + {1208,486,343,725,677,1204,135,139,924,170,1111,317,2,2,2,2,202,706,202,107,107,107,2,2,706,706,107,107,2,2,2,706}, + {1259,1017,456,298,443,838,137,744,551,334,36,951,2,2,2,699,718,2,2,984,2,2,2,2,2,2,984,984,2,2,2,2}, + {1212,1186,641,284,565,636,895,82,690,117,184,184,2,2,2,397,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,370,132,635,381,47,537,179,1192,301,1282,33,2,2,2,1553,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2}, + {1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2}, + {1223,434,851,152,140,1495,190,397,925,37,1080,430,2,2,204,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {939,1070,1288,254,973,901,321,109,568,713,336,988,2,946,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1276,636,569,258,325,675,342,85,88,579,833,833,833,833,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2}, + {1288,1398,789,514,151,600,1618,1194,1419,441,234,204,1191,438,828,2,857,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1401,402,525,293,97,223,452,808,61,169,1023,1023,886,886,1023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1001,644,263,164,136,939,624,95,489,1023,1107,331,331,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1401,741,509,797,47,157,1256,482,1513,899,736,780,780,210,2,2,2,2,783,783,2,2,2,2,2,2,2,2,2,2,2,2}, + {1047,880,369,402,641,446,639,586,277,396,419,275,825,820,2,2,2,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1273,701,831,1294,1580,137,162,415,563,11,92,116,116,116,2,2,2,2,2,2,1029,1029,1029,504,504,877,877,877,877,877,1029,1029}, + {1335,400,315,412,172,125,568,1024,58,601,398,985,640,577,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,1198,146,529,284,1286,160,135,75,686,648,1425,821,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1422,838,234,554,736,243,344,526,1108,33,1303,699,249,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1279,681,423,813,806,269,412,420,985,485,761,1013,649,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {938,614,523,557,898,624,178,461,287,985,371,371,260,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1040,998,324,93,887,497,1326,443,152,1193,595,80,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1027,1128,114,395,357,417,848,22,389,1257,734,838,838,301,900,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1040,420,960,882,64,661,292,146,976,427,689,248,248,248,638,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861}, + {1041,1090,651,130,72,389,171,237,516,777,937,937,937,168,168,2,336,2,2,2,2,2,2,2,2,2,992,2,992,2,992,2}, + {987,1280,1245,1300,926,676,56,546,541,690,84,42,1000,1383,1383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1058,454,1557,191,129,297,695,1390,1274,460,923,923,923,2,4,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2}, + {1327,572,282,1022,907,1276,409,643,1050,633,187,187,187,2,228,45,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2}, + {1395,529,461,402,194,392,122,781,111,162,780,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1062,212,784,63,252,873,1302,1108,1380,84,1375,1375,1375,2,2,2,375,374,2,980,2,2,2,980,980,980,2,2,2,2,2,2}, + {1384,549,430,781,946,879,901,924,741,114,14,451,36,2,2,2,2,287,287,287,803,803,803,803,2,2,2,803,803,803,803,803}, + {1413,627,1329,1092,526,197,31,417,1149,981,964,1003,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2}, + {1084,1174,1601,949,910,960,500,461,1290,23,1042,636,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1091,793,1353,208,506,599,846,503,1011,247,289,61,1050,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1533,978,284,156,914,162,685,1184,252,1375,189,256,640,2,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,398,791,1170,76,661,408,259,756,495,79,553,10,10,1532,1532,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1040,704,618,854,374,1470,274,383,941,519,351,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1427,988,498,1529,99,678,1323,149,33,426,543,543,335,1507,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,349,490,266,144,220,599,437,743,764,647,1128,605,265,324,324,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1118,724,1322,405,199,614,1087,885,1313,317,769,660,660,1158,535,2,2,2,373,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,772,743,488,346,126,784,584,943,153,311,133,133,969,605,605,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2}, + {1441,791,233,141,141,316,89,296,462,1263,758,482,599,599,578,341,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2}, + {1413,406,700,547,1166,250,518,543,104,331,205,205,691,691,2,2,118,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1485,400,1497,168,82,680,1103,554,249,702,493,101,296,236,2,236,236,944,944,2,2,394,2,2,2,2,2,2,2,2,2,2}, + {1139,809,117,522,955,1096,1120,1470,116,184,1565,1565,557,557,2,2,2,2,2,829,1326,2,2,2,2,2,2,2,2,2,2,2}, + {1142,984,1044,590,340,241,662,357,366,1305,2,125,631,474,2,2,2,980,2,2,2,2,2,2,2,2,2,2,2,2,2,1273}, + {1487,1010,320,966,785,847,954,1060,138,856,966,966,966,703,2,703,703,2,2,2,2,2,2,2,2,2,2,2,2,1279,2,1279}, + {1495,1178,874,415,1100,368,1057,1228,562,215,31,31,680,680,680,1208,2,2,2,2,2,2,2,2,1208,2,2,2,2,1208,1208,2}, + {1617,289,1033,169,355,260,30,45,721,906,88,44,44,418,417,218,2,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1623,499,308,1058,1184,1230,63,1515,433,110,763,763,422,954,954,954,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1531,621,210,755,482,82,1308,317,427,168,2,232,116,190,701,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,701}, + {1532,575,1245,360,249,630,133,1406,920,1539,63,63,76,82,82,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,785,118,93,1491,988,275,53,1328,26,2,2,240,647,240,761,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1478,722,113,1534,1751,115,1728,1234,777,282,508,508,1184,63,1184,855,855,2,2,2,738,738,578,578,2,2,2,2,2,2,2,2}, + {1482,961,1093,556,1746,628,427,689,510,751,684,37,37,1229,1256,882,1507,1507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1228,425,1030,699,407,171,568,925,1104,97,2,2,1286,1286,1286,502,2,1219,1219,1219,1290,2,1219,1219,1219,1219,2,2,2,59,2,2}, + {1547,657,777,695,1254,224,933,367,212,385,2,2,2,1422,749,245,885,710,2,2,710,710,710,45,710,710,710,710,2,336,710,2}, + {1559,462,850,289,1570,71,512,858,810,835,2,2,2,2,1028,1205,1205,546,546,546,1205,1205,1205,1205,1205,2,1205,1205,1205,1205,1205,1205}, + {1192,888,701,164,131,613,282,237,525,366,2,2,2,2,1737,845,845,750,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1261,1261}, + {1128,393,1522,96,160,581,540,120,441,176,2,2,2,2,2,2,1427,551,1102,1102,328,328,592,592,592,592,592,592,592,592,592,592}, + {1567,1265,372,1633,613,484,243,1523,21,275,2,2,2,431,431,431,431,2,2,978,489,889,889,889,889,889,889,889,2,2,2,2}, + {1522,1422,1017,124,499,451,731,1112,1355,1355,2,2,2,854,854,336,854,336,1297,2,2,2,193,193,193,193,193,2,2,2,2,2}, + {1605,1499,454,1072,686,732,309,295,940,551,2,2,880,264,264,973,2,2,72,314,2,2,2,890,890,2,2,2,2,2,2,2}, + {1598,397,1471,1471,1162,866,236,948,1557,737,2,2,153,737,1408,765,765,608,2,2,2,171,608,608,608,608,2,608,608,2,2,2}, + {1598,434,107,270,148,1317,835,123,642,1236,2,2,67,633,771,878,771,878,878,2,2,2,771,2,2,2,2,2,2,2,2,2}, + {1628,1502,1042,822,80,403,1335,684,464,426,671,671,336,336,336,2,425,896,2,2,2,2,1337,1337,1337,1337,1337,1337,2,2,2,2}, + {1607,1503,1072,471,221,277,854,1236,263,752,2,694,1657,934,553,2,2,2,498,498,2,802,2,46,2,2,2,2,2,2,2,2}, + {1756,1359,698,1584,446,724,729,419,660,1305,2,244,244,244,540,540,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,835,1533,789,1259,174,1497,557,644,203,2,289,604,434,434,434,2,844,844,2,2,2,1111,1111,1111,2,2,2,2,2,2,2}, + {1797,904,172,659,349,177,692,448,1141,990,640,99,1073,806,640,640,2,640,640,911,911,911,640,640,640,640,2,2,2,2,2,2}, + {1276,442,1008,1352,243,162,711,301,552,1002,668,668,384,71,384,384,2,2,2,2,2,727,727,727,777,777,777,777,777,777,2,777}, + {1600,1130,171,1113,813,722,117,990,37,24,969,94,825,1398,1398,1398,1398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1682,449,1067,393,136,854,36,492,637,1053,247,1111,1111,1111,2,247,247,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1601,697,532,408,697,1140,1568,47,1499,780,1171,318,318,318,2,2,2,2,318,318,2,2,2,2,2,2,2,2,2,2,2,2}, + {1283,1078,791,873,655,412,389,835,292,958,1245,678,1611,1519,2,2,185,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245}, + {1822,589,236,205,797,39,241,1048,181,386,102,102,102,111,1361,1361,1361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1342,705,302,595,1200,52,83,647,519,139,103,103,103,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2}, + {1636,974,279,419,893,1608,1491,156,1486,115,730,730,863,509,924,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1732,1771,584,533,297,1056,669,293,146,311,1176,311,590,590,277,2,2,2,2,2,2,2,2,2,539,539,2,2,2,2,2,2}, + {1360,383,1470,502,1010,153,1588,619,1246,396,1107,1107,112,423,423,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2}, + {1747,611,1788,1446,152,1335,710,1040,639,1279,788,788,265,1441,107,2,2,2,2,1441,1441,1441,1441,938,938,938,938,2,2,867,867,1441}, + {1682,867,333,102,628,891,654,506,995,684,961,563,1313,1313,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1875,1576,924,677,461,134,1525,1619,44,701,299,743,728,791,791,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791}, + {1744,1011,935,492,158,1645,795,1056,74,679,367,675,675,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,1229,2,2}, + {1763,1018,1859,432,717,723,874,1294,1050,1800,1237,619,1074,2,10,1237,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1376,652,461,225,361,936,1073,1279,149,619,983,511,1994,2,2,1076,1076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1780,1739,1357,1684,1586,736,208,966,1691,339,339,128,128,2,2,128,128,128,2,2,128,2,2,2,2,1929,2,2,338,2,2,338}, + {1289,907,228,665,1695,1735,489,214,762,1777,321,1674,932,2,2,2,2,1358,709,2,1959,1959,372,2,2,372,372,2,2,372,372,372}, + {1802,1645,453,1079,604,618,334,855,541,167,37,88,849,2,2,518,518,2,2,530,2,2,2,2,2,2,2,119,119,2,2,2}, + {1322,512,560,432,365,87,1835,1137,515,1271,1739,309,309,1229,1229,1229,2,2,2,2,2,2,2,2,416,416,416,416,2,2,2,2}, + {1444,394,1613,796,645,1406,186,158,402,1364,314,588,606,2,577,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1325,1300,1353,1575,33,730,46,1476,84,84,189,457,352,2,1479,2,2,2,2,2,2,2,2,2,2,2,2,1565,2,2,2,2}, + {1343,365,790,1047,983,1015,918,1469,1416,126,1238,1238,1238,1238,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1861,1487,419,97,799,1791,458,1029,370,627,57,414,414,1540,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1480,1131,1089,1688,340,962,505,1816,139,44,1350,403,1385,1996,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1328,601,601,617,554,467,391,1545,162,1361,807,1565,1565,243,1344,2,725,510,510,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1892,441,977,228,1252,604,735,136,889,878,1319,1319,2127,2127,1963,367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1898,787,769,1166,799,479,1066,390,821,1061,201,201,1339,703,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1850,1476,792,840,2037,229,1578,526,431,1485,1450,1001,1001,1001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1948,1530,576,582,1069,119,2131,41,1178,1677,1677,1677,325,346,2,2,2,2,2,2,1401,2,33,2,2,2,2,2,2,71,71,71}, + {1540,791,518,419,1130,1068,299,1386,1378,134,859,859,71,162,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1889,1210,1246,1326,668,1199,77,565,1277,1607,874,1433,1433,77,2,681,2,2,2,2,2,2,2,679,2,2,2,2,2,2,2,2}, + {1520,1107,1082,687,484,1732,676,1595,467,653,1091,428,2113,332,332,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1534,854,2007,1207,947,1773,1571,1505,909,1471,1655,1655,2334,1327,409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2145,1069,662,709,737,1141,1737,827,1384,1628,107,107,1032,277,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1823,1698,1268,623,583,1932,1674,522,529,1862,1281,246,989,246,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1570,1504,1414,1143,1999,1932,1015,1015,556,514,626,79,2,79,1795,1461,1461,2,2,2,2,2,2,2,1461,1461,1461,1461,1461,2,2,2}, + {1976,1433,820,504,421,1007,388,1083,635,82,1524,750,2,2,870,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2008,1773,416,1954,1314,742,1694,505,202,1747,785,375,2,2,2,477,1538,477,2,2,2,2,2,1309,1309,1309,1309,2,2,2,1309,2}, + {1480,807,1596,520,1139,213,1581,460,923,617,1305,939,2,2,2,2,53,53,1589,284,2,2,1589,1589,1589,1589,1589,1589,1589,1589,1589,1589}, + {1628,846,1504,138,464,401,501,506,967,1027,1540,1035,2,1921,1539,1539,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2304,1948,316,1063,237,607,1143,2575,1388,1022,127,251,2,438,1570,1570,1570,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1338,196,1510,1371,1138,957,169,545,1176,1131,2460,1708,541,541,2,363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1736,2186,725,1844,1638,825,592,648,193,1241,462,462,45,264,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2} +}; diff --git a/src/external/libCuba/src/divonne/KorobovCoeff.c-9689 b/src/external/libCuba/src/divonne/KorobovCoeff.c-9689 new file mode 100644 index 00000000..e8ace85e --- /dev/null +++ b/src/external/libCuba/src/divonne/KorobovCoeff.c-9689 @@ -0,0 +1,881 @@ +#define KOROBOV_MINDIM 2 +#define KOROBOV_MAXDIM 33 +#define MAXPRIME 9689 + +#define Hash(x) ((19945 - x)*(-47 + x))/121634 + +static int prime[] = { + FIRST,47,53,59,67,71,79,83,89,97,103,109,113,127,131,137,139,149,151, + 157,163,173,179,181,191,193,199,211,223,227,229,233,239,241,251,257,263, + 269,277,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383, + 389,397,401,409,419,421,431,433,439,443,449,457,461,467,479,487,491,499, + 503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617, + 619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739, + 743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859, + 863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991, + 997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087, + 1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187, + 1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289, + 1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409, + 1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489, + 1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597, + 1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697, + 1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801, + 1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913, + 1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027, + 2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131, + 2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251, + 2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351, + 2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447, + 2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591, + 2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689, + 2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789, + 2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897, + 2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019, + 3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163, + 3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259, + 3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371, + 3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499, + 3511,3517,3527,3529,3533,3539,3547,3557,3571,3581,3583,3593,3607,3613, + 3623,3631,3643,3659,3671,3673,3677,3691,3701,3709,3719,3733,3739,3761, + 3767,3769,3779,3793,3797,3803,3821,3833,3847,3851,3853,3863,3877,3889, + 3907,3911,3917,3929,3943,3947,3967,3989,4001,4003,4007,4013,4019,4027, + 4049,4051,4057,4073,4079,4091,4099,4111,4127,4133,4139,4153,4159,4177, + 4201,4211,4217,4219,4229,4231,4243,4259,4271,4283,4289,4297,4327,4337, + 4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4451,4463,4481, + 4483,4493,4507,4517,4523,4547,4549,4561,4567,4583,4597,4603,4621,4637, + 4639,4651,4663,4673,4691,4703,4721,4723,4733,4751,4759,4783,4787,4789, + 4801,4813,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4943,4957, + 4969,4987,4993,5003,5021,5023,5039,5051,5059,5077,5087,5101,5119,5147, + 5153,5167,5171,5179,5189,5209,5227,5231,5237,5261,5273,5281,5297,5309, + 5323,5333,5347,5351,5381,5387,5399,5413,5431,5437,5449,5471,5479,5501, + 5507,5519,5531,5557,5563,5573,5591,5623,5639,5641,5647,5657,5669,5683, + 5701,5711,5737,5743,5749,5779,5783,5801,5813,5827,5843,5857,5869,5881, + 5903,5923,5927,5953,5981,5987,6007,6011,6029,6037,6053,6067,6089,6101, + 6113,6131,6151,6163,6173,6197,6211,6229,6247,6257,6277,6287,6311,6323, + 6343,6359,6373,6389,6421,6427,6449,6469,6481,6491,6521,6529,6547,6563, + 6581,6599,6619,6637,6653,6673,6691,6709,6733,6737,6763,6781,6803,6823, + 6841,6863,6883,6899,6917,6947,6961,6983,7001,7019,7043,7057,7079,7103, + 7127,7151,7159,7187,7211,7229,7253,7283,7297,7321,7349,7369,7393,7417, + 7433,7459,7487,7507,7537,7561,7583,7607,7639,7669,7687,7717,7741,7759, + 7793,7823,7853,7883,7907,7937,7963,7993,8039,8059,8093,8123,8161,8191, + 8221,8263,8297,8329,8369,8419,8447,8501,8527,8563,8609,8663,8699,8747, + 8803,8849,8893,8963,9029,9091,9157,9239,9319,9413,9533,MarkLast(9689) +}; + +static short coeff[][32] = { + {13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2}, + {23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14}, + {18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5}, + {18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2}, + {21,22,7,21,2,20,20,2,2,2,2,22,2,2,2,2,2,2,2,6,6,21,2,2,2,2,2,2,2,2,6,6}, + {29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2}, + {30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2}, + {35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17}, + {37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2}, + {45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2}, + {35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10}, + {29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25}, + {50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2}, + {31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2}, + {39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2}, + {44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16}, + {46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15}, + {62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9}, + {64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2}, + {74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58}, + {70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2}, + {81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2}, + {64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2}, + {68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2}, + {94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66}, + {94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8}, + {89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32}, + {70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63}, + {70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2}, + {71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11}, + {109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55}, + {75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2}, + {81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56}, + {104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2}, + {81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13}, + {119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54}, + {115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33}, + {119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65}, + {121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2}, + {129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16}, + {128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98}, + {101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2}, + {106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2}, + {105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79}, + {109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2}, + {115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80}, + {119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2}, + {121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2}, + {155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96}, + {179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39}, + {136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36}, + {131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91}, + {165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41}, + {169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37}, + {135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146}, + {144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2}, + {145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2}, + {191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2}, + {186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2}, + {151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143}, + {144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136}, + {189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2}, + {165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95}, + {169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2}, + {211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2}, + {154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2}, + {169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2}, + {229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71}, + {165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2}, + {221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52}, + {230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97}, + {181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2}, + {239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144}, + {234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47}, + {179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2}, + {246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103}, + {239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2}, + {177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195}, + {259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2}, + {264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2}, + {264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284}, + {194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2}, + {196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2}, + {271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2}, + {288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2}, + {311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113}, + {311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2}, + {176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2}, + {283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2}, + {334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2}, + {240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263}, + {246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2}, + {229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2}, + {251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185}, + {232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90}, + {246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2}, + {322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101}, + {264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83}, + {254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88}, + {341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125}, + {355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53}, + {349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125}, + {283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2}, + {287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22}, + {284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285}, + {359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2}, + {288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2}, + {277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2}, + {292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2}, + {282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323}, + {299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2}, + {282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2}, + {374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122}, + {288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177}, + {288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167}, + {286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2}, + {407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119}, + {398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2}, + {390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2}, + {393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2}, + {408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2}, + {415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206}, + {417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2}, + {456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158}, + {307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234}, + {437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139}, + {434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2}, + {453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252}, + {438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81}, + {324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2}, + {335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2}, + {360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2}, + {478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2}, + {485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2}, + {490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2}, + {474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {498,447,112,241,552,119,227,189,140,140,140,140,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {505,132,169,418,342,28,319,301,172,530,317,317,335,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2}, + {397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2}, + {485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2}, + {364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266}, + {507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2}, + {380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445}, + {507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2}, + {509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2}, + {430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2}, + {434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401}, + {542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217}, + {546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165}, + {422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456}, + {522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2}, + {555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2}, + {400,136,112,136,273,277,205,578,122,122,230,230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2}, + {576,421,115,52,253,373,17,657,43,178,178,58,485,485,485,485,485,485,2,2,2,159,159,159,159,2,619,2,2,2,2,2}, + {576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206}, + {548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2}, + {445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528}, + {453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2}, + {456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {434,372,239,508,478,26,375,255,151,151,650,112,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2}, + {463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {611,211,491,224,47,54,124,268,271,271,223,2,2,2,2,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,2}, + {590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {478,388,612,404,491,561,180,80,262,58,94,2,2,275,2,2,2,2,2,151,2,2,2,2,2,312,312,312,2,2,2,275}, + {629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435}, + {671,275,392,298,612,328,337,215,58,58,124,2,2,490,392,2,2,2,125,457,457,2,2,2,2,2,2,2,2,2,2,457}, + {448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,246,160,68,737,203,168,628,46,128,358,2,2,2,121,121,2,2,2,2,2,2,560,121,2,2,2,2,2,2,2,121}, + {635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6}, + {612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343}, + {486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2}, + {612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,257,290,122,109,523,95,26,282,49,374,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,2,2}, + {653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2}, + {670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2}, + {678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2}, + {512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2}, + {498,431,217,101,78,143,111,113,181,825,458,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512}, + {669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383}, + {693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2}, + {672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {715,521,636,304,402,459,435,571,611,214,214,43,43,358,2,2,2,2,358,2,2,2,2,2,2,358,358,358,2,2,358,358}, + {768,224,219,425,467,147,151,643,316,263,263,263,263,263,2,2,2,2,2,272,139,2,2,2,2,2,2,2,2,2,272,53}, + {555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {690,206,572,877,600,129,288,52,19,147,222,222,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2}, + {703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2}, + {709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222}, + {587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2}, + {741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798}, + {539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2}, + {555,229,328,91,272,815,483,749,468,2,92,92,4,92,2,2,2,258,258,258,2,258,258,2,2,2,2,258,2,2,258,258}, + {580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207}, + {457,520,93,460,275,525,300,184,354,147,147,147,147,179,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84}, + {765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226}, + {833,634,228,520,113,329,279,420,581,2,2,385,385,110,450,2,733,2,2,2,561,561,2,561,2,2,2,2,2,2,2,2}, + {587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493}, + {744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2}, + {841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352}, + {468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2}, + {610,289,503,744,775,512,605,454,484,2,2,2,444,466,145,631,2,631,631,631,631,631,631,631,631,631,2,2,631,631,631,858}, + {792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79}, + {795,185,350,211,82,537,106,680,62,2,2,537,423,423,423,2,2,501,501,2,501,2,501,2,2,2,2,2,2,2,2,2}, + {633,425,295,548,497,163,381,461,89,2,2,831,583,896,38,2,625,2,2,2,276,276,2,2,276,2,2,2,2,2,2,2}, + {767,318,84,97,208,387,423,196,417,2,396,396,396,396,396,128,128,2,2,2,328,328,4,4,4,4,101,2,2,328,82,16}, + {802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2}, + {781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2}, + {807,377,237,443,388,286,158,349,491,32,32,260,260,260,2,2,260,615,615,615,2,2,260,260,260,260,260,615,615,615,615,615}, + {780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2}, + {788,497,334,93,319,169,273,540,904,2,903,569,569,569,272,272,2,2,2,2,571,571,571,571,571,571,571,571,571,571,571,571}, + {622,309,913,550,994,90,257,588,29,526,526,526,496,496,576,2,2,2,2,2,182,182,182,2,2,447,447,447,447,447,447,182}, + {814,652,456,774,624,870,27,739,464,2,108,578,578,561,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2}, + {593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424}, + {629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418}, + {669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434}, + {610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {929,360,102,893,329,136,515,33,170,581,268,35,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {655,330,324,151,166,431,58,174,142,115,1003,66,724,778,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {623,330,182,489,212,223,741,490,40,412,801,681,681,801,2,2,71,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2}, + {859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {667,397,121,526,321,660,848,729,357,137,268,711,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,521}, + {939,783,796,676,259,643,103,289,15,471,80,80,2,239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,888}, + {670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {678,274,695,790,169,701,707,1084,470,123,846,846,217,121,317,2,2,2,83,83,83,83,83,83,83,83,83,2,2,2,2,2}, + {877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {882,417,475,424,311,646,346,207,74,157,590,356,2,2,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141}, + {844,244,672,489,839,263,14,233,422,392,8,392,2,2,2,2,2,2,815,815,815,815,257,257,105,105,2,2,2,815,815,815}, + {693,726,117,167,535,725,224,78,716,100,460,299,2,2,2,2,921,744,2,2,2,2,2,378,2,2,178,178,178,2,178,178}, + {898,559,396,742,51,143,411,221,116,756,756,756,2,2,2,701,701,2,2,2,2,240,225,256,322,322,240,240,240,240,240,322}, + {697,540,358,391,932,309,103,73,35,353,353,503,2,2,353,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656}, + {695,881,335,126,429,476,772,667,974,98,433,49,129,129,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544}, + {859,361,215,569,255,378,543,436,220,34,105,105,816,816,816,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {705,770,134,178,940,944,654,600,46,797,797,591,2,145,616,2,2,2,2,2,2,389,389,2,122,2,2,2,389,389,909,389}, + {642,757,247,513,372,54,546,971,271,61,61,1018,2,143,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {988,271,675,163,379,108,48,472,870,485,485,18,2,485,528,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {923,397,722,186,203,575,24,144,36,526,206,787,12,100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {718,359,103,558,684,560,67,35,120,342,680,265,265,265,2,2,265,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2}, + {927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2}, + {900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {903,259,153,106,289,916,861,41,441,368,131,131,262,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {945,358,160,196,82,403,362,195,376,877,521,336,521,77,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {753,242,194,619,345,94,463,485,163,85,412,575,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {940,226,320,666,269,54,542,174,109,290,754,524,649,2,202,2,2,2,2,2,2,2,776,202,776,776,776,2,2,202,202,202}, + {915,210,456,377,303,237,225,521,621,175,569,20,124,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523}, + {982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {982,604,126,65,633,657,22,776,161,45,725,44,4,2,2,2,2,2,2,2,2,2,269,269,2,2,2,2,2,2,2,2}, + {745,600,284,1117,459,1135,300,52,845,331,334,334,334,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {986,241,233,45,721,325,350,222,35,1065,1065,1065,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {981,626,987,827,466,458,578,346,475,223,223,223,342,1058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728}, + {949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {992,723,625,251,431,544,309,466,700,644,484,837,904,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394}, + {999,674,212,673,279,579,462,754,89,866,345,110,110,887,2,2,2,2,2,707,707,2,2,2,2,2,2,2,2,2,2,707}, + {1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2}, + {1005,260,389,960,501,714,118,73,334,1019,704,204,504,205,822,822,2,2,2,2,2,2,2,2,2,2,684,2,2,2,2,2}, + {738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1010,937,449,474,154,456,766,318,275,444,709,2,778,778,778,806,779,779,2,2,2,2,2,2,2,2,806,2,2,2,287,287}, + {1011,780,134,945,183,42,741,25,252,164,205,222,222,222,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1118,427,294,404,268,217,922,515,19,1045,1045,2,833,291,448,2,2,2,2,2,2,2,2,2,175,2,2,2,2,2,2,2}, + {1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234}, + {722,375,264,390,515,498,1161,391,884,551,238,2,2,825,549,2,2,2,551,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {792,250,299,210,496,682,94,207,220,227,227,2,2,227,73,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1022,409,93,359,983,345,280,280,104,940,940,2,2,382,1039,2,2,2,2,831,2,2,2,2,2,2,2,2,2,2,2,2}, + {1027,925,413,335,327,826,250,122,293,773,564,541,420,420,420,774,763,2,2,2,2,2,2,900,110,110,2,763,2,2,2,2}, + {1028,730,807,119,209,146,230,498,164,309,309,2,2,2,693,912,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {997,525,680,120,466,728,288,110,1082,544,572,2,2,663,290,290,2,2,754,2,2,2,2,2,582,582,582,582,582,2,2,2}, + {1055,395,795,561,222,85,294,433,377,89,89,2,2,2,456,821,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {997,614,240,638,755,575,874,321,600,235,665,2,2,2,154,154,767,767,2,767,2,2,2,2,2,2,2,2,2,2,2,2}, + {802,298,672,424,104,623,152,159,476,760,66,2,2,2,215,215,490,490,490,2,2,2,2,2,490,490,490,490,490,490,490,490}, + {1128,788,124,501,561,1015,419,787,48,620,705,2,2,2,2,88,18,2,215,215,215,2,2,215,215,2,2,2,215,2,2,2}, + {807,433,721,434,449,242,170,842,21,4,642,2,2,2,2,2,4,4,4,4,2,856,856,856,885,885,856,856,856,856,856,885}, + {755,612,235,265,369,855,414,362,478,518,518,2,2,64,16,8,32,4,16,8,8,1041,501,1041,2,2,64,16,8,8,16,270}, + {1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1017,568,930,1113,556,1299,114,881,690,475,641,2,2,2,779,779,103,2,528,2,2,2,2,2,2,528,528,2,2,910,910,2}, + {814,473,286,752,476,779,420,569,742,164,490,2,2,2,793,812,812,812,2,812,812,2,2,526,526,812,526,2,2,2,526,526}, + {818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2}, + {820,249,292,1017,1017,143,403,37,433,456,515,2,2,69,640,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2}, + {1078,527,589,244,170,892,827,606,1165,773,189,2,2,240,22,2,2,2,2,2,2,759,621,621,621,621,621,621,621,621,621,621}, + {865,1132,428,582,254,408,536,376,825,116,116,1266,1266,1266,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1062,268,389,1325,598,276,1270,48,572,439,302,2,544,609,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1065,517,247,1142,247,674,385,120,592,177,98,2,956,364,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {635,503,594,203,456,1246,221,396,1151,178,66,2,781,587,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2}, + {830,397,932,519,818,113,367,694,88,535,535,414,343,175,2,2,2,2,2,2,2,2,2,2,414,864,2,2,864,864,864,864}, + {793,463,329,730,390,551,968,92,511,470,424,563,672,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2}, + {1084,402,130,1077,276,154,1068,779,511,853,83,757,757,38,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,757,2}, + {1090,255,271,110,159,235,158,236,271,815,1300,416,416,416,2,2,416,416,2,2,2,399,791,791,2,791,2,2,2,2,791,791}, + {1058,417,271,172,312,363,184,191,28,183,759,214,759,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,846,985,1085,764,124,764,51,874,612,478,801,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2}, + {814,293,763,661,575,631,524,636,112,691,595,1103,405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1106,662,258,190,1315,214,530,263,318,904,877,1317,318,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1206,469,299,1052,655,114,189,213,321,188,64,475,475,2,2,662,662,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2}, + {1076,596,553,545,79,727,881,121,298,169,639,368,695,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1130,177,84,673,350,543,543,95,128,954,430,884,884,2,884,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1222,412,430,707,691,746,131,607,311,607,112,217,912,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2}, + {1096,1166,209,407,1127,400,974,322,428,906,631,134,171,2,2,2,2,664,664,664,2,2,2,2,2,2,2,2,2,2,2,2}, + {1091,946,437,51,527,802,597,639,587,645,510,586,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,168}, + {1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1103,276,174,408,233,170,955,108,530,354,585,38,677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,476}, + {1167,478,1169,1053,563,371,108,772,413,497,1338,991,660,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2}, + {1108,437,1160,324,868,686,361,399,786,1161,1161,707,731,731,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1116,331,280,422,1109,341,570,243,849,241,566,61,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1099,1187,300,240,268,413,1366,634,184,768,773,365,783,224,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1158,945,300,1115,205,495,435,302,187,774,774,843,843,284,284,2,2,2,2,909,933,933,933,2,2,909,909,2,2,2,2,909}, + {904,660,1283,46,33,124,416,218,152,970,1241,305,307,307,307,260,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1127,553,287,58,739,99,514,739,766,42,580,241,598,598,936,936,936,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2}, + {1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847}, + {1140,814,528,677,84,1192,305,637,335,451,103,325,77,969,2,651,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1297,600,419,985,846,493,186,109,147,239,197,762,762,327,327,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1181,615,482,653,238,130,313,506,98,1314,730,730,730,730,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {921,613,628,1288,111,150,191,233,633,83,387,602,105,394,2,2,2,2,2,2,2,351,2,2,351,351,351,2,2,2,351,351}, + {1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953}, + {1160,617,505,1205,374,906,23,408,194,91,91,91,585,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1203,1101,497,352,254,309,464,123,607,1080,265,1145,1145,1145,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1210,656,1026,782,802,442,1319,734,794,165,165,796,93,796,2,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {963,646,721,1161,219,667,1088,485,692,692,663,535,553,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2}, + {966,590,140,297,189,844,633,12,847,742,742,244,281,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {941,231,1038,309,173,770,413,560,855,660,721,1103,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,2,2}, + {1213,305,656,983,1399,1196,692,986,9,339,754,308,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {972,768,1109,523,642,546,1452,29,1296,13,813,813,2,1496,2,2,2,2,2,2,2,165,165,165,165,165,165,2,2,2,2,544}, + {1330,671,528,831,1426,735,33,425,364,119,363,978,2,761,483,476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1188,217,838,237,379,202,785,949,479,169,348,872,2,872,872,2,2,2,2,2,2,1028,2,2,2,2,2,2,2,2,2,2}, + {1190,286,513,881,390,215,387,130,749,554,1110,519,160,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {893,560,132,1420,721,191,568,799,412,22,322,93,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {987,774,678,175,145,264,588,97,1308,6,828,1129,2,2,2,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {955,980,753,96,574,259,1327,556,342,1415,1036,1036,478,478,478,478,507,2,2,2,2,151,2,2,317,2,2,2,2,2,595,595}, + {882,1038,211,110,942,337,1305,1225,661,183,381,381,2,2,2,2,347,2,2,2,2,2,2,2,600,431,431,431,431,431,431,431}, + {1208,486,343,725,677,1204,135,139,924,170,1111,317,2,2,2,2,202,706,202,107,107,107,2,2,706,706,107,107,2,2,2,706}, + {1259,1017,456,298,443,838,137,744,551,334,36,951,2,2,2,699,718,2,2,984,2,2,2,2,2,2,984,984,2,2,2,2}, + {1212,1186,641,284,565,636,895,82,690,117,184,184,2,2,2,397,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,370,132,635,381,47,537,179,1192,301,1282,33,2,2,2,1553,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2}, + {1223,433,252,572,424,82,221,107,382,430,203,461,2,915,362,964,2,2,964,2,2,2,2,2,964,964,964,964,964,485,485,485}, + {1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2}, + {1220,410,1193,352,260,434,469,41,1090,961,961,728,2,2,330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {898,1043,391,1289,29,830,184,321,1136,85,1133,1082,864,864,2,2,2,2,2,2,2,2,789,789,2,789,789,2,2,789,789,2}, + {1223,434,851,152,140,1495,190,397,925,37,1080,430,2,2,204,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {989,1043,184,232,64,403,284,745,171,171,995,223,380,380,1400,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {939,1070,1288,254,973,901,321,109,568,713,336,988,2,946,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1276,636,569,258,325,675,342,85,88,579,833,833,833,833,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2}, + {982,508,815,214,206,602,448,685,446,572,1549,8,1047,1047,1047,2,2,2,2,2,2,2,363,502,2,2,71,363,2,2,363,363}, + {1288,1398,789,514,151,600,1618,1194,1419,441,234,204,1191,438,828,2,857,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1002,342,1045,757,1008,979,322,240,1211,171,552,123,2,129,129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1401,402,525,293,97,223,452,808,61,169,1023,1023,886,886,1023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1001,644,263,164,136,939,624,95,489,1023,1107,331,331,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1011,475,845,532,567,951,663,295,877,1275,227,39,618,683,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1401,741,509,797,47,157,1256,482,1513,899,736,780,780,210,2,2,2,2,783,783,2,2,2,2,2,2,2,2,2,2,2,2}, + {1047,880,369,402,641,446,639,586,277,396,419,275,825,820,2,2,2,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1273,701,831,1294,1580,137,162,415,563,11,92,116,116,116,2,2,2,2,2,2,1029,1029,1029,504,504,877,877,877,877,877,1029,1029}, + {1335,400,315,412,172,125,568,1024,58,601,398,985,640,577,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1453,947,486,485,453,415,1164,684,504,605,422,998,727,727,2,2,2,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1057,1198,146,529,284,1286,160,135,75,686,648,1425,821,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1052,442,936,64,132,1378,1323,161,161,161,230,131,12,12,2,2,2,2,2,2,2,2,2,2,2,998,998,998,998,2,2,2}, + {1422,838,234,554,736,243,344,526,1108,33,1303,699,249,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1279,681,423,813,806,269,412,420,985,485,761,1013,649,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {938,614,523,557,898,624,178,461,287,985,371,371,260,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1335,834,652,528,536,523,497,60,173,777,238,59,4,59,4,8,2,2,2,559,559,559,559,559,559,559,2,2,559,559,559,2}, + {1040,998,324,93,887,497,1326,443,152,1193,595,80,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1302,1116,283,1006,891,838,768,373,468,968,1178,1178,1269,1269,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1027,1128,114,395,357,417,848,22,389,1257,734,838,838,301,900,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1072,724,717,877,873,369,1031,698,917,1641,1641,1641,53,549,549,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {987,1243,424,240,53,1150,558,292,1107,574,814,1474,1474,1068,1186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2}, + {1040,420,960,882,64,661,292,146,976,427,689,248,248,248,638,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861}, + {1040,522,666,398,78,208,293,818,134,867,147,147,482,2,4,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {987,1280,1245,1300,926,676,56,546,541,690,84,42,1000,1383,1383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1324,588,1378,592,1445,1029,759,1296,739,931,363,704,312,704,704,704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1058,454,1557,191,129,297,695,1390,1274,460,923,923,923,2,4,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2}, + {1327,572,282,1022,907,1276,409,643,1050,633,187,187,187,2,228,45,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2}, + {1395,958,237,101,559,891,560,47,524,747,197,589,589,917,887,887,887,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1395,529,461,402,194,392,122,781,111,162,780,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1378,541,848,848,347,856,102,104,183,156,395,130,1377,2,2,2,159,159,159,2,2,2,772,2,2,2,2,2,2,2,2,2}, + {1062,212,784,63,252,873,1302,1108,1380,84,1375,1375,1375,2,2,2,375,374,2,980,2,2,2,980,980,980,2,2,2,2,2,2}, + {1384,549,430,781,946,879,901,924,741,114,14,451,36,2,2,2,2,287,287,287,803,803,803,803,2,2,2,803,803,803,803,803}, + {1413,627,1329,1092,526,197,31,417,1149,981,964,1003,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2}, + {1084,1174,1601,949,910,960,500,461,1290,23,1042,636,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1420,531,626,738,376,537,814,206,990,235,847,812,201,201,201,201,726,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1420,624,363,537,1436,278,292,377,263,820,376,382,382,2,654,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1091,793,1353,208,506,599,846,503,1011,247,289,61,1050,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1533,978,284,156,914,162,685,1184,252,1375,189,256,640,2,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1531,692,414,277,541,1371,1447,682,536,109,432,1240,1240,2,1022,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1128,398,791,1170,76,661,408,259,756,495,79,553,10,10,1532,1532,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1040,704,618,854,374,1470,274,383,941,519,351,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1427,988,498,1529,99,678,1323,149,33,426,543,543,335,1507,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,349,490,266,144,220,599,437,743,764,647,1128,605,265,324,324,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1118,496,645,592,354,1133,935,428,72,532,182,182,1370,660,123,2,294,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,1042,315,745,1006,771,630,68,587,1187,295,295,295,408,408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1118,724,1322,405,199,614,1087,885,1313,317,769,660,660,1158,535,2,2,2,373,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1120,772,743,488,346,126,784,584,943,153,311,133,133,969,605,605,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2}, + {1404,284,176,590,1128,1371,322,543,1136,546,1315,174,174,777,777,891,2,2,2,2,2,2,2,579,579,579,579,2,2,2,2,2}, + {1441,791,233,141,141,316,89,296,462,1263,758,482,599,599,578,341,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2}, + {1413,406,700,547,1166,250,518,543,104,331,205,205,691,691,2,2,118,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1485,400,1497,168,82,680,1103,554,249,702,493,101,296,236,2,236,236,944,944,2,2,394,2,2,2,2,2,2,2,2,2,2}, + {1127,869,558,533,1215,194,1762,784,593,777,1153,1079,1079,1079,2,2,2,330,1045,2,1045,1045,2,2,2,2,2,2,2,2,2,787}, + {1459,1243,467,533,266,1364,1031,890,1402,486,1678,1678,93,978,2,2,2,978,947,947,2,978,2,2,2,2,2,2,2,2,2,2}, + {1139,809,117,522,955,1096,1120,1470,116,184,1565,1565,557,557,2,2,2,2,2,829,1326,2,2,2,2,2,2,2,2,2,2,2}, + {1142,984,1044,590,340,241,662,357,366,1305,2,125,631,474,2,2,2,980,2,2,2,2,2,2,2,2,2,2,2,2,2,1273}, + {1469,1247,1277,616,209,486,106,552,219,217,471,272,272,1201,2,2,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1148,542,1478,496,950,464,1011,235,136,180,2,416,758,453,2,909,2,2,2,2,2,2,2,2,2,2,1019,1019,2,2,2,2}, + {1495,1178,874,415,1100,368,1057,1228,562,215,31,31,680,680,680,1208,2,2,2,2,2,2,2,2,1208,2,2,2,2,1208,1208,2}, + {1497,1166,1613,1403,107,803,993,539,1436,1289,2,240,334,634,532,1147,2,2,2,2,2,2,2,117,2,2,2,2,2,2,2,117}, + {1617,289,1033,169,355,260,30,45,721,906,88,44,44,418,417,218,2,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1628,721,400,239,728,1336,984,425,65,120,1232,463,463,640,349,616,616,2,2,2,2,2,2,2,2,147,147,2,2,2,2,2}, + {1628,286,541,530,1610,201,1220,1592,272,181,2,38,263,1586,1157,1157,1157,2,2,2,1157,1157,2,2,2,1157,2,2,2,2,1157,1157}, + {1531,621,210,755,482,82,1308,317,427,168,2,232,116,190,701,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,701}, + {1532,575,1245,360,249,630,133,1406,920,1539,63,63,76,82,82,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1102,785,118,93,1491,988,275,53,1328,26,2,2,240,647,240,761,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1478,722,113,1534,1751,115,1728,1234,777,282,508,508,1184,63,1184,855,855,2,2,2,738,738,578,578,2,2,2,2,2,2,2,2}, + {1480,536,1421,164,429,84,970,1673,548,497,2,2,530,156,156,128,245,2,2,2,2,260,2,2,2,2,2,2,2,2,2,2}, + {1533,1302,1286,538,619,526,1669,145,1034,125,2,1038,1038,388,388,387,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1482,961,1093,556,1746,628,427,689,510,751,684,37,37,1229,1256,882,1507,1507,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1472,852,533,433,924,57,53,1036,410,675,1212,1212,1212,600,600,1212,1259,1245,1245,1245,1245,2,2,2,2,2,2,2,2,2,2,2}, + {1228,425,1030,699,407,171,568,925,1104,97,2,2,1286,1286,1286,502,2,1219,1219,1219,1290,2,1219,1219,1219,1219,2,2,2,59,2,2}, + {1547,657,777,695,1254,224,933,367,212,385,2,2,2,1422,749,245,885,710,2,2,710,710,710,45,710,710,710,710,2,336,710,2}, + {1678,466,549,145,351,816,1041,334,192,192,2,2,348,1017,130,4,4,180,180,180,180,512,2,2,2,512,512,512,512,512,128,8}, + {1550,569,481,1041,1680,1114,1265,160,386,194,2,2,2,533,929,531,422,531,1355,1355,1355,1355,531,216,216,2,2,2,2,2,2,2}, + {1559,462,850,289,1570,71,512,858,810,835,2,2,2,2,1028,1205,1205,546,546,546,1205,1205,1205,1205,1205,2,1205,1205,1205,1205,1205,1205}, + {1192,888,701,164,131,613,282,237,525,366,2,2,2,2,1737,845,845,750,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1261,1261}, + {1208,426,412,1072,274,248,1544,627,9,458,2,2,2,2,2,2,270,270,270,150,715,282,150,150,150,150,150,150,150,150,150,150}, + {1128,393,1522,96,160,581,540,120,441,176,2,2,2,2,2,2,1427,551,1102,1102,328,328,592,592,592,592,592,592,592,592,592,592}, + {1202,538,171,1177,1090,690,1566,746,1012,1012,2,2,2,2,313,781,808,313,1125,1117,930,1117,1117,1117,1117,1117,1117,1117,1117,2,2,2}, + {1567,1265,372,1633,613,484,243,1523,21,275,2,2,2,431,431,431,431,2,2,978,489,889,889,889,889,889,889,889,2,2,2,2}, + {1566,982,815,133,891,412,1179,831,651,268,2,2,2,367,366,367,367,63,63,767,2,2,2,2,2,2,2,2,2,2,2,2}, + {1522,1422,1017,124,499,451,731,1112,1355,1355,2,2,2,854,854,336,854,336,1297,2,2,2,193,193,193,193,193,2,2,2,2,2}, + {1160,1331,917,1696,401,547,122,592,863,863,2,2,703,703,703,703,495,495,495,2,2,495,495,495,495,495,269,2,2,2,269,269}, + {1538,814,1027,677,524,226,756,202,242,102,2,2,912,564,1289,682,2,1125,1125,1125,1125,2,1289,1289,1289,1125,1125,1125,2,1289,1289,1289}, + {1598,397,1471,1471,1162,866,236,948,1557,737,2,2,153,737,1408,765,765,608,2,2,2,171,608,608,608,608,2,608,608,2,2,2}, + {1598,434,107,270,148,1317,835,123,642,1236,2,2,67,633,771,878,771,878,878,2,2,2,771,2,2,2,2,2,2,2,2,2}, + {1628,1502,1042,822,80,403,1335,684,464,426,671,671,336,336,336,2,425,896,2,2,2,2,1337,1337,1337,1337,1337,1337,2,2,2,2}, + {1630,715,1368,1273,993,293,385,545,1267,896,1038,1038,270,1325,1325,2,2,961,961,961,961,961,961,2,2,961,961,2,2,961,2,961}, + {1612,723,409,641,796,1087,1228,1398,623,262,740,740,870,870,397,2,2,893,893,2,2,1367,328,2,328,2,2,2,2,2,2,2}, + {1614,588,652,105,441,844,734,912,532,878,1073,1073,62,1415,693,1431,1431,1431,1431,925,925,925,925,925,925,925,2,2,2,2,2,2}, + {1607,1503,1072,471,221,277,854,1236,263,752,2,694,1657,934,553,2,2,2,498,498,2,802,2,46,2,2,2,2,2,2,2,2}, + {1172,987,140,1964,584,600,852,1725,456,1199,718,718,791,981,791,2,2,2,2,2,1260,2,2,2,2,2,718,2,2,718,2,718}, + {1746,771,620,415,1057,437,613,1034,1662,837,2,1149,1466,1149,1149,1149,1466,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1263,835,1533,789,1259,174,1497,557,644,203,2,289,604,434,434,434,2,844,844,2,2,2,1111,1111,1111,2,2,2,2,2,2,2}, + {1272,884,388,1889,956,159,1172,595,219,645,2,629,107,107,1279,75,2,2,2,211,2,2,2,2,2,2,2,2,2,2,2,2}, + {1797,904,172,659,349,177,692,448,1141,990,640,99,1073,806,640,640,2,640,640,911,911,911,640,640,640,640,2,2,2,2,2,2}, + {1276,442,1008,1352,243,162,711,301,552,1002,668,668,384,71,384,384,2,2,2,2,2,727,727,727,777,777,777,777,777,777,2,777}, + {1600,1130,171,1113,813,722,117,990,37,24,969,94,825,1398,1398,1398,1398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1198,496,714,609,644,1159,873,249,186,1539,136,239,379,1994,2,68,68,68,68,68,2,2,192,2,969,2,2,969,2,2,969,969}, + {1678,1316,460,1133,1003,150,1236,1316,1417,218,1763,1763,77,77,2,1491,771,771,771,771,771,2,771,2,2,2,2,2,2,2,2,2}, + {1682,449,1067,393,136,854,36,492,637,1053,247,1111,1111,1111,2,247,247,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1288,1690,702,760,420,333,1213,1911,805,351,67,67,1568,1568,2,2,604,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1288,1858,152,894,346,104,997,203,249,1006,1278,1489,1489,555,2,2,2,1074,1074,518,2,2,518,2,2,518,2,2,2,2,2,2}, + {1601,697,532,408,697,1140,1568,47,1499,780,1171,318,318,318,2,2,2,2,318,318,2,2,2,2,2,2,2,2,2,2,2,2}, + {1283,1078,791,873,655,412,389,835,292,958,1245,678,1611,1519,2,2,185,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245}, + {1685,1610,1447,1093,1255,937,703,431,522,1384,988,988,253,988,2,1892,1892,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1822,589,236,205,797,39,241,1048,181,386,102,102,102,111,1361,1361,1361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1233,843,813,157,396,669,1531,439,640,733,996,996,996,1566,951,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1342,705,302,595,1200,52,83,647,519,139,103,103,103,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2}, + {1630,1244,142,767,1299,719,629,1716,419,837,1145,1136,1148,1405,1405,1405,2,2,2,2,2,309,309,309,309,309,2,2,2,2,2,2}, + {1636,974,279,419,893,1608,1491,156,1486,115,730,730,863,509,924,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1318,1234,213,1089,1567,602,1330,404,467,718,249,215,354,177,59,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1732,1771,584,533,297,1056,669,293,146,311,1176,311,590,590,277,2,2,2,2,2,2,2,2,2,539,539,2,2,2,2,2,2}, + {1026,512,1196,394,1259,1313,762,549,311,1576,1576,465,465,140,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1360,383,1470,502,1010,153,1588,619,1246,396,1107,1107,112,423,423,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2}, + {1320,1636,858,1210,509,194,1575,154,1424,455,1860,832,1075,581,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1670,1350,689,1074,437,956,587,642,1154,439,196,1108,1108,1108,990,2,2,2,2,2,1112,2,2,2,2,2,2,2,2,2,2,2}, + {1873,890,920,874,591,651,768,478,331,76,760,760,760,760,67,2,2,2,2,1241,1241,1241,1241,2,2,2,2,2,2,2,1241,1241}, + {1682,867,333,102,628,891,654,506,995,684,961,563,1313,1313,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1672,1248,429,813,262,92,809,1248,560,1365,1392,753,753,1259,1261,2,2,2,2,2,2,2,2,177,177,2,2,2,2,2,2,2}, + {1391,1598,1112,590,797,584,1354,47,1473,1291,1874,48,491,463,990,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1875,1576,924,677,461,134,1525,1619,44,701,299,743,728,791,791,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791}, + {1267,904,1187,1595,765,1451,494,1573,950,909,87,1265,757,1371,1005,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1360,1091,1478,1237,97,578,1616,494,1422,223,865,1092,359,2,1080,4,2,2,2,688,1965,2,1965,2,2,2,2,2,2,2,2,2}, + {1750,386,393,840,723,791,1707,1319,1525,83,1302,571,280,2,280,73,2,2,2,1207,2,2,2,2,2,2,2,2,2,2,2,2}, + {1763,1018,1859,432,717,723,874,1294,1050,1800,1237,619,1074,2,10,1237,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1376,652,461,225,361,936,1073,1279,149,619,983,511,1994,2,2,1076,1076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1947,393,495,946,1375,391,2128,582,1143,695,1872,760,760,2,2,1456,974,974,435,974,974,435,974,2,974,974,2,2,2,2,2,2}, + {1768,1463,531,1008,95,1677,362,1105,985,177,1682,1682,244,2,2,1234,1041,1041,1041,2,2,2,1041,1041,2,2,2,2,2,2,1894,2}, + {1780,1739,1357,1684,1586,736,208,966,1691,339,339,128,128,2,2,128,128,128,2,2,128,2,2,2,2,1929,2,2,338,2,2,338}, + {1387,1459,358,1409,1919,917,777,223,313,1847,1012,1024,1024,2,2,2,2,1420,1420,1428,1420,2,1420,1420,2,2,2,1420,1117,1117,1117,1117}, + {1289,907,228,665,1695,1735,489,214,762,1777,321,1674,932,2,2,2,2,1358,709,2,1959,1959,372,2,2,372,372,2,2,372,372,372}, + {1378,680,1117,1367,759,62,319,563,505,1138,1093,345,693,2,2,2,780,780,2,2,2,729,729,729,2,2,2,2,2,2,729,729}, + {1802,1645,453,1079,604,618,334,855,541,167,37,88,849,2,2,518,518,2,2,530,2,2,2,2,2,2,2,119,119,2,2,2}, + {1275,1612,143,1586,502,987,555,436,2236,1826,494,494,358,2,2,213,2,2,2,2,2,2,1585,1585,1585,1585,1585,1585,1585,1585,1585,1585}, + {1322,512,560,432,365,87,1835,1137,515,1271,1739,309,309,1229,1229,1229,2,2,2,2,2,2,2,2,416,416,416,416,2,2,2,2}, + {1758,835,287,888,391,875,1834,516,1432,1171,98,408,302,976,976,1963,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1444,394,1613,796,645,1406,186,158,402,1364,314,588,606,2,577,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1337,1391,137,371,165,87,1026,20,419,99,572,572,918,854,918,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1323,589,526,1555,1636,1172,86,42,1545,57,627,1769,1769,2,867,343,2,2,2,2,2,2,2,724,2,2,2,2,724,724,2,2}, + {1323,1647,384,301,270,549,1098,1144,1066,55,88,1805,683,2,945,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1327,1075,539,1017,926,350,1102,236,494,1268,286,286,1293,267,227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1472,661,1538,487,94,2209,563,138,881,1735,718,203,1382,1473,1473,1473,1473,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1413,766,349,1471,45,625,733,1082,170,58,1268,207,1081,1081,1081,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1861,1487,419,97,799,1791,458,1029,370,627,57,414,414,1540,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1881,716,268,387,2138,1212,999,408,1363,434,1429,1429,1648,1648,1007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1480,1131,1089,1688,340,962,505,1816,139,44,1350,403,1385,1996,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1868,650,1146,1690,948,43,497,692,1628,1302,1302,108,462,731,731,2,2,2,2,2,2,2,185,185,185,2,2,2,2,2,2,2}, + {2023,1204,531,733,1054,618,668,363,783,218,1302,2055,559,2055,2055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1328,601,601,617,554,467,391,1545,162,1361,807,1565,1565,243,1344,2,725,510,510,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1808,1525,1129,652,1195,329,1410,558,1322,911,161,536,737,94,306,2,2,2,2,2,2,2,2,2,541,541,541,2,2,2,2,2}, + {1911,1338,639,1106,854,128,19,1353,847,253,618,517,2054,2054,93,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1825,850,180,1483,864,953,50,81,106,432,1372,1372,1212,10,10,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1892,441,977,228,1252,604,735,136,889,878,1319,1319,2127,2127,1963,367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1820,1553,536,1351,425,1268,227,1742,429,348,1397,552,1151,1151,2,180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1453,1044,556,833,305,1493,989,1158,726,1790,532,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,259,2,2,2,2,2,420,2}, + {2059,592,492,973,137,1331,392,334,635,1480,2254,1796,1796,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1460,986,709,268,755,824,83,893,115,656,2071,1323,1001,144,2,2,2,2,2,2,2,2,1527,1527,1527,1527,1527,1527,1527,2,801,801}, + {1850,1476,792,840,2037,229,1578,526,431,1485,1450,1001,1001,1001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1922,1383,813,346,1247,666,1931,1111,2042,79,682,501,1349,1930,2,2,681,681,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1922,542,1739,625,88,1376,259,49,338,318,505,788,1314,657,2,2,2,1314,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1948,1530,576,582,1069,119,2131,41,1178,1677,1677,1677,325,346,2,2,2,2,2,2,1401,2,33,2,2,2,2,2,2,71,71,71}, + {1928,1111,168,1252,1467,1083,1927,603,1278,714,1027,50,751,1970,2,2,2,2,621,2,100,2,2,10,10,2,2,2,2,793,793,793}, + {1394,896,674,2350,1375,1599,1858,135,762,722,628,685,705,28,2,2,2,2,2,2,2,2,2,2,2,855,2,2,2,2,2,2}, + {1540,791,518,419,1130,1068,299,1386,1378,134,859,859,71,162,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2107,709,828,154,542,184,1094,1665,307,1549,177,2007,85,773,2,2,2,2,2,2,2,2,2,2,2,697,2,2,2,2,697,2}, + {1977,1218,244,365,576,666,761,238,629,913,1907,986,1351,986,704,1257,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1496,1912,1291,1053,510,2322,1048,1530,2223,673,894,594,628,332,2,2,2,2,2,295,295,295,2,2,2,2,2,2,2,2,2,2}, + {1520,1107,1082,687,484,1732,676,1595,467,653,1091,428,2113,332,332,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1905,612,920,848,562,2032,230,1305,1073,851,731,798,798,357,516,2,2,2,2,2,2,2,2,1465,1465,373,2,2,2,2,2,2}, + {1428,1062,1016,75,297,1130,533,768,464,753,48,1510,1510,418,375,1626,2,221,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1396,729,1710,337,371,489,1341,2117,132,1870,853,853,408,1079,328,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1978,1051,977,588,1423,1001,508,409,825,497,659,1063,384,463,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1534,854,2007,1207,947,1773,1571,1505,909,1471,1655,1655,2334,1327,409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2157,2106,679,238,378,49,1101,588,811,1313,1556,2301,475,812,812,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2187,1515,549,1416,1073,1613,47,1046,390,252,1214,1404,1404,933,1013,2,2,2,1025,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2145,1069,662,709,737,1141,1737,827,1384,1628,107,107,1032,277,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2173,1379,155,393,1578,610,1911,899,697,58,185,597,597,1249,1369,2,2,2,2,1369,2,2,2,2,2,2,2,2,2,2,2,2}, + {1413,1589,1603,2268,520,333,1416,859,1619,867,1154,512,1291,413,413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1823,1698,1268,623,583,1932,1674,522,529,1862,1281,246,989,246,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1559,992,174,1313,612,1487,1487,461,702,37,1660,839,2,95,1628,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2066,1719,710,1294,2041,377,1005,690,132,756,1618,187,187,726,187,615,615,2,2,2,2,851,2,2,2,2,2,2,2,2,2,744}, + {2192,1029,310,1609,592,1542,265,117,2006,82,162,205,2,2009,2009,1201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1570,1504,1414,1143,1999,1932,1015,1015,556,514,626,79,2,79,1795,1461,1461,2,2,2,2,2,2,2,1461,1461,1461,1461,1461,2,2,2}, + {1562,937,1964,934,1349,378,459,109,1676,1655,1339,1809,2,768,768,188,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1965,949,1057,1043,2256,1571,970,348,69,1324,1174,485,105,105,105,2172,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2044,1869,838,1424,1097,155,1142,230,1335,420,235,1510,2,431,425,622,2,2,2,2,2,625,2,2,2,625,625,2,2,2,2,2}, + {1976,1433,820,504,421,1007,388,1083,635,82,1524,750,2,2,870,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1990,1948,1138,1787,253,115,312,1912,341,1624,260,1783,1315,1315,790,790,790,790,790,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1993,585,327,1393,1013,1671,1758,1436,1989,1217,1109,1476,2,2,1042,756,1042,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2056,1062,1605,1943,680,445,113,857,650,1388,2016,1231,2,2,1292,1292,1292,2,1039,1039,1039,1039,1039,2,2,2,2,2,2,2,2,2}, + {2008,1773,416,1954,1314,742,1694,505,202,1747,785,375,2,2,2,477,1538,477,2,2,2,2,2,1309,1309,1309,1309,2,2,2,1309,2}, + {1658,1008,258,749,427,1071,2052,263,1047,2152,1602,1602,2,2,2,1311,669,669,2,1897,1897,1897,669,669,669,669,669,669,669,669,669,669}, + {2258,1887,1875,1021,863,604,543,1115,509,1243,312,213,2,2,2,2,335,770,770,2,1143,567,2,2,567,567,567,411,2,2,2,411}, + {2266,1872,991,1468,1168,939,907,833,624,701,386,1713,2,2,2,2,2,931,861,381,1299,2,861,2,2,2,861,861,861,861,861,2}, + {2273,1510,803,2278,842,1245,1389,230,822,1564,113,1276,2,2,2,2,1350,273,273,2,2,2,2,2,1281,1281,1281,2,2,1281,1281,1281}, + {2278,1028,548,373,190,1443,614,2386,1940,930,557,2069,2,2,2,558,112,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2108,776,1568,342,2215,1882,681,1292,1601,586,1481,618,1930,1930,1930,1930,2146,89,89,2,2,2,2,2,2,2,1171,2,2,2,2,2}, + {2139,2177,1652,392,715,605,778,632,472,1619,64,64,2,2,2,1747,859,2,2,2,2,2,216,216,216,216,1747,1747,1747,1747,1747,1747}, + {1492,448,271,135,1288,417,130,83,235,2313,482,746,2,2,746,609,611,611,611,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1628,846,1504,138,464,401,501,506,967,1027,1540,1035,2,1921,1539,1539,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1630,1677,1624,301,1038,909,887,374,411,143,1021,174,2,1393,19,634,2,2,2,2,2,2,2,873,2,2,873,873,2,2,2,2}, + {1654,1131,2054,994,2170,548,801,252,87,219,488,2239,2,1232,1839,1822,2,2,2,968,2,2,2,2,2,2,2,2,2,2,2,2}, + {2065,1520,1423,1797,899,1425,1801,776,2365,58,646,695,2,998,998,1342,2,2,2,2,2,2,2,2,2,2,2,2,1150,1150,2,2}, + {2304,1948,316,1063,237,607,1143,2575,1388,1022,127,251,2,438,1570,1570,1570,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2177,710,1912,617,809,1078,199,905,673,519,457,52,2,1348,1348,410,2,2,2,2,2,340,2,2,2,2,2,2,2,2,2,2}, + {2073,1543,1586,1296,2466,753,455,46,119,1694,2035,1592,206,206,206,2,2,2,2,2,2,2,2,1172,2,2,2,2,2,2,2,2}, + {2075,1056,874,2101,566,1790,1333,386,538,1560,2254,331,717,717,717,454,454,2,2,2,2,2,2,2,2,2,2,2,454,454,2,2}, + {1670,977,1540,553,855,1729,239,757,191,62,732,549,1092,1092,199,199,199,199,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2096,1155,2257,125,1986,245,1208,2146,2287,680,1413,73,467,1410,1410,2,2,2,2,2,133,133,133,2,2,2,2,2,2,2,2,2}, + {1538,1026,2157,1457,1784,2559,184,29,614,273,697,697,1922,697,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2106,856,1025,382,389,272,425,672,1021,216,601,292,510,510,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1662,608,2478,266,1330,505,40,2058,964,724,596,1221,1221,310,42,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1600,1338,196,1510,1371,1138,957,169,545,1176,1131,2460,1708,541,541,2,363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1682,1008,737,444,822,999,2066,283,646,1860,1008,778,1178,1178,458,1743,2,2,2,2,2,2,2,2,2,2,2,2,2,1743,1743,1743}, + {2132,756,1097,166,202,411,640,717,514,1389,633,633,633,633,633,633,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2386,748,620,478,647,898,320,53,1115,190,60,1860,1860,802,802,2,2,2,2,1264,1346,1346,2,2,2,2,2,2,2,2,2,2}, + {2125,996,1081,124,1140,628,1668,1913,151,2495,523,430,260,708,2190,2190,2190,2,2,2,2,2,1660,2,2,497,497,497,497,497,497,2}, + {1602,1489,895,383,56,698,2081,1728,794,789,16,16,797,302,52,2,2,2,2,2,2,2,2,2,2,797,797,797,797,797,797,1808}, + {2210,606,901,547,131,1924,1852,1271,194,766,390,390,520,795,1429,1429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1731,599,817,724,718,1038,1082,2503,1341,936,421,1802,1304,1304,1491,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1614,1058,847,689,749,1028,1047,1474,117,1369,1442,1442,1540,700,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1733,679,2041,2420,326,934,1172,1431,193,370,1073,1073,1073,260,2,2,2,2,2,2,2,2,2,2,2,2,1193,2,2,2,2,2}, + {2168,1532,769,2570,1303,357,1793,1633,1226,1025,205,1218,1984,764,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2234,1706,356,581,532,933,1704,387,1345,1345,34,135,350,307,614,614,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1656,2093,354,310,306,1553,106,459,175,55,1482,958,254,254,2,356,356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1654,1035,330,533,1446,953,499,142,1527,1748,265,1437,265,510,2,2,2,2,2,2,2,1835,1835,1835,1835,2,2,2,2,2,2,2}, + {1600,479,1457,246,2025,618,1612,2139,169,1492,1097,1327,2007,2007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1744,447,845,2145,748,1555,1193,1312,916,1770,1294,546,794,323,2,2,2,2,2,1733,1733,2,2,1730,2,1733,1733,2,2,1733,551,551}, + {1766,1558,1901,1393,987,1859,815,1165,50,2065,88,88,1453,1453,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1615,1267,1242,1494,399,663,68,1209,1573,528,640,1200,248,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1678,592,1351,509,312,721,163,1597,1262,199,2643,1330,1661,992,2,2,719,2,2,2,2,2,2,2,2,2,2,2,2,2,1704,2}, + {2207,970,838,2043,1016,561,267,329,584,608,679,303,832,1613,959,959,959,1409,1409,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2217,352,447,914,1200,561,614,1616,509,2292,1114,1114,1229,52,1053,1053,1053,2,2,2,2,2,2,2,2,2,2,2,2,2,795,795}, + {2313,595,1593,1951,133,282,372,2396,1117,226,2104,267,374,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2312,1231,1604,997,652,1096,1070,320,481,662,911,1610,342,2527,606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2245,1541,1828,783,615,428,1282,1892,848,1219,2465,314,314,314,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,1323}, + {2522,1030,324,1264,628,1339,480,234,2351,1085,1979,2333,1339,1356,1356,2286,2,2,2,2,2,2,2,2,2,2,2,2,2530,2,2,2}, + {2519,1136,612,209,994,1179,1060,2621,130,485,661,1444,2122,124,258,1114,2,2,806,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2524,1894,253,2072,1242,355,888,1362,28,480,452,1216,595,545,354,1145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2569,1356,1053,410,437,58,1508,831,2272,383,1725,615,1191,1191,1191,2493,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2386,1106,709,251,784,929,1551,2481,304,2148,1546,955,2453,866,866,2,2,2264,2264,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2228,1163,1995,649,1000,680,325,1591,774,767,711,711,1418,524,711,401,976,2,2,2,2,2005,2005,2,2,2,2,2,2,1390,1390,2}, + {2362,1706,564,1088,1296,1267,70,1015,496,1298,758,154,240,240,154,154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1715,2260,357,557,783,1195,2288,1997,1120,144,247,175,1277,203,203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2294,2360,1353,748,1439,226,940,2316,1112,1527,214,1406,1429,712,1124,2,595,595,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2303,1018,316,280,1616,909,97,1126,1295,736,216,54,2045,726,1673,2,2,2,2,2,779,779,2,2,2,2,2,2,2,2,2,2}, + {2390,491,1217,1148,2314,2250,2180,308,613,662,1346,1346,1346,1280,778,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1732,527,1303,664,71,294,404,917,1074,180,2618,2412,441,1987,1750,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1695,1287,1346,1181,1412,1653,830,2025,957,1720,1614,887,964,964,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1756,2308,1986,101,957,633,1940,1002,390,1237,95,1441,95,95,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2461,1412,540,1183,229,300,47,585,518,402,1863,1863,560,1326,1326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1707,717,366,287,1883,50,599,1371,474,1551,947,2142,1885,947,2008,1004,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2632,567,1149,1227,1156,2052,643,1585,1197,581,63,718,699,149,149,1940,2,2,2,2,2,2,2,2,2,2,2,2146,2,2,2,2}, + {1773,2024,377,340,1938,103,1180,600,199,848,2449,2449,506,506,762,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2435,1920,394,1482,266,1637,911,1697,1689,1249,1085,1085,397,2292,1355,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2345,662,270,324,1061,1080,1952,593,1480,2111,2667,2093,2059,2120,955,1447,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1777,455,1487,1190,455,1542,977,2308,437,1129,410,856,1420,412,412,766,2,2034,2034,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2662,2224,1142,656,59,598,730,458,226,1151,741,1286,1015,2,688,2017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2666,768,529,990,2329,130,1678,2466,318,1083,387,1524,511,2,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2501,1216,246,1278,718,704,2019,88,273,1203,67,1488,1828,2,2,1489,1489,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2474,2292,1818,2061,2833,751,2172,1708,1210,1675,370,131,163,2,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1751,1575,889,828,82,1956,712,499,1420,1686,339,2326,2035,2,2,558,558,2,1234,2,2,2,2,2,2,2,2,2,2,2,1239,1239}, + {2522,1148,1943,168,218,252,543,1535,2004,130,353,353,42,2,2,2,1173,1173,2,1547,2,2,2,2,2,2,2,1547,1173,1547,1547,2}, + {2695,432,1213,579,865,1637,1857,84,447,155,2492,347,1980,2,2,2,1155,1155,1155,2,1933,1933,1933,2,2,2,2,2,2,2,1901,1901}, + {1808,1683,474,1761,106,602,1416,217,1351,1602,366,393,1966,2,2,2,2,2,378,378,606,606,606,2,2,2,2,2,919,919,919,919}, + {2428,1576,1692,449,2012,240,1167,418,272,1557,2197,645,645,2,2,2,2,2,2150,2150,2,2,562,715,2,2,2,81,81,2,2,2}, + {2727,781,1689,1709,997,2563,1032,468,44,992,1214,725,75,2,2,2,2,360,360,380,2,2,2,2,2,2,2,2,2,2,2,2}, + {1948,1085,1344,2090,1435,2389,3193,1007,1003,244,667,1838,2062,2,2,2,1802,299,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2433,932,689,818,2014,1498,749,1645,867,1627,47,1766,2193,2,2,2030,2030,2,430,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2463,712,1525,2092,2942,352,761,242,2178,2339,483,1905,1347,2,2,65,529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2547,920,386,925,74,579,323,2319,520,2332,1535,751,1591,2,770,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2452,2588,2055,665,818,2622,413,1260,965,211,989,1219,166,2,1251,1251,2,1256,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1957,2311,993,276,293,2826,1087,880,927,1811,1122,2974,2974,2,2,590,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2552,998,533,827,1619,831,1861,918,750,1955,241,1899,448,2151,2151,449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1860,579,1000,1575,898,170,185,1032,293,2754,438,459,459,2,1199,1199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2602,2417,1888,2528,1410,669,1543,233,814,2478,225,1449,1449,224,1671,1671,2,2,931,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1889,2527,1366,1371,387,925,1751,162,250,1064,292,467,467,546,1244,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2492,1186,1350,1616,2749,1962,33,708,279,813,1390,489,1203,268,173,2410,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2500,1575,423,541,561,380,262,1564,1923,1242,2084,1758,1283,2213,924,924,2,2,2,2,2,2,2,2,2,2,2,1827,1827,2,2,2}, + {1842,1736,489,743,1539,1681,683,1412,1418,312,2778,2778,1975,1975,803,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2824,1183,2201,278,241,2230,1591,1648,1036,818,1321,1312,754,813,813,813,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1900,2506,952,1059,163,870,681,1235,1271,1188,2071,1705,1183,648,404,2,2,2,2,2,2,2,2,2236,2236,2,2,2,2,2,2,2}, + {2662,1443,2327,132,490,1149,1572,744,429,621,1763,2383,1903,1246,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2673,2182,1307,1776,1233,1828,1828,340,249,216,503,160,160,582,926,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2,1018,1018,1103,1103}, + {2042,620,1074,2057,2758,859,815,1127,766,1693,252,808,981,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2102,881,2170,1673,705,101,58,1712,1568,214,758,488,1007,269,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2692,2665,961,1478,324,429,1311,376,1648,130,2083,1047,409,343,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2122,1087,563,1669,647,2996,151,2458,250,310,71,1348,355,965,2815,1333,1333,2,2,2,2,2218,2,2,2,2,2,2,2,2,2,2}, + {1952,1968,2260,2945,2464,1055,2626,570,1316,1828,1828,970,970,221,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2072,1947,1779,254,2822,1552,855,804,3452,202,695,82,684,208,1270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1947,1699,1341,486,1765,1960,264,899,1082,1674,987,1878,930,1008,930,930,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1953,1527,1643,591,1517,2427,1232,1555,2542,495,675,2534,2534,3106,83,3106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2744,1728,2213,792,761,1667,1908,31,447,442,815,2865,762,762,762,762,2,2,2,2,2,2,2,2,2,2,2,2,649,649,649,2}, + {2722,1406,1257,807,2191,3017,1330,1023,602,2124,794,530,733,733,1083,2528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {1963,1525,437,398,609,393,2420,3059,435,1251,1977,1672,450,1960,1954,1960,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2626,2468,2838,845,2060,218,1080,912,911,1973,1365,920,1316,1316,2,1316,1316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2734,1727,1743,1026,809,1154,779,244,1238,1616,812,784,825,1810,1810,1810,1810,1559,1559,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2180,2262,1651,204,3193,2121,2725,1016,629,1834,603,2848,26,26,728,728,728,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2648,1328,2578,133,1377,105,2485,2139,323,1045,145,761,1201,1848,2,814,814,814,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2999,358,250,1379,102,2349,1491,2074,42,376,2811,1220,296,296,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2810,1274,499,742,1724,425,190,1561,1302,2603,2255,917,661,661,2,2,2,495,2,2,2,2,2,2,2,2,2,2575,2,2,2,2}, + {2150,589,876,1616,2655,432,902,1028,433,1375,574,1400,1400,1400,2,2,2,2,2,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529}, + {1665,1856,201,824,796,249,1217,590,1375,1175,1599,824,824,3319,2,2,2,601,1961,1961,2,2,2,1961,2,2,2,2,2,2,1961,2}, + {2704,2239,1260,140,2161,2781,1840,574,2353,343,3218,61,2108,2038,1873,2,1833,1408,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2173,876,802,2197,3338,176,1783,224,1763,1160,1264,1264,2864,554,2,552,552,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2708,1663,2279,824,836,1598,2101,1620,1202,1606,1368,1079,1167,1999,2848,2848,2848,1101,1101,1101,2,2,2,662,2,2,2,2272,2,2,2,2}, + {1987,1463,2328,1890,1443,2086,283,2895,522,1577,1514,1657,2605,891,2,1181,1181,2,2,2121,2,2,2,2,2,2,2,2,2,2,2,2}, + {2173,1637,1139,905,1802,1378,296,439,1507,1017,1427,209,708,462,1508,1508,1508,2,2,2,2,2,2,2,2,2,2,2240,2240,1459,1459,1459}, + {2206,1526,628,2877,802,2587,1253,1258,1044,2195,3246,40,2898,2898,1704,598,2,2145,2,2,2,2145,2,2,2,2,2,2,2,2,2,2}, + {2182,618,1022,1433,1138,1580,2590,149,796,2090,743,294,294,1117,720,3003,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2025,1805,1466,1213,2006,1903,568,1700,1355,865,1783,1006,1006,1070,1070,268,2,2,2,2,2388,2388,845,845,845,2,2,2,2,2,2,2}, + {2185,1038,3050,1461,2270,2159,958,1637,233,2483,525,987,437,437,437,3065,2,2,2160,2160,2,2,2,2,2,2,2,2,2,2,2160,2160}, + {2083,1465,847,1450,502,447,2168,794,1761,1324,162,188,2853,2853,636,973,2,563,2,2,2,2,2,2,2,2089,2089,2089,2089,2089,2,2}, + {2923,2303,203,508,472,648,3169,269,515,3147,2415,1700,1700,1700,1461,1461,1461,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2300,1116,1555,2794,1095,998,1999,894,963,753,324,2130,2675,2675,554,2045,2,2,2,2,2,2,2,2130,2130,2130,2,2,2,2,2,2}, + {2103,768,702,1548,1486,2228,2846,861,665,1497,1046,1046,2252,394,394,1901,1155,2,2,2,2,2,2,2,2,2,2,2,192,192,192,192}, + {2923,640,661,2179,1207,182,872,171,738,269,1372,222,908,2069,2069,2,1550,516,2,2,2,2,2,2,2,2,2,2,1109,2,2,2}, + {2833,2005,387,733,562,468,317,224,94,478,1606,2522,1606,2001,1087,2,2,1087,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2125,2479,1749,1226,1169,1681,459,652,1087,2211,1613,686,2213,1689,2446,2,2,2925,2925,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2953,1059,205,3093,138,132,2148,1345,1499,216,151,1296,2446,1610,1632,2,2,2,2,4,4,2,2,2,987,987,2,2,2,2,2,2}, + {3199,1431,593,2050,2785,507,1540,1103,1740,459,62,1766,1781,1121,1600,2,1600,1600,125,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2258,1714,415,373,1919,2605,693,827,1918,496,1479,1903,86,1083,415,2,2,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3289,2032,329,2169,2323,1599,517,1704,1847,804,632,40,40,40,40,40,40,40,40,2,2,1600,2,2,1600,2,2,2,2,2,2,2}, + {2165,2725,2293,368,705,3063,494,103,12,1332,175,2331,3144,2165,1709,1709,2090,2,2,2,2,1363,1363,2,566,2,2,2,2,2,2,2}, + {2300,1070,2169,2540,734,1002,912,1386,2215,224,1285,880,2052,2052,1301,959,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3267,1852,1037,648,611,1250,432,853,1467,179,715,2,2033,841,2607,2607,2607,2607,2,2,2,2,1874,1874,2,1874,899,2,2,2,2,2}, + {2348,2565,794,859,1740,1596,532,462,457,1014,1227,2,2761,954,249,249,2,458,458,2,2,2,2,2,909,909,2,2,2,2,2,2}, + {3038,2399,1450,1276,1222,727,552,646,1055,2351,686,63,252,504,3166,1802,2,2,1165,1165,1165,2,2,2,2,1165,1165,1165,2,2,1165,2}, + {3038,2519,1494,107,2597,802,535,1669,1695,1928,1940,1580,1580,85,2274,1551,2,2,2431,560,560,560,2,2,1098,2,2,2,2,2,2,2}, + {3040,1044,1927,1952,1479,3124,1373,1990,588,2550,1277,2,629,2671,1842,2712,840,1702,2,1669,2,1347,2,2,2,2,1669,1669,1669,1669,2,1669}, + {3056,1567,691,1243,653,751,248,842,1954,480,458,2,2,2451,934,3172,3556,2259,2312,2,2562,2562,2,2,2562,2562,2562,2562,2562,2,2,2}, + {2959,2553,1333,877,2492,3169,2498,686,2030,2820,3233,1313,1313,1471,1471,1471,1471,2,2,1471,1471,2,2,1481,2,1887,2,2,2,2,2,2}, + {3398,964,862,301,1705,2002,310,644,144,1091,1507,2,2,2460,496,496,2517,2517,1842,2,2,1964,2,2,2,2,2,1676,2,2,2,2}, + {2379,3034,166,302,2108,1078,2976,68,158,134,1567,2,2,1514,1514,1514,1883,1883,2,2,1883,1883,1883,1883,1883,1883,1883,1883,1883,2,2,2}, + {2386,1270,1204,1032,1474,224,496,2296,1536,1219,311,2,2,2,2,1238,2108,2108,2108,2108,2108,2108,2108,2108,1444,1444,1444,1444,1444,1444,1444,2}, + {2431,739,2488,1386,1632,2107,2602,2139,1751,349,3147,2,2,64,16,8,32,4,4,32,728,728,728,728,2,2,64,16,8,180,180,180}, + {3405,2142,1621,110,2112,2097,807,740,747,282,372,2,2,2,2,2493,2493,2493,1299,2,132,1872,2,1843,2,2,2,2,2,2,2,2}, + {3157,1230,685,1513,663,1335,2100,1441,1826,1670,1539,2,2,2,2899,2899,1378,54,2,46,46,2,2,1362,1362,2,2,2,2,2,2,2}, + {2415,822,3658,449,1980,891,129,823,1787,621,514,2668,2668,2668,2668,2668,666,269,2830,2,2,2,2,241,370,370,370,370,2,2,2,2}, + {2463,2664,2825,1208,882,629,428,428,356,343,1730,2,769,769,769,1714,769,2,2,955,769,2,2,955,955,955,2,2,2,955,955,955}, + {2447,1588,1077,831,1413,2362,1499,1812,1112,815,129,1034,1034,1867,194,518,1454,723,723,1251,2,160,2,2,1251,1251,2,2,2,2,2,2}, + {3094,1638,1514,843,1503,1884,1481,727,723,1319,226,2,676,2401,1699,562,639,639,1176,2,2,2,2,824,2,2,2,2,2,2,2,2}, + {3125,2004,547,2986,2919,471,948,1747,201,1862,802,2,1238,1277,1277,1277,2,2,1245,1245,1245,2,2,2743,1245,1245,2,2,2,2,2,2}, + {2582,2469,533,1726,1575,1505,2448,2031,1257,427,588,1633,202,3553,1938,672,195,195,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2378,636,1958,1628,1255,2285,2208,1626,719,2944,1086,1436,1436,1719,2111,655,2637,2637,2,2,2,2637,2637,2,2637,2637,2637,2637,2637,2,2637,2637}, + {2372,3079,2161,515,368,847,955,1257,1937,315,2666,1938,1723,1252,1252,362,362,2,2205,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2518,2060,1055,362,1455,1899,1105,1560,2237,2451,2080,181,2346,181,1829,1829,1829,2,2,1509,1509,1509,2,1509,2,2,2,2,2,2,2,2}, + {3580,1671,674,1838,814,1409,323,3021,1047,2579,2579,2968,2968,102,2656,2638,2638,4006,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3194,1576,1084,859,2879,1600,953,1429,471,867,1105,1490,293,293,293,2,2,198,2619,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3215,2004,3333,2271,3283,1660,2135,1696,1413,1362,834,253,253,253,3802,2,2,2,1881,690,690,2,2,2,1881,1881,1881,1881,1881,2,1881,1881}, + {3719,2441,2094,1665,1707,1827,1310,230,1635,143,386,1029,1070,1062,1062,2,1062,1062,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3249,1309,1232,472,711,2557,1479,1027,145,489,1377,2928,2928,3522,3522,3522,968,415,415,2,2,2,2,1332,1332,1332,2,1332,2891,2,1332,2891}, + {2462,1962,257,2244,1966,1905,204,262,799,319,752,1696,971,971,3781,1426,1426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3434,3131,1399,3413,1533,281,3288,1242,810,135,2506,2506,1742,946,1015,1044,1044,1044,2,2,2,2,1044,1837,1837,1837,1837,1837,2,2,2,2}, + {2518,1200,631,596,1946,365,2960,413,592,3878,242,2714,2364,1402,1402,2322,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3362,2012,1759,2002,1365,150,3120,471,1590,3246,1296,196,196,196,2984,2323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {3382,899,3140,2860,1155,1840,2822,355,1753,1856,1018,822,52,52,52,1102,1102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2728,1334,274,1330,2674,2614,931,2250,883,1506,2193,1345,1089,500,2,219,390,2,2,2,2,2,2,2,390,2,2,2,2,2,2,2}, + {3911,3343,202,675,1733,71,166,176,1323,2864,899,2155,1108,2172,2,2,1829,2172,1107,2,2,2,2,1107,1107,1107,2,2,2,1107,2,2}, + {2757,3466,1411,1168,340,2760,1053,524,53,2090,1227,26,260,830,2,2,2,1139,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, + {2662,902,2371,1920,1097,1476,1008,1012,3556,468,3374,2560,591,1446,2,298,298,149,149,149,149,149,3135,3135,3135,3135,3135,2,2,2,2,2}, + {2861,1407,1848,245,2186,1209,164,2577,625,132,657,2333,2333,2213,2213,2213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2} +}; From da42b95813cf055ba22f8bb796f3b56bc573cf09 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 19 May 2018 23:23:34 +0200 Subject: [PATCH 54/99] deals with the duplicate symbol problem for the shared cuba library --- src/external/libCuba/src/cuhre/Makefile.am | 2 +- src/external/libCuba/src/divonne/Makefile.am | 2 +- src/external/libCuba/src/suave/Makefile.am | 2 +- src/external/libCuba/src/vegas/Makefile.am | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/external/libCuba/src/cuhre/Makefile.am b/src/external/libCuba/src/cuhre/Makefile.am index 572a25bd..820b8f64 100644 --- a/src/external/libCuba/src/cuhre/Makefile.am +++ b/src/external/libCuba/src/cuhre/Makefile.am @@ -3,7 +3,7 @@ c_sources = Cuhre.c AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE -AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) +AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libCuhrecubafun_" AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) noinst_LTLIBRARIES = libcuhre.la diff --git a/src/external/libCuba/src/divonne/Makefile.am b/src/external/libCuba/src/divonne/Makefile.am index 2b93a16f..a86cd97c 100644 --- a/src/external/libCuba/src/divonne/Makefile.am +++ b/src/external/libCuba/src/divonne/Makefile.am @@ -3,7 +3,7 @@ c_sources = Divonne.c AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE -AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) +AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libDivonnecubafun_" AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) noinst_LTLIBRARIES = libdivonne.la diff --git a/src/external/libCuba/src/suave/Makefile.am b/src/external/libCuba/src/suave/Makefile.am index 9951b0b7..47b77135 100644 --- a/src/external/libCuba/src/suave/Makefile.am +++ b/src/external/libCuba/src/suave/Makefile.am @@ -3,7 +3,7 @@ c_sources = Suave.c AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE -AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) +AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libSuavecubafun_" AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) noinst_LTLIBRARIES = libsuave.la diff --git a/src/external/libCuba/src/vegas/Makefile.am b/src/external/libCuba/src/vegas/Makefile.am index b2bbcd20..e67499cd 100644 --- a/src/external/libCuba/src/vegas/Makefile.am +++ b/src/external/libCuba/src/vegas/Makefile.am @@ -3,7 +3,7 @@ c_sources = Vegas.c AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE -AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) +AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libVegascubafun_" AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) noinst_LTLIBRARIES = libvegas.la From 595fc897406642a5b0f6c502e7f3cb1063c9ebb1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 20 May 2018 10:39:35 +0200 Subject: [PATCH 55/99] cmake: adopted to libCuba 4.2.0. --- CMakeLists.txt | 5 ----- src/external/libCuba/src/CMakeLists.txt | 2 +- .../libCuba/src/common/CMakeLists.txt | 22 ++++++++++++++----- src/external/libCuba/src/cuhre/CMakeLists.txt | 7 ++++++ .../libCuba/src/divonne/CMakeLists.txt | 7 ++++++ src/external/libCuba/src/suave/CMakeLists.txt | 7 ++++++ src/external/libCuba/src/vegas/CMakeLists.txt | 7 ++++++ 7 files changed, 45 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 01fe15cc..4342f82d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,11 +164,6 @@ if (nexus) message(" NeXus found in ${NEXUS_INCLUDE_DIR}") endif (nexus) -if (BMWlibs) - message("") - message(" CUBA found in //as35 STILL MISSING") -endif (BMWlibs) - message("") if (qt_based_tools) if (Qt5Core_FOUND) diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt index b29724a0..f6fd8f8b 100644 --- a/src/external/libCuba/src/CMakeLists.txt +++ b/src/external/libCuba/src/CMakeLists.txt @@ -17,7 +17,7 @@ add_subdirectory(vegas) #--- lib creation ------------------------------------------------------------- add_library(cuba SHARED - $ + $ $ $ $ diff --git a/src/external/libCuba/src/common/CMakeLists.txt b/src/external/libCuba/src/common/CMakeLists.txt index b991d841..8265dfea 100644 --- a/src/external/libCuba/src/common/CMakeLists.txt +++ b/src/external/libCuba/src/common/CMakeLists.txt @@ -1,13 +1,17 @@ -#--- workerini ---------------------------------------------------------------- +#--- common ------------------------------------------------------------------- + +set(common_src Global.c) +set(common_src ${common_src} Data.c) +if (HAVE_FORK) + set(common_src ${common_src} Fork.c) +endif (HAVE_FORK) #--- obj lib creation --------------------------------------------------------- -add_library(workerini OBJECT - WorkerIni.c -) +add_library(common OBJECT ${common_src}) #--- make sure that the include directory is found ---------------------------- target_include_directories( - workerini BEFORE PRIVATE + common BEFORE PRIVATE $ $ $ @@ -18,6 +22,12 @@ set(COMP_DEF "-DHAVE_CONFIG_H") set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") target_compile_definitions( - workerini PRIVATE ${COMP_DEF} + common PRIVATE ${COMP_DEF} ) +set(COMP_OPT "-O3") +set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") +set(COMP_OPT ${COMP_OPT} "-ffast-math") +target_compile_options( + common PRIVATE ${COMP_OPT} +) diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt index 999b74cf..09d80740 100644 --- a/src/external/libCuba/src/cuhre/CMakeLists.txt +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -17,8 +17,15 @@ target_include_directories( #--- check for pre compile flags ---------------------------------------------- set(COMP_DEF "-DHAVE_CONFIG_H") set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") +set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libCuhrecubafun_") target_compile_definitions( cuhre PRIVATE ${COMP_DEF} ) +set(COMP_OPT "-O3") +set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") +set(COMP_OPT ${COMP_OPT} "-ffast-math") +target_compile_options( + cuhre PRIVATE ${COMP_OPT} +) diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt index b94089e4..b83a5748 100644 --- a/src/external/libCuba/src/divonne/CMakeLists.txt +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -17,8 +17,15 @@ target_include_directories( #--- check for pre compile flags ---------------------------------------------- set(COMP_DEF "-DHAVE_CONFIG_H") set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") +set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libDivonnecubafun_") target_compile_definitions( divonne PRIVATE ${COMP_DEF} ) +set(COMP_OPT "-O3") +set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") +set(COMP_OPT ${COMP_OPT} "-ffast-math") +target_compile_options( + divonne PRIVATE ${COMP_OPT} +) diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt index c4ebdc24..b4a34ba0 100644 --- a/src/external/libCuba/src/suave/CMakeLists.txt +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -17,8 +17,15 @@ target_include_directories( #--- check for pre compile flags ---------------------------------------------- set(COMP_DEF "-DHAVE_CONFIG_H") set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") +set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libSuavecubafun_") target_compile_definitions( suave PRIVATE ${COMP_DEF} ) +set(COMP_OPT "-O3") +set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") +set(COMP_OPT ${COMP_OPT} "-ffast-math") +target_compile_options( + suave PRIVATE ${COMP_OPT} +) diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt index f4635a3a..983ba14a 100644 --- a/src/external/libCuba/src/vegas/CMakeLists.txt +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -17,8 +17,15 @@ target_include_directories( #--- check for pre compile flags ---------------------------------------------- set(COMP_DEF "-DHAVE_CONFIG_H") set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE") +set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libVegascubafun_") target_compile_definitions( vegas PRIVATE ${COMP_DEF} ) +set(COMP_OPT "-O3") +set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") +set(COMP_OPT ${COMP_OPT} "-ffast-math") +target_compile_options( + vegas PRIVATE ${COMP_OPT} +) From e8aecbb419b6eee501e8bd96ef61661eed4b1a3a Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 20 May 2018 14:21:20 +0200 Subject: [PATCH 56/99] cuba library: prevent duplicated symbols if fork is available. --- src/external/libCuba/src/common/Fork.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/libCuba/src/common/Fork.c b/src/external/libCuba/src/common/Fork.c index 99605d25..82e21349 100644 --- a/src/external/libCuba/src/common/Fork.c +++ b/src/external/libCuba/src/common/Fork.c @@ -16,7 +16,7 @@ #define MINCORES 1 -coreinit cubafun_; +extern coreinit cubafun_; extern int cubaverb_; extern corespec cubaworkers_; From 7a0609dc84301ec87c0637d508f5fadd7b867b64 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 20 May 2018 14:22:06 +0200 Subject: [PATCH 57/99] added missing libraries. --- src/external/libFitPofB/classes/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index 12421a6c..b02abcf6 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -73,7 +73,7 @@ target_include_directories( ) #--- add library dependencies ------------------------------------------------- -target_link_libraries(FitPofB ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) +target_link_libraries(FitPofB ${FFTW3_LIBRARY} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} TLemRunHeader PUserFcnBase BMWtools) #--- install FitPofB solib ---------------------------------------------------- install(TARGETS FitPofB DESTINATION lib) From 0bc2ef761256b2e75b9812308e3b02d6c14a2699 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 22 May 2018 15:25:22 +0200 Subject: [PATCH 58/99] cmake: start to add the Qt components. No real functionality yet. --- CMakeLists.txt | 10 ++++++---- cmake/musrfit-info.h.in | 4 ++++ src/CMakeLists.txt | 11 +++++------ src/musredit/CMakeLists.txt | 3 +++ src/musredit_qt5/CMakeLists.txt | 13 +++++++++++++ src/musrgui/CMakeLists.txt | 5 +++++ src/musrgui/README | 8 ++++++-- 7 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 cmake/musrfit-info.h.in create mode 100644 src/musredit/CMakeLists.txt create mode 100644 src/musredit_qt5/CMakeLists.txt create mode 100644 src/musrgui/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 4342f82d..164e3eb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,10 +91,12 @@ if (qt_based_tools) # first try Qt5 # Find the QtCore library find_package(Qt5Core) - # Find the QtWidgets library - find_package(Qt5Widgets) - # Find the QtXml library - find_package(Qt5Xml) + if (Qt5Core_FOUND) + # Find the QtWidgets library + find_package(Qt5Widgets CONFIG REQUIRED) + # Find the QtXml library + find_package(Qt5Xml CONFIG REQUIRED) + endif (Qt5Core_FOUND) # if Qt5 is not found, try Qt4 if (NOT Qt5Core_FOUND) diff --git a/cmake/musrfit-info.h.in b/cmake/musrfit-info.h.in new file mode 100644 index 00000000..6b75599d --- /dev/null +++ b/cmake/musrfit-info.h.in @@ -0,0 +1,4 @@ +#--- This file is generated by cmake ------------------------------------------ + +#define MUSRFIT_PREFIX "@CMAKE_INSTALL_PREFIX@" +#define MUSRFIT_DOC_DIR "@CMAKE_INSTALL_PREFIX@/share/doc/musrfit" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 73276a6e..e8ba8f90 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,14 +1,13 @@ #--- add further sub-directories ---------------------------------------------- add_subdirectory(classes) add_subdirectory(external) -#[==[ -if (Qt5Core_FOUND OR Qt4_FOUND) +if (Qt5Core_FOUND) + add_subdirectory(musredit_qt5) +elseif (Qt4_FOUND) add_subdirectory(musredit) -endif (Qt5Core_FOUND OR Qt4_FOUND) -if (QT_FOUND) +elseif (QT_FOUND) add_subdirectory(musrgui) -endif (QT_FOUND) -#]==] +endif (Qt5Core_FOUND) #--- define the musrfit libs -------------------------------------------------- set(MUSRFIT_LIBS ${MUSRFIT_LIBS} mud) diff --git a/src/musredit/CMakeLists.txt b/src/musredit/CMakeLists.txt new file mode 100644 index 00000000..cb6d6119 --- /dev/null +++ b/src/musredit/CMakeLists.txt @@ -0,0 +1,3 @@ +#--- musredit for Qt > 4.6 and < 5.0 ------------------------------------------ + +message("debug> will eventually deal with Qt > 4.6 < 5.0 musredit") diff --git a/src/musredit_qt5/CMakeLists.txt b/src/musredit_qt5/CMakeLists.txt new file mode 100644 index 00000000..fbd93886 --- /dev/null +++ b/src/musredit_qt5/CMakeLists.txt @@ -0,0 +1,13 @@ +#--- musredit for Qt > 5.0 ---------------------------------------------------- + +message("debug> will eventually deal with Qt > 5.0 musredit, musrStep, musrWiz, ...") + +#--- create musrfit-info.h ---------------------------------------------------- +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/musrfit-info.h.in + ${CMAKE_CURRENT_BINARY_DIR}/musrfit-info.h +) + +#add_subdirectory(musredit) +#add_subdirectory(musrStep) +#add_subdirectory(musrWiz) diff --git a/src/musrgui/CMakeLists.txt b/src/musrgui/CMakeLists.txt new file mode 100644 index 00000000..f07797b3 --- /dev/null +++ b/src/musrgui/CMakeLists.txt @@ -0,0 +1,5 @@ +#--- musrgui for Qt 3.x ------------------------------------------------------- + +message("musrgui is currently not supported anymore! Please check if not at least") +message("Qt >= 4.6 is available.") + diff --git a/src/musrgui/README b/src/musrgui/README index 3f479383..0f4325a5 100644 --- a/src/musrgui/README +++ b/src/musrgui/README @@ -1,10 +1,14 @@ #--------------------------------------------------------------------- # README -# Andreas Suter, 2010/10/06 +# Andreas Suter, 2018/05/22 #--------------------------------------------------------------------- musrgui requires >= Qt 3.3.x and < Qt 4. If you have Qt 4.6.y or newer, -use musredit instead. +use musredit instead. If you have Qt 5.x, use musredit_qt5 instead. + +musrgui by now should be considered as not only outdated, but it will +be hard to find a platform on which it is still compiling. So, if there +is no urgent need: don't use it! #--------------------------------------------------------------------- # this is the end ... From d95193141d61954dc64bf5ea231053a5ea854631 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 22 May 2018 15:46:20 +0200 Subject: [PATCH 59/99] cmake: some more work on qt/musredit. --- src/musredit_qt5/CMakeLists.txt | 10 ++++++++-- src/musredit_qt5/musredit/CMakeLists.txt | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/musredit_qt5/musredit/CMakeLists.txt diff --git a/src/musredit_qt5/CMakeLists.txt b/src/musredit_qt5/CMakeLists.txt index fbd93886..68acc1a6 100644 --- a/src/musredit_qt5/CMakeLists.txt +++ b/src/musredit_qt5/CMakeLists.txt @@ -1,4 +1,4 @@ -#--- musredit for Qt > 5.0 ---------------------------------------------------- +#--- musredit_qt5 for Qt > 5.0 ------------------------------------------------ message("debug> will eventually deal with Qt > 5.0 musredit, musrStep, musrWiz, ...") @@ -8,6 +8,12 @@ configure_file( ${CMAKE_CURRENT_BINARY_DIR}/musrfit-info.h ) -#add_subdirectory(musredit) +#--- set Qt specific cmake variables ------------------------------------------ +#--- instruct cmake to run moc automatically when needed +set(CMAKE_AUTOMOC ON) +#--- create code from a list of Qt designer ui files +set(CMAKE_AUTOUIC ON) + +add_subdirectory(musredit) #add_subdirectory(musrStep) #add_subdirectory(musrWiz) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt new file mode 100644 index 00000000..80aa3e74 --- /dev/null +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -0,0 +1,15 @@ +#--- musredit for Qt > 5.0 ---------------------------------------------------- + +message("debug> will deal with the build of musredit (Qt 5)") + +#--- check if Qt5WebEngine or Qt5WebKit is present ---------------------------- +find_package(Qt5WebEngine QUIET) +find_package(Qt5WebKit QUIET) + +if (Qt5WebEngine_FOUND) + message("debug> Qt5WebEngine is present.") +elseif (Qt5WebKit_FOUND) + message("debug> Qt5WebKit is present.") +else (Qt5WebEngine_FOUND) + message("debug> Neither Qt5WebEngine nor Qt5WebKit found.") +endif (Qt5WebEngine_FOUND) From 58080fe4f145c610217031c660bcf153be6fe00b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 11:53:01 +0200 Subject: [PATCH 60/99] added missing Qt5 libs. --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 164e3eb6..8be0d091 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,12 @@ if (qt_based_tools) find_package(Qt5Widgets CONFIG REQUIRED) # Find the QtXml library find_package(Qt5Xml CONFIG REQUIRED) + # Find the QtNetwork library + find_package(Qt5Network CONFIG REQUIRED) + # Find the QtSvg library + find_package(Qt5Svg CONFIG REQUIRED) + # Fing the QtPrintSupport + find_package(Qt5PrintSupport CONFIG REQUIRED) endif (Qt5Core_FOUND) # if Qt5 is not found, try Qt4 From 37dced302ba0128ff81c49498c68e85f7105010e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 11:54:10 +0200 Subject: [PATCH 61/99] cmake: first version to get musredit (Qt5) compiled. Still a lot of platform checks are missing. --- src/musredit_qt5/musredit/CMakeLists.txt | 90 ++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 80aa3e74..65763309 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -6,10 +6,100 @@ message("debug> will deal with the build of musredit (Qt 5)") find_package(Qt5WebEngine QUIET) find_package(Qt5WebKit QUIET) +set(qt_libs Qt5::Core Qt5::Widgets Qt5::Network Qt5::Xml Qt5::Svg Qt5::PrintSupport) if (Qt5WebEngine_FOUND) message("debug> Qt5WebEngine is present.") + set(qt_libs ${qt_libs} Qt5::WebEngine) elseif (Qt5WebKit_FOUND) message("debug> Qt5WebKit is present.") + find_package(Qt5WebKitWidgets QUIET CONFIG REQUIRED) + set(qt_libs ${qt_libs} Qt5::WebKit Qt5::WebKitWidgets) else (Qt5WebEngine_FOUND) message("debug> Neither Qt5WebEngine nor Qt5WebKit found.") endif (Qt5WebEngine_FOUND) + +set(musredit_src + PHelp.cpp + PTextEdit.cpp + PSubTextEdit.cpp + PAdmin.cpp + PFindDialog.cpp + PReplaceDialog.cpp + PReplaceConfirmationDialog.cpp + PFitOutputHandler.cpp + PDumpOutputHandler.cpp + PPrefsDialog.cpp + PGetMusrFTOptionsDialog.cpp + PGetTitleBlockDialog.cpp + PGetParameterBlockDialog.cpp + PGetTheoryBlockDialog.cpp + PGetFunctionsBlockDialog.cpp + PGetAsymmetryRunBlockDialog.cpp + PGetSingleHistoRunBlockDialog.cpp + PGetNonMusrRunBlockDialog.cpp + PGetFourierBlockDialog.cpp + PGetPlotBlockDialog.cpp + PMsr2DataDialog.cpp + PChangeDefaultPathsDialog.cpp + PMusrEditAbout.cpp + main.cpp +) + +set(musredit_ui + forms/PFindDialog.ui + forms/PReplaceDialog.ui + forms/PReplaceConfirmationDialog.ui + forms/PMusrEditAbout.ui + forms/PPrefsDialog.ui + forms/PGetMusrFTOptionsDialog.ui + forms/PGetTitleBlockDialog.ui + forms/PGetParameterBlockDialog.ui + forms/PGetTheoryBlockDialog.ui + forms/PGetFunctionsBlockDialog.ui + forms/PGetAsymmetryRunBlockDialog.ui + forms/PGetSingleHistoRunBlockDialog.ui + forms/PGetNonMusrRunBlockDialog.ui + forms/PGetFourierBlockDialog.ui + forms/PGetPlotBlockDialog.ui + forms/PMsr2DataDialog.ui + forms/PChangeDefaultPathsDialog.ui +) + +# Instruct CMake to run moc automatically when needed +set(CMAKE_AUTOMOC ON) + +#[==[ +# as35 currently CMAKE_AUTOUIC -> ON doesn't work since it requires the ui-files +# in the same directory as the cpp-files. +# Create code from a list of Qt designer ui files +set(CMAKE_AUTOUIC ON) +#]==] + +# call qt/uic +qt5_wrap_ui(out_ui ${musredit_ui}) +# add qt/rcc +qt5_add_resources(musredit_rcc musredit.qrc) + +add_executable(musredit + ${musredit_src} + ${out_ui} + ${musredit_rcc} +) + +if (Qt5WebEngine_FOUND) + target_compile_options(musredit + BEFORE PRIVATE + -DHAVE_QT_WEB_ENGINE + ) +endif (Qt5WebEngine_FOUND) + +target_include_directories(musredit + BEFORE PRIVATE + $ + $ + $ + $ +) + +target_link_libraries(musredit ${qt_libs}) + From 1477320be018ea1e11fa58596c3894be6a934d1d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:05:00 +0200 Subject: [PATCH 62/99] cmake: removed qt specific labels here. --- src/musredit_qt5/CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/musredit_qt5/CMakeLists.txt b/src/musredit_qt5/CMakeLists.txt index 68acc1a6..64ee3a47 100644 --- a/src/musredit_qt5/CMakeLists.txt +++ b/src/musredit_qt5/CMakeLists.txt @@ -8,12 +8,6 @@ configure_file( ${CMAKE_CURRENT_BINARY_DIR}/musrfit-info.h ) -#--- set Qt specific cmake variables ------------------------------------------ -#--- instruct cmake to run moc automatically when needed -set(CMAKE_AUTOMOC ON) -#--- create code from a list of Qt designer ui files -set(CMAKE_AUTOUIC ON) - add_subdirectory(musredit) #add_subdirectory(musrStep) #add_subdirectory(musrWiz) From 5ca9925dae61b60501a9059cc468f9af4bf2729a Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:05:50 +0200 Subject: [PATCH 63/99] cmake: switched autouic off since ui-files are somewhere else. --- src/musredit_qt5/musredit/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 65763309..15894e62 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -74,6 +74,7 @@ set(CMAKE_AUTOMOC ON) # Create code from a list of Qt designer ui files set(CMAKE_AUTOUIC ON) #]==] +set(CMAKE_AUTOUIC OFF) # call qt/uic qt5_wrap_ui(out_ui ${musredit_ui}) From 37e35c72becfa40a3cf26787b24ba7f4e9558156 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:06:40 +0200 Subject: [PATCH 64/99] make sure that layoutWidget has a unique name. --- .../musredit/forms/PGetMusrFTOptionsDialog.ui | 6 +++--- .../musredit/forms/PGetNonMusrRunBlockDialog.ui | 14 +++++++------- src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui | 12 ++++++------ src/musredit_qt5/musredit/forms/PPrefsDialog.ui | 4 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui b/src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui index 75966be9..3b958e65 100644 --- a/src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui +++ b/src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui @@ -332,7 +332,7 @@ p, li { white-space: pre-wrap; } Histo Info - + 20 @@ -600,7 +600,7 @@ p, li { white-space: pre-wrap; } File Selection - + 19 @@ -706,7 +706,7 @@ p, li { white-space: pre-wrap; } - + 20 diff --git a/src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui index cc4dd4f7..026fa8d1 100644 --- a/src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui +++ b/src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui @@ -32,7 +32,7 @@ Run Header Info - + 10 @@ -54,7 +54,7 @@ - + 11 @@ -105,7 +105,7 @@ - + 10 @@ -211,7 +211,7 @@ Required Entries - + 10 @@ -237,7 +237,7 @@ - + 11 @@ -275,7 +275,7 @@ - + 10 @@ -345,7 +345,7 @@ - + 10 diff --git a/src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui b/src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui index 1685008c..32178f4f 100644 --- a/src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui +++ b/src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui @@ -44,7 +44,7 @@ false - + 10 @@ -147,7 +147,7 @@ msr File Extension - + 10 @@ -215,7 +215,7 @@ Template Run Input - + 10 @@ -277,7 +277,7 @@ Parameter Output File Name - + 10 @@ -332,7 +332,7 @@ Options - + 6 @@ -514,7 +514,7 @@ - + 5 diff --git a/src/musredit_qt5/musredit/forms/PPrefsDialog.ui b/src/musredit_qt5/musredit/forms/PPrefsDialog.ui index e6696cb4..612d3735 100644 --- a/src/musredit_qt5/musredit/forms/PPrefsDialog.ui +++ b/src/musredit_qt5/musredit/forms/PPrefsDialog.ui @@ -20,7 +20,7 @@ :/images/musrfit.xpm:/images/musrfit.xpm - + 0 @@ -39,7 +39,7 @@ general - + 10 From f977f88791ec6a0d43cd6910520b01d980fb1bac Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:32:56 +0200 Subject: [PATCH 65/99] fixed wrong comment line character. --- cmake/musrfit-info.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/musrfit-info.h.in b/cmake/musrfit-info.h.in index 6b75599d..eebeec8b 100644 --- a/cmake/musrfit-info.h.in +++ b/cmake/musrfit-info.h.in @@ -1,4 +1,4 @@ -#--- This file is generated by cmake ------------------------------------------ +//--- This file is generated by cmake ----------------------------------------- #define MUSRFIT_PREFIX "@CMAKE_INSTALL_PREFIX@" #define MUSRFIT_DOC_DIR "@CMAKE_INSTALL_PREFIX@/share/doc/musrfit" From 1bff46a61d3a87fe33c04aba20bd1d1d49c96497 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:33:43 +0200 Subject: [PATCH 66/99] added include directories --- src/musredit_qt5/musredit/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 15894e62..2280758c 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -98,7 +98,8 @@ target_include_directories(musredit BEFORE PRIVATE $ $ - $ + $ + $ $ ) From 2774821b73ad89edfa0108330cab2f32a3cb6395 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:34:34 +0200 Subject: [PATCH 67/99] absorb return value of trimmed(). --- src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp | 2 +- src/musredit_qt5/musredit/PTextEdit.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp b/src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp index 121635e5..8455fd78 100644 --- a/src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp +++ b/src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp @@ -76,7 +76,7 @@ void PGetFourierBlockDialog::checkPhaseParameter() ival = str.toInt(&ok); if (!ok) { // i.e. the phase entry is not a number. Check for parXX - str.trimmed(); + str = str.trimmed(); if (str.startsWith("par")) { // str.remove("par"); ival = str.toInt(&ok); diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index c828ca07..23160e34 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -2262,7 +2262,7 @@ void PTextEdit::musrMsr2Data() stream = new QTextStream(file); while ( !stream->atEnd() ) { str = stream->readLine(); // line of text excluding '\n' - str.trimmed(); + str = str.trimmed(); if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); if (fMsr2DataParam->msrFileExtension.isEmpty()) @@ -2305,7 +2305,7 @@ void PTextEdit::musrMsr2Data() stream = new QTextStream(file); while ( !stream->atEnd() ) { str = stream->readLine(); // line of text excluding '\n' - str.trimmed(); + str = str.trimmed(); if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); break; From 8ffcd488dd2c2bddbc81bef9355dfc8933740f78 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:35:20 +0200 Subject: [PATCH 68/99] hide away the place where to find git-revision.h since this should be done in the Makefile. --- src/musredit_qt5/musredit/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/main.cpp b/src/musredit_qt5/musredit/main.cpp index 950b6682..c4132ab9 100644 --- a/src/musredit_qt5/musredit/main.cpp +++ b/src/musredit_qt5/musredit/main.cpp @@ -32,7 +32,7 @@ using namespace std; #include -#include "../include/git-revision.h" +#include "git-revision.h" #include "PTextEdit.h" #include "PFitOutputHandler.h" From bd45eec20d998064f0daccebdf0990024428ad3f Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 17:40:24 +0200 Subject: [PATCH 69/99] cmake: added installation info. --- src/musredit_qt5/musredit/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 2280758c..546afb84 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -105,3 +105,10 @@ target_include_directories(musredit target_link_libraries(musredit ${qt_libs}) +#--- installation info -------------------------------------------------------- +install( + TARGETS + musredit + RUNTIME DESTINATION + bin +) From a796bf6ee25b27e227819aa48696afe58fc9a18b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 23 May 2018 21:08:46 +0200 Subject: [PATCH 70/99] cmake: make QtWebEngine working. --- src/musredit_qt5/musredit/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 546afb84..9ba0b7e5 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -9,7 +9,8 @@ find_package(Qt5WebKit QUIET) set(qt_libs Qt5::Core Qt5::Widgets Qt5::Network Qt5::Xml Qt5::Svg Qt5::PrintSupport) if (Qt5WebEngine_FOUND) message("debug> Qt5WebEngine is present.") - set(qt_libs ${qt_libs} Qt5::WebEngine) + find_package(Qt5WebEngineWidgets QUIET CONFIG REQUIRED) + set(qt_libs ${qt_libs} Qt5::WebEngine Qt5::WebEngineWidgets) elseif (Qt5WebKit_FOUND) message("debug> Qt5WebKit is present.") find_package(Qt5WebKitWidgets QUIET CONFIG REQUIRED) From 455314350f499ef773a9622408f1cc885b2f5049 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 24 May 2018 15:06:43 +0200 Subject: [PATCH 71/99] cmake: install docu for musredit, etc. --- src/musredit_qt5/musredit/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 9ba0b7e5..728a575a 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -113,3 +113,15 @@ install( RUNTIME DESTINATION bin ) + +#--- documentation installation info ------------------------------------------ +install( + DIRECTORY + ${CMAKE_SOURCE_DIR}/doc/examples + ${CMAKE_SOURCE_DIR}/doc/html + ${CMAKE_SOURCE_DIR}/doc/memos + DESTINATION + ${CMAKE_INSTALL_PREFIX}/share/doc/musrfit + MESSAGE_NEVER +) + From b71455da66b8ad600aa356a2079443e79dcf6ab1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 25 May 2018 07:26:48 +0200 Subject: [PATCH 72/99] cmake: added -fPIC to the compiler options when building libCuba. --- src/external/libCuba/src/common/CMakeLists.txt | 1 + src/external/libCuba/src/cuhre/CMakeLists.txt | 1 + src/external/libCuba/src/divonne/CMakeLists.txt | 1 + src/external/libCuba/src/suave/CMakeLists.txt | 1 + src/external/libCuba/src/vegas/CMakeLists.txt | 1 + 5 files changed, 5 insertions(+) diff --git a/src/external/libCuba/src/common/CMakeLists.txt b/src/external/libCuba/src/common/CMakeLists.txt index 8265dfea..be571a05 100644 --- a/src/external/libCuba/src/common/CMakeLists.txt +++ b/src/external/libCuba/src/common/CMakeLists.txt @@ -28,6 +28,7 @@ target_compile_definitions( set(COMP_OPT "-O3") set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") set(COMP_OPT ${COMP_OPT} "-ffast-math") +set(COMP_OPT ${COMP_OPT} "-fPIC") target_compile_options( common PRIVATE ${COMP_OPT} ) diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt index 09d80740..820e2783 100644 --- a/src/external/libCuba/src/cuhre/CMakeLists.txt +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -26,6 +26,7 @@ target_compile_definitions( set(COMP_OPT "-O3") set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") set(COMP_OPT ${COMP_OPT} "-ffast-math") +set(COMP_OPT ${COMP_OPT} "-fPIC") target_compile_options( cuhre PRIVATE ${COMP_OPT} ) diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt index b83a5748..18e0d64f 100644 --- a/src/external/libCuba/src/divonne/CMakeLists.txt +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -26,6 +26,7 @@ target_compile_definitions( set(COMP_OPT "-O3") set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") set(COMP_OPT ${COMP_OPT} "-ffast-math") +set(COMP_OPT ${COMP_OPT} "-fPIC") target_compile_options( divonne PRIVATE ${COMP_OPT} ) diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt index b4a34ba0..7d14defe 100644 --- a/src/external/libCuba/src/suave/CMakeLists.txt +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -26,6 +26,7 @@ target_compile_definitions( set(COMP_OPT "-O3") set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") set(COMP_OPT ${COMP_OPT} "-ffast-math") +set(COMP_OPT ${COMP_OPT} "-fPIC") target_compile_options( suave PRIVATE ${COMP_OPT} ) diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt index 983ba14a..cc7efddb 100644 --- a/src/external/libCuba/src/vegas/CMakeLists.txt +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -26,6 +26,7 @@ target_compile_definitions( set(COMP_OPT "-O3") set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") set(COMP_OPT ${COMP_OPT} "-ffast-math") +set(COMP_OPT ${COMP_OPT} "-fPIC") target_compile_options( vegas PRIVATE ${COMP_OPT} ) From 1258e1a0cbbc4b1e3745febf79b4d8aba416a06c Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 25 May 2018 15:41:49 +0200 Subject: [PATCH 73/99] cmake: added first version for musrStep and musrWiz. --- src/musredit_qt5/CMakeLists.txt | 6 +-- src/musredit_qt5/musrStep/CMakeLists.txt | 47 ++++++++++++++++++++++ src/musredit_qt5/musrWiz/CMakeLists.txt | 51 ++++++++++++++++++++++++ src/musredit_qt5/musredit/CMakeLists.txt | 2 - 4 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 src/musredit_qt5/musrStep/CMakeLists.txt create mode 100644 src/musredit_qt5/musrWiz/CMakeLists.txt diff --git a/src/musredit_qt5/CMakeLists.txt b/src/musredit_qt5/CMakeLists.txt index 64ee3a47..a5c666ee 100644 --- a/src/musredit_qt5/CMakeLists.txt +++ b/src/musredit_qt5/CMakeLists.txt @@ -1,7 +1,5 @@ #--- musredit_qt5 for Qt > 5.0 ------------------------------------------------ -message("debug> will eventually deal with Qt > 5.0 musredit, musrStep, musrWiz, ...") - #--- create musrfit-info.h ---------------------------------------------------- configure_file( ${CMAKE_SOURCE_DIR}/cmake/musrfit-info.h.in @@ -9,5 +7,5 @@ configure_file( ) add_subdirectory(musredit) -#add_subdirectory(musrStep) -#add_subdirectory(musrWiz) +add_subdirectory(musrStep) +add_subdirectory(musrWiz) diff --git a/src/musredit_qt5/musrStep/CMakeLists.txt b/src/musredit_qt5/musrStep/CMakeLists.txt new file mode 100644 index 00000000..802e98d5 --- /dev/null +++ b/src/musredit_qt5/musrStep/CMakeLists.txt @@ -0,0 +1,47 @@ +#--- musrStep for Qt > 5.0 ---------------------------------------------------- + +set(qt_libs Qt5::Core Qt5::Widgets Qt5::Svg) + +set(musrStep_src + PMusrStep.cpp + musrStep.cpp +) + +# Instruct CMake to run moc automatically when needed +set(CMAKE_AUTOMOC ON) + +#[==[ +# as35 currently CMAKE_AUTOUIC -> ON doesn't work since it requires the ui-files +# in the same directory as the cpp-files. +# Create code from a list of Qt designer ui files +set(CMAKE_AUTOUIC ON) +#]==] +set(CMAKE_AUTOUIC OFF) + +# add qt/rcc +qt5_add_resources(musrStep_rcc musrStep.qrc) + +add_executable(musrStep + ${musrStep_src} + ${musrStep_rcc} +) + +target_include_directories(musrStep + BEFORE PRIVATE + $ + $ + $ + $ + $ +) + +target_link_libraries(musrStep ${qt_libs}) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + musrStep + RUNTIME DESTINATION + bin +) + diff --git a/src/musredit_qt5/musrWiz/CMakeLists.txt b/src/musredit_qt5/musrWiz/CMakeLists.txt new file mode 100644 index 00000000..bc2db3f8 --- /dev/null +++ b/src/musredit_qt5/musrWiz/CMakeLists.txt @@ -0,0 +1,51 @@ +#--- musrWiz for Qt > 5.0 ----------------------------------------------------- + +set(qt_libs Qt5::Core Qt5::Widgets Qt5::Svg Qt5::Xml) + +set(musrWiz_src + PTheoTemplate.cpp + PMusrfitFunc.cpp + PInstrumentDef.cpp + PAdmin.cpp + PMusrWiz.cpp + musrWiz.cpp +) + +# Instruct CMake to run moc automatically when needed +set(CMAKE_AUTOMOC ON) + +#[==[ +# as35 currently CMAKE_AUTOUIC -> ON doesn't work since it requires the ui-files +# in the same directory as the cpp-files. +# Create code from a list of Qt designer ui files +set(CMAKE_AUTOUIC ON) +#]==] +set(CMAKE_AUTOUIC OFF) + +# add qt/rcc +qt5_add_resources(musrWiz_rcc musrWiz.qrc) + +add_executable(musrWiz + ${musrWiz_src} + ${musrWiz_rcc} +) + +target_include_directories(musrWiz + BEFORE PRIVATE + $ + $ + $ + $ + $ +) + +target_link_libraries(musrWiz ${qt_libs}) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + musrWiz + RUNTIME DESTINATION + bin +) + diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 728a575a..5c2c21cf 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -1,7 +1,5 @@ #--- musredit for Qt > 5.0 ---------------------------------------------------- -message("debug> will deal with the build of musredit (Qt 5)") - #--- check if Qt5WebEngine or Qt5WebKit is present ---------------------------- find_package(Qt5WebEngine QUIET) find_package(Qt5WebKit QUIET) From eab0f2d6263d025b56eab6ec67684dec27daa4c6 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 26 May 2018 20:12:56 +0200 Subject: [PATCH 74/99] cmake: allow to specifically select the Qt version. --- CMakeLists.txt | 88 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8be0d091..49b89d4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,9 @@ option(BMWlibs "build optional BMWlibs" OFF) option(BNMRlibs "build optional beta-NMR libs" OFF) option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON) option(try_OpenMP "try to use OpenMP if available" ON) +# define qt_version with possible values 'auto' or version '3', '4', '5' +set(qt_version AUTO CACHE STRING "provide a specific Qt version to be used.") +set_property(CACHE qt_version PROPERTY STRINGS AUTO 3 4 5) #--- perform some checks and generate the config.h ---------------------------- include(CheckTypeSize) @@ -88,33 +91,72 @@ endif (try_OpenMP) #--- check for Qt ------------------------------------------------------------- if (qt_based_tools) - # first try Qt5 - # Find the QtCore library - find_package(Qt5Core) - if (Qt5Core_FOUND) - # Find the QtWidgets library - find_package(Qt5Widgets CONFIG REQUIRED) - # Find the QtXml library - find_package(Qt5Xml CONFIG REQUIRED) - # Find the QtNetwork library - find_package(Qt5Network CONFIG REQUIRED) - # Find the QtSvg library - find_package(Qt5Svg CONFIG REQUIRED) - # Fing the QtPrintSupport - find_package(Qt5PrintSupport CONFIG REQUIRED) - endif (Qt5Core_FOUND) + # check for any Qt, i.e. AUTO + if (qt_version STREQUAL AUTO) + # first try Qt5 + # Find the QtCore library + find_package(Qt5Core) + if (Qt5Core_FOUND) + # Find the QtWidgets library + find_package(Qt5Widgets CONFIG REQUIRED) + # Find the QtXml library + find_package(Qt5Xml CONFIG REQUIRED) + # Find the QtNetwork library + find_package(Qt5Network CONFIG REQUIRED) + # Find the QtSvg library + find_package(Qt5Svg CONFIG REQUIRED) + # Fing the QtPrintSupport + find_package(Qt5PrintSupport CONFIG REQUIRED) + endif (Qt5Core_FOUND) - # if Qt5 is not found, try Qt4 - if (NOT Qt5Core_FOUND) + # if Qt5 is not found, try Qt4 + if (NOT Qt5Core_FOUND) + find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) + endif (NOT Qt5Core_FOUND) + + # if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point + if (NOT Qt5Core_FOUND) + if (NOT Qt4_FOUND) + find_package(Qt3) + endif (NOT Qt4_FOUND) + endif (NOT Qt5Core_FOUND) + endif (qt_version STREQUAL AUTO) + + # check specifically for Qt5 + if (qt_version STREQUAL 5) + # Find the QtCore library + find_package(Qt5Core) + if (Qt5Core_FOUND) + # Find the QtWidgets library + find_package(Qt5Widgets CONFIG REQUIRED) + # Find the QtXml library + find_package(Qt5Xml CONFIG REQUIRED) + # Find the QtNetwork library + find_package(Qt5Network CONFIG REQUIRED) + # Find the QtSvg library + find_package(Qt5Svg CONFIG REQUIRED) + # Fing the QtPrintSupport + find_package(Qt5PrintSupport CONFIG REQUIRED) + else (Qt5Core_FOUND) + message(FATAL_ERROR "Couldn't find the specifically requested Qt5 version.") + endif (Qt5Core_FOUND) + endif (qt_version STREQUAL 5) + + # check specifically for Qt4 + if (qt_version STREQUAL 4) find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml) - endif (NOT Qt5Core_FOUND) - - # if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point - if (NOT Qt5Core_FOUND) if (NOT Qt4_FOUND) - find_package(Qt3) + message(FATAL_ERROR "Couldn't find the specifically requested Qt4 version.") endif (NOT Qt4_FOUND) - endif (NOT Qt5Core_FOUND) + endif (qt_version STREQUAL 4) + + # check specifically for Qt3 + if (qt_version STREQUAL 3) + find_package(Qt3) + if (NOT QT_FOUND) + message(FATAL_ERROR "Couldn't find the specifically requested Qt3 version.") + endif (NOT QT_FOUND) + endif (qt_version STREQUAL 3) endif (qt_based_tools) #--- if NeXus check also for HDF4, HDF5, and MXML ----------------------------- From da8d5dcbfa026b9654be3e2dc5f3de4c0a5c3a79 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 28 May 2018 11:07:18 +0200 Subject: [PATCH 75/99] cmake: changed configure output for Qt < 5 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49b89d4f..7598e700 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -220,10 +220,10 @@ if (qt_based_tools) message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})") else (Qt5Core_FOUND) if (Qt4_FOUND) - message(" Qt found in ${Qt4_INCLUDE_DIRS} (Version: ${Qt4_VERSION})") + message(" Qt found (Version: ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH})") else (Qt4_FOUND) if (QT_FOUND) - message(" Qt found in ${QT_INCLUDE_DIRS} (Version: ${QT_VERSION})") + message(" Qt found (Version: ${QT_VERSION})") endif (QT_FOUND) endif (Qt4_FOUND) endif (Qt5Core_FOUND) From 83aff2667af810b3e7e2b91eaabc67c702f976b6 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 28 May 2018 11:08:15 +0200 Subject: [PATCH 76/99] cmake: first Qt4 musredit version. --- src/musredit/CMakeLists.txt | 140 +++++++++++++++++++++++++++++++++++- 1 file changed, 139 insertions(+), 1 deletion(-) diff --git a/src/musredit/CMakeLists.txt b/src/musredit/CMakeLists.txt index cb6d6119..afcc8bbb 100644 --- a/src/musredit/CMakeLists.txt +++ b/src/musredit/CMakeLists.txt @@ -1,3 +1,141 @@ #--- musredit for Qt > 4.6 and < 5.0 ------------------------------------------ -message("debug> will eventually deal with Qt > 4.6 < 5.0 musredit") +#--- create musrfit-info.h ---------------------------------------------------- +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/musrfit-info.h.in + ${CMAKE_CURRENT_BINARY_DIR}/musrfit-info.h +) + +#--- sources, headers, ... ---------------------------------------------------- +set(musredit_src + main.cpp + PAdmin.cpp + PDumpOutputHandler.cpp + PFindDialog.cpp + PFitOutputHandler.cpp + PGetAsymmetryRunBlockDialog.cpp + PGetDefaultDialog.cpp + PGetFourierBlockDialog.cpp + PGetFunctionsBlockDialog.cpp + PGetMusrFTOptionsDialog.cpp + PGetNonMusrRunBlockDialog.cpp + PGetParameterBlockDialog.cpp + PGetPlotBlockDialog.cpp + PGetSingleHistoRunBlockDialog.cpp + PGetTheoryBlockDialog.cpp + PGetTitleBlockDialog.cpp + PHelp.cpp + PMsr2DataDialog.cpp + PMusrEditAbout.cpp + PPrefsDialog.cpp + PReplaceConfirmationDialog.cpp + PReplaceDialog.cpp + PSubTextEdit.cpp + PTextEdit.cpp +) + +set(musredit_h + musredit.h + PAdmin.h + PDumpOutputHandler.h + PFindDialog.h + PFitOutputHandler.h + PGetAsymmetryRunBlockDialog.h + PGetDefaultDialog.h + PGetFourierBlockDialog.h + PGetFunctionsBlockDialog.h + PGetMusrFTOptionsDialog.h + PGetNonMusrRunBlockDialog.h + PGetParameterBlockDialog.h + PGetPlotBlockDialog.h + PGetSingleHistoRunBlockDialog.h + PGetTheoryBlockDialog.h + PGetTitleBlockDialog.h + PHelp.h + PMsr2DataDialog.h + PMusrEditAbout.h + PPrefsDialog.h + PReplaceConfirmationDialog.h + PReplaceDialog.h + PSubTextEdit.h + PTextEdit.h +) + +set(musredit_ui + forms/PFindDialog.ui + forms/PGetAsymmetryRunBlockDialog.ui + forms/PGetDefaultDialog.ui + forms/PGetFourierBlockDialog.ui + forms/PGetFunctionsBlockDialog.ui + forms/PGetMusrFTOptionsDialog.ui + forms/PGetNonMusrRunBlockDialog.ui + forms/PGetParameterBlockDialog.ui + forms/PGetPlotBlockDialog.ui + forms/PGetSingleHistoRunBlockDialog.ui + forms/PGetTheoryBlockDialog.ui + forms/PGetTitleBlockDialog.ui + forms/PMsr2DataDialog.ui + forms/PMusrEditAbout.ui + forms/PPrefsDialog.ui + forms/PReplaceConfirmationDialog.ui + forms/PReplaceDialog.ui +) + +set(musredit_rcc + musredit.qrc +) + +# Next, using precompiler, compiler and linker +include(${QT_USE_FILE}) + +# using Qt meta-system (precompiler) +QT4_ADD_RESOURCES(RESOURCES ${musredit_rcc}) +QT4_WRAP_UI( UI_HEADERS ${musredit_ui}) +QT4_WRAP_CPP( MOC_SRCS ${musredit_h}) + +# define target +add_executable(musredit ${musredit_src} ${MOC_SRCS} ${RESOURCES} ${UI_HEADERS}) + +target_include_directories(musredit + BEFORE PRIVATE + $ + $ + $ + $ + $ + $ +) + +target_compile_definitions(musredit + PRIVATE + ${QT_DEFINITIONS} +) + +target_link_libraries(musredit + Qt4::QtCore + Qt4::QtGui + Qt4::QtNetwork + Qt4::QtWebKit + Qt4::QtXml +) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + musredit + RUNTIME DESTINATION + bin +) + +#--- documentation installation info ------------------------------------------ +install( + DIRECTORY + ${CMAKE_SOURCE_DIR}/doc/examples + ${CMAKE_SOURCE_DIR}/doc/html + ${CMAKE_SOURCE_DIR}/doc/memos + DESTINATION + ${CMAKE_INSTALL_PREFIX}/share/doc/musrfit + MESSAGE_NEVER +) + + From a5d236ec2391944566954eab9f0dfcddbd3d8839 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 28 May 2018 11:09:14 +0200 Subject: [PATCH 77/99] got rid of warnings due to identical labels (designer 'bug') --- src/musredit/forms/PGetDefaultDialog.ui | 6 +++--- src/musredit/forms/PGetMusrFTOptionsDialog.ui | 8 ++++---- src/musredit/forms/PGetNonMusrRunBlockDialog.ui | 14 +++++++------- src/musredit/forms/PMsr2DataDialog.ui | 12 ++++++------ src/musredit/forms/PPrefsDialog.ui | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/musredit/forms/PGetDefaultDialog.ui b/src/musredit/forms/PGetDefaultDialog.ui index 899ddd5e..bf15c908 100644 --- a/src/musredit/forms/PGetDefaultDialog.ui +++ b/src/musredit/forms/PGetDefaultDialog.ui @@ -20,7 +20,7 @@ :/images/musrfit.xpm:/images/musrfit.xpm - + 10 @@ -66,7 +66,7 @@ - + 12 @@ -124,7 +124,7 @@ - + 99 diff --git a/src/musredit/forms/PGetMusrFTOptionsDialog.ui b/src/musredit/forms/PGetMusrFTOptionsDialog.ui index 6935f643..656b6ae0 100644 --- a/src/musredit/forms/PGetMusrFTOptionsDialog.ui +++ b/src/musredit/forms/PGetMusrFTOptionsDialog.ui @@ -34,7 +34,7 @@ Fourier - + 21 @@ -337,7 +337,7 @@ p, li { white-space: pre-wrap; } Histo Info - + 20 @@ -605,7 +605,7 @@ p, li { white-space: pre-wrap; } File Selection - + 19 @@ -711,7 +711,7 @@ p, li { white-space: pre-wrap; } - + 20 diff --git a/src/musredit/forms/PGetNonMusrRunBlockDialog.ui b/src/musredit/forms/PGetNonMusrRunBlockDialog.ui index cc4dd4f7..8344b709 100644 --- a/src/musredit/forms/PGetNonMusrRunBlockDialog.ui +++ b/src/musredit/forms/PGetNonMusrRunBlockDialog.ui @@ -32,7 +32,7 @@ Run Header Info - + 10 @@ -54,7 +54,7 @@ - + 11 @@ -105,7 +105,7 @@ - + 10 @@ -211,7 +211,7 @@ Required Entries - + 10 @@ -237,7 +237,7 @@ - + 11 @@ -275,7 +275,7 @@ - + 10 @@ -345,7 +345,7 @@ - + 10 diff --git a/src/musredit/forms/PMsr2DataDialog.ui b/src/musredit/forms/PMsr2DataDialog.ui index 0266b846..4aef57b4 100644 --- a/src/musredit/forms/PMsr2DataDialog.ui +++ b/src/musredit/forms/PMsr2DataDialog.ui @@ -44,7 +44,7 @@ false - + 11 @@ -160,7 +160,7 @@ p, li { white-space: pre-wrap; } msr File Extension - + 10 @@ -228,7 +228,7 @@ p, li { white-space: pre-wrap; } Template Run Input - + 10 @@ -295,7 +295,7 @@ p, li { white-space: pre-wrap; } Data Output File Name - + 10 @@ -350,7 +350,7 @@ p, li { white-space: pre-wrap; } Options - + 6 @@ -550,7 +550,7 @@ p, li { white-space: pre-wrap; } - + 5 diff --git a/src/musredit/forms/PPrefsDialog.ui b/src/musredit/forms/PPrefsDialog.ui index 0bfc0f51..43a4cba0 100644 --- a/src/musredit/forms/PPrefsDialog.ui +++ b/src/musredit/forms/PPrefsDialog.ui @@ -20,7 +20,7 @@ :/images/musrfit.xpm:/images/musrfit.xpm - + 0 @@ -39,7 +39,7 @@ general - + 10 From 591540cef78c6a8a42a9df26dabc34413a62d944 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 29 May 2018 21:42:41 +0200 Subject: [PATCH 78/99] create correct kill string. --- src/musredit_qt5/musredit/PDumpOutputHandler.cpp | 2 +- src/musredit_qt5/musredit/PFitOutputHandler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/musredit_qt5/musredit/PDumpOutputHandler.cpp b/src/musredit_qt5/musredit/PDumpOutputHandler.cpp index 5ad86078..efe7af1f 100644 --- a/src/musredit_qt5/musredit/PDumpOutputHandler.cpp +++ b/src/musredit_qt5/musredit/PDumpOutputHandler.cpp @@ -103,7 +103,7 @@ PDumpOutputHandler::~PDumpOutputHandler() fProc->waitForFinished(); } if (fProc->state() == QProcess::Running) { - QString cmd = "kill -9 "+ fProcPID; + QString cmd = "kill -9 "+ QString("%1").arg(fProcPID); QString msg = "fProc still running even after Qt kill, will try system kill cmd: "+cmd; qDebug() << msg << endl; system(cmd.toLatin1()); diff --git a/src/musredit_qt5/musredit/PFitOutputHandler.cpp b/src/musredit_qt5/musredit/PFitOutputHandler.cpp index 277618d6..76d453f9 100644 --- a/src/musredit_qt5/musredit/PFitOutputHandler.cpp +++ b/src/musredit_qt5/musredit/PFitOutputHandler.cpp @@ -106,7 +106,7 @@ PFitOutputHandler::~PFitOutputHandler() fProc->waitForFinished(); } if (fProc->state() == QProcess::Running) { - QString cmd = "kill -9 "+ fProcPID; + QString cmd = "kill -9 "+ QString("%1").arg(fProcPID); QString msg = "fProc still running even after Qt kill, will try system kill cmd: "+cmd; qDebug() << msg << endl; system(cmd.toLatin1()); From 48fd3fa08265a99da6a63fe2a4b059e3bfa9caee Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 29 May 2018 21:43:48 +0200 Subject: [PATCH 79/99] adopted for MacOSX bundles. --- src/musredit_qt5/musredit/CMakeLists.txt | 48 ++++++++++++++++++------ 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index 5c2c21cf..ee47c199 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -80,11 +80,21 @@ qt5_wrap_ui(out_ui ${musredit_ui}) # add qt/rcc qt5_add_resources(musredit_rcc musredit.qrc) -add_executable(musredit - ${musredit_src} - ${out_ui} - ${musredit_rcc} -) +set(macosx_icon icons/musredit.icns) +if (APPLE) + add_executable(musredit MACOSX_BUNDLE + ${musredit_src} + ${out_ui} + ${musredit_rcc} + ${macosx_icon} + ) +else (APPLE) + add_executable(musredit + ${musredit_src} + ${out_ui} + ${musredit_rcc} + ) +endif (APPLE) if (Qt5WebEngine_FOUND) target_compile_options(musredit @@ -105,12 +115,28 @@ target_include_directories(musredit target_link_libraries(musredit ${qt_libs}) #--- installation info -------------------------------------------------------- -install( - TARGETS - musredit - RUNTIME DESTINATION - bin -) +if (APPLE) + set_target_properties(musredit PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_BUNDLE_NAME "musredit" + MACOSX_BUNDLE_INFO_STRING "musredit simplifies the handling of the msr-files for uSR fitting." + MACOSX_BUNDLE_ICON_FILE "musredit.icns" + MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}" + MACOSX_FRAMEWORK_IDENTIFIER ch.psi.musredit + MACOSX_BUNDLE_COPYRIGHT "Andreas Suter" + RESOURCE ${macosx_icon} + ) +endif (APPLE) + +if (APPLE) + install( TARGETS musredit + BUNDLE DESTINATION /Applications + ) +else (APPLE) + install( TARGETS musredit + RUNTIME DESTINATION bin + ) +endif (APPLE) #--- documentation installation info ------------------------------------------ install( From 8f3ed6f222bdb6e524432d7e248af15b39efdfed Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 30 May 2018 09:25:43 +0200 Subject: [PATCH 80/99] disable OpenMP check for MacOSX. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7598e700..c9292eb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,13 +81,13 @@ endif (FFTW3F_THREAD_FOUND) find_package(LibXml2 REQUIRED) #--- check for OpenMP --------------------------------------------------------- -if (try_OpenMP) +if (try_OpenMP AND NOT APPLE) find_package(OpenMP) if (OpenMP_FOUND) add_definitions(-DHAVE_GOMP) set(HAVE_GOMP 1 CACHE INTERNAL "Have GOMP") endif (OpenMP_FOUND) -endif (try_OpenMP) +endif (try_OpenMP AND NOT APPLE) #--- check for Qt ------------------------------------------------------------- if (qt_based_tools) From 54040c6bcdc76a8c655bc753841df5d1c95e8a97 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 30 May 2018 09:26:50 +0200 Subject: [PATCH 81/99] slightly adopted such that the about dialog is also present on MacOSX. --- src/musredit_qt5/musredit/PTextEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index 23160e34..797ddd23 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -817,7 +817,7 @@ void PTextEdit::setupHelpActions() connect( a, SIGNAL( triggered() ), this, SLOT( helpContents() )); menu->addAction(a); - a = new QAction(tr( "About ..." ), this ); + a = new QAction(tr( "Author(s) ..." ), this ); a->setStatusTip( tr("Help About") ); connect( a, SIGNAL( triggered() ), this, SLOT( helpAbout() )); menu->addAction(a); From f109281ba732e15dc4712d554ada2b06e0a37cdc Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 30 May 2018 09:28:02 +0200 Subject: [PATCH 82/99] cmake: add necessary parts for MacOSX application bundle. --- src/musredit_qt5/musrStep/CMakeLists.txt | 45 ++++++++++++++++++------ src/musredit_qt5/musrWiz/CMakeLists.txt | 44 +++++++++++++++++------ src/musredit_qt5/musredit/CMakeLists.txt | 4 +-- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/src/musredit_qt5/musrStep/CMakeLists.txt b/src/musredit_qt5/musrStep/CMakeLists.txt index 802e98d5..7932d139 100644 --- a/src/musredit_qt5/musrStep/CMakeLists.txt +++ b/src/musredit_qt5/musrStep/CMakeLists.txt @@ -21,10 +21,19 @@ set(CMAKE_AUTOUIC OFF) # add qt/rcc qt5_add_resources(musrStep_rcc musrStep.qrc) -add_executable(musrStep - ${musrStep_src} - ${musrStep_rcc} -) +set(macosx_icon icons/musrStep.icns) +if (APPLE) + add_executable(musrStep MACOSX_BUNDLE + ${musrStep_src} + ${musrStep_rcc} + ${macosx_icon} + ) +else (APPLE) + add_executable(musrStep + ${musrStep_src} + ${musrStep_rcc} + ) +endif (APPLE) target_include_directories(musrStep BEFORE PRIVATE @@ -38,10 +47,26 @@ target_include_directories(musrStep target_link_libraries(musrStep ${qt_libs}) #--- installation info -------------------------------------------------------- -install( - TARGETS - musrStep - RUNTIME DESTINATION - bin -) +if (APPLE) + set_target_properties(musrStep PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_BUNDLE_NAME "musrStep" + MACOSX_BUNDLE_INFO_STRING "musrfit: musrStep allows to reset/set the initial step size of a msr-files." + MACOSX_BUNDLE_ICON_FILE "musrStep.icns" + MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}" + MACOSX_BUNDLE_GUI_IDENTIFIER "ch.psi.lmu.musrStep" + MACOSX_BUNDLE_COPYRIGHT "Andreas Suter" + RESOURCE ${macosx_icon} + ) +endif (APPLE) + +if (APPLE) + install( TARGETS musrStep + BUNDLE DESTINATION /Applications + ) +else (APPLE) + install( TARGETS musrStep + RUNTIME DESTINATION bin + ) +endif (APPLE) diff --git a/src/musredit_qt5/musrWiz/CMakeLists.txt b/src/musredit_qt5/musrWiz/CMakeLists.txt index bc2db3f8..116d95a7 100644 --- a/src/musredit_qt5/musrWiz/CMakeLists.txt +++ b/src/musredit_qt5/musrWiz/CMakeLists.txt @@ -25,10 +25,19 @@ set(CMAKE_AUTOUIC OFF) # add qt/rcc qt5_add_resources(musrWiz_rcc musrWiz.qrc) -add_executable(musrWiz - ${musrWiz_src} - ${musrWiz_rcc} -) +set(macosx_icon icons/musrWiz.icns) +if (APPLE) + add_executable(musrWiz MACOSX_BUNDLE + ${musrWiz_src} + ${musrWiz_rcc} + ${macosx_icon} + ) +else (APPLE) + add_executable(musrWiz + ${musrWiz_src} + ${musrWiz_rcc} + ) +endif (APPLE) target_include_directories(musrWiz BEFORE PRIVATE @@ -42,10 +51,25 @@ target_include_directories(musrWiz target_link_libraries(musrWiz ${qt_libs}) #--- installation info -------------------------------------------------------- -install( - TARGETS - musrWiz - RUNTIME DESTINATION - bin -) +if (APPLE) + set_target_properties(musrWiz PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_BUNDLE_NAME "musrWiz" + MACOSX_BUNDLE_INFO_STRING "musrfit: musrWiz allows to create input msr-files if no templates are available." + MACOSX_BUNDLE_ICON_FILE "musrWiz.icns" + MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}" + MACOSX_BUNDLE_GUI_IDENTIFIER "ch.psi.lmu.musrWiz" + MACOSX_BUNDLE_COPYRIGHT "Andreas Suter" + RESOURCE ${macosx_icon} + ) +endif (APPLE) +if (APPLE) + install( TARGETS musrWiz + BUNDLE DESTINATION /Applications + ) +else (APPLE) + install( TARGETS musrWiz + RUNTIME DESTINATION bin + ) +endif (APPLE) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index ee47c199..d77727be 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -119,10 +119,10 @@ if (APPLE) set_target_properties(musredit PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "musredit" - MACOSX_BUNDLE_INFO_STRING "musredit simplifies the handling of the msr-files for uSR fitting." + MACOSX_BUNDLE_INFO_STRING "musrfit: musredit simplifies the handling of the msr-files for uSR fitting." MACOSX_BUNDLE_ICON_FILE "musredit.icns" MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}" - MACOSX_FRAMEWORK_IDENTIFIER ch.psi.musredit + MACOSX_BUNDLE_GUI_IDENTIFIER "ch.psi.lmu.musredit" MACOSX_BUNDLE_COPYRIGHT "Andreas Suter" RESOURCE ${macosx_icon} ) From 99e8eb9769238d46031330344a501a084a7bdf11 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 2 Jun 2018 12:41:13 +0200 Subject: [PATCH 83/99] cmake: added library version information to the targets. --- configure.ac | 8 ++++---- src/classes/CMakeLists.txt | 12 +++++++++++- src/external/BMWtools/CMakeLists.txt | 7 +++++++ src/external/MagProximity/CMakeLists.txt | 10 ++++++++-- .../MuSR_software/Class_MuSR_PSI/CMakeLists.txt | 6 ++++++ src/external/MusrRoot/CMakeLists.txt | 6 ++++++ src/external/Nonlocal/CMakeLists.txt | 6 ++++++ src/external/TLemRunHeader/CMakeLists.txt | 7 +++++++ src/external/libCalcMeanFieldsLEM/CMakeLists.txt | 7 +++++++ src/external/libCuba/src/CMakeLists.txt | 6 ++++++ src/external/libFitPofB/classes/CMakeLists.txt | 7 +++++++ src/external/libGapIntegrals/CMakeLists.txt | 7 +++++++ src/external/libLFRelaxation/CMakeLists.txt | 7 +++++++ src/external/libPhotoMeissner/classes/CMakeLists.txt | 7 +++++++ src/external/libSpinValve/classes/CMakeLists.txt | 7 +++++++ src/external/libZFRelaxation/CMakeLists.txt | 7 +++++++ src/external/mud/src/CMakeLists.txt | 6 ++++++ src/external/nexus/CMakeLists.txt | 7 +++++++ 18 files changed, 123 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index 8b3cb01c..e52c82c8 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_REVISION([m4_esyscmd_s([git describe --always])]) AC_PREREQ(2.63) -AC_INIT([musrfit],[1.2.1],[andreas.suter@psi.ch]) +AC_INIT([musrfit],[1.3.0],[andreas.suter@psi.ch]) AC_CONFIG_AUX_DIR(admin) AC_CANONICAL_HOST #AC_MSG_RESULT([${host} ${host_cpu} ${host_vendor} ${host_os}]) @@ -35,8 +35,8 @@ dnl ----------------------------------------------- #release versioning MUSR_MAJOR_VERSION=1 -MUSR_MINOR_VERSION=2 -MUSR_MICRO_VERSION=1 +MUSR_MINOR_VERSION=3 +MUSR_MICRO_VERSION=0 #release versioning MUSR_ROOT_MAJOR_VERSION=1 @@ -54,7 +54,7 @@ PSIBIN_MINOR_VERSION=1 PSIBIN_MICRO_VERSION=0 #release versioning -MUD_MAJOR_VERSION=0 +MUD_MAJOR_VERSION=1 MUD_MINOR_VERSION=0 MUD_MICRO_VERSION=0 diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index cfb60d70..ec775c9d 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -34,7 +34,7 @@ set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\$\{prefix\}") set(libdir "\$\{exec_prefix\}/lib") set(includedir "\$\{prefix\}/include") -set(MUSR_VERSION "1.2.0") +set(MUSR_VERSION "1.3.0") set(MUSR_LIBRARY_NAME "PMusr") configure_file("PMusr.pc.in" "PMusr.pc" @ONLY) set(USERFCN_LIBRARY_NAME "PUserFcnBase") @@ -89,6 +89,16 @@ add_library(PUserFcnBase SHARED PUserFcnBase.cpp PUserFcnBaseDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PMusr + PROPERTIES + VERSION ${MUSR_VERSION} +) +set_target_properties(PUserFcnBase + PROPERTIES + VERSION ${MUSR_VERSION} +) #--- make sure that the include directory is found ---------------------------- target_include_directories( PUserFcnBase BEFORE PRIVATE $ diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index be9cdaa4..a8e9b9cb 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -29,6 +29,13 @@ add_library(BMWtools SHARED TTrimSPDataHandler.cpp BMWIntegrator.cpp ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(BMWtools + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( BMWtools BEFORE PRIVATE diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt index 6e4fb369..8dff6467 100644 --- a/src/external/MagProximity/CMakeLists.txt +++ b/src/external/MagProximity/CMakeLists.txt @@ -18,8 +18,8 @@ set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\$\{prefix\}") set(libdir "\$\{exec_prefix\}/lib") set(includedir "\$\{prefix\}/include") -set(PNL_PIPPARDFITTER_VERSION "1.0.0") -set(PNL_PIPPARDFITTER_LIBRARY_NAME "PMagProximityFitter") +set(P_MAG_PROXIMITY_FITTER_VERSION "1.0.0") +set(P_MAG_PROXIMITY_FITTER_LIBRARY_NAME "PMagProximityFitter") configure_file("PMagProximityFitter.pc.in" "PMagProximityFitter.pc" @ONLY) #--- lib creation ------------------------------------------------------------- @@ -38,6 +38,12 @@ target_include_directories( $ ) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PMagProximityFitter + PROPERTIES + VERSION ${P_MAG_PROXIMITY_FITTER_VERSION} +) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt index 0c5d59d4..6822f600 100644 --- a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt +++ b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt @@ -21,6 +21,12 @@ endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") #--- lib creation ------------------------------------------------------------- add_library(Class_MuSR_PSI SHARED MuSR_td_PSI_bin.cpp) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(Class_MuSR_PSI + PROPERTIES + VERSION ${PSIBIN_VERSION} +) + #--- install Class_MuSR_PSI solib --------------------------------------------- install(TARGETS Class_MuSR_PSI DESTINATION lib) diff --git a/src/external/MusrRoot/CMakeLists.txt b/src/external/MusrRoot/CMakeLists.txt index 5fc03006..91e1c52a 100644 --- a/src/external/MusrRoot/CMakeLists.txt +++ b/src/external/MusrRoot/CMakeLists.txt @@ -24,6 +24,12 @@ target_include_directories( TMusrRunHeader BEFORE PRIVATE $ ) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(TMusrRunHeader + PROPERTIES + VERSION ${MUSR_ROOT_VERSION} +) + #--- add library dependencies ------------------------------------------------- target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt index 8fd64c28..815615f4 100644 --- a/src/external/Nonlocal/CMakeLists.txt +++ b/src/external/Nonlocal/CMakeLists.txt @@ -39,6 +39,12 @@ target_include_directories( $ ) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PNL_PippardFitter + PROPERTIES + VERSION ${PNL_PIPPARDFITTER_VERSION} +) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PNL_PippardFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt index f4e95672..d3bfb436 100644 --- a/src/external/TLemRunHeader/CMakeLists.txt +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -24,6 +24,13 @@ add_library(TLemRunHeader SHARED TLemStats.cxx TLemStatsDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(TLemRunHeader + PROPERTIES + VERSION ${LEM_VERSION} +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( TLemRunHeader BEFORE PRIVATE $ diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt index bfa48ca9..0916986b 100644 --- a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -31,6 +31,13 @@ add_library(CalcMeanFieldsLEM SHARED TCalcMeanFieldsLEM.cpp TCalcMeanFieldsLEMDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(CalcMeanFieldsLEM + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( CalcMeanFieldsLEM BEFORE PRIVATE diff --git a/src/external/libCuba/src/CMakeLists.txt b/src/external/libCuba/src/CMakeLists.txt index f6fd8f8b..0e9fe068 100644 --- a/src/external/libCuba/src/CMakeLists.txt +++ b/src/external/libCuba/src/CMakeLists.txt @@ -24,6 +24,12 @@ add_library(cuba SHARED $ ) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(cuba + PROPERTIES + VERSION ${CUBA_VERSION} +) + #--- install cuba solib ------------------------------------------------------- install(TARGETS cuba DESTINATION lib) diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index b02abcf6..c3187dea 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -61,6 +61,13 @@ add_library(FitPofB SHARED TSkewedGss.cpp TSkewedGssDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(FitPofB + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( FitPofB BEFORE PRIVATE diff --git a/src/external/libGapIntegrals/CMakeLists.txt b/src/external/libGapIntegrals/CMakeLists.txt index ea67b173..9009e8ea 100644 --- a/src/external/libGapIntegrals/CMakeLists.txt +++ b/src/external/libGapIntegrals/CMakeLists.txt @@ -29,6 +29,13 @@ add_library(GapIntegrals SHARED TGapIntegrals.cpp TGapIntegralsDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(GapIntegrals + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( GapIntegrals BEFORE PRIVATE diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt index 3fc4a3c4..ece9198a 100644 --- a/src/external/libLFRelaxation/CMakeLists.txt +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -29,6 +29,13 @@ add_library(LFRelaxation SHARED TLFRelaxation.cpp TLFRelaxationDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(LFRelaxation + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( LFRelaxation BEFORE PRIVATE diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt index f1d9826f..f376155d 100644 --- a/src/external/libPhotoMeissner/classes/CMakeLists.txt +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -34,6 +34,13 @@ add_library(PPhotoMeissner SHARED PStartupHandler_PM.cpp PStartupHandler_PMDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PPhotoMeissner + PROPERTIES + VERSION ${P_PHOTO_MEISSNER_VERSION} +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( PPhotoMeissner BEFORE PRIVATE diff --git a/src/external/libSpinValve/classes/CMakeLists.txt b/src/external/libSpinValve/classes/CMakeLists.txt index 39161b82..94711cd9 100644 --- a/src/external/libSpinValve/classes/CMakeLists.txt +++ b/src/external/libSpinValve/classes/CMakeLists.txt @@ -34,6 +34,13 @@ add_library(PSpinValve SHARED PStartupHandler_SV.cpp PStartupHandler_SVDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PSpinValve + PROPERTIES + VERSION ${P_SPIN_VALVE_VERSION} +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( PSpinValve BEFORE PRIVATE diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt index 30b067ad..f97d0e7f 100644 --- a/src/external/libZFRelaxation/CMakeLists.txt +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -29,6 +29,13 @@ add_library(ZFRelaxation SHARED ZFRelaxation.cpp ZFRelaxationDict.cxx ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(ZFRelaxation + PROPERTIES + VERSION "1.0.0" +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( ZFRelaxation BEFORE PRIVATE diff --git a/src/external/mud/src/CMakeLists.txt b/src/external/mud/src/CMakeLists.txt index 572c6754..8dda07a2 100644 --- a/src/external/mud/src/CMakeLists.txt +++ b/src/external/mud/src/CMakeLists.txt @@ -20,6 +20,12 @@ add_library(mud SHARED mud_tri_ti.c ) +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(mud + PROPERTIES + VERSION ${MUD_VERSION} +) + #--- install mud solib -------------------------------------------------------- install(TARGETS mud DESTINATION lib) diff --git a/src/external/nexus/CMakeLists.txt b/src/external/nexus/CMakeLists.txt index 69023fbd..592576ab 100644 --- a/src/external/nexus/CMakeLists.txt +++ b/src/external/nexus/CMakeLists.txt @@ -15,6 +15,13 @@ configure_file("PNeXus.pc.in" "PNeXus.pc" @ONLY) add_library(PNeXus SHARED PNeXus.cpp ) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(PNeXus + PROPERTIES + VERSION ${PNEXUS_VERSION} +) + #--- make sure that the include directory is found ---------------------------- target_include_directories( PNeXus BEFORE PRIVATE $ From cd82c613aab28ba9198470ee3f322421c5b3172b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 4 Jun 2018 09:29:16 +0200 Subject: [PATCH 84/99] added missing header files. --- src/classes/PRunMuMinus.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/classes/PRunMuMinus.cpp b/src/classes/PRunMuMinus.cpp index 720075cb..6ac952e3 100644 --- a/src/classes/PRunMuMinus.cpp +++ b/src/classes/PRunMuMinus.cpp @@ -27,6 +27,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef HAVE_GOMP #include #endif From 57b7c528654a9aa7db88f0a7369d7d85302e73cd Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 5 Jun 2018 07:59:24 +0200 Subject: [PATCH 85/99] cmake: added -O2 which gives the performance improvement needed. --- src/classes/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index ec775c9d..55293958 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -103,6 +103,11 @@ set_target_properties(PUserFcnBase target_include_directories( PUserFcnBase BEFORE PRIVATE $ ) + +#--- add compile options for optimization ------------------------------------- +target_compile_options(PMusr PUBLIC -O2) +target_compile_options(PUserFcnBase PUBLIC -O2) + #--- add OpenMP compile options if needed ------------------------------------- if (OpenMP_FOUND) target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS}) From 88d5bb64b422642566ede4534af7aca54eac0537 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 5 Jun 2018 09:47:47 +0200 Subject: [PATCH 86/99] cmake: replaced debug info by a real one. --- src/musredit_qt5/musredit/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/musredit_qt5/musredit/CMakeLists.txt b/src/musredit_qt5/musredit/CMakeLists.txt index d77727be..88098ccf 100644 --- a/src/musredit_qt5/musredit/CMakeLists.txt +++ b/src/musredit_qt5/musredit/CMakeLists.txt @@ -6,15 +6,15 @@ find_package(Qt5WebKit QUIET) set(qt_libs Qt5::Core Qt5::Widgets Qt5::Network Qt5::Xml Qt5::Svg Qt5::PrintSupport) if (Qt5WebEngine_FOUND) - message("debug> Qt5WebEngine is present.") + message("-- Qt5WebEngine is present.") find_package(Qt5WebEngineWidgets QUIET CONFIG REQUIRED) set(qt_libs ${qt_libs} Qt5::WebEngine Qt5::WebEngineWidgets) elseif (Qt5WebKit_FOUND) - message("debug> Qt5WebKit is present.") + message("-- Qt5WebKit is present.") find_package(Qt5WebKitWidgets QUIET CONFIG REQUIRED) set(qt_libs ${qt_libs} Qt5::WebKit Qt5::WebKitWidgets) else (Qt5WebEngine_FOUND) - message("debug> Neither Qt5WebEngine nor Qt5WebKit found.") + message("-- Neither Qt5WebEngine nor Qt5WebKit found.") endif (Qt5WebEngine_FOUND) set(musredit_src From e4d56519b2dd29cc843a2f55d84aa51577ce488c Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 5 Jun 2018 19:12:35 +0200 Subject: [PATCH 87/99] cmake: added optimization and at the same time added the beta-NMR lib. --- src/external/BMWtools/CMakeLists.txt | 3 + src/external/CMakeLists.txt | 4 ++ src/external/MagProximity/CMakeLists.txt | 3 + .../Class_MuSR_PSI/CMakeLists.txt | 3 + src/external/MusrRoot/CMakeLists.txt | 3 + src/external/Nonlocal/CMakeLists.txt | 3 + src/external/TLemRunHeader/CMakeLists.txt | 3 + src/external/libBNMR/CMakeLists.txt | 56 +++++++++++++++++++ .../libCalcMeanFieldsLEM/CMakeLists.txt | 3 + .../libFitPofB/classes/CMakeLists.txt | 7 ++- src/external/libGapIntegrals/CMakeLists.txt | 6 +- src/external/libLFRelaxation/CMakeLists.txt | 7 ++- .../libPhotoMeissner/classes/CMakeLists.txt | 7 ++- .../libSpinValve/classes/CMakeLists.txt | 3 + src/external/libZFRelaxation/CMakeLists.txt | 7 ++- src/external/mud/src/CMakeLists.txt | 3 + src/external/nexus/CMakeLists.txt | 3 + 17 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 src/external/libBNMR/CMakeLists.txt diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index a8e9b9cb..c7b49e80 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -45,6 +45,9 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(BMWtools PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(BMWtools ${ROOT_LIBRARIES} cuba) diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 2b510ec4..fc7dd53c 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -15,6 +15,10 @@ if (BMWlibs) add_subdirectory(libZFRelaxation) endif (BMWlibs) +if (BNMRlibs) + add_subdirectory(libBNMR) +endif (BNMRlibs) + add_subdirectory(mud) add_subdirectory(MusrRoot) add_subdirectory(TLemRunHeader) diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt index 8dff6467..024515ed 100644 --- a/src/external/MagProximity/CMakeLists.txt +++ b/src/external/MagProximity/CMakeLists.txt @@ -44,6 +44,9 @@ set_target_properties(PMagProximityFitter VERSION ${P_MAG_PROXIMITY_FITTER_VERSION} ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(PMagProximityFitter PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt index 6822f600..288d30e6 100644 --- a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt +++ b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt @@ -27,6 +27,9 @@ set_target_properties(Class_MuSR_PSI VERSION ${PSIBIN_VERSION} ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(Class_MuSR_PSI PUBLIC -O3) + #--- install Class_MuSR_PSI solib --------------------------------------------- install(TARGETS Class_MuSR_PSI DESTINATION lib) diff --git a/src/external/MusrRoot/CMakeLists.txt b/src/external/MusrRoot/CMakeLists.txt index 91e1c52a..01e00733 100644 --- a/src/external/MusrRoot/CMakeLists.txt +++ b/src/external/MusrRoot/CMakeLists.txt @@ -30,6 +30,9 @@ set_target_properties(TMusrRunHeader VERSION ${MUSR_ROOT_VERSION} ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(TMusrRunHeader PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt index 815615f4..fc1d4561 100644 --- a/src/external/Nonlocal/CMakeLists.txt +++ b/src/external/Nonlocal/CMakeLists.txt @@ -45,6 +45,9 @@ set_target_properties(PNL_PippardFitter VERSION ${PNL_PIPPARDFITTER_VERSION} ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(PNL_PippardFitter PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PNL_PippardFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt index d3bfb436..8e374480 100644 --- a/src/external/TLemRunHeader/CMakeLists.txt +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -36,6 +36,9 @@ target_include_directories( TLemRunHeader BEFORE PRIVATE $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(TLemRunHeader PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(TLemRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/libBNMR/CMakeLists.txt b/src/external/libBNMR/CMakeLists.txt new file mode 100644 index 00000000..b2c5ff8c --- /dev/null +++ b/src/external/libBNMR/CMakeLists.txt @@ -0,0 +1,56 @@ +# - beta-NMR library ---------------------------------------------------------- + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + TBNMRDict + -I${FFTW3_INCLUDE_DIR} + -I${MUSRFIT_INC} + TBNMR.h + LINKDEF TBNMRLinkDef.h +) + +#--- lib creation ------------------------------------------------------------- +add_library(BNMR SHARED + TBNMR.cpp + TBNMRDict.cxx +) + +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + BNMR BEFORE PRIVATE + $ + $ +) + +#--- set target properties, e.g. version -------------------------------------- +set_target_properties(BNMR + PROPERTIES + VERSION "1.0.0" +) + +#--- add compile options for optimization ------------------------------------- +target_compile_options(BNMR PUBLIC -O3) + +#--- add library dependencies ------------------------------------------------- +target_link_libraries(BNMR ${ROOT_LIBRARIES} PUserFcnBase) + +#--- install libBNMR solib ---------------------------------------------------- +install(TARGETS BNMR DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libTBNMRDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libTBNMRDict.rootmap + DESTINATION lib +) + +#--- install libBNMR header --------------------------------------------------- +install( + FILES + TBNMR.h + DESTINATION + include +) + diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt index 0916986b..01e9c58f 100644 --- a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -48,6 +48,9 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(CalcMeanFieldsLEM PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(CalcMeanFieldsLEM ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} BMWtools FitPofB PUserFcnBase diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index c3187dea..e673f369 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -79,8 +79,13 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(FitPofB PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- -target_link_libraries(FitPofB ${FFTW3_LIBRARY} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} TLemRunHeader PUserFcnBase BMWtools) +target_link_libraries(FitPofB + ${FFTW3_LIBRARY} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} + TLemRunHeader PUserFcnBase BMWtools) #--- install FitPofB solib ---------------------------------------------------- install(TARGETS FitPofB DESTINATION lib) diff --git a/src/external/libGapIntegrals/CMakeLists.txt b/src/external/libGapIntegrals/CMakeLists.txt index 9009e8ea..8935ab87 100644 --- a/src/external/libGapIntegrals/CMakeLists.txt +++ b/src/external/libGapIntegrals/CMakeLists.txt @@ -45,9 +45,13 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(GapIntegrals PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(GapIntegrals - ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools + ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} + PUserFcnBase cuba BMWtools ) #--- install LFRelaxation solib ----------------------------------------------- diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt index ece9198a..6c4d5504 100644 --- a/src/external/libLFRelaxation/CMakeLists.txt +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -45,8 +45,13 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(LFRelaxation PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- -target_link_libraries(LFRelaxation ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) # //as35 cuba lib still missing +target_link_libraries(LFRelaxation ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} + ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools +) #--- install LFRelaxation solib ----------------------------------------------- install(TARGETS LFRelaxation DESTINATION lib) diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt index f376155d..8d226aeb 100644 --- a/src/external/libPhotoMeissner/classes/CMakeLists.txt +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -49,8 +49,13 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(PPhotoMeissner PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- -target_link_libraries(PPhotoMeissner ${FFTW3_LIBRARY} ${GSL_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) +target_link_libraries(PPhotoMeissner + ${FFTW3_LIBRARY} ${GSL_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase +) #--- install PPhotoMeissner solib --------------------------------------------- install(TARGETS PPhotoMeissner DESTINATION lib) diff --git a/src/external/libSpinValve/classes/CMakeLists.txt b/src/external/libSpinValve/classes/CMakeLists.txt index 94711cd9..8f3ceaa3 100644 --- a/src/external/libSpinValve/classes/CMakeLists.txt +++ b/src/external/libSpinValve/classes/CMakeLists.txt @@ -49,6 +49,9 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(PSpinValve PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PSpinValve ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt index f97d0e7f..77a39917 100644 --- a/src/external/libZFRelaxation/CMakeLists.txt +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -45,8 +45,13 @@ target_include_directories( $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(ZFRelaxation PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- -target_link_libraries(ZFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase BMWtools) +target_link_libraries(ZFRelaxation + ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools +) #--- install ZFRelaxation solib ----------------------------------------------- install(TARGETS ZFRelaxation DESTINATION lib) diff --git a/src/external/mud/src/CMakeLists.txt b/src/external/mud/src/CMakeLists.txt index 8dda07a2..c6dd2ab7 100644 --- a/src/external/mud/src/CMakeLists.txt +++ b/src/external/mud/src/CMakeLists.txt @@ -26,6 +26,9 @@ set_target_properties(mud VERSION ${MUD_VERSION} ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(mud PUBLIC -O3) + #--- install mud solib -------------------------------------------------------- install(TARGETS mud DESTINATION lib) diff --git a/src/external/nexus/CMakeLists.txt b/src/external/nexus/CMakeLists.txt index 592576ab..f8d1e02b 100644 --- a/src/external/nexus/CMakeLists.txt +++ b/src/external/nexus/CMakeLists.txt @@ -27,6 +27,9 @@ target_include_directories( PNeXus BEFORE PRIVATE $ ) +#--- add compile options for optimization ------------------------------------- +target_compile_options(PNeXus PUBLIC -O3) + #--- add library dependencies ------------------------------------------------- target_link_libraries(PNeXus ${NEXUS_LIBRARY}) From 25b59ab4734ee91ebb6ffc79580d94a6307694d9 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 12:54:54 +0200 Subject: [PATCH 88/99] slight performance increase. --- src/classes/PRunNonMusr.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/classes/PRunNonMusr.cpp b/src/classes/PRunNonMusr.cpp index 2b188141..412aa8a8 100644 --- a/src/classes/PRunNonMusr.cpp +++ b/src/classes/PRunNonMusr.cpp @@ -41,6 +41,8 @@ PRunNonMusr::PRunNonMusr() : PRunBase() { fNoOfFitBins = 0; fPacking = 1; + fStartTimeBin = 0; + fEndTimeBin = 0; fHandleTag = kEmpty; @@ -105,13 +107,11 @@ Double_t PRunNonMusr::CalcChiSquare(const std::vector& par) } // calculate chi square - Double_t x; - for (UInt_t i=0; isize(); i++) { + Double_t x(1.0); + for (UInt_t i=fStartTimeBin; i<=fEndTimeBin; i++) { x = fData.GetX()->at(i); - if ((x>=fFitStartTime) && (x<=fFitEndTime)) { - diff = fData.GetValue()->at(i) - fTheory->Func(x, par, fFuncValues); - chisq += diff*diff / (fData.GetError()->at(i)*fData.GetError()->at(i)); - } + diff = fData.GetValue()->at(i) - fTheory->Func(x, par, fFuncValues); + chisq += diff*diff / (fData.GetError()->at(i)*fData.GetError()->at(i)); } return chisq; @@ -279,6 +279,17 @@ Bool_t PRunNonMusr::PrepareFitData() fNoOfFitBins++; } + // get start/end bin + const PDoubleVector *xx = fData.GetX(); + fStartTimeBin = 0; + fEndTimeBin = xx->size()-1; + for (UInt_t i=0; isize(); i++) { + if (xx->at(i) < fFitStartTime) + fStartTimeBin = i; + if (xx->at(i) < fFitEndTime) + fEndTimeBin = i; + } + return success; } From 5540b628c1687becc6a499b2f08f718bfc50e101 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 12:55:31 +0200 Subject: [PATCH 89/99] slight performance increase - missing header file. --- src/include/PRunNonMusr.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/include/PRunNonMusr.h b/src/include/PRunNonMusr.h index 3bb7ce97..49ff94ef 100644 --- a/src/include/PRunNonMusr.h +++ b/src/include/PRunNonMusr.h @@ -65,6 +65,9 @@ class PRunNonMusr : public PRunBase UInt_t fNoOfFitBins; ///< number of bins to be be fitted Int_t fPacking; ///< packing for this particular run. Either given in the RUN- or GLOBAL-block. + + Int_t fStartTimeBin; ///< bin at which the fit starts + Int_t fEndTimeBin; ///< bin at which the fit ends }; #endif // _PRUNNONMUSR_H_ From 92f230e22054626e1c462e58ada303559b08891b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 12:56:27 +0200 Subject: [PATCH 90/99] fixed a bug when compiling with -DNDEBUG --- src/external/libCuba/src/common/Fork.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/external/libCuba/src/common/Fork.c b/src/external/libCuba/src/common/Fork.c index 82e21349..358cefdc 100644 --- a/src/external/libCuba/src/common/Fork.c +++ b/src/external/libCuba/src/common/Fork.c @@ -95,9 +95,16 @@ Extern void SUFFIX(cubafork)(Spin **pspin) for( core = -spin->spec.naccel; core < spin->spec.ncores; ++core ) { int fd[2]; pid_t pid; + //as35 the next two if's fix the crash when compiling with -DNDEBUG + if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fd) == -1) + assert(0); + if ((pid = fork()) == -1) + assert(0); + /*//as35 see comment just above assert( socketpair(AF_LOCAL, SOCK_STREAM, 0, fd) != -1 && (pid = fork()) != -1 ); + */ if( pid == 0 ) { close(fd[0]); free(spin); From 1c901f73ba34b4803fa2bf3a55c9288b32ec5e7e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 12:57:38 +0200 Subject: [PATCH 91/99] cmake: make sure that at least one build type is defined (default: Release) --- CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9292eb5..547fe023 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,18 @@ option(try_OpenMP "try to use OpenMP if available" ON) set(qt_version AUTO CACHE STRING "provide a specific Qt version to be used.") set_property(CACHE qt_version PROPERTY STRINGS AUTO 3 4 5) +#--- set a default build type if none was specified --------------------------- +set(default_build_type "Release") + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + #--- perform some checks and generate the config.h ---------------------------- include(CheckTypeSize) include(CheckIncludeFiles) @@ -191,6 +203,9 @@ message(" -------") message("") message(" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}") message("") +message(" Build Type: ${CMAKE_BUILD_TYPE}") +message(" -----------") +message("") message(" Requirements:") message(" -------------") message("") From a756a2def4a5efd9461e8a18aae3ffa349b553d4 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 12:59:18 +0200 Subject: [PATCH 92/99] cmake: got rid of target_compile_options which are better controlled by the build type. --- src/classes/CMakeLists.txt | 4 ---- src/external/libCuba/src/common/CMakeLists.txt | 7 ------- src/external/libCuba/src/cuhre/CMakeLists.txt | 7 ------- src/external/libCuba/src/divonne/CMakeLists.txt | 8 +------- src/external/libCuba/src/suave/CMakeLists.txt | 7 ------- src/external/libCuba/src/vegas/CMakeLists.txt | 7 ------- 6 files changed, 1 insertion(+), 39 deletions(-) diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt index 55293958..64a03d90 100644 --- a/src/classes/CMakeLists.txt +++ b/src/classes/CMakeLists.txt @@ -104,10 +104,6 @@ target_include_directories( PUserFcnBase BEFORE PRIVATE $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PMusr PUBLIC -O2) -target_compile_options(PUserFcnBase PUBLIC -O2) - #--- add OpenMP compile options if needed ------------------------------------- if (OpenMP_FOUND) target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS}) diff --git a/src/external/libCuba/src/common/CMakeLists.txt b/src/external/libCuba/src/common/CMakeLists.txt index be571a05..40dc6890 100644 --- a/src/external/libCuba/src/common/CMakeLists.txt +++ b/src/external/libCuba/src/common/CMakeLists.txt @@ -25,10 +25,3 @@ target_compile_definitions( common PRIVATE ${COMP_DEF} ) -set(COMP_OPT "-O3") -set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") -set(COMP_OPT ${COMP_OPT} "-ffast-math") -set(COMP_OPT ${COMP_OPT} "-fPIC") -target_compile_options( - common PRIVATE ${COMP_OPT} -) diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt index 820e2783..7cd60ff7 100644 --- a/src/external/libCuba/src/cuhre/CMakeLists.txt +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -23,10 +23,3 @@ target_compile_definitions( cuhre PRIVATE ${COMP_DEF} ) -set(COMP_OPT "-O3") -set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") -set(COMP_OPT ${COMP_OPT} "-ffast-math") -set(COMP_OPT ${COMP_OPT} "-fPIC") -target_compile_options( - cuhre PRIVATE ${COMP_OPT} -) diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt index 18e0d64f..cc609b62 100644 --- a/src/external/libCuba/src/divonne/CMakeLists.txt +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -23,10 +23,4 @@ target_compile_definitions( divonne PRIVATE ${COMP_DEF} ) -set(COMP_OPT "-O3") -set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") -set(COMP_OPT ${COMP_OPT} "-ffast-math") -set(COMP_OPT ${COMP_OPT} "-fPIC") -target_compile_options( - divonne PRIVATE ${COMP_OPT} -) + diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt index 7d14defe..0b21ff7a 100644 --- a/src/external/libCuba/src/suave/CMakeLists.txt +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -23,10 +23,3 @@ target_compile_definitions( suave PRIVATE ${COMP_DEF} ) -set(COMP_OPT "-O3") -set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") -set(COMP_OPT ${COMP_OPT} "-ffast-math") -set(COMP_OPT ${COMP_OPT} "-fPIC") -target_compile_options( - suave PRIVATE ${COMP_OPT} -) diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt index cc7efddb..d65c5a1e 100644 --- a/src/external/libCuba/src/vegas/CMakeLists.txt +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -23,10 +23,3 @@ target_compile_definitions( vegas PRIVATE ${COMP_DEF} ) -set(COMP_OPT "-O3") -set(COMP_OPT ${COMP_OPT} "-fomit-frame-pointer") -set(COMP_OPT ${COMP_OPT} "-ffast-math") -set(COMP_OPT ${COMP_OPT} "-fPIC") -target_compile_options( - vegas PRIVATE ${COMP_OPT} -) From 342da696dbcc8c166a6c1fe1ea1532663b0bb97d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 13:09:39 +0200 Subject: [PATCH 93/99] cmake: got rid of target_compile_options which are better controlled by the build type. --- src/external/BMWtools/CMakeLists.txt | 3 --- src/external/MagProximity/CMakeLists.txt | 3 --- src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt | 3 --- src/external/MusrRoot/CMakeLists.txt | 3 --- src/external/Nonlocal/CMakeLists.txt | 3 --- src/external/TLemRunHeader/CMakeLists.txt | 3 --- src/external/libBNMR/CMakeLists.txt | 3 --- src/external/libCalcMeanFieldsLEM/CMakeLists.txt | 3 --- src/external/libFitPofB/classes/CMakeLists.txt | 3 --- src/external/libGapIntegrals/CMakeLists.txt | 3 --- src/external/libLFRelaxation/CMakeLists.txt | 3 --- src/external/libPhotoMeissner/classes/CMakeLists.txt | 3 --- src/external/libSpinValve/classes/CMakeLists.txt | 3 --- src/external/libZFRelaxation/CMakeLists.txt | 3 --- src/external/mud/src/CMakeLists.txt | 3 --- src/external/nexus/CMakeLists.txt | 3 --- 16 files changed, 48 deletions(-) diff --git a/src/external/BMWtools/CMakeLists.txt b/src/external/BMWtools/CMakeLists.txt index c7b49e80..a8e9b9cb 100644 --- a/src/external/BMWtools/CMakeLists.txt +++ b/src/external/BMWtools/CMakeLists.txt @@ -45,9 +45,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(BMWtools PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(BMWtools ${ROOT_LIBRARIES} cuba) diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt index 024515ed..8dff6467 100644 --- a/src/external/MagProximity/CMakeLists.txt +++ b/src/external/MagProximity/CMakeLists.txt @@ -44,9 +44,6 @@ set_target_properties(PMagProximityFitter VERSION ${P_MAG_PROXIMITY_FITTER_VERSION} ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PMagProximityFitter PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt index 288d30e6..6822f600 100644 --- a/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt +++ b/src/external/MuSR_software/Class_MuSR_PSI/CMakeLists.txt @@ -27,9 +27,6 @@ set_target_properties(Class_MuSR_PSI VERSION ${PSIBIN_VERSION} ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(Class_MuSR_PSI PUBLIC -O3) - #--- install Class_MuSR_PSI solib --------------------------------------------- install(TARGETS Class_MuSR_PSI DESTINATION lib) diff --git a/src/external/MusrRoot/CMakeLists.txt b/src/external/MusrRoot/CMakeLists.txt index 01e00733..91e1c52a 100644 --- a/src/external/MusrRoot/CMakeLists.txt +++ b/src/external/MusrRoot/CMakeLists.txt @@ -30,9 +30,6 @@ set_target_properties(TMusrRunHeader VERSION ${MUSR_ROOT_VERSION} ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(TMusrRunHeader PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/Nonlocal/CMakeLists.txt b/src/external/Nonlocal/CMakeLists.txt index fc1d4561..815615f4 100644 --- a/src/external/Nonlocal/CMakeLists.txt +++ b/src/external/Nonlocal/CMakeLists.txt @@ -45,9 +45,6 @@ set_target_properties(PNL_PippardFitter VERSION ${PNL_PIPPARDFITTER_VERSION} ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PNL_PippardFitter PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(PNL_PippardFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/TLemRunHeader/CMakeLists.txt b/src/external/TLemRunHeader/CMakeLists.txt index 8e374480..d3bfb436 100644 --- a/src/external/TLemRunHeader/CMakeLists.txt +++ b/src/external/TLemRunHeader/CMakeLists.txt @@ -36,9 +36,6 @@ target_include_directories( TLemRunHeader BEFORE PRIVATE $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(TLemRunHeader PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(TLemRunHeader ${ROOT_LIBRARIES}) diff --git a/src/external/libBNMR/CMakeLists.txt b/src/external/libBNMR/CMakeLists.txt index b2c5ff8c..520ad368 100644 --- a/src/external/libBNMR/CMakeLists.txt +++ b/src/external/libBNMR/CMakeLists.txt @@ -30,9 +30,6 @@ set_target_properties(BNMR VERSION "1.0.0" ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(BNMR PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(BNMR ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt index 01e9c58f..0916986b 100644 --- a/src/external/libCalcMeanFieldsLEM/CMakeLists.txt +++ b/src/external/libCalcMeanFieldsLEM/CMakeLists.txt @@ -48,9 +48,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(CalcMeanFieldsLEM PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(CalcMeanFieldsLEM ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} BMWtools FitPofB PUserFcnBase diff --git a/src/external/libFitPofB/classes/CMakeLists.txt b/src/external/libFitPofB/classes/CMakeLists.txt index e673f369..54760667 100644 --- a/src/external/libFitPofB/classes/CMakeLists.txt +++ b/src/external/libFitPofB/classes/CMakeLists.txt @@ -79,9 +79,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(FitPofB PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(FitPofB ${FFTW3_LIBRARY} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} diff --git a/src/external/libGapIntegrals/CMakeLists.txt b/src/external/libGapIntegrals/CMakeLists.txt index 8935ab87..63fb1b05 100644 --- a/src/external/libGapIntegrals/CMakeLists.txt +++ b/src/external/libGapIntegrals/CMakeLists.txt @@ -45,9 +45,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(GapIntegrals PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(GapIntegrals ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} diff --git a/src/external/libLFRelaxation/CMakeLists.txt b/src/external/libLFRelaxation/CMakeLists.txt index 6c4d5504..af9274f3 100644 --- a/src/external/libLFRelaxation/CMakeLists.txt +++ b/src/external/libLFRelaxation/CMakeLists.txt @@ -45,9 +45,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(LFRelaxation PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(LFRelaxation ${GSL_LIBRARIES} ${FFTW3F_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt index 8d226aeb..80d284a2 100644 --- a/src/external/libPhotoMeissner/classes/CMakeLists.txt +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -49,9 +49,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PPhotoMeissner PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(PPhotoMeissner ${FFTW3_LIBRARY} ${GSL_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase diff --git a/src/external/libSpinValve/classes/CMakeLists.txt b/src/external/libSpinValve/classes/CMakeLists.txt index 8f3ceaa3..94711cd9 100644 --- a/src/external/libSpinValve/classes/CMakeLists.txt +++ b/src/external/libSpinValve/classes/CMakeLists.txt @@ -49,9 +49,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PSpinValve PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(PSpinValve ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase) diff --git a/src/external/libZFRelaxation/CMakeLists.txt b/src/external/libZFRelaxation/CMakeLists.txt index 77a39917..6c5fba1f 100644 --- a/src/external/libZFRelaxation/CMakeLists.txt +++ b/src/external/libZFRelaxation/CMakeLists.txt @@ -45,9 +45,6 @@ target_include_directories( $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(ZFRelaxation PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(ZFRelaxation ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase cuba BMWtools diff --git a/src/external/mud/src/CMakeLists.txt b/src/external/mud/src/CMakeLists.txt index c6dd2ab7..8dda07a2 100644 --- a/src/external/mud/src/CMakeLists.txt +++ b/src/external/mud/src/CMakeLists.txt @@ -26,9 +26,6 @@ set_target_properties(mud VERSION ${MUD_VERSION} ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(mud PUBLIC -O3) - #--- install mud solib -------------------------------------------------------- install(TARGETS mud DESTINATION lib) diff --git a/src/external/nexus/CMakeLists.txt b/src/external/nexus/CMakeLists.txt index f8d1e02b..592576ab 100644 --- a/src/external/nexus/CMakeLists.txt +++ b/src/external/nexus/CMakeLists.txt @@ -27,9 +27,6 @@ target_include_directories( PNeXus BEFORE PRIVATE $ ) -#--- add compile options for optimization ------------------------------------- -target_compile_options(PNeXus PUBLIC -O3) - #--- add library dependencies ------------------------------------------------- target_link_libraries(PNeXus ${NEXUS_LIBRARY}) From 4a881fad5665a88dc9e99e34a9906855f4618301 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 16:04:27 +0200 Subject: [PATCH 94/99] cleaned up signed/unsigned int issues. --- src/classes/PMsrHandler.cpp | 8 ++++---- src/classes/PMusrCanvas.cpp | 6 +++--- src/classes/PRunAsymmetry.cpp | 4 ++-- src/classes/PRunAsymmetryRRF.cpp | 12 +++++------- src/classes/PRunBase.cpp | 2 +- src/classes/PRunListCollection.cpp | 12 ++++++------ src/classes/PRunMuMinus.cpp | 4 ++-- src/classes/PRunSingleHisto.cpp | 8 ++++---- src/classes/PRunSingleHistoRRF.cpp | 8 ++++---- src/external/MagProximity/PMPRgeHandler.cpp | 2 +- .../libPhotoMeissner/classes/PStartupHandler_PM.cpp | 2 +- 11 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/classes/PMsrHandler.cpp b/src/classes/PMsrHandler.cpp index 70106d68..a1b20238 100644 --- a/src/classes/PMsrHandler.cpp +++ b/src/classes/PMsrHandler.cpp @@ -2607,7 +2607,7 @@ void PMsrHandler::SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin) Int_t PMsrHandler::ParameterInUse(UInt_t paramNo) { // check that paramNo is within acceptable range - if ((paramNo < 0) || (paramNo >= fParam.size())) + if (paramNo >= fParam.size()) return -1; return fParamInUse[paramNo]; @@ -6164,10 +6164,10 @@ UInt_t PMsrHandler::LastSignificant(Double_t dval, UInt_t precLimit) } // find last significant digit - for (UInt_t i=strlen(str)-1; i>=0; i--) { + for (Int_t i=strlen(str)-1; i>=0; i--) { if (str[i] != '0') { - if ((i-decimalPoint) < precLimit) - lastSignificant = i-decimalPoint; + if (((UInt_t)i-decimalPoint) < precLimit) + lastSignificant = (UInt_t)i-decimalPoint; else lastSignificant = precLimit; break; diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 74b93014..dfd35246 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -6456,10 +6456,10 @@ UInt_t PMusrCanvas::GetNeededAccuracy(PMsrParamStructure param) } // find last significant digit - for (UInt_t i=strlen(str)-1; i>=0; i--) { + for (Int_t i=strlen(str)-1; i>=0; i--) { if (str[i] != '0') { - if ((i-decimalPoint) < precLimit) - accuracy = i-decimalPoint; + if (((UInt_t)i-decimalPoint) < precLimit) + accuracy = (UInt_t)i-decimalPoint; else accuracy = precLimit; break; diff --git a/src/classes/PRunAsymmetry.cpp b/src/classes/PRunAsymmetry.cpp index 6d253a3d..bed87c8c 100644 --- a/src/classes/PRunAsymmetry.cpp +++ b/src/classes/PRunAsymmetry.cpp @@ -574,7 +574,7 @@ Bool_t PRunAsymmetry::PrepareData() addRunSize = addRunData->GetDataBin(forwardHistoNo[k])->size(); for (UInt_t j=0; jGetDataBin(forwardHistoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) { forward[k][j] += addRunData->GetDataBin(forwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k]); } } @@ -585,7 +585,7 @@ Bool_t PRunAsymmetry::PrepareData() addRunSize = addRunData->GetDataBin(backwardHistoNo[k])->size(); for (UInt_t j=0; jGetDataBin(backwardHistoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) { backward[k][j] += addRunData->GetDataBin(backwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1]); } } diff --git a/src/classes/PRunAsymmetryRRF.cpp b/src/classes/PRunAsymmetryRRF.cpp index 7dbc4d34..7da88be1 100644 --- a/src/classes/PRunAsymmetryRRF.cpp +++ b/src/classes/PRunAsymmetryRRF.cpp @@ -566,7 +566,7 @@ Bool_t PRunAsymmetryRRF::PrepareData() addRunSize = addRunData->GetDataBin(forwardHistoNo[k])->size(); for (UInt_t j=0; jGetDataBin(forwardHistoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) { forward[k][j] += addRunData->GetDataBin(forwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k]); } } @@ -577,7 +577,7 @@ Bool_t PRunAsymmetryRRF::PrepareData() addRunSize = addRunData->GetDataBin(backwardHistoNo[k])->size(); for (UInt_t j=0; jGetDataBin(backwardHistoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) { backward[k][j] += addRunData->GetDataBin(backwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1]); } } @@ -597,7 +597,7 @@ Bool_t PRunAsymmetryRRF::PrepareData() for (UInt_t i=1; iGetDataBin(forwardHistoNo[i])->size(); j++) { // loop over the bin indices // make sure that the index stays within proper range - if ((j+fT0s[2*i]-fT0s[0] >= 0) && (j+fT0s[2*i]-fT0s[0] < runData->GetDataBin(forwardHistoNo[i])->size())) { + if (((Int_t)j+fT0s[2*i]-fT0s[0] >= 0) && (j+fT0s[2*i]-fT0s[0] < runData->GetDataBin(forwardHistoNo[i])->size())) { fForward[j] += forward[i][j+(Int_t)fT0s[2*i]-(Int_t)fT0s[0]]; } } @@ -771,8 +771,7 @@ Bool_t PRunAsymmetryRRF::SubtractEstimatedBkg() } // check if start is within histogram bounds - if ((start[0] < 0) || (start[0] >= fForward.size()) || - (start[1] < 0) || (start[1] >= fBackward.size())) { + if ((start[0] >= fForward.size()) || (start[1] >= fBackward.size())) { cerr << endl << ">> PRunAsymmetryRRF::SubtractEstimatedBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths (f/b) = (" << fForward.size() << "/" << fBackward.size() << ")."; cerr << endl << ">> background start (f/b) = (" << start[0] << "/" << start[1] << ")."; @@ -780,8 +779,7 @@ Bool_t PRunAsymmetryRRF::SubtractEstimatedBkg() } // check if end is within histogram bounds - if ((end[0] < 0) || (end[0] >= fForward.size()) || - (end[1] < 0) || (end[1] >= fBackward.size())) { + if ((end[0] >= fForward.size()) || (end[1] >= fBackward.size())) { cerr << endl << ">> PRunAsymmetryRRF::SubtractEstimatedBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths (f/b) = (" << fForward.size() << "/" << fBackward.size() << ")."; cerr << endl << ">> background end (f/b) = (" << end[0] << "/" << end[1] << ")."; diff --git a/src/classes/PRunBase.cpp b/src/classes/PRunBase.cpp index 654ca198..2d2466c4 100644 --- a/src/classes/PRunBase.cpp +++ b/src/classes/PRunBase.cpp @@ -75,7 +75,7 @@ PRunBase::PRunBase(PMsrHandler *msrInfo, PRunDataHandler *rawData, UInt_t runNo, fValid = true; fRunNo = static_cast(runNo); - if ((runNo < 0) || (runNo > fMsrInfo->GetMsrRunList()->size())) { + if (runNo > fMsrInfo->GetMsrRunList()->size()) { fRunInfo = 0; return; } diff --git a/src/classes/PRunListCollection.cpp b/src/classes/PRunListCollection.cpp index 3cc36d01..e11bb0c6 100644 --- a/src/classes/PRunListCollection.cpp +++ b/src/classes/PRunListCollection.cpp @@ -788,7 +788,7 @@ PRunData* PRunListCollection::GetSingleHisto(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: - if ((index < 0) || (index >= fRunSingleHistoList.size())) { + if (index >= fRunSingleHistoList.size()) { cerr << endl << ">> PRunListCollection::GetSingleHisto(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; @@ -831,7 +831,7 @@ PRunData* PRunListCollection::GetSingleHistoRRF(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: - if ((index < 0) || (index >= fRunSingleHistoRRFList.size())) { + if (index >= fRunSingleHistoRRFList.size()) { cerr << endl << ">> PRunListCollection::GetSingleHistoRRF(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; @@ -874,7 +874,7 @@ PRunData* PRunListCollection::GetAsymmetry(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: // called from musrfit when dumping the data - if ((index < 0) || (index > fRunAsymmetryList.size())) { + if (index > fRunAsymmetryList.size()) { cerr << endl << ">> PRunListCollection::GetAsymmetry(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; @@ -917,7 +917,7 @@ PRunData* PRunListCollection::GetAsymmetryRRF(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: // called from musrfit when dumping the data - if ((index < 0) || (index > fRunAsymmetryRRFList.size())) { + if (index > fRunAsymmetryRRFList.size()) { cerr << endl << ">> PRunListCollection::GetAsymmetryRRF(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; @@ -960,7 +960,7 @@ PRunData* PRunListCollection::GetMuMinus(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: - if ((index < 0) || (index > fRunMuMinusList.size())) { + if (index > fRunMuMinusList.size()) { cerr << endl << ">> PRunListCollection::GetMuMinus(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; @@ -1002,7 +1002,7 @@ PRunData* PRunListCollection::GetNonMusr(UInt_t index, EDataSwitch tag) switch (tag) { case kIndex: - if ((index < 0) || (index > fRunNonMusrList.size())) { + if (index > fRunNonMusrList.size()) { cerr << endl << ">> PRunListCollection::GetNonMusr(): **ERROR** index = " << index << " out of bounds"; cerr << endl; return 0; diff --git a/src/classes/PRunMuMinus.cpp b/src/classes/PRunMuMinus.cpp index 6ac952e3..2a1dcefa 100644 --- a/src/classes/PRunMuMinus.cpp +++ b/src/classes/PRunMuMinus.cpp @@ -520,7 +520,7 @@ Bool_t PRunMuMinus::PrepareData() addRunSize = addRunData->GetDataBin(histoNo[k])->size(); for (UInt_t j=0; jGetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]); } } @@ -538,7 +538,7 @@ Bool_t PRunMuMinus::PrepareData() for (UInt_t i=1; iGetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices // make sure that the index stays within proper range - if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { + if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]]; } } diff --git a/src/classes/PRunSingleHisto.cpp b/src/classes/PRunSingleHisto.cpp index e72edaab..a882c44b 100644 --- a/src/classes/PRunSingleHisto.cpp +++ b/src/classes/PRunSingleHisto.cpp @@ -764,7 +764,7 @@ Bool_t PRunSingleHisto::PrepareData() addRunSize = addRunData->GetDataBin(histoNo[k])->size(); for (UInt_t j=0; jGetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]); } } @@ -782,7 +782,7 @@ Bool_t PRunSingleHisto::PrepareData() for (UInt_t i=1; iGetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices // make sure that the index stays within proper range - if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { + if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]]; } } @@ -1766,7 +1766,7 @@ Bool_t PRunSingleHisto::EstimateBkg(UInt_t histoNo) } // check if start is within histogram bounds - if ((start < 0) || (start >= fForward.size())) { + if (start >= fForward.size()) { cerr << endl << ">> PRunSingleHisto::EstimatBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths = " << fForward.size(); cerr << endl << ">> background start = " << start; @@ -1775,7 +1775,7 @@ Bool_t PRunSingleHisto::EstimateBkg(UInt_t histoNo) } // check if end is within histogram bounds - if ((end < 0) || (end >= fForward.size())) { + if (end >= fForward.size()) { cerr << endl << ">> PRunSingleHisto::EstimatBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths = " << fForward.size(); cerr << endl << ">> background end = " << end; diff --git a/src/classes/PRunSingleHistoRRF.cpp b/src/classes/PRunSingleHistoRRF.cpp index aa1fb46f..62314a23 100644 --- a/src/classes/PRunSingleHistoRRF.cpp +++ b/src/classes/PRunSingleHistoRRF.cpp @@ -493,7 +493,7 @@ Bool_t PRunSingleHistoRRF::PrepareData() addRunSize = addRunData->GetDataBin(histoNo[k])->size(); for (UInt_t j=0; jGetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices // make sure that the index stays in the proper range - if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { + if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) { forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]); } } @@ -511,7 +511,7 @@ Bool_t PRunSingleHistoRRF::PrepareData() for (UInt_t i=1; iGetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices // make sure that the index stays within proper range - if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { + if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) { fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]]; } } @@ -1173,7 +1173,7 @@ Bool_t PRunSingleHistoRRF::EstimateBkg(UInt_t histoNo) } // check if start is within histogram bounds - if ((start < 0) || (start >= fForward.size())) { + if (start >= fForward.size()) { cerr << endl << ">> PRunSingleHistoRRF::EstimatBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths = " << fForward.size(); cerr << endl << ">> background start = " << start; @@ -1182,7 +1182,7 @@ Bool_t PRunSingleHistoRRF::EstimateBkg(UInt_t histoNo) } // check if end is within histogram bounds - if ((end < 0) || (end >= fForward.size())) { + if (end >= fForward.size()) { cerr << endl << ">> PRunSingleHistoRRF::EstimatBkg(): **ERROR** background bin values out of bound!"; cerr << endl << ">> histo lengths = " << fForward.size(); cerr << endl << ">> background end = " << end; diff --git a/src/external/MagProximity/PMPRgeHandler.cpp b/src/external/MagProximity/PMPRgeHandler.cpp index ee23cda9..760fac01 100644 --- a/src/external/MagProximity/PMPRgeHandler.cpp +++ b/src/external/MagProximity/PMPRgeHandler.cpp @@ -94,7 +94,7 @@ Double_t PMPRgeHandler::GetRgeValue(const Int_t index, const Double_t dist) UInt_t distIdx = (UInt_t)(dist/(fRgeDataList[index].stoppingDistance[1]-fRgeDataList[index].stoppingDistance[0])); - if ((distIdx >= fRgeDataList[index].stoppingDistance.size()) || (distIdx < 0)) { + if (distIdx >= fRgeDataList[index].stoppingDistance.size()) { rgeVal = 0.0; } else { rgeVal = fRgeDataList[index].stoppingAmplitude[distIdx] + diff --git a/src/external/libPhotoMeissner/classes/PStartupHandler_PM.cpp b/src/external/libPhotoMeissner/classes/PStartupHandler_PM.cpp index a0f4d491..b9f4780e 100644 --- a/src/external/libPhotoMeissner/classes/PStartupHandler_PM.cpp +++ b/src/external/libPhotoMeissner/classes/PStartupHandler_PM.cpp @@ -95,7 +95,7 @@ Double_t PRgeHandler_PM::GetRgeValue(const Int_t index, const Double_t dist) UInt_t distIdx = (UInt_t)(dist/(fRgeDataList[index].stoppingDistance[1]-fRgeDataList[index].stoppingDistance[0])); - if ((distIdx >= fRgeDataList[index].stoppingDistance.size()) || (distIdx < 0)) { + if (distIdx >= fRgeDataList[index].stoppingDistance.size()) { rgeVal = 0.0; } else { rgeVal = fRgeDataList[index].stoppingAmplitude[distIdx] + From f987776d41f4ffdae46156742377e5c5fb4e24c0 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 17:06:42 +0200 Subject: [PATCH 95/99] cmake: cuba needs a -fPIC flag explicitly, otherwise it doesn't link with all compilers. --- src/external/libCuba/src/common/CMakeLists.txt | 4 ++++ src/external/libCuba/src/cuhre/CMakeLists.txt | 4 ++++ src/external/libCuba/src/divonne/CMakeLists.txt | 5 ++++- src/external/libCuba/src/suave/CMakeLists.txt | 4 ++++ src/external/libCuba/src/vegas/CMakeLists.txt | 4 ++++ 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/external/libCuba/src/common/CMakeLists.txt b/src/external/libCuba/src/common/CMakeLists.txt index 40dc6890..f91ee941 100644 --- a/src/external/libCuba/src/common/CMakeLists.txt +++ b/src/external/libCuba/src/common/CMakeLists.txt @@ -25,3 +25,7 @@ target_compile_definitions( common PRIVATE ${COMP_DEF} ) +#--- set compiler options ----------------------------------------------------- +target_compile_options( + common PRIVATE -fPIC +) diff --git a/src/external/libCuba/src/cuhre/CMakeLists.txt b/src/external/libCuba/src/cuhre/CMakeLists.txt index 7cd60ff7..9a9147e4 100644 --- a/src/external/libCuba/src/cuhre/CMakeLists.txt +++ b/src/external/libCuba/src/cuhre/CMakeLists.txt @@ -23,3 +23,7 @@ target_compile_definitions( cuhre PRIVATE ${COMP_DEF} ) +#--- set compiler options ----------------------------------------------------- +target_compile_options( + cuhre PRIVATE -fPIC +) diff --git a/src/external/libCuba/src/divonne/CMakeLists.txt b/src/external/libCuba/src/divonne/CMakeLists.txt index cc609b62..6576edc3 100644 --- a/src/external/libCuba/src/divonne/CMakeLists.txt +++ b/src/external/libCuba/src/divonne/CMakeLists.txt @@ -23,4 +23,7 @@ target_compile_definitions( divonne PRIVATE ${COMP_DEF} ) - +#--- set compiler options ----------------------------------------------------- +target_compile_options( + divonne PRIVATE -fPIC +) diff --git a/src/external/libCuba/src/suave/CMakeLists.txt b/src/external/libCuba/src/suave/CMakeLists.txt index 0b21ff7a..93116ea0 100644 --- a/src/external/libCuba/src/suave/CMakeLists.txt +++ b/src/external/libCuba/src/suave/CMakeLists.txt @@ -23,3 +23,7 @@ target_compile_definitions( suave PRIVATE ${COMP_DEF} ) +#--- set compiler options ----------------------------------------------------- +target_compile_options( + suave PRIVATE -fPIC +) diff --git a/src/external/libCuba/src/vegas/CMakeLists.txt b/src/external/libCuba/src/vegas/CMakeLists.txt index d65c5a1e..975712bc 100644 --- a/src/external/libCuba/src/vegas/CMakeLists.txt +++ b/src/external/libCuba/src/vegas/CMakeLists.txt @@ -23,3 +23,7 @@ target_compile_definitions( vegas PRIVATE ${COMP_DEF} ) +#--- set compiler options ----------------------------------------------------- +target_compile_options( + vegas PRIVATE -fPIC +) From 41a5e493ebcc7066e54d4017061b264a4b081c62 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 6 Jun 2018 17:39:00 +0200 Subject: [PATCH 96/99] cmake: added missing include path when generating the dictionary. --- src/external/MagProximity/CMakeLists.txt | 5 ++++- src/external/libPhotoMeissner/classes/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/external/MagProximity/CMakeLists.txt b/src/external/MagProximity/CMakeLists.txt index 8dff6467..c2c47b14 100644 --- a/src/external/MagProximity/CMakeLists.txt +++ b/src/external/MagProximity/CMakeLists.txt @@ -10,7 +10,10 @@ root_generate_dictionary( LINKDEF PMagProximityFitterLinkDef.h ) root_generate_dictionary( - PMPStartupHandlerDict PMPStartupHandler.h LINKDEF PMPStartupHandlerLinkDef.h + PMPStartupHandlerDict + -I${MUSRFIT_INC} + PMPStartupHandler.h + LINKDEF PMPStartupHandlerLinkDef.h ) #--- create pkg-config info --------------------------------------------------- diff --git a/src/external/libPhotoMeissner/classes/CMakeLists.txt b/src/external/libPhotoMeissner/classes/CMakeLists.txt index 80d284a2..99fecd68 100644 --- a/src/external/libPhotoMeissner/classes/CMakeLists.txt +++ b/src/external/libPhotoMeissner/classes/CMakeLists.txt @@ -13,6 +13,7 @@ root_generate_dictionary( ) root_generate_dictionary( PStartupHandler_PMDict + -I${MUSRFIT_INC} -I${CMAKE_CURRENT_SOURCE_DIR}/../include PStartupHandler_PM.h LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/../include/PStartupHandler_PMLinkDef.h From 14fbb427ddc1aa7cef8747c7deb5c8e035c4e902 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 7 Jun 2018 11:19:52 +0200 Subject: [PATCH 97/99] cmake: summary cosmetics --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 547fe023..7c010137 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,10 +198,8 @@ message("| Summary message("| |") message("|-----------------------------------------------------------------------|") message("") -message(" System:") +message(" System: ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}") message(" -------") -message("") -message(" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}") message("") message(" Build Type: ${CMAKE_BUILD_TYPE}") message(" -----------") From dcced32d275cf7e966dae40ea9bf1852059fa6b1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 7 Jun 2018 11:20:35 +0200 Subject: [PATCH 98/99] updated to include cmake. --- INSTALL | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/INSTALL b/INSTALL index 00b8527f..2a96191f 100644 --- a/INSTALL +++ b/INSTALL @@ -1,17 +1,80 @@ #--------------------------------------------------------------------- # INSTALL -# AS/BMW, 2014/02/11; 2011/01/27 #--------------------------------------------------------------------- -To get it all build: +There are currently 2 wasy to build musrfit: + +1) via the automake tool chain (this will phase out until 2019) +2) via the cmake tool chain (this will be the default starting from now) + +In the following it is assumed that the system variable ROOTSYS is already +defined and pointing to the place where CERN/ROOT is installed. + +#---------------------------------- +# Install via automake tool chain +#---------------------------------- + +To get it build: sh autogen.sh - ./configure --prefix=/opt/cern/root (or where ever musrfit should be installed) + ./configure --prefix=$ROOTSYS (or where ever musrfit should be installed) make make install (as superuser -- maybe) + /sbin/ldconfig (as superuser) + +configure comes with a couple of options. For details either execute + + ./configure --help + +or check under http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html +for a more detailed description. + +An example with NeXus support and BMWlibs needed would look like this + + sh autogen.sh + ./configure --enable-NeXus --enable-BMWlibs --prefix=$ROOTSYS + make + make install (as superuser -- maybe) + /sbin/ldconfig (as superuser) In the optimal case, everything is set up ;-) +#---------------------------------- +# Install via cmake tool chain +#---------------------------------- + +cmake minimal required version is 3.6. + +musrfit supports only out-of-source cmake build! Hence, go to the musrfit +directory and + + mkdir build + cd build + cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS (or where ever musrfit should be installed) + cmake --build ./ --clean-first + make install (as superuser -- maybe) + /sbin/ldconfig (as superuser) + +cmake configuration allows a couple of switches. For details check the user +docu under + + http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html + +An example with NeXus support and BMWlibs needed would look like this + + mkdir build + cd build + cmake ../ -Dnexus=1 -DBMWlibs=1 -DCMAKE_INSTALL_PREFIX=$ROOTSYS + cmake --build ./ --clean-first + make install (as superuser -- maybe) + /sbin/ldconfig (as superuser) + +In the optimal case, everything is set up ;-) + +#---------------------------------- +# Link to the docu +#---------------------------------- + More information about the software requirements and the installation can be found at: http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html From 68832491173a4a8adf262bef8a3a56e88704fca3 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 8 Jun 2018 15:51:10 +0200 Subject: [PATCH 99/99] update of the docu. --- doc/html/user/MUSR/BmwLibs.html | 18 +- doc/html/user/MUSR/CiteMusrFit.html | 26 +- doc/html/user/MUSR/LibFitPofB.html | 14 +- doc/html/user/MUSR/LibZFRelaxation.html | 20 +- doc/html/user/MUSR/Msr2Data.html | 28 +- doc/html/user/MUSR/MusrFit.html | 77 +++- .../user/MUSR/MusrFitAcknowledgements.html | 25 +- doc/html/user/MUSR/MusrFitSetup.html | 380 +++++++++++++---- doc/html/user/MUSR/MusrFitSetupDKS.html | 390 ++++++++++++++++++ doc/html/user/MUSR/MusrGui.html | 28 +- doc/html/user/MUSR/MusrRoot.html | 28 +- doc/html/user/MUSR/QuickStart.html | 22 +- doc/html/user/MUSR/TutorialSingleHisto.html | 24 +- doc/html/user/MUSR/WebHome.html | 31 +- 14 files changed, 878 insertions(+), 233 deletions(-) create mode 100644 doc/html/user/MUSR/MusrFitSetupDKS.html diff --git a/doc/html/user/MUSR/BmwLibs.html b/doc/html/user/MUSR/BmwLibs.html index 9f343c80..cde4b3cb 100644 --- a/doc/html/user/MUSR/BmwLibs.html +++ b/doc/html/user/MUSR/BmwLibs.html @@ -1,6 +1,6 @@ - + @@ -14,14 +14,14 @@ - + - - + - + + - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+

Setting up musrfit / DKS: high speed fitting with GPU's

+

+ +

+In the years 2016/2017 we explored ways to speed up current fitting frameworks, especially musrfit. This allows now to analyze histogram sets of high field spectrometers like HAL-9500 at PSI without the error-prone RRF fitting (see U. Locans and A. Suter, " musrfit - Real Time Parameter Fitting Using GPUs", accepted for the proceedings of the muSR2017 conference in Sapporo, and the Memo from A. Suter, "Rotating Reference Frame Fits", in the musrfit source code). At the same time it can help to speed-up elaborate global fits tremendously, and dealing properly with muonium. It also allows Apple Mac users to speed up their fitting code on the CPU. Currently it is not straight forward to get musrfit multi-threaded under macOS since Apple doesn't be default support OpenMP. DKS enables musrfit to utilize OpenCL instead which is present on macOS by default. +

+Warning: before you run into the shop to buy a gamer graphic card or a Tesla card, make sure that you have an appropriate server with a sufficiently strong power supply! +

+However, the current musrfit/DKS version doesn't yet support all theory functions on the GPU. In case the theory function is not yet available for the GPU, musrfit will fall back to the CPU implementation. +

+Conceptually the setup of musrfit/DKS is as following:
    +
  1. install the latest hardware driver for your graphic card. +
  2. install the GPU SDK which enables number crunching (CUDA for NVIDIA, OpenCL for AMD) +
  3. install DKS +
  4. install the musrfit version which is DKS ready +
+

+In the following the description for the installation of musrfit/DKS for the following systems will be discussed in some more detail:
    +
  • NVIDIA Tesla K40c +
  • AMD Graphic Card (Radeon R9 390X) +
  • macOS in order to get OpenCL support +
+

+The usage of musrfit with GPU acceleration and OpenCL support is described in the 'User manual of the μSR data analysis software musrfit '. The additional musrfit / DKS commands are labelled in MAROON . +

+

1 Setting up musrfit/DKS for a Tesla K40c (NVIDIA)

+

+It is assumed that the Tesla K40c is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal: +

+
+$ lspci | grep NVIDIA
+
+

+On the response you should find something like +

+
+05:00.0 3D controller: NVIDIA Corporation GK110BGL [Tesla K40c] (rev a1)
+
+

+which means that the OS physically recognises your card. +

+

1.1 Driver Installation for the Tesla K40c

+

+Next, you will need to download and install the driver for your card. Select the proper operating system, card, etc. from the NVIDIA download center. At PSI we are running currently Red Hat Enterprise Linux 7.x (RHEL) for which we will get a rpm (something like nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm). Install it and make sure there is no conflict with the nouveau driver of the system. +

+

1.2 Installation of CUDA

+

+Download the CUDA SDK form NVIDIA for your system. Again, for the RHEL 7.x this is an rpm. After the installation of the rpm you should reboot your machine. Afterwards you are ready for the installation of DKS. +

+ +

1.3 Installation of DKS

+

+For the following list of commands the '$' will be given as the command prompt. Do not enter it! Also some comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on. +DKS stands for Dynamical Kernel Scheduler and provides a thin interface allowing host applications to incorporate GPU's and other hardware accelerators. +

+Details can be found in the papers listed here, or on the DKS wiki page. +

+In brief the installation should be something like this:
+# go to whatever directory you would like to clone/install DKS
+# For macOS DKS will likely to got to $HOME/Applications to be consistent with the musrfit docu for macOS
+$ cd $HOME/Apps
+$ git clone https://gitlab.psi.ch/uldis_l/DKS.git
+$ cd DKS
+$ mkdir build
+$ cd build
+$ cmake ../ -DENABLE_MUSR=1 -DCMAKE_INSTALL_PREFIX=../exec
+$ cmake --build ./ --clean-first
+$ make install
+
+

+Since DKS is installed in a non-standard path, a couple of additional small steps are required. This will be different for Linux compared to macOS. +

+For Linux: +

+add the DKS library path to /etc/ld.so.conf.d/musrfit-x86_64.conf and execute as super user +

+
+$ /sbin/ldconfig
+
+

+For macOS: +

+add the DKS path to $HOME/.profile: +

+
+export DKS=$HOME/Applications/DKS/exec
+export LD_LIBRARY_PATH=$DKS/lib:$LD_LIBRARY_PATH
+
+launchctl setenv DKS $DKS
+launchctl setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH
+
+

+

1.4 Installation of musrfit for DKS

+

+Most of the installation steps are the same as described for musrfit without GPU support. +Here only the differences are explained. First checkout musrfit, then you will need to switch the working branch which is done by
+$ cd $HOME/Apps/musrfit
+$ git checkout dks6
+
+

+

1.4.1 Install via automake

+

+The configure script for musrfit has now a couple of more tags/options, which are:
+
--enable-dks
by default this is set to no, hence if you want to have GPU support you need to enable it. +
--with-cuda
with this tag you tell the configure script where it can find CUDA +
--with-opencl
with this tag you tell the configure script where it can find OpenCL +
--with-dks
with this tag you tell the configure script where it can find DKS +
+

+For a typical setup on a RHEL system it could look like this +
+$ ./configure --enable-ASlibs --enable-BMWlibs --enable-NeXus --with-dks=$HOME/Apps/DKS/exec --enable-dks --prefix=$ROOTSYS
+
+whereas for macOS it would typically look like this +
+$ ./configure --enable-ASlibs --enable-BMWlibs --enable-NeXus --with-dks=$HOME/Applications/DKS/exec --enable-dks --prefix=$ROOTSYS
+
+After +
+$ make
+$ make install
+
+and updating the shared library lookup table (only needed for Linux) +
+/sbin/ldconfig # as superuser / root
+
+you are done with the setup. +

+

1.4.2 Install via cmake

+

+There is on more configuration switch +

+
-Ddks=<value>
it allows to enable/disable =DKS support. The default is <value>=1, i.e. enabled. To disable use <value>=0. +
+

+For a typical setup on a RHEL system it could look like this +
+$ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -DASlibs=1 -DBMWlibs=1 -Dnexus=1
+
+whereas for macOS it would typically look like this +
+$ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -DASlibs=1 -DBMWlibs=1 -Dnexus=1
+
+

+After +
+$ cmake --build ./ --clean-first
+$ make install
+
+and updating the shared library lookup table (only needed for Linux) +
+/sbin/ldconfig # as superuser / root
+
+you are done with the setup. +

+

2 Setting up musrfit/DKS for a AMD Graphic Card (Radeon R9 390X)

+

+

2.1 Driver Installation for an AMD Graphic Card, e.g. Radeon R9 390X

+

+This will depend slightly on the AMD Card and operating system. Here I will summaries how it was done on a RHEL (Linux) system using a Radeon R9 390X. +

+It is assumed that the Radeon R9 390X is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal: +

+
+$ lspci | grep NVIDIA 
+
+

+On the response you should find something like +
+84:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X] (rev 80)
+
+which means that the OS physically recognises your card. +

+For RHEL7.x the AMDGPU-PRO driver should be used. It can be downloaded from here. +Unpack the driver +
+$ tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
+$ cd amdgpu-pro-17.10-414273
+
+

+Install the driver as root +
+$ ./amdgpu-pro-install --compute -y
+
+

+Here I assume that the AMD graphic card is only used for computation. You need to add the following command in order that the user 'blabla' (chance this to the appropriate user name) can access the GPU (otherwise only root works): +
+$ /sbin/usermod -a -G video blabla
+
+

+Reboot the machine. +

+

2.2 AMD APP Software Development Kit (SDK) to enable OpenCL support

+

+The AMD APP Software Development Kit (SDK) is a complete development platform created by AMD to allow you to quickly and easily develop applications accelerated by AMD APP technology. The SDK provides samples, documentation, and other materials to quickly get you started leveraging accelerated compute using OpenCL or C++ AMP in your C/C++ applications. +

+Download the AMD APP SDK 3.0 from here. +

+Extract the installer +
+$ tar -xvjf AMD-APP-SDKInstaller-v3.0.130.136-GA-linux64.tar.bz2
+
+

+Run the installer +
+$ ./AMD-APP-SDK-v3.0.130.136-GA-linux64.sh
+
+

+This will install the AMD APP SDK to /opt/AMDAPPSDK-3.0/ where you can find the OpenCL include and library files, as well as documentation and sample code. +The install guide for AMD OpenCL SDK can be found here. +

+

2.3 Installation of DKS and musrfit

+

+To install DKS and musrfit follow the instructions here. +

+

3 Setting up musrfit/DKS for macOS for OpenCL support

+

+Since Apple is not providing an out-of-the-box OpenMP support on their macOS compiler framework (Xcode), typically musrfit is just running single threaded. Here DKS can help since it delivers OpenCL support which is present on macOS. Hence, if you would like to run musrfit multi-threaded the easiest way is to use DKS. +

+Since there is no graphic card involved, you do not need any graphic card driver of additional SDK. The only thing you need DKS and the proper musrfit version. +

+The installation instruction for DKS / musrfit can be found here. +

+-- AndreasSuter - June 8, 2018
+

+

+
+
This topic: MUSR > WebHome > MusrFitSetupDKS
+Topic revision: 08 Jun 2018, AndreasSuter
+
+
+
+
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding PSI Wiki? Send feedback
+
+
+
+
+

+ + + + + + + + + + \ No newline at end of file diff --git a/doc/html/user/MUSR/MusrGui.html b/doc/html/user/MUSR/MusrGui.html index 2d1ef2ff..70fd6790 100644 --- a/doc/html/user/MUSR/MusrGui.html +++ b/doc/html/user/MUSR/MusrGui.html @@ -1,6 +1,6 @@ - + @@ -14,12 +14,11 @@ - + - - + + + + + - - - - + + + + - - + + + + + + + - - - - - - +