diff --git a/Cuba/COPYING b/Cuba/COPYING
new file mode 100644
index 0000000000000000000000000000000000000000..65c5ca88a67c30becee01c5a8816d964b03862f9
--- /dev/null
+++ b/Cuba/COPYING
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/Cuba/ChangeLog b/Cuba/ChangeLog
new file mode 100644
index 0000000000000000000000000000000000000000..cd0d52cb830e37886d8903c95b282c23de6683fc
--- /dev/null
+++ b/Cuba/ChangeLog
@@ -0,0 +1,598 @@
+25 Sep 15:
+
+- Fixed bug in Suave.tm (oversight of 'nmin' argument).
+
+
+7 May 15:
+
+- Fixed sign error in Cuhre's Rule.c (copy-&-paste error from
+  higher-precision weights in degree-9 rule).
+
+
+31 Mar 15:
+
+- Version 4.2: Added flag for resetting the state even if a state
+  file is available in Vegas (Bit 5 of 'flags').  Together with
+  Bit 4 (retain state file) the grid adapted for one integrand
+  can be re-used on another integrand.
+
+- Added --with-real=10 and --with-real=16 configuration options
+  for higher-precision versions of Cuba.
+
+
+26 Nov 14:
+
+- Divonne now applies Flatten to the Given list, hence either
+  a list of coordinates (as before) or a list of points can be
+  given.
+
+- Tweaked MathLink code for compatibility with older Mathematica
+  versions.
+
+
+25 Nov 14:
+
+- Version 4.1: Added 'ninsuf' argument to Suave.
+  When computing the integral value of a subregion, samples from a 
+  former pass contribute only of their number is larger than ninsuf.
+  Increasing ninsuf may reduce jumps in the chi^2 value.
+
+
+25 Nov 14:
+
+- Fixed subtle bug in Cuhre which could lead to longer run times
+  than in versions 1 and 2.
+
+- Fixed miscounting of degrees of freedom in rare cases in Suave.
+
+
+9 Oct 14:
+
+- Divonne now passes the userdata argument to the peakfinder
+  function, too.
+
+
+27 Aug 14:
+
+- Fixed problem due to which CUBACORESMAX was effectively ignored.
+
+- Fixed issues with MathLink compile for Mathematica 10.
+
+
+15 Aug 14:
+
+- Version 4.0: distinguishes Accelerators (GPUs) and Cores.
+  New distribution strategy (see manual), e.g. can now prescribe
+  maximum number of points per core, necessary for accelerators,
+  allows for load-levelling on cores.
+
+- No. of cores/accelerators and max. points per core/accel
+  can be set with environment variables
+  CUBACORES (as before) and CUBACORESMAX (or API call cubacores),
+  CUBAACCEL and CUBAACCELMAX (or API call cubaaccel).
+  API calls generally supersede the environment.
+
+- Can choose minimum verbosity level via environment variable
+  CUBAVERBOSE = 0..3 (or API call cubaverbose).
+
+- Can start cores/accels explicitly via cubafork/cubawait calls,
+  or have the integrator keep them running at exit.
+
+
+18 Apr 14:
+
+- Fixed uninitialized variable in update of Apr 11 that could lead
+  to a potential segfault in Divonne.
+
+
+11 Apr 14:
+
+- Added invocation of worker init/exit functions also for the master
+  whenever the number of samples is too small to be distributed.
+
+
+21 Mar 14:
+
+- Fixed glitch in Sobol quasi-random numbers for the long long int
+  versions introduced in the last update (forgotten typecast).
+
+
+18 Mar 14:
+
+- Fixed infinite loop in Sobol quasi-random numbers for maxeval
+  values >~ 2^30 (32-bit versions) or 2^62 (64-bit 'll' versions).
+
+
+22 Jan 14:
+
+- Removed 'Chop' from the Mathematica sampling procedure, which would
+  introduce an absolute lower scale for integrals quite close to zero.
+
+
+8 Jan 14:
+
+- Restricted detection of Qt to version 4.
+
+
+18 Dec 13:
+
+- Minor fixes in the MacOS build of partview (thanks to Hong Xu).
+
+
+11 Dec 13:
+
+- Version 3.3: Added new argument 'nvec' to let the integrand
+  function have more than one point at a time, e.g. to take advantage
+  of vectorization. 
+
+
+5 Nov 13:
+
+- Fixed MathLink compilation issues with MacOS 10.9/clang++.
+
+- Fixed spurious warning in partview.
+
+
+25 Sep 13:
+
+- Fixed issue with distribution of points to cores.  Because of
+  rounding up the number of points for each core it could happen
+  that the last one got nothing and kept waiting indefinitely.
+
+- Fixed bug in shared memory allocation of Divonne.
+
+- Added Korobov tables for Divonne extending the integration
+  dimension up to 257.
+
+
+17 Sep 13:
+
+- More compliance: Repaired some compiler hiccups.
+
+
+7 Aug 13:
+
+- Version 3.2: Moved all variable-size arrays to alloca and
+  cleaned up other bits that would lead to compiler warnings
+  on select systems.
+
+- Cuba now compiles with clang and icc (and even C89 compilers).
+
+- Fixed bug in chi-square determination in Cuhre introduced in 3.1.
+
+- Fixed bug in Ranlux for luxury level > 24.
+
+
+6 Jun 13:
+
+- Fixed segfault in repeated invocation of Divonne.
+
+
+4 May 13:
+
+- Version 3.1: Added check-pointing (state file) for Suave,
+  Divonne, Cuhre, too.  Implementation by B. Chokoufe.
+
+- The Suave, Divonne, and Cuhre API calls have changed w.r.t.
+  Version 3.0 ('statefile' argument added).
+
+- Improved handling of infinities by Divonne.
+
+
+28 Mar 13:
+
+- Fixed segfault in parallel Divonne for integration rules
+  (key = 7, 9, 11, 13).
+
+
+25 Mar 13:
+
+- Fixed segfault in parallel Divonne for non-Korobov random numbers.
+
+
+9 Jan 13:
+
+- Fixed bug for parallel Divonne, the 'children' fd_set was not
+  properly initialized.
+
+
+21 Dec 12:
+
+- Fixed bug for parallel Divonne and ncomp > 1.
+  (Workers transmitted only partial results and thus the master
+  waited indefinitely for data.)
+
+
+27 Nov 12:
+
+- Fixed bug when running Divonne with ngiven != 0 and CUBACORES > 1.
+
+
+6 Sep 12:
+
+- Added functions for (de)initialization of worker processes
+  (e.g. close file descriptors before exit).
+
+
+3 Jul 12:
+
+- Added fflush(NULL) before fork to avoid multiple write-out
+  of buffered content at child's exit(0).
+
+
+17 Apr 12:
+
+- Added 'keep state file' flag (bit 5) to not remove the state
+  file in Vegas even if the integration terminated normally.
+
+
+19 Mar 12:
+
+- Fixed two bugs in MathLink interfacing, obvious oversight from
+  last release.
+
+
+16 Feb 12:
+
+- Added shared memory communication for the processes running
+  in parallel.
+
+
+24 Nov 11:
+
+- Significantly rearranged Divonne, e.g. unrolled the recursion
+  on regions, for better parallelizability.
+
+- Improved parallelization through DoSample.
+
+- Automatic detection and usage of the free cores on a machine,
+  or else set CUBACORES to the number of cores one wishes to
+  utilize, with negative numbers meaning "up to" depending on
+  availability (e.g. -2 means "use up to two free cores").
+
+
+12 Aug 11:
+
+- Version 3.0: Added parallelization, currently 'only' through
+  the DoSample routine.  Uses fork/wait so integrands do not have
+  to be reentrant.
+
+  Specify number of cores in environment variable CUBACORES.
+  C/C++/Fortran only, Mathematica users need to replace MapSample
+  by ParallelMap or similar (as before).
+
+
+18 Jun 11:
+
+- Fixed problem with inner integration bounds depending on outer
+  ones in the MathLink executables.
+
+
+15 Feb 11:
+
+- Moved partview to Qt 4.
+
+- Rectified error reporting via longjmp, in particular avoiding
+  sending $Failed twice in MathLink which would upset the
+  following communications.
+
+
+13 Sep 10:
+
+- Added iteration number to integrand's optional parameters
+  (Vegas and Suave).
+
+- Fixed initialization problem when using state file in Vegas.
+
+- Added tests for MathLink to configure.
+
+
+20 Jul 10:
+
+- Fixed severe bug in divonne/Split.c (wrong sign in SignedDelta
+  macro).
+
+
+14 Jul 10:
+
+- Disabled optimization for gcc 4.2.x and 4.4.3, which would lead 
+  to an Internal Compiler Error when compiling Cuba, see
+  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40237
+  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42956
+
+
+21 Jun 10:
+
+- Fixed problem with bashy syntax in tools/mcc.
+
+
+8 Jun 10:
+
+- All Cuba functions now reentrant, except for gridptr_ and griddim_
+  in Vegas, which are intentionally preserved across calls.
+
+
+19 May 10:
+
+- Version 2.0: Changed invocations.
+
+- Added void *userdata to be passed to integrator.
+
+- Promoted integrand to int function, has to return 0 if successful,
+  otherwise integrator terminates immediately.
+
+- Moved all global variables (common blocks) to argument list.
+
+
+12 Feb 10:
+
+- Added Ranlux pseudo-random number generator.
+  Luxury level 0 (mis)used for Mersenne Twister branch
+  (but observe that Luxury level 24 = Luxury level 0).
+
+- Changed external variable mersenneseed to
+  struct { unsigned int level, seed; } cubarandom;
+
+
+22 Jul 09:
+
+- Fixed potential segfault in Split.c of Divonne, thanks to
+  Andreas v. Manteuffel.
+
+
+29 May 09:
+
+- Added flushing of grids in Vegas through a negative grid number.
+
+
+25 May 09:
+
+- Removed explicit pointer reference from reallocatable
+  "region_" array.
+
+
+8 May 09:
+
+- Improved memory handling in Divonne.
+
+
+8 Apr 09:
+
+- Version 1.6: Improved memory handling in Cuhre.
+  Thanks to Valery Yundin for pointing out the problem.
+
+
+6 Mar 09:
+
+- Fixed segfault in Divonne if all samples from a region returned NaN.
+
+- Reinstated fcc to fix static linkage problem with mcc 7.
+
+
+10 Feb 09:
+
+- Removed dependence on fcc script.
+
+
+19 Jan 09:
+
+- Added missing #include <stdlib.h> to partview.cpp.
+
+
+15 Jan 09:
+
+- Fixed problem with MathLink compilation for Mathematica 7.
+
+
+5 Dec 08
+
+- Version 1.5: Added possibility to set Mersenne Twister
+  random seed.
+
+- Introduced function MapSample to map the integrand over
+  the points, whose default value Map can be replaced e.g.
+  by ParallelMap.
+
+
+15 Feb 08
+
+- Added further check to Suave for sharp-edged functions.
+
+
+15 Jan 08
+
+- Fixed bug in makefile.in w.r.t. DESTDIR.
+
+
+2 Jan 08
+
+- Fixed minor bug in invocation of IniRandom in Suave.
+
+
+19 Dec 07
+
+- Version 1.4: Added new flag (bit 4), to turn off smoothing of
+  the importance function for sharp-edged functions.
+
+- Improved configure for Cygwin.  Now compiles MathLink
+  executables `out of the box'.
+
+
+30 Nov 07
+
+- Fixed detection of variable-size arrays in configure.ac.
+
+- Minor fixes for autoconf 2.60.
+
+
+30 Aug 07
+
+- Added passing of weight information to the integrand routine
+  in Vegas and Suave.  Mathematica versions use $Weight.
+
+
+7 Mar 07
+
+- Documented the ll versions in the manual.
+
+
+1 Mar 06
+
+- Version 1.3: added long long int versions, i.e. all
+  number-of-points-like quantities are now long long int
+  instead of int.  The corresponding names are prefixed with
+  "ll", e.g. llVegas.
+
+
+5 Jan 06
+
+- Corrected a number of declarations so that changing the "number"
+  typedef in stddecl.h to a longer integer should work now.
+  Note that this bugfix has NO EFFECT if the "number" typedef
+  was not changed by hand!
+
+
+31 Aug 05
+
+- A small patch considerably reduces the "mysterious" problem
+  in Vegas and Suave that further iterations on a more or less
+  optimal grid would often degrade the grid.
+
+
+2 Jun 05
+
+- Added some #ifdefs to make the compile completely silent.
+
+- Changed HUGE_VAL to DBL_MAX to avoid problems with icc.
+
+
+7 Mar 05
+
+- Extended Divonne's Korobov tables.
+
+- partview now sorts the list of rectangles so that the smallest
+  ones come on top.
+
+
+2 Mar 05
+
+- Fixed "mysterious" problem where Divonne would report a
+  larger-than-requested error even though enough samples were
+  available.
+
+
+17 Feb 05
+
+- Rewrote partview.cpp with tabbed window.
+
+- Moved sources to src/{vegas,suave,divonne,cuhre}.
+  The original names would get into the way of the Mathematica
+  executables on OSX's case-insensitive file system.
+
+
+15 Feb 05
+
+- configure now disables compilation of demo-fortran if no
+  Fortran compiler is found.
+
+
+9 Feb 05
+
+- Added some explicit typecasts and other tidbits such that
+  Cuba compiles successfully also with a C++ compiler now.
+
+
+7 Feb 05
+
+- Added erf implementation in case some "C99 compliant" compiler
+  like M$ Visual C++ in fact has no erf.
+
+
+4 Feb 05
+
+- Added partview.m for Mathematica.
+
+
+3 Feb 05
+
+- Added proper autoconf configure.
+
+- Added cuba.F, a Fortran chooser which makes the invocation
+  of the Cuba routines still simpler from Fortran.
+
+- Straightened out the contexts of the MathLink executables.
+
+
+2 Feb 05
+
+- Substituted preprocessor variable NBATCH by run-time configurable
+  global variable vegasbatch_.
+
+- Added checks on ncomp.
+
+
+1 Feb 05
+
+- Added a partition viewer which displays the tesselation of the
+  integration region on screen.  Needs Qt.
+
+
+27 Jan 05
+
+- Added a preprocessor flag NO_LONG_DOUBLE to disable the use
+  of long doubles on systems that don't have it.
+
+
+25 Jan 05
+
+- Rearranged Vegas to sample in batches of NBATCH points to
+  reduce memory consumption.
+
+
+21 Jan 05
+
+- Fixed bug in Divonne: Final result was wrong if not enough
+  samples left for Phase 3.
+
+
+19 Jan 05
+
+- Updated manual re pseudo-random sampling.
+
+
+17 Jan 05
+
+- Introduced "number" typedef, might be useful when using wide ints.
+  Not well tested, though.
+
+- Substituted [sd]rand48 by Mersenne Twister generator.
+
+
+14 Jan 05
+
+- Added pseudo-rng (bit 3 in flags).
+
+- Collected common declarations in stddecl.h.
+
+- Better checking of dimension (e.g. in Divonne, all cases).
+
+
+12 Jan 05
+
+- Updated manual re vegas{grid,state}.
+
+
+23 Dec 04
+
+- Fixed a memory leak in Cuhre.
+
+
+18 Nov 04
+
+- Added vegasstate load/restore of internal state.
+
+
+16 Jul 04
+
+- Added vegasgrid.
+
diff --git a/Cuba/Cuhre b/Cuba/Cuhre
new file mode 100755
index 0000000000000000000000000000000000000000..7b468b64a2ea53909d53ebb0ff8f353c3b6ce1b6
Binary files /dev/null and b/Cuba/Cuhre differ
diff --git a/Cuba/Divonne b/Cuba/Divonne
new file mode 100755
index 0000000000000000000000000000000000000000..ee414b4d305b34316b79f9c9719566e3bb4684cf
Binary files /dev/null and b/Cuba/Divonne differ
diff --git a/Cuba/Suave b/Cuba/Suave
new file mode 100755
index 0000000000000000000000000000000000000000..6501c3b139778ee6368d95f9d1bf5e5f35af81a9
Binary files /dev/null and b/Cuba/Suave differ
diff --git a/Cuba/Vegas b/Cuba/Vegas
new file mode 100755
index 0000000000000000000000000000000000000000..5558aaa3dc124db1da1e0bea11483835103bc399
Binary files /dev/null and b/Cuba/Vegas differ
diff --git a/Cuba/config.guess b/Cuba/config.guess
new file mode 100755
index 0000000000000000000000000000000000000000..d622a44e551f209d5e8c5462b3fe53a162f7b330
--- /dev/null
+++ b/Cuba/config.guess
@@ -0,0 +1,1530 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-02-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+		os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+	echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[4567])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+			esac ;;
+		    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^		//' << EOF >$dummy.c
+
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
+
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
+
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+	exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+	exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+	exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+	exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    5000:UNIX_System_V:4.*:*)
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
+    i*:windows32*:*)
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+	# Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+	exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel@ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+		echo mips-nec-sysv${UNAME_RELEASE}
+	else
+		echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+	exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+	echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+	"4"
+#else
+	""
+#endif
+	); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/Cuba/config.h b/Cuba/config.h
new file mode 100644
index 0000000000000000000000000000000000000000..7cfdd04a22df51d2373353a67569d88f7ee83bfa
--- /dev/null
+++ b/Cuba/config.h
@@ -0,0 +1,135 @@
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#define HAVE_ALLOCA_H 1
+
+/* Define to 1 if you have the `erf' function. */
+#define HAVE_ERF 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `getloadavg' function. */
+#define HAVE_GETLOADAVG 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if the type `long double' works and has more range or precision
+   than `double'. */
+#define HAVE_LONG_DOUBLE 1
+
+/* Define to 1 if the type `long double' works and has more range or precision
+   than `double'. */
+#define HAVE_LONG_DOUBLE_WIDER 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `powl' function. */
+#define HAVE_POWL 1
+
+/* Define to 1 if you have the `shmget' function. */
+#define HAVE_SHMGET 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vfork' function. */
+#define HAVE_VFORK 1
+
+/* Define to 1 if you have the <vfork.h> header file. */
+/* #undef HAVE_VFORK_H */
+
+/* Define to 1 if `fork' works. */
+#define HAVE_WORKING_FORK 1
+
+/* Define to 1 if `vfork' works. */
+#define HAVE_WORKING_VFORK 1
+
+/* Maximum number of dimensions */
+/* #undef NCOMP */
+
+/* Maximum number of components */
+/* #undef NDIM */
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "hahn@feynarts.de"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Cuba"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Cuba 4.2"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "cuba"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "4.2"
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+/* #undef STACK_DIRECTION */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef ssize_t */
+
+/* Define as `fork' if `vfork' does not work. */
+/* #undef vfork */
diff --git a/Cuba/config.h.in b/Cuba/config.h.in
new file mode 100644
index 0000000000000000000000000000000000000000..06e22e59e2a046be2fb80295720bd61128faf471
--- /dev/null
+++ b/Cuba/config.h.in
@@ -0,0 +1,134 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `erf' function. */
+#undef HAVE_ERF
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `getloadavg' function. */
+#undef HAVE_GETLOADAVG
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if the type `long double' works and has more range or precision
+   than `double'. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define to 1 if the type `long double' works and has more range or precision
+   than `double'. */
+#undef HAVE_LONG_DOUBLE_WIDER
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `powl' function. */
+#undef HAVE_POWL
+
+/* Define to 1 if you have the `shmget' function. */
+#undef HAVE_SHMGET
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* Maximum number of dimensions */
+#undef NCOMP
+
+/* Maximum number of components */
+#undef NDIM
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
diff --git a/Cuba/config.log b/Cuba/config.log
new file mode 100644
index 0000000000000000000000000000000000000000..a33f98795e93d92b56177fb18fa4ba1801cbe377
--- /dev/null
+++ b/Cuba/config.log
@@ -0,0 +1,923 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Cuba configure 4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ ./configure 
+
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = pep13
+uname -m = x86_64
+uname -r = 4.4.140-62-default
+uname -s = Linux
+uname -v = #1 SMP Tue Jul 17 12:14:34 UTC 2018 (951943d)
+
+/usr/bin/uname -p = x86_64
+/bin/uname -X     = unknown
+
+/bin/arch              = x86_64
+/usr/bin/arch -k       = unknown
+/usr/convex/getsysinfo = unknown
+/usr/bin/hostinfo      = unknown
+/bin/machine           = unknown
+/usr/bin/oslevel       = unknown
+/bin/universe          = unknown
+
+PATH: /users/pep/local/intel_2017_update2/compilers_and_libraries_2017.2.174/linux/bin/intel64
+PATH: /users/pep/local/intel_2017_update2/compilers_and_libraries_2017.2.174/linux/mpi/intel64/bin
+PATH: /users/pep/local/intel_2017_update2/debugger_2017/gdb/intel64_mic/bin
+PATH: /usr/lib64/mpi/gcc/openmpi/bin
+PATH: /users/pep/mschulze/bin
+PATH: /usr/local/bin
+PATH: /usr/bin
+PATH: /bin
+PATH: /usr/bin/X11
+PATH: /usr/games
+PATH: /users/pep/mschulze/bin/
+PATH: /users/pep/local/mathematica/
+PATH: /mnt/pep/local/intel/bin
+PATH: /users/pep/local/intel/impi/2017.2.174/bin64
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+configure:2128: loading site script /usr/share/site/x86_64-unknown-linux-gnu
+| #!/bin/sh
+| # Site script for configure. It is resourced via $CONFIG_SITE environment varaible.
+| 
+| # If user did not specify libdir, guess the correct target:
+| # Use lib64 for 64 bit bi-arch targets, keep the default for the rest.
+| if test "$libdir" = '${exec_prefix}/lib' ; then
+| 
+| 	ac_config_site_64bit_host=NONE
+| 
+| 	case "$host" in
+| 	"" )
+| 		# User did not specify host target.
+| 		# The native platform x86_64 is a bi-arch platform.
+| 		# Try to detect cross-compilation to inferior architecture.
+| 
+| 		# We are trying to guess 32-bit target compilation. It's not as easy as
+| 		# it sounds, as there is possible several intermediate combinations.
+| 		ac_config_site_cross_to_32bit_host=NONE
+| 
+| 		# User defined -m32 in CFLAGS or CXXFLAGS or CC or CXX:
+| 		# (It's sufficient for 32-bit, but alone may cause mis-behavior of some checks.)
+| 		case "$CFLAGS $CXXFLAGS $CC $CXX" in
+| 		*-m32*)
+| 			ac_config_site_cross_to_32bit_host=YES
+| 			;;
+| 		esac
+| 
+| 		# Running with linux32:
+| 		# (Changes detected platform, but not the toolchain target.)
+| 		case "`/bin/uname -i`" in
+| 		x86_64 | ppc64 | s390x )
+| 			;;
+| 		* )
+| 			ac_config_site_cross_to_32bit_host=YES
+| 			;;
+| 		esac
+| 
+| 		if test "x$ac_config_site_cross_to_32bit_host" = xNONE; then
+| 			ac_config_site_64bit_host=YES
+| 		fi
+| 
+| 		;;
+| 	*x86_64* | *ppc64* | *s390x* )
+| 		ac_config_site_64bit_host=YES
+| 		;;
+| 	esac
+| 
+| 	if test "x$ac_config_site_64bit_host" = xYES; then
+| 		libdir='${exec_prefix}/lib64'
+| 	fi
+| fi
+| 
+| # If user did not specify libexecdir, set the correct target:
+| # Nor FHS nor openSUSE allow prefix/libexec. Let's default to prefix/lib.
+| 
+| if test "$libexecdir" = '${exec_prefix}/libexec' ; then
+| 	libexecdir='${exec_prefix}/lib'
+| fi
+| 
+| # Continue with the standard behavior of configure defined in AC_SITE_LOAD:
+| if test "x$prefix" != xNONE; then
+| 	ac_site_file1=$prefix/share/config.site
+| 	ac_site_file2=$prefix/etc/config.site
+| else
+| 	ac_site_file1=$ac_default_prefix/share/config.site
+| 	ac_site_file2=$ac_default_prefix/etc/config.site
+| fi
+| for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+| do
+| 	test "x$ac_site_file" = xNONE && continue
+| 	if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+| 		{ $as_echo "/usr/share/site/x86_64-unknown-linux-gnu:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+| $as_echo "/usr/share/site/x86_64-unknown-linux-gnu: loading site script $ac_site_file" >&6;}
+| 		sed 's/^/| /' "$ac_site_file" >&5
+| 		. "$ac_site_file" \
+| 			|| { { $as_echo "/usr/share/site/x86_64-unknown-linux-gnu:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+| $as_echo "/usr/share/site/x86_64-unknown-linux-gnu: error: in \`$ac_pwd':" >&2;}
+| as_fn_error $? "failed to load site script $ac_site_file
+| See \`config.log' for more details" "$LINENO" 5; }
+| 	fi
+| done
+configure:2279: checking for gcc
+configure:2295: found /usr/bin/gcc
+configure:2306: result: gcc
+configure:2535: checking for C compiler version
+configure:2544: gcc --version >&5
+gcc (SUSE Linux) 4.8.5
+Copyright (C) 2015 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:2555: $? = 0
+configure:2544: gcc -v >&5
+Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.8/lto-wrapper
+Target: x86_64-suse-linux
+Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.8 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --enable-linux-futex --program-suffix=-4.8 --without-system-libunwind --with-arch-32=i586 --with-tune=generic --build=x86_64-suse-linux --host=x86_64-suse-linux
+Thread model: posix
+gcc version 4.8.5 (SUSE Linux) 
+configure:2555: $? = 0
+configure:2544: gcc -V >&5
+gcc: error: unrecognized command line option '-V'
+gcc: fatal error: no input files
+compilation terminated.
+configure:2555: $? = 1
+configure:2544: gcc -qversion >&5
+gcc: error: unrecognized command line option '-qversion'
+gcc: fatal error: no input files
+compilation terminated.
+configure:2555: $? = 1
+configure:2575: checking whether the C compiler works
+configure:2597: gcc    conftest.c -lm >&5
+configure:2601: $? = 0
+configure:2649: result: yes
+configure:2652: checking for C compiler default output file name
+configure:2654: result: a.out
+configure:2660: checking for suffix of executables
+configure:2667: gcc -o conftest    conftest.c -lm >&5
+configure:2671: $? = 0
+configure:2693: result: 
+configure:2715: checking whether we are cross compiling
+configure:2723: gcc -o conftest    conftest.c -lm >&5
+configure:2727: $? = 0
+configure:2734: ./conftest
+configure:2738: $? = 0
+configure:2753: result: no
+configure:2758: checking for suffix of object files
+configure:2780: gcc -c   conftest.c >&5
+configure:2784: $? = 0
+configure:2805: result: o
+configure:2809: checking whether we are using the GNU C compiler
+configure:2828: gcc -c   conftest.c >&5
+configure:2828: $? = 0
+configure:2837: result: yes
+configure:2846: checking whether gcc accepts -g
+configure:2866: gcc -c -g  conftest.c >&5
+configure:2866: $? = 0
+configure:2907: result: yes
+configure:2924: checking for gcc option to accept ISO C89
+configure:2987: gcc  -c -g -O2  conftest.c >&5
+configure:2987: $? = 0
+configure:3000: result: none needed
+configure:3073: checking for gfortran
+configure:3089: found /usr/bin/gfortran
+configure:3100: result: gfortran
+configure:3126: checking for Fortran compiler version
+configure:3135: gfortran --version >&5
+GNU Fortran (SUSE Linux) 4.8.5
+Copyright (C) 2015 Free Software Foundation, Inc.
+
+GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
+You may redistribute copies of GNU Fortran
+under the terms of the GNU General Public License.
+For more information about these matters, see the file named COPYING
+
+configure:3146: $? = 0
+configure:3135: gfortran -v >&5
+Using built-in specs.
+COLLECT_GCC=gfortran
+COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.8/lto-wrapper
+Target: x86_64-suse-linux
+Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.8 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --enable-linux-futex --program-suffix=-4.8 --without-system-libunwind --with-arch-32=i586 --with-tune=generic --build=x86_64-suse-linux --host=x86_64-suse-linux
+Thread model: posix
+gcc version 4.8.5 (SUSE Linux) 
+configure:3146: $? = 0
+configure:3135: gfortran -V >&5
+gfortran: error: unrecognized command line option '-V'
+gfortran: fatal error: no input files
+compilation terminated.
+configure:3146: $? = 1
+configure:3135: gfortran -qversion >&5
+gfortran: error: unrecognized command line option '-qversion'
+gfortran: fatal error: no input files
+compilation terminated.
+configure:3146: $? = 1
+configure:3155: checking whether we are using the GNU Fortran compiler
+configure:3168: gfortran -c   conftest.F >&5
+configure:3168: $? = 0
+configure:3177: result: yes
+configure:3183: checking whether gfortran accepts -g
+configure:3194: gfortran -c -g  conftest.f >&5
+configure:3194: $? = 0
+configure:3202: result: yes
+configure:3274: checking for ranlib
+configure:3290: found /usr/bin/ranlib
+configure:3301: result: ranlib
+configure:3366: checking for a BSD-compatible install
+configure:3434: result: /usr/bin/install -c
+configure:3461: checking for an ANSI C-conforming const
+configure:3527: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:3527: $? = 0
+configure:3534: result: yes
+configure:3542: checking for inline
+configure:3558: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:3558: $? = 0
+configure:3566: result: inline
+configure:3586: checking for long double with more range or precision than double
+configure:3622: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:3622: $? = 0
+configure:3629: result: yes
+configure:3650: checking how to run the C preprocessor
+configure:3681: gcc -E  conftest.c
+configure:3681: $? = 0
+configure:3695: gcc -E  conftest.c
+conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
+ #include <ac_nonexistent.h>
+                            ^
+compilation terminated.
+configure:3695: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:3720: result: gcc -E
+configure:3740: gcc -E  conftest.c
+configure:3740: $? = 0
+configure:3754: gcc -E  conftest.c
+conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
+ #include <ac_nonexistent.h>
+                            ^
+compilation terminated.
+configure:3754: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:3783: checking for grep that handles long lines and -e
+configure:3841: result: /usr/bin/grep
+configure:3846: checking for egrep
+configure:3908: result: /usr/bin/grep -E
+configure:3913: checking for ANSI C header files
+configure:3933: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:3933: $? = 0
+configure:4006: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4006: $? = 0
+configure:4006: ./conftest
+configure:4006: $? = 0
+configure:4017: result: yes
+configure:4030: checking for sys/types.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for sys/stat.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for stdlib.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for string.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for memory.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for strings.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for inttypes.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for stdint.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4030: checking for unistd.h
+configure:4030: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4030: $? = 0
+configure:4030: result: yes
+configure:4042: checking for size_t
+configure:4042: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4042: $? = 0
+configure:4042: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:57:21: error: expected expression before ')' token
+ if (sizeof ((size_t)))
+                     ^
+configure:4042: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| /* end confdefs.h.  */
+| #include <stdio.h>
+| #ifdef HAVE_SYS_TYPES_H
+| # include <sys/types.h>
+| #endif
+| #ifdef HAVE_SYS_STAT_H
+| # include <sys/stat.h>
+| #endif
+| #ifdef STDC_HEADERS
+| # include <stdlib.h>
+| # include <stddef.h>
+| #else
+| # ifdef HAVE_STDLIB_H
+| #  include <stdlib.h>
+| # endif
+| #endif
+| #ifdef HAVE_STRING_H
+| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+| #  include <memory.h>
+| # endif
+| # include <string.h>
+| #endif
+| #ifdef HAVE_STRINGS_H
+| # include <strings.h>
+| #endif
+| #ifdef HAVE_INTTYPES_H
+| # include <inttypes.h>
+| #endif
+| #ifdef HAVE_STDINT_H
+| # include <stdint.h>
+| #endif
+| #ifdef HAVE_UNISTD_H
+| # include <unistd.h>
+| #endif
+| int
+| main ()
+| {
+| if (sizeof ((size_t)))
+| 	    return 0;
+|   ;
+|   return 0;
+| }
+configure:4042: result: yes
+configure:4053: checking for ssize_t
+configure:4053: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4053: $? = 0
+configure:4053: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:57:22: error: expected expression before ')' token
+ if (sizeof ((ssize_t)))
+                      ^
+configure:4053: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| /* end confdefs.h.  */
+| #include <stdio.h>
+| #ifdef HAVE_SYS_TYPES_H
+| # include <sys/types.h>
+| #endif
+| #ifdef HAVE_SYS_STAT_H
+| # include <sys/stat.h>
+| #endif
+| #ifdef STDC_HEADERS
+| # include <stdlib.h>
+| # include <stddef.h>
+| #else
+| # ifdef HAVE_STDLIB_H
+| #  include <stdlib.h>
+| # endif
+| #endif
+| #ifdef HAVE_STRING_H
+| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+| #  include <memory.h>
+| # endif
+| # include <string.h>
+| #endif
+| #ifdef HAVE_STRINGS_H
+| # include <strings.h>
+| #endif
+| #ifdef HAVE_INTTYPES_H
+| # include <inttypes.h>
+| #endif
+| #ifdef HAVE_STDINT_H
+| # include <stdint.h>
+| #endif
+| #ifdef HAVE_UNISTD_H
+| # include <unistd.h>
+| #endif
+| int
+| main ()
+| {
+| if (sizeof ((ssize_t)))
+| 	    return 0;
+|   ;
+|   return 0;
+| }
+configure:4053: result: yes
+configure:4064: checking for pid_t
+configure:4064: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4064: $? = 0
+configure:4064: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:57:20: error: expected expression before ')' token
+ if (sizeof ((pid_t)))
+                    ^
+configure:4064: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| /* end confdefs.h.  */
+| #include <stdio.h>
+| #ifdef HAVE_SYS_TYPES_H
+| # include <sys/types.h>
+| #endif
+| #ifdef HAVE_SYS_STAT_H
+| # include <sys/stat.h>
+| #endif
+| #ifdef STDC_HEADERS
+| # include <stdlib.h>
+| # include <stddef.h>
+| #else
+| # ifdef HAVE_STDLIB_H
+| #  include <stdlib.h>
+| # endif
+| #endif
+| #ifdef HAVE_STRING_H
+| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+| #  include <memory.h>
+| # endif
+| # include <string.h>
+| #endif
+| #ifdef HAVE_STRINGS_H
+| # include <strings.h>
+| #endif
+| #ifdef HAVE_INTTYPES_H
+| # include <inttypes.h>
+| #endif
+| #ifdef HAVE_STDINT_H
+| # include <stdint.h>
+| #endif
+| #ifdef HAVE_UNISTD_H
+| # include <unistd.h>
+| #endif
+| int
+| main ()
+| {
+| if (sizeof ((pid_t)))
+| 	    return 0;
+|   ;
+|   return 0;
+| }
+configure:4064: result: yes
+configure:4078: checking for powl
+configure:4078: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+conftest.c:44:6: warning: conflicting types for built-in function 'powl' [enabled by default]
+ char powl ();
+      ^
+configure:4078: $? = 0
+configure:4078: result: yes
+configure:4089: checking for erf
+configure:4089: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+conftest.c:45:6: warning: conflicting types for built-in function 'erf' [enabled by default]
+ char erf ();
+      ^
+configure:4089: $? = 0
+configure:4089: result: yes
+configure:4100: checking vfork.h usability
+configure:4100: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+conftest.c:56:19: fatal error: vfork.h: No such file or directory
+ #include <vfork.h>
+                   ^
+compilation terminated.
+configure:4100: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_POWL 1
+| #define HAVE_ERF 1
+| /* end confdefs.h.  */
+| #include <stdio.h>
+| #ifdef HAVE_SYS_TYPES_H
+| # include <sys/types.h>
+| #endif
+| #ifdef HAVE_SYS_STAT_H
+| # include <sys/stat.h>
+| #endif
+| #ifdef STDC_HEADERS
+| # include <stdlib.h>
+| # include <stddef.h>
+| #else
+| # ifdef HAVE_STDLIB_H
+| #  include <stdlib.h>
+| # endif
+| #endif
+| #ifdef HAVE_STRING_H
+| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+| #  include <memory.h>
+| # endif
+| # include <string.h>
+| #endif
+| #ifdef HAVE_STRINGS_H
+| # include <strings.h>
+| #endif
+| #ifdef HAVE_INTTYPES_H
+| # include <inttypes.h>
+| #endif
+| #ifdef HAVE_STDINT_H
+| # include <stdint.h>
+| #endif
+| #ifdef HAVE_UNISTD_H
+| # include <unistd.h>
+| #endif
+| #include <vfork.h>
+configure:4100: result: no
+configure:4100: checking vfork.h presence
+configure:4100: gcc -E  conftest.c
+conftest.c:23:19: fatal error: vfork.h: No such file or directory
+ #include <vfork.h>
+                   ^
+compilation terminated.
+configure:4100: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "Cuba"
+| #define PACKAGE_TARNAME "cuba"
+| #define PACKAGE_VERSION "4.2"
+| #define PACKAGE_STRING "Cuba 4.2"
+| #define PACKAGE_BUGREPORT "hahn@feynarts.de"
+| #define PACKAGE_URL ""
+| #define HAVE_LONG_DOUBLE_WIDER 1
+| #define HAVE_LONG_DOUBLE 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_POWL 1
+| #define HAVE_ERF 1
+| /* end confdefs.h.  */
+| #include <vfork.h>
+configure:4100: result: no
+configure:4100: checking for vfork.h
+configure:4100: result: no
+configure:4113: checking for fork
+configure:4113: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+conftest.c:46:6: warning: conflicting types for built-in function 'fork' [enabled by default]
+ char fork ();
+      ^
+configure:4113: $? = 0
+configure:4113: result: yes
+configure:4113: checking for vfork
+configure:4113: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4113: $? = 0
+configure:4113: result: yes
+configure:4123: checking for working fork
+configure:4145: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4145: $? = 0
+configure:4145: ./conftest
+configure:4145: $? = 0
+configure:4155: result: yes
+configure:4176: checking for working vfork
+configure:4286: result: yes
+configure:4313: checking for working alloca.h
+configure:4330: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4330: $? = 0
+configure:4338: result: yes
+configure:4346: checking for alloca
+configure:4383: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4383: $? = 0
+configure:4391: result: yes
+configure:4503: checking build system type
+configure:4517: result: x86_64-unknown-linux-gnu
+configure:4537: checking host system type
+configure:4550: result: x86_64-unknown-linux-gnu
+configure:4577: checking for shmget
+configure:4577: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4577: $? = 0
+configure:4577: result: yes
+configure:4590: checking for getloadavg
+configure:4590: gcc -o conftest -O3 -fomit-frame-pointer -ffast-math -Wall   conftest.c -lm >&5
+configure:4590: $? = 0
+configure:4590: result: yes
+configure:4639: checking for variable-size arrays
+configure:4645: gcc -c -O3 -fomit-frame-pointer -ffast-math -Wall  conftest.c >&5
+configure:4645: $? = 0
+configure:4646: result: yes
+configure:4665: checking for MathLink
+configure:4695: result: yes
+configure:4709: checking for qmake
+configure:4739: result: no
+configure:4879: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by Cuba config.status 4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status 
+
+on pep13
+
+config.status:834: creating makefile
+config.status:834: creating config.h
+
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+
+ac_cv_build=x86_64-unknown-linux-gnu
+ac_cv_c_compiler_gnu=yes
+ac_cv_c_const=yes
+ac_cv_c_inline=inline
+ac_cv_c_long_double=yes
+ac_cv_env_CC_set=
+ac_cv_env_CC_value=
+ac_cv_env_CFLAGS_set=
+ac_cv_env_CFLAGS_value=
+ac_cv_env_CPPFLAGS_set=
+ac_cv_env_CPPFLAGS_value=
+ac_cv_env_CPP_set=
+ac_cv_env_CPP_value=
+ac_cv_env_FCFLAGS_set=
+ac_cv_env_FCFLAGS_value=
+ac_cv_env_FC_set=
+ac_cv_env_FC_value=
+ac_cv_env_LDFLAGS_set=
+ac_cv_env_LDFLAGS_value=
+ac_cv_env_LIBS_set=
+ac_cv_env_LIBS_value=
+ac_cv_env_MCFLAGS_set=
+ac_cv_env_MCFLAGS_value=
+ac_cv_env_build_alias_set=
+ac_cv_env_build_alias_value=
+ac_cv_env_host_alias_set=
+ac_cv_env_host_alias_value=
+ac_cv_env_target_alias_set=
+ac_cv_env_target_alias_value=
+ac_cv_fc_compiler_gnu=yes
+ac_cv_func_alloca_works=yes
+ac_cv_func_erf=yes
+ac_cv_func_fork=yes
+ac_cv_func_fork_works=yes
+ac_cv_func_getloadavg=yes
+ac_cv_func_powl=yes
+ac_cv_func_shmget=yes
+ac_cv_func_vfork=yes
+ac_cv_func_vfork_works=yes
+ac_cv_header_inttypes_h=yes
+ac_cv_header_memory_h=yes
+ac_cv_header_stdc=yes
+ac_cv_header_stdint_h=yes
+ac_cv_header_stdlib_h=yes
+ac_cv_header_string_h=yes
+ac_cv_header_strings_h=yes
+ac_cv_header_sys_stat_h=yes
+ac_cv_header_sys_types_h=yes
+ac_cv_header_unistd_h=yes
+ac_cv_header_vfork_h=no
+ac_cv_host=x86_64-unknown-linux-gnu
+ac_cv_objext=o
+ac_cv_path_EGREP='/usr/bin/grep -E'
+ac_cv_path_GREP=/usr/bin/grep
+ac_cv_path_install='/usr/bin/install -c'
+ac_cv_prog_CPP='gcc -E'
+ac_cv_prog_ac_ct_CC=gcc
+ac_cv_prog_ac_ct_FC=gfortran
+ac_cv_prog_ac_ct_RANLIB=ranlib
+ac_cv_prog_cc_c89=
+ac_cv_prog_cc_g=yes
+ac_cv_prog_fc_g=yes
+ac_cv_type_long_double_wider=yes
+ac_cv_type_pid_t=yes
+ac_cv_type_size_t=yes
+ac_cv_type_ssize_t=yes
+ac_cv_working_alloca_h=yes
+
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+
+ALLOCA=''
+CC='gcc'
+CFLAGS='-O3 -fomit-frame-pointer -ffast-math -Wall'
+CPP='gcc -E'
+CPPFLAGS=''
+DEFS='-DHAVE_CONFIG_H'
+DEMO_FORTRAN_DEFAULT='demo-fortran'
+ECHO_C=''
+ECHO_N='-n'
+ECHO_T=''
+EGREP='/usr/bin/grep -E'
+EXEEXT=''
+FC='gfortran'
+FCFLAGS='-g -O2'
+GREP='/usr/bin/grep'
+HAVE_QMAKE=''
+INSTALL_DATA='${INSTALL} -m 644'
+INSTALL_PROGRAM='${INSTALL}'
+INSTALL_SCRIPT='${INSTALL}'
+LDFLAGS=''
+LIBOBJS=''
+LIBS='-lm'
+LTLIBOBJS=''
+MATH_DEFAULT='math'
+MCFLAGS=''
+MCSTDCPP=''
+OBJEXT='o'
+PACKAGE_BUGREPORT='hahn@feynarts.de'
+PACKAGE_NAME='Cuba'
+PACKAGE_STRING='Cuba 4.2'
+PACKAGE_TARNAME='cuba'
+PACKAGE_URL=''
+PACKAGE_VERSION='4.2'
+PATH_SEPARATOR=':'
+RANLIB='ranlib'
+REALSIZE='8'
+SHELL='/bin/sh'
+SUFFIX=''
+TOOLS_DEFAULT=''
+ac_ct_CC='gcc'
+ac_ct_FC='gfortran'
+bindir='${exec_prefix}/bin'
+build='x86_64-unknown-linux-gnu'
+build_alias=''
+build_cpu='x86_64'
+build_os='linux-gnu'
+build_vendor='unknown'
+datadir='${datarootdir}'
+datarootdir='${prefix}/share'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+dvidir='${docdir}'
+exec_prefix='${prefix}'
+host='x86_64-unknown-linux-gnu'
+host_alias=''
+host_cpu='x86_64'
+host_os='linux-gnu'
+host_vendor='unknown'
+htmldir='${docdir}'
+includedir='${prefix}/include'
+infodir='${datarootdir}/info'
+libdir='${exec_prefix}/lib64'
+libexecdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+localstatedir='${prefix}/var'
+mandir='${datarootdir}/man'
+oldincludedir='/usr/include'
+pdfdir='${docdir}'
+prefix='/usr/local'
+program_transform_name='s,x,x,'
+psdir='${docdir}'
+sbindir='${exec_prefix}/sbin'
+sharedstatedir='${prefix}/com'
+sysconfdir='${prefix}/etc'
+target_alias=''
+
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+
+/* confdefs.h */
+#define PACKAGE_NAME "Cuba"
+#define PACKAGE_TARNAME "cuba"
+#define PACKAGE_VERSION "4.2"
+#define PACKAGE_STRING "Cuba 4.2"
+#define PACKAGE_BUGREPORT "hahn@feynarts.de"
+#define PACKAGE_URL ""
+#define HAVE_LONG_DOUBLE_WIDER 1
+#define HAVE_LONG_DOUBLE 1
+#define STDC_HEADERS 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_POWL 1
+#define HAVE_ERF 1
+#define HAVE_FORK 1
+#define HAVE_VFORK 1
+#define HAVE_WORKING_VFORK 1
+#define HAVE_WORKING_FORK 1
+#define HAVE_ALLOCA_H 1
+#define HAVE_ALLOCA 1
+#define HAVE_SHMGET 1
+#define HAVE_GETLOADAVG 1
+
+configure: exit 0
diff --git a/Cuba/config.status b/Cuba/config.status
new file mode 100755
index 0000000000000000000000000000000000000000..5741422a2eb61fd4d3aaa872cb2f4304d127c651
--- /dev/null
+++ b/Cuba/config.status
@@ -0,0 +1,1029 @@
+#! /bin/sh
+# Generated by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by Cuba $as_me 4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+# Files that config.status was made for.
+config_files=" makefile"
+config_headers=" config.h"
+
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <hahn@feynarts.de>."
+
+ac_cs_config=""
+ac_cs_version="\
+Cuba config.status 4.2
+configured by ./configure, generated by GNU Autoconf 2.69,
+  with options \"$ac_cs_config\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='/mnt/pep/mschulze/pool/projects/MyVegasFrame/Cuba'
+srcdir='.'
+INSTALL='/usr/bin/install -c'
+test -n "$AWK" || AWK=awk
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+if $ac_cs_recheck; then
+  set X /bin/sh './configure'  $ac_configure_extra_args --no-create --no-recursion
+  shift
+  $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
+  CONFIG_SHELL='/bin/sh'
+  export CONFIG_SHELL
+  exec "$@"
+fi
+
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "makefile") CONFIG_FILES="$CONFIG_FILES makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+cat >>"$ac_tmp/subs1.awk" <<\_ACAWK &&
+S["LTLIBOBJS"]=""
+S["LIBOBJS"]=""
+S["DEMO_FORTRAN_DEFAULT"]="demo-fortran"
+S["TOOLS_DEFAULT"]=""
+S["HAVE_QMAKE"]=""
+S["MATH_DEFAULT"]="math"
+S["MCSTDCPP"]=""
+S["SUFFIX"]=""
+S["REALSIZE"]="8"
+S["host_os"]="linux-gnu"
+S["host_vendor"]="unknown"
+S["host_cpu"]="x86_64"
+S["host"]="x86_64-unknown-linux-gnu"
+S["build_os"]="linux-gnu"
+S["build_vendor"]="unknown"
+S["build_cpu"]="x86_64"
+S["build"]="x86_64-unknown-linux-gnu"
+S["ALLOCA"]=""
+S["EGREP"]="/usr/bin/grep -E"
+S["GREP"]="/usr/bin/grep"
+S["CPP"]="gcc -E"
+S["INSTALL_DATA"]="${INSTALL} -m 644"
+S["INSTALL_SCRIPT"]="${INSTALL}"
+S["INSTALL_PROGRAM"]="${INSTALL}"
+S["RANLIB"]="ranlib"
+S["ac_ct_FC"]="gfortran"
+S["FCFLAGS"]="-g -O2"
+S["FC"]="gfortran"
+S["OBJEXT"]="o"
+S["EXEEXT"]=""
+S["ac_ct_CC"]="gcc"
+S["CPPFLAGS"]=""
+S["LDFLAGS"]=""
+S["CFLAGS"]="-O3 -fomit-frame-pointer -ffast-math -Wall"
+S["CC"]="gcc"
+S["MCFLAGS"]=""
+S["target_alias"]=""
+S["host_alias"]=""
+S["build_alias"]=""
+S["LIBS"]="-lm"
+S["ECHO_T"]=""
+S["ECHO_N"]="-n"
+S["ECHO_C"]=""
+S["DEFS"]="-DHAVE_CONFIG_H"
+S["mandir"]="${datarootdir}/man"
+S["localedir"]="${datarootdir}/locale"
+S["libdir"]="${exec_prefix}/lib64"
+S["psdir"]="${docdir}"
+S["pdfdir"]="${docdir}"
+S["dvidir"]="${docdir}"
+S["htmldir"]="${docdir}"
+S["infodir"]="${datarootdir}/info"
+S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
+S["oldincludedir"]="/usr/include"
+S["includedir"]="${prefix}/include"
+S["localstatedir"]="${prefix}/var"
+S["sharedstatedir"]="${prefix}/com"
+S["sysconfdir"]="${prefix}/etc"
+S["datadir"]="${datarootdir}"
+S["datarootdir"]="${prefix}/share"
+S["libexecdir"]="${exec_prefix}/lib"
+S["sbindir"]="${exec_prefix}/sbin"
+S["bindir"]="${exec_prefix}/bin"
+S["program_transform_name"]="s,x,x,"
+S["prefix"]="/usr/local"
+S["exec_prefix"]="${prefix}"
+S["PACKAGE_URL"]=""
+S["PACKAGE_BUGREPORT"]="hahn@feynarts.de"
+S["PACKAGE_STRING"]="Cuba 4.2"
+S["PACKAGE_VERSION"]="4.2"
+S["PACKAGE_TARNAME"]="cuba"
+S["PACKAGE_NAME"]="Cuba"
+S["PATH_SEPARATOR"]=":"
+S["SHELL"]="/bin/sh"
+_ACAWK
+cat >>"$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+D["PACKAGE_NAME"]=" \"Cuba\""
+D["PACKAGE_TARNAME"]=" \"cuba\""
+D["PACKAGE_VERSION"]=" \"4.2\""
+D["PACKAGE_STRING"]=" \"Cuba 4.2\""
+D["PACKAGE_BUGREPORT"]=" \"hahn@feynarts.de\""
+D["PACKAGE_URL"]=" \"\""
+D["HAVE_LONG_DOUBLE_WIDER"]=" 1"
+D["HAVE_LONG_DOUBLE"]=" 1"
+D["STDC_HEADERS"]=" 1"
+D["HAVE_SYS_TYPES_H"]=" 1"
+D["HAVE_SYS_STAT_H"]=" 1"
+D["HAVE_STDLIB_H"]=" 1"
+D["HAVE_STRING_H"]=" 1"
+D["HAVE_MEMORY_H"]=" 1"
+D["HAVE_STRINGS_H"]=" 1"
+D["HAVE_INTTYPES_H"]=" 1"
+D["HAVE_STDINT_H"]=" 1"
+D["HAVE_UNISTD_H"]=" 1"
+D["HAVE_POWL"]=" 1"
+D["HAVE_ERF"]=" 1"
+D["HAVE_FORK"]=" 1"
+D["HAVE_VFORK"]=" 1"
+D["HAVE_WORKING_VFORK"]=" 1"
+D["HAVE_WORKING_FORK"]=" 1"
+D["HAVE_ALLOCA_H"]=" 1"
+D["HAVE_ALLOCA"]=" 1"
+D["HAVE_SHMGET"]=" 1"
+D["HAVE_GETLOADAVG"]=" 1"
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ {
+  line = $ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  ac_datarootdir_hack='
+  s&@datadir@&${datarootdir}&g
+  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
+  s&@infodir@&${datarootdir}/info&g
+  s&@localedir@&${datarootdir}/locale&g
+  s&@mandir@&${datarootdir}/man&g
+  s&\${datarootdir}&${prefix}/share&g' ;;
+esac
+ac_sed_extra="/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}
+
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+ ;;
+
+
+  esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
diff --git a/Cuba/config.sub b/Cuba/config.sub
new file mode 100755
index 0000000000000000000000000000000000000000..c894da45500c4af1bf5688e713a8895622d18182
--- /dev/null
+++ b/Cuba/config.sub
@@ -0,0 +1,1773 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-02-10'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray | -microblaze)
+		os=
+		basic_machine=$1
+		;;
+	-bluegene*)
+		os=-cnk
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+	-chorusrdb)
+		os=-chorusrdb
+		basic_machine=$1
+		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| aarch64 | aarch64_be \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| open8 \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pyramid \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| we32k \
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| aarch64-* | aarch64_be-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| be32-* | be64-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pyramid-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16 | cr16-*)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	microblaze)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc | ppcbe)	basic_machine=powerpc-unknown
+		;;
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tile*)
+		basic_machine=$basic_machine-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+	# First match some system type aliases
+	# that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+	-os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+	-tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	score-*)
+		os=-elf
+		;;
+	spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-cnk*|-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/Cuba/configure b/Cuba/configure
new file mode 100755
index 0000000000000000000000000000000000000000..f01a7cf1f4ec833ee77017c3a77cb685ab9e880b
--- /dev/null
+++ b/Cuba/configure
@@ -0,0 +1,6043 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for Cuba 4.2.
+#
+# Report bugs to <hahn@feynarts.de>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and hahn@feynarts.de
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='Cuba'
+PACKAGE_TARNAME='cuba'
+PACKAGE_VERSION='4.2'
+PACKAGE_STRING='Cuba 4.2'
+PACKAGE_BUGREPORT='hahn@feynarts.de'
+PACKAGE_URL=''
+
+ac_unique_file="cuba.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+DEMO_FORTRAN_DEFAULT
+TOOLS_DEFAULT
+HAVE_QMAKE
+MATH_DEFAULT
+MCSTDCPP
+SUFFIX
+REALSIZE
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+ALLOCA
+EGREP
+GREP
+CPP
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+RANLIB
+ac_ct_FC
+FCFLAGS
+FC
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MCFLAGS
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_maxdim
+with_maxcomp
+with_real
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+MCFLAGS
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+FC
+FCFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures Cuba 4.2 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/cuba]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of Cuba 4.2:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-maxdim=N         the maximum dimension for integration, if
+                          variable-size array are not supported
+  --with-maxcomp=N        the maximum number of components of the integrand,
+                          if variable-size array are not supported
+  --with-real=N           use N-byte floating-point numbers
+
+Some influential environment variables:
+  MCFLAGS     MathLink C compiler flags
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  FC          Fortran compiler command
+  FCFLAGS     Fortran compiler flags
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <hahn@feynarts.de>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+Cuba configure 4.2
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_fc_try_compile LINENO
+# ---------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_fc_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_fc_try_compile
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------- ##
+## Report this to hahn@feynarts.de ##
+## ------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Cuba $as_me 4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+LIBS=-lm
+USER_CFLAGS="$CFLAGS"
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$FC"; then
+  ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
+$as_echo "$FC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$FC" && break
+  done
+fi
+if test -z "$FC"; then
+  ac_ct_FC=$FC
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_FC"; then
+  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_FC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
+$as_echo "$ac_ct_FC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_FC" && break
+done
+
+  if test "x$ac_ct_FC" = x; then
+    FC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    FC=$ac_ct_FC
+  fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
+if ${ac_cv_fc_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
+$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FCFLAGS=${FCFLAGS+set}
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
+$as_echo_n "checking whether $FC accepts -g... " >&6; }
+if ${ac_cv_prog_fc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  FCFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_prog_fc_g=yes
+else
+  ac_cv_prog_fc_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
+$as_echo "$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FCFLAGS" = set; then
+  FCFLAGS=$ac_save_FCFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-g -O2"
+  else
+    FCFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-O2"
+  else
+    FCFLAGS=
+  fi
+fi
+
+if test $ac_compiler_gnu = yes; then
+  GFC=yes
+else
+  GFC=
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+if test "$GCC" = yes; then :
+  case `$CC --version 2>&1 < /dev/null` in #(
+  *LLVM*) :
+    opt=-O3 ;; #(
+  *gcc*4.2* | *gcc*4.4.3*) :
+    opt=-O0 ;; #(
+  *) :
+    opt=-O3 ;;
+esac
+   CFLAGS=${USER_CFLAGS:-$opt -fomit-frame-pointer -ffast-math -Wall}
+else
+  CFLAGS=${USER_CFLAGS:--O}
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this sort of thing.  */
+  typedef int charset[2];
+  const charset cs = { 0, 0 };
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
+    char tx;
+    char *t = &tx;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; } bx;
+    struct s *b = &bx; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5
+$as_echo_n "checking for long double with more range or precision than double... " >&6; }
+if ${ac_cv_type_long_double_wider+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+	    long double const a[] =
+	      {
+		 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON,
+		 LDBL_MIN, LDBL_MAX, LDBL_EPSILON
+	      };
+	    long double
+	    f (long double x)
+	    {
+	       return ((x + (unsigned long int) 10) * (-1 / x) + a[0]
+			+ (x ? f (x) : 'c'));
+	    }
+
+int
+main ()
+{
+static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP)
+		   + (DBL_MANT_DIG < LDBL_MANT_DIG)
+		   - (LDBL_MAX_EXP < DBL_MAX_EXP)
+		   - (LDBL_MANT_DIG < DBL_MANT_DIG)))
+	    && (int) LDBL_EPSILON == 0
+	  )];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_long_double_wider=yes
+else
+  ac_cv_type_long_double_wider=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5
+$as_echo "$ac_cv_type_long_double_wider" >&6; }
+  if test $ac_cv_type_long_double_wider = yes; then
+
+$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h
+
+  fi
+
+    ac_cv_c_long_double=$ac_cv_type_long_double_wider
+    if test $ac_cv_c_long_double = yes; then
+
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+
+    fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define ssize_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+
+for ac_func in powl
+do :
+  ac_fn_c_check_func "$LINENO" "powl" "ac_cv_func_powl"
+if test "x$ac_cv_func_powl" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_POWL 1
+_ACEOF
+
+fi
+done
+
+for ac_func in erf
+do :
+  ac_fn_c_check_func "$LINENO" "erf" "ac_cv_func_erf"
+if test "x$ac_cv_func_erf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ERF 1
+_ACEOF
+
+fi
+done
+
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
+else
+  ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+case $host_os in #(
+  *cygwin*) :
+     ;; #(
+  *) :
+    for ac_func in shmget
+do :
+  ac_fn_c_check_func "$LINENO" "shmget" "ac_cv_func_shmget"
+if test "x$ac_cv_func_shmget" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SHMGET 1
+_ACEOF
+
+fi
+done
+ ;;
+esac
+
+for ac_func in getloadavg
+do :
+  ac_fn_c_check_func "$LINENO" "getloadavg" "ac_cv_func_getloadavg"
+if test "x$ac_cv_func_getloadavg" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETLOADAVG 1
+_ACEOF
+
+fi
+done
+
+
+MAXDIM=${MAXDIM:-16}
+
+# Check whether --with-maxdim was given.
+if test "${with_maxdim+set}" = set; then :
+  withval=$with_maxdim; MAXDIM=$withval
+fi
+
+
+MAXCOMP=${MAXCOMP:-4}
+
+# Check whether --with-maxcomp was given.
+if test "${with_maxcomp+set}" = set; then :
+  withval=$with_maxcomp; MAXCOMP=$withval
+fi
+
+
+REALSIZE=${REALSIZE:-8}
+
+# Check whether --with-real was given.
+if test "${with_real+set}" = set; then :
+  withval=$with_real; REALSIZE=$withval
+fi
+
+case $REALSIZE in #(
+  8) :
+     ;; #(
+  10) :
+    SUFFIX=${SUFFIX:-l} ;; #(
+  16) :
+    SUFFIX=${SUFFIX:-q}
+         LIBS="-lquadmath $LIBS" ;; #(
+  *) :
+    REALSIZE=8
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unavailable real size" >&5
+$as_echo "$as_me: WARNING: Unavailable real size" >&2;} ;;
+esac
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable-size arrays" >&5
+$as_echo_n "checking for variable-size arrays... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using MAXDIM=$MAXDIM and MAXCOMP=$MAXCOMP" >&5
+$as_echo "no, using MAXDIM=$MAXDIM and MAXCOMP=$MAXCOMP" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define NDIM $MAXDIM
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define NCOMP $MAXCOMP
+_ACEOF
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MathLink" >&5
+$as_echo_n "checking for MathLink... " >&6; }
+cat > conftest.tm << _EOF_
+:Begin:
+:Function: inc
+:Pattern: Inci_Integer
+:Arguments: {i}
+:ArgumentTypes: {Integer}
+:ReturnType: Integer
+:End:
+
+#include "mathlink.h"
+
+static int inc(const int i) { return i + 1; }
+
+int main(int argc, char **argv) {
+  return MLMain(argc, argv);
+}
+_EOF_
+FCC="$srcdir/tools/fcc"
+rm -f conftest$EXEEXT
+MCSTDCPP=
+for MCSTDCPP in "" -stdlib=libstdc++ ; do
+  REALCC="$CC" CC="$FCC" CXX="$FCC $MCSTDCPP" PATH="$PATH:$srcdir/tools" \
+    mcc $MCFLAGS $CFLAGS -o conftest$EXEEXT conftest.tm > /dev/null 2>&1
+  if test -x conftest$EXEEXT; then :
+  break
+fi
+done
+if test -x conftest$EXEEXT; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   MATH_DEFAULT=math
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+for ac_prog in qmake
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_HAVE_QMAKE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_QMAKE"; then
+  ac_cv_prog_HAVE_QMAKE="$HAVE_QMAKE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_HAVE_QMAKE="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+HAVE_QMAKE=$ac_cv_prog_HAVE_QMAKE
+if test -n "$HAVE_QMAKE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_QMAKE" >&5
+$as_echo "$HAVE_QMAKE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$HAVE_QMAKE" && break
+done
+
+if test -n "$HAVE_QMAKE"; then :
+  case `qmake -v` in #(
+  *Qt?version?4*) :
+    TOOLS_DEFAULT=tools ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+test -n "$FC" && DEMO_FORTRAN_DEFAULT=demo-fortran
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_config_files="$ac_config_files makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by Cuba $as_me 4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <hahn@feynarts.de>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+Cuba config.status 4.2
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "makefile") CONFIG_FILES="$CONFIG_FILES makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+ ;;
+
+
+  esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/Cuba/configure.ac b/Cuba/configure.ac
new file mode 100644
index 0000000000000000000000000000000000000000..e20685a167a0a561a2153c910e15e7bf6a6b0e2c
--- /dev/null
+++ b/Cuba/configure.ac
@@ -0,0 +1,134 @@
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT([Cuba], [4.2], [hahn@feynarts.de])
+AC_CONFIG_SRCDIR([cuba.h])
+
+LIBS=-lm
+USER_CFLAGS="$CFLAGS"
+
+AC_ARG_VAR(MCFLAGS, [MathLink C compiler flags])
+
+AC_PROG_CC
+AC_PROG_FC
+AC_PROG_RANLIB
+AC_PROG_INSTALL
+
+AS_IF([test "$GCC" = yes],
+  [AS_CASE([`$CC --version 2>&1 < /dev/null`],
+    [*LLVM*], [opt=-O3],
+    [*gcc*4.2* | *gcc*4.4.3*], [opt=-O0],
+    [opt=-O3])
+   CFLAGS=${USER_CFLAGS:-$opt -fomit-frame-pointer -ffast-math -Wall}],
+  [CFLAGS=${USER_CFLAGS:--O}])
+
+AC_C_CONST
+AC_C_INLINE
+AC_C_LONG_DOUBLE
+
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_PID_T
+
+AC_CHECK_FUNCS([powl])
+AC_CHECK_FUNCS([erf])
+AC_FUNC_FORK
+AC_FUNC_ALLOCA
+
+AC_DEFUN([chk_shmget], [dnl
+AC_REQUIRE([AC_CANONICAL_HOST])
+AS_CASE([$host_os],
+  [*cygwin*], [],
+  [AC_CHECK_FUNCS([shmget])])
+])
+chk_shmget
+AC_CHECK_FUNCS([getloadavg])
+
+MAXDIM=${MAXDIM:-16}
+AC_ARG_WITH(maxdim,
+  [AS_HELP_STRING([--with-maxdim=N],
+    [the maximum dimension for integration,
+     if variable-size array are not supported])],
+  [MAXDIM=$withval])
+
+MAXCOMP=${MAXCOMP:-4}
+AC_ARG_WITH(maxcomp,
+  [AS_HELP_STRING([--with-maxcomp=N],
+    [the maximum number of components of the integrand,
+     if variable-size array are not supported])],
+  [MAXCOMP=$withval])
+
+REALSIZE=${REALSIZE:-8}
+AC_ARG_WITH(real,
+  [AS_HELP_STRING([--with-real=N],
+    [use N-byte floating-point numbers])],
+  [REALSIZE=$withval])
+AS_CASE([$REALSIZE],
+  [8],  [],
+  [10], [SUFFIX=${SUFFIX:-l}],
+  [16], [SUFFIX=${SUFFIX:-q}
+         LIBS="-lquadmath $LIBS"],
+  [REALSIZE=8
+   AC_MSG_WARN([Unavailable real size])])
+AC_SUBST([REALSIZE])
+AC_SUBST([SUFFIX])
+
+AC_MSG_CHECKING([for variable-size arrays])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE(,[[
+	void test(int n) {
+	  char s[n];
+	}
+  ]])],
+  [AC_MSG_RESULT([yes])],
+  [AC_MSG_RESULT([no, using MAXDIM=$MAXDIM and MAXCOMP=$MAXCOMP])
+   AC_DEFINE_UNQUOTED([NDIM], [$MAXDIM], [Maximum number of components])
+   AC_DEFINE_UNQUOTED([NCOMP], [$MAXCOMP], [Maximum number of dimensions])]
+)
+
+AC_MSG_CHECKING([for MathLink])
+cat > conftest.tm << _EOF_
+:Begin:
+:Function: inc
+:Pattern: Inc[i_Integer]
+:Arguments: {i}
+:ArgumentTypes: {Integer}
+:ReturnType: Integer
+:End:
+
+#include "mathlink.h"
+
+static int inc(const int i) { return i + 1; }
+
+int main(int argc, char **argv) {
+  return MLMain(argc, argv);
+}
+_EOF_
+FCC="$srcdir/tools/fcc"
+rm -f conftest$EXEEXT
+MCSTDCPP=
+for MCSTDCPP in "" -stdlib=libstdc++ ; do
+  REALCC="$CC" CC="$FCC" CXX="$FCC $MCSTDCPP" PATH="$PATH:$srcdir/tools" \
+    mcc $MCFLAGS $CFLAGS -o conftest$EXEEXT conftest.tm > /dev/null 2>&1
+  AS_IF([test -x conftest$EXEEXT], [break])
+done
+AS_IF([test -x conftest$EXEEXT],
+  [AC_MSG_RESULT([yes])
+   MATH_DEFAULT=math],
+  [AC_MSG_RESULT([no])])
+AC_SUBST([MCSTDCPP])
+AC_SUBST([MATH_DEFAULT])
+
+AC_CHECK_PROGS([HAVE_QMAKE], [qmake])
+AS_IF([test -n "$HAVE_QMAKE"],
+  [AS_CASE([`qmake -v`],
+    [*Qt?version?4*], [TOOLS_DEFAULT=tools])])
+AC_SUBST([TOOLS_DEFAULT])
+
+test -n "$FC" && DEMO_FORTRAN_DEFAULT=demo-fortran
+AC_SUBST([DEMO_FORTRAN_DEFAULT])
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([makefile])
+
+AC_OUTPUT
+
diff --git a/Cuba/cuba.h b/Cuba/cuba.h
new file mode 100644
index 0000000000000000000000000000000000000000..5e87ef1aea63523ce11894998148afa2e25507ae
--- /dev/null
+++ b/Cuba/cuba.h
@@ -0,0 +1,125 @@
+/*
+	cuba.h
+		Prototypes for the Cuba library
+		this file is part of Cuba
+		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
+
+void Vegas(const int ndim, const int ncomp,
+  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, void *spin,
+  int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void llVegas(const int ndim, const int ncomp,
+  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, void *spin,
+  long long int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void Suave(const int ndim, const int ncomp,
+  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 int nmin,
+  const cubareal flatness, const char *statefile, void *spin,
+  int *nregions, int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void llSuave(const int ndim, const int ncomp,
+  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 long long int nmin,
+  const cubareal flatness, const char *statefile, void *spin,
+  int *nregions, long long int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void Divonne(const int ndim, const int ncomp,
+  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 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, void *spin,
+  int *nregions, int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void llDivonne(const int ndim, const int ncomp,
+  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 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,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void Cuhre(const int ndim, const int ncomp,
+  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, void *spin,
+  int *nregions, int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+void llCuhre(const int ndim, const int ncomp,
+  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, void *spin,
+  int *nregions, long long int *neval, int *fail,
+  cubareal integral[], cubareal error[], cubareal prob[]);
+
+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
+}
+#endif
+
diff --git a/Cuba/cuba.pdf b/Cuba/cuba.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d9fd75e925d3147ae52965d51cd3b213f3bda6ff
Binary files /dev/null and b/Cuba/cuba.pdf differ
diff --git a/Cuba/cuba.tex b/Cuba/cuba.tex
new file mode 100644
index 0000000000000000000000000000000000000000..b08fdba9961f97d81377ff8019096716cdc70fe3
--- /dev/null
+++ b/Cuba/cuba.tex
@@ -0,0 +1,2433 @@
+\documentclass[12pt]{article}
+\usepackage{a4wide,amsmath,amssymb,alltt}
+\usepackage{colordvi}
+
+\parskip=2pt
+\raggedbottom
+\sloppy
+
+\newcommand\cuba{\textsc{Cuba}}
+\newcommand\ie{i.e.\ }
+\newcommand\eg{e.g.\ }
+\newcommand\rd{\mathrm{d}}
+\newcommand\order{\mathcal{O}}
+\newcommand\epsabs{\varepsilon_{\text{abs}}}
+\newcommand\epsrel{\varepsilon_{\text{rel}}}
+\newcommand\nnew{n_s^{\text{new}}}
+\newcommand\nmin{n_s^{\text{min}}}
+\newcommand\nmax{n_s^{\text{max}}}
+\newcommand\nneed{n_{\text{need}}}
+\newcommand\tot{_{\text{tot}}}
+\newcommand\ctot{_{c,\text{tot}}}
+\newcommand\cvec[1]{\vec #1}
+\newcommand\dvec[1]{\mathbf{#1}}
+\newcommand\norm[1]{\|#1\|_1}
+\newcommand\lbrac{\symbol{123}}
+\newcommand\rbrac{\symbol{125}}
+\newcommand\uscore{\symbol{95}}
+\newcommand\accel{_{\mathrm{accel}}}
+\newcommand\cores{_{\mathrm{cores}}}
+\newcommand\Code[1]{\ensuremath{\texttt{#1}}}
+\newcommand\Var[1]{\ensuremath{\mathit{#1}}}
+\newcommand\VarIn[1]{\item\Code{#1} \textit{$\langle$in\/$\rangle$},}
+\newcommand\VarOut[1]{\item\Code{#1} \textit{$\langle$out\,$\rangle$},}
+\newcommand\Option[2]{\item\Code{#1 -> #2},}
+\newcommand\ul[1]{\underline{\vphantom{g}#1}}
+
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}
+
+\makeatletter
+\def\reportno#1{\gdef\@reportno{#1}}
+\def\@maketitle{%
+  \hfill{\small\begin{tabular}[t]{r}%
+    \@reportno
+  \end{tabular}\par}%
+  \vskip 2em%
+  \begin{center}%
+    \let \footnote \thanks
+    {\large \@title \par}%
+    \vskip 1.5em%
+    {%\large
+      \lineskip .5em%
+      \begin{tabular}[t]{c}%
+        \@author  
+      \end{tabular}\par}%
+    \vskip 1em%
+    {%\large
+     \@date}%
+  \end{center}%
+  \par
+  \vskip 1.5em}
+\makeatother
+
+
+\begin{document}
+
+\reportno{MPP--2004--40\\hep--ph/0404043}
+
+\title{\cuba\ -- a library for multidimensional numerical integration}
+
+\author{T. Hahn \\
+Max-Planck-Institut f\"ur Physik \\
+F\"ohringer Ring 6, D--80805 Munich, Germany}
+
+\date{Mar 27, 2015}
+
+\maketitle
+
+\begin{abstract}
+The \cuba\ library provides new implementations of four general-purpose
+multidimensional integration algorithms: Vegas, Suave, Divonne, and
+Cuhre.  Suave is a new algorithm, Divonne is a known algorithm to which
+important details have been added, and Vegas and Cuhre are new
+implementations of existing algorithms with only few improvements over
+the original versions.  All four algorithms can integrate vector
+integrands and have very similar Fortran, C/C++, and Mathematica
+interfaces.
+\end{abstract}
+
+%========================================================================
+
+\section{Introduction}
+
+Many problems in physics (and elsewhere) involve computing an integral,
+and often enough this has to be done numerically, as the analytical
+result is known only in a limited number of cases.  In one dimension,
+the situation is quite satisfactory: standard packages, such as
+\textsc{Quadpack} \cite{quadpack}, reliably integrate a broad class of
+functions in modest CPU time.  The same is unfortunately not true for
+multidimensional integrals.
+
+This paper presents the \cuba\ library with new implementations of four
+algorithms for multidimensional numerical integration: Vegas, Suave,
+Divonne, and Cuhre.  They have a C/C++, Fortran, and Mathematica
+interface each and are invoked in a very similar way, thus making them
+easily interchangeable, \eg for comparison purposes.  All four can
+integrate vector integrands.  Cuhre is a deterministic algorithm, the
+others use Monte Carlo methods.
+
+Vegas is the simplest of the four.  It uses importance sampling for
+variance reduction, but is only in some cases competitive in terms of
+the number of samples needed to reach a prescribed accuracy. 
+Nevertheless, it has a few improvements over the original algorithm
+\cite{Vegas1,Vegas2} and comes in handy for cross-checking the results
+of other methods.
+
+Suave is a new algorithm which combines the advantages of two popular
+methods: importance sampling as done by Vegas and subregion sampling in
+a manner similar to Miser \cite{Miser}.  By dividing into subregions,
+Suave manages to a certain extent to get around Vegas' difficulty to
+adapt its weight function to structures not aligned with the coordinate
+axes.
+
+Divonne is a further development of the CERNLIB routine D151
+\cite{Divonne}.  Divonne works by stratified sampling, where the
+partitioning of the integration region is aided by methods from
+numerical optimization.  A number of improvements have been added to
+this algorithm, the most significant being the possibility to supply
+knowledge about the integrand.  Narrow peaks in particular are difficult
+to find without sampling very many points, especially in high
+dimensions.  Often the exact or approximate location of such peaks is
+known from analytic considerations, however, and with such hints the
+desired accuracy can be reached with far fewer points.
+
+Cuhre\footnote{%
+	The D from the original name was dropped since the \cuba\ 
+	library uses double precision throughout.}
+employs a cubature rule for subregion estimation in a globally adaptive
+subdivision scheme \cite{dcuhre}.  It is hence a deterministic, not a
+Monte Carlo method.  In each iteration, the subregion with the largest
+error is halved along the axis where the integrand has the largest
+fourth difference.  Cuhre is quite powerful in moderate dimensions, and
+is usually the only viable method to obtain high precision, say relative
+accuracies much below $10^{-3}$.
+
+The new algorithms were coded from scratch in C, which is a compromise
+of sorts between C++ and Fortran 77, combining ease of linking to
+Fortran code with the availability of reasonable memory management.  The
+declarations have been chosen such that the routines can be called from
+Fortran directly.  The Mathematica versions are based on the same C code
+and use the MathLink API to communicate with Mathematica.
+
+%========================================================================
+
+\section{Vegas}
+
+Vegas is a Monte Carlo algorithm that uses importance sampling as a
+variance-reduction technique.  Vegas iteratively builds up a
+piecewise constant weight function, represented on a rectangular grid. 
+Each iteration consists of a sampling step followed by a refinement of
+the grid.  The exact details of the algorithm can be found in
+\cite{Vegas1,Vegas2} and shall not be reproduced here.
+
+Changes with respect to the original version are:
+\begin{itemize}
+\item
+Sobol quasi-random numbers \cite{Sobol} rather than pseudo-random
+numbers are used by default.  Empirically, this seems to accelerate
+convergence quite a bit, most noticeably in the early stages of the
+integration.
+
+From theoretical considerations it is of course known (see \eg
+\cite{Niederreiter}) that quasi-random sequences yield a convergence
+rate of $\order(\log^{n_d} n_s/n_s)$, where $n_d$ is the number of
+dimensions and $n_s$ the number of samples, which is much better than
+the usual $\order(1/\sqrt{n_s})$ for ordinary Monte Carlo.  But these
+convergence rates are meaningful only for large $n_s$ and so it came as
+a pleasant surprise that the gains are considerable already at the
+beginning of the sampling process.  It shows that quasi-Monte Carlo
+methods blend well with variance-reduction techniques such as importance
+sampling.
+
+Similarly, it was not clear from the outset whether the statistical
+standard error would furnish a suitable error estimate since
+quasi-random numbers are decidedly non-random in a number of respects. 
+Yet also here empirical evidence suggests that the standard error works
+just as well as for pseudo-random numbers.
+
+\item
+The present implementation allows the number of samples to be increased
+in each iteration.  With this one can mimic the strategy of calling
+Vegas with a small number of samples first to `get the grid right' and
+then using an alternate entry point to perform the `full job' on the
+same grid with a larger number of samples.
+
+\item
+The option to add simple stratified sampling on top of the importance
+sampling, as proposed in the appendix of \cite{Vegas1}, has not been
+implemented in the present version.  Tests with the Vegas version from
+\cite{NumRecipes}, which contains this feature, showed that convergence
+was accelerated only when the original pseudo-random numbers were used
+and that with quasi-random numbers convergence was in fact even slower 
+in some cases.
+\end{itemize}
+Vegas' major weakness is that it uses a separable (product) weight
+function.  As a consequence, Vegas can offer significant improvements
+only as far as the integrand's characteristic regions are aligned with
+the coordinate axes.
+
+%========================================================================
+
+\section{Suave}
+
+Suave (short for \textsc{su}bregion-\textsc{a}daptive \textsc{ve}gas)
+uses Vegas-like importance sampling combined with a globally adaptive
+subdivision strategy: Until the requested accuracy is reached, the
+region with the largest error at the time is bisected in the dimension
+in which the fluctuations of the integrand are reduced most.  The number
+of new samples in each half is prorated for the fluctuation in that
+half.
+
+A similar method, known as recursive stratified sampling, is implemented
+in Miser \cite{Miser}.  Miser always samples a fixed number of points,
+however, which is somewhat undesirable since it does not stop once the
+prescribed accuracy is reached.
+
+Suave first samples the integration region in a Vegas-like step, \ie
+using importance sampling with a separable weight function.  It then
+slices the integration region in two, as Miser would do.  Suave does not
+immediately recurse on those subregions, however, but maintains a list
+of all subregions and selects the region with the largest absolute error
+for the next cycle of sampling and subdivision.  That is, Suave uses
+global error estimation and terminates when the requested relative or
+absolute accuracy is attained.
+
+The information on the weight function collected in one Vegas step is
+not lost.  Rather, the grid from which the weight function is computed
+is stretched and re-used on the subregions.  A region which is the
+result of $m - 1$ subdivisions thus has had $m$ Vegas iterations
+performed on it.
+
+The improvements over Vegas and Miser come at a price, which is the
+amount of memory required to hold all the samples.  Memory consumption
+is not really severe on modern hardware, however.  The component that
+scales worst is the one proportional to the number of samples, which is
+$$
+8 (n_d + n_c + 1) n_s\text{ bytes}\,,
+$$
+where $n_d$ is the number of dimensions of the integral, $n_c$ the
+number of components of the integrand, and $n_s$ the number of samples. 
+For a million samples on a scalar integrand of 10 variables, this works
+out to 96 megabytes -- not all that enormous these days. 
+
+
+\subsection{Description of the algorithm}
+
+As Suave is a new algorithm, the following description will be fairly
+detailed.  For greater notational clarity, $n_c$-dimensional vectors are
+denoted with a vector arrow ($\cvec f$\,) and $n_d$-dimensional vectors
+with boldface letters ($\dvec x$) in the following, where $n_d$ is the
+dimension of the integral and $n_c$ the number of components of the
+integrand.
+
+The essential inputs are $\epsrel$ and $\epsabs$, the relative and
+absolute accuracies, $\nnew$, the number of samples added in each
+iteration, $\nmax$, the maximum number of samples allowed, and $p$, a
+flatness parameter described below.
+
+Suave has a main loop which calls a Vegas-like sampling step.  The main
+loop is responsible for subdividing the subregions and maintaining the
+totals.  The sampling step does the actual sampling on the subregions
+and computes the region results.
+
+
+\subsubsection{Main loop}
+\label{sect:suavemain}
+
+\begin{enumerate}
+\item
+Initialize the random-number generator and allocate a data structure for
+the entire integration region.  Initialize its Vegas grid with
+equidistant bins.
+
+\item
+Sample the entire integration region with $\nnew$ points. This gives an
+initial estimate of the integral $\cvec I\tot$, the variance 
+$\cvec\sigma\tot^{\,2}$, and $\cvec\chi\tot^{\,2}$.
+
+\item
+Find the component $c$ for which $r_c = \sigma\ctot/
+\max(\epsabs, \epsrel |I\ctot|)$ is maximal.
+
+If none of the $r_c$'s exceeds unity, indicate success and return.
+
+\item
+If the number of samples spent so far equals or exceeds $\nmax$,
+indicate failure and return.
+
+\item
+Find the region $r$ with the largest $\sigma_c^2$.
+
+\item
+Find the dimension $d$ which minimizes $F_c(r_L^d) + F_c(r_R^d)$, where
+$r_{L,R}^d$ are the left and right halves of $r$ with respect to $d$. 
+$F_c(r_{L,R}^d)$ is the fluctuation of the samples that fall into
+$r_{L,R}^d$ and is computed as
+\begin{equation}
+\label{eq:fluct}
+F_c(r_{L,R}^d)
+= \biggl[\left\|
+    1 + \tilde F_c(\dvec x_i\in r_{L,R}^d)
+  \right\|_p\biggr]^{2/3}
+= \biggl[\sum\left|
+    1 + \tilde F_c(\dvec x_i\in r_{L,R}^d)
+  \right|^p\,\biggr]^{2/(3p)},
+\end{equation}
+where all samples $\dvec x_i$ that fall into the respective half are 
+used in the norm/sum and the single-sample fluctuation $\tilde F_c$ is 
+defined as
+$$
+\tilde F_c(\dvec x) =
+  w(\dvec x) \, \left|\frac{f_c(\dvec x) - I_c(r)}{I_c(r)}\right|
+             \, \frac{|f_c(\dvec x) - I_c(r)|}{\sigma_c(r)}\,.
+$$
+This empirical recipe combines the relative deviation from the region
+mean, $(f - I)/I$, with the $\chi$ value, $|f - I|/\sigma$, weighted by 
+the Vegas weight $w$ corresponding to sample $\dvec x$.  Note that the 
+$I_c$ and $\sigma_c$ values of the entire region $r$ are used.
+
+Samples strongly contribute to $F$ the more they lie away from the
+predicted mean \emph{and} the more they lie out of the predicted error
+band.  Tests have shown that large values of $p$ are beneficial for
+`flat' integrands, whereas small values are preferred if the integrand
+is `volatile' and has high peaks.  $p$ has thus been dubbed a flatness
+parameter.  The effect comes from the fact that with increasing $p$, $F$
+becomes more and more dominated by `outliers,' \ie points with a large 
+$\tilde F$.
+
+The power 2/3 in Eq.~(\ref{eq:fluct}) is also used in Miser, where it is
+motivated as the exponent that gives the best variance reduction
+(\cite{NumRecipes}, p.~315).
+
+\item
+Refine the grid associated with $r$, \ie incorporate the information
+gathered on the integrand in the most recent sample over $r$ into the
+weight function.  This is done precisely as in Vegas (see
+\cite{Vegas1}), with the extension that if the integrand has more than
+one component, the marginal densities are computed not from $f^2$ but
+from the weighted sum\footnote{%
+	It is fairly obvious that scale-invariant quantities must be 
+	used in the sum, otherwise the component with the largest 
+	absolute scale would dominate.  It is less clear whether $\eta_0 
+	= (\int f_c\,\rd\dvec x)^2 = I\ctot^2$, $\eta_1 = (\int 
+	|f_c|\,\rd\dvec x)^2$, or $\eta_2 = \int f_c^2\,\rd\dvec x$ (or 
+	any other) make the best weights.  Empirically, $\eta_0$ turns 
+	out to be both slightly superior in convergence and easier to 
+	compute than $\eta_1$ and $\eta_2$ and has thus been chosen in 
+	Suave.
+
+	A possible explanation for this is that in cases where there 
+	are large compensations within the integral, \ie when $\int 
+	f_c\,\rd\dvec x\ll\int |f_c|\,\rd\dvec x$, it is particularly 
+	necessary for the overall accuracy that component $c$ be sampled 
+	accurately, and thus be given more weight in $\overline{f^2}$, 
+	and this is better accomplished by dividing $f_c^2$ by the 
+	``small'' number  $\eta_0$ than by the ``large'' number $\eta_1$ 
+	or $\eta_2$.}
+$$
+\overline{f^2} = \sum_{c = 1}^{n_c} \frac{f_c^2}{I\ctot^2}\,.
+$$
+
+\item
+Bisect $r$ in dimension $d$:
+
+Allocate a new region, $r_L$, and copy to $r_L$ those of $r$'s samples
+falling into the left half.  Compute the Vegas grid for $r_L$ by
+appropriately ``stretching'' $r$'s grid, \ie by interpolating all grid
+points of $r$ with values less than 1/2.
+
+Set up $r_R$ for the right half analogously.
+
+\item
+Sample $r_L$ with $n_L = \max\Bigl(\frac{F_c(r_L)}{F_c(r_L) + F_c(r_R)}
+\nnew, \nmin\Bigr)$ and $r_R$ with $n_R = \max(\nnew - n_L, \nmin)$ 
+points, where $\nmin = 10$.
+
+\item
+To safeguard against underestimated errors, supplement the variances 
+by the difference of the integral values in the following way:
+$$
+\sigma_{c,\text{new}}^2(r_{R,L}) = \sigma_c^2(r_{R,L})
+  \left(1 + \frac{\Delta_c}
+                 {\sqrt{\sigma_c^2(r_L) + \sigma_c^2(r_R)}}\right)^2 +   
+  \Delta_c^2
+$$
+for each component $c$, where $\cvec\Delta = \frac 14 |\cvec I(r_L) + 
+\cvec I(r_R) - \cvec I(r)|$.
+
+This acts as a penalty for regions whose integral value changes
+significantly by the subdivision and effectively moves them up in the
+order of regions to be subdivided next.
+
+\item
+Update the totals: Subtract $r$'s integral, variance, and $\chi^2$-value
+from the totals and add those of $r_L$ and $r_R$.
+
+\item
+Discard $r$, put $r_L$ and $r_R$ in the list of regions.
+
+\item
+Go to Step 3.
+\end{enumerate}
+
+
+\subsubsection{Sampling step}
+
+The function which does the actual sampling is a modified Vegas
+iteration.  It is invoked with two arguments: $r$, the region to be
+sampled and $n_m$, the number of new samples.
+
+\begin{enumerate}
+\item
+Sample a set of $n_m$ new points using the weight function given by the
+grid associated with $r$.  For a region which is the result of $m - 1$
+subdivisions, the list of samples now consists of $m$ sets of samples.
+
+\item
+For each set of samples, compute the mean $\cvec I_i$ and variance
+$\cvec\sigma_i^{\,2}$.
+
+\item
+Compute the results for the region as
+$$
+I_c = \frac{\sum_{i = 1}^m w_{i,c} I_{i,c}}{\sum_{i = 1}^m w_{i,c}},
+\quad
+\sigma_c^2 = \frac 1{\sum_{i = 1}^m w_{i,c}},
+\quad
+\chi_c^2 = \frac 1{\sigma_c^2}\left[
+  \frac{\sum_{i = 1}^m w_{i,c} I_{i,c}^2}{\sum_{i = 1}^m w_{i,c}} -
+  I_c^2\right],
+$$
+where the inverse of the set variances are used as weights, $w_{i,c} =
+1/\sigma_{i,c}^2$.  This is simply Gaussian error propagation.
+
+For greater numerical stability, $\chi_c^2$ is actually computed as
+$$
+\chi_c^2
+= \sum_{i = 1}^m w_{i,c} I_{i,c}^2 -
+  I_c \sum_{i = 1}^m w_{i,c} I_{i,c}
+= \sum_{i = 2}^m w_{i,c} I_{i,c} (I_{i,c} - I_{1,c}) -
+  I_c \sum_{i = 2}^m w_{i,c} (I_{i,c} - I_{1,c})\,.
+$$
+\end{enumerate}
+
+%========================================================================
+
+\section{Divonne}
+
+Divonne uses stratified sampling for variance reduction, that is, it 
+partitions the integration region such that all subregions have an 
+approximately equal value of a quantity called the spread $\cvec s$,
+defined as
+\begin{equation}
+\cvec s(r) = \frac 12 V(r)
+  \Bigl(\max_{\dvec x\in r} \cvec f(\dvec x) - 
+        \min_{\dvec x\in r} \cvec f(\dvec x)\Bigr)\,,
+\end{equation}
+where $V(r)$ is the volume of region $r$.  What sets Divonne apart from
+Suave is that the minimum and maximum of the integrand are sought using
+methods from numerical optimization.  Particularly in high dimensions, 
+the chance that one of the previously sampled points lies in or even 
+close to the true extremum is fairly small.
+
+On the other hand, the numerical minimization is beset with the usual
+pitfalls, \ie starting from the lowest of a (relatively small) number of
+sampled points, Divonne will move directly into the local minimum
+closest to the starting point, which may or may not be close to the
+absolute minimum.
+
+Divonne is a lot more complex than Suave and Vegas but also
+significantly faster for many integrands.  For details on the methods
+used in Divonne please consult the original references \cite{Divonne}. 
+New features with respect to the CERNLIB version (Divonne 4) are:
+\begin{itemize}
+\item
+Integration is possible in dimensions 2 through 33 (not 9 as before).  
+Going to higher dimensions is a matter of extending internal tables 
+only.
+
+\item
+The possibility has been added to specify the location of possible
+peaks, if such are known from analytical considerations.  The idea here
+is to help the integrator find the extrema of the integrand, and narrow
+peaks in particular are a challenge for the algorithm.  Even if only the
+approximate location is known, this feature of hinting the integrator
+can easily cut an order of magnitude out of the number of samples needed
+to reach the required accuracy for complicated integrands.  The points
+can be specified either statically, by passing a list of points at the
+invocation, or dynamically, through a subroutine called for each
+subregion.
+
+\item
+Often the integrand function cannot sample points lying on or very
+close to the integration border.  This can be a problem with Divonne
+which actively searches for the extrema of the integrand and homes in on
+peaks regardless of whether they lie on the border.  The user may 
+however specify a border region in which integrand values are not 
+obtained directly, but extrapolated from two points inside the `safe' 
+interior.
+
+\item
+The present algorithm works in three phases, not two as before.  Phase 1
+performs the partitioning as outlined above.  From the preliminary
+results obtained in this phase, Divonne estimates the number of samples
+necessary to reach the desired accuracy in phase 2, the final
+integration phase.  Once the phase-2 sample for a particular subregion
+is in, a $\chi^2$ test is used to assess whether the two sample averages
+are consistent with each other within their error bounds.  Subregions
+which fail this test move on to phase 3, the refinement phase, where
+they can be subdivided again or sampled a third time with more points,
+depending on the parameters set by the user.
+
+\item
+For all three phases the user has a selection of methods to obtain the
+integral estimate: a Korobov \cite{Korobov} or Sobol \cite{Sobol}
+quasi-random sample of given size, a Mersenne Twister
+\cite{MersenneTwister} or Ranlux \cite{Ranlux} pseudo-random sample of
+given size, and the cubature rules of Genz and Malik \cite{GenzMalik}
+of degree 7, 9, 11, and 13 that are also used in Cuhre.  The latter are
+embedded rules and hence provide an intrinsic error estimate (that is,
+an error estimate not based on the spread).  When this independent
+error estimate is available, it supersedes the spread-based error when
+computing the total error.  Also, regions whose spread-based error
+exceeds the intrinsic error are selected for refinement, too.
+
+In spite of these novel options, the cubature rules of the original 
+Divonne algorithm were not implemented.
+\end{itemize}
+
+Due to its complexity, the new Divonne implementation was painstakingly
+tested against the CERNLIB routine to make sure it produces the same
+results before adding the new features.
+
+%========================================================================
+
+\section{Cuhre}
+
+Cuhre is a deterministic algorithm which uses one of several cubature
+rules of polynomial degree in a globally adaptive subdivision scheme.
+The subdivision algorithm is similar to Suave's (see Sect.\
+\ref{sect:suavemain}) and works as follows:
+
+While the total estimated error exceeds the requested bounds:
+
+1) choose the region with the largest estimated error,
+
+2) bisect this region along the axis with the largest fourth 
+   difference,
+
+3) apply the cubature rule to the two subregions,
+
+4) merge the subregions into the list of regions and update the 
+   totals.
+
+Details on the algorithm and on the cubature rules employed in Cuhre can
+be found in the original references \cite{dcuhre}.  The present
+implementation offers only superficial improvements, such as an
+interface consistent with the other \cuba\ routines and a slightly
+simpler invocation, \eg one does not have to allocate a workspace.
+
+In moderate dimensions Cuhre is very competitive, particularly if the 
+integrand is well approximated by polynomials.  As the dimension 
+increases, the number of points sampled by the cubature rules rises 
+considerably, however, and by the same token the usefulness declines.
+For the lower dimensions, the actual number of points that are spent per 
+invocation of the basic integration rule are listed in the following 
+table.
+\begin{center}
+\begin{tabular}{l|ccccccccc}
+number of dimensions &
+	4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 \\ \hline
+points in degree-7 rule &
+	65 & 103 & 161 & 255 & 417 & 711 & 1265 & 2335 & 4433 \\
+points in degree-9 rule &
+	153 & 273 & 453 & 717 & 1105 & 1689 & 2605 & 4117 & 6745
+\end{tabular}
+\end{center}
+
+%========================================================================
+
+\section{Download and Compilation}
+
+The \cuba\ package can be downloaded from
+\Code{http://feynarts.de/cuba}.  The gzipped tar file unpacks into
+a directory \Code{Cuba-$m$.$n$}.  Change into this directory and type
+\begin{verbatim}
+   ./configure
+   make
+\end{verbatim}
+This should create
+\begin{tabbing}
+\verb=   =\Code{libcuba.a} \hspace{10em}
+\= --- the \cuba\ library, \\
+\verb=   =\Code{Vegas}, \Code{Suave}, \Code{Divonne}, \Code{Cuhre}
+\> --- the MathLink executables, \\
+\verb=   =\Code{demo-c}, \Code{demo-fortran}
+\> --- the demonstration programs, \\
+\verb=   =\Code{partview}
+\> --- the partition viewer.
+\end{tabbing}
+\cuba\ can also be built in parts: ``make lib'' builds only the \cuba\
+library, ``make math'' builds only the MathLink executables, ``make
+demos'' builds only the demo programs, and ``make tools'' builds only 
+the partition viewer.
+
+The MathLink executables require mcc, the MathLink compiler, and the
+partition viewer needs Qt.  Compilation of the corresponding parts will
+be switched off by default if configure does not find these tools.
+
+Besides the usual autoconf options, configure understands
+\begin{itemize}
+\item
+\Code{--with-maxdim=\Var{n_d^{\text{max}}}} sets an upper limit on the
+number of dimensions.
+
+\item
+\Code{--with-maxcomp=\Var{n_c^{\text{max}}}} sets an upper limit on the
+number of components.
+
+\item
+\Code{--with-real=10} uses \Code{long double} instead of \Code{double} 
+for all real variables.  On x86 hardware this typically corresponds to
+80-bit extended precision (\Code{REAL*10}).  Resulting files are
+suffixed with `$\ell$' (\Code{libcubal.a}, \Code{cubal.h}, 
+\Code{Vegasl}, etc.).
+
+\item
+\Code{--with-real=16} uses \Code{\uscore\uscore float128} (128-bit 
+quadruple precision, \Code{REAL*16}) for all real variables.  This 
+requires gcc version 4.6 or higher. No MathLink executables are built 
+in this case as no MathLink functions are available for this type.  
+Resulting files are suffixed with `q' (\Code{libcubaq.a}, 
+\Code{cubaq.h}).
+\end{itemize}
+
+Linking Fortran or C/C++ code that uses one of the algorithms is
+straightforward, just add \Code{-lcuba} (for the \cuba\ library) and
+\Code{-lm} (for the math library) to the compiler command line, as in
+\begin{verbatim}
+   f77 -o myexecutable mysource.f -lcuba -lm
+   cc -o myexecutable mysource.c -lcuba -lm
+\end{verbatim}
+The \Code{demo} subdirectory contains the source for the demonstration
+programs in Fortran 77, C, and Mathematica, as well as the test suite
+used in Sect.~\ref{sect:tests}, which is also written in Mathematica.
+
+%========================================================================
+
+\section{User Manual}
+
+\subsection{Usage in Fortran}
+
+Although written in C, the declarations have been chosen such that the
+routines are directly accessible from Fortran, \ie no wrapper code is
+needed.  In fact, Vegas, Suave, Divonne, and Cuhre can be called as if 
+they were Fortran subroutines respectively declared as
+\begin{verbatim}
+        subroutine vegas(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, flags, seed, mineval, maxeval,
+     &    nstart, nincrease, nbatch, gridno, statefile, spin,
+     &    neval, fail, integral, error, prob)
+\end{verbatim}
+\begin{verbatim}
+        subroutine suave(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, flags, seed, mineval, maxeval,
+     &    nnew, nmin, flatness, statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+\end{verbatim}
+\begin{verbatim}
+        subroutine divonne(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, flags, seed, mineval, maxeval,
+     &    key1, key2, key3, maxpass,
+     &    border, maxchisq, mindeviation,
+     &    ngiven, ldxgiven, xgiven, nextra, peakfinder,
+     &    statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+\end{verbatim}
+\begin{verbatim}
+        subroutine cuhre(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, flags, mineval, maxeval,
+     &    key, statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+\end{verbatim}
+
+
+\subsubsection{Common Arguments}
+\label{sect:commonargs}
+
+\begin{itemize}
+\VarIn{integer ndim}
+the number of dimensions of the integral.
+
+\VarIn{integer ncomp}
+the number of components of the integrand.
+
+\VarIn{integer integrand}
+the integrand.  The external function which computes the 
+integrand is expected to be declared as
+\begin{verbatim}
+  integer function integrand(ndim, x, ncomp, f, userdata, nvec, core)
+  integer ndim, ncomp, nvec, core
+  double precision x(ndim,nvec), f(ncomp,nvec)
+\end{verbatim}
+The integrand receives \Code{nvec} samples in \Code{x} and is supposed 
+to fill the array \Code{f} with the corresponding integrand values.  
+Note that \Code{nvec} indicates the actual number of points passed to 
+the integrand here and may be smaller than the \Code{nvec} given to the 
+integrator.
+
+The return value is irrelevant unless it is $-999$, in the case of which 
+the integration will be aborted immediately.  This might happen if a 
+parameterized integrand turns out not to yield sensible values for a 
+particular parameter set (passed \eg through \Code{userdata}).
+
+The worker process the integrand is running on is indicated in 
+\Code{core}, where $\Code{core} < 0$ indicates an Accelerator, 
+$\Code{core}\geqslant 0$ a regular (CPU) core, and \Code{32768} the 
+master itself (more details in Sect.~\ref{sect:cores}).
+
+The latter three arguments, \Code{userdata}, \Code{nvec}, and 
+\Code{core} are optional and may be omitted if unused, \ie the integrand 
+is minimally declared (for $\Code{nvec} = 1$) as
+\begin{verbatim}
+  integer function integrand(ndim, x, ncomp, f)
+  integer ndim, ncomp
+  double precision x(ndim), f(ncomp)
+\end{verbatim}
+
+\VarIn{(arbitrary type) userdata}
+user data passed to the integrand.  Unlike its counterpart in the
+integrand definition, this argument must be present though it may
+contain a dummy value, \eg \Code{0}.
+
+\VarIn{integer nvec}
+The maximum number of points to be given to the integrand
+routine in each invocation.  Usually this is 1 but if the integrand
+can profit from \eg SIMD vectorization, a larger value can be chosen.
+
+\VarIn{double precision epsrel, epsabs}
+the requested relative and absolute accuracies.
+The integrator tries to find an estimate $\hat I$ for the integral $I$
+which for every component $c$ fulfills $|\hat I_c - I_c|\leqslant
+\max(\epsabs, \epsrel |I_c|)$.
+
+\VarIn{integer flags}
+flags governing the integration:
+\begin{itemize}
+\item Bits 0 and 1 are taken as the verbosity level, \ie 0 to 3, 
+unless the \Code{CUBAVERBOSE} environment variable contains an even
+higher value (used for debugging).
+
+Level 0 does not print any output, level 1 prints `reasonable'
+information on the progress of the integration, level 2 also echoes the
+input parameters, and level 3 further prints the subregion results (if
+applicable).
+
+\item Bit 2 = 0,
+all sets of samples collected on a subregion during the various 
+iterations or phases contribute to the final result.
+
+Bit 2 = 1,
+only the last (largest) set of samples is used in the final result.
+
+\item (Vegas and Suave only)
+
+Bit 3 = 0,
+apply additional smoothing to the importance function, this moderately
+improves convergence for many integrands,
+
+Bit 3 = 1,
+use the importance function without smoothing, this should be chosen if 
+the integrand has sharp edges.
+
+\item Bit 4 = 0,
+delete the state file (if one is chosen) when the integration terminates 
+successfully,
+
+Bit 4 = 1,
+retain the state file.
+
+\item 
+(Vegas only)
+
+Bit 5 = 0,
+take the integrator's state from the state file, if one is present.
+
+Bit 5 = 1,
+reset the integrator's state even if a state file is present, \ie 
+keep only the grid.  Together with Bit 4 this allows a grid adapted by 
+one integration to be used for another integrand.
+
+\item Bits 8--31 =: \Code{level} determines the random-number generator
+(see below).
+\end{itemize}
+
+To select \eg last samples only and verbosity level 2, pass 6 = 4 + 2
+for the flags.
+
+\VarIn{integer seed}
+the seed for the pseudo-random-number generator.
+
+The random-number generator is chosen as follows:
+\begin{center}
+\begin{tabular}{l|l|l}
+\Code{seed} & \Code{level} & Generator \\
+& {\small (bits 8--31 of \Code{flags})} & \\ \hline
+zero & N/A & Sobol (quasi-random), \\
+non-zero & zero & Mersenne Twister (pseudo-random), \\
+non-zero & non-zero & Ranlux (pseudo-random).
+\end{tabular}
+\end{center}
+
+Ranlux implements Marsaglia and Zaman's 24-bit RCARRY algorithm with
+generation period $p$, \ie for every 24 generated numbers used, another
+$p - 24$ are skipped.  The luxury level is encoded in \Code{level} as
+follows:
+\begin{itemize}
+\item Level 1 ($p = 48$):
+	very long period, passes the gap test but fails spectral test.
+\item Level 2 ($p = 97$):
+	passes all known tests, but theoretically still defective.
+\item Level 3 ($p = 223$):
+	any theoretically possible correlations have very small 
+	chance of being observed.
+\item Level 4 ($p = 389$):
+	highest possible luxury, all 24 bits chaotic.
+\end{itemize}
+Levels 5--23 default to 3, values above 24 directly specify the period
+$p$.  Note that Ranlux's original level 0, (mis)used for selecting
+Mersenne Twister in \cuba, is equivalent to \Code{level = 24}.
+
+\VarIn{integer mineval}
+the minimum number of integrand evaluations required.
+
+\VarIn{integer maxeval}
+the (approximate) maximum number of integrand evaluations allowed.
+
+\VarIn{character*(*) statefile}
+a filename for storing the internal state.  To not store the internal 
+state, put \Code{""} (empty string) or \Code{\%VAL(0)} (null pointer).
+
+\cuba\ can store its entire internal state (\ie all the information to 
+resume an interrupted integration) in an external file.  The state file 
+is updated after every iteration.  If, on a subsequent invocation, a
+\cuba\ routine finds a file of the specified name, it loads the internal
+state and continues from the point it left off.  Needless to say, using
+an existing state file with a different integrand generally leads to
+wrong results.
+
+This feature is useful mainly to define `check-points' in long-running 
+integrations from which the calculation can be restarted.
+
+Once the integration reaches the prescribed accuracy, the state file
+is removed, unless bit 4 of \Code{flags} (see above) explicitly requests 
+that it be kept.
+
+\VarIn{integer*8 spin}
+the `spinning cores' pointer, which has three options:
+\begin{itemize}
+\item A value of \Code{-1} or \Code{\%VAL(0)} (null pointer) means that 
+the integrator completely takes care of starting and terminating child 
+processes for the integration (if available/enabled), \ie after the 
+integrator returns there are no child processes running any longer.  
+Note that a `naive' \Code{-1} (which is an \Code{integer}, not an 
+\Code{integer*8}) is explicitly allowed.
+
+\item A zero-initialized variable \Code{spin} instructs the integrator 
+to start child processes for the integration but keep them running and 
+store the `spinning cores' pointer in \Code{spin} on exit.  Take care 
+that in this case you have to explicitly terminate the child processes 
+using \Code{cubawait} later on (see Sect.~\ref{sect:spinning}).
+
+\item A non-zero variable \Code{spin} means that the cores are already 
+running as the result of some prior integration or an explicit 
+\Code{cubafork} call (see Sect.~\ref{sect:spinning}).
+\end{itemize}
+The actual type of \Code{spin} is irrelevant, the variable must merely
+be wide enough to store a C \Code{void *}.
+
+\VarOut{integer nregions}
+the actual number of subregions needed (not present in Vegas).
+
+\VarOut{integer neval}
+the actual number of integrand evaluations needed.
+
+\VarOut{integer fail}
+an error flag:
+\begin{itemize}
+\item
+$\Code{fail} = 0$, the desired accuracy was reached,
+\item
+$\Code{fail} = -1$, dimension out of range,
+\item
+$\Code{fail} > 0$, the accuracy goal was not met within the allowed
+maximum number of integrand evaluations.  While Vegas, Suave, and Cuhre
+simply return 1, Divonne can estimate the number of points by which
+\Code{maxeval} needs to be increased to reach the desired accuracy and
+returns this value.
+\end{itemize}
+
+\VarOut{double precision integral(ncomp)}
+the integral of \Code{integrand} over the unit hypercube.
+
+\VarOut{double precision error(ncomp)}
+the presumed absolute error of \Code{integral}.
+
+\VarOut{double precision prob(ncomp)}
+the $\chi^2$-probability (not the $\chi^2$-value itself!) that
+\Code{error} is not a reliable estimate of the true integration 
+error\footnote{%
+	To judge the reliability of the result expressed through
+	\Code{prob}, remember that it is the null hypothesis that is 
+	tested by the $\chi^2$ test, which is that \Code{error} 
+	\emph{is} a reliable estimate.  In statistics, the null 
+	hypothesis may be rejected only if \Code{prob} is fairly close 
+	to unity, say $\Code{prob} > .95$.}.
+\end{itemize}
+
+
+\subsubsection{Vegas-specific Arguments}
+\label{sect:vegasargs}
+
+\begin{itemize}
+\VarIn{integer nstart}
+the number of integrand evaluations per iteration to start with.
+
+\VarIn{integer nincrease}
+the increase in the number of integrand evaluations per iteration.
+
+\VarIn{integer nbatch}
+the batch size for sampling.
+
+Vegas samples points not all at once, but in batches of size
+\Code{nbatch}, to avoid excessive memory consumption.  1000 is a
+reasonable value, though it should not affect performance too much.
+
+\VarIn{integer gridno}
+the slot in the internal grid table.
+
+It may accelerate convergence to keep the grid accumulated during one
+integration for the next one, if the integrands are reasonably similar 
+to each other.  Vegas maintains an internal table with space for ten
+grids for this purpose.  The slot in this grid is specified by
+\Code{gridno}.
+
+If a grid number between 1 and 10 is selected, the grid is not discarded
+at the end of the integration, but stored in the respective slot of the 
+table for a future invocation.  The grid is only re-used if the 
+dimension of the subsequent integration is the same as the one it 
+originates from.
+
+In repeated invocations it may become necessary to flush a slot in
+memory, in which case the negative of the grid number should be set.
+\end{itemize}
+
+Vegas actually passes the integrand two more arguments, \ie the 
+integrand function is really declared as
+\begin{verbatim}
+  integer function integrand(ndim, x, ncomp, f, userdata, nvec, core,
+    weight, iter)
+  integer ndim, ncomp, nvec, core, iter
+  double precision x(ndim,nvec), f(ncomp,nvec), weight(nvec)
+\end{verbatim}
+where \Code{weight} contains the weight of the point being sampled and
+\Code{iter} the current iteration number.  These extra arguments may
+safely be ignored, however.
+
+
+\subsubsection{Suave-specific Arguments}
+
+\begin{itemize}
+\VarIn{integer nnew}
+the number of new integrand evaluations in each subdivision.
+
+\VarIn{integer nmin}
+the minimum number of samples a former pass must contribute to a 
+subregion to be considered in that region's compound integral value.
+Increasing \Code{nmin} may reduce jumps in the $\chi^2$ value.
+
+\VarIn{double precision flatness}
+the parameter $p$ in Eq.~(\ref{eq:fluct}), \ie the type of norm used to
+compute the fluctuation of a sample.  This determines how prominently
+`outliers,' \ie individual samples with a large fluctuation, figure in
+the total fluctuation, which in turn determines how a region is split
+up.  As suggested by its name, \Code{flatness} should be chosen large
+for `flat' integrands and small for `volatile' integrands with high
+peaks.  Note that since \Code{flatness} appears in the exponent, one
+should not use too large values (say, no more than a few hundred) lest
+terms be truncated internally to prevent overflow.
+\end{itemize}
+
+Like Vegas, Suave also passes the two optional arguments \Code{weight}
+and \Code{iter} to the integrand (see Sect.~\ref{sect:vegasargs}).
+
+
+\subsubsection{Divonne-specific Arguments}
+\label{sect:divonneargs}
+
+\begin{itemize}
+\VarIn{integer key1}
+determines sampling in the partitioning phase:
+
+$\Code{key1} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{key1}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values of \Code{key1}, a quasi-random sample of
+$n_1 = |\Code{key1}|$ points is used, where the sign of \Code{key1}
+determines the type of sample,
+\begin{itemize}
+\item
+$\Code{key1} > 0$, use a Korobov quasi-random sample,
+\item
+$\Code{key1} < 0$, use a ``standard'' sample
+(a Sobol quasi-random sample if \Code{seed} = 0, otherwise a
+pseudo-random sample).
+\end{itemize}
+
+\VarIn{integer key2}
+determines sampling in the final integration phase:
+
+$\Code{key2} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{key2}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values of \Code{key2}, a quasi-random sample is used, where 
+the sign of \Code{key2} determines the type of sample,
+\begin{itemize}
+\item
+$\Code{key2} > 0$, use a Korobov quasi-random sample,
+\item
+$\Code{key2} < 0$, use a ``standard'' sample (see description of 
+\Code{key1} above),
+\end{itemize}
+and $n_2 = |\Code{key2}|$ determines the number of points,
+\begin{itemize}
+\item
+$n_2\geqslant 40$, sample $n_2$ points,
+\item
+$n_2 < 40$, sample $n_2\,\nneed$ points, where $\nneed$ is the number of
+points needed to reach the prescribed accuracy, as estimated by Divonne 
+from the results of the partitioning phase.
+\end{itemize}
+
+\VarIn{integer key3}
+sets the strategy for the refinement phase:
+
+$\Code{key3} = 0$, do not treat the subregion any further.
+
+$\Code{key3} = 1$, split the subregion up once more.
+
+Otherwise, the subregion is sampled a third time with \Code{key3}
+specifying the sampling parameters exactly as \Code{key2} above.
+
+\VarIn{integer maxpass}
+controls the thoroughness of the partitioning phase:
+The partitioning phase terminates when the estimated total number of 
+integrand evaluations (partitioning plus final integration) does not 
+decrease for \Code{maxpass} successive iterations.
+
+A decrease in points generally indicates that Divonne discovered new
+structures of the integrand and was able to find a more effective
+partitioning.  \Code{maxpass} can be understood as the number of
+`safety' iterations that are performed before the partition is accepted
+as final and counting consequently restarts at zero whenever new
+structures are found.
+
+\VarIn{double precision border}
+the width of the border of the integration region.  Points falling into
+this border region will not be sampled directly, but will be
+extrapolated from two samples from the interior.  Use a non-zero 
+\Code{border} if the integrand function cannot produce values
+directly on the integration boundary.
+
+\VarIn{double precision maxchisq}
+the maximum $\chi^2$ value a single subregion is allowed to have in the
+final integration phase.  Regions which fail this $\chi^2$ test and
+whose sample averages differ by more than \Code{mindeviation} move on
+to the refinement phase.
+
+\VarIn{double precision mindeviation}
+a bound, given as the fraction of the requested error of the entire
+integral, which determines whether it is worthwhile further examining a
+region that failed the $\chi^2$ test.  Only if the two sampling averages
+obtained for the region differ by more than this bound is the region
+further treated.
+
+\VarIn{integer ngiven}
+the number of points in the \Code{xgiven} array.
+
+\VarIn{integer ldxgiven}
+the leading dimension of \Code{xgiven}, \ie the offset between one 
+point and the next in memory.
+
+\VarIn{double precision xgiven(ldxgiven,ngiven)}
+a list of points where the integrand might have peaks.  Divonne will
+consider these points when partitioning the integration region.  The
+idea here is to help the integrator find the extrema of the integrand in
+the presence of very narrow peaks.  Even if only the approximate
+location of such peaks is known, this can considerably speed up
+convergence.
+
+\VarIn{integer nextra}
+the maximum number of extra points the peak-finder subroutine will
+return.  If \Code{nextra} is zero, \Code{peakfinder} is not called
+and an arbitrary object may be passed in its place, \eg just 0.
+
+\VarIn{external peakfinder}
+the peak-finder subroutine.  This subroutine is called whenever a region 
+is up for subdivision and is supposed to point out possible peaks lying 
+in the region, thus acting as the dynamic counterpart of the static list 
+of points supplied in \Code{xgiven}.  It is expected to be declared as
+\begin{verbatim}
+  subroutine peakfinder(ndim, b, n, x, userdata)
+  integer ndim, n
+  double precision b(2,ndim)
+  double precision x(ldxgiven,n)
+\end{verbatim}
+The bounds of the subregion are passed in the array \Code{b}, where 
+\Code{b(1,\Var{d})} is the lower and \Code{b(2,\Var{d})} the upper 
+bound in dimension \Var{d}.  On entry, \Code{n} specifies the maximum 
+number of points that may be written to \Code{x}.  On exit, \Code{n} 
+must contain the actual number of points in \Code{x}.
+\end{itemize}
+Divonne actually passes the integrand one more argument, \ie the 
+integrand function is really declared as
+\begin{verbatim}
+  integer function integrand(ndim, x, ncomp, f, userdata, nvec, core, phase)
+  integer ndim, ncomp, nvec, core, phase
+  double precision x(ndim,nvec), f(ncomp,nvec)
+\end{verbatim}
+The last argument, \Code{phase}, indicates the integration phase:
+\begin{itemize}
+\item 0, sampling of the points in \Code{xgiven},
+\item 1, partitioning phase,
+\item 2, final integration phase,
+\item 3, refinement phase.
+\end{itemize}
+This information might be useful if the integrand takes long to compute
+and a sufficiently accurate approximation of the integrand is available. 
+The actual value of the integral is only of minor importance in the
+partitioning phase, which is instead much more dependent on the peak
+structure of the integrand to find an appropriate tessellation.  An
+approximation which reproduces the peak structure while leaving out the
+fine details might hence be a perfectly viable and much faster
+substitute when $\Code{phase} < 2$.
+
+In all other instances, \Code{phase} can be ignored and it is
+entirely admissible to define the integrand without it.
+
+
+\subsubsection{Cuhre-specific Arguments}
+
+\begin{itemize}
+\VarIn{integer key}
+chooses the basic integration rule:
+
+$\Code{key} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{key}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values, the default rule is taken, which is the degree-13 rule 
+in 2 dimensions, the degree-11 rule in 3 dimensions, and the degree-9 
+rule otherwise.
+\end{itemize}
+
+
+\subsubsection{Visualizing the Tessellation}
+
+Suave, Divonne, and Cuhre work by dividing the integration region into 
+subregions for integration.  When verbosity level 3 is selected in the 
+flags, the actual tessellation is written out on screen and can be 
+visualized with the partview tool.  To this end, the output of the 
+program invoking \cuba\ is piped through partview, \eg
+\begin{verbatim}
+   mycubaprogram | partview 1 2 1 3
+\end{verbatim}
+opens a window with two tabs showing the 1--2 and 1--3 plane of the 
+tessellation.  The saturation of the colours corresponds to the area of
+the region, \ie smaller regions are displayed in a darker shade.
+
+
+\subsection{Usage in C/C++}
+
+Being written in C, the algorithms can of course be used in C/C++ 
+directly.  The declarations are as follows:
+\begin{verbatim}
+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 *userdata);
+\end{verbatim}
+\begin{verbatim}
+void Vegas(const int ndim, const int ncomp,
+  integrand_t integrand, void *userdata, const int nvec,
+  const double epsrel, const double 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, void *spin,
+  int *neval, int *fail,
+  double integral[], double error[], double prob[])
+\end{verbatim}
+\begin{verbatim}
+void Suave(const int ndim, const int ncomp,
+  integrand_t integrand, void *userdata, const int nvec,
+  const double epsrel, const double epsabs,
+  const int flags, const int seed,
+  const int mineval, const int maxeval,
+  const int nnew, const int nmin,
+  const double flatness, const char *statefile, void *spin,
+  int *nregions, int *neval, int *fail,
+  double integral[], double error[], double prob[])
+\end{verbatim}
+\begin{verbatim}
+void Divonne(const int ndim, const int ncomp,
+  integrand_t integrand, void *userdata, const int nvec,
+  const double epsrel, const double 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 int nextra, peakfinder_t peakfinder,
+  const char *statefile, void *spin,
+  int *nregions, int *neval, int *fail,
+  double integral[], double error[], double prob[])
+\end{verbatim}
+\begin{verbatim}
+void Cuhre(const int ndim, const int ncomp,
+  integrand_t integrand, void *userdata, const int nvec,
+  const double epsrel, const double epsabs,
+  const int flags,
+  const int mineval, const int maxeval,
+  const int key, const char *statefile, void *spin,
+  int *nregions, int *neval, int *fail,
+  double integral[], double error[], double prob[])
+\end{verbatim}
+These prototypes are contained in \Code{cuba.h} which should (in C) or
+must (in C++) be included when using the \cuba\ routines.  The arguments
+are as in the Fortran case, with the obvious translations, \eg
+\Code{double precision} = \Code{double}.  Note, however, the
+declarations of the integrand and peak-finder functions, which expect
+pointers to integers rather than integers.  This is required for
+compatibility with Fortran.
+
+The \verb=integrand_t= type glosses over the fact that the extra 
+\Code{nvec} argument is routinely passed to the integrand and neither 
+does it mention the extra arguments passed by \Code{Vegas}, 
+\Code{Suave}, and \Code{Divonne} (see Sects.\ \ref{sect:vegasargs} and 
+\ref{sect:divonneargs}).  This is usually just what is needed for 
+`simple' invocations, \ie with the `correct' prototypes the compiler 
+would only generate unnecessary warnings (in C) or errors (in C++).  In 
+the rare cases where the integrand actually has more arguments, an 
+explicit typecast to \verb=integrand_t= must be used in the invocation. 
+In the presence of an \Code{nvec} argument, the \Code{x} and \Code{f} 
+arguments are actually two-dimensional arrays, \Code{x[*nvec][*ndim]} 
+and \Code{f[*nvec][*ncomp]}.
+
+
+\subsection{Usage in Mathematica}
+
+The Mathematica versions are based on essentially the same C code and
+communicate with Mathematica via the MathLink API.  When building the
+package, the executables \Code{Vegas}, \Code{Suave},
+\Code{Divonne}, and \Code{Cuhre} are compiled for use in
+Mathematica.  In Mathematica one first needs to load them with the 
+\Code{Install} function, as in
+\begin{verbatim}
+   Install["Divonne"]
+\end{verbatim}
+which makes a Mathematica function of the same name available.  These 
+functions are used almost like \Code{NIntegrate}, only some options 
+are different.  For example,
+\begin{verbatim}
+   Vegas[x^2/(Cos[x + y + 1] + 5), {x,0,5}, {y,0,5}]
+\end{verbatim}
+integrates a scalar function, or
+\begin{verbatim}
+   Suave[{Sin[z] Exp[-x^2 - y^2],
+          Cos[z] Exp[-x^2 - y^2]}, {x,-1,1}, {y,-1,3}, {z,0,1}]
+\end{verbatim}
+integrates a vector.  As is evident, the integration region can be 
+chosen different from the unit hypercube.  Innermore boundaries may 
+depend on outermore integration variables, \eg
+\verb=Cuhre[1, {x,0,1}, {y,0,x}]= gives the area of the unit triangle.
+
+The sampling function uses \Code{MapSample} to map the integrand over 
+the data points.  This is by default set to \Code{Map}, but can be 
+changed (after \Code{Install}) \eg to \Code{ParallelMap} to take 
+advantage of parallelization (see Sect.~\ref{sect:parallel} for more 
+details).
+
+The functions return a list which contains the results for each
+component of the integrand in a sublist \{integral estimate, estimated 
+absolute error, $\chi^2$ probability\}.  For the Suave example above 
+this would be
+\begin{verbatim}
+   {{1.1216, 0.000991577, 0.0000104605}, 
+    {2.05246, 0.00146661, 0.00920716}}
+\end{verbatim}
+The other parameters are specified via the following options.  Default 
+values are given on the right-hand sides of the rules.
+
+
+\subsubsection{Common Options}
+
+\begin{itemize}
+\Option{PrecisionGoal}{3}
+the number of digits of relative accuracy to seek, that is, $\epsrel =
+10^{-\Code{PrecisionGoal}}$.
+
+\Option{AccuracyGoal}{12}
+the number of digits of absolute accuracy to seek, that is, $\epsabs =
+10^{-\Code{AccuracyGoal}}$.  The integrator tries to find an estimate
+$\hat I$ for the integral $I$ which for every component $c$ fulfills
+$|\hat I_c - I_c|\leqslant \max(\epsabs, \epsrel I_c)$.
+
+\Option{MinPoints}{0}
+the minimum number of integrand evaluations required.
+
+\Option{MaxPoints}{50000}
+the (approximate) maximum number of integrand evaluations allowed.
+
+\Option{Verbose}{1}
+how much information to print on intermediate results, can take values
+from 0 to 3.
+
+Level 0 does not print any output, level 1 prints `reasonable'
+information on the progress of the integration, level 2 also echoes the
+input parameters, and level 3 further prints the subregion results (if
+applicable).  Note that the subregion boundaries in the level-3 printout
+refer to the unit hypercube, \ie are possibly scaled with respect to the
+integration limits passed to Mathematica.  This is because the
+underlying C code, which emits the output, is unaware of any scaling of
+the integration region, which is done entirely in Mathematica.
+
+\Option{Final}{All \Var{or} Last}
+whether only the last (largest) or all sets of samples collected on a
+subregion during the various iterations or phases contribute to the
+final result.
+
+\Option{PseudoRandom}{False}
+whether pseudo-random numbers are used for sampling instead of Sobol
+quasi-random numbers.  Values \Code{True} and \Code{0} select the
+Mersenne Twister algorithm, any other integer $n$ chooses Ranlux with
+luxury level $n$ (see Sect.~\ref{sect:commonargs}).
+
+\Option{PseudoRandomSeed}{Automatic}
+the seed for the pseudo-random-number generator.
+
+\Option{Regions}{False}
+whether to return the tessellation of the integration region (thus not
+present in Vegas, which does not partition the integration region).
+
+If \Code{Regions -> True} is chosen, a two-component list is returned,
+where the first element is the list of regions, and the second element
+is the integration result as described above.  Each region is specified
+in the form \Code{Region[\Var{x_{\mathrm{ll}}},\,\Var{x_{\mathrm{ur}}},%
+\,\Var{res},\,\Var{df}]}, where \Var{x_{\text{ll}}} and
+\Var{x_{\text{ur}}} are the multidimensional equivalents of the lower
+left and upper right corner, \Var{res} is the integration result for the
+subregion, given in the same form as the total result but with the
+$\chi^2$ value instead of the $\chi^2$ probability, and \Var{df} are the
+degrees of freedom corresponding to the $\chi^2$ values. 
+
+Cuhre cannot state a $\chi^2$ value separately for each region, hence
+the $\chi^2$ values and degrees of freedom are omitted from the
+\Code{Region} information.
+
+\Option{StateFile}{""}
+the file name for storing the internal state.  If a non-empty string is
+given here, Vegas will store its entire internal state (\ie all the
+information to resume an interrupted integration) in this file after
+every iteration.  If, on a subsequent invocation, Vegas finds a file of
+the specified name, it loads the internal state and continues from the
+point it left off.  Needless to say, using an existing state file with a
+different integrand generally leads to wrong results.
+
+This feature is useful mainly to define `check-points' in long-running
+integrations from which the calculation can be restarted.
+
+\Option{RetainStateFile}{False}
+whether the state file shall be kept even if the integration terminates 
+normally, \ie reaches either the prescribed accuracy or the maximum 
+number of points.
+
+\Option{Compiled}{True}
+whether to compile the integrand function before use.  Note two caveats:
+\begin{itemize}
+\item
+The function values still have to pass through the MathLink interface,
+and in the course of this are truncated to machine precision.  Not
+compiling the integrand will thus in general not deliver more accurate
+results.
+\item
+Compilation should be switched off if the compiled integrand shows
+unexpected behaviour.  As the Mathematica online help points out, ``the
+number of times and the order in which objects are evaluated by
+\Code{Compile} may be different from ordinary Mathematica code.''
+\end{itemize}
+\end{itemize}
+
+
+\subsubsection{Vegas-specific Options}
+
+\begin{itemize}
+\Option{NStart}{1000}
+the number of integrand evaluations per iteration to start with.
+
+\Option{NIncrease}{500}
+the increase in the number of integrand evaluations per iteration.
+
+\Option{NBatch}{1000}
+the number of points sent in one MathLink packet to be sampled by
+Mathematica.  This setting will at most affect performance and should 
+not normally need to be changed.
+
+\Option{GridNo}{0}
+the slot in the internal grid table.
+
+It may accelerate convergence to keep the grid accumulated during one
+integration for the next one, if the integrands are reasonably similar
+to each other.  Vegas maintains an internal table with space for ten
+grids for this purpose.  If a \Code{GridNo} between 1 and 10 is chosen,
+the grid is not discarded at the end of the integration, but stored for
+a future invocation.  The grid is only re-used if the dimension of the
+subsequent integration is the same as the one it originates from.  
+A negative grid number initializes the indicated slot before the
+integration (for details see Sect.~\ref{sect:vegasargs}).
+
+\Option{ResetState}{False}
+whether the integrator's state should be reset even if a state file is
+present, \ie only the grid be kept.  Together with the
+\Code{RetainStateFile} option this allows a grid adapted by one 
+integration to be used for another integrand.
+
+\item
+During the evaluation of the integrand, the global variable
+\Code{\$Weight} is set to the weight of the point being sampled and
+\Code{\$Iteration} to the current iteration number.
+\end{itemize}
+
+
+\subsubsection{Suave-specific Options}
+
+\begin{itemize}
+\Option{NNew}{1000}
+the number of new integrand evaluations in each subdivision.
+
+\Option{NMin}{2}
+the minimum number of samples a former pass must contribute to a 
+subregion to be considered in that region's compound integral value.
+Increasing \Code{NMin} may reduce jumps in the $\chi^2$ value.
+
+\Option{Flatness}{50}
+the parameter $p$ in Eq.~(\ref{eq:fluct}), \ie the type of norm used to
+compute the fluctuation of a sample.  This determines how prominently
+`outliers,' \ie individual samples with a large fluctuation, figure in
+the total fluctuation, which in turn determines how a region is split
+up.  As suggested by its name, \Code{Flatness} should be chosen large
+for `flat' integrands and small for `volatile' integrands with high
+peaks.  Note that since \Code{Flatness} appears in the exponent, one
+should not use too large values (say, no more than a few hundred) lest
+terms be truncated internally to prevent overflow.
+
+\item
+During the evaluation of the integrand, the global variable
+\Code{\$Weight} is set to the weight of the point being sampled and
+\Code{\$Iteration} to the current iteration number.
+\end{itemize}
+
+
+\subsubsection{Divonne-specific Options}
+
+\begin{itemize}
+\Option{Key1}{47}
+an integer which governs sampling in the partitioning phase:
+
+$\Code{Key1} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{Key1}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values of \Code{Key1}, a quasi-random sample of
+$n_1 = |\Code{Key1}|$ points is used, where the sign of \Code{Key1}
+determines the type of sample,
+\begin{itemize}
+\item
+$\Code{Key1} > 0$, use a Korobov quasi-random sample,
+\item
+$\Code{Key1} < 0$, use a ``standard'' sample
+(a Sobol quasi-random sample in the case \Code{PseudoRandom -> False},
+otherwise a pseudo-random sample).
+\end{itemize}
+
+\Option{Key2}{1}
+an integer which governs sampling in the final integration phase:
+
+$\Code{Key2} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{Key2}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values of \Code{Key2}, a quasi-random sample is used, where 
+the sign of \Code{Key2} determines the type of sample,
+\begin{itemize}
+\item
+$\Code{Key2} > 0$, use a Korobov quasi-random sample,
+\item
+$\Code{Key2} < 0$, use a ``standard'' sample
+(see description of \Code{Key1} above),
+\end{itemize}
+and $n_2 = |\Code{Key2}|$ determines the number of points,
+\begin{itemize}
+\item
+$n_2\geqslant 40$, sample $n_2$ points,
+\item
+$n_2 < 40$, sample $n_2\,\nneed$ points, where $\nneed$ is the number of
+points needed to reach the prescribed accuracy, as estimated by Divonne 
+from the results of the partitioning phase.
+\end{itemize}
+
+\Option{Key3}{1}
+an integer which sets the strategy for the refinement phase:
+
+$\Code{Key3} = 0$, do not treat the subregion any further.
+
+$\Code{Key3} = 1$, split the subregion up once more.
+
+Otherwise, the subregion is sampled a third time with \Code{Key3}
+specifying the sampling parameters exactly as \Code{Key2} above.
+
+\Option{MaxPass}{5}
+the number of passes after which the partitioning phase terminates.
+The partitioning phase terminates when the estimated total number of 
+integrand evaluations (partitioning plus final integration) does not 
+decrease for \Code{MaxPass} successive iterations.
+
+A decrease in points generally indicates that Divonne discovered new
+structures of the integrand and was able to find a more effective
+partitioning.  \Code{MaxPass} can be understood as the number of
+`safety' iterations that are performed before the partition is accepted
+as final and counting consequently restarts at zero whenever new
+structures are found.
+
+\Option{Border}{0}
+the width of the border of the integration region.  Points falling into
+this border region are not sampled directly, but are extrapolated from
+two samples from the interior.  Use a non-zero \Code{Border} if the
+integrand function cannot produce values directly on the integration
+boundary.
+
+The border width always refers to the unit hypercube, \ie it is not
+rescaled if the integration region is not the unit hypercube.
+
+\Option{MaxChisq}{10}
+the maximum $\chi^2$ value a single subregion is allowed to have in the
+final integration phase.  Regions which fail this $\chi^2$ test and
+whose sample averages differ by more than \Code{MinDeviation} move on
+to the refinement phase.
+
+\Option{MinDeviation}{.25}
+a bound, given as the fraction of the requested error of the entire
+integral, which determines whether it is worthwhile further examining a
+region that failed the $\chi^2$ test.  Only if the two sampling averages
+obtained for the region differ by more than this bound is the region
+further treated.
+
+\Option{Given}{\lbrac\rbrac}
+a list of points where the integrand might have peaks.  A point is a
+list of $n_d$ real numbers, where $n_d$ is the dimension of the
+integral.
+
+Divonne will consider these points when partitioning the integration
+region.  The idea here is to help the integrator find the extrema of the
+integrand in the presence of very narrow peaks.  Even if only the
+approximate location of such peaks is known, this can considerably speed
+up convergence.
+
+\Option{NExtra}{0}
+the maximum number of points that will be considered in the output of 
+the \Code{PeakFinder} function.
+
+\Option{PeakFinder}{(\lbrac\rbrac\&)}
+the peak-finder function.  This function is called whenever a region is
+up for subdivision and is supposed to point out possible peaks lying in
+the region, thus acting as the dynamic counterpart of the static list of
+points supplied with \Code{Given}.  It is invoked with two arguments,
+the multidimensional equivalents of the lower left and upper right
+corners of the region being investigated, and must return a (possibly
+empty) list of points.  A point is a list of $n_d$ real numbers, where 
+$n_d$ is the dimension of the integral.
+\end{itemize}
+
+
+\subsubsection{Cuhre-specific Options}
+
+\begin{itemize}
+\Option{Key}{0}
+chooses the basic integration rule:
+
+$\Code{Key} = 7, 9, 11, 13$ selects the cubature rule of degree 
+\Code{Key}.  Note that the degree-11 rule is available only in 3
+dimensions, the degree-13 rule only in 2 dimensions.
+
+For other values, the default rule is taken, which is the degree-13 rule 
+in 2 dimensions, the degree-11 rule in 3 dimensions, and the degree-9 
+rule otherwise.
+\end{itemize}
+
+
+\subsubsection{Visualizing the Tessellation}
+
+Suave, Divonne, and Cuhre work by dividing the integration region into 
+subregions for integration.  The tessellation is returned together with 
+the integration results when the option \Code{Regions -> True} is
+set.  Such output can be visualized using the Mathematica program 
+\Code{partview.m} that comes with \cuba.  The invocation is \eg
+\begin{verbatim}
+  result = Divonne[..., Regions -> True]
+  << tools/partview.m
+  PartView[result, 1, 2]
+\end{verbatim}
+which displays the 1--2 plane of the tessellation.  The saturation of 
+the colours corresponds to the area of the region, \ie smaller regions
+are displayed in a darker shade.
+
+
+\subsection{Long-integer Versions}
+
+For both Fortran and C/C++ there exist versions of the integration 
+routines that take 64-bit integers for all number-of-points-type 
+quantities.  These should be used in cases where convergence is not 
+reached within the ordinary 32-bit integer range ($2^{31} - 1$).
+
+The long-integer versions are distinguished by the ``\Code{ll}''
+prefix.  Their specific invocations are, in Fortran,
+\begin{alltt}
+        subroutine llvegas(ndim, ncomp, integrand, userdata, \ul{nvec},
+     &    epsrel, epsabs, flags, seed, \ul{mineval}, \ul{maxeval},
+     &    \ul{nstart}, \ul{nincrease}, \ul{nbatch}, gridno, statefile, spin,
+     &    \ul{neval}, fail, integral, error, prob)
+\end{alltt}
+\begin{alltt}
+        subroutine llsuave(ndim, ncomp, integrand, userdata, \ul{nvec},
+     &    epsrel, epsabs, flags, seed, \ul{mineval}, \ul{maxeval},
+     &    \ul{nnew}, \ul{nmin}, flatness, statefile, spin,
+     &    nregions, \ul{neval}, fail, integral, error, prob)
+\end{alltt}
+\begin{alltt}
+        subroutine lldivonne(ndim, ncomp, integrand, userdata, \ul{nvec},
+     &    epsrel, epsabs, flags, seed, \ul{mineval}, \ul{maxeval},
+     &    key1, key2, key3, maxpass,
+     &    border, maxchisq, mindeviation,
+     &    \ul{ngiven}, ldxgiven, xgiven, \ul{nextra}, peakfinder,
+     &    statefile, spin,
+     &    nregions, \ul{neval}, fail, integral, error, prob)
+\end{alltt}
+\begin{alltt}
+        subroutine llcuhre(ndim, ncomp, integrand, userdata, \ul{nvec},
+     &    epsrel, epsabs, flags, seed, \ul{mineval}, \ul{maxeval},
+     &    key, statefile, spin,
+     &    nregions, \ul{neval}, fail, integral, error, prob)
+\end{alltt}
+The correspondences for C/C++ are obvious and are given explicitly in
+the include file \Code{cuba.h}.  The arguments are as for the normal
+versions except that all underlined variables are of type
+\Code{integer*8} in Fortran and \Code{long long int} in C/C++.
+
+%========================================================================
+
+\section{Parallelization}
+\label{sect:parallel}
+
+Numerical integration is perfectly suited for parallel execution, which 
+can significantly speed up the computation as it generally incurs only a 
+very small overhead.  The parallelization procedure is rather different 
+in Fortran/C/C++ and in Mathematica.  We shall deal with the latter 
+first because it needs only a short explanation.  The remainder of this 
+chapter is then devoted to the Fortran/C/C++ case.
+
+%------------------------------------------------------------------------
+
+\subsection{Parallelization in Mathematica}
+
+The Mathematica version of \cuba\ performs its sampling through a 
+function \Code{MapSample}.  By default this is identical to \Code{Map}, 
+\ie the serial version, so to parallelize one merely needs to redefine 
+\Code{MapSample = ParallelMap} (after loading \cuba).
+
+If the integrand depends on user-defined symbols or functions, their 
+definitions must be distributed to the workers beforehand using 
+\Code{DistributeDefinitions} and likewise required packages must be 
+loaded with \Code{ParallelNeeds} instead of \Code{Needs}; this is 
+explained in detail in the Mathematica manual.
+
+%------------------------------------------------------------------------
+
+\subsection{Parallelization in Fortran and C/C++}
+
+In Fortran and C/C++ the \cuba\ library can (and usually does) 
+automatically parallelize the sampling of the integrand.  It 
+parallelizes through \Code{fork} and \Code{wait} which, though slightly 
+less performant than pthreads, do not require reentrant code.  
+(Reentrancy may not even be under full control of the programmer, for 
+example Fortran's I/O is usually non-reentrant.)  Worker processes are 
+started and shut down only as few times as possible, however, so the 
+performance penalty is really quite minor even for non-native fork 
+implementations such as Cygwin's.  Parallelization is not available on 
+native Windows for lack of the \Code{fork} function.
+
+The communication of samples to and from the workers happens through IPC 
+shared memory (\Code{shmget} and colleagues), or if that is not 
+available, through a \Code{socketpair} (two-way pipe).  Remarkably, the 
+former's anticipated performance advantage turned out to be hardly 
+perceptible.  Possibly there are cache-coherence issues introduced by 
+several workers writing simultaneously to the same shared-memory area.
+
+%------------------------------------------------------------------------
+
+\subsubsection{Starting and stopping the workers}
+\label{sect:spinning}
+
+The workers are usually started and stopped automatically by \cuba's 
+integration routines, but the user may choose to start them manually or 
+keep them running after one integration and shut them down later, \eg at 
+the end of the program, which can be slightly more efficient.  The 
+latter mode is referred to as `Spinning Cores' and must be employed with 
+certain care, for running workers will not `see' subsequent changes in 
+the main program's data (\eg global variables, common blocks) or code 
+(\eg via \Code{dlsym}) unless special arrangements are made (\eg shared 
+memory).
+
+The spinning cores are controlled through the `\Code{spin}' argument of 
+the \cuba\ integration routines (Sect.~\ref{sect:commonargs}):
+\begin{itemize}
+\item A value of \Code{-1} or \Code{\%VAL(0)} (in Fortran) or 
+\Code{NULL} (in C/C++) tells the integrator to start and shut down the 
+workers autonomously.  This is the usual case.  No workers will still be 
+running after the integrator returns.  No special precautions need to be 
+taken to communicate \eg global data to the workers.  Note that it is 
+expressly allowed to pass a `naive' \Code{-1} (which is an 
+\Code{integer}, not an \Code{integer*8}) in Fortran.
+
+\item Passing a zero-initialized variable for \Code{spin} instructs the 
+integrator to start the workers but keep them running on return and 
+store the `spinning cores' pointer in \Code{spin} for future use.  The 
+spinning cores must later be terminated explicitly by \Code{cubawait}, 
+thus invocation would schematically look like this:
+
+\hfill\begin{minipage}{.4\hsize}
+\begin{verbatim}
+integer*8 spin
+spin = 0
+call vegas(..., spin, ...)
+...
+call cubawait(spin)
+\end{verbatim}
+\end{minipage}\hfill\begin{minipage}{.4\hsize}
+\begin{verbatim}
+void *spin = NULL;
+
+Vegas(..., &spin, ...);
+...
+cubawait(&spin);
+\end{verbatim}
+\end{minipage}\hfill
+
+\item A non-zero \Code{spin} variable is assumed to contain a valid 
+`spinning cores' pointer either from a former integration or an explicit 
+invocation of \Code{cubafork}, as in:
+
+\hfill\begin{minipage}{.4\hsize}
+\begin{verbatim}
+integer*8 spin
+call cubafork(spin)
+call vegas(..., spin, ...)
+...
+call cubawait(spin)
+\end{verbatim}
+\end{minipage}\hfill\begin{minipage}{.4\hsize}
+\begin{verbatim}
+void *spin;
+cubafork(&spin);
+Vegas(..., &spin, ...);
+...
+cubawait(&spin);
+\end{verbatim}
+\end{minipage}\hfill
+\end{itemize}
+
+%------------------------------------------------------------------------
+
+\subsubsection{Accelerators and Cores}
+\label{sect:cores}
+
+Based on the strategy used to distribute samples, \cuba\ distinguishes 
+two kinds of workers.
+
+Workers of the first kind are referred to as `Accelerators' even though 
+\cuba\ does not actually send anything to a GPU or Accelerator in the 
+system by itself -- this can only be done by the integrand routine.  The 
+assumption behind this strategy is that the integrand evaluation is 
+running on a device so highly parallel that the sampling time is more or 
+less independent of the number of points, up to the number of threads 
+$p\accel$ available in hardware.  \cuba\ tries to send exactly $p\accel$ 
+points to each core -- never more, less only for the last batch.  To 
+sample \eg 2400 points on three accelerators with $p\accel = 1000$, 
+\cuba\ sends batches of 1000/1000/400 and not, for example, 800/800/800 
+or 1200/1200.  The number of accelerators $n\accel$ and their value of 
+$p\accel$ can be set through the environment variables
+\begin{tabbing}
+\verb|   CUBAACCEL=|$n\accel$ \hspace{10em}\= (default: 0) \\
+\verb|   CUBAACCELMAX=|$p\accel$    \> (default: 1000)
+\end{tabbing}
+or, superseding the environment, an explicit
+\begin{alltt}
+   call cubaaccel(\(n\accel\), \(p\accel\))
+\end{alltt}
+
+CPU-bound workers are just called `Cores'.  Their distribution strategy 
+is different in that all available cores are used and points are 
+distributed evenly.  In the example above, the batches would be 
+800/800/800 thus.  Each core receives at least 10 points, or else fewer 
+cores are used.  If no more than 10 points are requested in total, 
+\cuba\ uses no workers at all but lets the master sample those few 
+points.  This happens during the partitioning phase of Divonne for 
+instance, where only single points are evaluated in the minimum/maximum 
+search. Conversely, if the division of points by cores does not come out 
+even, the remaining few points ($< n\cores$) are simply added to the 
+existing batches, to avoid an extra batch because of rounding.  Sampling 
+2001 points on two cores with $p\cores = 1000$ will hence give two 
+batches 1001/1000 and not three batches 1000/1000/1.
+
+Although there is typically no hardware limit, a maximum number of 
+points per core, $p\cores$, can be prescribed for Cores, too.  Unless 
+the integrand is known to evaluate equally fast at all points, a 
+moderate number for $p\cores$ (10000, say) may actually increase 
+performance because it effectively load-levels the sampling.  For, a 
+batch always goes to the next free core so it doesn't matter much 
+if one core is tied up with a batch that takes longer.
+
+The number of cores $n\cores$ and the value of $p\cores$ can be set 
+analogously through the environment variables
+\begin{tabbing}
+\verb|   CUBACORES=|$n\cores$ \hspace{10em}\= (default: no.\ of idle cores) \\
+\verb|   CUBACORESMAX=|$p\cores$ \> (default: 10000)
+\end{tabbing}
+If \Code{CUBACORES} is unset, the idle cores on the present system are 
+taken (total cores minus load average), which means that a program 
+calling a \cuba\ routine will by default automatically parallelize on 
+the available cores.  Again, the environment can be overruled with an 
+explicit
+\begin{alltt}
+   call cubacores(\(n\cores\), \(p\cores\))   
+\end{alltt}
+Using the environment has the advantage, though, that changing the 
+number of cores to use does not require a re-compile, which is 
+particularly useful if one wants to run the program on several computers 
+(with potentially different numbers of cores) simultaneously, say in a 
+batch queue.
+
+The integrand function may use the `\Code{core}' argument 
+(Sect.~\ref{sect:commonargs}) to distinguish Accelerators ($\Code{core} 
+< 0$) and Cores ($\Code{core}\geqslant 0$).  The special value 
+$\Code{core} = 32768$ ($2^{15}$) indicates that the master itself is 
+doing the sampling.
+
+%------------------------------------------------------------------------
+
+\subsubsection{Worker initialization}
+
+User subroutines for (de)initialization may be registered with
+\begin{alltt}
+   call cubainit(initfun, initarg)           \textrm{Fortran}
+   call cubaexit(exitfun, exitarg)
+\end{alltt}
+\begin{alltt}
+   cubainit(initfun, initarg);               \textrm{C/C++}
+   cubaexit(exitfun, exitarg);
+\end{alltt}
+and will be executed in every process before and after sampling.
+Passing a null pointer (\Code{\%VAL(0)} in Fortran, \Code{NULL} in
+C/C++) as the first argument unregisters either subroutine.
+
+The init/exit functions are actually called as
+\begin{alltt}
+   call initfun(initarg, core)               \textrm{Fortran}
+   call exitfun(exitarg, core)
+\end{alltt}
+\begin{alltt}
+   initfun(initarg, &core);                  \textrm{C/C++}
+   exitfun(exitarg, &core);
+\end{alltt}
+where \Code{initarg} and \Code{exitarg} are the user arguments given 
+with the registration (arbitrary in Fortran, \Code{void *} in C/C++) 
+and \Code{core} indicates the core the function is being executed on, 
+with (as before) $\Code{core} < 0$ for Accelerators, 
+$\Code{core}\geqslant 0$ for Cores, and $\Code{core} = 32768$ for the 
+master.
+
+On worker processes, the functions are respectively executed after 
+\Code{fork} and before \Code{wait}, independently of whether the worker 
+actually receives any samples.  The master executes them only when 
+actual sampling is done.
+For Accelerators, the init and exit functions are typically used to set 
+up the device for the integrand evaluations, which for many devices must 
+be done per process, \ie after the \Code{fork}.
+
+%------------------------------------------------------------------------
+
+\subsubsection{Concurrency issues}
+
+By creating a new process image, \Code{fork} circumvents all memory 
+concurrency, to wit: each worker modifies only its own copy of the 
+parent's memory and never overwrites any other's data.  The programmer 
+should be aware of a few potential problems nevertheless:
+\begin{itemize}
+\item Communicating back results other than the intended output from the 
+integrand to the main program is not straightforward because, by the 
+same token, a worker cannot overwrite any common data of the master, it 
+will only modify its own copy.
+
+Data exchange between workers is likewise not directly possible.  For 
+example, if one worker stores an intermediate result in a common block, 
+this will not be seen by the other workers.
+
+Possible solutions include using shared memory (\Code{shmget} etc., see 
+App.~\ref{app:shm}) and writing the output to file (but see next item 
+below).
+
+\item \Code{fork} does not guard against competing use of other common 
+resources.  For example, if the integrand function writes to a file 
+(debug output, say), there is no telling in which order the lines will 
+end up in the file, or even if they will end up as complete lines at 
+all.  Buffered output should be avoided at the very least; better still, 
+every worker should write the output to its own file, \eg with a 
+filename that includes the process id, as in:
+\begin{verbatim}
+   character*32 filename
+   integer pid
+   data pid /0/
+   if( pid .eq. 0 ) then  
+     pid = getpid()
+     write(filename,'("output.",I5.5)') pid
+     open(unit=4711, file=filename)
+   endif
+\end{verbatim}
+
+\item Fortran users are advised to flush (or close) any open files 
+before calling \cuba, \ie \Code{call flush(\Var{unit})}.  The reason is 
+that the child processes inherit all file buffers, and \emph{each} of 
+them will write out the buffer content at exit.  \cuba\ preemptively 
+flushes the system buffers already (\Code{fflush(NULL)}) but has no 
+control over Fortran's buffers.
+\end{itemize}
+For debugging, or if a malfunction due to concurrency issues is 
+suspected, a program should be tested in serial mode first, \eg by 
+setting $\Code{CUBACORES} = 0$ (Sect.~\ref{sect:cores}).
+
+%------------------------------------------------------------------------
+
+\subsubsection{Vectorization}
+
+Vectorization means evaluating the integrand function for several points 
+at once.  This is also known as Single Instruction Multiple Data (SIMD) 
+paradigm and is different from ordinary parallelization where 
+independent threads are executed concurrently.  It is usually possible 
+to employ vectorization on top of parallelization.
+
+Vector instructions are commonly available in hardware, \eg on x86 
+platforms under acronyms such as SSE or AVX.  Language support varies: 
+Fortran 90's syntax naturally embeds vector operations.  Many C/C++ 
+compilers offer auto-vectorization options, some have extensions for 
+vector data types (usually for a limited set of mathematical functions), 
+and even hardware-specific access to the CPU's vector instructions.  And 
+then there are vectorized libraries of numerical functions available.
+
+\cuba\ cannot automatically vectorize the integrand function, of course, 
+but it does pass (up to) \Code{nvec} points per integrand call 
+(Sect.~\ref{sect:commonargs}).  This value need not correspond to the 
+hardware vector length -- computing several points in one call can also 
+make sense \eg if the computations have significant intermediate results 
+in common.  The actual number of points passed is indicated through the 
+corresponding \Code{nvec} argument of the integrand.
+
+\medskip
+
+A note for disambiguation: The \Code{nbatch} argument of Vegas is 
+related in purpose but not identical to \Code{nvec}.  It internally 
+partitions the sampling done by Vegas but has no bearing on the number 
+of points given to the integrand.  On the other hand, it it pointless to 
+choose $\Code{nvec} > \Code{nbatch}$ for Vegas.
+
+%========================================================================
+
+\section{Tests and Comparisons}
+\label{sect:tests}
+
+Four integration routines may seem three too many, but as the following 
+tests show, all have their strengths and weaknesses.  Fine-tuning the 
+algorithm parameters can also significantly affect performance.
+
+In the following, the test suite of Genz \cite{Genz} is used.  Rather
+than testing individual integrands, Genz proposes the following six
+families of integrands:
+\begin{equation}
+\label{eq:families}
+\begin{array}{ll}
+\text{1. Oscillatory:} &
+  f_1(\dvec x) = \cos(\dvec c\cdot\dvec x + 2\pi w_1)\,, \\[2ex]
+\text{2. Product peak:} &
+  f_2(\dvec x) = \prod\limits_{i = 1}^{n_d}
+    \dfrac 1{(x_i - w_i)^2 + c_i^{-2}}\,, \\[3ex]
+\text{3. Corner peak:} &
+  f_3(\dvec x) = \dfrac 1{(1 + \dvec c\cdot\dvec x)^{n_d + 1}}\,, \\[3ex]
+\text{4. Gaussian:} &
+  f_4(\dvec x) = \exp(-\dvec c^2 (\dvec x - \dvec w)^2)\,, \\[2ex]
+\text{5. $C^0$-continuous:}\quad &
+  f_5(\dvec x) = \exp(-\dvec c\cdot |\dvec x - \dvec w|)\,, \\[2ex]
+\text{6. Discontinuous:} &
+  f_6(\dvec x) = \begin{cases}
+    0 & \text{for }x_1 > w_1 \vee x_2 > w_2\,, \\
+    \exp(\dvec c\cdot\dvec x) & \text{otherwise}.
+  \end{cases}
+\end{array}
+\end{equation}
+Parameters designated by $w$ are non-affective, they vary \eg the 
+location of peaks, but should in principle not affect the difficulty of 
+the integral.  Parameters designated by $c$ are affective and in a sense
+``define'' the difficulty of the integral, \eg the width of peaks are of
+this kind.  The $c_i$ are positive and the difficulty increases with
+$\norm{\dvec c} = \sum_{i = 1}^{n_d} c_i$.
+
+The testing procedure is thus: Choose uniform random numbers from
+$[0,1)$ for the $c_i$ and $w_i$.  Renormalize $\dvec c$ for a given
+difficulty.  Run the algorithms with the integrands thus determined. 
+Repeat this procedure 20 times and take the average.
+
+For comparison, Mathematica's \Code{NIntegrate} function was included
+in the test.  Unfortunately, when a maximum number of samples is
+prescribed, \Code{NIntegrate} invariably uses non-adaptive methods, by
+default the Halton--Hammersley--Wozniakowski quasi-Monte Carlo
+algorithm.  The comparison may thus seem not quite balanced, but this is
+not entirely true: Lacking an upper bound on the number of integrand
+evaluations, \Code{NIntegrate}'s adaptive method in some cases `locks
+up' (spends an inordinate amount of time and samples) and the user can
+at most abort a running calculation, but not extract a preliminary
+result.  The adaptive method could reasonably be used only for some of
+the integrand families in the test, and it was felt that such a
+selection should not be done, as the comparisons should in the first
+place give an idea about the \emph{average} performance of the
+integration methods, without any fine-tuning.
+
+Table \ref{tab:comp} gives the results of the tests as described above. 
+This comparison chart should be interpreted with care, however, and
+serves only as a rough measure of the performance of the integration
+methods.  Many integrands appearing in actual calculations bear few or
+no similarities with the integrand families tested here, and neither
+have the integration parameters been tuned to `get the most' out of each
+method.
+
+The Mathematica code of the test suite is included in the downloadable 
+\cuba\ package.
+
+\begin{table}
+$$
+\begin{array}{|c|r@{\,\pm\,}r|r@{\,\pm\,}r|r@{\,\pm\,}r
+                |r@{\,\pm\,}r|r@{\,\pm\,}r|}
+\multicolumn{11}{c}{n_d = 5} \\ \hline
+j &
+\multicolumn{2}{|c|}{\text{Vegas}} &
+\multicolumn{2}{|c|}{\text{Suave}} &
+\multicolumn{2}{|c|}{\text{Divonne}} &
+\multicolumn{2}{|c|}{\text{Cuhre}} &
+\multicolumn{2}{|c|}{\text{NIntegrate}} \\ \hline
+1 & 162000 &     0 &
+    127300 & 32371 &
+     21313 & 11039 &
+       819 &     0 &
+    218281 &     0 \\
+2 &  11750 &  1795 &
+     13500 &  1539 &
+     17353 &  3743 &
+     56238 & 40917 &
+    218281 &     0 \\
+3 &  16125 &  2411 &
+     11500 &  1000 &
+     17208 &  2517 &
+      1174 &   444 &
+    218281 &     0 \\
+4 &  56975 & 11372 &
+     20100 &  4745 &
+     19636 &  6159 &
+     22577 & 31424 &
+    218281 &     0 \\
+5 &  14600 &  3085 &
+     15250 &  2337 &
+     21675 &  4697 &
+    150423 &     0 &
+    218281 &     0 \\
+6 &  19750 &  4999 &
+     23850 &  2700 &
+     39694 & 14001 &
+      1884 &   215 &
+    218281 &     0 \\ \hline
+\multicolumn{11}{c}{} \\
+\multicolumn{11}{c}{n_d = 8} \\ \hline
+j &
+\multicolumn{2}{|c|}{\text{Vegas}} &
+\multicolumn{2}{|c|}{\text{Suave}} &
+\multicolumn{2}{|c|}{\text{Divonne}} &
+\multicolumn{2}{|c|}{\text{Cuhre}} &
+\multicolumn{2}{|c|}{\text{NIntegrate}} \\ \hline
+1 & 153325 & 20274 &
+    124350 & 35467 &
+     28463 & 31646 &
+      3315 &     0 &
+    212939 & 13557 \\
+2 &  12650 &  1987 &
+     21050 &  4594 &
+     22030 &  3041 &
+     91826 & 58513 &
+    218281 &     0 \\
+3 &  24325 &  3753 &
+     29350 &  3588 & 
+     67104 & 16906 & 
+     18785 & 22354 &
+    218281 &     0 \\
+4 &  38575 & 16169 & 
+     29250 &  8873 &
+     24849 &  5015 &
+     62322 & 44328 &
+    218281 &     0 \\
+5 &  15150 &  2616 &
+     25500 &  6444 &
+     32885 &  5945 &
+    151385 &     0 &
+    218281 &     0 \\
+6 &  18875 &  2512 &
+     40900 &  7196 &
+    116744 & 32533 &    
+      9724 &  9151 &
+    218281 &     0 \\ \hline
+\multicolumn{11}{c}{} \\
+\multicolumn{11}{c}{n_d = 10} \\ \hline
+j &
+\multicolumn{2}{|c|}{\text{Vegas}} &
+\multicolumn{2}{|c|}{\text{Suave}} &
+\multicolumn{2}{|c|}{\text{Divonne}} &
+\multicolumn{2}{|c|}{\text{Cuhre}} &
+\multicolumn{2}{|c|}{\text{NIntegrate}} \\ \hline
+1 & 156050 & 21549 & 
+    129800 & 30595 & 
+     32176 & 30424 & 
+      7815 &     0 &
+    214596 & 16481 \\
+2 &  14175 &  2672 &
+     24800 &  5464 &
+     25684 &  7582 &
+    144056 & 25983 &
+    218281 &     0 \\
+3 &  30275 &  6296 &
+     51150 & 15608 & 
+    139737 & 18505 & 
+    109150 & 58224 &
+    218281 &     0 \\
+4 &  29475 & 10277 &
+     34050 & 10200 & 
+     27385 &  8498 &
+    105763 & 49789 & 
+    218281 &     0 \\
+5 &  16150 &  2791 &
+     31400 &  7715 &
+     44393 & 18654 & 
+    153695 &     0 & 
+    218281 &     0 \\
+6 &  22100 &  3085 &
+     74900 & 32203 &
+    136508 & 17067 & 
+     73200 & 64621 &
+    218281 &     0 \\ \hline
+\end{array}
+$$
+Test parameters:
+\begin{itemize}
+\item number of dimensions: $n_d = 5, 8, 10$,
+\item requested relative accuracy: $\epsrel = 10^{-3}$,
+\item maximum number of samples: $\nmax = 150000$,
+\item integrand difficulties:
+$
+\begin{array}{r||c|c|c|c|c|c}
+\text{Integrand family }j &  1  &  2   &  3  &  4   &  5   &  6  \\ 
+\hline
+\norm{\dvec c_j}          & 6.0 & 18.0 & 2.2 & 15.2 & 16.1 & 16.4
+\end{array}
+$
+\end{itemize}
+
+\caption{\label{tab:comp}The number of samples used, averaged from 20
+randomly chosen integrands from each integrand family $j$ defined in
+Eq.~(\ref{eq:families}).  Values in the vicinity of $\nmax$ generally
+indicate failure to converge. \Code{NIntegrate} seems not to be able
+to stop at around the limit of \Code{MaxPoints -> $\nmax$}, but always
+samples considerably more points.}
+\end{table}
+
+%========================================================================
+
+\section{Summary}
+
+The \cuba\ library offers a choice of four independent routines for
+multidimensional numerical integration: Vegas, Suave, Divonne, and
+Cuhre.  They work by very different methods, summarized in the following
+table:
+\begin{center}
+\begin{small}
+\begin{tabular}{llll}
+Routine  &
+	Basic integration method &
+	Algorithm type &
+	Variance reduction \\ \hline \\[-1.5ex]
+Vegas &
+	Sobol quasi-random sample &
+	Monte Carlo &
+	importance sampling \\
+&
+	\textit{or} pseudo-random sample &
+	Monte Carlo \\[1.5ex]
+Suave &
+	Sobol quasi-random sample &
+	Monte Carlo &
+	globally adaptive subdivision \\
+&
+	\textit{or} pseudo-random sample &
+	Monte Carlo \\[1.5ex]
+Divonne &
+	Korobov quasi-random sample &
+	Monte Carlo &
+	stratified sampling, \\
+&
+	\textit{or} Sobol quasi-random sample &
+	Monte Carlo &
+	\quad aided by methods from \\
+&
+	\textit{or} pseudo-random sample &
+	Monte Carlo &
+	\quad numerical optimization \\
+&
+	\textit{or} cubature rules &
+	deterministic \\[1.5ex]
+Cuhre &
+	cubature rules &
+	deterministic &
+	globally adaptive subdivision
+\end{tabular}
+\end{small}
+\end{center}
+
+All four have a C/C++, Fortran, and Mathematica interface and can
+integrate vector integrands.  Their invocation is very similar, so it is
+easy to substitute one method by another for cross-checking.  For
+further safeguarding, the output is supplemented by a $\chi^2$
+probability which quantifies the reliability of the error estimate.
+
+The source code is available from \Code{http://feynarts.de/cuba}
+and compiles with gcc, the GNU C compiler.  The C functions can be
+called from Fortran directly, so there is no need for adapter code. 
+Similarly, linking Fortran code with the library is straightforward
+and requires no extra tools.
+
+The routines in the \cuba\ library have all been carefully tested, but
+it would of course be folly to believe they are completely error-free. 
+The author welcomes any kind of feedback, in particular bug and 
+performance reports, at hahn@feynarts.de.
+
+%========================================================================
+
+\section*{Acknowledgements}
+
+I thank A.~Hoang for involving me in a discussion out of which the 
+concept of the Mathematica interface was born and T.~Fritzsche, 
+M.~Rauch, and A.M.~de~la~Ossa for testing.  B.~Chokoufe implemented
+check-pointing (state file) for Suave, Divonne, and Cuhre.
+
+%========================================================================
+
+\begin{appendix}
+
+\section{Shared Memory in Fortran}
+\label{app:shm}
+
+IPC shared memory is not natively available in Fortran, but it is not 
+difficult to make it available using two small C functions 
+\Code{shmalloc} and \Code{shmfree}:
+\begin{verbatim}
+#include <sys/shm.h>
+#include <assert.h>
+
+typedef long long int memindex;
+typedef struct { void *addr; int id; } shminfo;
+
+void shmalloc_(shminfo *base, memindex *i, const int *n, const int *size) {
+  base->id = shmget(IPC_PRIVATE, *size*(*n + 1) - 1, IPC_CREAT | 0600);
+  assert(base->id != -1);
+  base->addr = shmat(base->id, NULL, 0);
+  assert(base->addr != (void *)-1);
+  *i = ((char *)(base->addr + *size - 1) - (char *)base)/(long)*size;
+}
+
+void shmfree_(shminfo *base) {
+  shmdt(base->addr);
+  shmctl(base->id, IPC_RMID, NULL);
+}
+\end{verbatim}
+The function \Code{shmalloc} allocates (suitably aligned) \Code{n} 
+elements of size \Code{size} and returns a mock index into \Code{base}, 
+through which the memory is addressed in Fortran.  The array \Code{base} 
+must be of the desired type and large enough to store the struct 
+\Code{shminfo}, \eg two doubles wide.  Be careful to invoke 
+\Code{shmfree} after use, for the memory will not automatically be freed 
+upon exit but stay allocated until the next reboot (or explicit removal 
+with \Code{ipcs}).
+
+The following test program demonstrates how to use \Code{shmalloc} and 
+\Code{shmfree}:
+\begin{verbatim}
+     program test
+     implicit none
+     integer*8 i
+     double precision base(2)
+
+     call shmalloc(base, i, 100, 8)     ! allocate 100 doubles
+
+     base(i) = 1                        ! now use the memory
+     ...
+     base(i+99) = 100
+
+     call shmfree(base)                 ! don't forget to free it
+     end
+\end{verbatim}
+
+\end{appendix}
+
+%========================================================================
+
+\begin{thebibliography}{99}
+
+\newcommand{\volyearpage}[3]{\textbf{#1} (#2) #3}
+\newcommand{\cpc}{\textsl{Comp.\ Phys.\ Commun.} \volyearpage}
+\newcommand{\jpc}{\textsl{J.\ Comp.\ Phys.} \volyearpage}
+\newcommand{\cip}{\textsl{Comp.\ in Phys.} \volyearpage}
+\newcommand{\toms}{\textsl{ACM Trans.\ Math.\ Software} \volyearpage}
+\newcommand{\tomacs}{\textsl{ACM Trans.\ Modeling Comp.\ Simulation} \volyearpage}
+\newcommand{\siam}{\textsl{SIAM J.\ Numer.\ Anal.} \volyearpage}
+\newcommand{\numa}{\textsl{Numer.\ Math.} \volyearpage}
+
+\bibitem{quadpack}
+R.~Piessens, E.~de~Doncker, C.~\"Uberhuber, D.~Kahaner,
+\textsc{Quadpack} -- a subroutine package for automatic integration,
+Springer-Verlag, 1983.
+
+\bibitem{Vegas1}
+G.P.~Lepage, \jpc{27}{1978}{192}.
+
+\bibitem{Vegas2}
+G.P.~Lepage, Report CLNS-80/447, Cornell Univ., Ithaca, N.Y., 1980.
+
+\bibitem{Miser}
+W.H.~Press, G.R.~Farrar, \cip{4}{1990}{190}.
+
+\bibitem{Divonne}
+J.H.~Friedman, M.H.~Wright, \toms{7}{1981}{76}; \\
+J.H.~Friedman, M.H.~Wright, SLAC Report CGTM-193-REV, CGTM-193, 1981.
+
+\bibitem{dcuhre}
+J.~Berntsen, T.~Espelid, A.~Genz, \toms{17}{1991}{437}; \\
+J.~Berntsen, T.~Espelid, A.~Genz, \toms{17}{1991}{452}; \\
+TOMS algorithm 698.
+
+\bibitem{Sobol}
+P.~Bratley, B.L.~Fox, \toms{14}{1988}{88}; \\
+TOMS algorithm 659.
+
+\bibitem{Niederreiter}
+H.~Niederreiter, Random number generation and quasi-Monte Carlo methods,
+SIAM, 1992.
+
+\bibitem{NumRecipes}
+W.H.~Press, S.A.~Teukolsky, W.T.~Vetterling, B.P.~Flannery, Numerical 
+recipes in Fortran, 2$^{\text{nd}}$ edition, Cambridge University Press, 
+1992.
+
+\bibitem{Korobov}
+N.M.~Korobov, Number theoretic methods in approximate analysis
+(in Russian), Fizmatgiz, Moscow, 1963.
+
+A comprehensive English reference on the topic of good lattice points
+(of which the Korobov points are a special case) is H.L.~Keng, W.~Yuan,
+Applications of number theory to numerical analysis, Springer-Verlag,
+1981.
+
+\bibitem{MersenneTwister}
+M.~Matsumoto, T.~Nishimura, \tomacs{8}{1998}{3}. \\
+See also 
+\Code{http://www.math.sci.hiroshima-u.ac.jp/$\sim$m-mat/MT/emt.html}.
+
+\bibitem{Ranlux}
+M.~L\"uscher, \cpc{79}{1994}{100}; \\
+F.~James, \cpc{79}{1994}{111}.
+
+\bibitem{GenzMalik}
+A.~Genz, A.~Malik, \siam{20}{1983}{580}.
+
+\bibitem{Genz}
+A.~Genz, A package for testing multiple integration subroutines, in: 
+P.~Keast, G.~Fairweather (eds.), Numerical Integration, Kluwer,
+Dordrecht, 1986.
+
+\end{thebibliography}
+
+\end{document}
+
diff --git a/Cuba/demo/cuba.F b/Cuba/demo/cuba.F
new file mode 100644
index 0000000000000000000000000000000000000000..a227d4fe8f8844bc66c11ce08dd407bb633c3302
--- /dev/null
+++ b/Cuba/demo/cuba.F
@@ -0,0 +1,104 @@
+* cuba.F
+* Fortran chooser for the Cuba routines
+* last modified 3 Feb 05 th
+
+#define VEGAS 1
+#define SUAVE 2
+#define DIVONNE 3
+#define CUHRE 4
+
+
+	subroutine Cuba(method, ndim, ncomp, integrand,
+     &    integral, error, prob)
+	implicit none
+	integer method, ndim, ncomp
+	external integrand
+	double precision integral(*), error(*), prob(*)
+
+	character*7 name(4)
+	data name /"Vegas", "Suave", "Divonne", "Cuhre"/
+
+	integer mineval, maxeval, verbose, last
+	double precision epsrel, epsabs
+	parameter (epsrel = 1D-3)
+	parameter (epsabs = 1D-12)
+	parameter (verbose = 2)
+	parameter (last = 4)
+	parameter (mineval = 0)
+	parameter (maxeval = 50000)
+
+	integer nstart, nincrease
+	parameter (nstart = 1000)
+	parameter (nincrease = 500)
+
+	integer nnew
+	double precision flatness
+	parameter (nnew = 1000)
+	parameter (flatness = 25D0)
+
+	integer key1, key2, key3, maxpass
+	double precision border, maxchisq, mindeviation
+	integer ngiven, ldxgiven, nextra
+	parameter (key1 = 47)
+	parameter (key2 = 1)
+	parameter (key3 = 1)
+	parameter (maxpass = 5)
+	parameter (border = 0D0)
+	parameter (maxchisq = 10D0)
+	parameter (mindeviation = .25D0)
+	parameter (ngiven = 0)
+	parameter (ldxgiven = ndim)
+	parameter (nextra = 0)
+
+	integer key
+	parameter (key = 0)
+
+	integer nregions, neval, fail
+
+
+	if( method .eq. VEGAS ) then
+
+	  call vegas(ndim, ncomp, integrand,
+     &      epsrel, epsabs, verbose, mineval, maxeval,
+     &      nstart, nincrease,
+     &      neval, fail, integral, error, prob)
+	  nregions = 1
+
+	else if( method .eq. SUAVE ) then
+
+	  call suave(ndim, ncomp, integrand,
+     &      epsrel, epsabs, verbose + last, mineval, maxeval,
+     &      nnew, flatness,
+     &      nregions, neval, fail, integral, error, prob)
+
+	else if( method .eq. DIVONNE ) then
+
+	  call divonne(ndim, ncomp, integrand,
+     &      epsrel, epsabs, verbose, mineval, maxeval,
+     &      key1, key2, key3, maxpass,
+     &      border, maxchisq, mindeviation,
+     &      ngiven, ldxgiven, 0, nextra, 0,
+     &      nregions, neval, fail, integral, error, prob)
+
+	else if( method .eq. CUHRE ) then
+
+	  call cuhre(ndim, ncomp, integrand,
+     &      epsrel, epsabs, verbose + last, mineval, maxeval,
+     &      key,
+     &      nregions, neval, fail, integral, error, prob)
+
+	else
+
+	  print *, "invalid method ", method
+	  return
+
+	endif
+
+	print *, "method   =", name(method)
+	print *, "nregions =", nregions
+	print *, "neval    =", neval
+	print *, "fail     =", fail
+	print '(G20.12," +- ",G20.12,"   p = ",F8.3)',
+     &    (integral(c), error(c), prob(c), c = 1, ncomp)
+	end
+
diff --git a/Cuba/demo/demo-c.c b/Cuba/demo/demo-c.c
new file mode 100755
index 0000000000000000000000000000000000000000..79f49eca52eaf430193c82c9a6c3610817752c5e
--- /dev/null
+++ b/Cuba/demo/demo-c.c
@@ -0,0 +1,176 @@
+/*
+	demo-c.c
+		test program for the Cuba library
+		last modified 13 Mar 15 th
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#if REALSIZE == 16
+#include "cubaq.h"
+#elif REALSIZE == 10
+#include "cubal.h"
+#else
+#include "cuba.h"
+#endif
+
+
+static inline cubareal Sq(cubareal x) {
+  return x*x;
+}
+
+
+static int Integrand(const int *ndim, const cubareal xx[],
+  const int *ncomp, cubareal ff[], void *userdata) {
+
+#define x xx[0]
+#define y xx[1]
+#define z xx[2]
+#define f ff[0]
+
+#ifndef FUN
+#define FUN 1
+#endif
+
+#define rsq (Sq(x) + Sq(y) + Sq(z))
+
+#if FUN == 1
+  f = sin(x)*cos(y)*exp(z);
+#elif FUN == 2
+  f = 1/(Sq(x + y) + .003)*cos(y)*exp(z);
+#elif FUN == 3
+  f = 1/(3.75 - cos(M_PI*x) - cos(M_PI*y) - cos(M_PI*z));
+#elif FUN == 4
+  f = fabs(rsq - .125);
+#elif FUN == 5
+  f = exp(-rsq);
+#elif FUN == 6
+  f = 1/(1 - x*y*z + 1e-10);
+#elif FUN == 7
+  f = sqrt(fabs(x - y - z));
+#elif FUN == 8
+  f = exp(-x*y*z);
+#elif FUN == 9
+  f = Sq(x)/(cos(x + y + z + 1) + 5);
+#elif FUN == 10
+  f = (x > .5) ? 1/sqrt(x*y*z + 1e-5) : sqrt(x*y*z);
+#else
+  f = (rsq < 1) ? 1 : 0;
+#endif
+
+  return 0;
+}
+
+/*********************************************************************/
+
+#define NDIM 3
+#define NCOMP 1
+#define USERDATA NULL
+#define NVEC 1
+#define EPSREL 1e-3
+#define EPSABS 1e-12
+#define VERBOSE 2
+#define LAST 4
+#define SEED 0
+#define MINEVAL 0
+#define MAXEVAL 50000
+
+#define NSTART 1000
+#define NINCREASE 500
+#define NBATCH 1000
+#define GRIDNO 0
+#define STATEFILE NULL
+#define SPIN NULL
+
+#define NNEW 1000
+#define NMIN 2
+#define FLATNESS 25.
+
+#define KEY1 47
+#define KEY2 1
+#define KEY3 1
+#define MAXPASS 5
+#define BORDER 0.
+#define MAXCHISQ 10.
+#define MINDEVIATION .25
+#define NGIVEN 0
+#define LDXGIVEN NDIM
+#define NEXTRA 0
+
+#define KEY 0
+
+int main() {
+  int comp, nregions, neval, fail;
+  cubareal integral[NCOMP], error[NCOMP], prob[NCOMP];
+
+#if 1
+  printf("-------------------- Vegas test --------------------\n");
+
+  Vegas(NDIM, NCOMP, Integrand, USERDATA, NVEC,
+    EPSREL, EPSABS, VERBOSE, SEED,
+    MINEVAL, MAXEVAL, NSTART, NINCREASE, NBATCH,
+    GRIDNO, STATEFILE, SPIN,
+    &neval, &fail, integral, error, prob);
+
+  printf("VEGAS RESULT:\tneval %d\tfail %d\n",
+    neval, fail);
+  for( comp = 0; comp < NCOMP; ++comp )
+    printf("VEGAS RESULT:\t%.8f +- %.8f\tp = %.3f\n",
+      (double)integral[comp], (double)error[comp], (double)prob[comp]);
+#endif
+
+#if 1
+  printf("\n-------------------- Suave test --------------------\n");
+
+  Suave(NDIM, NCOMP, Integrand, USERDATA, NVEC,
+    EPSREL, EPSABS, VERBOSE | LAST, SEED,
+    MINEVAL, MAXEVAL, NNEW, NMIN, FLATNESS,
+    STATEFILE, SPIN,
+    &nregions, &neval, &fail, integral, error, prob);
+
+  printf("SUAVE RESULT:\tnregions %d\tneval %d\tfail %d\n",
+    nregions, neval, fail);
+  for( comp = 0; comp < NCOMP; ++comp )
+    printf("SUAVE RESULT:\t%.8f +- %.8f\tp = %.3f\n",
+      (double)integral[comp], (double)error[comp], (double)prob[comp]);
+#endif
+
+#if 1
+  printf("\n------------------- Divonne test -------------------\n");
+
+  Divonne(NDIM, NCOMP, Integrand, USERDATA, NVEC,
+    EPSREL, EPSABS, VERBOSE, SEED,
+    MINEVAL, MAXEVAL, KEY1, KEY2, KEY3, MAXPASS,
+    BORDER, MAXCHISQ, MINDEVIATION,
+    NGIVEN, LDXGIVEN, NULL, NEXTRA, NULL,
+    STATEFILE, SPIN,
+    &nregions, &neval, &fail, integral, error, prob);
+
+  printf("DIVONNE RESULT:\tnregions %d\tneval %d\tfail %d\n",
+    nregions, neval, fail);
+  for( comp = 0; comp < NCOMP; ++comp )
+    printf("DIVONNE RESULT:\t%.8f +- %.8f\tp = %.3f\n",
+      (double)integral[comp], (double)error[comp], (double)prob[comp]);
+#endif
+
+#if 1
+  printf("\n-------------------- Cuhre test --------------------\n");
+
+  Cuhre(NDIM, NCOMP, Integrand, USERDATA, NVEC,
+    EPSREL, EPSABS, VERBOSE | LAST,
+    MINEVAL, MAXEVAL, KEY,
+    STATEFILE, SPIN,
+    &nregions, &neval, &fail, integral, error, prob);
+
+  printf("CUHRE RESULT:\tnregions %d\tneval %d\tfail %d\n",
+    nregions, neval, fail);
+  for( comp = 0; comp < NCOMP; ++comp )
+    printf("CUHRE RESULT:\t%.8f +- %.8f\tp = %.3f\n",
+      (double)integral[comp], (double)error[comp], (double)prob[comp]);
+#endif
+
+  return 0;
+}
+
diff --git a/Cuba/demo/demo-c.out b/Cuba/demo/demo-c.out
new file mode 100644
index 0000000000000000000000000000000000000000..531971d3291caf4c01b574e118c82685aadef9b1
--- /dev/null
+++ b/Cuba/demo/demo-c.out
@@ -0,0 +1,8 @@
+VEGAS RESULT:	neval 10000	fail 0
+VEGAS RESULT:	0.66481073 +- 0.00049218	p = 0.089
+SUAVE RESULT:	nregions 7	neval 7000	fail 0
+SUAVE RESULT:	0.66444529 +- 0.00056577	p = 0.210
+DIVONNE RESULT:	nregions 14	neval 3052	fail 0
+DIVONNE RESULT:	0.66461951 +- 0.00063503	p = 0.000
+CUHRE RESULT:	nregions 2	neval 381	fail 0
+CUHRE RESULT:	0.66466968 +- 0.00000000	p = 0.000
diff --git a/Cuba/demo/demo-fortran.F b/Cuba/demo/demo-fortran.F
new file mode 100755
index 0000000000000000000000000000000000000000..8a6ac735e9e5938d4fd7033d63045e658c57625f
--- /dev/null
+++ b/Cuba/demo/demo-fortran.F
@@ -0,0 +1,187 @@
+* demo-fortran.F
+* test program for the Cuba library
+* last modified 13 Mar 15 th
+
+#define cubareal real*REALSIZE
+
+
+	program CubaTest
+	implicit none
+
+	integer ndim, ncomp, nvec, last, seed, mineval, maxeval
+	cubareal epsrel, epsabs, userdata
+	parameter (ndim = 3)
+	parameter (ncomp = 1)
+	parameter (userdata = 0)
+	parameter (nvec = 1)
+	parameter (epsrel = 1D-3)
+	parameter (epsabs = 1D-12)
+	parameter (last = 4)
+	parameter (seed = 0)
+	parameter (mineval = 0)
+	parameter (maxeval = 50000)
+
+	integer nstart, nincrease, nbatch, gridno
+	integer*8 spin
+	character*(*) statefile	
+	parameter (nstart = 1000)
+	parameter (nincrease = 500)
+	parameter (nbatch = 1000)
+	parameter (gridno = 0)
+	parameter (statefile = "")
+	parameter (spin = -1)
+
+	integer nnew, nmin
+	cubareal flatness
+	parameter (nnew = 1000)
+	parameter (nmin = 2)
+	parameter (flatness = 25D0)
+
+	integer key1, key2, key3, maxpass
+	cubareal border, maxchisq, mindeviation
+	integer ngiven, ldxgiven, nextra
+	parameter (key1 = 47)
+	parameter (key2 = 1)
+	parameter (key3 = 1)
+	parameter (maxpass = 5)
+	parameter (border = 0D0)
+	parameter (maxchisq = 10D0)
+	parameter (mindeviation = .25D0)
+	parameter (ngiven = 0)
+	parameter (ldxgiven = ndim)
+	parameter (nextra = 0)
+
+	integer key
+	parameter (key = 0)
+
+	external integrand
+
+	cubareal integral(ncomp), error(ncomp), prob(ncomp)
+	integer verbose, nregions, neval, fail
+	character*16 env
+
+	integer c
+
+	call getenv("CUBAVERBOSE", env)
+	verbose = 2
+	read(env, *, iostat=fail, end=999, err=999) verbose
+999	continue
+
+	print *, "-------------------- Vegas test --------------------"
+
+	call vegas(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, verbose, seed,
+     &    mineval, maxeval, nstart, nincrease, nbatch,
+     &    gridno, statefile, spin,
+     &    neval, fail, integral, error, prob)
+
+	print *, "neval    =", neval
+	print *, "fail     =", fail
+	print '(F20.12," +- ",F20.12,"   p = ",F8.3)',
+     &    (integral(c), error(c), prob(c), c = 1, ncomp)
+
+	print *, " "
+	print *, "-------------------- Suave test --------------------"
+
+	call suave(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, verbose + last, seed,
+     &    mineval, maxeval, nnew, nmin, flatness,
+     &    statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+
+	print *, "nregions =", nregions
+	print *, "neval    =", neval
+	print *, "fail     =", fail
+	print '(F20.12," +- ",F20.12,"   p = ",F8.3)',
+     &    (integral(c), error(c), prob(c), c = 1, ncomp)
+
+	print *, " "
+	print *, "------------------- Divonne test -------------------"
+
+	call divonne(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, verbose, seed,
+     &    mineval, maxeval, key1, key2, key3, maxpass,
+     &    border, maxchisq, mindeviation,
+     &    ngiven, ldxgiven, 0, nextra, 0,
+     &    statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+
+	print *, "nregions =", nregions
+	print *, "neval    =", neval
+	print *, "fail     =", fail
+	print '(F20.12," +- ",F20.12,"   p = ",F8.3)',
+     &    (integral(c), error(c), prob(c), c = 1, ncomp)
+
+	print *, " "
+	print *, "-------------------- Cuhre test --------------------"
+
+	call cuhre(ndim, ncomp, integrand, userdata, nvec,
+     &    epsrel, epsabs, verbose + last,
+     &    mineval, maxeval, key,
+     &    statefile, spin,
+     &    nregions, neval, fail, integral, error, prob)
+
+	print *, "nregions =", nregions
+	print *, "neval    =", neval
+	print *, "fail     =", fail
+	print '(F20.12," +- ",F20.12,"   p = ",F8.3)',
+     &    (integral(c), error(c), prob(c), c = 1, ncomp)
+	end
+
+
+************************************************************************
+
+	integer function integrand(ndim, xx, ncomp, ff)
+	implicit none
+	integer ndim, ncomp
+	cubareal xx(*), ff(*)
+
+#define x xx(1)
+#define y xx(2)
+#define z xx(3)
+#define f ff(1)
+
+#ifndef FUN
+#define FUN 1
+#endif
+
+	cubareal pi, rsq
+	parameter (pi = 3.14159265358979323846D0)
+
+	rsq = x**2 + y**2 + z**2
+
+#if FUN == 1
+	f = sin(x)*cos(y)*exp(z)
+#elif FUN == 2
+	f = 1/((x + y)**2 + .003D0)*cos(y)*exp(z)
+#elif FUN == 3
+	f = 1/(3.75D0 - cos(pi*x) - cos(pi*y) - cos(pi*z))
+#elif FUN == 4
+	f = abs(rsq - .125D0)
+#elif FUN == 5
+	f = exp(-rsq)
+#elif FUN == 6
+	f = 1/(1 - x*y*z + 1D-10)
+#elif FUN == 7
+	f = sqrt(abs(x - y - z))
+#elif FUN == 8
+	f = exp(-x*y*z)
+#elif FUN == 9
+	f = x**2/(cos(x + y + z + 1) + 5)
+#elif FUN == 10
+	if( x .gt. .5D0 ) then
+	  f = 1/sqrt(x*y*z + 1D-5)
+	else
+	  f = sqrt(x*y*z)
+	endif
+#else
+	if( rsq .lt. 1 ) then
+	  f = 1
+	else
+	  f = 0
+	endif
+#endif
+
+	integrand = 0
+	end
+
diff --git a/Cuba/demo/demo-math.m b/Cuba/demo/demo-math.m
new file mode 100644
index 0000000000000000000000000000000000000000..2fe5a3d468dcda5c412d36c8ea8c325b784f8917
--- /dev/null
+++ b/Cuba/demo/demo-math.m
@@ -0,0 +1,36 @@
+Install["Vegas"]
+
+Install["Suave"]
+
+Install["Divonne"]
+
+Install["Cuhre"]
+
+
+test[n_] := {t[n, Vegas], t[n, Suave], t[n, Divonne], t[n, Cuhre]}
+
+t[n_, int_] := int[f[n][x, y, z], {x,0,1}, {y,0,1}, {z,0,1}]
+
+
+f[1][x_, y_, z_] := Sin[x] Cos[y] Exp[z]
+
+f[2][x_, y_, z_] := 1/((x + y)^2 + .003) Cos[y] Exp[z]
+
+f[3][x_, y_, z_] := 1/(3.75 - Cos[Pi x] - Cos[Pi y] - Cos[Pi z])
+
+f[4][x_, y_, z_] := Abs[x^2 + y^2 + z^2 - .125]
+
+f[5][x_, y_, z_] := Exp[-x^2 - y^2 - z^2]
+
+f[6][x_, y_, z_] := 1/(1 - x y z + 10^-10)
+
+f[7][x_, y_, z_] := Sqrt[Abs[x - y - z]]
+
+f[8][x_, y_, z_] := Exp[-x y z]
+
+f[9][x_, y_, z_] := x^2/(Cos[x + y + z + 1] + 5)
+
+f[10][x_, y_, z_] := If[ x > .5, 1/Sqrt[x y z + 10^-5], Sqrt[x y z] ]
+
+f[11][x_, y_, z_] := If[ x^2 + y^2 + z^2 < 1, 1, 0 ]
+
diff --git a/Cuba/demo/testsuite.m b/Cuba/demo/testsuite.m
new file mode 100644
index 0000000000000000000000000000000000000000..9804b033a9d7ecde1db152979923344be63b497c
--- /dev/null
+++ b/Cuba/demo/testsuite.m
@@ -0,0 +1,133 @@
+(* Test suite of Genz, used also by Sloan and Joe, and Novak and Ritter *)
+
+seed = 4711
+
+maxpoints = 150000
+
+repeat = 20
+
+
+(* Family 1: Oscillatory *)
+
+f[1][x_, c_, w_] := Cos[2 Pi w[[1]] + c.x]
+
+
+(* Family 2: Product peak *)
+
+f[2][x_, c_, w_] := Times@@ MapThread[f2a, {x, c, w}]
+
+f2a[xi_, ci_, wi_] := 1/(ci^-2 + (xi - wi)^2)
+
+
+(* Family 3: Corner peak *)
+
+f[3][x_, c_, w_] := (1 + c.x)^(-(Length[x] + 1))
+
+
+(* Family 4: Gaussian *)
+
+f[4][x_, c_, w_] := Exp[Plus@@ MapThread[f4a, {x, c, w}]]
+
+f4a[xi_, ci_, wi_] := -ci^2 (xi - wi)^2
+
+
+(* Family 5: Exponential *)
+
+f[5][x_, c_, w_] := Exp[Plus@@ MapThread[f5a, {x, c, w}]]
+
+f5a[xi_, ci_, wi_] := -ci Abs[xi - wi]
+
+
+(* Family 6: Discontinuous *)
+
+f[6][x_, c_, w_] := 0 /; x[[1]] > w[[1]] || x[[2]] > w[[2]]
+
+f[6][x_, c_, w_] := Exp[c.x]
+
+
+(* Novak & Ritter use
+difficulty[fam_] := {9.00, 7.25, 1.85, 7.03, 2.04, 4.30}[[fam]]
+*)
+
+(* Sloan & Joe use
+scale[dim_] := dim^Min[Max[.2 dim, 1], 2]
+
+SetOptions[Interpolation, InterpolationOrder -> 2]
+
+ifun[1] = Interpolation[{{5, 145.7}, {8, 354.0}, {10,  900.0}}];
+ifun[2] = Interpolation[{{5, 261.0}, {8, 545.0}, {10, 1760.0}}];
+ifun[3] = Interpolation[{{5, 433.0}, {8, 193.0}, {10,  185.0}}];
+ifun[4] = Interpolation[{{5, 155.0}, {8, 382.0}, {10, 1230.0}}];
+ifun[5] = Interpolation[{{5, 217.0}, {8, 674.0}, {10, 2040.0}}];
+ifun[6] = Interpolation[{{5,  90.0}, {8, 240.0}, {10, 1470.0}}];
+
+difficulty[fam_] := ifun[fam][ndim]/scale[ndim]
+*)
+
+difficulty[fam_] := {6.0, 18.0, 2.2, 15.2, 16.1, 16.4}[[fam]]
+
+c[fam_] := Block[{r = w}, r difficulty[fam]/Plus@@ r]
+
+
+Install["Vegas"]
+
+Install["Suave"]
+
+Install["Divonne"]
+
+Install["Cuhre"]
+
+
+
+SetAll[opt__] := (
+  SetOptions[Vegas, opt];
+  SetOptions[Suave, opt];
+  SetOptions[Divonne, opt];
+  SetOptions[Cuhre, opt];
+  SetOptions[NIntegrate, opt];
+)
+
+SetAll[PrecisionGoal -> 3, MaxPoints -> maxpoints]
+
+SetOptions[Divonne, Key1 -> -200]
+
+
+def[f_][{x__}][{r__}] := (
+  Attributes[idef] = {HoldAll};
+  idef[int_, NIntegrate] := (
+    int := Module[{count = 0, res},
+             res = NIntegrate[f, r, EvaluationMonitor :> (++count)];
+             {count, res}]
+  ) /; $VersionNumber >= 5;
+  idef[int_, Int_] := (
+    int := Module[{count = 0, res},
+             res = Int[(++count; f), r];
+             {count, res}]
+  );
+  idef[vegas, Vegas];
+  idef[suave, Suave];
+  idef[divonne, Divonne];
+  idef[cuhre, Cuhre];
+  idef[nint, NIntegrate];
+)
+
+vars = Table[Unique["x"], {20}]
+
+test[ndim_, fam_] :=
+Block[ {w, xs = Take[vars, ndim]},
+  w := Table[Random[], {ndim}];
+  def[f[fam][xs, c[fam], w]][xs][{#, 0, 1}&/@ xs];
+  {vegas, suave, divonne, cuhre, nint}
+]
+
+
+dotest[ndim_, from_:1, to_:6] :=
+Block[ {dir = ToString[ndim]},
+  If[ FileType[dir] =!= Directory, CreateDirectory[dir] ];
+  Do[
+    SeedRandom[seed];
+    Put[ Table[test[ndim, fam], {repeat}],
+         ToFileName[dir, "fam" <> ToString[fam]] ],
+  {fam, from, to}]
+]
+
diff --git a/Cuba/install-sh b/Cuba/install-sh
new file mode 100755
index 0000000000000000000000000000000000000000..0b65ee871d33c7ab1e6ec36b86dda87e0d85c6ee
--- /dev/null
+++ b/Cuba/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-10-22.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+	shift
+	shift
+	continue;;
+
+    -T) no_target_directory=true
+	shift
+	continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	# When -t is used, the destination is already specified.
+	test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    shift
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dstdir/$dstfile"; then
+	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	       || {
+		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 (exit 1); exit
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	 }
+    }
+  fi || { (exit 1); exit; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/Cuba/libcuba.a b/Cuba/libcuba.a
new file mode 100644
index 0000000000000000000000000000000000000000..6be3100400fd97c76d75a70e1e67f55c797674b9
Binary files /dev/null and b/Cuba/libcuba.a differ
diff --git a/Cuba/makefile b/Cuba/makefile
new file mode 100755
index 0000000000000000000000000000000000000000..12e98f235b484ea766dbc63f124f782b3954c9f8
--- /dev/null
+++ b/Cuba/makefile
@@ -0,0 +1,354 @@
+CC = gcc
+SUFFIX = 
+CFLAGS = -O3 -fomit-frame-pointer -ffast-math -Wall -DHAVE_CONFIG_H -DREALSIZE=8 -I$(common) -I. -I$(srcdir) 
+MCFLAGS = 
+FC = gfortran
+FCFLAGS = -g -O2 -DREALSIZE=8 
+LIBS = -lm
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+RANLIB = ranlib
+EXE = 
+
+prefix = /usr/local
+exec_prefix = ${prefix}
+srcdir = .
+bindir = ${exec_prefix}/bin
+libdir = ${exec_prefix}/lib64
+includedir = ${prefix}/include
+datarootdir = ${prefix}/share
+datadir = ${datarootdir}
+
+MATH_DEFAULT = math
+TOOLS_DEFAULT = 
+DEMO_FORTRAN_DEFAULT = demo-fortran$(EXE)
+
+MCC = CC="$(tools)/fcc" CXX="$(tools)/fcc " \
+  REALCC="$(CC)" PATH="$(PATH):$(tools)" mcc
+
+TARDIR = Cuba-4.2
+TARFILE = $(TARDIR).tar.gz
+
+
+HEADERS = cuba$(SUFFIX).h
+LIB = libcuba$(SUFFIX).a
+MATH = Vegas$(SUFFIX)$(EXE) Suave$(SUFFIX)$(EXE) Divonne$(SUFFIX)$(EXE) Cuhre$(SUFFIX)$(EXE)
+TOOLS = partview$(EXE)
+
+
+all: lib demos $(MATH_DEFAULT) $(TOOLS_DEFAULT)
+
+lib: $(LIB) $(HEADERS)
+
+demos: demo-c$(EXE) $(DEMO_FORTRAN_DEFAULT)
+
+math: $(MATH)
+
+tools: $(TOOLS)
+
+
+install: lib $(TOOLS_DEFAULT)
+	$(INSTALL) -m 755 -d $(DESTDIR)$(libdir) \
+	                     $(DESTDIR)$(includedir) \
+	                     $(DESTDIR)$(bindir) \
+	                     $(DESTDIR)$(datadir)
+	$(INSTALL_DATA) $(LIB) $(DESTDIR)$(libdir)
+	for f in $(HEADERS) ; do \
+	  $(INSTALL_DATA) `test -f $$f || echo $(srcdir)/`$$f $(DESTDIR)$(includedir); \
+	done
+	for f in $(MATH) $(TOOLS) ; do \
+	  test -f $$f && $(INSTALL_PROGRAM) $$f $(DESTDIR)$(bindir) || : ; \
+	done
+	$(INSTALL_DATA) $(srcdir)/cuba.pdf $(DESTDIR)$(datadir)
+
+
+check: demo-c
+	./demo-c | grep RESULT > demo-c.out
+	@echo diff demo-c.out $(demo)/demo-c.out
+	@diff demo-c.out $(demo)/demo-c.out || \
+	echo "Note: This is serious only if the results deviate significantly."
+
+.SUFFIXES:
+.SUFFIXES: .c .f .tm
+
+common = $(srcdir)/src/common
+vegas = $(srcdir)/src/vegas
+suave = $(srcdir)/src/suave
+divonne = $(srcdir)/src/divonne
+cuhre = $(srcdir)/src/cuhre
+demo = $(srcdir)/demo
+tools = $(srcdir)/tools
+
+
+COMMON_DEPS = $(common)/stddecl.h $(common)/ChiSquare.c $(common)/Erf.c
+COMMON_CDEPS = $(COMMON_DEPS) $(common)/CSample.c $(common)/Parallel.c $(common)/sock.h
+COMMON_TMDEPS = $(COMMON_DEPS) $(common)/MSample.c
+
+VEGAS_C = $(vegas)/Vegas.c
+VEGAS_TM = $(vegas)/Vegas.tm
+VEGAS_DEPS = $(common)/Random.c \
+  $(vegas)/decl.h $(vegas)/common.c \
+  $(vegas)/Grid.c $(vegas)/Integrate.c
+VEGAS = $(VEGAS_C) $(VEGAS_TM) $(VEGAS_DEPS)
+
+$(LIB)(Vegas.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS) 
+	$(CC) $(CFLAGS) -I$(vegas) -DNOUNDERSCORE -c -o Vegas.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) Vegas.o
+	$(RM) Vegas.o
+
+$(LIB)(llVegas.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -DLONGLONGINT -DNOUNDERSCORE -c -o llVegas.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) llVegas.o
+	$(RM) llVegas.o
+
+$(LIB)(Vegas_.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -c -o Vegas_.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) Vegas_.o
+	$(RM) Vegas_.o
+
+$(LIB)(llVegas_.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -DLONGLONGINT -c -o llVegas_.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) llVegas_.o
+	$(RM) llVegas_.o
+
+Vegas$(EXE): config.h $(VEGAS_TM) $(VEGAS_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(vegas) -o Vegas$(EXE) $(VEGAS_TM)
+	strip Vegas$(EXE)
+
+Vegasl$(EXE): config.h $(VEGAS_TM) $(VEGAS_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(VEGAS_TM) > Vegasl.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(vegas) -o Vegasl$(EXE) Vegasl.tm
+	strip Vegasl$(EXE)
+	$(RM) Vegasl.tm
+
+Vegasq$(EXE):
+
+
+SUAVE_C = $(suave)/Suave.c
+SUAVE_TM = $(suave)/Suave.tm
+SUAVE_DEPS = $(common)/Random.c \
+  $(suave)/decl.h $(suave)/common.c \
+  $(suave)/Grid.c $(suave)/Fluct.c $(suave)/Sample.c \
+  $(suave)/Integrate.c
+SUAVE = $(SUAVE_C) $(SUAVE_TM) $(SUAVE_DEPS)
+
+$(LIB)(Suave.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DNOUNDERSCORE -c -o Suave.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) Suave.o
+	$(RM) Suave.o
+
+$(LIB)(llSuave.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DLONGLONGINT -DNOUNDERSCORE -c -o llSuave.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) llSuave.o
+	$(RM) llSuave.o
+
+$(LIB)(Suave_.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -c -o Suave_.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) Suave_.o
+	$(RM) Suave_.o
+
+$(LIB)(llSuave_.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DLONGLONGINT -c -o llSuave_.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) llSuave_.o
+	$(RM) llSuave_.o
+
+Suave$(EXE): config.h $(SUAVE_TM) $(SUAVE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(suave) -o Suave$(EXE) $(SUAVE_TM)
+	strip Suave$(EXE)
+
+Suavel$(EXE): config.h $(SUAVE_TM) $(SUAVE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(SUAVE_TM) > Suavel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(suave) -o Suavel$(EXE) Suavel.tm
+	strip Suavel$(EXE)
+	$(RM) Suavel.tm
+
+Suaveq$(EXE):
+
+
+DIVONNE_C = $(divonne)/Divonne.c
+DIVONNE_TM = $(divonne)/Divonne.tm
+DIVONNE_DEPS = $(common)/Random.c \
+  $(divonne)/decl.h $(divonne)/common.c \
+  $(divonne)/KorobovCoeff.c $(divonne)/Rule.c $(divonne)/Sample.c \
+  $(divonne)/FindMinimum.c $(divonne)/Iterate.c $(divonne)/Explore.c \
+  $(divonne)/Split.c $(divonne)/Integrate.c
+DIVONNE = $(DIVONNE_C) $(DIVONNE_TM) $(DIVONNE_DEPS)
+
+$(LIB)(Divonne.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DNOUNDERSCORE -c -o Divonne.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) Divonne.o
+	$(RM) Divonne.o
+
+$(LIB)(llDivonne.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DLONGLONGINT -DNOUNDERSCORE -c -o llDivonne.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) llDivonne.o
+	$(RM) llDivonne.o
+
+$(LIB)(Divonne_.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -c -o Divonne_.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) Divonne_.o
+	$(RM) Divonne_.o
+
+$(LIB)(llDivonne_.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DLONGLONGINT -c -o llDivonne_.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) llDivonne_.o
+	$(RM) llDivonne_.o
+
+Divonne$(EXE): config.h $(DIVONNE_TM) $(DIVONNE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(divonne) -o Divonne$(EXE) $(DIVONNE_TM)
+	strip Divonne$(EXE)
+
+Divonnel$(EXE): config.h $(DIVONNE_TM) $(DIVONNE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(DIVONNE_TM) > Divonnel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(divonne) -o Divonnel$(EXE) Divonnel.tm
+	strip Divonnel$(EXE)
+	$(RM) Divonnel.tm
+
+Divonneq$(EXE):
+
+
+CUHRE_C = $(cuhre)/Cuhre.c
+CUHRE_TM = $(cuhre)/Cuhre.tm
+CUHRE_DEPS = \
+  $(cuhre)/decl.h $(cuhre)/common.c \
+  $(cuhre)/Rule.c $(cuhre)/Integrate.c
+CUHRE = $(CUHRE_C) $(CUHRE_TM) $(CUHRE_DEPS)
+
+$(LIB)(Cuhre.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DNOUNDERSCORE -c -o Cuhre.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) Cuhre.o
+	$(RM) Cuhre.o
+
+$(LIB)(llCuhre.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DLONGLONGINT -DNOUNDERSCORE -c -o llCuhre.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) llCuhre.o
+	$(RM) llCuhre.o
+
+$(LIB)(Cuhre_.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -c -o Cuhre_.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) Cuhre_.o
+	$(RM) Cuhre_.o
+
+$(LIB)(llCuhre_.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DLONGLONGINT -c -o llCuhre_.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) llCuhre_.o
+	$(RM) llCuhre_.o
+
+Cuhre$(EXE): config.h $(CUHRE_TM) $(CUHRE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(cuhre) -o Cuhre$(EXE) $(CUHRE_TM)
+	strip Cuhre$(EXE)
+
+Cuhrel$(EXE): config.h $(CUHRE_TM) $(CUHRE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(CUHRE_TM) > Cuhrel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(cuhre) -o Cuhrel$(EXE) Cuhrel.tm
+	strip Cuhrel$(EXE)
+	$(RM) Cuhrel.tm
+
+Cuhreq$(EXE):
+
+
+$(LIB)(Fork.o): $(common)/Fork.c $(common)/stddecl.h $(common)/sock.h
+	$(CC) $(CFLAGS) -DNOUNDERSCORE -c -o Fork.o $(common)/Fork.c
+	$(AR) $(ARFLAGS) $(LIB) Fork.o
+	$(RM) Fork.o
+
+$(LIB)(Fork_.o): $(common)/Fork.c $(common)/stddecl.h $(common)/sock.h
+	$(CC) $(CFLAGS) -c -o Fork_.o $(common)/Fork.c
+	$(AR) $(ARFLAGS) $(LIB) Fork_.o
+	$(RM) Fork_.o
+
+
+$(LIB)(Global.o): $(common)/Global.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -DNOUNDERSCORE -c -o Global.o $(common)/Global.c
+	$(AR) $(ARFLAGS) $(LIB) Global.o
+	$(RM) Global.o
+
+$(LIB)(Global_.o): $(common)/Global.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -c -o Global_.o $(common)/Global.c
+	$(AR) $(ARFLAGS) $(LIB) Global_.o
+	$(RM) Global_.o
+
+
+$(LIB)(Data.o): $(common)/Data.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -c -o Data.o $(common)/Data.c
+	$(AR) $(ARFLAGS) $(LIB) Data.o
+	$(RM) Data.o
+
+
+$(LIB): $(LIB)(Vegas.o)     $(LIB)(Vegas_.o)     \
+	$(LIB)(llVegas.o)   $(LIB)(llVegas_.o)   \
+	$(LIB)(Suave.o)     $(LIB)(Suave_.o)     \
+	$(LIB)(llSuave.o)   $(LIB)(llSuave_.o)   \
+	$(LIB)(Divonne.o)   $(LIB)(Divonne_.o)   \
+	$(LIB)(llDivonne.o) $(LIB)(llDivonne_.o) \
+	$(LIB)(Cuhre.o)     $(LIB)(Cuhre_.o)     \
+	$(LIB)(llCuhre.o)   $(LIB)(llCuhre_.o)   \
+	$(LIB)(Fork.o)      $(LIB)(Fork_.o)      \
+	$(LIB)(Global.o)    $(LIB)(Global_.o)    \
+	$(LIB)(Data.o)
+	-$(RANLIB) $(LIB)
+
+
+cubal.h: cuba.h
+	sed 's/double/long double/g' cuba.h > cubal.h
+
+cubaq.h: cuba.h
+	sed 's/double/__float128/g' cuba.h > cubaq.h
+
+
+DEMO_F = $(demo)/demo-fortran.F
+DEMO_C = $(demo)/demo-c.c
+DEMO_TM = $(demo)/demo-math.m $(demo)/testsuite.m
+DEMO = $(DEMO_F) $(DEMO_C) $(DEMO_TM) $(demo)/demo-c.out $(demo)/cuba.F
+
+demo-fortran$(EXE): $(DEMO_F) $(LIB)
+	$(FC) $(FCFLAGS) -o demo-fortran$(EXE) $(DEMO_F) $(LIB) $(LIBS)
+
+demo-c$(EXE): $(DEMO_C) $(srcdir)/cuba.h $(LIB)
+	$(CC) $(CFLAGS) -o demo-c$(EXE) $(DEMO_C) $(LIB) $(LIBS)
+
+
+PARTVIEW = $(tools)/partview.cpp $(tools)/partview.pro \
+  $(tools)/quit.xpm $(tools)/print.xpm
+
+partview$(EXE): $(PARTVIEW)
+	qmake -o makefile.partview $(tools)/partview.pro
+	$(MAKE) -f makefile.partview
+	$(RM) partview.o partview.moc makefile.partview
+	-strip partview$(EXE)
+
+
+TARCONTENTS = $(srcdir)/COPYING $(srcdir)/ChangeLog \
+  $(srcdir)/configure $(srcdir)/configure.ac \
+  $(srcdir)/config.sub $(srcdir)/config.guess $(srcdir)/install-sh \
+  $(srcdir)/makefile.in $(srcdir)/config.h.in \
+  $(srcdir)/cuba.pdf $(srcdir)/cuba.tex $(srcdir)/cuba.h \
+  $(COMMON_CDEPS) $(COMMON_TMDEPS) \
+  $(common)/Global.c $(common)/Fork.c $(common)/Data.c \
+  $(VEGAS) $(SUAVE) $(DIVONNE) $(divonne)/KorobovCoeff.c-* $(CUHRE) \
+  $(DEMO) $(PARTVIEW) $(tools)/partview.m \
+  $(tools)/mcc $(tools)/fcc $(tools)/mkstatic $(tools)/mkdist.c
+
+dist:
+	mkdist cvfz $(TARFILE) $(TARDIR) \
+	  $(patsubst $(srcdir)/%,%, $(sort $(TARCONTENTS)))
+
+#	ln -s . $(TARDIR)
+#	tar cvfz $(TARFILE) --owner=root --group=root \
+#	  $(patsubst $(srcdir)/%,$(TARDIR)/%, $(sort $(TARCONTENTS)))
+#	$(RM) $(TARDIR)
+
+pub: dist
+	mv -f $(TARFILE) web/
+	./mkwebpage
+
+clean:
+	-$(RM) $(TARFILE) $(TARDIR) demo-c.out \
+	  partview.moc partview.o makefile.partview \
+	  cubal.h cubaq.h *.o */*.o */*.tm.c *.tm
+
+distclean: clean
+	-$(RM) $(LIB) demo-c demo-fortran $(MATH) $(TOOLS) \
+	  config.h config.log config.status makefile
+
diff --git a/Cuba/makefile.in b/Cuba/makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..cef3149204cc8e9223e34436eff932b4876c72c9
--- /dev/null
+++ b/Cuba/makefile.in
@@ -0,0 +1,354 @@
+CC = @CC@
+SUFFIX = @SUFFIX@
+CFLAGS = @CFLAGS@ @DEFS@ -DREALSIZE=@REALSIZE@ -I$(common) -I. -I$(srcdir)
+MCFLAGS = @MCFLAGS@
+FC = @FC@
+FCFLAGS = @FCFLAGS@ -DREALSIZE=@REALSIZE@
+LIBS = @LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+RANLIB = @RANLIB@
+EXE = @EXEEXT@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+srcdir = @srcdir@
+bindir = @bindir@
+libdir = @libdir@
+includedir = @includedir@
+datarootdir = @datarootdir@
+datadir = @datadir@
+
+MATH_DEFAULT = @MATH_DEFAULT@
+TOOLS_DEFAULT = @TOOLS_DEFAULT@
+DEMO_FORTRAN_DEFAULT = @DEMO_FORTRAN_DEFAULT@$(EXE)
+
+MCC = CC="$(tools)/fcc" CXX="$(tools)/fcc @MCSTDCPP@" \
+  REALCC="$(CC)" PATH="$(PATH):$(tools)" mcc
+
+TARDIR = @PACKAGE_NAME@-@PACKAGE_VERSION@
+TARFILE = $(TARDIR).tar.gz
+
+
+HEADERS = cuba$(SUFFIX).h
+LIB = libcuba$(SUFFIX).a
+MATH = Vegas$(SUFFIX)$(EXE) Suave$(SUFFIX)$(EXE) Divonne$(SUFFIX)$(EXE) Cuhre$(SUFFIX)$(EXE)
+TOOLS = partview$(EXE)
+
+
+all: lib demos $(MATH_DEFAULT) $(TOOLS_DEFAULT)
+
+lib: $(LIB) $(HEADERS)
+
+demos: demo-c$(EXE) $(DEMO_FORTRAN_DEFAULT)
+
+math: $(MATH)
+
+tools: $(TOOLS)
+
+
+install: lib $(TOOLS_DEFAULT)
+	$(INSTALL) -m 755 -d $(DESTDIR)$(libdir) \
+	                     $(DESTDIR)$(includedir) \
+	                     $(DESTDIR)$(bindir) \
+	                     $(DESTDIR)$(datadir)
+	$(INSTALL_DATA) $(LIB) $(DESTDIR)$(libdir)
+	for f in $(HEADERS) ; do \
+	  $(INSTALL_DATA) `test -f $$f || echo $(srcdir)/`$$f $(DESTDIR)$(includedir); \
+	done
+	for f in $(MATH) $(TOOLS) ; do \
+	  test -f $$f && $(INSTALL_PROGRAM) $$f $(DESTDIR)$(bindir) || : ; \
+	done
+	$(INSTALL_DATA) $(srcdir)/cuba.pdf $(DESTDIR)$(datadir)
+
+
+check: demo-c
+	./demo-c | grep RESULT > demo-c.out
+	@echo diff demo-c.out $(demo)/demo-c.out
+	@diff demo-c.out $(demo)/demo-c.out || \
+	echo "Note: This is serious only if the results deviate significantly."
+
+.SUFFIXES:
+.SUFFIXES: .c .f .tm
+
+common = $(srcdir)/src/common
+vegas = $(srcdir)/src/vegas
+suave = $(srcdir)/src/suave
+divonne = $(srcdir)/src/divonne
+cuhre = $(srcdir)/src/cuhre
+demo = $(srcdir)/demo
+tools = $(srcdir)/tools
+
+
+COMMON_DEPS = $(common)/stddecl.h $(common)/ChiSquare.c $(common)/Erf.c
+COMMON_CDEPS = $(COMMON_DEPS) $(common)/CSample.c $(common)/Parallel.c $(common)/sock.h
+COMMON_TMDEPS = $(COMMON_DEPS) $(common)/MSample.c
+
+VEGAS_C = $(vegas)/Vegas.c
+VEGAS_TM = $(vegas)/Vegas.tm
+VEGAS_DEPS = $(common)/Random.c \
+  $(vegas)/decl.h $(vegas)/common.c \
+  $(vegas)/Grid.c $(vegas)/Integrate.c
+VEGAS = $(VEGAS_C) $(VEGAS_TM) $(VEGAS_DEPS)
+
+$(LIB)(Vegas.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS) 
+	$(CC) $(CFLAGS) -I$(vegas) -DNOUNDERSCORE -c -o Vegas.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) Vegas.o
+	$(RM) Vegas.o
+
+$(LIB)(llVegas.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -DLONGLONGINT -DNOUNDERSCORE -c -o llVegas.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) llVegas.o
+	$(RM) llVegas.o
+
+$(LIB)(Vegas_.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -c -o Vegas_.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) Vegas_.o
+	$(RM) Vegas_.o
+
+$(LIB)(llVegas_.o): config.h $(VEGAS_C) $(VEGAS_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(vegas) -DLONGLONGINT -c -o llVegas_.o $(VEGAS_C)
+	$(AR) $(ARFLAGS) $(LIB) llVegas_.o
+	$(RM) llVegas_.o
+
+Vegas$(EXE): config.h $(VEGAS_TM) $(VEGAS_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(vegas) -o Vegas$(EXE) $(VEGAS_TM)
+	strip Vegas$(EXE)
+
+Vegasl$(EXE): config.h $(VEGAS_TM) $(VEGAS_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(VEGAS_TM) > Vegasl.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(vegas) -o Vegasl$(EXE) Vegasl.tm
+	strip Vegasl$(EXE)
+	$(RM) Vegasl.tm
+
+Vegasq$(EXE):
+
+
+SUAVE_C = $(suave)/Suave.c
+SUAVE_TM = $(suave)/Suave.tm
+SUAVE_DEPS = $(common)/Random.c \
+  $(suave)/decl.h $(suave)/common.c \
+  $(suave)/Grid.c $(suave)/Fluct.c $(suave)/Sample.c \
+  $(suave)/Integrate.c
+SUAVE = $(SUAVE_C) $(SUAVE_TM) $(SUAVE_DEPS)
+
+$(LIB)(Suave.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DNOUNDERSCORE -c -o Suave.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) Suave.o
+	$(RM) Suave.o
+
+$(LIB)(llSuave.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DLONGLONGINT -DNOUNDERSCORE -c -o llSuave.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) llSuave.o
+	$(RM) llSuave.o
+
+$(LIB)(Suave_.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -c -o Suave_.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) Suave_.o
+	$(RM) Suave_.o
+
+$(LIB)(llSuave_.o): config.h $(SUAVE_C) $(SUAVE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(suave) -DLONGLONGINT -c -o llSuave_.o $(SUAVE_C)
+	$(AR) $(ARFLAGS) $(LIB) llSuave_.o
+	$(RM) llSuave_.o
+
+Suave$(EXE): config.h $(SUAVE_TM) $(SUAVE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(suave) -o Suave$(EXE) $(SUAVE_TM)
+	strip Suave$(EXE)
+
+Suavel$(EXE): config.h $(SUAVE_TM) $(SUAVE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(SUAVE_TM) > Suavel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(suave) -o Suavel$(EXE) Suavel.tm
+	strip Suavel$(EXE)
+	$(RM) Suavel.tm
+
+Suaveq$(EXE):
+
+
+DIVONNE_C = $(divonne)/Divonne.c
+DIVONNE_TM = $(divonne)/Divonne.tm
+DIVONNE_DEPS = $(common)/Random.c \
+  $(divonne)/decl.h $(divonne)/common.c \
+  $(divonne)/KorobovCoeff.c $(divonne)/Rule.c $(divonne)/Sample.c \
+  $(divonne)/FindMinimum.c $(divonne)/Iterate.c $(divonne)/Explore.c \
+  $(divonne)/Split.c $(divonne)/Integrate.c
+DIVONNE = $(DIVONNE_C) $(DIVONNE_TM) $(DIVONNE_DEPS)
+
+$(LIB)(Divonne.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DNOUNDERSCORE -c -o Divonne.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) Divonne.o
+	$(RM) Divonne.o
+
+$(LIB)(llDivonne.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DLONGLONGINT -DNOUNDERSCORE -c -o llDivonne.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) llDivonne.o
+	$(RM) llDivonne.o
+
+$(LIB)(Divonne_.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -c -o Divonne_.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) Divonne_.o
+	$(RM) Divonne_.o
+
+$(LIB)(llDivonne_.o): config.h $(DIVONNE_C) $(DIVONNE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(divonne) -DLONGLONGINT -c -o llDivonne_.o $(DIVONNE_C)
+	$(AR) $(ARFLAGS) $(LIB) llDivonne_.o
+	$(RM) llDivonne_.o
+
+Divonne$(EXE): config.h $(DIVONNE_TM) $(DIVONNE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(divonne) -o Divonne$(EXE) $(DIVONNE_TM)
+	strip Divonne$(EXE)
+
+Divonnel$(EXE): config.h $(DIVONNE_TM) $(DIVONNE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(DIVONNE_TM) > Divonnel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(divonne) -o Divonnel$(EXE) Divonnel.tm
+	strip Divonnel$(EXE)
+	$(RM) Divonnel.tm
+
+Divonneq$(EXE):
+
+
+CUHRE_C = $(cuhre)/Cuhre.c
+CUHRE_TM = $(cuhre)/Cuhre.tm
+CUHRE_DEPS = \
+  $(cuhre)/decl.h $(cuhre)/common.c \
+  $(cuhre)/Rule.c $(cuhre)/Integrate.c
+CUHRE = $(CUHRE_C) $(CUHRE_TM) $(CUHRE_DEPS)
+
+$(LIB)(Cuhre.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DNOUNDERSCORE -c -o Cuhre.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) Cuhre.o
+	$(RM) Cuhre.o
+
+$(LIB)(llCuhre.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DLONGLONGINT -DNOUNDERSCORE -c -o llCuhre.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) llCuhre.o
+	$(RM) llCuhre.o
+
+$(LIB)(Cuhre_.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -c -o Cuhre_.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) Cuhre_.o
+	$(RM) Cuhre_.o
+
+$(LIB)(llCuhre_.o): config.h $(CUHRE_C) $(CUHRE_DEPS) $(COMMON_CDEPS)
+	$(CC) $(CFLAGS) -I$(cuhre) -DLONGLONGINT -c -o llCuhre_.o $(CUHRE_C)
+	$(AR) $(ARFLAGS) $(LIB) llCuhre_.o
+	$(RM) llCuhre_.o
+
+Cuhre$(EXE): config.h $(CUHRE_TM) $(CUHRE_DEPS) $(COMMON_TMDEPS)
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(cuhre) -o Cuhre$(EXE) $(CUHRE_TM)
+	strip Cuhre$(EXE)
+
+Cuhrel$(EXE): config.h $(CUHRE_TM) $(CUHRE_DEPS) $(COMMON_TMDEPS)
+	sed '/:Begin:/,/:End:/ s/Real64/Real128/g' $(CUHRE_TM) > Cuhrel.tm
+	$(MCC) $(MCFLAGS) $(CFLAGS) -I$(cuhre) -o Cuhrel$(EXE) Cuhrel.tm
+	strip Cuhrel$(EXE)
+	$(RM) Cuhrel.tm
+
+Cuhreq$(EXE):
+
+
+$(LIB)(Fork.o): $(common)/Fork.c $(common)/stddecl.h $(common)/sock.h
+	$(CC) $(CFLAGS) -DNOUNDERSCORE -c -o Fork.o $(common)/Fork.c
+	$(AR) $(ARFLAGS) $(LIB) Fork.o
+	$(RM) Fork.o
+
+$(LIB)(Fork_.o): $(common)/Fork.c $(common)/stddecl.h $(common)/sock.h
+	$(CC) $(CFLAGS) -c -o Fork_.o $(common)/Fork.c
+	$(AR) $(ARFLAGS) $(LIB) Fork_.o
+	$(RM) Fork_.o
+
+
+$(LIB)(Global.o): $(common)/Global.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -DNOUNDERSCORE -c -o Global.o $(common)/Global.c
+	$(AR) $(ARFLAGS) $(LIB) Global.o
+	$(RM) Global.o
+
+$(LIB)(Global_.o): $(common)/Global.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -c -o Global_.o $(common)/Global.c
+	$(AR) $(ARFLAGS) $(LIB) Global_.o
+	$(RM) Global_.o
+
+
+$(LIB)(Data.o): $(common)/Data.c $(common)/stddecl.h
+	$(CC) $(CFLAGS) -c -o Data.o $(common)/Data.c
+	$(AR) $(ARFLAGS) $(LIB) Data.o
+	$(RM) Data.o
+
+
+$(LIB): $(LIB)(Vegas.o)     $(LIB)(Vegas_.o)     \
+	$(LIB)(llVegas.o)   $(LIB)(llVegas_.o)   \
+	$(LIB)(Suave.o)     $(LIB)(Suave_.o)     \
+	$(LIB)(llSuave.o)   $(LIB)(llSuave_.o)   \
+	$(LIB)(Divonne.o)   $(LIB)(Divonne_.o)   \
+	$(LIB)(llDivonne.o) $(LIB)(llDivonne_.o) \
+	$(LIB)(Cuhre.o)     $(LIB)(Cuhre_.o)     \
+	$(LIB)(llCuhre.o)   $(LIB)(llCuhre_.o)   \
+	$(LIB)(Fork.o)      $(LIB)(Fork_.o)      \
+	$(LIB)(Global.o)    $(LIB)(Global_.o)    \
+	$(LIB)(Data.o)
+	-$(RANLIB) $(LIB)
+
+
+cubal.h: cuba.h
+	sed 's/double/long double/g' cuba.h > cubal.h
+
+cubaq.h: cuba.h
+	sed 's/double/__float128/g' cuba.h > cubaq.h
+
+
+DEMO_F = $(demo)/demo-fortran.F
+DEMO_C = $(demo)/demo-c.c
+DEMO_TM = $(demo)/demo-math.m $(demo)/testsuite.m
+DEMO = $(DEMO_F) $(DEMO_C) $(DEMO_TM) $(demo)/demo-c.out $(demo)/cuba.F
+
+demo-fortran$(EXE): $(DEMO_F) $(LIB)
+	$(FC) $(FCFLAGS) -o demo-fortran$(EXE) $(DEMO_F) $(LIB) $(LIBS)
+
+demo-c$(EXE): $(DEMO_C) $(srcdir)/cuba.h $(LIB)
+	$(CC) $(CFLAGS) -o demo-c$(EXE) $(DEMO_C) $(LIB) $(LIBS)
+
+
+PARTVIEW = $(tools)/partview.cpp $(tools)/partview.pro \
+  $(tools)/quit.xpm $(tools)/print.xpm
+
+partview$(EXE): $(PARTVIEW)
+	qmake -o makefile.partview $(tools)/partview.pro
+	$(MAKE) -f makefile.partview
+	$(RM) partview.o partview.moc makefile.partview
+	-strip partview$(EXE)
+
+
+TARCONTENTS = $(srcdir)/COPYING $(srcdir)/ChangeLog \
+  $(srcdir)/configure $(srcdir)/configure.ac \
+  $(srcdir)/config.sub $(srcdir)/config.guess $(srcdir)/install-sh \
+  $(srcdir)/makefile.in $(srcdir)/config.h.in \
+  $(srcdir)/cuba.pdf $(srcdir)/cuba.tex $(srcdir)/cuba.h \
+  $(COMMON_CDEPS) $(COMMON_TMDEPS) \
+  $(common)/Global.c $(common)/Fork.c $(common)/Data.c \
+  $(VEGAS) $(SUAVE) $(DIVONNE) $(divonne)/KorobovCoeff.c-* $(CUHRE) \
+  $(DEMO) $(PARTVIEW) $(tools)/partview.m \
+  $(tools)/mcc $(tools)/fcc $(tools)/mkstatic $(tools)/mkdist.c
+
+dist:
+	mkdist cvfz $(TARFILE) $(TARDIR) \
+	  $(patsubst $(srcdir)/%,%, $(sort $(TARCONTENTS)))
+
+#	ln -s . $(TARDIR)
+#	tar cvfz $(TARFILE) --owner=root --group=root \
+#	  $(patsubst $(srcdir)/%,$(TARDIR)/%, $(sort $(TARCONTENTS)))
+#	$(RM) $(TARDIR)
+
+pub: dist
+	mv -f $(TARFILE) web/
+	./mkwebpage
+
+clean:
+	-$(RM) $(TARFILE) $(TARDIR) demo-c.out \
+	  partview.moc partview.o makefile.partview \
+	  cubal.h cubaq.h *.o */*.o */*.tm.c *.tm
+
+distclean: clean
+	-$(RM) $(LIB) demo-c demo-fortran $(MATH) $(TOOLS) \
+	  config.h config.log config.status makefile
+
diff --git a/Cuba/src/common/CSample.c b/Cuba/src/common/CSample.c
new file mode 100644
index 0000000000000000000000000000000000000000..dfdbae1e338383c557eec00ac4d33a398e38c58d
--- /dev/null
+++ b/Cuba/src/common/CSample.c
@@ -0,0 +1,82 @@
+/*
+	CSample.c
+		the serial sampling routine
+		for the C versions of the Cuba routines
+		by Thomas Hahn
+		last modified 9 Oct 14 th
+*/
+
+
+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))
+{
+  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;
+    VES_ONLY(w += nvec;)
+    x += nvec*t->ndim;
+    f += nvec*t->ncomp;
+  }
+  return 0;
+}
+
+/*********************************************************************/
+
+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, -1 VES_ONLY(, w, iter)) ) 
+    longjmp(t->abort, -99);
+}
+
+/*********************************************************************/
+
+#ifdef HAVE_FORK
+
+static void DoSample(This *t, number n, creal *x, real *f
+  VES_ONLY(, creal *w, ccount iter));
+DIV_ONLY(static int Explore(This *t, cint iregion);)
+
+#else
+
+#define DoSample DoSampleSerial
+#define Explore ExploreSerial
+#define ForkCores(t)
+
+static inline void WaitCores(This *t, Spin **pspin)
+{
+  if( Invalid(pspin) ) MasterExit();
+}
+
+#define WaitCores(t, pspin)
+
+#endif
+
+#ifdef DIVONNE
+static inline count SampleExtra(This *t, cBounds *b)
+{
+  number n = t->nextra;
+  t->peakfinder(&t->ndim, b, &n, t->xextra, t->userdata);
+  DoSample(t, n, t->xextra, t->fextra);
+  return n;
+}
+#endif
+
+#include "common.c"
+
+#ifdef HAVE_FORK
+#include "Parallel.c"
+#endif
+
+#include "Integrate.c"
+
diff --git a/Cuba/src/common/ChiSquare.c b/Cuba/src/common/ChiSquare.c
new file mode 100644
index 0000000000000000000000000000000000000000..fc257887b7918a294998e41f73b5c209b8c33bef
--- /dev/null
+++ b/Cuba/src/common/ChiSquare.c
@@ -0,0 +1,67 @@
+/*
+	ChiSquare.c
+		the chi-square cdf
+		after W.J. Kennedy and J.E. Gentle,
+		Statistical computing, p. 116
+		last modified 12 Mar 15 th
+*/
+
+#ifdef HAVE_ERF
+#define Erf erf
+#else
+#include "Erf.c"
+#endif
+
+static inline real Normal(creal x)
+{
+  return .5*Erf(x/1.414213562373095048801689) + .5;
+}
+
+/*********************************************************************/
+
+static real ChiSquare(creal x, cint df)
+{
+  real y;
+
+  if( df <= 0 ) return -999;
+
+  if( x <= 0 ) return 0;
+  if( x > 1000*df ) return 1;
+
+  if( df > 1000 ) {
+    if( x < 2 ) return 0;
+    y = 2./(9*df);
+    y = (powx(x/df, 1/3.) - (1 - y))/sqrtx(y);
+    if( y > 5 ) return 1;
+    if( y < -18.8055 ) return 0;
+    return Normal(y);
+  }
+
+  y = .5*x;
+
+  if( df & 1 ) {
+    creal sqrty = sqrtx(y);
+    real h = Erf(sqrty);
+    count i;
+
+    if( df == 1 ) return h;
+
+    y = sqrty*expx(-y)/.8862269254527579825931;
+    for( i = 3; i < df; i += 2 ) {
+      h -= y;
+      y *= x/i;
+    }
+    y = h - y;
+  }
+  else {
+    real term = expx(-y), sum = term;
+    count i;
+
+    for( i = 1; i < df/2; ++i )
+      sum += term *= y/i;
+    y = 1 - sum;
+  }
+
+  return Max(0., y);
+}
+
diff --git a/Cuba/src/common/Data.c b/Cuba/src/common/Data.c
new file mode 100644
index 0000000000000000000000000000000000000000..3d4059118259693af77acc5034649d1ee20fbab4
--- /dev/null
+++ b/Cuba/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/Cuba/src/common/Erf.c b/Cuba/src/common/Erf.c
new file mode 100644
index 0000000000000000000000000000000000000000..c94d106de6974959a4ae92ab56a99878ef14ff89
--- /dev/null
+++ b/Cuba/src/common/Erf.c
@@ -0,0 +1,51 @@
+/*
+	Erf.c
+		Gaussian error function
+		= 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 12 Mar 15 th
+*/
+
+
+static real Erfc(creal x)
+{
+  static creal c[] = {
+    2.96316885199227378e-01, 6.12158644495538758e-02,
+    1.81581125134637070e-01, 5.50942780056002085e-01,
+    6.81866451424939493e-02, 1.53039662058770397e+00,
+    1.56907543161966709e-02, 2.99957952311300634e+00,
+    2.21290116681517573e-03, 4.95867777128246701e+00,
+    1.91395813098742864e-04, 7.41471251099335407e+00,
+    9.71013284010551623e-06, 1.04765104356545238e+01,
+    1.66642447174307753e-07, 1.48455557345597957e+01,
+    6.10399733098688199e+00, 1.26974899965115684e+01 };
+  real y = x*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/(expx(c[17]*x) + 1);
+  return y;
+}
+
+
+static real Erf(creal x)
+{
+  static creal c[] = {
+    1.12837916709551257e+00,
+   -3.76126389031833602e-01,
+    1.12837916706621301e-01,
+   -2.68661698447642378e-02,
+    5.22387877685618101e-03,
+   -8.49202435186918470e-04 };
+  real y = fabsx(x);
+  if( y > .125 ) {
+    y = 1 - Erfc(y);
+    return (x > 0) ? y : -y;
+  }
+  y *= y;
+  return x*(c[0] + y*(c[1] + y*(c[2] +
+    y*(c[3] + y*(c[4] + y*c[5])))));
+}
diff --git a/Cuba/src/common/Fork.c b/Cuba/src/common/Fork.c
new file mode 100644
index 0000000000000000000000000000000000000000..99605d25b2fd5b71b479ca56f64574ed0975c182
--- /dev/null
+++ b/Cuba/src/common/Fork.c
@@ -0,0 +1,164 @@
+/*
+	Fork.c
+		fork the cores for parallel sampling
+		(C version only)
+		by Thomas Hahn
+		last modified 23 Apr 15 th
+*/
+
+
+#define ROUTINE "cubafork"
+#include "stddecl.h"
+
+#ifdef HAVE_FORK
+
+#include "sock.h"
+
+#define MINCORES 1
+
+coreinit cubafun_;
+extern int cubaverb_;
+extern corespec cubaworkers_;
+
+/*********************************************************************/
+
+static inline void Child(cint fd, cint core)
+{
+  dispatch d;
+
+  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
+  cubaworkers_.ncores = abs(cubaworkers_.ncores);
+#endif
+
+  cores = cubaworkers_.naccel + cubaworkers_.ncores;
+  if( cores < MINCORES ) {
+    *pspin = NULL;
+    return;
+  }
+
+  if( cubaverb_ ) {
+    sprintf(out, "using %d cores %d accelerators via "
+#ifdef HAVE_SHMGET
+      "shared memory",
+#else
+      "pipes",
+#endif
+      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) */
+
+  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(
+      socketpair(AF_LOCAL, SOCK_STREAM, 0, fd) != -1 &&
+      (pid = fork()) != -1 );
+    if( pid == 0 ) {
+      close(fd[0]);
+      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]);
+    pfp->fd = fd[0];
+    pfp->pid = pid;
+    ++pfp;
+  }
+
+  *pspin = spin;
+}
+
+/*********************************************************************/
+
+Extern void SUFFIX(cubawait)(Spin **pspin)
+{
+  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/Cuba/src/common/Global.c b/Cuba/src/common/Global.c
new file mode 100644
index 0000000000000000000000000000000000000000..6e5975fa3d9e3cafebc14e96315dca43f602f059
--- /dev/null
+++ b/Cuba/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/Cuba/src/common/MSample.c b/Cuba/src/common/MSample.c
new file mode 100644
index 0000000000000000000000000000000000000000..e0c48142e57c4e9016143ad5dd1853bdf87a40e8
--- /dev/null
+++ b/Cuba/src/common/MSample.c
@@ -0,0 +1,90 @@
+/*
+	MSample.c
+		the sampling routine for the
+		Mathematica versions of the Cuba routines
+		by Thomas Hahn
+		last modified 13 Mar 15 th
+*/
+
+
+static void DoSample(This *t, cnumber n, real *x, real *f
+  VES_ONLY(, real *w, ccount iter))
+{
+  real *mma_f;
+  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));
+  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( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) {
+    MLClearError(stdlink);
+    MLNewPacket(stdlink);
+    longjmp(t->abort, -99);
+  }
+ 
+  t->neval += mma_n;
+
+  if( mma_n != n*t->ncomp ) {
+    MLReleaseRealxList(stdlink, mma_f, mma_n);
+    longjmp(t->abort, -3);
+  }
+ 
+  Copy(f, mma_f, n*t->ncomp);
+  MLReleaseRealxList(stdlink, mma_f, mma_n);
+}
+
+/*********************************************************************/
+
+#ifdef DIVONNE
+#define Explore ExploreSerial
+
+static count SampleExtra(This *t, cBounds *b)
+{
+  count n, nget;
+  real *mma_f;
+  int mma_n;
+
+  MLPutFunction(stdlink, "EvaluatePacket", 1);
+  MLPutFunction(stdlink, "Cuba`Divonne`findpeak", 2);
+  MLPutRealxList(stdlink, (real *)b, 2*t->ndim);
+  MLPutInteger(stdlink, t->phase);
+  MLEndPacket(stdlink);
+
+  MLNextPacket(stdlink);
+  if( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) {
+    MLClearError(stdlink);
+    MLNewPacket(stdlink);
+    longjmp(t->abort, -99);
+  }
+
+  t->neval += nget = mma_n/(t->ndim + t->ncomp);
+
+  n = IMin(nget, t->nextra);
+  if( n ) {
+    Copy(t->xextra, mma_f, n*t->ndim);
+    Copy(t->fextra, mma_f + nget*t->ndim, n*t->ncomp);
+  }
+
+  MLReleaseRealxList(stdlink, mma_f, mma_n);
+
+  return n;
+}
+#endif
+
+/*********************************************************************/
+
+#include "common.c"
+
+#define ForkCores(t)
+#define WaitCores(t)
+
+#include "Integrate.c"
+
diff --git a/Cuba/src/common/Parallel.c b/Cuba/src/common/Parallel.c
new file mode 100644
index 0000000000000000000000000000000000000000..895862f37708c4688637ad38c7f641947543e303
--- /dev/null
+++ b/Cuba/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/Cuba/src/common/Random.c b/Cuba/src/common/Random.c
new file mode 100644
index 0000000000000000000000000000000000000000..6d606157bc6b5a1c8c8197f64f6b07c70aa566b6
--- /dev/null
+++ b/Cuba/src/common/Random.c
@@ -0,0 +1,344 @@
+/*
+	Random.c
+		quasi- and pseudo-random-number generation
+		last modified 18 Mar 14 th
+*/
+
+
+/*
+	PART 1: Sobol quasi-random-number generator
+	adapted from ACM TOMS algorithm 659
+*/
+
+static void SobolGet(This *t, real *x)
+{
+  number seq = t->rng.sobol.seq++;
+  count zerobit = 0, dim;
+
+  while( seq & 1 ) {
+    ++zerobit;
+    seq >>= 1;
+  }
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    t->rng.sobol.prev[dim] ^= t->rng.sobol.v[dim][zerobit];
+    x[dim] = t->rng.sobol.prev[dim]*t->rng.sobol.norm;
+  }
+}
+
+
+static void SobolSkip(This *t, number n)
+{
+  while( n-- ) {
+    number seq = t->rng.sobol.seq++;
+    count zerobit = 0, dim;
+
+    while( seq & 1 ) {
+      ++zerobit;
+      seq >>= 1;
+    }
+
+    for( dim = 0; dim < t->ndim; ++dim )
+      t->rng.sobol.prev[dim] ^= t->rng.sobol.v[dim][zerobit];
+  }
+}
+
+
+static inline void SobolIni(This *t)
+{
+  static number ini[9*40] = {
+      3,   1,   0,   0,   0,   0,   0,   0,   0,
+      7,   1,   1,   0,   0,   0,   0,   0,   0,
+     11,   1,   3,   7,   0,   0,   0,   0,   0,
+     13,   1,   1,   5,   0,   0,   0,   0,   0,
+     19,   1,   3,   1,   1,   0,   0,   0,   0,
+     25,   1,   1,   3,   7,   0,   0,   0,   0,
+     37,   1,   3,   3,   9,   9,   0,   0,   0,
+     59,   1,   3,   7,  13,   3,   0,   0,   0,
+     47,   1,   1,   5,  11,  27,   0,   0,   0,
+     61,   1,   3,   5,   1,  15,   0,   0,   0,
+     55,   1,   1,   7,   3,  29,   0,   0,   0,
+     41,   1,   3,   7,   7,  21,   0,   0,   0,
+     67,   1,   1,   1,   9,  23,  37,   0,   0,
+     97,   1,   3,   3,   5,  19,  33,   0,   0,
+     91,   1,   1,   3,  13,  11,   7,   0,   0,
+    109,   1,   1,   7,  13,  25,   5,   0,   0,
+    103,   1,   3,   5,  11,   7,  11,   0,   0,
+    115,   1,   1,   1,   3,  13,  39,   0,   0,
+    131,   1,   3,   1,  15,  17,  63,  13,   0,
+    193,   1,   1,   5,   5,   1,  27,  33,   0,
+    137,   1,   3,   3,   3,  25,  17, 115,   0,
+    145,   1,   1,   3,  15,  29,  15,  41,   0,
+    143,   1,   3,   1,   7,   3,  23,  79,   0,
+    241,   1,   3,   7,   9,  31,  29,  17,   0,
+    157,   1,   1,   5,  13,  11,   3,  29,   0,
+    185,   1,   3,   1,   9,   5,  21, 119,   0,
+    167,   1,   1,   3,   1,  23,  13,  75,   0,
+    229,   1,   3,   3,  11,  27,  31,  73,   0,
+    171,   1,   1,   7,   7,  19,  25, 105,   0,
+    213,   1,   3,   5,   5,  21,   9,   7,   0,
+    191,   1,   1,   1,  15,   5,  49,  59,   0,
+    253,   1,   1,   1,   1,   1,  33,  65,   0,
+    203,   1,   3,   5,  15,  17,  19,  21,   0,
+    211,   1,   1,   7,  11,  13,  29,   3,   0,
+    239,   1,   3,   7,   5,   7,  11, 113,   0,
+    247,   1,   1,   5,   3,  15,  19,  61,   0,
+    285,   1,   3,   1,   1,   9,  27,  89,   7,
+    369,   1,   1,   3,   7,  31,  15,  45,  23,
+    299,   1,   3,   3,   9,   9,  25, 107,  39 };
+
+  count dim, bit, nbits;
+  number *pini = ini, 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] = (number)1 << (nbits - bit);
+
+  for( dim = 1; dim < t->ndim; ++dim ) {
+    number *pv = t->rng.sobol.v[dim], *pvv = pv;
+    number powers = *pini++, j;
+    int inibits = -1, bit;
+    for( j = powers; j; j >>= 1 ) ++inibits;
+
+    memcpy(pv, pini, inibits*sizeof *pini);
+    pini += 8;
+
+    for( bit = inibits; bit <= nbits; ++bit ) {
+      number newv = *pvv, j = powers;
+      int b;
+      for( b = 0; b < inibits; ++b ) {
+        if( j & 1 ) newv ^= pvv[b] << (inibits - b);
+        j >>= 1;
+      }
+      pvv[inibits] = newv;
+      ++pvv;
+    }
+
+    for( bit = 0; bit < nbits; ++bit )
+      pv[bit] <<= nbits - bit;
+  }
+
+  t->rng.sobol.seq = 0;
+  XClear(t->rng.sobol.prev);
+
+  t->rng.getrandom = SobolGet;
+  t->rng.skiprandom = SobolSkip;
+}
+
+
+/*
+	PART 2: Mersenne Twister pseudo-random-number generator
+	adapted from T. Nishimura's and M. Matsumoto's C code at
+	http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+*/
+
+/* 32 or 53 random bits */
+#define RANDOM_BITS 32
+
+
+static inline state_t Twist(state_t a, state_t b)
+{
+  state_t mixbits = (a & 0x80000000) | (b & 0x7fffffff);
+  state_t matrixA = (-(b & 1)) & 0x9908b0df;
+  return (mixbits >> 1) ^ matrixA;
+}
+
+
+static inline void MersenneReload(state_t *state)
+{
+  state_t *s = state;
+  int j;
+
+  for( j = MERSENNE_N - MERSENNE_M + 1; --j; ++s )
+    *s = s[MERSENNE_M] ^ Twist(s[0], s[1]);
+  for( j = MERSENNE_M; --j; ++s )
+    *s = s[MERSENNE_M - MERSENNE_N] ^ Twist(s[0], s[1]);
+  *s = s[MERSENNE_M - MERSENNE_N] ^ Twist(s[0], state[0]);
+}
+
+
+static inline state_t MersenneInt(state_t s)
+{
+  s ^= s >> 11;
+  s ^= (s << 7) & 0x9d2c5680;
+  s ^= (s << 15) & 0xefc60000;
+  return s ^ (s >> 18);
+}
+
+
+static void MersenneGet(This *t, real *x)
+{
+  count next = t->rng.mersenne.next, dim;
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+#if RANDOM_BITS == 53
+    state_t a, b;
+#endif
+
+    if( next >= MERSENNE_N ) {
+      MersenneReload(t->rng.mersenne.state);
+      next = 0;
+    }
+
+#if RANDOM_BITS == 53
+    a = MersenneInt(t->rng.mersenne.state[next++]) >> 5;
+    b = MersenneInt(t->rng.mersenne.state[next++]) >> 6;
+    x[dim] = (67108864.*a + b)/9007199254740992.;
+#else
+    x[dim] = MersenneInt(t->rng.mersenne.state[next++])/4294967296.;
+#endif
+  }
+
+  t->rng.mersenne.next = next;
+}
+
+
+static void MersenneSkip(This *t, number n)
+{
+#if RANDOM_BITS == 53
+  n = 2*n*t->ndim + t->rng.mersenne.next;
+#else
+  n = n*t->ndim + t->rng.mersenne.next;
+#endif
+  t->rng.mersenne.next = n % MERSENNE_N;
+  n /= MERSENNE_N;
+  while( n-- ) MersenneReload(t->rng.mersenne.state);
+}
+
+
+static inline void MersenneIni(This *t)
+{
+  state_t seed = t->seed;
+  state_t *next = t->rng.mersenne.state;
+  count j;
+
+  for( j = 1; j <= MERSENNE_N; ++j ) {
+    *next++ = seed;
+    seed = 0x6c078965*(seed ^ (seed >> 30)) + j;
+    /* see Knuth TAOCP Vol 2, 3rd Ed, p. 106 for multiplier */
+  }
+
+  MersenneReload(t->rng.mersenne.state);
+  t->rng.mersenne.next = 0;
+
+  t->rng.getrandom = MersenneGet;
+  t->rng.skiprandom = MersenneSkip;
+}
+
+
+/*
+	PART 3: Ranlux subtract-and-borrow random-number generator 
+	proposed by Marsaglia and Zaman, implemented by F. James with 
+	the name RCARRY in 1991, and later improved by Martin Luescher 
+	in 1993 to produce "Luxury Pseudorandom Numbers".
+	Adapted from the CERNlib Fortran 77 code by F. James, 1993.
+
+	The available luxury levels are:
+
+	level 0  (p = 24): equivalent to the original RCARRY of Marsaglia
+	         and Zaman, very long period, but fails many tests.
+	level 1  (p = 48): considerable improvement in quality over level 0,
+	         now passes the gap test, but still fails spectral test.
+	level 2  (p = 97): passes all known tests, but theoretically still
+	         defective.
+	level 3  (p = 223): DEFAULT VALUE.  Any theoretically possible
+	         correlations have very small chance of being observed.
+	level 4  (p = 389): highest possible luxury, all 24 bits chaotic.
+*/
+
+
+static inline int RanluxInt(This *t, count n)
+{
+  int s = 0;
+
+  while( n-- ) {
+    s = t->rng.ranlux.state[t->rng.ranlux.j24] -
+        t->rng.ranlux.state[t->rng.ranlux.i24] + t->rng.ranlux.carry;
+    s += (t->rng.ranlux.carry = NegQ(s)) & (1 << 24);
+    t->rng.ranlux.state[t->rng.ranlux.i24] = s;
+    --t->rng.ranlux.i24;
+    t->rng.ranlux.i24 += NegQ(t->rng.ranlux.i24) & 24;
+    --t->rng.ranlux.j24;
+    t->rng.ranlux.j24 += NegQ(t->rng.ranlux.j24) & 24;
+  }
+
+  return s;
+}
+
+
+static void RanluxGet(This *t, real *x)
+{
+/* The Generator proper: "Subtract-with-borrow",
+   as proposed by Marsaglia and Zaman, FSU, March 1989 */
+
+  count dim;
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    cint nskip = (--t->rng.ranlux.n24 >= 0) ? 0 :
+      (t->rng.ranlux.n24 = 24, t->rng.ranlux.nskip);
+    cint s = RanluxInt(t, 1 + nskip);
+    x[dim] = ldexp(s, -24);
+/* small numbers (with less than 12 significant bits) are "padded" */
+    if( s < (1 << 12) )
+      x[dim] += ldexp(t->rng.ranlux.state[t->rng.ranlux.j24], -48);
+  }
+}
+
+
+static void RanluxSkip(This *t, cnumber n)
+{
+  RanluxInt(t, n + t->rng.ranlux.nskip*(n/24));
+  t->rng.ranlux.n24 = 24 - n % 24;
+}
+
+
+static inline void RanluxIni(This *t)
+{
+  cint skip[] = {24, 48, 97, 223, 389,
+    223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+    223, 223, 223, 223, 223, 223, 223, 223, 223, 223};
+  int seed = t->seed;
+  int level = RNG;
+  count i;
+
+  if( level < Elements(skip) ) level = skip[level];
+  t->rng.ranlux.nskip = level - 24;
+
+  t->rng.ranlux.i24 = 23;
+  t->rng.ranlux.j24 = 9;
+  t->rng.ranlux.n24 = 24;
+
+  for( i = 0; i < 24; ++i ) {
+    cint k = seed/53668;
+    seed = 40014*(seed - k*53668) - k*12211;
+    seed += NegQ(seed) & 2147483563;
+    t->rng.ranlux.state[i] = seed & ((1 << 24) - 1);
+  }
+
+  t->rng.ranlux.carry = ~TrueQ(t->rng.ranlux.state[23]) & (1 << 24);
+
+  t->rng.getrandom = RanluxGet;
+  t->rng.skiprandom = RanluxSkip;
+}
+
+
+/*
+	PART 4: User routines:
+
+	- IniRandom sets up the random-number generator to produce a
+	  sequence of at least n ndim-dimensional random vectors.
+
+	- GetRandom retrieves one random vector.
+
+	- SkipRandom skips over n random vectors.
+*/
+
+static inline void IniRandom(This *t)
+{
+  if( t->seed == 0 ) SobolIni(t);
+  else if( RNG == 0 ) MersenneIni(t);
+  else RanluxIni(t);
+}
+
diff --git a/Cuba/src/common/sock.h b/Cuba/src/common/sock.h
new file mode 100644
index 0000000000000000000000000000000000000000..13507c8e32d53b75ca2280330513fd52c81a619b
--- /dev/null
+++ b/Cuba/src/common/sock.h
@@ -0,0 +1,65 @@
+/*
+	sock.h
+		socket read/write
+		by Thomas Hahn
+		last modified 27 May 14 th
+*/
+
+#include <sys/socket.h>
+
+#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/Cuba/src/common/stddecl.h b/Cuba/src/common/stddecl.h
new file mode 100644
index 0000000000000000000000000000000000000000..8b82a10a1e96364f5a1cb4f9ad2c8eac6f8eed40
--- /dev/null
+++ b/Cuba/src/common/stddecl.h
@@ -0,0 +1,561 @@
+/*
+	stddecl.h
+		declarations common to all Cuba routines
+		last modified 23 Apr 15 th
+*/
+
+
+#ifndef _stddecl_h_
+#define _stddecl_h_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define _BSD_SOURCE
+#define _SVID_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <limits.h>
+#include <unistd.h>
+#include <assert.h>
+#include <fcntl.h>
+#include <setjmp.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#ifdef HAVE_FORK
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <signal.h>
+#ifdef HAVE_SHMGET
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif
+#endif
+
+#ifdef HAVE_ALLOCA_H
+#include <alloca.h>
+#elif defined __GNUC__
+#define alloca __builtin_alloca
+#elif defined _AIX
+#define alloca __alloca
+#elif defined _MSC_VER
+#include <malloc.h>
+#define alloca _alloca
+#else
+#include <stddef.h>
+#ifdef  __cplusplus
+extern "C"
+#endif
+void *alloca (size_t);
+#endif
+
+#ifndef NDIM
+#define NDIM t->ndim
+#define MAXDIM 1024
+#else
+#define MAXDIM NDIM
+#endif
+
+#ifndef NCOMP
+#define NCOMP t->ncomp
+#define MAXCOMP 1024
+#else
+#define MAXCOMP NCOMP
+#endif
+
+#if defined(VEGAS) || defined(SUAVE)
+#define VES_ONLY(...) __VA_ARGS__
+#define NW 1
+#else
+#define VES_ONLY(...)
+#define NW 0
+#endif
+
+#ifdef DIVONNE
+#define DIV_ONLY(...) __VA_ARGS__
+#else
+#define DIV_ONLY(...)
+#endif
+
+#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)
+
+#define INFTY DBL_MAX
+
+#if __STDC_VERSION__ >= 199901L
+#define POW2(n) 0x1p-##n
+#else
+#define POW2(n) ldexp(1., -n)
+#endif
+
+#define NOTZERO POW2(104)
+
+#define ABORT -999
+
+#define Elements(x) (sizeof(x)/sizeof(*x))
+
+#define Copy(d, s, n) memcpy(d, s, (n)*sizeof(*(d)))
+
+#define Move(d, s, n) memmove(d, s, (n)*sizeof(*(d)))
+
+#define XCopy(d, s) Copy(d, s, t->ndim)
+
+#define FCopy(d, s) Copy(d, s, t->ncomp)
+
+#define Clear(d, n) memset(d, 0, (n)*sizeof(*(d)))
+
+#define XClear(d) Clear(d, t->ndim)
+
+#define FClear(d) Clear(d, t->ncomp)
+
+#define Zap(d) memset(d, 0, sizeof(d))
+
+#define MaxErr(avg) Max(t->epsrel*fabsx(avg), t->epsabs)
+
+#ifdef __cplusplus
+#define mallocset(p, n) (*(void **)&p = malloc(n))
+#define reallocset(p, n) (*(void **)&p = realloc(p, n))
+#else
+#define mallocset(p, n) (p = malloc(n))
+#define reallocset(p, n) (p = realloc(p, n))
+#endif
+
+#define Abort(s) abort1(s, __LINE__)
+#define abort1(s, line) abort2(s, line)
+#define abort2(s, line) { perror(s " " __FILE__ "(" #line ")"); exit(1); }
+
+#define Die(p) if( (p) == NULL ) Abort("malloc")
+
+#define MemAlloc(p, n) Die(mallocset(p, n))
+#define ReAlloc(p, n) Die(reallocset(p, n))
+#define Alloc(p, n) MemAlloc(p, (n)*sizeof(*p))
+
+#if __STDC_VERSION__ >= 199901L
+#define Sized(type, var, size) char var##_[size]; type *var = (type *)var##_
+#define Vector(type, var, n1) type var[n1]
+#define Array(type, var, n1, n2) type var[n1][n2]
+#else
+#define Sized(type, var, size) type *var = alloca(size)
+#define Vector(type, var, n1) type *var = alloca((n1)*sizeof(type))
+#define Array(type, var, n1, n2) type (*var)[n2] = alloca((n1)*(n2)*sizeof(type))
+#endif
+
+#define FORK_ONLY(...)
+#define SHM_ONLY(...)
+#define ShmAlloc(...)
+#define ShmFree(...)
+
+#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
+#define FORK_ONLY(...) __VA_ARGS__
+
+#ifdef HAVE_SHMGET
+#undef SHM_ONLY
+#define SHM_ONLY(...) __VA_ARGS__
+
+#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, 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, who) \
+  if( t->shmid != -1 ) { \
+    shmdt(t->frame); \
+    who##Free(t); \
+  }
+
+#endif
+#endif
+#endif
+  
+#define FrameAlloc(t, who) \
+  SHM_ONLY(ShmAlloc(t, who) else) \
+  MemAlloc(t->frame, t->nframe*SAMPLESIZE);
+
+#define FrameFree(t, who) \
+  DIV_ONLY(if( t->nframe )) { \
+    SHM_ONLY(ShmFree(t, who) else) \
+    free(t->frame); \
+  }
+
+
+#define StateDecl \
+char *statefile_tmp = NULL, *statefile_XXXXXX = NULL; \
+int statemsg = VERBOSE; \
+ssize_t ini = 1; \
+struct stat st
+
+#define StateSetup(t) if( (t)->statefile ) { \
+  if( *(t)->statefile == 0 ) (t)->statefile = NULL; \
+  else { \
+    ccount len = strlen((t)->statefile); \
+    statefile_tmp = alloca(len + 8); \
+    strcpy(statefile_tmp, (t)->statefile); \
+    statefile_XXXXXX = statefile_tmp + len; \
+  } \
+}
+
+typedef long long int signature_t;
+
+enum { signature = 0x41425543 };
+
+#define StateSignature(t, i) (signature + \
+  ((signature_t)(i) << 60) + \
+  ((signature_t)(t)->ncomp << 48) + \
+  ((signature_t)(t)->ndim << 32))
+
+#define StateReadTest(t) (t)->statefile && \
+  stat((t)->statefile, &st) == 0 && (st.st_mode & 0400)
+
+#define StateReadOpen(t, fd) do { \
+  int fd; \
+  if( (fd = open((t)->statefile, O_RDONLY)) != -1 ) { \
+    do
+
+#define StateRead(fd, buf, size) \
+  ini += size - read(fd, buf, size)
+
+#define StateReadClose(t, fd) \
+    while( (--ini, 0) ); \
+    close(fd); \
+  } \
+  if( ini | statemsg ) { \
+    char s[512]; \
+    sprintf(s, ini ? \
+      "\nError restoring state from %s, starting from scratch." : \
+      "\nRestored state from %s.", (t)->statefile); \
+    Print(s); \
+  } \
+} while( 0 )
+
+
+#define StateWriteTest(t) ((t)->statefile)
+
+#define StateWriteOpen(t, fd) do { \
+  ssize_t fail = 1; \
+  int fd; \
+  strcpy(statefile_XXXXXX, "-XXXXXX"); \
+  if( (fd = mkstemp(statefile_tmp)) != -1 ) { \
+    do
+
+#define StateWrite(fd, buf, size) \
+  fail += size - write(fd, buf, size)
+
+#define StateWriteClose(t, fd) \
+    while( (--fail, 0) ); \
+    close(fd); \
+    if( fail == 0 ) fail |= rename(statefile_tmp, (t)->statefile); \
+  } \
+  if( fail | statemsg ) { \
+    char s[512]; \
+    sprintf(s, fail ? \
+      "\nError saving state to %s." : \
+      "\nSaved state to %s.", (t)->statefile); \
+    Print(s); \
+    statemsg &= fail & -2; \
+  } \
+} while( 0 )
+
+
+#define StateRemove(t) \
+if( fail == 0 && (t)->statefile && KEEPFILE == 0 ) unlink((t)->statefile)
+
+
+#ifdef __cplusplus
+#define Extern extern "C"
+#else
+#define Extern extern
+typedef enum { false, true } bool;
+#endif
+
+typedef const char cchar;
+
+typedef const bool cbool;
+
+typedef const int cint;
+
+typedef const long clong;
+
+typedef const size_t csize_t;
+
+#define COUNT "%d"
+typedef /*unsigned*/ int count;
+typedef const count ccount;
+
+#ifdef LONGLONGINT
+#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"
+#define SHOW(r) (double)(r)
+	/* floating-point numbers are printed with SHOW */
+
+#if REALSIZE == 16
+#include <quadmath.h>
+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)(void *, cint *);
+
+typedef struct {
+  subroutine initfun;
+  void *initarg;
+  subroutine exitfun;
+  void *exitarg;
+  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
+#define SOBOL_MAXDIM 40
+
+/* length of state vector */
+#define MERSENNE_N 624
+
+/* period parameter */
+#define MERSENNE_M 397
+
+typedef struct {
+  void (*getrandom)(struct _this *t, real *x);
+  void (*skiprandom)(struct _this *t, cnumber n);
+  union {
+    struct {
+      real norm;
+      number v[SOBOL_MAXDIM][30], prev[SOBOL_MAXDIM];
+      number seq;
+    } sobol;
+    struct {
+      state_t state[MERSENNE_N];
+      count next;
+    } mersenne;
+    struct {
+      count n24, i24, j24, nskip;
+      int carry, state[24];
+    } ranlux;
+  };
+} RNGState;
+
+
+#if NOUNDERSCORE
+#define SUFFIX(s) s
+#else
+#define SUFFIX(s) s##_
+#endif
+
+#define EXPORT(s) EXPORT_(PREFIX(s))
+#define EXPORT_(s) SUFFIX(s)
+
+
+#define CString(cs, fs, len) { \
+  char *_s = NULL; \
+  if( fs ) { \
+    int _l = len; \
+    while( _l > 0 && fs[_l - 1] == ' ' ) --_l; \
+    if( _l > 0 && (_s = alloca(_l + 1)) ) { \
+      memcpy(_s, fs, _l); \
+      _s[_l] = 0; \
+    } \
+  } \
+  cs = _s; \
+}
+
+static inline real Sq(creal x) {
+  return x*x;
+}
+
+static inline real Min(creal a, creal b) {
+  return (a < b) ? a : b;
+}
+
+static inline real Max(creal a, creal b) {
+  return (a > b) ? a : b;
+}
+
+static inline real Weight(creal sum, creal sqsum, cnumber n) {
+  creal w = sqrtx(sqsum*n);
+  return (n - 1)/Max((w + sum)*(w - sum), NOTZERO);
+}
+
+
+/* (a < 0) ? -1 : 0 */
+#define NegQ(a) ((a) >> (sizeof(a)*8 - 1))
+
+/* (a < 0) ? -1 : 1 */
+#define Sign(a) (1 + 2*NegQ(a))
+
+/* (a < 0) ? 0 : a */
+#define IDim(a) ((a) & NegQ(-(a)))
+
+/* (a < b) ? a : b */
+#define IMin(a, b) ((a) - IDim((a) - (b)))
+
+/* (a > b) ? a : b */
+#define IMax(a, b) ((b) + IDim((a) - (b)))
+
+/* (a == 0) ? 0 : -1 */
+#define TrueQ(a) NegQ((a) | (-a))
+
+/* a + (a == 0) */
+#define Min1(a) ((a) + 1 + TrueQ(a))
+
+/* abs(a) + (a == 0) */
+#define Abs1(a) (((a) ^ NegQ(a)) - NegQ((a) - 1))
+
+
+#ifdef MLVERSION
+
+static inline void Print(MLCONST char *s)
+{
+  MLPutFunction(stdlink, "EvaluatePacket", 1);
+  MLPutFunction(stdlink, "Print", 1);
+  MLPutString(stdlink, s);
+  MLEndPacket(stdlink);
+
+  MLNextPacket(stdlink);
+  MLNewPacket(stdlink);
+}
+
+#else
+
+#define Print(s) puts(s); fflush(stdout)
+
+#endif
+
+#endif
+
diff --git a/Cuba/src/cuhre/Cuhre.c b/Cuba/src/cuhre/Cuhre.c
new file mode 100644
index 0000000000000000000000000000000000000000..6dc0aaa1d58f0633b12a6e67ae42c03814005f85
--- /dev/null
+++ b/Cuba/src/cuhre/Cuhre.c
@@ -0,0 +1,84 @@
+/*
+	Cuhre.c
+		Adaptive integration using cubature rules
+		by Thomas Hahn
+		last modified 22 Jul 14 th
+*/
+
+
+#define CUHRE
+#define ROUTINE "Cuhre"
+
+#include "decl.h"
+#include "CSample.c"
+
+/*********************************************************************/
+
+Extern void EXPORT(Cuhre)(ccount ndim, ccount ncomp,
+  Integrand integrand, void *userdata, cnumber nvec,
+  creal epsrel, creal epsabs,
+  cint flags, cnumber mineval, cnumber maxeval,
+  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 = 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, cnumber *pnvec,
+  creal *pepsrel, creal *pepsabs,
+  cint *pflags, cnumber *pmineval, cnumber *pmaxeval,
+  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 = 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/Cuba/src/cuhre/Cuhre.tm b/Cuba/src/cuhre/Cuhre.tm
new file mode 100644
index 0000000000000000000000000000000000000000..1902ab94f48ab5295764827379afc5b2a00dcd6a
--- /dev/null
+++ b/Cuba/src/cuhre/Cuhre.tm
@@ -0,0 +1,218 @@
+:Evaluate: BeginPackage["Cuba`"]
+
+:Evaluate: Cuhre::usage =
+	"Cuhre[f, {x, xmin, xmax}..] computes a numerical approximation to the integral of the real scalar or vector function f.
+	The output is a list with entries of the form {integral, error, chi-square probability} for each component of the integrand."
+
+:Evaluate: MinPoints::usage = "MinPoints is an option of Cuhre.
+	It specifies the minimum number of points to sample."
+
+:Evaluate: Key::usage = "Key is an option of Cuhre.
+	It specifies the basic integration rule:\n
+	7 = use a degree-7 rule,\n
+	9 = use a degree-9 rule,\n
+	11 = use a degree-11 rule (available only in 3 dimensions),\n
+	13 = use a degree-13 rule (available only in 2 dimensions),\n
+	otherwise the default rule is used: the degree-13 rule in 2 dimensions, the degree-11 rule in 3 dimensions, else the degree-9 rule."
+
+:Evaluate: StateFile::usage = "StateFile is an option of Cuhre.
+	It specifies a file in which the internal state is stored after each iteration and from which it can be restored on a subsequent run.
+	The state file is removed once the prescribed accuracy has been reached."
+
+:Evaluate: Final::usage = "Final is an option of Cuhre.
+	It can take the values Last or All which determine whether only the last (largest) or all sets of samples collected on a subregion over the iterations contribute to the final result."
+
+:Evaluate: RetainStateFile::usage = "RetainStateFile is an option of Cuhre.
+	It determines whether a chosen state file is kept even if the integration terminates normally."
+
+:Evaluate: Regions::usage = "Regions is an option of Cuhre.
+	It specifies whether the regions into which the integration region has been cut are returned together with the integration results."
+
+:Evaluate: Region::usage = "Region[ll, ur, res] describes a subregion:
+	ll and ur are multidimensional equivalents of the region's lower left and upper right corner.
+	res gives the integration results for the region in a list with entries of the form {integral, error} for each component of the integrand."
+
+:Evaluate: MapSample::usage = "MapSample is a function used to map the integrand over the points to be sampled."
+
+
+:Evaluate: Begin["`Cuhre`"]
+
+:Begin:
+:Function: Cuhre
+:Pattern: MLCuhre[ndim_, ncomp_,
+  epsrel_, epsabs_, flags_, mineval_, maxeval_,
+  key_, statefile_]
+:Arguments: {ndim, ncomp,
+  epsrel, epsabs, flags, mineval, maxeval,
+  key, statefile}
+:ArgumentTypes: {Integer, Integer,
+  Real64, Real64, Integer, Integer, Integer,
+  Integer, String}
+:ReturnType: Manual
+:End:
+
+:Evaluate: Attributes[Cuhre] = {HoldFirst}
+
+:Evaluate: Options[Cuhre] = {PrecisionGoal -> 3, AccuracyGoal -> 12,
+	MinPoints -> 0, MaxPoints -> 50000, Key -> 0, StateFile -> "",
+	Verbose -> 1, Final -> Last, RetainStateFile -> False,
+	Regions -> False, Compiled -> True}
+
+:Evaluate: Cuhre[f_, v:{_, _, _}.., opt___Rule] :=
+	Block[ {ff = HoldForm[f], ndim = Length[{v}], ncomp,
+	tags, vars, lower, range, jac, tmp, defs, intT,
+	rel, abs, mineval, maxeval, key, state, verbose, final,
+	retain, regions, compiled},
+	  Message[Cuhre::optx, #, Cuhre]&/@
+	    Complement[First/@ {opt}, tags = First/@ Options[Cuhre]];
+	  {rel, abs, mineval, maxeval, key, state,
+	    verbose, final, retain, regions, compiled} =
+	    tags /. {opt} /. Options[Cuhre];
+	  {vars, lower, range} = Transpose[{v}];
+	  jac = Simplify[Times@@ (range -= lower)];
+	  tmp = Array[tmpvar, ndim];
+	  defs = Simplify[lower + range tmp];
+	  Block[{Set}, define[compiled, tmp, Thread[vars = defs], jac]];
+	  intT = integrandT[f];
+	  Block[#,
+	    ncomp = Length[intT@@ RandomReal[1, ndim]];
+	    MLCuhre[ndim, ncomp, 10.^-rel, 10.^-abs,
+	      Min[Max[verbose, 0], 3] +
+	        If[final === Last, 4, 0] +
+	        If[TrueQ[retain], 16, 0] +
+	        If[TrueQ[regions], 128, 0],
+	      mineval, maxeval, key, state]
+	  ]& @ vars
+	]
+
+:Evaluate: tmpvar[n_] := ToExpression["Cuba`Cuhre`t" <> ToString[n]]
+
+:Evaluate: Attributes[foo] = {HoldAll}
+
+:Evaluate: define[True, tmp_, defs_, jac_] := (
+	TtoX := TtoX = Compile[tmp, defs];
+	integrandT[f_] := Compile[tmp, eval[defs, N[f jac]],
+	  {{_eval, _Real, 1}}] )
+
+:Evaluate: define[_, tmp_, defs_, jac_] := (
+	TtoX := TtoX = Function[tmp, defs];
+	integrandT[f_] := Function[tmp, eval[defs, N[f jac]]] )
+
+:Evaluate: eval[_, f_Real] = {f}
+
+:Evaluate: eval[_, f:{__Real}] = f
+
+:Evaluate: eval[x_, _] := (Message[Cuhre::badsample, ff, x]; {})
+
+:Evaluate: sample[x_] :=
+	Check[Flatten @ MapSample[intT@@ # &, Partition[x, ndim]], {}]
+
+:Evaluate: ValueQ[MapSample] || (MapSample = Map)
+
+:Evaluate: region[bounds_, r___] := Region[##, r]&@@
+	MapThread[TtoX, Partition[bounds, 2]]
+
+:Evaluate: Cuhre::badsample = "`` is not a real-valued function at ``."
+
+:Evaluate: Cuhre::baddim = "Cannot integrate in `` dimensions."
+
+:Evaluate: Cuhre::badcomp = "Cannot integrate `` components."
+
+:Evaluate: Cuhre::accuracy =
+	"Desired accuracy was not reached within `` function evaluations on `` subregions."
+
+:Evaluate: Cuhre::success = "Needed `` function evaluations on `` subregions."
+
+:Evaluate: End[]
+
+:Evaluate: EndPackage[]
+
+
+/*
+	Cuhre.tm
+		Adaptive integration using cubature rules
+		by Thomas Hahn
+		last modified 13 Mar 15 th
+*/
+
+
+#define CUHRE
+#define ROUTINE "Cuhre"
+
+#include "mathlink.h"
+#include "decl.h"
+#include "MSample.c"
+
+/*********************************************************************/
+
+static void Status(MLCONST char *msg, cint n1, cint n2)
+{
+  MLPutFunction(stdlink, "CompoundExpression", 2);
+  MLPutFunction(stdlink, "Message", 3);
+  MLPutFunction(stdlink, "MessageName", 2);
+  MLPutSymbol(stdlink, "Cuhre");
+  MLPutString(stdlink, msg);
+  MLPutInteger(stdlink, n1);
+  MLPutInteger(stdlink, n2);
+}
+
+/*********************************************************************/
+
+static inline void DoIntegrate(This *t)
+{
+  real integral[NCOMP], error[NCOMP], prob[NCOMP];
+  cint fail = Integrate(t, integral, error, prob);
+
+  if( fail < 0 ) {
+    switch( fail ) {
+    case -99:
+      MLPutFunction(stdlink, "Abort", 0);
+      return;
+    case -1:
+      Status("baddim", t->ndim, 0);
+      break;
+    case -2:
+      Status("badcomp", t->ncomp, 0);
+      break;
+    }
+    MLPutSymbol(stdlink, "$Failed");
+  }
+  else {
+    Status(fail ? "accuracy" : "success", t->neval, t->nregions);
+    MLPutFunction(stdlink, "Thread", 1);
+    MLPutFunction(stdlink, "List", 3);
+    MLPutRealxList(stdlink, integral, t->ncomp);
+    MLPutRealxList(stdlink, error, t->ncomp);
+    MLPutRealxList(stdlink, prob, t->ncomp);
+  }
+}
+
+/*********************************************************************/
+
+void Cuhre(cint ndim, cint ncomp,
+  creal epsrel, creal epsabs,
+  cint flags, cnumber mineval, cnumber maxeval,
+  cint key, cchar *statefile)
+{
+  This t;
+  t.ndim = ndim;
+  t.ncomp = ncomp;
+  t.epsrel = epsrel;
+  t.epsabs = epsabs;
+  t.flags = flags;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.key = key;
+  t.statefile = statefile;
+
+  DoIntegrate(&t);
+  MLEndPacket(stdlink);
+}
+
+/*********************************************************************/
+
+int main(int argc, char **argv)
+{
+  return MLMain(argc, argv);
+}
+
diff --git a/Cuba/src/cuhre/Integrate.c b/Cuba/src/cuhre/Integrate.c
new file mode 100644
index 0000000000000000000000000000000000000000..27fc7e2c1f5f2ac3e0d732212556fa00ab68b49b
--- /dev/null
+++ b/Cuba/src/cuhre/Integrate.c
@@ -0,0 +1,282 @@
+/*
+	Integrate.c
+		integrate over the unit hypercube
+		this file is part of Cuhre
+		checkpointing by B. Chokoufe
+		last modified 14 Mar 15 th
+*/
+
+
+#define POOLSIZE 1024
+
+typedef struct pool {
+  struct pool *next;
+#if REALSIZE > 8
+  void *dummy; /* for alignment */
+#endif
+  char region[];
+} Pool;
+
+typedef struct {
+  signature_t signature;
+  count nregions, ncur;
+  number neval;
+  Totals totals[];
+} State;
+
+static int Integrate(This *t, real *integral, real *error, real *prob)
+{
+  StateDecl;
+  csize_t statesize = sizeof(State) + NCOMP*sizeof(Totals);
+  Sized(State, state, statesize);
+  csize_t regionsize = RegionSize;
+  csize_t poolsize = sizeof(Pool) + POOLSIZE*regionsize;
+  Vector(Result, result, NCOMP);
+  Vector(char, out, 128*NCOMP + 256);
+
+  Totals *tot, *Tot = state->totals + t->ncomp;
+  Result *res, *resL, *resR;
+  Bounds *b, *B;
+  Pool *cur = NULL, *pool;
+  Region *region;
+  count comp, ipool, npool;
+  int fail;
+
+  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,
+      ML_NOT(t->nvec,)
+      SHOW(t->epsrel), SHOW(t->epsabs),
+      t->flags, t->mineval, t->maxeval,
+      t->key,
+      t->statefile);
+    Print(out);
+  }
+
+  if( BadComponent(t) ) return -2;
+  if( BadDimension(t) ) return -1;
+
+  t->epsabs = Max(t->epsabs, NOTZERO);
+
+  RuleAlloc(t);
+  t->mineval = IMax(t->mineval, t->rule.n + 1);
+  FrameAlloc(t, Master);
+  ForkCores(t);
+
+  if( (fail = setjmp(t->abort)) ) goto abort;
+
+  StateSetup(t);
+
+  if( StateReadTest(t) ) {
+    StateReadOpen(t, fd) {
+      Pool *prev = NULL;
+      int size;
+      if( read(fd, state, statesize) != statesize ||
+          state->signature != StateSignature(t, 4) ) break;
+      t->neval = state->neval;
+      t->nregions = state->nregions;
+      do {
+        MemAlloc(cur, poolsize);
+        cur->next = prev;
+        prev = cur;
+        size = read(fd, cur, poolsize);
+      } while( size == poolsize );
+      if( size != state->ncur*regionsize ) break;
+    } StateReadClose(t, fd);
+  }
+
+  if( ini ) {
+    MemAlloc(cur, poolsize);
+    cur->next = NULL;
+    state->ncur = t->nregions = 1;
+
+    region = (Region *)cur->region;
+    region->div = 0;
+    for( B = (b = region->bounds) + t->ndim; b < B; ++b ) {
+      b->lower = 0;
+      b->upper = 1;
+    }
+
+    t->neval = 0;
+    Sample(t, region);
+
+    for( res = RegionResult(region), tot = state->totals;
+         tot < Tot; ++res, ++tot ) {
+      tot->avg = tot->lastavg = tot->guess = res->avg;
+      tot->err = tot->lasterr = res->err;
+      tot->weightsum = 1/Max(Sq(res->err), NOTZERO);
+      tot->avgsum = tot->weightsum*res->avg;
+      tot->chisq = tot->chisqsum = tot->chisum = 0;
+    }
+  }
+
+  /* main iteration loop */
+  for( ; ; ) {
+    count maxcomp, bisectdim;
+    real maxratio, maxerr;
+    Region *regionL, *regionR;
+    Bounds *bL, *bR;
+
+    if( VERBOSE ) {
+      char *oe = out + sprintf(out, "\n"
+        "Iteration " COUNT ":  " NUMBER " integrand evaluations so far",
+        t->nregions, t->neval);
+      for( tot = state->totals, comp = 0; tot < Tot; ++tot )
+        oe += sprintf(oe, "\n[" COUNT "] "
+          REAL " +- " REAL "  \tchisq " REAL " (" COUNT " df)",
+          ++comp, SHOW(tot->avg), SHOW(tot->err),
+          SHOW(tot->chisq), t->nregions - 1);
+      Print(out);
+    }
+
+    maxratio = -INFTY;
+    maxcomp = 0;
+    for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
+      creal ratio = tot->err/MaxErr(tot->avg);
+      if( ratio > maxratio ) {
+        maxratio = ratio;
+        maxcomp = comp;
+      }
+    }
+
+    if( maxratio <= 1 && t->neval >= t->mineval ) break;
+
+    if( t->neval >= t->maxeval ) {
+      fail = 1;
+      break;
+    }
+
+    maxerr = -INFTY;
+    regionL = (Region *)cur->region;
+    npool = state->ncur;
+    for( pool = cur; pool; npool = POOLSIZE, pool = pool->next )
+      for( ipool = 0; ipool < npool; ++ipool ) {
+        Region *region = RegionPtr(pool, ipool);
+        creal err = RegionResult(region)[maxcomp].err;
+        if( err > maxerr ) {
+          maxerr = err;
+          regionL = region;
+        }
+      }
+
+    if( state->ncur == POOLSIZE ) {
+      Pool *prev = cur;
+      MemAlloc(cur, poolsize);
+      cur->next = prev;
+      state->ncur = 0;
+    }
+    regionR = RegionPtr(cur, state->ncur++);
+
+    regionR->div = ++regionL->div;
+    FCopy(result, RegionResult(regionL));
+    XCopy(regionR->bounds, regionL->bounds);
+
+    bisectdim = result[maxcomp].bisectdim;
+    bL = &regionL->bounds[bisectdim];
+    bR = &regionR->bounds[bisectdim];
+    bL->upper = bR->lower = .5*(bL->upper + bL->lower);
+
+    Sample(t, regionL);
+    Sample(t, regionR);
+
+    for( res = result,
+         resL = RegionResult(regionL),
+         resR = RegionResult(regionR),
+         tot = state->totals;
+         tot < Tot; ++res, ++resL, ++resR, ++tot ) {
+      real diff, err, w, avg, sigsq;
+
+      tot->lastavg += diff = resL->avg + resR->avg - res->avg;
+
+      diff = fabsx(.25*diff);
+      err = resL->err + resR->err;
+      if( err > 0 ) {
+        creal c = 1 + 2*diff/err;
+        resL->err *= c;
+        resR->err *= c;
+      }
+      resL->err += diff;
+      resR->err += diff;
+      tot->lasterr += resL->err + resR->err - res->err;
+
+      tot->weightsum += w = 1/Max(Sq(tot->lasterr), NOTZERO);
+      sigsq = 1/tot->weightsum;
+      tot->avgsum += w*tot->lastavg;
+      avg = sigsq*tot->avgsum;
+      tot->chisum += w *= tot->lastavg - tot->guess;
+      tot->chisqsum += w*tot->lastavg;
+      tot->chisq = tot->chisqsum - avg*tot->chisum;
+
+      if( LAST ) {
+        tot->avg = tot->lastavg;
+        tot->err = tot->lasterr;
+      }
+      else {
+        tot->avg = avg;
+        tot->err = sqrtx(sigsq);
+      }
+    }
+    ++t->nregions;
+
+    if( StateWriteTest(t) ) {
+      StateWriteOpen(t, fd) {
+        Pool *prev = cur;
+        state->signature = StateSignature(t, 4);
+        state->nregions = t->nregions;
+        state->neval = t->neval;
+        StateWrite(fd, state, statesize);
+        while( (prev = prev->next) ) StateWrite(fd, prev, poolsize);
+        StateWrite(fd, cur, state->ncur*regionsize);
+      } StateWriteClose(t, fd);
+    }
+  }
+
+  for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
+    integral[comp] = tot->avg;
+    error[comp] = tot->err;
+    prob[comp] = ChiSquare(tot->chisq, t->nregions - 1);
+  }
+
+#ifdef MLVERSION
+  if( REGIONS ) {
+    MLPutFunction(stdlink, "List", 2);
+    MLPutFunction(stdlink, "List", t->nregions);
+
+    npool = state->ncur;
+    for( pool = cur; pool; npool = POOLSIZE, pool = pool->next )
+      for( ipool = 0; ipool < npool; ++ipool ) {
+        Region const *region = RegionPtr(pool, ipool);
+        Result *Res;
+
+        MLPutFunction(stdlink, "Cuba`Cuhre`region", 2);
+        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};
+          MLPutRealxList(stdlink, r, Elements(r));
+        }
+      }
+  }
+#endif
+
+abort:
+  while( (pool = cur) ) {
+    cur = cur->next;
+    free(pool);
+  }
+  FrameFree(t, Master);
+  RuleFree(t);
+
+  StateRemove(t);
+
+  return fail;
+}
+
diff --git a/Cuba/src/cuhre/Rule.c b/Cuba/src/cuhre/Rule.c
new file mode 100644
index 0000000000000000000000000000000000000000..129e9689b45bffd97b418ad702b77455d6433572
--- /dev/null
+++ b/Cuba/src/cuhre/Rule.c
@@ -0,0 +1,757 @@
+/*
+	Rule.c
+		integration with cubature rules
+		code lifted with minor modifications from DCUHRE
+		by J. Berntsen, T. Espelid, and A. Genz
+		this file is part of Cuhre
+		last modified 7 May 15 th
+*/
+
+
+#define NextSet(p) p = (Set *)((char *)p + setsize)
+#define IndexSet(p, n) ((Set *)((char *)p + n*setsize))
+
+/*********************************************************************/
+
+static void Rule13Alloc(This *t)
+{
+  static creal w[][nrules] = {
+    { .00844923090033615,     .3213775489050763,     .3372900883288987,
+     -.8264123822525677,      .6539094339575232 },
+    { .023771474018994404,   -.1767341636743844,    -.1644903060344491,
+      .306583861409436,      -.2041614154424632},
+    { .02940016170142405,     .07347600537466073,    .07707849911634623,
+      .002389292538329435,   -.174698151579499 },
+    { .006644436465817374,   -.03638022004364754,   -.03804478358506311,
+     -.1343024157997222,      .03937939671417803 },
+    { .0042536044255016,      .021252979220987123,   .02223559940380806,
+      .08833366840533902,     .006974520545933992 },
+    { 0,                      .1460984204026913,     .1480693879765931,
+      0,                      0 },
+    { .0040664827465935255,   .017476132861520992,  4.467143702185815e-6,
+      .0009786283074168292,   .0066677021717782585 },
+    { .03362231646315497,     .1444954045641582,     .150894476707413,
+     -.1319227889147519,      .05512960621544304 },
+    { .033200804136503725,    .0001307687976001325, 3.6472001075162155e-5,
+      .00799001220015063,     .05443846381278608 },
+    { .014093686924979677,    .0005380992313941161,  .000577719899901388,
+      .0033917470797606257,   .02310903863953934 },
+    { .000977069770327625,    .0001042259576889814,  .0001041757313688177,
+      .0022949157182832643,   .01506937747477189 },
+    { .007531996943580376,   -.001401152865045733,  -.001452822267047819,
+     -.01358584986119197,    -.060570216489018905 },
+    { .02577183086722915,     .008041788181514763,   .008338339968783704,
+      .04025866859057809,     .04225737654686337},
+    { .015625,               -.1420416552759383,    -.147279632923196,
+      .003760268580063992,    .02561989142123099 }
+  };
+
+  static creal g[] = {
+     .12585646717265545,      .3506966822267133,
+     .4795480315809981,       .4978005239276064,
+     .25,                     .07972723291487795,
+     .1904495567970094,       .3291384627633596,
+     .43807365825146577,      .499121592026599,
+     .4895111329084231,       .32461421628226944,
+     .43637106005656195,      .1791307322940614,
+     .2833333333333333,       .1038888888888889 };
+
+  enum { nsets = 14, ndim = 2 };
+
+  count n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  Copy(last->weight, w[0], nrules);
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[1], nrules);
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[2], nrules);
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[3], nrules);
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[4], nrules);
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[5], nrules);
+  last->gen[0] = g[4];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[6], nrules);
+  last->gen[0] = g[5];
+  last->gen[1] = g[5];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[7], nrules);
+  last->gen[0] = g[6];
+  last->gen[1] = g[6];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[8], nrules);
+  last->gen[0] = g[7];
+  last->gen[1] = g[7];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[9], nrules);
+  last->gen[0] = g[8];
+  last->gen[1] = g[8];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[10], nrules);
+  last->gen[0] = g[9];
+  last->gen[1] = g[9];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[11], nrules);
+  last->gen[0] = g[10];
+  last->gen[1] = g[11];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[12], nrules);
+  last->gen[0] = g[12];
+  last->gen[1] = g[13];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[13], nrules);
+  last->gen[0] = g[14];
+  last->gen[1] = g[15];
+
+  t->rule.first = first;
+  t->rule.last = last;
+  t->rule.errcoeff[0] = 10;
+  t->rule.errcoeff[1] = 1;
+  t->rule.errcoeff[2] = 5;
+  t->rule.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule11Alloc(This *t)
+{
+  static creal w[][nrules] = {
+    { .0009903847688882167,  1.715006248224684,     1.936014978949526,
+      .517082819560576,      2.05440450381852 },
+    { .0084964717409851,     -.3755893815889209,    -.3673449403754268,
+      .01445269144914044,     .013777599884901202 },
+    { .00013587331735072814,  .1488632145140549,     .02929778657898176,
+     -.3601489663995932,     -.576806291790441 },
+    { .022982920777660364,   -.2497046640620823,    -.1151883520260315,
+      .3628307003418485,      .03726835047700328 },
+    { .004202649722286289,    .1792501419135204,     .05086658220872218,
+      .007148802650872729,    .0068148789397772195 },
+    { .0012671889041675774,   .0034461267589738897,  .04453911087786469,
+     -.09222852896022966,     .057231697338518496 },
+    { .0002109560854981544,  -.005140483185555825,  -.022878282571259,
+      .01719339732471725,    -.044930187438112855 },
+    { .016830857056410086,    .006536017839876424,   .02908926216345833,
+     -.102141653746035,       .027292365738663484 },
+    { .00021876823557504823, -.00065134549392297,   -.002898884350669207,
+     -.007504397861080493,    .000354747395055699 },
+    { .009690420479796819,   -.006304672433547204,  -.028059634133074954,
+      .01648362537726711,     .01571366799739551 },
+    { .030773311284628138,    .01266959399788263,    .05638741361145884,
+      .05234610158469334,     .049900992192785674 },
+    { .0084974310856038,     -.005454241018647931,  -.02427469611942451,
+      .014454323316130661,    .0137791555266677 },
+    { .0017749535291258914,   .004826995274768427,   .021483070341828822,
+      .003019236275367777,    .0028782064230998723 }
+  };
+
+  static creal g[] = {
+     .095,                    .25,
+     .375,                    .4,
+     .4975,                   .49936724991757,
+     .38968518428362114,      .49998494965443835,
+     .3951318612385894,       .22016983438253684,
+     .4774686911397297,       .2189239229503431,
+     .4830546566815374,       .2288552938881567 };
+
+  enum { nsets = 13, ndim = 3 };
+
+  count n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  Copy(last->weight, w[0], nrules);
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[1], nrules);
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[2], nrules);
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[3], nrules);
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[4], nrules);
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[5], nrules);
+  last->gen[0] = g[4];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[6], nrules);
+  last->gen[0] = g[5];
+  last->gen[1] = g[5];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[7], nrules);
+  last->gen[0] = g[6];
+  last->gen[1] = g[6];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[8], nrules);
+  last->gen[0] = g[7];
+  last->gen[1] = g[7];
+  last->gen[2] = g[7];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[9], nrules);
+  last->gen[0] = g[8];
+  last->gen[1] = g[8];
+  last->gen[2] = g[8];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[10], nrules);
+  last->gen[0] = g[9];
+  last->gen[1] = g[9];
+  last->gen[2] = g[9];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2);
+  Copy(last->weight, w[11], nrules);
+  last->gen[0] = g[10];
+  last->gen[1] = g[11];
+  last->gen[2] = g[11];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2);
+  Copy(last->weight, w[12], nrules);
+  last->gen[0] = g[12];
+  last->gen[1] = g[12];
+  last->gen[2] = g[13];
+
+  t->rule.first = first;
+  t->rule.last = last;
+  t->rule.errcoeff[0] = 4;
+  t->rule.errcoeff[1] = .5;
+  t->rule.errcoeff[2] = 3;
+  t->rule.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule9Alloc(This *t)
+{
+  static creal w[] = {
+    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[] = {
+    RC(.4779536579022695061928604197171830064732),
+    RC(.2030285873691198677998034402373279133258),
+    RC(.4476273546261781288207704806530998539285),
+    RC(.125),
+    RC(.3430378987808781457001426145164678603407) };
+
+  enum { nsets = 9 };
+
+  ccount ndim = t->ndim;
+  ccount twondim = 1 << ndim;
+  count dim, n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  last->weight[0] = ndim*(ndim*(ndim*w[0] + w[1]) + w[2]) + w[3];
+  last->weight[1] = ndim*(ndim*(ndim*w[4] + w[5]) + w[6]) - w[7];
+  last->weight[2] = ndim*w[8] - last->weight[1];
+  last->weight[3] = ndim*(ndim*w[9] + w[10]) - 1 + last->weight[0];
+  last->weight[4] = ndim*w[11] + 1 - last->weight[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = ndim*(ndim*w[12] + w[13]) + w[14];
+  last->weight[1] = ndim*(ndim*w[15] + w[16]) + w[17];
+  last->weight[2] = w[18] - last->weight[1];
+  last->weight[3] = ndim*w[19] + w[20] + last->weight[0];
+  last->weight[4] = w[21] - last->weight[0];
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = ndim*w[22] + w[23];
+  last->weight[1] = ndim*w[24] + w[25];
+  last->weight[2] = w[26] - last->weight[1];
+  last->weight[3] = ndim*w[27] + w[28];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[29];
+  last->weight[1] = w[30];
+  last->weight[2] = -w[29];
+  last->weight[3] = w[31];
+  last->weight[4] = -w[29];
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[2] = w[32];
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  last->weight[0] = w[33] - ndim*w[12];
+  last->weight[1] = w[34] - ndim*w[15];
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = w[35] + last->weight[0];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  last->weight[0] = w[36];
+  last->weight[1] = w[37];
+  last->weight[2] = -w[37];
+  last->weight[3] = w[38];
+  last->weight[4] = -w[36];
+  last->gen[0] = g[0];
+  last->gen[1] = g[1];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  last->weight[0] = w[39];
+  last->weight[1] = w[40];
+  last->weight[2] = -w[40];
+  last->weight[3] = w[39];
+  last->weight[4] = -w[39];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+  last->gen[2] = g[0];
+
+  NextSet(last);
+  n += last->n = twondim;
+  last->weight[0] = w[41]/twondim;
+  last->weight[1] = w[7]/twondim;
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = last->weight[0];
+  last->weight[4] = -last->weight[0];
+  for( dim = 0; dim < ndim; ++dim )
+    last->gen[dim] = g[4];
+
+  t->rule.first = first;
+  t->rule.last = last;
+  t->rule.errcoeff[0] = 5;
+  t->rule.errcoeff[1] = 1;
+  t->rule.errcoeff[2] = 5;
+  t->rule.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule7Alloc(This *t)
+{
+  static creal w[] = {
+    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[] = {
+    RC(.4779536579022695061928604197171830064732),
+    RC(.2030285873691198677998034402373279133258),
+    RC(.375),
+    RC(.3430378987808781457001426145164678603407) };
+
+  enum { nsets = 6 };
+
+  ccount ndim = t->ndim;
+  ccount twondim = 1 << ndim;
+  count dim, n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  last->weight[0] = ndim*(ndim*w[0] + w[1]) + w[2];
+  last->weight[1] = ndim*(ndim*w[3] + w[4]) - w[5];
+  last->weight[2] = ndim*w[6] - last->weight[1];
+  last->weight[3] = ndim*(ndim*w[7] + w[8]) - w[9];
+  last->weight[4] = 1 - last->weight[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[10];
+  last->weight[1] = w[11];
+  last->weight[2] = -w[10];
+  last->weight[3] = w[12];
+  last->weight[4] = -w[10];
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[13] - ndim*w[0];
+  last->weight[1] = w[14] - ndim*w[3];
+  last->weight[2] = w[15] - last->weight[1];
+  last->weight[3] = w[16] - ndim*w[7];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[2] = w[17];
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  last->weight[0] = -w[7];
+  last->weight[1] = w[18];
+  last->weight[2] = -w[18];
+  last->weight[3] = w[19];
+  last->weight[4] = w[7];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+
+  NextSet(last);
+  n += last->n = twondim;
+  last->weight[0] = w[20]/twondim;
+  last->weight[1] = w[5]/twondim;
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = w[9]/twondim;
+  last->weight[4] = -last->weight[0];
+  for( dim = 0; dim < ndim; ++dim )
+    last->gen[dim] = g[3];
+
+  t->rule.first = first;
+  t->rule.last = last;
+  t->rule.errcoeff[0] = 5;
+  t->rule.errcoeff[1] = 1;
+  t->rule.errcoeff[2] = 5;
+  t->rule.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static inline void RuleAlloc(This *t)
+{
+  if( t->key == 13 && t->ndim == 2 ) Rule13Alloc(t);
+  else if( t->key == 11 && t->ndim == 3 ) Rule11Alloc(t);
+  else if( t->key == 9 ) Rule9Alloc(t);
+  else if( t->key == 7 ) Rule7Alloc(t);
+  else {
+    if( t->ndim == 2 ) Rule13Alloc(t);
+    else if( t->ndim == 3 ) Rule11Alloc(t);
+    else Rule9Alloc(t);
+  }
+}
+
+/*********************************************************************/
+
+static inline void RuleFree(cThis *t)
+{
+  free(t->rule.first);
+}
+
+/*********************************************************************/
+
+static real *ExpandFS(cThis *t, cBounds *b, real *g, real *x)
+{
+  count dim, ndim = t->ndim;
+
+next:
+  /* Compute centrally symmetric sum for permutation of G */
+
+  for( dim = 0; dim < ndim; ++dim )
+    *x++ = (.5 + g[dim])*b[dim].lower + (.5 - g[dim])*b[dim].upper;
+
+  for( dim = 0; dim < ndim; ) {
+    g[dim] = -g[dim];
+    if( g[dim++] < 0 ) goto next;
+  }
+
+  /* Find next distinct permutation of G and loop back for next sum.
+     Permutations are generated in reverse lexicographic order. */
+
+  for( dim = 1; dim < ndim; ++dim ) {
+    creal gd = g[dim];
+    if( g[dim - 1] > gd ) {
+      count i, j = dim, ix = dim, dx = dim - 1;
+      for( i = 0; i < --j; ++i ) {
+        creal tmp = g[i];
+        g[i] = g[j];
+        g[j] = tmp;
+        if( tmp <= gd ) --dx;
+        if( g[i] > gd ) ix = i;
+      }
+      if( g[dx] <= gd ) dx = ix;
+      g[dim] = g[dx];
+      g[dx] = gd;
+      goto next;
+    }
+  }
+
+  /* Restore original order to generators */
+
+  for( dim = 0; dim < --ndim; ++dim ) {
+    creal tmp = g[dim];
+    g[dim] = g[ndim];
+    g[ndim] = tmp;
+  }
+
+  return x;
+}
+
+/*********************************************************************/
+
+static void Sample(This *t, Region *region)
+{
+  csize_t setsize = SetSize;
+  creal vol = ldexp(1., -region->div);
+
+  real *x = t->frame, *f = x + t->rule.n*t->ndim;
+  Set *first = t->rule.first, *last = t->rule.last, *s;
+  Bounds *b, *B = region->bounds + t->ndim;
+  Result *result = RegionResult(region), *res, *Res = result + t->ncomp;
+  creal *errcoeff = t->rule.errcoeff;
+  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;
+  real maxrange = 0;
+
+  for( b = region->bounds, dim = 0; b < B; ++b, ++dim ) {
+    creal range = b->upper - b->lower;
+    if( range > maxrange ) {
+      maxrange = range;
+      maxdim = dim;
+    }
+  }
+
+  for( s = first; s <= last; NextSet(s) )
+    if( s->n ) x = ExpandFS(t, region->bounds, s->gen, x);
+
+  DoSample(t, t->rule.n, t->frame, f);
+
+  for( res = result; res < Res; ++res ) {
+    real sum[nrules];
+    creal *f1 = f;
+    creal base = *f1*2*(1 - ratio);
+    real maxdiff = 0;
+    count bisectdim = maxdim;
+
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      creal *fp = f1 + t->ncomp;
+      creal *fm = fp + t->ncomp;
+      creal fourthdiff = fabsx(base +
+        ratio*(fp[0] + fm[0]) - (fp[offset] + fm[offset]));
+      f1 = fm;
+      if( fourthdiff > maxdiff ) {
+        maxdiff = fourthdiff;
+        bisectdim = dim;
+      }
+    }
+    res->bisectdim = bisectdim;
+
+    f1 = f++;
+    Zap(sum);
+    for( s = first; s <= last; NextSet(s) )
+      for( n = s->n; n; --n ) {
+        creal fun = *f1;
+        f1 += t->ncomp;
+        for( rul = 0; rul < nrules; ++rul )
+          sum[rul] += fun*s->weight[rul];
+      }
+
+    /* Search for the null rule, in the linear space spanned by two
+       successive null rules in our sequence, which gives the greatest
+       error estimate among all normalized (1-norm) null rules in this
+       space. */
+
+    for( rul = 1; rul < nrules - 1; ++rul ) {
+      real maxerr = 0;
+      for( s = first; s <= last; NextSet(s) )
+        maxerr = Max(maxerr,
+          fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
+      sum[rul] = maxerr;
+    }
+
+    res->avg = vol*sum[0];
+    res->err = vol*(
+      (errcoeff[0]*sum[1] <= sum[2] && errcoeff[0]*sum[2] <= sum[3]) ?
+        errcoeff[1]*sum[1] :
+        errcoeff[2]*Max(Max(sum[1], sum[2]), sum[3]) );
+  }
+
+  if( VERBOSE > 2 ) {
+    Vector(char, out, 64*NDIM + 128*NCOMP);
+    char *oe = out;
+    count comp;
+    cchar *msg = "\nRegion (" REALF ") - (" REALF ")";
+
+    for( b = region->bounds; b < B; ++b ) {
+      oe += sprintf(oe, msg, b->lower, b->upper);
+      msg = "\n       (" REALF ") - (" REALF ")";
+    }
+
+    for( res = result, comp = 0; res < Res; ++res )
+      oe += sprintf(oe, "\n[" COUNT "] "
+        REAL " +- " REAL, ++comp, SHOW(res->avg), SHOW(res->err));
+
+    Print(out);
+  }
+}
+
diff --git a/Cuba/src/cuhre/common.c b/Cuba/src/cuhre/common.c
new file mode 100644
index 0000000000000000000000000000000000000000..fcd4403fb8c8bcef6efc1fc76a2527d8888ab0fe
--- /dev/null
+++ b/Cuba/src/cuhre/common.c
@@ -0,0 +1,23 @@
+/*
+	common.c
+		includes most of the modules
+		this file is part of Cuhre
+		last modified 2 Aug 13 11 th
+*/
+
+
+#include "ChiSquare.c"
+#include "Rule.c"
+
+static inline bool BadDimension(cThis *t)
+{
+  if( t->ndim > MAXDIM ) return true;
+  return t->ndim < 2;
+}
+
+static inline bool BadComponent(cThis *t)
+{
+  if( t->ncomp > MAXCOMP ) return true;
+  return t->ncomp < 1;
+}
+
diff --git a/Cuba/src/cuhre/decl.h b/Cuba/src/cuhre/decl.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf924ba0126e2152eac6c8f9f600b8a55f71a8e7
--- /dev/null
+++ b/Cuba/src/cuhre/decl.h
@@ -0,0 +1,89 @@
+/*
+	decl.h
+		Type declarations
+		this file is part of Cuhre
+		last modified 21 Jul 14 th
+*/
+
+
+#include "stddecl.h"
+
+typedef struct {
+  real avg, err;
+  count bisectdim;
+} Result;
+
+typedef const Result cResult;
+
+typedef struct {
+  real avg, err, lastavg, lasterr;
+  real weightsum, avgsum;
+  real guess, chisum, chisqsum, chisq;
+} Totals;
+
+typedef const Totals cTotals;
+
+typedef struct {
+  real lower, upper;
+} Bounds;
+
+typedef const Bounds cBounds;
+
+enum { nrules = 5 };
+
+typedef struct {
+  count n;
+  real weight[nrules], scale[nrules], norm[nrules];
+  real gen[];
+} Set;
+
+#define SetSize (sizeof(Set) + t->ndim*sizeof(real))
+
+typedef struct {
+  Set *first, *last;
+  real errcoeff[3];
+  count n;
+} Rule;
+
+typedef const Rule cRule;
+
+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
+  SHM_ONLY(int shmid;)
+  Spin *spin;
+#endif
+#endif
+  real *frame;
+  real epsrel, epsabs;
+  int flags;
+  number mineval, maxeval;
+  count key, nregions;
+  cchar *statefile;
+  number neval;
+  Rule rule;
+  jmp_buf abort;
+} This;
+
+#define nframe rule.n
+
+typedef const This cThis;
+
+typedef struct region {
+  count div;
+  Bounds bounds[];
+} Region;
+
+#define RegionSize (sizeof(Region) + t->ndim*sizeof(Bounds) + t->ncomp*sizeof(Result))
+
+#define RegionResult(r) ((Result *)(r->bounds + t->ndim))
+
+#define RegionPtr(p, n) ((Region *)((char *)p->region + (n)*regionsize))
+
diff --git a/Cuba/src/divonne/Divonne.c b/Cuba/src/divonne/Divonne.c
new file mode 100644
index 0000000000000000000000000000000000000000..444dddde8c6b2bb356079437b814a2a5d055dc92
--- /dev/null
+++ b/Cuba/src/divonne/Divonne.c
@@ -0,0 +1,119 @@
+/*
+	Divonne.c
+		Multidimensional integration by partitioning
+		originally by J.H. Friedman and M.H. Wright
+		(CERNLIB subroutine D151)
+		this version by Thomas Hahn
+		last modified 22 Jul 14 th
+*/
+
+#define DIVONNE
+#define ROUTINE "Divonne"
+
+#include "decl.h"
+#include "CSample.c"
+
+/*********************************************************************/
+
+Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp,
+  Integrand integrand, void *userdata, cnumber nvec,
+  creal epsrel, creal epsabs,
+  cint flags, cint seed,
+  cnumber mineval, cnumber maxeval,
+  cint key1, cint key2, cint key3, ccount maxpass,
+  creal border, creal maxchisq, creal mindeviation,
+  cnumber ngiven, ccount ldxgiven, real *xgiven,
+  cnumber nextra, PeakFinder peakfinder,
+  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 = MaxVerbose(flags);
+  t.seed = seed;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.key1 = key1;
+  t.key2 = key2;
+  t.key3 = key3;
+  t.maxpass = maxpass;
+  t.border.upper = 1 - (t.border.lower = border);
+  t.maxchisq = maxchisq;
+  t.mindeviation = mindeviation;
+  t.ngiven = ngiven;
+  t.xgiven = xgiven;
+  t.ldxgiven = ldxgiven;
+  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, cnumber *pnvec,
+  creal *pepsrel, creal *pepsabs,
+  cint *pflags, cint *pseed,
+  cnumber *pmineval, cnumber *pmaxeval,
+  cint *pkey1, cint *pkey2, cint *pkey3, ccount *pmaxpass,
+  creal *pborder, creal *pmaxchisq, creal *pmindeviation,
+  cnumber *pngiven, ccount *pldxgiven, real *xgiven,
+  cnumber *pnextra, PeakFinder peakfinder,
+  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 = MaxVerbose(*pflags);
+  t.seed = *pseed;
+  t.mineval = *pmineval;
+  t.maxeval = *pmaxeval;
+  t.key1 = *pkey1;
+  t.key2 = *pkey2;
+  t.key3 = *pkey3;
+  t.maxpass = *pmaxpass;
+  t.border.upper = 1 - (t.border.lower = *pborder);
+  t.maxchisq = *pmaxchisq;
+  t.mindeviation = *pmindeviation;
+  t.ngiven = *pngiven;
+  t.xgiven = xgiven;
+  t.ldxgiven = *pldxgiven;
+  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/Cuba/src/divonne/Divonne.tm b/Cuba/src/divonne/Divonne.tm
new file mode 100644
index 0000000000000000000000000000000000000000..f7d0a753686295f233e0d63e6fac01fa0f9c1843
--- /dev/null
+++ b/Cuba/src/divonne/Divonne.tm
@@ -0,0 +1,346 @@
+:Evaluate: BeginPackage["Cuba`"]
+
+:Evaluate: Divonne::usage =
+	"Divonne[f, {x, xmin, xmax}..] computes a numerical approximation to the integral of the real scalar or vector function f.
+	The output is a list with entries of the form {integral, error, chi-square probability} for each component of the integrand."
+
+:Evaluate: MinPoints::usage = "MinPoints is an option of Divonne.
+	It specifies the minimum number of points to sample."
+
+:Evaluate: Key1::usage = "Key1 is an option of Divonne.
+	It determines sampling in the partitioning phase.\n
+	Special cases:\n
+	  Key1 = 7: use a degree-7 cubature rule,\n
+	  Key1 = 9: use a degree-9 cubature rule,\n
+	  Key1 = 11: use a degree-11 cubature rule (available only in 3 dimensions),\n
+	  Key1 = 13: use a degree-13 cubature rule (available only in 2 dimensions),\n
+	otherwise a random sample of n1 = Abs[Key1] points is used, where the sign of Key1 determines the type of sample:\n
+	  Key1 > 0: use a Korobov quasi-random sample,\n
+	  Key1 < 0: use a \"standard\" sample."
+
+:Evaluate: Key2::usage = "Key2 is an option of Divonne.
+	It determines sampling in the main integration phase.\n
+	Special cases:\n
+	  Key2 = 7: use a degree-7 cubature rule,\n
+	  Key2 = 9: use a degree-9 cubature rule,\n
+	  Key2 = 11: use a degree-11 cubature rule (available only in 3 dimensions),\n
+	  Key2 = 13: use a degree-13 cubature rule (available only in 2 dimensions),\n
+	otherwise a random sample is used, where the sign of Key2 determines the type of sample:\n
+	  Key2 > 0: use a Korobov quasi-random sample,\n
+	  Key2 < 0: use a \"standard\" sample,\n
+	and n2 = Abs[Key2] determines the number of points:\n
+	  n2 >= 40: sample n2 points,\n
+	  n2 < 40: sample n2*nneed points, where nneed is the number of points needed to reach the prescribed accuracy, as estimated by Divonne from the results of the partitioning phase."
+
+:Evaluate: Key3::usage = "Key3 is an option of Divonne.
+	It sets the strategy for the refinement phase:\n
+	  Key3 = 0: do not further treat the subregion,\n
+	  Key3 = 1: split the subregion up once more,\n
+	for other values the region is sampled a third time:\n
+	  Key3 = 7: use a degree-7 cubature rule,\n
+	  Key3 = 9: use a degree-9 cubature rule,\n
+	  Key3 = 11: use a degree-11 cubature rule (available only in 3 dimensions),\n
+	  Key3 = 13: use a degree-13 cubature rule (available only in 2 dimensions),\n
+	otherwise a random sample is used, where the sign of Key3 determines the type of sample:\n
+	  Key3 > 0: use a Korobov quasi-random sample,\n
+	  Key3 < 0: use a \"standard\" sample,\n
+	and n3 = Abs[Key3] determines the number of points:\n
+	  n3 >= 40: sample n3 points,\n
+	  n3 < 40: sample n3*nneed points, where nneed is the number of points needed to reach the prescribed accuracy, as estimated by Divonne from the results of the partitioning phase."
+
+:Evaluate: MaxPass::usage = "MaxPass is an option of Divonne.
+	It controls the partitioning termination.
+	The partitioning phase is terminated when the estimated total number of integrand evaluations (partitioning plus main integration) does not decrease for MaxPass successive iterations."
+
+:Evaluate: Border::usage = "Border is an option of Divonne.
+	It specifies the width of the border of the integration region.
+	Points falling into this border region are not sampled directly, but are extrapolated from two samples from the interior.
+	The border width always refers to the unit hypercube, i.e. it is not rescaled if the integration region is not the unit hypercube."
+
+:Evaluate: MaxChisq::usage = "MaxChisq is an option of Divonne.
+	It specifies the maximum chi-square value a single subregion is allowed to have in the main integration phase.
+	Regions which fail this chi-square test and whose sample averages differ by more than MinDeviation move on to the refinement phase."
+
+:Evaluate: MinDeviation::usage = "MinDeviation is an option of Divonne.
+	Regions which fail the chi-square test are not treated further if their sample averages differ by less than MinDeviation.
+	MinDeviation is specified as the fraction of the requested error of the entire integral."
+
+:Evaluate: Given::usage = "Given is an option of Divonne.
+	It provides a list of points where the integrand might have peaks.
+	Divonne will consider these points when partitioning the integration region."
+
+:Evaluate: NExtra::usage = "NExtra is an option of Divonne.
+	It specifies the maximum number of points that will be considered in the output of the PeakFinder function."
+
+:Evaluate: PeakFinder::usage = "PeakFinder is an option of Divonne.
+	It specifies the peak-finder function.
+	This function is called whenever a region is up for subdivision and is supposed to point out possible peaks lying in the region, thus acting as the dynamic counterpart of the static list of points supplied with Given.
+	It is invoked with two arguments, the multidimensional equivalents of the lower left and upper right corners of the region being investigated, and must return a (possibly empty) list of points."
+
+:Evaluate: StateFile::usage = "StateFile is an option of Divonne.
+	It specifies a file in which the internal state is stored after each iteration and from which it can be restored on a subsequent run.
+	The state file is removed once the prescribed accuracy has been reached."
+
+:Evaluate: Final::usage = "Final is an option of Divonne.
+	It can take the values Last or All which determine whether only the last (largest) or all sets of samples collected on a subregion over the integration phases contribute to the final result."
+
+:Evaluate: PseudoRandom::usage = "PseudoRandom is an option of Divonne.
+	It can take the following values:
+	False for Sobol quasi-random numbers (default),
+	True or 0 for Mersenne Twister pseudo-random numbers,
+	any other integer value n for Ranlux pseudo-random numbers of luxury level n."
+
+:Evaluate: PseudoRandomSeed::usage = "PseudoRandomSeed is an option of Divonne.
+	It specifies the seed for the pseudo-random number generator."
+
+:Evaluate: RetainStateFile::usage = "RetainStateFile is an option of Divonne.
+	It determines whether a chosen state file is kept even if the integration terminates normally."
+
+:Evaluate: Regions::usage = "Regions is an option of Divonne.
+	It specifies whether the regions into which the integration region has been cut are returned together with the integration results."
+
+:Evaluate: Region::usage = "Region[ll, ur, res, df] describes a subregion:
+	ll and ur are multidimensional equivalents of the region's lower left and upper right corner.
+	res gives the integration results for the region in a list with entries of the form {integral, error, chi-square} for each component of the integrand.
+	df is the number of degrees of freedom corresponding to the chi-square values in res."
+
+:Evaluate: $Phase::usage = "$Phase is a global variable set by Divonne during the evaluation of the integrand to the integration phase:\n
+	0 = sampling of the points in xgiven,\n
+	1 = partitioning phase,\n
+	2 = main integration phase,\n
+	3 = refinement phase."
+
+:Evaluate: MapSample::usage = "MapSample is a function used to map the integrand over the points to be sampled."
+
+
+:Evaluate: Begin["`Divonne`"]
+
+:Begin:
+:Function: Divonne
+:Pattern: MLDivonne[ndim_, ncomp_,
+  epsrel_, epsabs_, flags_, seed_,
+  mineval_, maxeval_,
+  key1_, key2_, key3_, maxpass_,
+  border_, maxchisq_, mindeviation_,
+  xgiven_, fgiven_, nextra_, statefile_]
+:Arguments: {ndim, ncomp,
+  epsrel, epsabs, flags, seed,
+  mineval, maxeval,
+  key1, key2, key3, maxpass,
+  border, maxchisq, mindeviation,
+  xgiven, fgiven, nextra, statefile}
+:ArgumentTypes: {Integer, Integer,
+  Real64, Real64, Integer, Integer,
+  Integer, Integer,
+  Integer, Integer, Integer, Integer,
+  Real64, Real64, Real64,
+  Real64List, Real64List, Integer, String}
+:ReturnType: Manual
+:End:
+
+:Evaluate: Attributes[Divonne] = {HoldFirst}
+
+:Evaluate: Options[Divonne] = {PrecisionGoal -> 3, AccuracyGoal -> 12,
+	MinPoints -> 0, MaxPoints -> 50000,
+	Key1 -> 47, Key2 -> 1, Key3 -> 1, MaxPass -> 5,
+	Border -> 0, MaxChisq -> 10, MinDeviation -> .25,
+	Given -> {}, NExtra -> 0, PeakFinder -> ({}&),
+	StateFile -> "", Verbose -> 1, Final -> All,
+	PseudoRandom -> False, PseudoRandomSeed -> 5489,
+	RetainStateFile -> False, Regions -> False, Compiled -> True}
+
+:Evaluate: Divonne[f_, v:{_, _, _}.., opt___Rule] :=
+	Block[ {ff = HoldForm[f], ndim = Length[{v}], ncomp,
+	tags, vars, lower, range, jac, tmp, defs, intT, intX,
+	rel, abs, mineval, maxeval, key1, key2, key3, maxpass, border,
+	maxchisq, mindeviation,	given, nextra, peakfinder, state,
+	final, verbose, level, seed, retain, regions, compiled,
+	$Phase},
+	  Message[Divonne::optx, #, Divonne]&/@
+	    Complement[First/@ {opt}, tags = First/@ Options[Divonne]];
+	  {rel, abs, mineval, maxeval, key1, key2, key3, maxpass, border,
+	    maxchisq, mindeviation, given, nextra, peakfinder, state,
+	    verbose, final, level, seed, retain, regions, compiled} =
+	    tags /. {opt} /. Options[Divonne];
+	  {vars, lower, range} = Transpose[{v}];
+	  jac = Simplify[Times@@ (range -= lower)];
+	  tmp = Array[tmpvar, ndim];
+	  defs = Simplify[lower + range tmp];
+	  Block[{Set}, define[compiled, tmp, vars, Thread[vars = defs], jac]];
+	  intT = integrandT[f];
+	  intX = integrandX[f];
+	  given = Flatten[given];
+	  Block[#,
+	    ncomp = Length[intT@@ RandomReal[1, ndim]];
+	    MLDivonne[ndim, ncomp, 10.^-rel, 10.^-abs,
+	      Min[Max[verbose, 0], 3] +
+	        If[final === Last, 4, 0] +
+	        If[TrueQ[retain], 16, 0] +
+	        If[TrueQ[regions], 128, 0] +
+	        If[IntegerQ[level], 256 level, 0],
+	      If[level =!= False && IntegerQ[seed], seed, 0],
+	      mineval, maxeval,
+	      key1, key2, key3, maxpass,
+	      N[border], N[maxchisq], N[mindeviation],
+	      given, sample[given, 0, intX], nextra, state]
+	  ]& @ vars
+	]
+
+:Evaluate: tmpvar[n_] := ToExpression["Cuba`Divonne`t" <> ToString[n]]
+
+:Evaluate: Attributes[foo] = {HoldAll}
+
+:Evaluate: define[True, tmp_, vars_, defs_, jac_] := (
+	TtoX := TtoX = Compile[tmp, defs];
+	integrandT[f_] := Compile[tmp, eval[defs, N[f jac]],
+	  {{_eval, _Real, 1}}];
+	integrandX[f_] := Compile[vars, eval[vars, N[f jac]],
+	  {{_eval, _Real, 1}}] )
+
+:Evaluate: define[_, tmp_, vars_, defs_, jac_] := (
+	TtoX := TtoX = Function[tmp, defs];
+	integrandT[f_] := Function[tmp, eval[defs, N[f jac]]];
+	integrandX[f_] := Function[vars, eval[vars, N[f jac]]] )
+
+:Evaluate: eval[_, f_Real] := {f}
+
+:Evaluate: eval[_, f:{__Real}] := f
+
+:Evaluate: eval[x_, _] := (Message[Divonne::badsample, ff, x]; {})
+
+:Evaluate: sample[x_, p_, i_:intT] := (
+	$Phase = p;
+	Check[Flatten @ MapSample[i@@ # &, Partition[x, ndim]], {}] )
+
+:Evaluate: ValueQ[MapSample] || (MapSample = Map)
+
+:Evaluate: findpeak[b_, p_] := Check[Join[#, sample[#, p, intX]]& @
+	N[Flatten[peakfinder@@ MapThread[TtoX, Partition[b, 2]]]], {}]
+
+:Evaluate: region[bounds_, r___] := Region[##, r]&@@
+	MapThread[TtoX, Partition[bounds, 2]]
+
+:Evaluate: Divonne::badsample = "`` is not a real-valued function at ``."
+
+:Evaluate: Divonne::baddim = "Cannot integrate in `` dimensions."
+
+:Evaluate: Divonne::badcomp = "Cannot integrate `` components."
+
+:Evaluate: Divonne::accuracy =
+	"Desired accuracy was not reached within `` integrand evaluations on `` subregions.
+	Estimate that MaxPoints needs to be increased by `` for this accuracy."
+
+:Evaluate: Divonne::success = "Needed `` integrand evaluations on `` subregions."
+
+:Evaluate: End[]
+
+:Evaluate: EndPackage[]
+
+
+/*
+	Divonne.tm
+		Multidimensional integration by partitioning
+		originally by J.H. Friedman and M.H. Wright
+		(CERNLIB subroutine D151)
+		this version by Thomas Hahn
+		last modified 13 Mar 15 th
+*/
+
+
+#define DIVONNE
+#define ROUTINE "Divonne"
+
+#include "mathlink.h"
+#include "decl.h"
+#include "MSample.c"
+
+/*********************************************************************/
+
+static void Status(MLCONST char *msg, cint n1, cint n2, cint n3)
+{
+  MLPutFunction(stdlink, "CompoundExpression", 2);
+  MLPutFunction(stdlink, "Message", 4);
+  MLPutFunction(stdlink, "MessageName", 2);
+  MLPutSymbol(stdlink, "Divonne");
+  MLPutString(stdlink, msg);
+  MLPutInteger(stdlink, n1);
+  MLPutInteger(stdlink, n2);
+  MLPutInteger(stdlink, n3);
+}
+
+/*********************************************************************/
+
+static inline void DoIntegrate(This *t)
+{
+  real integral[NCOMP], error[NCOMP], prob[NCOMP];
+  cint fail = Integrate(t, integral, error, prob);
+
+  if( fail < 0 ) {
+    switch( fail ) {
+    case -99:
+      MLPutFunction(stdlink, "Abort", 0);
+      return;
+    case -1:
+      Status("baddim", t->ndim, 0, 0);
+      break;
+    case -2:
+      Status("badcomp", t->ncomp, 0, 0);
+      break;
+    }
+    MLPutSymbol(stdlink, "$Failed");
+  }
+  else {
+    Status(fail ? "accuracy" : "success", t->neval, t->nregions, fail);
+    MLPutFunction(stdlink, "Thread", 1);
+    MLPutFunction(stdlink, "List", 3);
+    MLPutRealxList(stdlink, integral, t->ncomp);
+    MLPutRealxList(stdlink, error, t->ncomp);
+    MLPutRealxList(stdlink, prob, t->ncomp);
+  }
+}
+
+/*********************************************************************/
+
+void Divonne(cint ndim, cint ncomp,
+  creal epsrel, creal epsabs,
+  cint flags, cint seed,
+  cnumber mineval, cnumber maxeval,
+  cint key1, cint key2, cint key3, cint maxpass,
+  creal border, creal maxchisq, creal mindeviation,
+  real *xgiven, cint nxgiven, real *fgiven, cint nfgiven,
+  cnumber nextra, cchar *statefile)
+{
+  This t;
+  t.ldxgiven = t.ndim = ndim;
+  t.ncomp = ncomp;
+  t.epsrel = epsrel;
+  t.epsabs = epsabs;
+  t.flags = flags;
+  t.seed = seed;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.key1 = key1;
+  t.key2 = key2;
+  t.key3 = key3;
+  t.maxpass = maxpass;
+  t.border.upper = 1 - (t.border.lower = border);
+  t.maxchisq = maxchisq;
+  t.mindeviation = mindeviation;
+  t.ngiven = nxgiven/ndim;
+  t.xgiven = xgiven;
+  t.fgiven = fgiven;
+  t.nextra = nextra;
+  t.statefile = statefile;
+
+  DoIntegrate(&t);
+
+  MLEndPacket(stdlink);
+}
+
+/*********************************************************************/
+
+int main(int argc, char **argv)
+{
+  return MLMain(argc, argv);
+}
+
diff --git a/Cuba/src/divonne/Explore.c b/Cuba/src/divonne/Explore.c
new file mode 100644
index 0000000000000000000000000000000000000000..e29520cb426243f0a887defb75e1e48ede26e27c
--- /dev/null
+++ b/Cuba/src/divonne/Explore.c
@@ -0,0 +1,160 @@
+/*
+	Explore.c
+		sample region, determine min and max, split if necessary
+		this file is part of Divonne
+		last modified 12 Mar 15 th
+*/
+
+
+typedef struct {
+  real fmin, fmax;
+  creal *xmin, *xmax;
+} Extrema;
+
+/*********************************************************************/
+
+static int ExploreSerial(This *t, ccount iregion)
+{
+  csize_t regionsize = RegionSize;
+  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;
+  creal *x;
+  real *f;
+  real halfvol, maxerr;
+  count n, dim, comp, maxcomp;
+  cSamples *samples = &t->samples[region->isamples];
+
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    Extrema *e = &extrema[comp];
+    e->fmin = INFTY;
+    e->fmax = -INFTY;
+    e->xmin = e->xmax = NULL;
+  }
+
+  if( region->isamples == 0 ) {		/* others already sampled */
+    real vol = 1;
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      cBounds *b = &bounds[dim];
+      vol *= b->upper - b->lower;
+    }
+    region->vol = vol;
+
+    for( comp = 0; comp < t->ncomp; ++comp ) {
+      Result *r = &result[comp];
+      r->fmin = INFTY;
+      r->fmax = -INFTY;
+    }
+
+    x = t->xgiven;
+    f = t->fgiven;
+    n = t->ngiven;
+    if( t->nextra ) n += SampleExtra(t, bounds);
+
+    for( ; n; --n ) {
+      for( dim = 0; dim < t->ndim; ++dim ) {
+        cBounds *b = &bounds[dim];
+        if( x[dim] < b->lower || x[dim] > b->upper ) goto skip;
+      }
+      for( comp = 0; comp < t->ncomp; ++comp ) {
+        Extrema *e = &extrema[comp];
+        creal y = f[comp];
+        if( y < e->fmin ) e->fmin = y, e->xmin = x;
+        if( y > e->fmax ) e->fmax = y, e->xmax = x;
+      }
+skip:
+      x += t->ldxgiven;
+      f += t->ncomp;
+    }
+
+    samples->sampler(t, iregion);
+  }
+
+  x = samples->x;
+  f = samples->f;
+  for( n = samples->n; n; --n ) {
+    for( comp = 0; comp < t->ncomp; ++comp ) {
+      Extrema *e = &extrema[comp];
+      creal y = *f++;
+      if( y < e->fmin ) e->fmin = y, e->xmin = x;
+      if( y > e->fmax ) e->fmax = y, e->xmax = x;
+    }
+    x += t->ndim;
+  }
+  t->neval_opt -= t->neval;
+
+  halfvol = .5*region->vol;
+  maxerr = -INFTY;
+  maxcomp = -1;
+
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    Extrema *e = &extrema[comp];
+    Result *r = &result[comp];
+    real ftmp, err;
+
+    if( e->xmin ) {	/* not all NaNs */
+      t->selectedcomp = comp;
+      XCopy(xtmp, e->xmin);
+      ftmp = FindMinimum(t, bounds, xtmp, e->fmin);
+      if( ftmp < r->fmin ) {
+        r->fmin = ftmp;
+        XCopy(&minmax[2*comp*t->ndim], xtmp);
+      }
+
+      t->selectedcomp = Tag(comp);
+      XCopy(xtmp, e->xmax);
+      ftmp = -FindMinimum(t, bounds, xtmp, -e->fmax);
+      if( ftmp > r->fmax ) {
+        r->fmax = ftmp;
+        XCopy(&minmax[(2*comp + 1)*t->ndim], xtmp);
+      }
+    }
+
+    r->spread = halfvol*(r->fmax - r->fmin);
+    err = r->spread/Max(fabsx(r->avg), NOTZERO);
+    if( err > maxerr ) {
+      maxerr = err;
+      maxcomp = comp;
+    }
+  }
+
+  t->neval_opt += t->neval;
+
+  if( maxcomp == -1 ) { /* all NaNs */
+    region->depth = 0;
+    return -1;
+  }
+
+  region->cutcomp = maxcomp;
+  r = RegionResult(region) + maxcomp;
+  if( halfvol*(r->fmin + r->fmax) > r->avg ) {
+    region->fminor = r->fmin;
+    region->fmajor = r->fmax;
+    region->xmajor = (2*maxcomp + 1)*t->ndim;
+  }
+  else {
+    region->fminor = r->fmax;
+    region->fmajor = r->fmin;
+    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;
+    if( region->depth == 0 )
+      for( comp = 0; comp < t->ncomp; ++comp )
+        t->totals[comp].secondspread =
+          Max(t->totals[comp].secondspread, result[comp].spread);
+  }
+
+  if( region->depth ) Split(t, iregion);
+
+  return iregion;
+}
+
diff --git a/Cuba/src/divonne/FindMinimum.c b/Cuba/src/divonne/FindMinimum.c
new file mode 100644
index 0000000000000000000000000000000000000000..ac7fd901e5efa45689a8ed6b206e7280394babbd
--- /dev/null
+++ b/Cuba/src/divonne/FindMinimum.c
@@ -0,0 +1,694 @@
+/*
+	FindMinimum.c
+		find minimum (maximum) of hyperrectangular region
+		this file is part of Divonne
+		last modified 12 Mar 15 th
+*/
+
+
+#define EPS POW2(52)
+#define RTEPS POW2(26)
+#define QEPS POW2(13)
+
+#define DELTA POW2(16)
+#define RTDELTA POW2(8)
+#define QDELTA POW2(4)
+
+/*
+#define DELTA 1e-5
+#define RTDELTA 3.1622776601683791e-3
+#define QDELTA 5.6234132519034912e-2
+*/
+
+#define SUFTOL 8*QEPS*QDELTA
+#define FTOL 5e-2
+#define GTOL 1e-2
+
+#define Hessian(i, j) hessian[(i)*t->ndim + j]
+
+typedef struct { real dx, f; } Point;
+
+/*********************************************************************/
+
+static inline real Dot(ccount n, creal *a, creal *b)
+{
+  real sum = 0;
+  count i;
+  for( i = 0; i < n; ++i ) sum += a[i]*b[i];
+  return sum;
+}
+
+/*********************************************************************/
+
+static inline real Length(ccount n, creal *vec)
+{
+  return sqrtx(Dot(n, vec, vec));
+}
+
+/*********************************************************************/
+
+static inline void LinearSolve(cThis *t, ccount n, creal *hessian,
+  creal *grad, real *p)
+{
+  int i, j;
+  real dir;
+
+  for( i = 0; i < n; ++i ) {
+    dir = -grad[i];
+    for( j = 0; j < i; ++j )
+      dir -= Hessian(i, j)*p[j];
+    p[i] = dir;
+  }
+
+  while( --i >= 0 ) {
+    if( Hessian(i, i) <= 0 ) return;
+    dir = p[i]/Hessian(i, i);
+    for( j = i + 1; j < n; ++j )
+      dir -= Hessian(j, i)*p[j];
+    p[i] = dir;
+  }
+}
+
+/*********************************************************************/
+
+static void RenormalizeCholesky(cThis *t, ccount n, real *hessian,
+  real *z, real alpha)
+{
+  count i, j;
+
+  for( i = 0; i < n; ++i ) {
+    creal dir = z[i];
+    real beta = alpha*dir;
+    real gamma = Hessian(i, i);
+    real gammanew = Hessian(i, i) += beta*dir;
+
+    if( i + 1 >= n || gammanew < 0 ||
+        (gammanew < 1 && gamma > DBL_MAX*gammanew) ) return;
+
+    gamma /= gammanew;
+    beta /= gammanew;
+    alpha *= gamma;
+
+    if( gamma < .25 ) {
+      for( j = i + 1; j < n; ++j ) {
+        real delta = beta*z[j];
+        z[j] -= dir*Hessian(j, i);
+        Hessian(j, i) = Hessian(j, i)*gamma + delta;
+      }
+    }
+    else {
+      for( j = i + 1; j < n; ++j ) {
+        z[j] -= dir*Hessian(j, i);
+        Hessian(j, i) += beta*z[j];
+      }
+    }
+  }
+}
+
+/*********************************************************************/
+
+static void UpdateCholesky(cThis *t, ccount n, real *hessian,
+  real *z, real *p)
+{
+  int i, j;
+  real gamma = 0;
+
+  for( i = 0; i < n; ++i ) {
+    real dir = z[i];
+    for( j = 0; j < i; ++j )
+      dir -= Hessian(i, j)*p[j];
+    p[i] = dir;
+    gamma += Sq(dir)/Hessian(i, i);
+  }
+  gamma = Max(fabsx(1 - gamma), EPS);
+
+  while( --i >= 0 ) {
+    creal dir = z[i] = p[i];
+    real beta = dir/Hessian(i, i);
+    creal gammanew = gamma + dir*beta;
+    Hessian(i, i) *= gamma/gammanew;
+    beta /= gamma;
+    gamma = gammanew;
+    for( j = i + 1; j < n; ++j ) {
+      creal delta = beta*z[j];
+      z[j] += dir*Hessian(j, i);
+      Hessian(j, i) -= delta;
+    }
+  }
+}
+
+/*********************************************************************/
+
+static inline void BFGS(cThis *t, ccount n, real *hessian,
+  creal *gnew, creal *g, real *p, creal dx)
+{
+  Vector(real, y, NDIM);
+  real c;
+  count i, j;
+
+  for( i = 0; i < n; ++i )
+    y[i] = gnew[i] - g[i];
+  c = dx*Dot(n, y, p);
+  if( c < 1e-10 ) return;
+  RenormalizeCholesky(t, n, hessian, y, 1/c);
+
+  c = Dot(n, g, p);
+  if( c >= 0 ) return;
+  c = 1/sqrtx(-c);
+  for( i = 0; i < n; ++i )
+    y[i] = c*g[i];
+  UpdateCholesky(t, n, hessian, y, p);
+
+  for( i = 0; i < n - 1; ++i )
+    for( j = i + 1; j < n; ++j )
+      Hessian(i, j) = Hessian(j, i);
+}
+
+/*********************************************************************/
+
+static void Gradient(This *t, ccount nfree, ccount *ifree,
+  cBounds *b, real *x, creal y, real *grad)
+{
+  count i;
+
+  for( i = 0; i < nfree; ++i ) {
+    ccount dim = Untag(ifree[i]);
+    creal xd = x[dim];
+    creal delta = (b[dim].upper - xd < DELTA) ? -DELTA : DELTA;
+    x[dim] += delta;
+    grad[i] = (Sample(t, x) - y)/delta;
+    x[dim] = xd;
+  }
+}
+
+/*********************************************************************/
+
+static Point LineSearch(This *t, ccount nfree, ccount *ifree,
+  creal *p, creal *xini, real fini, real *x,
+  real step, creal range, creal grad,
+  creal ftol, creal xtol, creal gtol)
+{
+  real tol = ftol, tol2 = tol + tol;
+  Point cur = {0, fini};
+
+  XCopy(x, xini);
+
+  /* don't even try if
+     a) we'd walk backwards,
+     b) the range to explore is too small,
+     c) the gradient is positive, i.e. we'd move uphill */
+
+  if( step > 0 && range > tol2 && grad <= 0 ) {
+    creal eps = RTEPS*fabsx(range) + ftol;
+    creal mingrad = -1e-4*grad, maxgrad = -gtol*grad;
+
+    real end = range + eps;
+    real maxstep = range - eps/(1 + RTEPS);
+
+    Point min = cur, v = cur, w = cur;
+    Point a = cur, b = {end, 0};
+    real a1, b1 = end;
+
+    /* distmin: distance along p from xini to the minimum,
+       u: second-lowest point,
+       v: third-lowest point,
+       a, b: interval in which the minimum is sought. */
+
+    real distmin = 0, dist, mid, q, r, s;
+    count i;
+    int shift;
+    bool first;
+
+    for( first = true; ; first = false ) {
+      if( step >= maxstep ) {
+        step = maxstep;
+        maxstep = maxstep*(1 + .75*RTEPS) + .75*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];
+        x[dim] = xini[dim] + dist*p[i];
+      }
+      cur.f = Sample(t, x);
+
+      if( cur.f <= min.f ) {
+        v = w;
+        w = min;
+        min.f = cur.f;
+        distmin = dist;
+
+        /* shift everything to the new minimum position */
+        maxstep -= cur.dx;
+        v.dx -= cur.dx;
+        w.dx -= cur.dx;
+        a.dx -= cur.dx;
+        b.dx -= cur.dx;
+        if( cur.dx < 0 ) b = w;
+        else a = w;
+
+        tol = RTEPS*fabsx(distmin) + ftol;
+        tol2 = tol + tol;
+      }
+      else {
+        if( cur.dx < 0 ) a = cur;
+        else b = cur;
+        if( cur.f <= w.f || w.dx == 0 ) v = w, w = cur;
+        else if( cur.f <= v.f || v.dx == 0 || v.dx == w.dx ) v = cur;
+      }
+
+      if( distmin + b.dx <= xtol ) break;
+      if( min.f < fini &&
+          a.f - min.f <= fabsx(a.dx)*maxgrad &&
+          (fabsx(distmin - range) > tol || maxstep < b.dx) ) break;
+
+      mid = .5*(a.dx + b.dx);
+      if( fabsx(mid) <= tol2 - .5*(b.dx - a.dx) ) break;
+
+      r = q = s = 0;
+      if( fabsx(end) > tol ) {
+        if( first ) {
+          creal s1 = w.dx*grad;
+          creal s2 = w.f - min.f;
+          s = (s1 - ((distmin == 0) ? 0 : 2*s2))*w.dx;
+          q = 2*(s2 - s1);
+        }
+        else {
+          creal s1 = w.dx*(v.f - min.f);
+          creal s2 = v.dx*(w.f - min.f);
+          s = s1*w.dx - s2*v.dx;
+          q = 2*(s2 - s1);
+        }
+        if( q > 0 ) s = -s;
+        q = fabsx(q);
+        r = end;
+        if( step != b1 || b.dx <= maxstep ) end = step;
+      }
+
+      if( distmin == a.dx ) step = mid;
+      else if( b.dx > maxstep ) step = (step < b.dx) ? -4*a.dx : maxstep;
+      else {
+        real num = a.dx, den = b.dx;
+        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*sqrtx(num) : 5/11.*den*(.1 + 1/num);
+      }
+
+      if( step > 0 ) a1 = a.dx, b1 = step;
+      else a1 = step, b1 = b.dx;
+      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;
+      }
+      else end = (mid > 0) ? b.dx : a.dx;
+    }
+
+    first = true;
+    if( fabsx(distmin - range) < tol ) {
+      distmin = range;
+      if( maxstep > b.dx ) first = false;
+    }
+
+    for( cur.dx = distmin, cur.f = min.f, shift = -1; ;
+         cur.dx = Max(ldexp(distmin, shift), ftol), shift <<= 1 ) {
+      for( i = 0; i < nfree; ++i ) {
+        ccount dim = ifree[i];
+        x[dim] = xini[dim] + cur.dx*p[i];
+      }
+      if( !first ) cur.f = Sample(t, x);
+
+      if( cur.dx + b.dx <= xtol ) {
+        cur.dx = 0;
+        break;
+      }
+      if( fini - cur.f > cur.dx*mingrad ) break;
+      if( cur.dx <= ftol ) {
+        cur.dx = 0;
+        break;
+      }
+      first = false;
+    }
+  }
+
+  return cur;
+}
+
+/*********************************************************************/
+
+static real LocalSearch(This *t, ccount nfree, ccount *ifree,
+  cBounds *b, creal *x, creal fx, real *z)
+{
+  Vector(real, y, NDIM);
+  Vector(real, p, NDIM);
+  real delta, smax, sopp, spmax, snmax;
+  real fy, fz, ftest;
+  int sign;
+  count i;
+
+  /* Choose a direction p along which to move away from the
+     present x.  We choose the direction which leads farthest
+     away from all borders. */
+
+  smax = INFTY;
+  for( i = 0; i < nfree; ++i ) {
+    ccount dim = ifree[i];
+    creal sp = b[dim].upper - x[dim];
+    creal sn = x[dim] - b[dim].lower;
+    if( sp < sn ) {
+      smax = Min(smax, sn);
+      p[i] = -1;
+    }
+    else {
+      smax = Min(smax, sp);
+      p[i] = 1;
+    }
+  }
+  smax *= .9;
+
+  /* Move along p until the integrand changes appreciably
+     or we come close to a border. */
+
+  XCopy(y, x);
+  ftest = SUFTOL*(1 + fabsx(fx));
+  delta = RTDELTA/5;
+  do {
+    delta = Min(5*delta, smax);
+    for( i = 0; i < nfree; ++i ) {
+      ccount dim = ifree[i];
+      y[dim] = x[dim] + delta*p[i];
+    }
+    fy = Sample(t, y);
+    if( fabsx(fy - fx) > ftest ) break;
+  } while( delta != smax );
+
+  /* Construct a second direction p' orthogonal to p, i.e. p.p' = 0.
+     We let pairs of coordinates cancel in the dot product,
+     i.e. we choose p'[0] = p[0], p'[1] = -p[1], etc.
+     (It should really be 1/p and -1/p, but p consists of 1's and -1's.)
+     For odd nfree, we let the last three components cancel by 
+     choosing p'[nfree - 3] = p[nfree - 3],
+              p'[nfree - 2] = -1/2 p[nfree - 2], and
+              p'[nfree - 1] = -1/2 p[nfree - 1]. */
+
+  sign = (nfree <= 1 && fy > fx) ? 1 : -1;
+  spmax = snmax = INFTY;
+  for( i = 0; i < nfree; ++i ) {
+    ccount dim = ifree[i];
+    real sp, sn;
+    p[i] *= (nfree & 1 && nfree - i <= 2) ? -.5*sign : (sign = -sign);
+    sp = (b[dim].upper - y[dim])/p[i];
+    sn = (y[dim] - b[dim].lower)/p[i];
+    if( p[i] > 0 ) {
+      spmax = Min(spmax, sp);
+      snmax = Min(snmax, sn);
+    }
+    else {
+      spmax = Min(spmax, -sn);
+      snmax = Min(snmax, -sp);
+    }
+  }
+  smax = .9*spmax;
+  sopp = .9*snmax;
+
+  if( nfree > 1 && smax < snmax ) {
+    real tmp = smax;
+    smax = sopp;
+    sopp = tmp;
+    for( i = 0; i < nfree; ++i )
+      p[i] = -p[i];
+  }
+
+  /* Move along p' until the integrand changes appreciably
+     or we come close to a border. */
+
+  XCopy(z, y);
+  ftest = SUFTOL*(1 + fabsx(fy));
+  delta = RTDELTA/5;
+  do {
+    delta = Min(5*delta, smax);
+    for( i = 0; i < nfree; ++i ) {
+      ccount dim = ifree[i];
+      z[dim] = y[dim] + delta*p[i];
+    }
+    fz = Sample(t, z);
+    if( fabsx(fz - fy) > ftest ) break;
+  } while( delta != smax );
+
+  if( fy != fz ) {
+    real pleneps, grad, range, step;
+    Point low;
+
+    if( fy > fz ) {
+      grad = (fz - fy)/delta;
+      range = smax/.9;
+      step = Min(delta + delta, smax);
+    }
+    else {
+      grad = (fy - fz)/delta;
+      range = sopp/.9 + delta;
+      step = Min(delta + delta, sopp);
+      XCopy(y, z);
+      fy = fz;
+      for( i = 0; i < nfree; ++i )
+        p[i] = -p[i];
+    }
+
+    pleneps = Length(nfree, p) + RTEPS;
+    low = LineSearch(t, nfree, ifree, p, y, fy, z, step, range, grad,
+      RTEPS/pleneps, 0., RTEPS);
+    fz = low.f;
+  }
+
+  if( fz != fx ) {
+    real pleneps, grad, range, step;
+    Point low;
+
+    spmax = snmax = INFTY;
+    for( i = 0; i < nfree; ++i ) {
+      ccount dim = ifree[i];
+      p[i] = z[dim] - x[dim];
+      if( p[i] != 0 ) {
+        creal sp = (b[dim].upper - x[dim])/p[i];
+        creal sn = (x[dim] - b[dim].lower)/p[i];
+        if( p[i] > 0 ) {
+          spmax = Min(spmax, sp);
+          snmax = Min(snmax, sn);
+        }
+        else {
+          spmax = Min(spmax, -sn);
+          snmax = Min(snmax, -sp);
+        }
+      }
+    }
+
+    grad = fz - fx;
+    range = spmax;
+    step = Min(.9*spmax, 2.);
+    pleneps = Length(nfree, p) + RTEPS;
+    if( fz > fx ) {
+      delta = Min(.9*snmax, RTDELTA/pleneps);
+      for( i = 0; i < nfree; ++i ) {
+        ccount dim = ifree[i];
+        z[dim] = x[dim] - delta*p[i];
+      }
+      fz = Sample(t, z);
+      if( fz < fx ) {
+        grad = (fz - fx)/delta;
+        range = snmax;
+        step = Min(.9*snmax, delta + delta);
+        for( i = 0; i < nfree; ++i )
+          p[i] = -p[i];
+      }
+      else if( delta < 1 ) grad = (fx - fz)/delta;
+    }
+
+    low = LineSearch(t, nfree, ifree, p, x, fx, z, step, range, grad,
+      RTEPS/pleneps, 0., RTEPS);
+    fz = low.f;
+  }
+
+  return fz;
+}
+
+/*********************************************************************/
+
+static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin)
+{
+  Vector(real, hessian, NDIM*NDIM);
+  Vector(real, gfree, NDIM);
+  Vector(real, p, NDIM);
+  Vector(real, tmp, NDIM);
+  Vector(count, ifree, NDIM);
+  Vector(count, ifix, NDIM);
+  real ftmp, fini = fmin;
+  ccount maxeval = t->neval + 50*t->ndim;
+  count nfree, nfix;
+  count dim, local;
+
+  Clear(hessian, t->ndim*t->ndim);
+  for( dim = 0; dim < t->ndim; ++dim )
+    Hessian(dim, dim) = 1;
+
+  /* Step 1: - classify the variables as "fixed" (sufficiently close
+               to a border) and "free",
+             - if the integrand is flat in the direction of the gradient
+               w.r.t. the free dimensions, perform a local search. */
+
+  for( local = 0; local < 2; ++local ) {
+    bool resample = false;
+    nfree = nfix = 0;
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      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 + fabsx(b[dim].upper))*QEPS ) {
+        xmin[dim] = b[dim].upper;
+        ifix[nfix++] = Tag(dim);
+        resample = true;
+      }
+      else ifree[nfree++] = dim;
+    }
+
+    if( resample ) fini = fmin = Sample(t, xmin);
+
+    if( nfree == 0 ) goto releasebounds;
+
+    Gradient(t, nfree, ifree, b, xmin, fmin, gfree);
+    if( local || Length(nfree, gfree) > GTOL ) break;
+
+    ftmp = LocalSearch(t, nfree, ifree, b, xmin, fmin, tmp);
+    if( ftmp > fmin - (1 + fabsx(fmin))*RTEPS )
+      goto releasebounds;
+    fmin = ftmp;
+    XCopy(xmin, tmp);
+  }
+
+  while( t->neval <= maxeval ) {
+
+    /* Step 2a: perform a quasi-Newton iteration on the free
+                variables only. */
+
+    if( nfree > 0 ) {
+      real plen, pleneps;
+      real minstep;
+      count i, mini = 0, minfix = 0;
+      Point low;
+
+      LinearSolve(t, nfree, hessian, gfree, p);
+      plen = Length(nfree, p);
+      pleneps = plen + RTEPS;
+
+      minstep = INFTY;
+      for( i = 0; i < nfree; ++i ) {
+        count dim = Untag(ifree[i]);
+        if( fabsx(p[i]) > EPS ) {
+          real step;
+          count fix;
+          if( p[i] < 0 ) {
+            step = (b[dim].lower - xmin[dim])/p[i];
+            fix = dim;
+          }
+          else {
+            step = (b[dim].upper - xmin[dim])/p[i];
+            fix = Tag(dim);
+          }
+          if( step < minstep ) {
+            minstep = step;
+            mini = i;
+            minfix = fix;
+          }
+        }
+      }
+
+      if( minstep*pleneps <= DELTA ) {
+fixbound:
+        ifix[nfix++] = minfix;
+
+        if( mini < --nfree ) {
+          creal diag = Hessian(mini, mini);
+
+          Clear(tmp, mini);
+          for( i = mini; i < nfree; ++i )
+            tmp[i] = Hessian(i + 1, mini);
+
+          for( i = mini; i < nfree; ++i ) {
+            Move(&Hessian(i, 0), &Hessian(i + 1, 0), i);
+            Hessian(i, i) = Hessian(i + 1, i + 1);
+          }
+          RenormalizeCholesky(t, nfree, hessian, tmp, diag);
+
+          Move(&ifree[mini], &ifree[mini + 1], nfree - mini);
+          Move(&gfree[mini], &gfree[mini + 1], nfree - mini);
+        }
+        continue;
+      }
+
+      low = LineSearch(t, nfree, ifree, p, xmin, fmin, tmp,
+        Min(minstep, 1.), Min(minstep, 100.), Dot(nfree, gfree, p),
+        RTEPS/pleneps, DELTA/pleneps, .2);
+
+      if( low.dx > 0 ) {
+        real fdiff;
+
+        fmin = low.f;
+        XCopy(xmin, tmp);
+
+        Gradient(t, nfree, ifree, b, xmin, fmin, tmp);
+        BFGS(t, nfree, hessian, tmp, gfree, p, low.dx);
+        XCopy(gfree, tmp);
+
+        if( fabsx(low.dx - minstep) < QEPS*minstep ) goto fixbound;
+
+        fdiff = fini - fmin;
+        fini = fmin;
+        if( fdiff > (1 + fabsx(fmin))*FTOL ||
+            low.dx*plen > (1 + Length(t->ndim, xmin))*FTOL ) continue;
+      }
+    }
+
+    /* Step 2b: check whether freeing any fixed variable will lead
+                to a reduction in f. */
+
+releasebounds:
+    if( nfix > 0 ) {
+      real mingrad = INFTY;
+      count i, mini = 0;
+      bool repeat = false;
+
+      Gradient(t, nfix, ifix, b, xmin, fmin, tmp);
+
+      for( i = 0; i < nfix; ++i ) {
+        creal grad = Sign(ifix[i])*tmp[i];
+        if( grad < -RTEPS ) {
+          repeat = true;
+          if( grad < mingrad ) {
+            mingrad = grad;
+            mini = i;
+          }
+        }
+      }
+
+      if( repeat ) {
+        gfree[nfree] = tmp[mini];
+        ifree[nfree] = Untag(ifix[mini]);
+        Clear(&Hessian(nfree, 0), nfree);
+        Hessian(nfree, nfree) = 1;
+        ++nfree;
+
+        --nfix;
+        Move(&ifix[mini], &ifix[mini + 1], nfix - mini);
+        continue;
+      }
+    }
+
+    break;
+  }
+
+  return fmin;
+}
+
diff --git a/Cuba/src/divonne/Integrate.c b/Cuba/src/divonne/Integrate.c
new file mode 100644
index 0000000000000000000000000000000000000000..335aa57cb17332a7b4ec05a52d4fbab42f9a92b2
--- /dev/null
+++ b/Cuba/src/divonne/Integrate.c
@@ -0,0 +1,501 @@
+/*
+	Integrate.c
+		partition the integration region until each region
+		has approximately equal spread = 1/2 vol (max - min),
+		then do a main integration over all regions
+		this file is part of Divonne
+		checkpointing by B. Chokoufe
+		last modified 13 Mar 15 th
+*/
+
+
+typedef struct {
+  signature_t signature;
+  number neval, neval_opt, neval_cut;
+  number nmin, nrand;
+  count iregion, nregions;
+  count phase, iter, pass, size;
+  Totals totals[];
+} State;
+
+static int Integrate(This *t, real *integral, real *error, real *prob)
+{
+  StateDecl;
+  csize_t statesize = sizeof(State) + NCOMP*sizeof(Totals);
+  Sized(State, state, statesize);
+  csize_t regionsize = RegionSize;
+  Vector(char, out, 64*NDIM + 256*NCOMP);
+
+  Totals *tot, *Tot = state->totals + t->ncomp;
+  Bounds *b, *B;
+  Result *res;
+  count comp, iregion;
+  number nwant, err;
+  real nneed;
+  ML_ONLY(number neff;)
+  int fail;
+
+  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"
+      "  key1 %d\n  key2 %d\n  key3 %d\n  maxpass " COUNT "\n"
+      "  border " REAL "\n  maxchisq " REAL "\n  mindeviation " REAL "\n"
+      "  ngiven " NUMBER "\n  nextra " NUMBER "\n"
+      "  statefile \"%s\"",
+      t->ndim, t->ncomp,
+      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,
+      SHOW(t->border.lower), SHOW(t->maxchisq), SHOW(t->mindeviation),
+      t->ngiven, t->nextra,
+      t->statefile);
+    Print(out);
+  }
+
+  if( BadComponent(t) ) return -2;
+  if( BadDimension(t, t->key1) ||
+      BadDimension(t, t->key2) ||
+      ((t->key3 & -2) && BadDimension(t, t->key3)) ) return -1;
+
+  FORK_ONLY(t->nframe = 0;)
+
+  AllocGiven(t);
+  SamplesIni(&t->samples[0]);
+  SamplesIni(&t->samples[1]);
+  SamplesIni(&t->samples[2]);
+  RuleAlloc(t);
+  if( IsSobol(t->key1) | IsSobol(t->key2) | IsSobol(t->key3) )
+    IniRandom(t);
+  t->epsabs = Max(t->epsabs, NOTZERO);
+  t->totals = state->totals;
+
+  ForkCores(t);
+
+  if( (fail = setjmp(t->abort)) ) goto abort;
+
+  SamplesLookup(t, &t->samples[0], t->key1,
+    (number)47, (number)INT_MAX, (number)0);
+  SamplesAlloc(t, &t->samples[0]);
+
+  StateSetup(t);
+
+  if( StateReadTest(t) ) {
+    StateReadOpen(t, fd) {
+      if( read(fd, state, statesize) != statesize ||
+          state->signature != StateSignature(t, 3) ) break;
+      t->nregions = state->nregions;
+      if( st.st_size != statesize + t->nregions*regionsize ) break;
+      t->neval = state->neval;
+      t->neval_opt = state->neval_opt;
+      t->neval_cut = state->neval_cut;
+      t->nrand = state->nrand;
+      t->phase = state->phase;
+      t->size = state->size;
+      AllocRegions(t);
+      StateRead(fd, t->region, t->nregions*regionsize);
+    } StateReadClose(t, fd);
+
+    if( IsSobol(t->key1) | IsSobol(t->key2) | IsSobol(t->key3) )
+      t->rng.skiprandom(t, t->nrand);
+  }
+
+  if( ini ) {
+#if MLVERSION
+    t->neval = t->ngiven;
+#else
+    t->neval = 0;
+#endif
+    t->neval_opt = 0;
+    t->neval_cut = 0;
+    t->nrand = 0;
+
+    t->size = CHUNKSIZE;
+    AllocRegions(t);
+    for( B = (b = t->region->bounds) + t->ndim; b < B; ++b ) {
+      b->lower = 0;
+      b->upper = 1;
+    }
+    t->nregions = 1;
+
+    t->phase = 1;
+    state->iter = 1;
+    state->pass = 0;
+    state->nmin = INT_MAX;
+    state->iregion = 0;
+    FClear(state->totals);
+  }
+
+  /* Step 1: partition the integration region */
+
+  if( t->phase == 1 ) {
+    if( VERBOSE ) Print("\nPartitioning phase:");
+
+    if( ini ) Iterate(t, 0, INIDEPTH, 0, NULL);
+
+    for( ; ; ++state->iter ) {
+      Totals *maxtot;
+      count valid;
+
+      for( tot = state->totals; tot < Tot; ++tot ) {
+        tot->avg = tot->spreadsq = 0;
+        tot->spread = tot->secondspread = -INFTY;
+      }
+
+      for( iregion = 0; iregion < t->nregions; ++iregion )
+        for( res = RegionResult(RegionPtr(iregion)), tot = state->totals;
+             tot < Tot; ++res, ++tot ) {
+          tot->avg += res->avg;
+          tot->spreadsq += Sq(res->spread);
+          if( res->spread > tot->spread ) {
+            tot->secondspread = tot->spread;
+            tot->spread = res->spread;
+            tot->iregion = iregion;
+          }
+          else if( res->spread > tot->secondspread )
+            tot->secondspread = res->spread;
+        }
+
+      valid = 0;
+      for( maxtot = tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
+        integral[comp] = tot->avg;
+        valid += tot->avg == tot->avg;
+        if( tot->spreadsq > maxtot->spreadsq ) maxtot = tot;
+        tot->spread = sqrtx(tot->spreadsq);
+        error[comp] = tot->spread/t->samples[0].neff;
+      }
+
+#define WriteState(t) \
+if( StateWriteTest(t) ) { \
+  StateWriteOpen(t, fd) { \
+    state->signature = StateSignature(t, 3); \
+    state->neval = t->neval; \
+    state->neval_opt = t->neval_opt; \
+    state->neval_cut = t->neval_cut; \
+    state->nrand = t->nrand; \
+    state->nregions = t->nregions; \
+    state->phase = t->phase; \
+    state->size = t->size; \
+    StateWrite(fd, state, statesize); \
+    StateWrite(fd, t->region, t->nregions*regionsize); \
+  } StateWriteClose(t, fd); \
+}
+
+      WriteState(t);
+
+      if( VERBOSE ) {
+        char *oe = out + sprintf(out, "\n"
+          "Iteration " COUNT " (pass " COUNT "):  " COUNT " regions\n"
+          NUMBER7 " integrand evaluations so far,\n"
+          NUMBER7 " in optimizing regions,\n"
+          NUMBER7 " in finding cuts",
+          state->iter, state->pass, t->nregions,
+          t->neval, t->neval_opt, t->neval_cut);
+        for( comp = 0; comp < t->ncomp; ++comp )
+          oe += sprintf(oe, "\n[" COUNT "] "
+            REAL " +- " REAL,
+            comp + 1, SHOW(integral[comp]), SHOW(error[comp]));
+        Print(out);
+      }
+
+      if( valid == 0 ) goto abort;	/* all NaNs */
+
+      if( t->neval > t->maxeval ) break;
+
+      nneed = maxtot->spread/MaxErr(maxtot->avg);
+      if( nneed < MAXPRIME ) {
+        cnumber n = t->neval + t->nregions*(number)ceil(nneed);
+        if( n < state->nmin ) {
+          state->nmin = n;
+          state->pass = 0;
+        }
+        else if( ++state->pass > t->maxpass && n >= t->mineval ) break;
+      }
+
+      Iterate(t, maxtot->iregion, DEPTH, -1, NULL);
+    }
+  }
+
+  /* Step 2: do a "full" integration on each region */
+
+/* nneed = t->samples[0].neff + 1; */
+  nneed = 2*t->samples[0].neff;
+  for( tot = state->totals; tot < Tot; ++tot ) {
+    creal maxerr = MaxErr(tot->avg);
+    tot->nneed = tot->spread/maxerr;
+    nneed = Max(nneed, tot->nneed);
+    tot->maxerrsq = Sq(maxerr);
+    tot->mindevsq = tot->maxerrsq*Sq(t->mindeviation);
+  }
+  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);
+
+  /* the number of points needed to reach the desired accuracy */
+  fail = Unmark(err)*t->nregions;
+
+  if( Marked(err) ) {
+    if( VERBOSE ) Print("\nNot enough samples left for main integration.");
+    for( comp = 0; comp < t->ncomp; ++comp )
+      prob[comp] = -999;
+    ML_ONLY(neff = t->samples[0].neff;)
+  }
+  else {
+    bool can_adjust = (t->key3 == 1 &&
+      t->samples[1].sampler != SampleRule &&
+      (t->key2 < 0 || t->samples[1].neff < MAXPRIME));
+    count df, nlimit;
+
+    SamplesAlloc(t, &t->samples[1]);
+
+    if( VERBOSE ) {
+      sprintf(out, "\nMain integration on " COUNT
+        " regions with " NUMBER " samples per region.",
+        t->nregions, t->samples[1].neff);
+      Print(out);
+    }
+
+    nlimit = t->maxeval - t->nregions*t->samples[1].n;
+    df = 0;
+
+#define CopyPhaseResults(f) \
+  for( res = RegionResult(region), tot = state->totals; tot < Tot; ++res, ++tot ) { \
+    PhaseResult *p = &tot->phase[f]; \
+    p->avg = res->avg; \
+    p->err = res->err; \
+  }
+
+#define Var2(f, r) Sq((r)->err ? (r)->err : res->spread/t->samples[f].neff)
+#define Var(f) Var2(f, &tot->phase[f])
+
+    while( state->iregion < t->nregions ) {
+      Region *region;
+      char *oe = out;
+      int todo;
+
+refine:
+      region = RegionPtr(state->iregion);
+      CopyPhaseResults(0);
+      t->phase = 2;
+      region->isamples = 1;
+      t->samples[1].sampler(t, state->iregion);
+      CopyPhaseResults(1);
+
+      if( can_adjust )
+        for( res = RegionResult(region), tot = state->totals;
+             tot < Tot; ++res, ++tot )
+          tot->spreadsq -= Sq(res->spread);
+
+      nlimit += t->samples[1].n;
+      todo = 0;
+
+      for( res = RegionResult(region), tot = state->totals;
+           tot < Tot; ++tot ) {
+        if( t->neval < nlimit ) {
+          creal avg2 = tot->phase[1].avg;
+          creal diffsq = Sq(avg2 - tot->phase[0].avg);
+
+          if( res->err*tot->nneed > res->spread ||
+              diffsq > Max(t->maxchisq*(Var(0) + Var(1)), EPS*Sq(avg2)) ) {
+            if( t->key3 && diffsq > tot->mindevsq ) {
+              if( t->key3 == 1 ) {
+                if( VERBOSE > 2 ) Print("\nSplit");
+                t->phase = 1;
+                Iterate(t, state->iregion, POSTDEPTH, 1, state->totals);
+
+                if( can_adjust ) {
+                  cnumber nnew = (tot->spreadsq/Sq(NWANTMAX) > tot->maxerrsq) ?
+                    NWANTMAX :
+                    (number)ceil(sqrtx(tot->spreadsq/tot->maxerrsq));
+                  if( nnew > nwant + nwant/64 ) {
+                    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;
+                    SamplesFree(&t->samples[1]);
+                    SamplesAlloc(t, &t->samples[1]);
+
+                    if( t->key2 > 0 && t->samples[1].neff >= MAXPRIME )
+                      can_adjust = false;
+
+                    if( VERBOSE > 2 ) {
+                      sprintf(out, "Sampling remaining " COUNT
+                        " regions with " NUMBER " points per region.",
+                        t->nregions, t->samples[1].neff);
+                      Print(out);
+                    }
+                  }
+                }
+                goto refine;
+              }
+              todo |= 3;
+            }
+            todo |= 1;
+          }
+        }
+      }
+
+      if( can_adjust )
+        for( res = RegionResult(region), tot = state->totals;
+             tot < Tot; ++res, ++tot )
+          tot->maxerrsq -= Sq(res->spread/t->samples[1].neff);
+
+      switch( todo ) {
+      case 1:	/* get spread right */
+        region->isamples = 1;
+        ExploreSerial(t, state->iregion);
+        break;
+
+      case 3:	/* sample region again with more points */
+        if( SamplesIniQ(&t->samples[2]) ) {
+          SamplesLookup(t, &t->samples[2], t->key3,
+            nwant, (number)INT_MAX, (number)0);
+          SamplesAlloc(t, &t->samples[2]);
+        }
+        t->phase = 3;
+        region->isamples = 2;
+        t->samples[2].sampler(t, state->iregion);
+        ExploreSerial(t, state->iregion);
+        ++region->depth;	/* misused for df here */
+        ++df;
+      }
+
+      if( VERBOSE > 2 ) {
+        cchar *msg = "\nRegion (" REALF ") - (" REALF ")";
+        for( B = (b = region->bounds) + t->ndim; b < B; ++b ) {
+          oe += sprintf(oe, msg, b->lower, b->upper);
+          msg = "\n       (" REALF ") - (" REALF ")";
+        }
+      }
+
+      for( tot = state->totals, res = RegionResult(region), comp = 0;
+           tot < Tot; ++tot, ++res ) {
+        creal x1 = tot->phase[0].avg;
+        creal v1 = Var(0);
+        creal x2 = tot->phase[1].avg;
+        creal v2 = Var(1);
+        creal r2 = v1 ? v2/v1 :
+          Sq(t->samples[1].neff/(real)t->samples[0].neff);
+
+        real norm = 1 + r2;
+        real avg = x2 + r2*x1;
+        real sigsq = v2;
+        real chisq = Sq(x2 - x1);
+        real chiden = v1 + v2;
+
+        if( todo == 3 ) {
+          creal x3 = res->avg;
+          creal v3 = Var2(2, res);
+          creal r3 = v2 ? v3/v2 :
+            Sq(t->samples[2].neff/(real)t->samples[1].neff);
+
+          norm = 1 + r3*norm;
+          avg = x3 + r3*avg;
+          sigsq = v3;
+          chisq = v1*Sq(x3 - x2) + v2*Sq(x3 - x1) + v3*chisq;
+          chiden = v1*v2 + v3*chiden;
+        }
+
+        avg = LAST ? res->avg : (sigsq *= norm = 1/norm, avg*norm);
+        if( chisq > EPS ) chisq /= Max(chiden, NOTZERO);
+
+        if( VERBOSE > 2 ) {
+#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, SHOW(chisq));
+        }
+
+        tot->integral += avg;
+        tot->sigsq += sigsq;
+        tot->chisq += chisq;
+
+        res->avg = avg;
+        res->spread = sqrtx(sigsq);
+        res->chisq = chisq;
+      }
+
+      if( VERBOSE > 2 ) Print(out);
+      ++state->iregion;
+
+      WriteState(t);
+    }
+
+    df += t->nregions;
+
+    for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
+      integral[comp] = tot->integral;
+      error[comp] = sqrtx(tot->sigsq);
+      prob[comp] = ChiSquare(tot->chisq, df);
+    }
+
+    if( VERBOSE > 2 ) {
+      char *oe = out + sprintf(out, "\nTotals:");
+      for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp )
+        oe += sprintf(oe, "\n[" COUNT "] "
+          REAL " +- " REAL "  \tchisq " REAL " (" COUNT " df)",
+          comp + 1, SHOW(integral[comp]), SHOW(error[comp]),
+          SHOW(tot->chisq), df);
+      Print(out);
+    }
+
+    ML_ONLY(neff = 1;)
+  }
+
+#ifdef MLVERSION
+  if( REGIONS ) {
+    Vector(real, bounds, t->ndim*2);
+
+    MLPutFunction(stdlink, "List", 2);
+
+    MLPutFunction(stdlink, "List", t->nregions);
+    for( iregion = 0; iregion < t->nregions; ++iregion ) {
+      Region *region = RegionPtr(iregion);
+      cResult *Res;
+      real *d = bounds;
+
+      for( B = (b = region->bounds) + t->ndim; b < B; ++b ) {
+        *d++ = b->lower;
+        *d++ = b->upper;
+      }
+
+      MLPutFunction(stdlink, "Cuba`Divonne`region", 4);
+
+      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};
+        MLPutRealxList(stdlink, r, Elements(r));
+      }
+
+      MLPutInteger(stdlink, region->depth + 1);  /* misused for df */
+    }
+  }
+#endif
+
+abort:
+  FORK_ONLY(FrameFree(t, Master);)
+
+  RuleFree(t);
+  SamplesFree(&t->samples[2]);
+  SamplesFree(&t->samples[1]);
+  SamplesFree(&t->samples[0]);
+  free(t->region);
+  free(t->xgiven);
+
+  StateRemove(t);
+
+  return fail;
+}
+
diff --git a/Cuba/src/divonne/Iterate.c b/Cuba/src/divonne/Iterate.c
new file mode 100644
index 0000000000000000000000000000000000000000..ac4a4cda060153ab160a054a68cfe9e50cd700df
--- /dev/null
+++ b/Cuba/src/divonne/Iterate.c
@@ -0,0 +1,132 @@
+/*
+	Iterate.c
+		recursion over regions
+		this file is part of Divonne
+		last modified 12 Mar 15 th
+*/
+
+
+static void Iterate(This *t, count iregion, cint depth, cint isamples,
+  Totals *totals)
+{
+  csize_t regionsize = RegionSize;
+  Region *parent, *region;
+  typedef struct {
+    real avg, err, spread, spreadsq;
+  } Corr;
+  Vector(Corr, corr, NCOMP);
+  Corr *c, *C = corr + t->ncomp;
+  Result *res;
+  count ireg, mreg = iregion;
+  count comp, maxsplit;
+  int last, idest, isrc;
+
+  region = RegionPtr(iregion);
+  region->depth = depth;
+  region->next = -iregion - 1;
+  if( isamples < 0 ) Split(t, iregion);
+  else {
+    region->isamples = isamples;
+    ExploreSerial(t, iregion);
+  }
+
+  ireg = iregion + RegionPtr(iregion)->next;
+
+  do {
+    region = RegionPtr(ireg);
+    if( region->depth > 0 ) {
+      --region->depth;
+FORK_ONLY(more:)
+      ireg = Explore(t, ireg);
+      if( ireg == -1 ) return;
+      region = RegionPtr(ireg);
+    }
+    if( region->depth < 0 ) mreg = IMax(mreg, ireg);
+    ireg += region->next;
+  } while( ireg > 0 );
+
+  FORK_ONLY(if( t->running ) goto more;)
+
+  maxsplit = 1;
+  for( ireg = mreg; ireg >= iregion; --ireg ) {
+    parent = RegionPtr(ireg);
+    maxsplit -= NegQ(parent->depth);
+    if( parent->depth < 0 ) {
+      count xreg;
+      struct {
+        count from, to;
+      } todo[maxsplit], *tdmax = todo, *td;
+      count nsplit = 0;
+      real norm;
+
+      FClear(corr);
+
+      tdmax->from = ireg + parent->next;
+      tdmax->to = tdmax->from - parent->depth;
+      ++tdmax;
+      for( td = todo; td < tdmax; ++td ) {
+        for( xreg = td->from; xreg < td->to; ++xreg ) {
+          Region *region = RegionPtr(xreg);
+          if( region->depth < 0 ) {
+            tdmax->from = xreg + region->next;
+            tdmax->to = tdmax->from - region->depth;
+            ++tdmax;
+          }
+          else {
+            ++nsplit;
+            for( res = RegionResult(region), c = corr; c < C; ++res, ++c ) {
+              c->avg += res->avg;
+              c->err += res->err;
+              c->spread += Sq(res->spread);
+            }
+          }
+        }
+      }
+
+      norm = 1./nsplit--;
+      for( res = RegionResult(parent), c = corr; c < C; ++res, ++c ) {
+        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/sqrtx(c->spread);
+      }
+
+      for( td = todo; td < tdmax; ++td )
+        for( xreg = td->from; xreg < td->to; ++xreg ) {
+          Region *region = RegionPtr(xreg);
+          if( region->depth >= 0 ) {
+            cnumber neff = t->samples[region->isamples].neff;
+            for( res = RegionResult(region), c = corr; c < C; ++res, ++c ) {
+              if( res->err > 0 ) res->err = res->err*c->err + c->avg;
+              res->spread = res->spread*c->spread + c->avg*neff;
+              c->spreadsq += Sq(res->spread);
+            }
+          }
+        }
+    }
+  }
+
+  if( totals )
+    for( comp = 0; comp < t->ncomp; ++comp )
+      totals[comp].spreadsq += corr[comp].spreadsq;
+
+  for( last = -1, idest = isrc = iregion; iregion <= mreg; ++iregion ) {
+    Region *region = RegionPtr(iregion);
+    cint cur = NegQ(region->depth);
+    switch( cur - last ) {
+    case -1:
+      memmove(RegionPtr(idest), RegionPtr(isrc),
+        (iregion - isrc)*regionsize);
+      idest += iregion - isrc;
+      break;
+    case 1:
+      isrc = iregion;
+    }
+    last = cur;
+  }
+
+  memmove(RegionPtr(idest), RegionPtr(iregion),
+    (t->nregions - iregion)*regionsize);
+  t->nregions += idest - iregion;
+}
+
diff --git a/Cuba/src/divonne/KorobovCoeff.c b/Cuba/src/divonne/KorobovCoeff.c
new file mode 120000
index 0000000000000000000000000000000000000000..c290ac588290741c73252f91ee6282b0582ac280
--- /dev/null
+++ b/Cuba/src/divonne/KorobovCoeff.c
@@ -0,0 +1 @@
+KorobovCoeff.c-9689
\ No newline at end of file
diff --git a/Cuba/src/divonne/KorobovCoeff.c-16033 b/Cuba/src/divonne/KorobovCoeff.c-16033
new file mode 100644
index 0000000000000000000000000000000000000000..d242fdc8ffba236f3afe54bbfb76cebf9e021486
--- /dev/null
+++ b/Cuba/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/Cuba/src/divonne/KorobovCoeff.c-2423 b/Cuba/src/divonne/KorobovCoeff.c-2423
new file mode 100644
index 0000000000000000000000000000000000000000..658b94ac83a71e3de3866b56750984fafdf60d85
--- /dev/null
+++ b/Cuba/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/Cuba/src/divonne/KorobovCoeff.c-3319 b/Cuba/src/divonne/KorobovCoeff.c-3319
new file mode 100644
index 0000000000000000000000000000000000000000..286cb280943ae4ab53ff86ef452bbaa63a0a8e54
--- /dev/null
+++ b/Cuba/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/Cuba/src/divonne/KorobovCoeff.c-5879 b/Cuba/src/divonne/KorobovCoeff.c-5879
new file mode 100644
index 0000000000000000000000000000000000000000..fc4588e178eed145160ab8950973111ed0f92766
--- /dev/null
+++ b/Cuba/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/Cuba/src/divonne/KorobovCoeff.c-9689 b/Cuba/src/divonne/KorobovCoeff.c-9689
new file mode 100644
index 0000000000000000000000000000000000000000..e8ace85e1523cce544cd700a3bee7f834caec425
--- /dev/null
+++ b/Cuba/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}
+};
diff --git a/Cuba/src/divonne/Rule.c b/Cuba/src/divonne/Rule.c
new file mode 100644
index 0000000000000000000000000000000000000000..813b91848733eca1f5355d3fd6a0fe611a6fd902
--- /dev/null
+++ b/Cuba/src/divonne/Rule.c
@@ -0,0 +1,711 @@
+/*
+	Rule.c
+		integration with cubature rules
+		code lifted with minor modifications from DCUHRE
+		by J. Berntsen, T. Espelid, and A. Genz
+		this file is part of Divonne
+		last modified 7 May 15 th
+*/
+
+
+static void Rule13Alloc(This *t)
+{
+  static creal w[][nrules] = {
+    { .00844923090033615,     .3213775489050763,     .3372900883288987,
+     -.8264123822525677,      .6539094339575232 },
+    { .023771474018994404,   -.1767341636743844,    -.1644903060344491,
+      .306583861409436,      -.2041614154424632},
+    { .02940016170142405,     .07347600537466073,    .07707849911634623,
+      .002389292538329435,   -.174698151579499 },
+    { .006644436465817374,   -.03638022004364754,   -.03804478358506311,
+     -.1343024157997222,      .03937939671417803 },
+    { .0042536044255016,      .021252979220987123,   .02223559940380806,
+      .08833366840533902,     .006974520545933992 },
+    { 0,                      .1460984204026913,     .1480693879765931,
+      0,                      0 },
+    { .0040664827465935255,   .017476132861520992,  4.467143702185815e-6,
+      .0009786283074168292,   .0066677021717782585 },
+    { .03362231646315497,     .1444954045641582,     .150894476707413,
+     -.1319227889147519,      .05512960621544304 },
+    { .033200804136503725,    .0001307687976001325, 3.6472001075162155e-5,
+      .00799001220015063,     .05443846381278608 },
+    { .014093686924979677,    .0005380992313941161,  .000577719899901388,
+      .0033917470797606257,   .02310903863953934 },
+    { .000977069770327625,    .0001042259576889814,  .0001041757313688177,
+      .0022949157182832643,   .01506937747477189 },
+    { .007531996943580376,   -.001401152865045733,  -.001452822267047819,
+     -.01358584986119197,    -.060570216489018905 },
+    { .02577183086722915,     .008041788181514763,   .008338339968783704,
+      .04025866859057809,     .04225737654686337},
+    { .015625,               -.1420416552759383,    -.147279632923196,
+      .003760268580063992,    .02561989142123099 }
+  };
+
+  static creal g[] = {
+     .12585646717265545,      .3506966822267133,
+     .4795480315809981,       .4978005239276064,
+     .25,                     .07972723291487795,
+     .1904495567970094,       .3291384627633596,
+     .43807365825146577,      .499121592026599,
+     .4895111329084231,       .32461421628226944,
+     .43637106005656195,      .1791307322940614,
+     .2833333333333333,       .1038888888888889 };
+
+  enum { nsets = 14, ndim = 2 };
+
+  count n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  Copy(last->weight, w[0], nrules);
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[1], nrules);
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[2], nrules);
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[3], nrules);
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[4], nrules);
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[5], nrules);
+  last->gen[0] = g[4];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[6], nrules);
+  last->gen[0] = g[5];
+  last->gen[1] = g[5];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[7], nrules);
+  last->gen[0] = g[6];
+  last->gen[1] = g[6];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[8], nrules);
+  last->gen[0] = g[7];
+  last->gen[1] = g[7];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[9], nrules);
+  last->gen[0] = g[8];
+  last->gen[1] = g[8];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[10], nrules);
+  last->gen[0] = g[9];
+  last->gen[1] = g[9];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[11], nrules);
+  last->gen[0] = g[10];
+  last->gen[1] = g[11];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[12], nrules);
+  last->gen[0] = g[12];
+  last->gen[1] = g[13];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  Copy(last->weight, w[13], nrules);
+  last->gen[0] = g[14];
+  last->gen[1] = g[15];
+
+  t->rule13.first = first;
+  t->rule13.last = last;
+  t->rule13.errcoeff[0] = 10;
+  t->rule13.errcoeff[1] = 1;
+  t->rule13.errcoeff[2] = 5;
+  t->rule13.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule11Alloc(This *t)
+{
+  static creal w[][nrules] = {
+    { .0009903847688882167,  1.715006248224684,     1.936014978949526,
+      .517082819560576,      2.05440450381852 },
+    { .0084964717409851,     -.3755893815889209,    -.3673449403754268,
+      .01445269144914044,     .013777599884901202 },
+    { .00013587331735072814,  .1488632145140549,     .02929778657898176,
+     -.3601489663995932,     -.576806291790441 },
+    { .022982920777660364,   -.2497046640620823,    -.1151883520260315,
+      .3628307003418485,      .03726835047700328 },
+    { .004202649722286289,    .1792501419135204,     .05086658220872218,
+      .007148802650872729,    .0068148789397772195 },
+    { .0012671889041675774,   .0034461267589738897,  .04453911087786469,
+     -.09222852896022966,     .057231697338518496 },
+    { .0002109560854981544,  -.005140483185555825,  -.022878282571259,
+      .01719339732471725,    -.044930187438112855 },
+    { .016830857056410086,    .006536017839876424,   .02908926216345833,
+     -.102141653746035,       .027292365738663484 },
+    { .00021876823557504823, -.00065134549392297,   -.002898884350669207,
+     -.007504397861080493,    .000354747395055699 },
+    { .009690420479796819,   -.006304672433547204,  -.028059634133074954,
+      .01648362537726711,     .01571366799739551 },
+    { .030773311284628138,    .01266959399788263,    .05638741361145884,
+      .05234610158469334,     .049900992192785674 },
+    { .0084974310856038,     -.005454241018647931,  -.02427469611942451,
+      .014454323316130661,    .0137791555266677 },
+    { .0017749535291258914,   .004826995274768427,   .021483070341828822,
+      .003019236275367777,    .0028782064230998723 }
+  };
+
+  static creal g[] = {
+     .095,                    .25,
+     .375,                    .4,
+     .4975,                   .49936724991757,
+     .38968518428362114,      .49998494965443835,
+     .3951318612385894,       .22016983438253684,
+     .4774686911397297,       .2189239229503431,
+     .4830546566815374,       .2288552938881567 };
+
+  enum { nsets = 13, ndim = 3 };
+
+  count n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  Copy(last->weight, w[0], nrules);
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[1], nrules);
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[2], nrules);
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[3], nrules);
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[4], nrules);
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  Copy(last->weight, w[5], nrules);
+  last->gen[0] = g[4];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[6], nrules);
+  last->gen[0] = g[5];
+  last->gen[1] = g[5];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  Copy(last->weight, w[7], nrules);
+  last->gen[0] = g[6];
+  last->gen[1] = g[6];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[8], nrules);
+  last->gen[0] = g[7];
+  last->gen[1] = g[7];
+  last->gen[2] = g[7];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[9], nrules);
+  last->gen[0] = g[8];
+  last->gen[1] = g[8];
+  last->gen[2] = g[8];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  Copy(last->weight, w[10], nrules);
+  last->gen[0] = g[9];
+  last->gen[1] = g[9];
+  last->gen[2] = g[9];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2);
+  Copy(last->weight, w[11], nrules);
+  last->gen[0] = g[10];
+  last->gen[1] = g[11];
+  last->gen[2] = g[11];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2);
+  Copy(last->weight, w[12], nrules);
+  last->gen[0] = g[12];
+  last->gen[1] = g[12];
+  last->gen[2] = g[13];
+
+  t->rule11.first = first;
+  t->rule11.last = last;
+  t->rule11.errcoeff[0] = 4;
+  t->rule11.errcoeff[1] = .5;
+  t->rule11.errcoeff[2] = 3;
+  t->rule11.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule9Alloc(This *t)
+{
+  static creal w[] = {
+    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[] = {
+    RC(.4779536579022695061928604197171830064732),
+    RC(.2030285873691198677998034402373279133258),
+    RC(.4476273546261781288207704806530998539285),
+    RC(.125),
+    RC(.3430378987808781457001426145164678603407) };
+
+  enum { nsets = 9 };
+
+  ccount ndim = t->ndim;
+  ccount twondim = 1 << ndim;
+  count dim, n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  last->weight[0] = ndim*(ndim*(ndim*w[0] + w[1]) + w[2]) + w[3];
+  last->weight[1] = ndim*(ndim*(ndim*w[4] + w[5]) + w[6]) - w[7];
+  last->weight[2] = ndim*w[8] - last->weight[1];
+  last->weight[3] = ndim*(ndim*w[9] + w[10]) - 1 + last->weight[0];
+  last->weight[4] = ndim*w[11] + 1 - last->weight[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = ndim*(ndim*w[12] + w[13]) + w[14];
+  last->weight[1] = ndim*(ndim*w[15] + w[16]) + w[17];
+  last->weight[2] = w[18] - last->weight[1];
+  last->weight[3] = ndim*w[19] + w[20] + last->weight[0];
+  last->weight[4] = w[21] - last->weight[0];
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = ndim*w[22] + w[23];
+  last->weight[1] = ndim*w[24] + w[25];
+  last->weight[2] = w[26] - last->weight[1];
+  last->weight[3] = ndim*w[27] + w[28];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[29];
+  last->weight[1] = w[30];
+  last->weight[2] = -w[29];
+  last->weight[3] = w[31];
+  last->weight[4] = -w[29];
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[2] = w[32];
+  last->gen[0] = g[3];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  last->weight[0] = w[33] - ndim*w[12];
+  last->weight[1] = w[34] - ndim*w[15];
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = w[35] + last->weight[0];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1);
+  last->weight[0] = w[36];
+  last->weight[1] = w[37];
+  last->weight[2] = -w[37];
+  last->weight[3] = w[38];
+  last->weight[4] = -w[36];
+  last->gen[0] = g[0];
+  last->gen[1] = g[1];
+
+  NextSet(last);
+  n += last->n = 4*ndim*(ndim - 1)*(ndim - 2)/3;
+  last->weight[0] = w[39];
+  last->weight[1] = w[40];
+  last->weight[2] = -w[40];
+  last->weight[3] = w[39];
+  last->weight[4] = -w[39];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+  last->gen[2] = g[0];
+
+  NextSet(last);
+  n += last->n = twondim;
+  last->weight[0] = w[41]/twondim;
+  last->weight[1] = w[7]/twondim;
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = last->weight[0];
+  last->weight[4] = -last->weight[0];
+  for( dim = 0; dim < ndim; ++dim )
+    last->gen[dim] = g[4];
+
+  t->rule9.first = first;
+  t->rule9.last = last;
+  t->rule9.errcoeff[0] = 5;
+  t->rule9.errcoeff[1] = 1;
+  t->rule9.errcoeff[2] = 5;
+  t->rule9.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static void Rule7Alloc(This *t)
+{
+  static creal w[] = {
+    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[] = {
+    RC(.4779536579022695061928604197171830064732),
+    RC(.2030285873691198677998034402373279133258),
+    RC(.375),
+    RC(.3430378987808781457001426145164678603407) };
+
+  enum { nsets = 6 };
+
+  ccount ndim = t->ndim;
+  ccount twondim = 1 << ndim;
+  count dim, n, r;
+  Set *first, *last, *s, *x;
+  csize_t setsize = SetSize;
+
+  Die(first = calloc(nsets, setsize));
+
+  last = first;
+  n = last->n = 1;
+  last->weight[0] = ndim*(ndim*w[0] + w[1]) + w[2];
+  last->weight[1] = ndim*(ndim*w[3] + w[4]) - w[5];
+  last->weight[2] = ndim*w[6] - last->weight[1];
+  last->weight[3] = ndim*(ndim*w[7] + w[8]) - w[9];
+  last->weight[4] = 1 - last->weight[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[10];
+  last->weight[1] = w[11];
+  last->weight[2] = -w[10];
+  last->weight[3] = w[12];
+  last->weight[4] = -w[10];
+  last->gen[0] = g[1];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[0] = w[13] - ndim*w[0];
+  last->weight[1] = w[14] - ndim*w[3];
+  last->weight[2] = w[15] - last->weight[1];
+  last->weight[3] = w[16] - ndim*w[7];
+  last->weight[4] = -last->weight[0];
+  last->gen[0] = g[0];
+
+  NextSet(last);
+  n += last->n = 2*ndim;
+  last->weight[2] = w[17];
+  last->gen[0] = g[2];
+
+  NextSet(last);
+  n += last->n = 2*ndim*(ndim - 1);
+  last->weight[0] = -w[7];
+  last->weight[1] = w[18];
+  last->weight[2] = -w[18];
+  last->weight[3] = w[19];
+  last->weight[4] = w[7];
+  last->gen[0] = g[0];
+  last->gen[1] = g[0];
+
+  NextSet(last);
+  n += last->n = twondim;
+  last->weight[0] = w[20]/twondim;
+  last->weight[1] = w[5]/twondim;
+  last->weight[2] = -last->weight[1];
+  last->weight[3] = w[9]/twondim;
+  last->weight[4] = -last->weight[0];
+  for( dim = 0; dim < ndim; ++dim )
+    last->gen[dim] = g[3];
+
+  t->rule7.first = first;
+  t->rule7.last = last;
+  t->rule7.errcoeff[0] = 5;
+  t->rule7.errcoeff[1] = 1;
+  t->rule7.errcoeff[2] = 5;
+  t->rule7.n = n;
+
+  for( s = first; s <= last; NextSet(s) )
+    for( r = 1; r < nrules - 1; ++r ) {
+      creal scale = (s->weight[r] == 0) ? 100 :
+        -s->weight[r + 1]/s->weight[r];
+      real sum = 0;
+      for( x = first; x <= last; NextSet(x) )
+        sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
+      s->scale[r] = scale;
+      s->norm[r] = 1/sum;
+    }
+}
+
+/*********************************************************************/
+
+static inline void RuleAlloc(This *t)
+{
+  if( (t->ndim - 2) | (t->key1 - 13)*(t->key2 - 13)*(t->key3 - 13) )
+    t->rule13.first = NULL;
+  else Rule13Alloc(t);
+
+  if( (t->ndim - 3) | (t->key1 - 11)*(t->key2 - 11)*(t->key3 - 11) )
+    t->rule11.first = NULL;
+  else Rule11Alloc(t);
+
+  if( (t->key1 - 9)*(t->key2 - 9)*(t->key3 - 9) )
+    t->rule9.first = NULL;
+  else Rule9Alloc(t);
+
+  if( (t->key1 - 7)*(t->key2 - 7)*(t->key3 - 7) )
+    t->rule7.first = NULL;
+  else Rule7Alloc(t);
+}
+
+/*********************************************************************/
+
+static inline void RuleFree(cThis *t)
+{
+  free(t->rule7.first);
+  free(t->rule9.first);
+  free(t->rule11.first);
+  free(t->rule13.first);
+}
+
+/*********************************************************************/
+
+static real *ExpandFS(cThis *t, cBounds *b, real *g, real *x)
+{
+  count dim, ndim = t->ndim;
+
+next:
+  /* Compute centrally symmetric sum for permutation of G */
+
+  for( dim = 0; dim < ndim; ++dim )
+    *x++ = (.5 + g[dim])*b[dim].lower + (.5 - g[dim])*b[dim].upper;
+
+  for( dim = 0; dim < ndim; ) {
+    g[dim] = -g[dim];
+    if( g[dim++] < 0 ) goto next;
+  }
+
+  /* Find next distinct permutation of G and loop back for next sum.
+     Permutations are generated in reverse lexicographic order. */
+
+  for( dim = 1; dim < ndim; ++dim ) {
+    creal gd = g[dim];
+    if( g[dim - 1] > gd ) {
+      count i, j = dim, ix = dim, dx = dim - 1;
+      for( i = 0; i < --j; ++i ) {
+        creal tmp = g[i];
+        g[i] = g[j];
+        g[j] = tmp;
+        if( tmp <= gd ) --dx;
+        if( g[i] > gd ) ix = i;
+      }
+      if( g[dx] <= gd ) dx = ix;
+      g[dim] = g[dx];
+      g[dx] = gd;
+      goto next;
+    }
+  }
+
+  /* Restore original order to generators */
+
+  for( dim = 0; dim < --ndim; ++dim ) {
+    creal tmp = g[dim];
+    g[dim] = g[ndim];
+    g[ndim] = tmp;
+  }
+
+  return x;
+}
+
+/*********************************************************************/
+
+static void SampleRule(This *t, ccount iregion)
+{
+  SAMPLERDEFS;
+  Set *first = samples->rule->first;
+  Set *last = samples->rule->last;
+  Set *s;
+  creal *errcoeff = samples->rule->errcoeff;
+  count comp, rul, sn;
+  csize_t setsize = SetSize;
+
+  for( s = first; s <= last; NextSet(s) )
+    if( s->n ) x = ExpandFS(t, b, s->gen, x);
+
+  DoSample(t, n, samples->x, f);
+
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    real sum[nrules];
+    creal *f1 = f++;
+
+    Zap(sum);
+    for( s = first; s <= last; NextSet(s) )
+      for( sn = s->n; sn; --sn ) {
+        creal fun = *f1;
+        f1 += t->ncomp;
+        for( rul = 0; rul < nrules; ++rul )
+          sum[rul] += fun*s->weight[rul];
+      }
+
+    /* Search for the null rule, in the linear space spanned by two
+       successive null rules in our sequence, which gives the greatest
+       error estimate among all normalized (1-norm) null rules in this
+       space. */
+
+    for( rul = 1; rul < nrules - 1; ++rul ) {
+      real maxerr = 0;
+      for( s = first; s <= last; NextSet(s) )
+        maxerr = Max(maxerr,
+          fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
+      sum[rul] = maxerr;
+    }
+
+    res[comp].avg = region->vol*sum[0];
+    res[comp].err = region->vol*(
+      (errcoeff[0]*sum[1] <= sum[2] && errcoeff[0]*sum[2] <= sum[3]) ?
+        errcoeff[1]*sum[1] :
+        errcoeff[2]*Max(Max(sum[1], sum[2]), sum[3]) );
+  }
+}
+
diff --git a/Cuba/src/divonne/Sample.c b/Cuba/src/divonne/Sample.c
new file mode 100644
index 0000000000000000000000000000000000000000..113b6aed8d62052cdd9fd6756949827c35468cc6
--- /dev/null
+++ b/Cuba/src/divonne/Sample.c
@@ -0,0 +1,269 @@
+/*
+	Sample.c
+		most of what is related to sampling
+		this file is part of Divonne
+		last modified 12 Mar 15 th
+*/
+
+
+#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*/
+
+/*********************************************************************/
+
+static inline void SamplesIni(Samples *samples)
+{
+  samples->x = NULL;
+  samples->n = 0;
+}
+
+/*********************************************************************/
+
+static inline bool SamplesIniQ(cSamples *samples)
+{
+  return samples->x == NULL;
+}
+
+/*********************************************************************/
+
+static inline void SamplesFree(cSamples *samples)
+{
+  free(samples->x);
+}
+
+/*********************************************************************/
+
+static void SampleSobol(This *t, ccount iregion)
+{
+  SAMPLERDEFS;
+  Vector(real, avg, NCOMP);
+  real norm;
+  number i;
+  count dim, comp;
+
+  for( i = 0; i < n; ++i ) {
+    t->rng.getrandom(t, x);
+    for( dim = 0; dim < t->ndim; ++x, ++dim )
+      *x = b[dim].lower + *x*(b[dim].upper - b[dim].lower);
+  }
+
+  t->nrand += n;
+
+  DoSample(t, n, samples->x, f);
+
+  FCopy(avg, f);
+  f += t->ncomp;
+  for( i = 2; i < n; ++i )
+    for( comp = 0; comp < t->ncomp; ++comp )
+      avg[comp] += *f++;
+
+  norm = region->vol/samples->neff;
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    res[comp].avg = norm*avg[comp];
+    res[comp].err = 0;
+  }
+}
+
+/*********************************************************************/
+
+static void SampleKorobov(This *t, ccount iregion)
+{
+  SAMPLERDEFS;
+  real *xlast = x + t->ndim, *flast = f + t->ncomp;
+  Vector(real, avg, NCOMP);
+  real norm;
+  cnumber neff = samples->neff;
+  number nextra = 0, i;
+  real dist = 0;
+  count dim, comp;
+
+  for( i = 1; i < n; ++i ) {
+    number c = i;
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      creal dx = abs(2*c - neff)/(real)neff;
+      *xlast++ = b[dim].lower + dx*(b[dim].upper - b[dim].lower);
+      c = c*samples->coeff % neff;
+    }
+  }
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    creal dx = (x[dim] = b[dim].upper) - t->border.upper;
+    if( dx > 0 ) dist += Sq(dx);
+  }
+
+  if( dist > 0 ) {
+    dist = sqrtx(dist)/EXTRAPOLATE_EPS;
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      real x2 = x[dim], dx = x2 - t->border.upper;
+      if( dx > 0 ) {
+        x[dim] = t->border.upper;
+        x2 = t->border.upper - dx/dist;
+      }
+      xlast[dim] = x2;
+    }
+    nextra = 1;
+  }
+
+  DoSample(t, n + nextra, x, f);
+
+  FCopy(avg, flast);
+  flast += t->ncomp;
+  for( i = 2; i < n; ++i )
+    for( comp = 0; comp < t->ncomp; ++comp )
+      avg[comp] += *flast++;
+
+  if( nextra ) {
+    for( comp = 0; comp < t->ncomp; ++comp )
+      f[comp] += dist*(f[comp] - flast[comp]);
+    for( dim = 0; dim < t->ndim; ++dim )
+      x[dim] = b[dim].upper;
+  }
+
+  norm = region->vol/samples->neff;
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    res[comp].avg = norm*(avg[comp] + avg[comp] + f[comp]);
+    res[comp].err = 0;
+  }
+}
+
+/*********************************************************************/
+
+#define IsSobol(k) NegQ(k)
+#define IsRule(k, d) (k == 9 || k == 7 || (k == 11 && d == 3) || (k == 13 && d == 2))
+
+/* The following coding is used for key1, key2, key3:
+             0 = for key1, key2: use default,
+                 for key3: do nothing,
+             1 = for key3: split region again,
+             7 = degree-7 cubature rule,
+             9 = degree-9 cubature rule,
+            11 = degree-11 cubature rule (only in 3 dims),
+            13 = degree-13 cubature rule (only in 2 dims),
+     -inf..-40 = absolute # of points, Sobol numbers,
+       -39..-1 = multiplicator,        Sobol numbers,
+         1..39 = multiplicator,        Korobov numbers,
+       40..inf = absolute # of points, Korobov numbers.  */
+
+static number SamplesLookup(This *t, Samples *samples, cint key,
+  cnumber nwant, cnumber nmax, number nmin)
+{
+  number n;
+
+  if( key == 13 && t->ndim == 2 ) {
+    samples->rule = &t->rule13;
+    samples->n = n = nmin = t->rule13.n;
+    samples->sampler = SampleRule;
+  }
+  else if( key == 11 && t->ndim == 3 ) {
+    samples->rule = &t->rule11;
+    samples->n = n = nmin = t->rule11.n;
+    samples->sampler = SampleRule;
+  }
+  else if( key == 9 ) {
+    samples->rule = &t->rule9;
+    samples->n = n = nmin = t->rule9.n;
+    samples->sampler = SampleRule;
+  }
+  else if( key == 7 ) {
+    samples->rule = &t->rule7;
+    samples->n = n = nmin = t->rule7.n;
+    samples->sampler = SampleRule;
+  }
+  else {
+    n = Abs1(key);
+    if( n < 40 ) n *= nwant;
+    samples->sampler = (key < 0) ? SampleSobol :
+      (n = n/2 + 1, SampleKorobov);
+    samples->n = IMin(n, nmax);
+  }
+
+  samples->neff = samples->n;
+
+  return IDim(n - nmax) | Marked(nmax - nmin);
+}
+
+/*********************************************************************/
+
+static void SamplesAlloc(cThis *t, Samples *samples)
+{
+#define FIRST -INT_MAX
+#define MarkLast(x) ((x) | 0x40000000)
+#define UnmarkLast(x) ((x) & 0x3fffffff)
+
+#include "KorobovCoeff.c"
+
+  number nx, nf;
+
+  if( samples->sampler == SampleKorobov ) {
+    enum { max = Elements(prime) - 2 };
+    cint n = IMin(2*samples->n - 1, MAXPRIME);
+    int i = Hash(n), p;
+    count shift = 2 + NegQ(n - 1000);
+
+    while( i = IMin(IDim(i), max),
+           n > (p = prime[i + 1]) || n <= prime[i] ) {
+      cint d = (n - UnmarkLast(p)) >> ++shift;
+      i += Min1(d);
+    }
+
+    samples->coeff = coeff[i][t->ndim - KOROBOV_MINDIM];
+    samples->neff = p = UnmarkLast(p);
+    samples->n = p/2 + 1;
+  }
+
+  nx = t->ndim*(samples->n + 1);		/* need 1 for extrapolation */
+  nf = t->ncomp*(samples->n + 1);
+
+  Alloc(samples->x, nx + nf + t->ncomp + t->ncomp);
+  samples->f = samples->x + nx;
+}
+
+/*********************************************************************/
+
+static real Sample(This *t, creal *x0)
+{
+  Vector(real, xtmp, 2*NDIM);
+  Vector(real, ftmp, 2*NCOMP);
+  real *xlast = xtmp, f;
+  real dist = 0;
+  count dim, comp;
+  number n = 1;
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    creal x1 = *xlast++ = Min(Max(*x0++, 0.), 1.);
+    real dx;
+    if( (dx = x1 - t->border.lower) < 0 ||
+        (dx = x1 - t->border.upper) > 0 ) dist += Sq(dx);
+  }
+
+  if( dist > 0 ) {
+    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 ||
+          (dx = x2 - (b = t->border.upper)) > 0 ) {
+        xtmp[dim] = b;
+        x2 = b - dx/dist;
+      }
+      *xlast++ = x2;
+    }
+    n = 2;
+  }
+
+  DoSample(t, n, xtmp, ftmp);
+
+#define fin(x) Min(Max(x, -.5*INFTY), .5*INFTY) 
+
+  comp = Untag(t->selectedcomp);
+  f = fin(ftmp[comp]);
+  if( n > 1 ) f += dist*(f - fin(ftmp[comp + t->ncomp]));
+
+  return Sign(t->selectedcomp)*f;
+}
+
diff --git a/Cuba/src/divonne/Split.c b/Cuba/src/divonne/Split.c
new file mode 100644
index 0000000000000000000000000000000000000000..abffcbf8063b2524173d8d3687eac9a09718c399
--- /dev/null
+++ b/Cuba/src/divonne/Split.c
@@ -0,0 +1,312 @@
+/*
+	Split.c
+		determine optimal cuts for splitting a region
+		this file is part of Divonne
+		last modified 12 Mar 15 th
+*/
+
+
+#define BNDTOL .05
+#define FRACT .5
+#define SMALL 1e-10
+#define SINGTOL 1e-4
+
+#define LHSTOL .1
+#define GAMMATOL .1
+
+/* the next four macros must be in sync with the typedef of Bounds! */
+#define Lower(d) (2*d)
+#define Upper(d) (2*d + 1)
+#define Dim(i) ((i) >> 1)
+#define SignedDelta(i) (2*(i & 1) - 1)*delta[i]
+
+typedef struct {
+  count i;
+  real save, delta;
+  real f, df, fold;
+  real lhs, row, sol;
+} Cut;
+
+/*********************************************************************/
+
+static inline real Div(creal a, creal b)
+{
+  return (b != 0 /*&& fabsx(a) > SMALL*fabsx(b)*/) ? a/b : a;
+}
+
+/*********************************************************************/
+
+static void SomeCut(This *t, Cut *cut, Bounds *b)
+{
+  Vector(real, xmid, NDIM);
+  real ymid, maxdev;
+  count dim, maxdim;
+  static count nextdim = 0;
+
+  for( dim = 0; dim < t->ndim; ++dim )
+    xmid[dim] = .5*(b[dim].upper + b[dim].lower);
+  ymid = Sample(t, xmid);
+
+  maxdev = 0;
+  maxdim = 0;
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    real ylower, yupper, dev;
+    creal x = xmid[dim];
+    xmid[dim] = b[dim].lower;
+    ylower = Sample(t, xmid);
+    xmid[dim] = b[dim].upper;
+    yupper = Sample(t, xmid);
+    xmid[dim] = x;
+
+    dev = fabsx(ymid - .5*(ylower + yupper));
+    if( dev >= maxdev ) {
+      maxdev = dev;
+      maxdim = dim;
+    }
+  }
+
+  if( maxdev > 0 ) nextdim = 0;
+  else maxdim = nextdim++ % t->ndim;
+
+  cut->i = Upper(maxdim);
+  cut->save = b[maxdim].upper;
+  b[maxdim].upper = xmid[maxdim];
+}
+
+/*********************************************************************/
+
+static inline real Volume(cThis *t, creal *delta)
+{
+  real vol = 1;
+  count dim;
+  for( dim = 0; dim < t->ndim; ++dim )
+    vol *= delta[Lower(dim)] + delta[Upper(dim)];
+  return vol;
+}
+
+/*********************************************************************/
+
+static inline real SetupEqs(Cut *cut, ccount ncuts, real f)
+{
+  real sqsum = 0;
+  Cut *c = &cut[ncuts];
+  while( --c >= cut ) {
+    sqsum += Sq(c->lhs = f - c->f);
+    f = c->f;
+  }
+  return sqsum;
+}
+
+/*********************************************************************/
+
+static inline void SolveEqs(Cut *cut, count ncuts,
+  creal *delta, creal diff)
+{
+  real last = 0;
+  real r = 1;
+  Cut *c;
+
+  for( c = cut; ; ++c ) {
+    ccount dim = Dim(c->i);
+    c->row = r -=
+      Div(diff, (delta[Lower(dim)] + delta[Upper(dim)])*c->df);
+    if( --ncuts == 0 ) break;
+    last += r*c->lhs;
+  }
+
+  last = Div(c->lhs - last, r);
+
+  for( ; c >= cut; last += (--c)->lhs ) {
+    creal delmin = -(c->delta = delta[c->i]);
+    creal delmax = FRACT*(delmin + c->save);
+    c->sol = Div(last, c->df);
+    if( c->sol > delmax ) c->sol = .75*delmax;
+    if( c->sol < delmin ) c->sol = .75*delmin;
+  }
+}
+
+/*********************************************************************/
+
+static count FindCuts(This *t, Cut *cut, Bounds *bounds, creal vol,
+  real *xmajor, creal fmajor, creal fdiff)
+{
+  cint sign = (fdiff < 0) ? -1 : 1;
+
+  count ncuts = 0, icut;
+  Vector(real, delta, 2*NDIM);
+  real gamma, fgamma, lhssq;
+  count dim, div;
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    cBounds *b = &bounds[dim];
+    creal xsave = xmajor[dim];
+    real dist = b->upper - xsave;
+    if( dist >= BNDTOL*(b->upper - b->lower) ) {
+      Cut *c = &cut[ncuts++];
+      c->i = Upper(dim);
+      c->save = dist;
+      xmajor[dim] += dist *= FRACT;
+      c->f = Sample(t, xmajor);
+      xmajor[dim] = xsave;
+    }
+    delta[Upper(dim)] = dist;
+  }
+
+  for( dim = 0; dim < t->ndim; ++dim ) {
+    cBounds *b = &bounds[dim];
+    creal xsave = xmajor[dim];
+    real dist = xsave - b->lower;
+    if( dist >= BNDTOL*(b->upper - b->lower) ) {
+      Cut *c = &cut[ncuts++];
+      c->i = Lower(dim);
+      c->save = dist;
+      xmajor[dim] -= dist *= FRACT;
+      c->f = Sample(t, xmajor);
+      xmajor[dim] = xsave;
+    }
+    delta[Lower(dim)] = dist;
+  }
+
+  if( ncuts == 0 ) {
+    SomeCut(t, cut, bounds);
+    return 1;
+  }
+
+  for( ; ; ) {
+    real mindiff = INFTY;
+    Cut *mincut = cut;
+
+    for( icut = 0; icut < ncuts; ++icut ) {
+      Cut *c = &cut[icut];
+      creal diff = fabsx(fmajor - c->f);
+      if( diff <= mindiff ) {
+        mindiff = diff;
+        mincut = c;
+      }
+    }
+
+    gamma = Volume(t, delta)/vol;
+    fgamma = fmajor + (gamma - 1)*fdiff;
+
+    if( sign*(mincut->f - fgamma) < 0 ) break;
+
+    if( --ncuts == 0 ) {
+      SomeCut(t, cut, bounds);
+      return 1;
+    }
+
+    delta[mincut->i] = mincut->save;
+    memmove(mincut, mincut + 1, (char *)&cut[ncuts] - (char *)mincut);
+  }
+
+  for( icut = 0; icut < ncuts; ++icut ) {
+    Cut *c = &cut[icut];
+    c->fold = c->f;
+    c->df = (c->f - fmajor)/delta[c->i];
+  }
+
+  lhssq = SetupEqs(cut, ncuts, fgamma);
+
+repeat:
+  SolveEqs(cut, ncuts, delta, gamma*fdiff);
+
+  for( div = 1; div <= 16; div *= 4 ) {
+    real gammanew, lhssqnew;
+
+    for( icut = 0; icut < ncuts; ++icut ) {
+      Cut *c = &cut[icut];
+      real *x = &xmajor[Dim(c->i)];
+      creal xsave = *x;
+      delta[c->i] = c->delta + c->sol/div;
+      *x += SignedDelta(c->i);
+      c->f = Sample(t, xmajor);
+      *x = xsave;
+    }
+
+    gammanew = Volume(t, delta)/vol;
+    fgamma = fmajor + (gammanew - 1)*fdiff;
+    lhssqnew = SetupEqs(cut, ncuts, fgamma);
+
+    if( lhssqnew <= lhssq ) {
+      real fmax;
+
+      if( fabsx(gammanew - gamma) < GAMMATOL*gamma ) break;
+      gamma = gammanew;
+
+      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 = (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;
+      }
+
+      if( lhssqnew < Sq((1 + fmax)*LHSTOL) ) break;
+      lhssq = lhssqnew;
+      goto repeat;
+    }
+  }
+
+  for( icut = 0; icut < ncuts; ++icut ) {
+    Cut *c = &cut[icut];
+    real *b = (real *)bounds + c->i;
+    c->save = *b;
+    *b = xmajor[Dim(c->i)] + SignedDelta(c->i);
+  }
+
+  return ncuts;
+}
+
+/*********************************************************************/
+
+static void Split(This *t, ccount iregion)
+{
+  csize_t regionsize = RegionSize;
+  Region *region = RegionPtr(iregion);
+  Vector(Cut, cut, 2*NDIM);
+  Cut *c;
+  count ncuts, succ;
+  int depth;
+  real *b;
+
+  t->selectedcomp = region->cutcomp;
+  t->neval_cut -= t->neval;
+  ncuts = FindCuts(t, cut, region->bounds, region->vol,
+    RegionMinMax(region) + region->xmajor, region->fmajor,
+    region->fmajor - region->fminor);
+  t->neval_cut += t->neval;
+
+  depth = region->depth - ncuts;
+
+  EnlargeRegions(t, ++ncuts);
+  region = RegionPtr(iregion);
+  region->depth = -ncuts;
+  succ = iregion + region->next;
+  region->next = t->nregions - iregion;
+  b = (real *)region->bounds;
+
+  region = RegionPtr(t->nregions);
+  XCopy(region->bounds, b);
+  region->depth = IDim(depth) + 1;
+  region->next = 1;
+  region->isamples = 0;
+  for( c = cut; --ncuts; ++c ) {
+    ccount ci = c->i;
+    creal tmp = b[ci ^ 1];
+    b[ci ^ 1] = b[ci];
+    b[ci] = c->save;
+    region = RegionPtr(++t->nregions);
+    XCopy(region->bounds, b);
+    region->depth = IDim(depth) + 1;
+    region->next = 1;
+    region->isamples = 0;
+    ++depth;
+    b[ci ^ 1] = tmp;
+  }
+  region->next = succ - t->nregions++;
+}
+
diff --git a/Cuba/src/divonne/common.c b/Cuba/src/divonne/common.c
new file mode 100644
index 0000000000000000000000000000000000000000..34be0c2b89f7db7ca6b14eebb097f89caadeefb4
--- /dev/null
+++ b/Cuba/src/divonne/common.c
@@ -0,0 +1,73 @@
+/*
+	common.c
+		includes most of the modules
+		this file is part of Divonne
+		last modified 29 Jul 13 th
+*/
+
+
+#include "Random.c"
+#include "ChiSquare.c"
+#include "Rule.c"
+#include "Sample.c"
+#include "FindMinimum.c"
+#include "Split.c"
+#include "Explore.c"
+#include "Iterate.c"
+
+static inline bool BadDimension(cThis *t, ccount key)
+{
+  if( t->ndim > MAXDIM ) return true;
+  if( IsSobol(key) ) return
+    t->ndim < SOBOL_MINDIM || (t->seed == 0 && t->ndim > SOBOL_MAXDIM);
+  if( IsRule(key, t->ndim) ) return t->ndim < 1;
+  return t->ndim < KOROBOV_MINDIM || t->ndim > KOROBOV_MAXDIM;
+}
+
+static inline bool BadComponent(cThis *t)
+{
+  if( t->ncomp > MAXCOMP ) return true;
+  return t->ncomp < 1;
+}
+
+static inline void AllocGiven(This *t)
+{
+  real *xgiven = NULL, *fgiven = NULL;
+
+  if( t->ngiven | t->nextra ) {
+    cnumber nxgiven = t->ngiven*t->ndim;
+    cnumber nxextra = t->nextra*t->ndim;
+    cnumber nfgiven = t->ngiven*t->ncomp;
+    cnumber nfextra = t->nextra*t->ncomp;
+
+    Alloc(xgiven, nxgiven + nxextra + nfgiven + nfextra);
+    t->xextra = xgiven + nxgiven;
+    fgiven = t->xextra + nxextra;
+    t->fextra = fgiven + nfgiven;
+
+    if( nxgiven ) {
+#ifdef MLVERSION
+      Copy(xgiven, t->xgiven, nxgiven);
+      Copy(fgiven, t->fgiven, nfgiven);
+#else
+      if( t->ldxgiven == t->ndim )
+        Copy(xgiven, t->xgiven, nxgiven);
+      else {
+        number i;
+        real *sgiven = t->xgiven, *dgiven = xgiven;
+        for( i = 0; i < t->ngiven; ++i ) {
+          Copy(dgiven, sgiven, t->ndim);
+          sgiven += t->ldxgiven;
+          dgiven += t->ndim;
+        }
+      }
+      t->phase = 0;
+      DoSample(t, t->ngiven, xgiven, fgiven);
+#endif
+    }
+  }
+
+  t->xgiven = xgiven;
+  t->fgiven = fgiven;
+}
+
diff --git a/Cuba/src/divonne/decl.h b/Cuba/src/divonne/decl.h
new file mode 100644
index 0000000000000000000000000000000000000000..98023ec52838642cd6012e72a64058f53dcdf0be
--- /dev/null
+++ b/Cuba/src/divonne/decl.h
@@ -0,0 +1,161 @@
+/*
+	decl.h
+		Type declarations
+		this file is part of Divonne
+		last modified 9 Oct 14 th
+*/
+
+
+#include "stddecl.h"
+
+#define INIDEPTH 3
+#define DEPTH 5
+#define POSTDEPTH 15
+
+#define Tag(x) ((x) | INT_MIN)
+#define Untag(x) ((x) & INT_MAX)
+
+typedef struct {
+  real lower, upper;
+} Bounds;
+
+typedef const Bounds cBounds;
+
+typedef struct {
+  real avg, err;
+} PhaseResult;
+
+typedef struct {
+  real avg, spreadsq;
+  real spread, secondspread;
+  real nneed, maxerrsq, mindevsq;
+  real integral, sigsq, chisq;
+  PhaseResult phase[2];
+  int iregion;
+} Totals;
+
+enum { nrules = 5 };
+      
+typedef struct {
+  count n;
+  real weight[nrules], scale[nrules], norm[nrules];
+  real gen[];
+} Set;
+
+#define SetSize (sizeof(Set) + t->ndim*sizeof(real))
+
+#define NextSet(p) p = (Set *)((char *)p + setsize)
+
+typedef struct {
+  Set *first, *last;
+  real errcoeff[3];
+  count n;
+} Rule;
+
+typedef const Rule cRule;
+
+typedef struct samples {
+  real *x, *f;
+  void (*sampler)(struct _this *t, ccount);
+  cRule *rule;
+  number n, neff;
+  count coeff;
+} Samples;
+
+typedef const Samples cSamples;
+
+typedef struct {
+  real diff, err, spread;
+} Errors;
+
+typedef const Errors cErrors;
+
+typedef struct {
+  real avg, err, spread, chisq;
+  real fmin, fmax;
+} Result;
+
+typedef const Result cResult;
+
+#define MinMaxSize (t->ncomp*t->ndim*2*sizeof(real))
+
+typedef struct region {
+  int depth, next;
+  count isamples, cutcomp, xmajor;
+  real fmajor, fminor, vol;
+  Bounds bounds[];
+} Region;
+
+#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 *, cnumber *, cint *, cint *);
+
+typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *, void *);
+
+typedef struct _this {
+  count ndim, ncomp;
+#ifndef MLVERSION
+  Integrand integrand;
+  void *userdata;
+  number nvec;
+#ifdef HAVE_FORK
+  SHM_ONLY(int shmid;)
+  Spin *spin;
+  real *frame;
+  number nframe;
+  int running;
+#endif
+  PeakFinder peakfinder;
+#endif
+  real epsrel, epsabs;
+  int flags, seed;
+  number mineval, maxeval;
+  int key1, key2, key3;
+  count maxpass;
+  Bounds border;
+  real maxchisq, mindeviation;
+  number ngiven, nextra;
+  real *xgiven, *fgiven;
+  real *xextra, *fextra;
+  count ldxgiven;
+  count nregions;
+  cchar *statefile;
+  number neval, neval_opt, neval_cut, nrand;
+  count phase;
+  count selectedcomp, size;
+  Samples samples[3];
+  Totals *totals;
+  Rule rule7, rule9, rule11, rule13;
+  RNGState rng;
+  Region *region;
+  jmp_buf abort;
+} This;
+
+typedef const This cThis;
+
+
+#define CHUNKSIZE 4096
+
+#define AllocRegions(t) \
+  MemAlloc((t)->region, (t)->size*regionsize)
+
+#define EnlargeRegions(t, n) if( (t)->nregions + n > (t)->size ) \
+  ReAlloc((t)->region, ((t)->size += CHUNKSIZE)*regionsize)
+
+#define SAMPLERDEFS \
+  csize_t regionsize = RegionSize; \
+  Region *region = RegionPtr(iregion); \
+  cBounds *b = region->bounds; \
+  Result *res = RegionResult(region); \
+  cSamples *samples = &t->samples[region->isamples]; \
+  real *x = samples->x, *f = samples->f; \
+  cnumber n = samples->n
+
diff --git a/Cuba/src/suave/Fluct.c b/Cuba/src/suave/Fluct.c
new file mode 100644
index 0000000000000000000000000000000000000000..c226d0cc237bea84eb2d7f23f2df5c4af52786b9
--- /dev/null
+++ b/Cuba/src/suave/Fluct.c
@@ -0,0 +1,76 @@
+/*
+	Fluct.c
+		compute the fluctuation in the left and right half
+		this file is part of Suave
+		last modified 14 Mar 15 th
+*/
+
+
+#if defined(HAVE_LONG_DOUBLE) && defined(HAVE_POWL) && REALSIZE <= 10
+
+typedef long double realL;
+#define REALL_MAX_EXP LDBL_MAX_EXP
+#define REALL_MAX LDBL_MAX
+#define powL powl
+#define ldexpL ldexpl
+
+#else
+
+typedef real realL;
+#define REALL_MAX_EXP REAL_MAX_EXP
+#define REALL_MAX REAL_MAX
+#define powL powx
+#define ldexpL ldexpx
+
+#endif
+
+typedef const realL crealL;
+
+typedef struct {
+  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,
+  cBounds *b, creal *w, number n, ccount comp, creal avg, creal err)
+{
+  creal *x = w + n;
+  creal *f = x + n*t->ndim + comp;
+  count nvar = 2*t->ndim;
+  creal norm = 1/(err*Max(fabs(avg), err));
+  creal flat = 2/3./t->flatness;
+  crealL max = ldexpL(1., (int)((REALL_MAX_EXP - 2)/t->flatness));
+
+  Clear(var, nvar);
+
+  while( n-- ) {
+    count dim;
+    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))];
+      crealL f = v->fluct + ft;
+      v->fluct = MaxL(f, REALL_MAX/2);
+      ++v->n;
+    }
+  }
+
+  while( nvar-- ) {
+    var->fluct = powL(var->fluct, flat);
+    ++var;
+  }
+}
+
diff --git a/Cuba/src/suave/Grid.c b/Cuba/src/suave/Grid.c
new file mode 100644
index 0000000000000000000000000000000000000000..5ba2c3b5ba5ad4f9fa54bcff17ba6e0410d67bda
--- /dev/null
+++ b/Cuba/src/suave/Grid.c
@@ -0,0 +1,137 @@
+/*
+	Grid.c
+		utility functions for the Vegas grid
+		this file is part of Suave
+		last modified 12 Mar 15 th
+*/
+
+
+static void RefineGrid(cThis *t, Grid grid, Grid margsum)
+{
+  real avgperbin, thisbin, newcur, delta;
+  Grid imp, newgrid;
+  int bin, newbin;
+
+  /* smooth the f^2 value stored for each bin */
+  real prev = margsum[0];
+  real cur = margsum[1];
+  real norm = margsum[0] = .5*(prev + cur);
+  for( bin = 1; bin < NBINS - 1; ++bin ) {
+    creal s = prev + cur;
+    prev = cur;
+    cur = margsum[bin + 1];
+    norm += margsum[bin] = (s + cur)/3.;
+  }
+  norm += margsum[NBINS - 1] = .5*(prev + cur);
+
+  if( norm == 0 ) return;
+  norm = 1/norm;
+
+  /* compute the importance function for each bin */
+  avgperbin = 0;
+  for( bin = 0; bin < NBINS; ++bin ) {
+    real impfun = 0;
+    if( margsum[bin] > 0 ) {
+      creal r = margsum[bin]*norm;
+      avgperbin += impfun = powx((r - 1)/log(r), 1.5);
+    }
+    imp[bin] = impfun;
+  }
+  avgperbin /= NBINS;
+
+  /* redefine the size of each bin */
+  cur = newcur = 0;
+  thisbin = 0;
+  bin = -1;
+  for( newbin = 0; newbin < NBINS - 1; ++newbin ) {
+    while( thisbin < avgperbin ) {
+      thisbin += imp[++bin];
+      prev = cur;
+      cur = grid[bin];
+    }
+    thisbin -= avgperbin;
+    delta = (cur - prev)*thisbin;
+    newgrid[newbin] = SHARPEDGES ?
+      cur - delta/imp[bin] :
+      (newcur = Max(newcur + 16*DBL_EPSILON,
+        cur - 2*delta/(imp[bin] + imp[IDim(bin - 1)])));
+  }
+  Copy(grid, newgrid, NBINS - 1);
+  grid[NBINS - 1] = 1;
+}
+
+/*********************************************************************/
+
+static void Reweight(cThis *t, Bounds *b,
+  creal *w, creal *f, creal *lastf, cResult *total)
+{
+  Vector(Grid, margsum, NDIM);
+  Vector(real, scale, NCOMP);
+  cbin_t *bin = (cbin_t *)lastf;
+  count dim, comp;
+
+  if( t->ncomp == 1 ) scale[0] = 1;
+  else {
+    for( comp = 0; comp < t->ncomp; ++comp )
+      scale[comp] = (total[comp].avg == 0) ? 0 : 1/total[comp].avg;
+  }
+
+  XClear(margsum);
+
+  while( f < lastf ) {
+    real fsq = 0;
+    for( comp = 0; comp < t->ncomp; ++comp )
+      fsq += Sq(*f++*scale[comp]);
+    fsq *= Sq(*w++);
+    if( fsq != 0 )
+      for( dim = 0; dim < t->ndim; ++dim )
+        margsum[dim][bin[dim]] += fsq;
+    bin += t->ndim;
+  }
+
+  for( dim = 0; dim < t->ndim; ++dim )
+    RefineGrid(t, b[dim].grid, margsum[dim]);
+}
+
+/*********************************************************************/
+
+static void StretchGrid(cGrid grid, Grid gridL, Grid gridR)
+{
+  real prev = 0, cur, step, x;
+  count bin = 0;
+
+  while( bin < NBINS ) {
+    cur = grid[bin++];
+    if( cur >= .5 ) break;
+    prev = cur;
+  }
+
+  step = (bin - (cur - .5)/(cur - prev))/NBINS;
+
+  prev = x = 0;
+  cur = *grid;
+
+  for( bin = 0; bin < NBINS; ++bin ) {
+    x += step;
+    if( x > 1 ) {
+      --x;
+      prev = cur;
+      cur = *++grid;
+    }
+    gridL[bin] = 2*(prev + (cur - prev)*x);
+  }
+
+  step = 1 - step;
+  for( bin = 0; bin < NBINS - 1; ++bin ) {
+    x += step;
+    if( x > 1 ) {
+      --x;
+      prev = cur;
+      cur = *++grid;
+    }
+    gridR[bin] = 2*(prev + (cur - prev)*x) - 1;
+  }
+  gridR[NBINS - 1] = 1;
+}
+
+
diff --git a/Cuba/src/suave/Integrate.c b/Cuba/src/suave/Integrate.c
new file mode 100644
index 0000000000000000000000000000000000000000..4345f76477d8203cd61909f250d086bcd0816912
--- /dev/null
+++ b/Cuba/src/suave/Integrate.c
@@ -0,0 +1,353 @@
+/*
+	Integrate.c
+		integrate over the unit hypercube
+		this file is part of Suave
+		checkpointing by B. Chokoufe
+		last modified 13 Mar 15 th
+*/
+
+
+typedef struct {
+  signature_t signature;
+  count nregions, df;
+  number neval;
+  Result totals[];
+} State;
+
+static int Integrate(This *t, real *integral, real *error, real *prob)
+{
+  StateDecl;
+  csize_t statesize = sizeof(State) + NCOMP*sizeof(Result);
+  Sized(State, state, statesize);
+  Array(Var, var, NDIM, 2);
+  Vector(char, out, 128*NCOMP + 256);
+
+  Region *anchor = NULL, *region = NULL;
+  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  nmin " NUMBER "\n"
+      "  flatness " REAL "\n"
+      "  statefile \"%s\"",
+      t->ndim, t->ncomp,
+      ML_NOT(t->nvec,)
+      SHOW(t->epsrel), SHOW(t->epsabs),
+      t->flags, t->seed,
+      t->mineval, t->maxeval,
+      t->nnew, t->nmin,
+      SHOW(t->flatness),
+      t->statefile);
+    Print(out);
+  }
+
+  if( BadComponent(t) ) return -2;
+  if( BadDimension(t) ) return -1;
+
+  ShmAlloc(t, Master);
+  ForkCores(t);
+
+  if( (fail = setjmp(t->abort)) ) goto abort;
+
+  t->epsabs = Max(t->epsabs, NOTZERO);
+  IniRandom(t);
+
+  StateSetup(t);
+
+  if( StateReadTest(t) ) {
+    size_t *regsize = NULL;
+    StateReadOpen(t, fd) {
+      count iregion;
+      size_t totsize;
+      Region **last = &anchor;
+      if( read(fd, state, statesize) != statesize ||
+          state->signature != StateSignature(t, 2) ) break;
+      t->nregions = state->nregions;
+      totsize = t->nregions*sizeof *regsize;
+      MemAlloc(regsize, totsize);
+      StateRead(fd, regsize, totsize);
+      for( iregion = 0; iregion < t->nregions; ++iregion )
+        totsize += regsize[iregion];
+      if( st.st_size != statesize + totsize ) break;
+      for( iregion = 0; iregion < t->nregions; ++iregion ) {
+        Region *reg;
+        MemAlloc(reg, regsize[iregion]);
+        StateRead(fd, reg, regsize[iregion]);
+        *last = reg;
+        last = &reg->next;
+      }
+      *last = NULL;
+    } StateReadClose(t, fd);
+    free(regsize);
+    t->neval = state->neval;
+    t->rng.skiprandom(t, t->neval);
+  }
+
+  if( ini ) {
+    count bin;
+    Bounds *b0;
+
+    anchor = RegionAlloc(t, t->nnew, t->nnew);
+    anchor->next = NULL;
+    anchor->div = 0;
+    t->nregions = 1;
+
+    b0 = RegionBounds(anchor);
+    b0->lower = 0;
+    b0->upper = 1;
+    /* define the initial distribution of bins */
+    for( bin = 0; bin < NBINS; ++bin )
+      b0->grid[bin] = (bin + 1)/(real)NBINS;
+
+    for( b = b0 + 1, B = b0 + t->ndim; b < B; ++b )
+      Copy(b, b0, 1);
+
+    t->neval = 0;
+    Sample(t, t->nnew, anchor, RegionW(anchor),
+      RegionW(anchor) + t->nnew,
+      RegionW(anchor) + t->nnew + t->ndim*t->nnew);
+    state->df = anchor->df;
+    FCopy(state->totals, anchor->result);
+  }
+
+  /* main iteration loop */
+  for( ; ; ) {
+    Var *vLR;
+    real maxratio, maxerr, minfluct, bias, mid;
+    Region *regionL, *regionR, *reg, **parent, **par;
+    Bounds *bounds, *boundsL, *boundsR;
+    count maxcomp, bisectdim;
+    number n, nL, nR, nnewL, nnewR;
+    real *w, *wL, *wR, *x, *xL, *xR, *f, *fL, *fR, *wlast, *flast;
+
+    if( VERBOSE ) {
+      char *oe = out + sprintf(out, "\n"
+        "Iteration " COUNT ":  " NUMBER " integrand evaluations so far",
+        t->nregions, t->neval);
+      for( tot = state->totals, comp = 0; tot < Tot; ++tot )
+        oe += sprintf(oe, "\n[" COUNT "] "
+          REAL " +- " REAL "  \tchisq " REAL " (" COUNT " df)",
+          ++comp, SHOW(tot->avg), SHOW(tot->err),
+          SHOW(tot->chisq), state->df);
+      Print(out);
+    }
+
+    maxratio = -INFTY;
+    maxcomp = 0;
+    for( tot = state->totals, comp = 0; tot < Tot; ++tot ) {
+      creal ratio = tot->err/MaxErr(tot->avg);
+      if( ratio > maxratio ) {
+        maxratio = ratio;
+        maxcomp = comp;
+      }
+    }
+
+    if( maxratio <= 1 && t->neval >= t->mineval ) break;
+
+    if( t->neval >= t->maxeval ) {
+      fail = 1;
+      break;
+    }
+
+    maxerr = -INFTY;
+    parent = &anchor;
+    region = anchor;
+    for( par = &anchor; (reg = *par); par = &reg->next ) {
+      creal err = reg->result[maxcomp].err;
+      if( err > maxerr ) {
+        maxerr = err;
+        parent = par;
+        region = reg;
+      }
+    }
+
+    bounds = RegionBounds(region);
+    w = RegionW(region);
+
+    /* find the bisectdim which minimizes the fluctuations */
+    Fluct(t, var[0], bounds, w, region->n, maxcomp,
+      region->result[maxcomp].avg, Max(maxerr, t->epsabs));
+
+    bias = (t->epsrel < 1e-50) ? 2 :
+      Max(powx(2., -(real)region->div/t->ndim)/t->epsrel, 2.);
+    minfluct = INFTY;
+    bisectdim = 0;
+    for( dim = 0; dim < t->ndim; ++dim ) {
+      creal fluct = (var[dim][0].fluct + var[dim][1].fluct)*
+        (bias - bounds[dim].upper + bounds[dim].lower);
+      if( fluct < minfluct ) {
+        minfluct = fluct;
+        bisectdim = dim;
+      }
+    }
+
+    /* apply stratified sampling to distribute points in bisected region */
+    vLR = var[bisectdim];
+    minfluct = vLR[0].fluct + vLR[1].fluct;
+    nnewL = IMax(
+      (minfluct == 0) ? t->nnew/2 : (count)(vLR[0].fluct/minfluct*t->nnew),
+      minsamples );
+    nL = vLR[0].n + nnewL;
+    nnewR = IMax(t->nnew - nnewL, minsamples);
+    nR = vLR[1].n + nnewR;
+
+    regionL = RegionAlloc(t, nL, nnewL);
+    regionR = RegionAlloc(t, nR, nnewR);
+
+    *parent = regionL;
+    regionL->next = regionR;
+    regionR->next = region->next;
+    regionL->div = regionR->div = region->div + 1;
+
+    mid = .5*(bounds[bisectdim].lower + bounds[bisectdim].upper);
+    n = region->n;
+    wlast = w;              x = w + n;     f = flast = x + n*t->ndim;
+    wL = RegionW(regionL);  xL = wL + nL;  fL = xL + nL*t->ndim;
+    wR = RegionW(regionR);  xR = wR + nR;  fR = xR + nR*t->ndim;
+    while( n-- ) {
+      cbool final = (*w < 0);
+      if( x[bisectdim] < mid ) {
+        if( final && wR > RegionW(regionR) ) wR[-1] = -fabsx(wR[-1]);
+        *wL++ = *w++;
+        XCopy(xL, x);
+        xL += t->ndim;
+        FCopy(fL, f);
+        fL += t->ncomp;
+      }
+      else {
+        if( final && wL > RegionW(regionL) ) wL[-1] = -fabsx(wL[-1]);
+        *wR++ = *w++;
+        XCopy(xR, x);
+        xR += t->ndim;
+        FCopy(fR, f);
+        fR += t->ncomp;
+      }
+      x += t->ndim;
+      f += t->ncomp;
+      if( n && final ) wlast = w, flast = f;
+    }
+
+    Reweight(t, bounds, wlast, flast, f, state->totals);
+    boundsL = RegionBounds(regionL);
+    XCopy(boundsL, bounds);
+    boundsR = RegionBounds(regionR);
+    XCopy(boundsR, bounds);
+
+    boundsL[bisectdim].upper = mid;
+    boundsR[bisectdim].lower = mid;
+    StretchGrid(bounds[bisectdim].grid,
+      boundsL[bisectdim].grid, boundsR[bisectdim].grid);
+
+    Sample(t, nnewL, regionL, wL, xL, fL);
+    Sample(t, nnewR, regionR, wR, xR, fR);
+
+    state->df += regionL->df + regionR->df - region->df;
+
+    for( res = region->result,
+         resL = regionL->result,
+         resR = regionR->result,
+         tot = state->totals;
+         tot < Tot; ++res, ++resL, ++resR, ++tot ) {
+      real diff, sigsq;
+
+      tot->avg += diff = resL->avg + resR->avg - res->avg;
+
+      diff = Sq(.25*diff);
+      sigsq = resL->sigsq + resR->sigsq;
+      if( sigsq > 0 ) {
+        creal c = Sq(1 + sqrtx(diff/sigsq));
+        resL->sigsq *= c;
+        resR->sigsq *= c;
+      }
+      resL->err = sqrtx(resL->sigsq += diff);
+      resR->err = sqrtx(resR->sigsq += diff);
+
+      tot->sigsq += resL->sigsq + resR->sigsq - res->sigsq;
+      tot->err = sqrtx(tot->sigsq);
+
+      tot->chisq += resL->chisq + resR->chisq - res->chisq;
+    }
+
+    free(region);
+    region = NULL;
+    ++t->nregions;
+
+    if( StateWriteTest(t) ) {
+      StateWriteOpen(t, fd) {
+        Region *reg;
+        size_t totsize, *regsize, *s;
+        state->signature = StateSignature(t, 2);
+        state->neval = t->neval;
+        state->nregions = t->nregions;
+        StateWrite(fd, state, statesize);
+        MemAlloc(regsize, totsize = t->nregions*sizeof(size_t));
+        s = regsize;
+        for( reg = anchor; reg; reg = reg->next )
+          *s++ = reg->size;
+        StateWrite(fd, regsize, totsize);
+        free(regsize);
+        for( reg = anchor; reg; reg = reg->next )
+          StateWrite(fd, reg, reg->size);
+      } StateWriteClose(t, fd);
+    }
+  }
+
+  for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
+    integral[comp] = tot->avg;
+    error[comp] = tot->err;
+    prob[comp] = ChiSquare(tot->chisq, state->df);
+  }
+
+#ifdef MLVERSION
+  if( REGIONS ) {
+    Vector(real, bounds, NDIM*2);
+
+    MLPutFunction(stdlink, "List", 2);
+
+    MLPutFunction(stdlink, "List", t->nregions);
+    for( region = anchor; region; region = region->next ) {
+      cResult *Res;
+      real *d = bounds;
+      for( B = (b = RegionBounds(region)) + t->ndim; b < B; ++b ) {
+        *d++ = b->lower;
+        *d++ = b->upper;
+      }
+
+      MLPutFunction(stdlink, "Cuba`Suave`region", 3);
+
+      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};
+        MLPutRealxList(stdlink, r, Elements(r));
+      }
+
+      MLPutInteger(stdlink, region->df);
+    }
+  }
+#endif
+
+abort:
+  free(region);
+  while( (region = anchor) ) {
+    anchor = anchor->next;
+    free(region);
+  }
+  ShmFree(t, Master);
+
+  StateRemove(t);
+
+  return fail;
+}
+
diff --git a/Cuba/src/suave/Sample.c b/Cuba/src/suave/Sample.c
new file mode 100644
index 0000000000000000000000000000000000000000..a02249e288aeff4385db6636716839a2b2dc79ec
--- /dev/null
+++ b/Cuba/src/suave/Sample.c
@@ -0,0 +1,164 @@
+/*
+	Sample.c
+		the sampling step of Suave
+		this file is part of Suave
+		last modified 13 Mar 15 th
+*/
+
+
+typedef struct {
+  real sum, sqsum;
+  real weight, weightsum, avg, avgsum;
+  real guess, chisum, chisqsum;
+} Cumulants;
+
+/*********************************************************************/
+
+static void Sample(This *t, cnumber nnew, Region *region,
+  real *lastw, real *lastx, real *lastf)
+{
+  count comp, df;
+  number n;
+  Vector(Cumulants, cumul, NCOMP);
+  Cumulants *C = cumul + t->ncomp, *c;
+  Bounds *bounds = RegionBounds(region), *B = bounds + t->ndim, *b;
+  Result *res;
+  char **ss = NULL, *s = NULL;
+  ccount chars = 128*(region->div + 1);
+
+  creal jacobian = 1/ldexp((real)nnew, region->div);
+  real *w = lastw, *f = lastx;
+  bin_t *bin = (bin_t *)(lastf + nnew*t->ncomp);
+
+  for( n = nnew; n; --n ) {
+    real weight = jacobian;
+
+    t->rng.getrandom(t, f);
+
+    for( b = bounds; b < B; ++b ) {
+      creal pos = *f*NBINS;
+      ccount ipos = (count)pos;
+      creal prev = (ipos == 0) ? 0 : b->grid[ipos - 1];
+      creal diff = b->grid[ipos] - prev;
+      *f++ = b->lower + (prev + (pos - ipos)*diff)*(b->upper - b->lower);
+      *bin++ = ipos;
+      weight *= diff*NBINS;
+    }
+
+    *w++ = weight;
+  }
+
+  DoSample(t, nnew, lastx, lastf, lastw, region->div + 1);
+
+  w[-1] = -w[-1];
+  lastw = w;
+  w = RegionW(region);
+  region->n = lastw - w;
+
+  if( VERBOSE > 2 ) {
+    char *p0;
+    MemAlloc(ss, t->ndim*64 + t->ncomp*(sizeof(char *) + chars));
+    s = (char *)(ss + t->ncomp);
+    p0 = s + t->ndim*64;
+    for( comp = 0; comp < t->ncomp; ++comp ) {
+      ss[comp] = p0;
+      p0 += chars;
+    }
+  }
+
+  FClear(cumul);
+  df = n = 0;
+
+  while( w < lastw ) {
+    cbool final = (*w < 0);
+    creal weight = fabsx(*w++);
+    ++n;
+
+    for( c = cumul, comp = 0; c < C; ++c ) {
+      creal wfun = weight*(*f++);
+      c->sum += wfun;
+      c->sqsum += Sq(wfun);
+
+      if( final ) {
+        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 = sqrtx(1/w);
+            ss[comp] += (df == 0) ?
+              sprintf(ss[comp], "\n[" COUNT "] "
+                REAL " +- " REAL " (" NUMBER ")", comp + 1,
+                SHOW(c->sum), SHOW(sig), n) :
+              sprintf(ss[comp], "\n    "
+                REAL " +- " REAL " (" NUMBER ")",
+                SHOW(c->sum), SHOW(sig), n);
+          }
+
+          if( df == 0 ) c->guess = c->sum;
+          else {
+            c->chisum += w *= c->sum - c->guess;
+            c->chisqsum += w*c->sum;
+          }
+        }
+
+        c->sum = c->sqsum = 0;
+      }
+    }
+
+    if( final ) df -= NegQ(t->nmin - n - 1), n = 0;
+  }
+
+  region->df = --df;
+
+  for( c = cumul, res = region->result; c < C; ++c, ++res ) {
+    creal sigsq = 1/c->weightsum;
+    creal avg = sigsq*c->avgsum;
+
+    if( LAST ) {
+      res->sigsq = 1/c->weight;
+      res->avg = res->sigsq*c->avg;
+    }
+    else {
+      res->sigsq = sigsq;
+      res->avg = avg;
+    }
+    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
+         over the entire region.  Unless that constant is zero, only the
+         first set of samples will have zero variance, and hence weight
+         (n - 1) 1e30 (see above).  All other sets have been sampled
+         from a non-constant weight function and therefore inevitably
+         show some variance.  This is an artificial effect, brought about
+         by the fact that the constancy of the integrand in the region is
+         seen only in this subdivision, and can degrade the chi-square
+         score quite a bit.  If the constancy was determined from more
+         than two samples (hence .9*NOTZERO), the chi-squares from the
+         other sets are removed here. */
+  }
+
+  if( VERBOSE > 2 ) {
+    char *p = s;
+    char *p0 = p + t->ndim*64;
+    char *msg = "\nRegion (" REALF ") - (" REALF ")";
+
+    for( b = bounds; b < B; ++b ) {
+      p += sprintf(p, msg, b->lower, b->upper);
+      msg = "\n       (" REALF ") - (" REALF ")";
+    }
+
+    for( comp = 0, res = region->result;
+         comp < t->ncomp; ++comp, ++res ) {
+      p += sprintf(p, "%s  \tchisq " REAL " (" COUNT " df)",
+        p0, SHOW(res->chisq), df);
+      p0 += chars;
+    }
+
+    Print(s);
+    free(ss);
+  }
+}
+
diff --git a/Cuba/src/suave/Suave.c b/Cuba/src/suave/Suave.c
new file mode 100644
index 0000000000000000000000000000000000000000..3bd55a025f3ba6ad2c5dfc4c0c4e0611a653dc48
--- /dev/null
+++ b/Cuba/src/suave/Suave.c
@@ -0,0 +1,94 @@
+/*
+	Suave.c
+		Subregion-adaptive Vegas Monte Carlo integration
+		by Thomas Hahn
+		last modified 28 Nov 14 th
+*/
+
+
+#define SUAVE
+#define ROUTINE "Suave"
+
+#include "decl.h"
+#include "CSample.c"
+
+/*********************************************************************/
+
+Extern void EXPORT(Suave)(ccount ndim, ccount ncomp,
+  Integrand integrand, void *userdata, cnumber nvec,
+  creal epsrel, creal epsabs,
+  cint flags, cint seed,
+  cnumber mineval, cnumber maxeval,
+  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 = 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, cnumber *pnvec,
+  creal *pepsrel, creal *pepsabs,
+  cint *pflags, cint *pseed,
+  cnumber *pmineval, cnumber *pmaxeval,
+  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 = 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/Cuba/src/suave/Suave.tm b/Cuba/src/suave/Suave.tm
new file mode 100644
index 0000000000000000000000000000000000000000..da02012df2df0285d16ce58eb038bd902b524625
--- /dev/null
+++ b/Cuba/src/suave/Suave.tm
@@ -0,0 +1,260 @@
+:Evaluate: BeginPackage["Cuba`"]
+
+:Evaluate: Suave::usage =
+	"Suave[f, {x, xmin, xmax}..] computes a numerical approximation to the integral of the real scalar or vector function f.
+	The output is a list with entries of the form {integral, error, chi-square probability} for each component of the integrand."
+
+:Evaluate: MinPoints::usage = "MinPoints is an option of Suave.
+	It specifies the minimum number of points to sample."
+
+:Evaluate: NNew::usage = "NNew is an option of Suave.
+	It specifies the number of new integrand evaluations in each subdivision."
+
+:Evaluate: NMin::usage = "NMin is an option of Suave.
+	It specifies the minimum number of samples a former pass must contribute to a subregion to be considered in that region's compound integral value.
+	Increasing NMin may reduce jumps in the chi^2 value."
+
+:Evaluate: Flatness::usage = "Flatness is an option of Suave.
+	It determines how prominently individual samples with a large fluctuation figure in the total fluctuation, which in turn determines how a region is split up.
+	Explicitly, if F[i] is the individual fluctuation of sample i, the total fluctuation is computed as Sum[(1 + F[i])^p, {i, nsamples}]^(2/3/p), i.e. as the p-norm of the fluctuation vector to the power 2/3, where p is the number given by Flatness.
+	Thus with increasing p, the fluctuation becomes more and more dominated by outliers, i.e. points with a large fluctuation.
+	As suggested by the name Flatness, p should be chosen large for `flat' integrands and small for `volatile' integrands with high peaks.
+	Note that since p appears in the exponent, one should not use too large values (say, no more than a few hundred) lest terms be truncated internally to prevent overflow."
+
+:Evaluate: StateFile::usage = "StateFile is an option of Suave.
+	It specifies a file in which the internal state is stored after each iteration and from which it can be restored on a subsequent run.
+	The state file is removed once the prescribed accuracy has been reached."
+
+:Evaluate: Final::usage = "Final is an option of Suave.
+	It can take the values Last or All which determine whether only the last (largest) or all sets of samples collected on a subregion over the iterations contribute to the final result."
+
+:Evaluate: PseudoRandom::usage = "PseudoRandom is an option of Suave.
+	It can take the following values:
+	False for Sobol quasi-random numbers (default),
+	True or 0 for Mersenne Twister pseudo-random numbers,
+	any other integer value n for Ranlux pseudo-random numbers of luxury level n."
+
+:Evaluate: PseudoRandomSeed::usage = "PseudoRandomSeed is an option of Suave.
+	It specifies the seed for the pseudo-random number generator."
+
+:Evaluate: SharpEdges::usage = "SharpEdges is an option of Suave.
+	It turns off smoothing of the importance function for integrands with sharp edges."
+
+:Evaluate: RetainStateFile::usage = "RetainStateFile is an option of Suave.
+	It determines whether a chosen state file is kept even if the integration terminates normally."
+
+:Evaluate: Regions::usage = "Regions is an option of Suave.
+	It specifies whether the regions into which the integration region has been cut are returned together with the integration results."
+
+:Evaluate: Region::usage = "Region[ll, ur, res, df] describes a subregion:
+	ll and ur are multidimensional equivalents of the region's lower left and upper right corner.
+	res gives the integration results for the region in a list with entries of the form {integral, error, chi-square} for each component of the integrand.
+	df is the number of degrees of freedom corresponding to the chi-square values in res."
+
+:Evaluate: $Weight::usage = "$Weight is a global variable set by Suave during the evaluation of the integrand to the weight of the point being sampled."
+
+:Evaluate: $Iteration::usage = "$Iteration is a global variable set by Suave during the evaluation of the integrand to the present iteration number."
+
+:Evaluate: MapSample::usage = "MapSample is a function used to map the integrand over the points to be sampled."
+
+
+:Evaluate: Begin["`Suave`"]
+
+:Begin:
+:Function: Suave
+:Pattern: MLSuave[ndim_, ncomp_,
+  epsrel_, epsabs_, flags_, seed_,
+  mineval_, maxeval_,
+  nnew_, nmin_, flatness_, statefile_]
+:Arguments: {ndim, ncomp,
+  epsrel, epsabs, flags, seed,
+  mineval, maxeval,
+  nnew, nmin, flatness, statefile}
+:ArgumentTypes: {Integer, Integer,
+  Real64, Real64, Integer, Integer,
+  Integer, Integer,
+  Integer, Integer, Real64, String}
+:ReturnType: Manual
+:End:
+
+:Evaluate: Attributes[Suave] = {HoldFirst}
+
+:Evaluate: Options[Suave] = {PrecisionGoal -> 3, AccuracyGoal -> 12,
+	MinPoints -> 0, MaxPoints -> 50000,
+	NNew -> 1000, NMin -> 2, Flatness -> 50,
+	StateFile -> "", Verbose -> 1, Final -> Last,
+	PseudoRandom -> False, PseudoRandomSeed -> 5489,
+	SharpEdges -> False, RetainStateFile -> False,
+	Regions -> False, Compiled -> True}
+
+:Evaluate: Suave[f_, v:{_, _, _}.., opt___Rule] :=
+	Block[ {ff = HoldForm[f], ndim = Length[{v}], ncomp,
+	tags, vars, lower, range, jac, tmp, defs, intT,
+	rel, abs, mineval, maxeval, nnew, nmin, flatness, state,
+	verbose, final, level, seed, edges, retain,
+	regions, compiled, $Weight, $Iteration},
+	  Message[Suave::optx, #, Suave]&/@
+	    Complement[First/@ {opt}, tags = First/@ Options[Suave]];
+	  {rel, abs, mineval, maxeval, nnew, nmin, flatness, state,
+	    verbose, final, level, seed, edges, retain,
+	    regions, compiled} =
+	    tags /. {opt} /. Options[Suave];
+	  {vars, lower, range} = Transpose[{v}];
+	  jac = Simplify[Times@@ (range -= lower)];
+	  tmp = Array[tmpvar, ndim];
+	  defs = Simplify[lower + range tmp];
+	  Block[{Set}, define[compiled, tmp, Thread[vars = defs], jac]];
+	  intT = integrandT[f];
+	  Block[#,
+	    ncomp = Length[intT@@ RandomReal[1, ndim]];
+	    MLSuave[ndim, ncomp, 10.^-rel, 10.^-abs,
+	      Min[Max[verbose, 0], 3] +
+	        If[final === Last, 4, 0] +
+	        If[TrueQ[edges], 8, 0] +
+	        If[TrueQ[retain], 16, 0] +
+	        If[TrueQ[regions], 128, 0] +
+	        If[IntegerQ[level], 256 level, 0],
+	      If[level =!= False && IntegerQ[seed], seed, 0],
+	      mineval, maxeval,
+	      nnew, nmin, flatness, state]
+	  ]& @ vars
+	]
+
+:Evaluate: tmpvar[n_] := ToExpression["Cuba`Suave`t" <> ToString[n]]
+
+:Evaluate: Attributes[foo] = {HoldAll}
+
+:Evaluate: define[True, tmp_, defs_, jac_] := (
+	TtoX := TtoX = Compile[tmp, defs];
+	integrandT[f_] := Compile[tmp, eval[defs, N[f jac]],
+	  {{_eval, _Real, 1}}] )
+
+:Evaluate: define[_, tmp_, defs_, jac_] := (
+	TtoX := TtoX = Function[tmp, defs];
+	integrandT[f_] := Function[tmp, eval[defs, N[f jac]]] )
+
+:Evaluate: eval[_, f_Real] = {f}
+
+:Evaluate: eval[_, f:{__Real}] = f
+
+:Evaluate: eval[x_, _] := (Message[Suave::badsample, ff, x]; {})
+
+:Evaluate: sample[x_, w_, iter_] := (
+	$Iteration = iter;
+	Check[Flatten @ MapSample[
+	  ($Weight = #[[1]]; intT@@ #[[2]])&,
+	  Transpose[{w, Partition[x, ndim]}] ], {}] )
+
+:Evaluate: ValueQ[MapSample] || (MapSample = Map)
+
+:Evaluate: region[bounds_, r___] := Region[##, r]&@@
+	MapThread[TtoX, Partition[bounds, 2]]
+
+:Evaluate: Suave::badsample = "`` is not a real-valued function at ``."
+
+:Evaluate: Suave::baddim = "Cannot integrate in `` dimensions."
+
+:Evaluate: Suave::badcomp = "Cannot integrate `` components."
+
+:Evaluate: Suave::accuracy =
+	"Desired accuracy was not reached within `` function evaluations on `` subregions."
+
+:Evaluate: Suave::success = "Needed `` function evaluations on `` subregions."
+
+:Evaluate: End[]
+
+:Evaluate: EndPackage[]
+
+
+/*
+	Suave.tm
+		Subregion-adaptive Vegas Monte Carlo integration
+		by Thomas Hahn
+		last modified 13 Mar 15 th
+*/
+
+
+#define SUAVE
+#define ROUTINE "Suave"
+
+#include "mathlink.h"
+#include "decl.h"
+#include "MSample.c"
+
+/*********************************************************************/
+
+static void Status(MLCONST char *msg, cint n1, cint n2)
+{
+  MLPutFunction(stdlink, "CompoundExpression", 2);
+  MLPutFunction(stdlink, "Message", 3);
+  MLPutFunction(stdlink, "MessageName", 2);
+  MLPutSymbol(stdlink, "Suave");
+  MLPutString(stdlink, msg);
+  MLPutInteger(stdlink, n1);
+  MLPutInteger(stdlink, n2);
+}
+
+/*********************************************************************/
+
+static inline void DoIntegrate(This *t)
+{
+  real integral[NCOMP], error[NCOMP], prob[NCOMP];
+  cint fail = Integrate(t, integral, error, prob);
+
+  if( fail < 0 ) {
+    switch( fail ) {
+    case -99:
+      MLPutFunction(stdlink, "Abort", 0);
+      return;
+    case -1:
+      Status("baddim", t->ndim, 0);
+      break;
+    case -2:
+      Status("badcomp", t->ncomp, 0);
+      break;
+    }
+    MLPutSymbol(stdlink, "$Failed");
+  }
+  else {
+    Status(fail ? "accuracy" : "success", t->neval, t->nregions);
+    MLPutFunction(stdlink, "Thread", 1);
+    MLPutFunction(stdlink, "List", 3);
+    MLPutRealxList(stdlink, integral, t->ncomp);
+    MLPutRealxList(stdlink, error, t->ncomp);
+    MLPutRealxList(stdlink, prob, t->ncomp);
+  }
+}
+
+/*********************************************************************/
+
+void Suave(cint ndim, cint ncomp,
+  creal epsrel, creal epsabs,
+  cint flags, cint seed,
+  cnumber mineval, cnumber maxeval,
+  cnumber nnew, cnumber nmin, creal flatness, cchar *statefile)
+{
+  This t;
+  t.ndim = ndim;
+  t.ncomp = ncomp;
+  t.epsrel = epsrel;
+  t.epsabs = epsabs;
+  t.flags = flags;
+  t.seed = seed;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.nnew = nnew;
+  t.nmin = nmin;
+  t.flatness = flatness;
+  t.statefile = statefile;
+
+  DoIntegrate(&t);
+  MLEndPacket(stdlink);
+}
+
+/*********************************************************************/
+
+int main(int argc, char **argv)
+{
+  return MLMain(argc, argv);
+}
+
diff --git a/Cuba/src/suave/common.c b/Cuba/src/suave/common.c
new file mode 100644
index 0000000000000000000000000000000000000000..163f11167b5a15b84a11eed7b68eb32f6359f898
--- /dev/null
+++ b/Cuba/src/suave/common.c
@@ -0,0 +1,41 @@
+/*
+	common.c
+		includes most of the modules
+		this file is part of Suave
+		last modified 29 Jul 13 th
+*/
+
+
+static inline Region *RegionAlloc(cThis *t, cnumber n, cnumber nnew)
+{
+  csize_t size = sizeof(Region) +
+    t->ncomp*sizeof(Result) +
+    t->ndim*sizeof(Bounds) +
+    t->ncomp*t->ndim*2*sizeof(real) +
+    n*SAMPLESIZE +
+    nnew*t->ndim*sizeof(bin_t);
+  Region *p;
+  MemAlloc(p, size);
+  p->size = size;
+  return p;
+}
+
+static inline bool BadDimension(cThis *t)
+{
+  if( t->ndim > MAXDIM ) return true;
+  return t->ndim < SOBOL_MINDIM ||
+    (t->seed == 0 && t->ndim > SOBOL_MAXDIM);
+}
+
+static inline bool BadComponent(cThis *t)
+{
+  if( t->ncomp > MAXCOMP ) return true;
+  return t->ncomp < 1;
+}
+
+#include "Random.c"
+#include "ChiSquare.c"
+#include "Grid.c"
+#include "Sample.c"
+#include "Fluct.c"
+
diff --git a/Cuba/src/suave/decl.h b/Cuba/src/suave/decl.h
new file mode 100644
index 0000000000000000000000000000000000000000..4d738b37b96235cc9f4585c95e186000cb4e6365
--- /dev/null
+++ b/Cuba/src/suave/decl.h
@@ -0,0 +1,78 @@
+/*
+	decl.h
+		Type declarations
+		this file is part of Suave
+		last modified 25 Nov 14 th
+*/
+
+
+#include "stddecl.h"
+
+#define MINSAMPLES 10
+
+#define NBINS 64
+
+typedef unsigned char bin_t;
+/* Note: bin_t must be wide enough to hold the numbers 0..NBINS */
+
+typedef const bin_t cbin_t;
+
+typedef real Grid[NBINS];
+
+typedef const Grid cGrid;
+
+typedef struct {
+  real avg, err, sigsq, chisq;
+} Result;
+
+typedef const Result cResult;
+
+typedef struct {
+  real lower, upper;
+  Grid grid;
+} Bounds;
+
+typedef const Bounds cBounds;
+
+typedef int (*Integrand)(ccount *, creal *, ccount *, real *,
+  void *, cnumber *, cint *, creal *, cint *);
+
+typedef struct _this {
+  count ndim, ncomp;
+#ifndef MLVERSION
+  Integrand integrand;
+  void *userdata;
+  number nvec;
+#ifdef HAVE_FORK
+  SHM_ONLY(int shmid;)
+  Spin *spin;
+  real *frame;
+#endif
+#endif
+  real epsrel, epsabs;
+  int flags, seed;
+  number mineval, maxeval;
+  number nnew, nmin;
+  real flatness;
+  cchar *statefile;
+  count nregions;
+  number neval;
+  RNGState rng;  
+  jmp_buf abort;
+} This;
+
+#define nframe nnew
+
+typedef const This cThis;
+
+typedef struct region {
+  struct region *next;
+  size_t size;
+  count div, df;
+  number n;
+  Result result[];
+} Region;
+
+#define RegionBounds(r) ((Bounds *)(r->result + t->ncomp))
+#define RegionW(r) ((real *)(RegionBounds(r) + t->ndim))
+
diff --git a/Cuba/src/vegas/Grid.c b/Cuba/src/vegas/Grid.c
new file mode 100644
index 0000000000000000000000000000000000000000..7fff0aa95c98b753c0d848bd8dbc578943a435af
--- /dev/null
+++ b/Cuba/src/vegas/Grid.c
@@ -0,0 +1,99 @@
+/*
+	Grid.c
+		utility functions for the Vegas grid
+		this file is part of Vegas
+		last modified 12 Mar 15 th
+*/
+
+
+static inline void GetGrid(cThis *t, Grid *grid)
+{
+  count bin, dim;
+  unsigned const int slot = abs(t->gridno) - 1;
+
+  if( t->gridno < 0 && slot < MAXGRIDS ) griddim_[slot] = 0;
+
+  if( slot < MAXGRIDS && gridptr_[slot] ) {
+    if( griddim_[slot] == t->ndim ) {
+      XCopy(grid, gridptr_[slot]);
+      return;
+    }
+    free(gridptr_[slot]);
+    gridptr_[slot] = NULL;
+  }
+
+  for( bin = 0; bin < NBINS; ++bin )
+    grid[0][bin] = (bin + 1)/(real)NBINS;
+  for( dim = 1; dim < t->ndim; ++dim )
+    Copy(&grid[dim], &grid[0], 1);
+}
+
+/*********************************************************************/
+
+static inline void PutGrid(cThis *t, Grid *grid)
+{
+  unsigned const int slot = abs(t->gridno) - 1;
+
+  if( slot < MAXGRIDS ) {
+    if( gridptr_[slot] == NULL ) Alloc(gridptr_[slot], t->ndim);
+    griddim_[slot] = t->ndim;
+    XCopy(gridptr_[slot], grid);
+  }
+}
+
+/*********************************************************************/
+
+static void RefineGrid(cThis *t, Grid grid, Grid margsum)
+{
+  real avgperbin, thisbin, newcur, delta;
+  Grid imp, newgrid;
+  int bin, newbin;
+
+  /* smooth the f^2 value stored for each bin */
+  real prev = margsum[0];
+  real cur = margsum[1];
+  real norm = margsum[0] = .5*(prev + cur);
+  for( bin = 1; bin < NBINS - 1; ++bin ) {
+    creal s = prev + cur;
+    prev = cur;
+    cur = margsum[bin + 1];
+    norm += margsum[bin] = (s + cur)/3.;
+  }
+  norm += margsum[NBINS - 1] = .5*(prev + cur);
+
+  if( norm == 0 ) return;
+  norm = 1/norm;
+
+  /* compute the importance function for each bin */
+  avgperbin = 0;
+  for( bin = 0; bin < NBINS; ++bin ) {
+    real impfun = 0;
+    if( margsum[bin] > 0 ) {
+      creal r = margsum[bin]*norm;
+      avgperbin += impfun = powx((r - 1)/log(r), 1.5);
+    }
+    imp[bin] = impfun;
+  }
+  avgperbin /= NBINS;
+
+  /* redefine the size of each bin */
+  cur = newcur = 0;
+  thisbin = 0;
+  bin = -1;
+  for( newbin = 0; newbin < NBINS - 1; ++newbin ) {
+    while( thisbin < avgperbin ) {
+      thisbin += imp[++bin];
+      prev = cur;
+      cur = grid[bin];
+    }
+    thisbin -= avgperbin;
+    delta = (cur - prev)*thisbin;
+    newgrid[newbin] = SHARPEDGES ?
+      cur - delta/imp[bin] :
+      (newcur = Max(newcur,
+        cur - 2*delta/(imp[bin] + imp[IDim(bin - 1)])));
+  }
+  Copy(grid, newgrid, NBINS - 1);
+  grid[NBINS - 1] = 1;
+}
+
diff --git a/Cuba/src/vegas/Integrate.c b/Cuba/src/vegas/Integrate.c
new file mode 100644
index 0000000000000000000000000000000000000000..bb1bae798544b9f9d5f7c48fff62650bce4c64a6
--- /dev/null
+++ b/Cuba/src/vegas/Integrate.c
@@ -0,0 +1,227 @@
+/*
+	Integrate.c
+		integrate over the unit hypercube
+		this file is part of Vegas
+		last modified 13 Mar 15 th
+*/
+
+
+typedef struct {
+  signature_t signature;
+  count niter;
+  number nsamples, neval;
+  Cumulants cumul[];
+} State;
+
+static int Integrate(This *t, real *integral, real *error, real *prob)
+{
+  bin_t *bins;
+  count dim, comp;
+  int fail;
+
+  StateDecl;
+  csize_t statesize = sizeof(State) +
+    NCOMP*sizeof(Cumulants) + NDIM*sizeof(Grid);
+  Sized(State, state, statesize);
+  Cumulants *c, *C = state->cumul + t->ncomp;
+  Grid *state_grid = (Grid *)C;
+  Array(Grid, margsum, NCOMP, NDIM);
+  Vector(char, out, 128*NCOMP + 256);
+
+  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"
+      "  nstart " NUMBER "\n  nincrease " NUMBER "\n"
+      "  nbatch " NUMBER "\n  gridno %d\n"
+      "  statefile \"%s\"",
+      t->ndim, t->ncomp,
+      ML_NOT(t->nvec,)
+      SHOW(t->epsrel), SHOW(t->epsabs),
+      t->flags, t->seed,
+      t->mineval, t->maxeval,
+      t->nstart, t->nincrease, t->nbatch,
+      t->gridno, t->statefile);
+    Print(out);
+  }
+
+  if( BadComponent(t) ) return -2;
+  if( BadDimension(t) ) return -1;
+
+  FrameAlloc(t, Master);
+  ForkCores(t);
+  Alloc(bins, t->nbatch*t->ndim);
+
+  if( (fail = setjmp(t->abort)) ) goto abort;
+
+  IniRandom(t);
+
+  StateSetup(t);
+
+  if( StateReadTest(t) ) {
+    StateReadOpen(t, fd) {
+      if( read(fd, state, statesize) != statesize ||
+          state->signature != StateSignature(t, 1) ) break;
+    } StateReadClose(t, fd);
+    t->neval = state->neval;
+    t->rng.skiprandom(t, t->neval);
+  }
+
+  if( ini | ZAPSTATE ) {
+    t->neval = 0;
+    state->niter = 0;
+    state->nsamples = t->nstart;
+    FClear(state->cumul);
+    if( ini ) GetGrid(t, state_grid);
+  }
+
+  /* main iteration loop */
+  for( ; ; ) {
+    number nsamples = state->nsamples;
+    creal jacobian = 1./nsamples;
+
+    FClear(margsum);
+
+    for( ; nsamples > 0; nsamples -= t->nbatch ) {
+      cnumber n = IMin(t->nbatch, nsamples);
+      real *w = t->frame;
+      real *x = w + n;
+      real *f = x + n*t->ndim;
+      real *lastf = f + n*t->ncomp;
+      bin_t *bin = bins;
+
+      while( x < f ) {
+        real weight = jacobian;
+
+        t->rng.getrandom(t, x);
+
+        for( dim = 0; dim < t->ndim; ++dim ) {
+          creal pos = *x*NBINS;
+          ccount ipos = (count)pos;
+          creal prev = (ipos == 0) ? 0 : state_grid[dim][ipos - 1];
+          creal diff = state_grid[dim][ipos] - prev; 
+          *x++ = prev + (pos - ipos)*diff;
+          *bin++ = ipos;
+          weight *= diff*NBINS;
+        }
+
+        *w++ = weight;
+      }
+
+      DoSample(t, n, w, f, t->frame, state->niter + 1);
+
+      bin = bins;
+      w = t->frame;
+
+      while( f < lastf ) {
+        creal weight = *w++;
+        Grid *m = &margsum[0][0];
+
+        for( c = state->cumul; c < C; ++c ) {
+          real wfun = weight*(*f++);
+          if( wfun ) {
+            c->sum += wfun;
+            c->sqsum += wfun *= wfun;
+            for( dim = 0; dim < t->ndim; ++dim )
+              m[dim][bin[dim]] += wfun;
+          }
+          m += t->ndim;
+        }
+
+        bin += t->ndim;
+      }
+    }
+
+    fail = 0;
+
+    /* compute the integral and error values */
+
+    for( c = state->cumul; c < C; ++c ) {
+      real w = Weight(c->sum, c->sqsum, state->nsamples);
+      real sigsq = 1/(c->weightsum += w);
+      real avg = sigsq*(c->avgsum += w*c->sum);
+
+      c->avg = LAST ? (sigsq = 1/w, c->sum) : avg;
+      c->err = sqrtx(sigsq);
+      fail |= (c->err > MaxErr(c->avg));
+
+      if( state->niter == 0 ) c->guess = c->sum;
+      else {
+        c->chisum += w *= c->sum - c->guess;
+        c->chisqsum += w*c->sum;
+      }
+      c->chisq = c->chisqsum - avg*c->chisum;
+
+      c->sum = c->sqsum = 0;
+    }
+
+    if( VERBOSE ) {
+      char *oe = out + sprintf(out, "\n"
+        "Iteration " COUNT ":  " NUMBER " integrand evaluations so far",
+        state->niter + 1, t->neval);
+      for( c = state->cumul, comp = 0; c < C; ++c )
+        oe += sprintf(oe, "\n[" COUNT "] "
+          REAL " +- " REAL "  \tchisq " REAL " (" COUNT " df)",
+          ++comp, SHOW(c->avg), SHOW(c->err),
+          SHOW(c->chisq), state->niter);
+      Print(out);
+    }
+
+    if( fail == 0 && t->neval >= t->mineval ) break;
+
+    if( t->neval >= t->maxeval && !StateWriteTest(t) ) break;
+
+    if( t->ncomp == 1 )
+      for( dim = 0; dim < t->ndim; ++dim )
+        RefineGrid(t, state_grid[dim], margsum[0][dim]);
+    else {
+      for( dim = 0; dim < t->ndim; ++dim ) {
+        Grid wmargsum;
+        Zap(wmargsum);
+        for( comp = 0; comp < t->ncomp; ++comp ) {
+          real w = state->cumul[comp].avg;
+          if( w != 0 ) {
+            creal *m = margsum[comp][dim];
+            count bin;
+            w = 1/Sq(w);
+            for( bin = 0; bin < NBINS; ++bin )
+              wmargsum[bin] += w*m[bin];
+          }
+        }
+        RefineGrid(t, state_grid[dim], wmargsum);
+      }
+    }
+
+    ++state->niter;
+    state->nsamples += t->nincrease;
+
+    if( StateWriteTest(t) ) {
+      state->signature = StateSignature(t, 1);
+      state->neval = t->neval;
+      StateWriteOpen(t, fd) {
+        StateWrite(fd, state, statesize);
+      } StateWriteClose(t, fd);
+      if( t->neval >= t->maxeval ) break;
+    }
+  }
+
+  for( comp = 0; comp < t->ncomp; ++comp ) {
+    cCumulants *c = &state->cumul[comp];
+    integral[comp] = c->avg;
+    error[comp] = c->err;
+    prob[comp] = ChiSquare(c->chisq, state->niter);
+  }
+
+abort:
+  PutGrid(t, state_grid);
+  free(bins);
+  FrameFree(t, Master);
+
+  StateRemove(t);
+
+  return fail;
+}
+
diff --git a/Cuba/src/vegas/Vegas.c b/Cuba/src/vegas/Vegas.c
new file mode 100755
index 0000000000000000000000000000000000000000..46a3fd858fe9738ea3aed5bd0e31302db5153447
--- /dev/null
+++ b/Cuba/src/vegas/Vegas.c
@@ -0,0 +1,94 @@
+/*
+	Vegas.c
+		Vegas Monte Carlo integration
+		by Thomas Hahn
+		last modified 25 Nov 14 th
+*/
+
+
+#define VEGAS
+#define ROUTINE "Vegas"
+
+#include "decl.h"
+#include "CSample.c"
+
+/*********************************************************************/
+
+Extern void EXPORT(Vegas)(ccount ndim, ccount ncomp,
+  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, 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 = MaxVerbose(flags);
+  t.seed = seed;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.nstart = nstart;
+  t.nincrease = nincrease;
+  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, cnumber *pnvec,
+  creal *pepsrel, creal *pepsabs, cint *pflags, cint *pseed,
+  cnumber *pmineval, cnumber *pmaxeval,
+  cnumber *pnstart, cnumber *pnincrease, 
+  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 = MaxVerbose(*pflags);
+  t.seed = *pseed;
+  t.mineval = *pmineval;
+  t.maxeval = *pmaxeval;
+  t.nstart = *pnstart;
+  t.nincrease = *pnincrease;
+  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/Cuba/src/vegas/Vegas.tm b/Cuba/src/vegas/Vegas.tm
new file mode 100644
index 0000000000000000000000000000000000000000..839f16ce34f9d2b0018e1628f45a5c4b85915731
--- /dev/null
+++ b/Cuba/src/vegas/Vegas.tm
@@ -0,0 +1,254 @@
+:Evaluate: BeginPackage["Cuba`"]
+
+:Evaluate: Vegas::usage = "Vegas[f, {x, xmin, xmax}..] computes a numerical approximation to the integral of the real scalar or vector function f.
+	The output is a list with entries of the form {integral, error, chi-square probability} for each component of the integrand."
+
+:Evaluate: NStart::usage = "NStart is an option of Vegas.
+	It specifies the number of integrand evaluations per iteration to start with."
+
+:Evaluate: NIncrease::usage = "NIncrease is an option of Vegas.
+	It specifies the increase in the number of integrand evaluations per iteration."
+
+:Evaluate: NBatch::usage = "NBatch is an option of Vegas.
+	It specifies how many points are sent in one MathLink packet to be sampled by Mathematica."
+
+:Evaluate: MinPoints::usage = "MinPoints is an option of Vegas.
+	It specifies the minimum number of points to sample."
+
+:Evaluate: GridNo::usage = "GridNo is an option of Vegas.
+	Vegas maintains an internal table in which it can memorize up to 10 grids, to be used in subsequent integrations.
+	A GridNo between 1 and 10 selects the slot in this internal table.
+	For other values the grid is initialized from scratch and discarded at the end of the integration."
+
+:Evaluate: StateFile::usage = "StateFile is an option of Vegas.
+	It specifies a file in which the internal state is stored after each iteration and from which it can be restored on a subsequent run.
+	The state file is removed once the prescribed accuracy has been reached."
+
+:Evaluate: Final::usage = "Final is an option of Vegas.
+	It can take the values Last or All which determine whether only the last (largest) or all of the samples collected on a subregion over the iterations contribute to the final result."
+
+:Evaluate: PseudoRandom::usage = "PseudoRandom is an option of Vegas.
+	It can take the following values:
+	False for Sobol quasi-random numbers (default),
+	True or 0 for Mersenne Twister pseudo-random numbers,
+	any other integer value n for Ranlux pseudo-random numbers of luxury level n."
+
+:Evaluate: PseudoRandomSeed::usage = "PseudoRandomSeed is an option of Vegas.
+	It specifies the seed for the pseudo-random number generator."
+
+:Evaluate: SharpEdges::usage = "SharpEdges is an option of Vegas.
+	It turns off smoothing of the importance function for integrands with sharp edges."
+
+:Evaluate: RetainStateFile::usage = "RetainStateFile is an option of Vegas.
+	It determines whether a chosen state file is kept even if the integration terminates normally."
+
+:Evaluate: ResetState::usage = "ResetState is an option of Vegas.
+	If True, Vegas resets its state even if a state file is present, i.e. keeps only the grid."
+
+:Evaluate: $Weight::usage = "$Weight is a global variable set by Vegas during the evaluation of the integrand to the weight of the point being sampled."
+
+:Evaluate: $Iteration::usage = "$Iteration is a global variable set by Suave during the evaluation of the integrand to the present iteration number."
+
+:Evaluate: MapSample::usage = "MapSample is a function used to map the integrand over the points to be sampled."
+
+
+:Evaluate: Begin["`Vegas`"]
+
+:Begin:
+:Function: Vegas
+:Pattern: MLVegas[ndim_, ncomp_,
+  epsrel_, epsabs_, flags_, seed_,
+  mineval_, maxeval_,
+  nstart_, nincrease_, nbatch_,
+  gridno_, statefile_]
+:Arguments: {ndim, ncomp,
+  epsrel, epsabs, flags, seed,
+  mineval, maxeval,
+  nstart, nincrease, nbatch,
+  gridno, statefile}
+:ArgumentTypes: {Integer, Integer,
+  Real64, Real64, Integer, Integer,
+  Integer, Integer,
+  Integer, Integer, Integer,
+  Integer, String}
+:ReturnType: Manual
+:End:
+
+:Evaluate: Attributes[Vegas] = {HoldFirst}
+
+:Evaluate: Options[Vegas] = {PrecisionGoal -> 3, AccuracyGoal -> 12,
+	MinPoints -> 0, MaxPoints -> 50000,
+	NStart -> 1000, NIncrease -> 500,
+	NBatch -> 1000, GridNo -> 0, StateFile -> "",
+	Verbose -> 1, Final -> All,
+	PseudoRandom -> False, PseudoRandomSeed -> 5489,
+	SharpEdges -> False, RetainStateFile -> False,
+	ResetState -> False, Compiled -> True}
+
+:Evaluate: Vegas[f_, v:{_, _, _}.., opt___Rule] :=
+	Block[ {ff = HoldForm[f], ndim = Length[{v}], ncomp,
+	tags, vars, lower, range, jac, tmp, defs, intT,
+	rel, abs, mineval, maxeval, nstart, nincrease, nbatch,
+	gridno, state, verbose, final, level, seed, edges, retain,
+	zapstate, compiled, $Weight, $Iteration},
+	  Message[Vegas::optx, #, Vegas]&/@
+	    Complement[First/@ {opt}, tags = First/@ Options[Vegas]];
+	  {rel, abs, mineval, maxeval, nstart, nincrease, nbatch,
+	    gridno, state, verbose, final, level, seed, edges, retain,
+	    zapstate, compiled} = tags /. {opt} /. Options[Vegas];
+	  {vars, lower, range} = Transpose[{v}];
+	  jac = Simplify[Times@@ (range -= lower)];
+	  tmp = Array[tmpvar, ndim];
+	  defs = Simplify[lower + range tmp];
+	  Block[{Set}, define[compiled, tmp, Thread[vars = defs], jac]];
+	  intT = integrandT[f];
+	  Block[#,
+	    ncomp = Length[intT@@ RandomReal[1, ndim]];
+	    MLVegas[ndim, ncomp, 10.^-rel, 10.^-abs,
+	      Min[Max[verbose, 0], 3] +
+	        If[final === Last, 4, 0] +
+	        If[TrueQ[edges], 8, 0] +
+	        If[TrueQ[retain], 16, 0] +
+	        If[TrueQ[zapstate], 32, 0] +
+	        If[IntegerQ[level], 256 level, 0],
+	      If[level =!= False && IntegerQ[seed], seed, 0],
+	      mineval, maxeval,
+	      nstart, nincrease, nbatch,
+	      gridno, state]
+	  ]& @ vars
+	]
+
+:Evaluate: tmpvar[n_] := ToExpression["Cuba`Vegas`t" <> ToString[n]]
+
+:Evaluate: Attributes[foo] = {HoldAll}
+
+:Evaluate: define[True, tmp_, defs_, jac_] :=
+	integrandT[f_] := Compile[tmp, eval[defs, N[f jac]],
+	  {{_eval, _Real, 1}}]
+
+:Evaluate: define[_, tmp_, defs_, jac_] :=
+	integrandT[f_] := Function[tmp, eval[defs, N[f jac]]]
+
+:Evaluate: eval[_, f_Real] = {f}
+
+:Evaluate: eval[_, f:{__Real}] = f
+
+:Evaluate: eval[x_, _] := (Message[Vegas::badsample, ff, x]; {})
+
+:Evaluate: sample[x_, w_, iter_] := (
+	$Iteration = iter;
+	Check[Flatten @ MapSample[
+	  ($Weight = #[[1]]; intT@@ #[[2]])&,
+	  Transpose[{w, Partition[x, ndim]}] ], {}] )
+
+:Evaluate: ValueQ[MapSample] || (MapSample = Map)
+
+:Evaluate: Vegas::badsample = "`` is not a real-valued function at ``."
+
+:Evaluate: Vegas::baddim = "Cannot integrate in `` dimensions."
+
+:Evaluate: Vegas::badcomp = "Cannot integrate `` components."
+
+:Evaluate: Vegas::accuracy =
+	"Desired accuracy was not reached within `` function evaluations."
+
+:Evaluate: Vegas::success = "Needed `` function evaluations."
+
+:Evaluate: End[]
+
+:Evaluate: EndPackage[]
+
+
+/*
+	Vegas.tm
+		Vegas Monte Carlo integration
+		by Thomas Hahn
+		last modified 27 Mar 15 th
+*/
+
+
+#define VEGAS
+#define ROUTINE "Vegas"
+
+#include "mathlink.h"
+#include "decl.h"
+#include "MSample.c"
+
+/*********************************************************************/
+
+static void Status(MLCONST char *msg, cint n)
+{
+  MLPutFunction(stdlink, "CompoundExpression", 2);
+  MLPutFunction(stdlink, "Message", 2);
+  MLPutFunction(stdlink, "MessageName", 2);
+  MLPutSymbol(stdlink, "Vegas");
+  MLPutString(stdlink, msg);
+  MLPutInteger(stdlink, n);
+}
+
+/*********************************************************************/
+
+static inline void DoIntegrate(This *t)
+{
+  real integral[NCOMP], error[NCOMP], prob[NCOMP];
+  cint fail = Integrate(t, integral, error, prob);
+
+  if( fail < 0 ) {
+    switch( fail ) {
+    case -99:
+      MLPutFunction(stdlink, "Abort", 0);
+      return;
+    case -1:
+      Status("baddim", t->ndim);
+      break;
+    case -2:
+      Status("badcomp", t->ncomp);
+      break;
+    }
+    MLPutSymbol(stdlink, "$Failed");
+  }
+  else {
+    Status(fail ? "accuracy" : "success", t->neval);
+    MLPutFunction(stdlink, "Thread", 1);
+    MLPutFunction(stdlink, "List", 3);
+    MLPutRealxList(stdlink, integral, t->ncomp);
+    MLPutRealxList(stdlink, error, t->ncomp);
+    MLPutRealxList(stdlink, prob, t->ncomp);
+  }
+}
+
+/*********************************************************************/
+
+void Vegas(cint ndim, cint ncomp,
+  creal epsrel, creal epsabs,
+  cint flags, cint seed,
+  cnumber mineval, cnumber maxeval,
+  cnumber nstart, cnumber nincrease, cint nbatch,
+  cint gridno, cchar *statefile)
+{
+  This t;
+  t.ndim = ndim;
+  t.ncomp = ncomp;
+  t.epsrel = epsrel;
+  t.epsabs = epsabs;
+  t.flags = flags;
+  t.seed = seed;
+  t.mineval = mineval;
+  t.maxeval = maxeval;
+  t.nstart = nstart;
+  t.nincrease = nincrease;
+  t.nbatch = nbatch;
+  t.gridno = gridno;
+  t.statefile = statefile;
+
+  DoIntegrate(&t);
+  MLEndPacket(stdlink);
+}
+
+/*********************************************************************/
+
+int main(int argc, char **argv)
+{
+  return MLMain(argc, argv);
+}
+
diff --git a/Cuba/src/vegas/common.c b/Cuba/src/vegas/common.c
new file mode 100644
index 0000000000000000000000000000000000000000..eaa59a42b799903bcf6e3366a73ffdd11092648a
--- /dev/null
+++ b/Cuba/src/vegas/common.c
@@ -0,0 +1,25 @@
+/*
+	common.c
+		Code common to Vegas.c and Vegas.tm
+		this file is part of Vegas
+		last modified 29 Jul 13 th
+*/
+
+
+#include "Random.c"
+#include "ChiSquare.c"
+#include "Grid.c"
+
+static inline bool BadDimension(cThis *t)
+{
+  if( t->ndim > MAXDIM ) return true;
+  return t->ndim < SOBOL_MINDIM ||
+    (t->seed == 0 && t->ndim > SOBOL_MAXDIM);
+}
+
+static inline bool BadComponent(cThis *t)
+{
+  if( t->ncomp > MAXCOMP ) return true;
+  return t->ncomp < 1;
+}
+
diff --git a/Cuba/src/vegas/decl.h b/Cuba/src/vegas/decl.h
new file mode 100644
index 0000000000000000000000000000000000000000..d528c2b8b2f0c9e4a8ee336e57b0826db3bf6e2a
--- /dev/null
+++ b/Cuba/src/vegas/decl.h
@@ -0,0 +1,63 @@
+/*
+	decl.h
+		Type declarations
+		this file is part of Vegas
+		last modified 21 Jul 14 th
+*/
+
+
+#include "stddecl.h"
+
+#define MAXGRIDS 10
+
+#define NBINS 128
+
+typedef unsigned char bin_t;
+/* Note: bin_t must be wide enough to hold the numbers 0..NBINS */
+
+typedef const bin_t cbin_t;
+
+typedef real Grid[NBINS];
+
+typedef struct {
+  real sum, sqsum;
+  real weightsum, avgsum;
+  real chisum, chisqsum, guess;
+  real avg, err, chisq;
+} Cumulants;
+
+typedef const Cumulants cCumulants;
+
+typedef int (*Integrand)(ccount *, creal *, ccount *, real *,
+  void *, cnumber *, cint *, creal *, cint *);
+
+typedef struct _this {
+  count ndim, ncomp;
+#ifndef MLVERSION
+  Integrand integrand;
+  void *userdata;
+  number nvec;
+#ifdef HAVE_FORK
+  SHM_ONLY(int shmid;)
+  Spin *spin;
+#endif
+#endif
+  real *frame;
+  real epsrel, epsabs;
+  int flags, seed;
+  number mineval, maxeval;
+  number nstart, nincrease, nbatch;
+  int gridno;
+  cchar *statefile;
+  number neval;
+  RNGState rng;
+  jmp_buf abort;
+} This;
+
+#define nframe nbatch
+
+typedef const This cThis;
+
+static Grid *gridptr_[MAXGRIDS];
+static count griddim_[MAXGRIDS];
+
diff --git a/Cuba/tools/fcc b/Cuba/tools/fcc
new file mode 100755
index 0000000000000000000000000000000000000000..5ae55b8b9b477a6b9c858096047a7e800f880e18
--- /dev/null
+++ b/Cuba/tools/fcc
@@ -0,0 +1,73 @@
+#! /bin/sh
+# script to compile C programs that are linked 
+# against Fortran libraries
+# last modified 3 Feb 15 th
+
+args=
+compileonly=
+objs=
+ldflags=
+fldflags=
+
+cc="${REALCC:-cc}"
+cxx="${REALCXX:-c++}"
+test `basename $0 .in` = f++ && cc="$cxx"
+case `$cxx --version 2>&1` in
+*clang*) cxx="$cxx -stdlib=libstdc++" ;;
+esac
+
+while test $# -gt 0 ; do
+  case "$1" in
+  -st | -b32 | -b64)
+	;; # ignore mcc-specific flags
+  -arch)
+	shift
+	;;
+  -lstdc++)
+	cc="$cxx"
+	;; # or else -static-libstdc++ has no effect
+  -Wno-long-double)
+	;; # mcc adds this on Macs & gcc 4 doesn't like it
+  -L*CompilerAdditions*)
+	ldflags="$ldflags '$1'"
+	mldir=`echo "$1" | sed '
+	  s/^-L//
+	  s/Links.MathLink.DeveloperKit/Libraries/
+	  s/CompilerAdditions.*$//'`
+	case "$cc" in
+	*-m32*) mldir=`echo "$mldir" | sed 's/-x86-64//g'` ;;
+	esac
+	test -f "$mldir/libuuid.a" && {
+	  ldflags="$ldflads '-L$mldir'"
+	  fldflags="$fldflags -luuid"
+	}
+	;;
+  -[Ll]* | -Wl*)
+	ldflags="$ldflags '$1'"
+	;;
+  *.tm.o)
+	objs="'$1' $objs"
+	;;
+  *.a | *.o | *.so)
+	objs="$objs '$1'"
+	;;
+  *.cc)
+	args="$args '$1'"
+	cc="$cxx"
+	;;
+  -c)
+	compileonly="-c"
+	;;
+  -o)
+	args="$args -o '$2'"
+	shift
+	;;
+  *)
+	args="$args '$1'"
+	;;
+  esac
+  shift
+done
+
+eval "set -x ; exec $cc $args ${compileonly:-$objs $ldflags $fldflags}"
+
diff --git a/Cuba/tools/mcc b/Cuba/tools/mcc
new file mode 100755
index 0000000000000000000000000000000000000000..2637f92ee12b649d8c97b97ee9e866bbaf2e0c3c
--- /dev/null
+++ b/Cuba/tools/mcc
@@ -0,0 +1,119 @@
+#! /bin/sh
+# this script jumps in if there is no working mcc on the path:
+# - on Mac OS it (hopefully) figures out the location of mcc,
+# - on Cygwin it substitutes mcc completely
+# last modified 16 Jan 15 th
+
+
+sdkpath()
+{
+  mathcmd="$1"
+  shift
+  mathcmd=`IFS=:
+    PATH="$PATH:$*" which $mathcmd`
+  
+  eval `"$mathcmd" -run '
+    Print["sysid=\"", $SystemID, "\""];
+    Print["topdir=\"", $TopDirectory, "\""];
+    Exit[]' < /dev/null | tr '\r' ' ' | tail -2`
+
+	# check whether Cygwin's dlltool can handle 64-bit DLLs
+  test "$sysid" = Windows-x86-64 && {
+    ${DLLTOOL:-dlltool} --help | grep x86-64 > /dev/null || sysid=Windows
+  }
+
+  topdir=`cd "$topdir" ; echo $PWD`
+
+  for sdk in \
+    "$topdir/SystemFiles/Links/MathLink/DeveloperKit/$sysid/CompilerAdditions" \
+    "$topdir/SystemFiles/Links/MathLink/DeveloperKit/CompilerAdditions" \
+    "$topdir/AddOns/MathLink/DeveloperKit/$sysid/CompilerAdditions" ; do
+    test -d "$sdk" && return
+  done
+
+  echo "MathLink SDK not found" 1>&2
+  exit 1
+}
+
+
+cygmcc()
+{
+  sdkpath math \
+    "`cygpath '$ProgramW6432'`/Wolfram Research/Mathematica"/* \
+    "`cygpath '$PROGRAMFILES'`/Wolfram Research/Mathematica"/* \
+    "/cygdrive/c/Program Files/Wolfram Research/Mathematica"/* \
+    "/cygdrive/c/Program Files (x86)/Wolfram Research/Mathematica"/*
+
+  for sdk in "$sdk"/m* ; do
+    break
+  done
+
+  cache=MLcyg-cache
+  test -d $cache || mkdir $cache
+
+  for libname in "$sdk"/lib/ml*m.lib ; do
+    :
+  done
+  dllname=`basename "$libname" m.lib`
+  OSbits=32
+  case "$dllname" in
+  *64*) OSbits=64 ;;
+  esac
+
+  lib="$cache/${dllname}m"
+  test -f "$lib.a" || {
+    ( echo "EXPORTS"
+      ${NM:-nm} -C --defined-only "$libname" | awk '/ T [^.]/ { print $3 }'
+    ) > "$lib.def"
+    ${DLLTOOL:-dlltool} -k --dllname "$dllname.dll" \
+      --def "$lib.def" --output-lib "$lib.a"
+  }
+
+  tmp=
+  args="-DWIN$OSbits -I'$sdk/include'"
+  for arg in "$@" ; do
+    case "$arg" in
+    *.tm)
+	cp "$arg" "$arg.tm"
+	"$sdk"/bin/mprep -lines -o "$arg.c" "$arg.tm"
+	tmp="$tmp '$arg.c' '$arg.tm'"
+	args="$args '$arg.c'" ;;
+    *)
+	args="$args '$arg'" ;;
+    esac
+  done
+
+  trap "rm -f $tmp" 0 1 2 3 15
+  eval "set -x ; ${CC:-gcc} $args $lib.a -mwindows"
+}
+
+
+macmcc()
+{
+  sdkpath MathKernel \
+    /Applications/Mathematica*/Contents/MacOS \
+    $HOME/Desktop/Mathematica*/Contents/MacOS
+  exec "$sdk/mcc" "$@"
+}
+
+
+defaultmcc()
+{
+  sdkpath math \
+    /usr/local/bin \
+    /usr/local/Wolfram/bin \
+    /usr/local/Wolfram/Mathematica/*/Executables \
+    /opt/Wolfram/bin \
+    /opt/Wolfram/Mathematica/*/Executables
+  exec "$sdk/mcc" "$@"
+}
+
+
+shopt -s nullglob 2> /dev/null
+
+case `uname -s` in
+Darwin) macmcc "$@" ;;
+CYG*)   cygmcc "$@" ;;
+*)      defaultmcc "$@" ;;
+esac
+
diff --git a/Cuba/tools/mkdist.c b/Cuba/tools/mkdist.c
new file mode 100644
index 0000000000000000000000000000000000000000..45c5e60f473d41609a8c814712ed0bb58c5c2d70
--- /dev/null
+++ b/Cuba/tools/mkdist.c
@@ -0,0 +1,183 @@
+/*
+	mkdist.c
+
+	Usage: mkdist cvfz packagename.tar.gz packagedir files
+
+	Creates packagename.tar.gz for distribution which unpacks
+	into the directory "packagedir".
+	1) Sets up a temporary tree in which
+	   - symlinks are preserved if they point to files in the tree,
+	   - all other files are hardlinked.
+	2) Tars that tree.
+	3) Removes the temporary tree.
+
+	last modified 4 Dec 14 th
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+char path[PATH_MAX], *path_end;
+
+
+static inline char *copydir(char *d, const char *s) {
+  const char *dir = strrchr(s, '/');
+  const ssize_t n = (dir) ? dir - s + 1 : 0;
+  return memcpy(d, s, n) + n;
+}
+
+
+static int depth(const char *path)
+{
+  int n = 0;
+  for( ; ; ) {
+    if( strncmp(path, "./", 2) == 0 ) path += 2;
+    else if( strncmp(path, "../", 3) == 0 ) {
+      path += 3;
+      if( --n < 0 ) return n;
+    }
+    else if( (path = strchr(path, '/')) ) ++n;
+    else return n;
+    path = path + strspn(path, "/");
+  }
+}
+
+
+static void mkdirhier(char *file)
+{
+  struct stat st;
+  char *s = file;
+  const char *e = strrchr(file, '/');
+
+  while( s < e ) {
+    s = strchr(s, '/');
+    *s = 0;
+    if( stat(file, &st) ) mkdir(file, 0777);
+    else if( !S_ISDIR(st.st_mode) ) {
+      fprintf(stderr, "Cannot create %s\n", file);
+      exit(1);
+    }
+    *s++ = '/';
+  }
+}
+
+
+static void inspect(const char *file, const int phase)
+{
+  struct stat st;
+  if( lstat(file, &st) ) {
+    fprintf(stderr, "Cannot stat %s\n", file);
+    return;
+  }
+
+  strcpy(path_end, file);
+  if( phase == 0 ) mkdirhier(path);
+
+  if( S_ISREG(st.st_mode) ) {
+    if( phase == 0 ) link(file, path);
+    return;
+  }
+
+  if( S_ISDIR(st.st_mode) ) {
+    char sub[PATH_MAX], *sub_end;
+    struct dirent *entry;
+
+    DIR *cwd = opendir(file);
+    if( cwd == NULL ) {
+      fprintf(stderr, "Cannot read directory %s\n", file);
+      exit(1);
+    }
+
+    strcpy(sub, file);
+    sub_end = sub + strlen(sub);
+    *sub_end++ = '/';
+
+    while( (entry = readdir(cwd)) )
+      if( *entry->d_name != '.' ) {
+        strcpy(sub_end, entry->d_name);
+        inspect(sub, phase);
+      }
+
+    closedir(cwd);
+    return;
+  }
+
+  if( S_ISLNK(st.st_mode) ) {
+    char src[PATH_MAX], tmp[PATH_MAX];
+    char *lnrel = copydir(src, file), *lnabs;
+    ssize_t n = readlink(file, lnrel, PATH_MAX);
+    if( n < 0 ) {
+      fprintf(stderr, "Cannot read link %s\n", file);
+      exit(1);
+    }
+    lnrel[n++] = 0;
+
+    if( *(lnabs = lnrel) != '/' &&
+        depth(lnabs = src) >= 0 ) {	/* not out-of-tree */
+      if( phase == 0 ) return;
+      memcpy(copydir(tmp, path), lnrel, n);
+      if( stat(tmp, &st) == 0 ) {
+        symlink(lnrel, path);
+        return;
+      }
+    } else if( phase == 1 ) return;
+
+    if( realpath(lnabs, tmp) == NULL ||
+        link(tmp, path) == -1 )
+      fprintf(stderr, "Dangling link %s\n", file);
+  }
+}
+
+
+int main(int argc, char **argv)
+{
+  char cmd[PATH_MAX];
+  struct stat st;
+  int c;
+
+  if( argc < 5 ) {
+    fprintf(stderr,
+      "Usage:\t%s tarflags packagename.tar[.gz] packagedir files\n\n"
+      "Creates packagename.tar[.gz] for distribution which contains\n"
+      "\"files\" and unpacks into the directory \"packagedir\".\n"
+      "Symlinks are preserved if they point to files in the package.\n\n",
+      argv[0]);
+    exit(1);
+  }
+
+  if( strstr(argv[2], ".tar") == NULL ) {
+    fprintf(stderr, "%s is not a tar file\n", argv[2]);
+    exit(1);
+  }
+
+  if( stat(argv[3], &st) == 0 ) {
+    fprintf(stderr, "%s exists already\n", argv[3]);
+    exit(1);
+  }
+  strcpy(path, argv[3]);
+  path_end = path + strlen(path);
+  *path_end++ = '/';
+
+  sprintf(cmd, "rm -fr %s %s", path, argv[2]);
+  system(cmd);
+
+  for( c = 4; c < argc; ++c ) inspect(argv[c], 0);
+  for( c = 4; c < argc; ++c ) inspect(argv[c], 1);
+
+  sprintf(cmd, "tar %s %s --owner=root --group=root %s",
+    argv[1], argv[2], argv[3]);
+  system(cmd);
+
+  sprintf(cmd, "rm -fr %s", argv[3]);
+  system(cmd);
+
+  return 0;
+}
+
diff --git a/Cuba/tools/mkstatic b/Cuba/tools/mkstatic
new file mode 100755
index 0000000000000000000000000000000000000000..0cd478b6bcce079ae3dce0db05f6d154dbde2518
--- /dev/null
+++ b/Cuba/tools/mkstatic
@@ -0,0 +1,31 @@
+#! /bin/sh
+
+exe=
+mach=
+mlmach=
+case `uname -s` in
+Linux)	tag=Linux
+	st=-static
+	#mach=-m32
+	#mlmach=-b32
+	;;
+Darwin)	tag=Mac
+	st=-static-libgcc
+	mach=-mmacosx-version-min=10.6
+	;;
+CYG*)	tag=Windows
+	export CC=i686-pc-cygwin-gcc
+	st="-static -static-libgcc"
+	exe=.exe
+	;;
+esac
+
+./configure CFLAGS="-O3 -fomit-frame-pointer -ffast-math $st $mach" MCFLAGS="-st $mlmach"
+
+make math
+
+for file in Vegas Suave Divonne Cuhre ; do
+  gzip $file$exe
+  mv $file$exe.gz $file$exe-$tag.gz
+done
+
diff --git a/Cuba/tools/partview.cpp b/Cuba/tools/partview.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..da2b2d2ff2e46c6df917bd9be89bdadbbf08ab25
--- /dev/null
+++ b/Cuba/tools/partview.cpp
@@ -0,0 +1,265 @@
+/*
+	partview.cpp
+		Partition viewer for Cuba
+		last modified 18 Dec 13 th
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <QWidget>
+#include <QMainWindow>
+#include <QTabWidget>
+#include <QAction>
+#include <QToolBar>
+#include <QPainter>
+#include <QPrinter>
+#include <QPrintDialog>
+#include <QApplication>
+#include <QColorGroup>
+
+#include <list>
+
+#include "quit.xpm"
+#include "print.xpm"
+
+// --------------------------------------------------------------
+
+class PartitionPlane : public QWidget
+{
+public:
+  PartitionPlane( const int dimx, const int dimy, QWidget *parent = 0 )
+  : QWidget(parent), m_dimx(dimx), m_dimy(dimy), m_got(0) {
+  }
+
+  void addBound( const int dim, const double lower, const double upper );
+
+  void drawRegion( QPainter *p, const QRect &r );
+  void drawRegions( QPainter *p );
+
+  QSize sizeHint() const {
+    return QSize(InitialSize, InitialSize);
+  }
+
+  QString filename() const {
+    return QString("%1-%2.ps").arg(m_dimx).arg(m_dimy);
+  }
+
+protected:
+  void paintEvent( QPaintEvent * ) {
+    QPainter p(this);
+    drawRegions( &p );
+  }
+
+private:
+  int m_dimx, m_dimy, m_got;
+  int m_xlower, m_xupper, m_ylower, m_yupper;
+
+  typedef std::list<QRect> regionList;
+  typedef regionList::iterator regionIt;
+  regionList m_regions;
+
+  enum {
+    Hue = 0, // red
+    InitialSize = 400,
+    CoordScale = 4*InitialSize };
+};
+
+
+void PartitionPlane::addBound( const int dim,
+  const double lower, const double upper )
+{
+  if( dim == m_dimx ) {
+    m_xlower = int(CoordScale*lower);
+    m_xupper = int(CoordScale*upper);
+    m_got |= 1;
+  }
+  if( dim == m_dimy ) {
+    m_ylower = int(CoordScale*lower);
+    m_yupper = int(CoordScale*upper);
+    m_got |= 2;
+  }
+
+  if( m_got == 3 ) {
+    m_got = 0;
+
+    const QRect rect = QRect(m_xlower, CoordScale - m_yupper,
+      m_xupper - m_xlower + 1, m_yupper - m_ylower + 1);
+
+    const int area = rect.width()*rect.height();
+    regionIt r;
+
+    for( r = m_regions.begin(); r != m_regions.end(); ++r ) {
+      if( rect == *r ) return;
+      if( area > (*r).width()*(*r).height() ) break;
+    }
+    m_regions.insert(r, rect);
+
+//    QPainter p(this);
+//    drawRegion( &p, rect );
+    this->update(rect);
+  }
+}
+
+
+void PartitionPlane::drawRegion( QPainter *p, const QRect &r )
+{
+  p->setWindow(0, 0, CoordScale, CoordScale);
+
+  QColor c;
+  const double ratio = r.width()*r.height()/
+    double(CoordScale*CoordScale);
+  const int saturation = int(255/(M_PI/2)*asin(1 - ratio));
+  c.setHsv( Hue, saturation, 255 );
+  p->setBrush(c);
+
+  p->setPen(palette().foreground().color());
+
+  p->drawRect(r);
+}
+
+
+void PartitionPlane::drawRegions( QPainter *p )
+{
+  for( regionIt r = m_regions.begin(); r != m_regions.end(); ++r )
+    drawRegion( p, *r );
+}
+
+
+// --------------------------------------------------------------
+
+class PartitionViewer : public QMainWindow
+{
+  Q_OBJECT
+
+public:
+  PartitionViewer( QWidget *parent = 0 );
+  void addPlane( const int dimx, const int dimy );
+  void addBound( const int dim, const double lower, const double upper );
+  int count() const { return m_tabs->count(); }
+  void tabupdate() { 
+    if( m_tabs->currentWidget() != 0 ) m_tabs->currentWidget()->update();
+  }
+
+public slots:
+  void print();
+
+private:
+  QTabWidget *m_tabs;
+  QPrinter *m_printer;
+};
+
+
+PartitionViewer::PartitionViewer( QWidget *parent )
+: QMainWindow(parent)
+{
+  setWindowTitle(tr("Cuba Partition Viewer"));
+
+  QToolBar *toolbar = new QToolBar(this);
+  addToolBar(Qt::LeftToolBarArea, toolbar);
+
+  QAction *quit = new QAction( QPixmap(quit_xpm), tr("&Quit"), this );
+  quit->setShortcut(QKeySequence(tr("Ctrl+Q")));
+  connect( quit, SIGNAL(activated()), qApp, SLOT(quit()) );
+  toolbar->addAction(quit);
+
+#ifndef QT_NO_PRINTER
+  QAction *print = new QAction( QPixmap(print_xpm), tr("&Print..."), this );
+  print->setShortcut(QKeySequence(tr("Ctrl+P")));
+  connect( print, SIGNAL(activated()), this, SLOT(print()) );
+  toolbar->addAction(print);
+
+  m_printer = new QPrinter;
+#endif
+
+  m_tabs = new QTabWidget(this);
+  setCentralWidget(m_tabs);
+}
+
+
+void PartitionViewer::addPlane( const int dimx, const int dimy )
+{
+  PartitionPlane *plane = new PartitionPlane(dimx, dimy, this);
+  m_tabs->addTab( plane, tr("%1-%2 plane").arg(dimx).arg(dimy) );
+}
+
+
+void PartitionViewer::addBound( const int dim,
+  const double lower, const double upper )
+{
+  for( int index = 0; index < m_tabs->count(); ++index ) {
+    PartitionPlane *plane = (PartitionPlane *)m_tabs->widget(index);
+    if( plane ) plane->addBound(dim, lower, upper);
+  }
+}
+
+
+void PartitionViewer::print()
+{
+#ifndef QT_NO_PRINTER
+  PartitionPlane *plane = (PartitionPlane *)m_tabs->currentWidget();
+  if( !plane ) return;
+
+  QPrintDialog printDialog(m_printer, this);
+  if( printDialog.exec() == QDialog::Accepted ) {
+    QPainter p;
+    if( p.begin(m_printer) ) {
+      p.setViewport( QRect(QPoint(0, 0), plane->sizeHint()) );
+//      plane->drawRegions( &p );
+      this->update();
+    }
+  }
+#endif
+}
+
+
+#include "partview.moc"
+
+// --------------------------------------------------------------
+
+int main( int argc, char **argv )
+{
+  QApplication app(argc, argv);
+  PartitionViewer partview;
+
+  argc = (argc - 1) & -2;
+
+  for( int arg = 0; arg < argc; ) {
+    const int dimx = atoi(argv[++arg]);
+    const int dimy = atoi(argv[++arg]);
+    if( dimx > 0 && dimy > 0 ) partview.addPlane(dimx, dimy);
+  }
+
+  if( partview.count() == 0 ) {
+    fprintf(stderr, "Usage:  %s dimx dimy ...\n"
+      "reads Cuba's verbose = 3 output from stdin and displays\n"
+      "the dimx-dimy plane of the tessellation on screen.\n"
+      "Each pair of dimensions is shown in a separate window.\n\n",
+      argv[0]);
+    exit(1);
+  }
+
+  partview.show();
+
+  int dim = 0;
+  char line[128];
+
+  while( fgets(line, sizeof line, stdin) ) {
+    double lower, upper;
+
+    fputs(line, stdout);
+
+    if( sscanf(line, "%*[^(](%lf) - (%lf)", &lower, &upper) == 2 )
+      partview.addBound(++dim, lower, upper);
+    else dim = 0;
+
+    app.processEvents();
+  }
+
+  fflush(stdout);
+  partview.tabupdate();
+  return app.exec();
+}
+
diff --git a/Cuba/tools/partview.m b/Cuba/tools/partview.m
new file mode 100644
index 0000000000000000000000000000000000000000..579f4f2208e251a462d9a48b840f4468dd6d9ff4
--- /dev/null
+++ b/Cuba/tools/partview.m
@@ -0,0 +1,40 @@
+(*
+	partview.m
+		A partition viewer for Cuba results in Mathematica
+		last modified 4 Feb 05 th
+*)
+
+
+BeginPackage["Cuba`"]
+
+PartView::usage = "For a Cuba result obtained with Regions -> True,
+PartView[result, dimx, dimy] displays the dimx-dimy plane of the
+tessellation used in the integration."
+
+Rect::usage = "Rect[{x1, y1}, {x2, y2}] is the graphics primitive used
+by PartView to render a rectangle."
+
+Begin["`PartView`"]
+
+PartView[expr_, dimx_Integer, dimy_Integer] :=
+Block[ {r, g, maxarea},
+  r = Cases[expr,
+    Region[ll_, ur_, ___] :> {ll[[{dimx, dimy}]], ur[[{dimx, dimy}]]},
+    Infinity];
+  maxarea = Times@@ (Max/@ #2 - Min/@ #1 &)@@ Transpose[r, {3, 1, 2}];
+  (Show[#]; #)& @ Graphics[Apply[Rect, r, 1], AspectRatio -> 1]
+]
+
+maxarea = 1
+
+Rect[{l_, d_}, {r_, u_}] := {
+  { Hue[0, (ArcSin[1 - (r - l) (u - d)/maxarea]/(Pi/2))^2, 1],
+    Rectangle[{l, d}, {r, u}] },
+  { RGBColor[0, 0, 0],
+    Line[{{l, d}, {r, d}, {r, u}, {l, u}, {l, d}}] }
+}
+
+End[]
+
+EndPackage[]
+
diff --git a/Cuba/tools/partview.pro b/Cuba/tools/partview.pro
new file mode 100644
index 0000000000000000000000000000000000000000..7084a8546b2cd0fdb105d9374bcc99609795c6af
--- /dev/null
+++ b/Cuba/tools/partview.pro
@@ -0,0 +1,6 @@
+TEMPLATE = app
+CONFIG += qt release
+SOURCES += partview.cpp
+HEADERS += quit.xpm print.xpm
+DESTDIR = .
+MOC_DIR = .
diff --git a/Cuba/tools/print.xpm b/Cuba/tools/print.xpm
new file mode 100644
index 0000000000000000000000000000000000000000..7368f3ca481ffc55849b98f1c9bd1f691e2b9061
--- /dev/null
+++ b/Cuba/tools/print.xpm
@@ -0,0 +1,258 @@
+/* XPM */
+static const char * print_xpm[] = {
+"48 48 207 2",
+"  	c None",
+". 	c #929292",
+"+ 	c #A0A0A0",
+"@ 	c #9E9E9E",
+"# 	c #9D9D9D",
+"$ 	c #9C9C9C",
+"% 	c #9B9B9B",
+"& 	c #9A9A9A",
+"* 	c #999999",
+"= 	c #DADADA",
+"- 	c #FFFFFF",
+"; 	c #FCFCFC",
+"> 	c #F9F9F9",
+", 	c #F7F7F7",
+"' 	c #F4F4F4",
+") 	c #EBEBEB",
+"! 	c #323232",
+"~ 	c #D7D7D7",
+"{ 	c #F1F1F1",
+"] 	c #EFEFEF",
+"^ 	c #ECECEC",
+"/ 	c #E3E3E3",
+"( 	c #313131",
+"_ 	c #FEFEFE",
+": 	c #F6F6F6",
+"< 	c #EEEEEE",
+"[ 	c #E9E9E9",
+"} 	c #E1E1E1",
+"| 	c #333333",
+"1 	c #D8D8D8",
+"2 	c #F3F3F3",
+"3 	c #E6E6E6",
+"4 	c #DEDEDE",
+"5 	c #E7E7E7",
+"6 	c #E4E4E4",
+"7 	c #DDDDDD",
+"8 	c #343434",
+"9 	c #DBDBDB",
+"0 	c #363636",
+"a 	c #DCDCDC",
+"b 	c #373737",
+"c 	c #DFDFDF",
+"d 	c #393939",
+"e 	c #D9D9D9",
+"f 	c #D5D5D5",
+"g 	c #E0E0E0",
+"h 	c #D6D6D6",
+"i 	c #D3D3D3",
+"j 	c #3B3B3B",
+"k 	c #E2E2E2",
+"l 	c #D4D4D4",
+"m 	c #D1D1D1",
+"n 	c #3C3C3C",
+"o 	c #D0D0D0",
+"p 	c #CECECE",
+"q 	c #3E3E3E",
+"r 	c #CDCDCD",
+"s 	c #797979",
+"t 	c #F0F0F0",
+"u 	c #EDEDED",
+"v 	c #E8E8E8",
+"w 	c #E5E5E5",
+"x 	c #737373",
+"y 	c #6C6C6C",
+"z 	c #959595",
+"A 	c #C5C5C5",
+"B 	c #757575",
+"C 	c #8B8B8B",
+"D 	c #878787",
+"E 	c #858585",
+"F 	c #838383",
+"G 	c #828282",
+"H 	c #808080",
+"I 	c #7E7E7E",
+"J 	c #7D7D7D",
+"K 	c #7B7B7B",
+"L 	c #7A7A7A",
+"M 	c #777777",
+"N 	c #767676",
+"O 	c #747474",
+"P 	c #717171",
+"Q 	c #707070",
+"R 	c #6E6E6E",
+"S 	c #6D6D6D",
+"T 	c #6B6B6B",
+"U 	c #606060",
+"V 	c #D2D2D2",
+"W 	c #5E5E5E",
+"X 	c #5A5A5A",
+"Y 	c #5B5B5B",
+"Z 	c #595959",
+"` 	c #585858",
+" .	c #565656",
+"..	c #555555",
+"+.	c #545454",
+"@.	c #535353",
+"#.	c #515151",
+"$.	c #4F4F4F",
+"%.	c #4E4E4E",
+"&.	c #4D4D4D",
+"*.	c #494949",
+"=.	c #8F8F8F",
+"-.	c #FBFBFB",
+";.	c #EAEAEA",
+">.	c #B3B3B3",
+",.	c #FDFDFD",
+"'.	c #FAFAFA",
+").	c #CCCCCC",
+"!.	c #CACACA",
+"~.	c #BDBDBD",
+"{.	c #3A3A3A",
+"].	c #676767",
+"^.	c #F8F8F8",
+"/.	c #C4C4C4",
+"(.	c #B0B0B0",
+"_.	c #A1A1A1",
+":.	c #B8B8B8",
+"<.	c #F8F6F8",
+"[.	c #B5B5B5",
+"}.	c #E9F2E9",
+"|.	c #ACCEAC",
+"1.	c #B9D3B9",
+"2.	c #F5F7F5",
+"3.	c #7C7C7C",
+"4.	c #FDFAFD",
+"5.	c #7CC57C",
+"6.	c #5BD55B",
+"7.	c #39C339",
+"8.	c #FFFBFF",
+"9.	c #76C776",
+"0.	c #05BF05",
+"a.	c #07B507",
+"b.	c #8CCB8C",
+"c.	c #4B4B4B",
+"d.	c #F5F6F5",
+"e.	c #B2D1B2",
+"f.	c #CADFCA",
+"g.	c #FCFAFC",
+"h.	c #2E2E2E",
+"i.	c #F9F8F9",
+"j.	c #FFFCFF",
+"k.	c #C0C0C0",
+"l.	c #A6A6A6",
+"m.	c #C2C2C2",
+"n.	c #AAAAAA",
+"o.	c #C3C3C3",
+"p.	c #ABABAB",
+"q.	c #A3A3A3",
+"r.	c #CFCFCF",
+"s.	c #C8C8C8",
+"t.	c #C7C7C7",
+"u.	c #C9C9C9",
+"v.	c #909090",
+"w.	c #8D8D8D",
+"x.	c #8E8E8E",
+"y.	c #626262",
+"z.	c #A2A2A2",
+"A.	c #BFBFBF",
+"B.	c #000000",
+"C.	c #464646",
+"D.	c #B1B1B1",
+"E.	c #BBBBBB",
+"F.	c #252525",
+"G.	c #3D3D3D",
+"H.	c #010101",
+"I.	c #727272",
+"J.	c #BEBEBE",
+"K.	c #292929",
+"L.	c #BABABA",
+"M.	c #B6B6B6",
+"N.	c #030303",
+"O.	c #888888",
+"P.	c #C1C1C1",
+"Q.	c #9F9F9F",
+"R.	c #131313",
+"S.	c #B7B7B7",
+"T.	c #B9B9B9",
+"U.	c #8C8C8C",
+"V.	c #B4B4B4",
+"W.	c #BCBCBC",
+"X.	c #111111",
+"Y.	c #303030",
+"Z.	c #474747",
+"`.	c #101010",
+" +	c #505050",
+".+	c #ACACAC",
+"++	c #AEAEAE",
+"@+	c #616161",
+"#+	c #8A8A8A",
+"$+	c #A5A5A5",
+"%+	c #F5F5F5",
+"&+	c #F2F2F2",
+"*+	c #272727",
+"=+	c #1B1B1B",
+"-+	c #454545",
+";+	c #949494",
+">+	c #121212",
+",+	c #AFAFAF",
+"'+	c #979797",
+")+	c #404040",
+"!+	c #787878",
+"~+	c #646464",
+"{+	c #5F5F5F",
+"]+	c #5D5D5D",
+"^+	c #5C5C5C",
+"/+	c #575757",
+"(+	c #434343",
+"                          . + @ @ @ @ @ @ @ @ @ @ @ # $ % & * * * *                             ",
+"                          = - - - - - - - - - - - - - - ; > , ' ' ) !                           ",
+"                          ~ - - - - - - - - - - - ; > , ' { ] ^ ^ / (                           ",
+"                          ~ - - - - - - - - - _ ; > : ' { < ^ [ [ } |                           ",
+"                          1 - - - - - - - - _ ; > : 2 { < ) [ 3 3 4 |                           ",
+"                          = - - - - - - - - ; > , ' { ] ^ [ 5 6 6 7 8                           ",
+"                          9 - - - - - - _ ; > : ' { < ^ [ 3 6 } } 9 0                           ",
+"                          a - - - - - _ ; > : 2 { < ) [ 3 / } 4 7 1 b                           ",
+"                          4 - - - - - ; > , ' { ] ^ [ 5 6 } c a 9 ~ d                           ",
+"                          c - - - _ ; > : ' { < ^ [ 3 6 } 4 a e 1 f d                           ",
+"                          g - - _ ; > : 2 { < ) [ 3 / } 4 9 e h f i j                           ",
+"                          k - - ; > , ' { ] ^ [ 5 6 } c a e ~ l i m n                           ",
+"                          / - ; > : ' { < ^ [ 3 6 } 4 a e h l m o p q                           ",
+"                          / - > : 2 { < ) [ 3 / } 4 9 e h i m p r r b                           ",
+"                        s ) - - - _ ; > : ' t u ) v w / c a = ~ f m x y                         ",
+"                    z A d B C D E F G H I J K L s M N O x P Q R S T | F a U                     ",
+"                    V 6 W X X X X X X X Y Y Z ` `  ...+.@.#.#.$.%.&.*.=.c %                     ",
+"                    ) - - - - - - - - - - - - _ -., ' { < ;.5 6 g 7 9 i o >.(                   ",
+"                  #.2 - - - - - - - - - ,.'.: 2 t u [ 3 / g 7 = h i o ).!.~.{.                  ",
+"                ].C ^.- - - - - - - - ; > : 2 t < ;.5 6 } 4 a 1 f V o ).!./.I ..                ",
+"          x (.i ] - - - - - - - - - - - _ _ _ _ _ ,.,.,.,.,.,.; ; ; ; -.-.; ,.] m _...          ",
+"      Q :.<.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' [.Z       ",
+"      1 - }.|.1.2.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A       ",
+"    3.,.4.5.6.7.5.- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - u Y     ",
+"    (._ 8.9.0.a.b.- ,.; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ,._ @     ",
+"  c.9 '.-.d.e.f.g.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.,.9 h.  ",
+"  K ] , , i.j.8.^., , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ^.] X   ",
+"  _.{ { ' ' ' 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ' ' ' 2 u F   ",
+"  :.;./ 5 u ] t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t ] u v 6 5 %   ",
+"  k.6 4 7 4 g / w v ;.) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ;.[ 3 / } c 4 4 6 l.  ",
+"  m.4 = = = = e e = 9 c g k k / 6 w w w w w w w w w w w w w w 6 / k k } c a = e e e = = = g n.  ",
+"  o.e f f f f f f f f l l f f f f h h ~ ~ 1 1 1 1 1 1 1 ~ h h f f f f l l f f f f f f f f a p.  ",
+"  ~.f m m m m m m m m m m m m m m m m m o o o o o o o o m m m m m m m m m m m m m m m m m h l.  ",
+"  [.m r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r ).m +   ",
+"  q.r.s.s.s.t.o h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h r t.s.s.u.).v.  ",
+"  w.!./././.u.x.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.z.u././.A u.O   ",
+"  ].m.k.A.A.!.&.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.N !.A.A.k.A C.  ",
+"  c.D.~.E.E.A @.B.B.B.B.F.G.j j j j j j j j j j j j j j {.{.{.{.{.{.n ( H.B.B.B.I./.E.E.J.p.K.  ",
+"    & L.M.M.k.$.B.B.B.N.O.= f l l l l l l l l f l i o p ).!.s.A m.P./.Q.R.B.B.B.].~.S.S.T.U.    ",
+"    U ~.M.V.W.Z X.X.X.Y.V 3 k k k k k k k k k k g 7 = e h i m p ).!.s.k.Z.`.X.X.].>.[.S.S. +    ",
+"      L n.:.T.W.A.~.:.n.; _ _ _ _ _ _ _ _ _ _ -.> : 2 { < ;.v w k g 7 4 Q..+A.J.++V.:.l.y       ",
+"        ! @+#+$+[.E.# J.- - - - - - - - - - ,.'.^.%+&+t ^ [ 5 6 } c a a m.z.L.V.z.E W *+        ",
+"              =+-+S U.&+- - - - - - - - - ,.'., %+&+] ^ [ 3 6 } 4 a 1 h m ;+].q >+              ",
+"                    ,+- - - - - - - - - ; '., ' &+] ^ [ 3 / } 4 9 1 f V f '+                    ",
+"                    [ - - - - - - - - _ '.^.%+&+t u [ 5 6 } c a e h i o m J.)+                  ",
+"                  z.- - - - - - - - - - - _ -.^.%+&+] u ;.5 w } 4 a = ~ f 1 !+                  ",
+"                  @.~+y.y.y.y.y.y.y.@+{+{+{+{+W ]+^+^+X X X Z Z ` ` /+..../+(+                  ",
+"                                                                                                "};
diff --git a/Cuba/tools/quit.xpm b/Cuba/tools/quit.xpm
new file mode 100644
index 0000000000000000000000000000000000000000..57d45c7b13fba1706dabed5d0515c81ab88c3664
--- /dev/null
+++ b/Cuba/tools/quit.xpm
@@ -0,0 +1,346 @@
+/* XPM */
+static const char * quit_xpm[] = {
+"48 48 295 2",
+"  	c None",
+". 	c #A62212",
+"+ 	c #B03B2A",
+"@ 	c #B95440",
+"# 	c #BF644E",
+"$ 	c #BE634D",
+"% 	c #BE634C",
+"& 	c #BE624C",
+"* 	c #BE624B",
+"= 	c #BE614A",
+"- 	c #BD614A",
+"; 	c #BD6049",
+"> 	c #BD6048",
+", 	c #BD5F48",
+"' 	c #BD5F46",
+") 	c #BD5E46",
+"! 	c #BC5E45",
+"~ 	c #BC5D44",
+"{ 	c #BC5D43",
+"] 	c #BC5C43",
+"^ 	c #BB5C42",
+"/ 	c #BB5A42",
+"( 	c #BB5A41",
+"_ 	c #BB5A40",
+": 	c #BA5940",
+"< 	c #B54B34",
+"[ 	c #AE3623",
+"} 	c #B95541",
+"| 	c #D2997F",
+"1 	c #D9A88D",
+"2 	c #D8A78B",
+"3 	c #D8A68A",
+"4 	c #D8A689",
+"5 	c #D7A487",
+"6 	c #D7A286",
+"7 	c #D7A285",
+"8 	c #D5A082",
+"9 	c #D5A081",
+"0 	c #D49E7F",
+"a 	c #D49E7E",
+"b 	c #D49D7D",
+"c 	c #D39B7B",
+"d 	c #D39B79",
+"e 	c #D39A78",
+"f 	c #D29977",
+"g 	c #D29775",
+"h 	c #D19674",
+"i 	c #D19573",
+"j 	c #D09471",
+"k 	c #CF936F",
+"l 	c #CF926E",
+"m 	c #CE916D",
+"n 	c #CE906C",
+"o 	c #CE8F6A",
+"p 	c #CD8D69",
+"q 	c #C8805D",
+"r 	c #B44A31",
+"s 	c #A92B1A",
+"t 	c #CD8971",
+"u 	c #D9A98F",
+"v 	c #D09275",
+"w 	c #C87E5E",
+"x 	c #C97E5E",
+"y 	c #C87E5D",
+"z 	c #C87F5E",
+"A 	c #C97F5D",
+"B 	c #C87F5D",
+"C 	c #C87F5C",
+"D 	c #C9805D",
+"E 	c #C8805C",
+"F 	c #C9805C",
+"G 	c #C8815C",
+"H 	c #C9815C",
+"I 	c #CA8861",
+"J 	c #CC8B65",
+"K 	c #CC8A64",
+"L 	c #C26F4F",
+"M 	c #A82918",
+"N 	c #D2997C",
+"O 	c #BD5E3B",
+"P 	c #BA5531",
+"Q 	c #BA5631",
+"R 	c #BA5732",
+"S 	c #BB5935",
+"T 	c #BB5A36",
+"U 	c #BB5C37",
+"V 	c #BC5E38",
+"W 	c #BD5F39",
+"X 	c #BD603A",
+"Y 	c #BD613B",
+"Z 	c #BE633C",
+"` 	c #BE643E",
+" .	c #BE653F",
+"..	c #BE6740",
+"+.	c #BF6841",
+"@.	c #C06A43",
+"#.	c #C06B44",
+"$.	c #C26D45",
+"%.	c #C26E46",
+"&.	c #C26F48",
+"*.	c #C27149",
+"=.	c #C4724B",
+"-.	c #C4744C",
+";.	c #C4744D",
+">.	c #C4754E",
+",.	c #C57750",
+"'.	c #C67B54",
+").	c #CA8760",
+"!.	c #CA8962",
+"~.	c #BF6849",
+"{.	c #BB5836",
+"].	c #C57852",
+"^.	c #C57953",
+"/.	c #C67D55",
+"(.	c #C9855F",
+"_.	c #C9865F",
+":.	c #B3462E",
+"<.	c #C67C54",
+"[.	c #C77D56",
+"}.	c #C77F58",
+"|.	c #C8835D",
+"1.	c #C47652",
+"2.	c #CF8667",
+"3.	c #E5B39E",
+"4.	c #FCE1D4",
+"5.	c #FFECE2",
+"6.	c #FFEDE3",
+"7.	c #F8D9C9",
+"8.	c #E2AF96",
+"9.	c #C77B56",
+"0.	c #C77E57",
+"a.	c #C8815A",
+"b.	c #C88059",
+"c.	c #AC3420",
+"d.	c #D49073",
+"e.	c #FFEBE2",
+"f.	c #FFFFFF",
+"g.	c #F9DACC",
+"h.	c #CF8967",
+"i.	c #B2442C",
+"j.	c #C36C49",
+"k.	c #FBDFD3",
+"l.	c #E4B39B",
+"m.	c #C8825C",
+"n.	c #C77C55",
+"o.	c #B54E32",
+"p.	c #FFF6EF",
+"q.	c #FFEEE4",
+"r.	c #FFF9F1",
+"s.	c #F9DCCE",
+"t.	c #C67B53",
+"u.	c #B54D31",
+"v.	c #DCA187",
+"w.	c #C97E59",
+"x.	c #E4B29A",
+"y.	c #FADECF",
+"z.	c #C9855E",
+"A.	c #C57850",
+"B.	c #B54C31",
+"C.	c #FFEBE1",
+"D.	c #DCA086",
+"E.	c #CA815D",
+"F.	c #E6B9A0",
+"G.	c #C87F59",
+"H.	c #C5764F",
+"I.	c #B54B30",
+"J.	c #DFA78F",
+"K.	c #D18B6B",
+"L.	c #D39374",
+"M.	c #E9C0AA",
+"N.	c #CE8B67",
+"O.	c #B54B2F",
+"P.	c #FFFFFC",
+"Q.	c #D79678",
+"R.	c #EEC7B3",
+"S.	c #FADED0",
+"T.	c #F0CEBA",
+"U.	c #C4734C",
+"V.	c #B44A2E",
+"W.	c #DA9C82",
+"X.	c #F7D7C8",
+"Y.	c #EFC8B4",
+"Z.	c #CD8964",
+"`.	c #C87F58",
+" +	c #C3714A",
+".+	c #B4492D",
+"++	c #F7D4C7",
+"@+	c #CC815F",
+"#+	c #EFC8B5",
+"$+	c #F0CDBA",
+"%+	c #E3B49B",
+"&+	c #CD8B67",
+"*+	c #C77F59",
+"=+	c #FFFFFD",
+"-+	c #FFF8F0",
+";+	c #EFC9B5",
+">+	c #D29574",
+",+	c #F1D1BD",
+"'+	c #B3482C",
+")+	c #EDC3AF",
+"!+	c #EFCAB6",
+"~+	c #FFECDF",
+"{+	c #CE906B",
+"]+	c #C06C44",
+"^+	c #B3462B",
+"/+	c #EDC4B0",
+"(+	c #F0CAB6",
+"_+	c #FFF3EB",
+":+	c #FFF6EC",
+"<+	c #CF916D",
+"[+	c #B3452A",
+"}+	c #F0CCB8",
+"|+	c #FFF5EB",
+"1+	c #FFF6ED",
+"2+	c #C87F5A",
+"3+	c #B24429",
+"4+	c #EDC5B1",
+"5+	c #F0CCB9",
+"6+	c #B24329",
+"7+	c #FFEFE5",
+"8+	c #D49C7B",
+"9+	c #F3D4C3",
+"0+	c #B24227",
+"a+	c #FDE3D7",
+"b+	c #EDC9B3",
+"c+	c #E6BDA5",
+"d+	c #BD623C",
+"e+	c #B24126",
+"f+	c #F3D1C0",
+"g+	c #F0CEBB",
+"h+	c #D19472",
+"i+	c #BD613A",
+"j+	c #B14126",
+"k+	c #D49676",
+"l+	c #F1CFBB",
+"m+	c #F7DBCA",
+"n+	c #FDE7DA",
+"o+	c #D39C7C",
+"p+	c #C97F5C",
+"q+	c #B14025",
+"r+	c #E8BCA6",
+"s+	c #D59979",
+"t+	c #D9A182",
+"u+	c #E9C2AA",
+"v+	c #DAA789",
+"w+	c #BB5D37",
+"x+	c #B13F24",
+"y+	c #FFFAF2",
+"z+	c #DBA587",
+"A+	c #F2D2C0",
+"B+	c #F0D0BC",
+"C+	c #B03E23",
+"D+	c #CA825E",
+"E+	c #FADFD1",
+"F+	c #D89E7F",
+"G+	c #E8C0A8",
+"H+	c #FFFDF7",
+"I+	c #FDE8DB",
+"J+	c #D7A185",
+"K+	c #C97F5E",
+"L+	c #BA5834",
+"M+	c #B03C23",
+"N+	c #FBE2D3",
+"O+	c #F1D0BD",
+"P+	c #D7A486",
+"Q+	c #B03B22",
+"R+	c #CD8863",
+"S+	c #FFF2E8",
+"T+	c #F5D8C7",
+"U+	c #C97F5F",
+"V+	c #B95530",
+"W+	c #AF3A21",
+"X+	c #E6BAA2",
+"Y+	c #DEAF93",
+"Z+	c #D9A88C",
+"`+	c #C97E5F",
+" @	c #B8532F",
+".@	c #AC341D",
+"+@	c #E3B49A",
+"@@	c #F6D9C8",
+"#@	c #FFF7EE",
+"$@	c #EFCEBA",
+"%@	c #DAA687",
+"&@	c #C06848",
+"*@	c #B8502E",
+"=@	c #A92B18",
+"-@	c #D5A085",
+";@	c #B54A2A",
+">@	c #BE6141",
+",@	c #B84F2D",
+"'@	c #AC321C",
+")@	c #BF694A",
+"!@	c #B14024",
+"~@	c #C26D4D",
+"{@	c #A72413",
+"                                                                                                ",
+"                                                                                                ",
+"                                                                                                ",
+"                                                                                                ",
+"                    . . . . . . . . . . . . . . . . . . . . . . . . . . . .                     ",
+"                . . . + @ # # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ . . .                 ",
+"              . . } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r . .               ",
+"            . s t u 1 v w x y y z y A A A B C D E E F F E G G G G G H G I J K L M .             ",
+"          . . t u N O P Q R S T U V W X Y Z `  ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.. .           ",
+"          . } u N {.P Q R S T U V W X Y Z `  ...+.@.#.$.%.&.*.=.-.;.>.,.].^./.(._.:..           ",
+"        . . | 1 O P Q R S T U V W X Y Z `  ...+.@.#.$.%.&.*.=.-.;.>.,.].^.<.[.}.|.1.. .         ",
+"        . + 1 v P Q R S T U V W X Y Z 2.3.4.5.6.6.6.7.8.9.=.-.;.>.,.].^.<.[.0.}.a.b.c..         ",
+"        . @ 2 w Q R S T U V W X Y d.e.f.f.f.f.f.f.f.f.f.f.g.h.>.,.].^.<.[.0.}.a.b.0.i..         ",
+"        . # 3 x R S T U V W X j.k.f.f.f.f.f.f.f.f.f.f.f.f.f.f.l.].^.<.[.0.}.a.m.b.n.o..         ",
+"        . # 4 y S T U V W X j.p.f.f.f.f.f.f.q.q.q.r.f.f.f.f.f.f.s.<.[.0.}.a.m.|.b.t.u..         ",
+"        . $ 5 y T U V W X j.p.f.f.f.f.6.v.$.%.&.*.=.w.x.f.f.f.f.f.y.0.}.a.m.|.z.b.A.B..         ",
+"        . % 6 z U V W X Y C.f.f.f.f.D.#.$.%.&.*.=.-.;.>.E.s.f.f.f.f.F.a.m.|.z.).G.H.I..         ",
+"        . & 7 y V W X Y J.f.f.f.f.K.#.$.%.&.8.f.f.L.>.,.].^.M.f.f.f.f.N.|.z.).I }.;.O..         ",
+"        . * 8 A W X Y Z P.f.f.f.Q.#.$.%.&.*.f.f.f.R.,.].^.<.[.S.f.f.f.T.z.).I !.}.U.V..         ",
+"        . = 9 A X Y Z W.f.f.f.X.#.$.%.&.*.=.f.f.f.Y.].^.<.[.0.Z.f.f.f.f.).I !.K `. +.+.         ",
+"        . - 0 A Y Z ` ++f.f.f.@+$.%.&.*.=.-.f.f.f.#+^.<.[.0.}.a.$+f.f.f.%+!.K &+*+&..+.         ",
+"        . ; a B Z `  .=+f.f.-+$.%.&.*.=.-.;.f.f.f.;+<.[.0.}.a.m.>+f.f.f.,+K &+p *+%.'+.         ",
+"        . > b C `  ...f.f.f.)+%.&.*.=.-.;.>.f.f.f.!+[.0.}.a.m.|.z.f.f.f.~+&+p {+G.]+^+.         ",
+"        . , c D  ...+.f.f.f./+&.*.=.-.;.>.,.f.f.f.(+0.}.a.m.|.z.)._+f.f.:+p {+<+G.@.[+.         ",
+"        . ' d E ..+.@.f.f.f./+*.=.-.;.>.,.].f.f.f.}+}.a.m.|.z.).I |+f.f.1+{+<+k 2++.3+.         ",
+"        . ) e E +.@.#.f.f.f.4+=.-.;.>.,.].^.f.f.f.5+a.m.|.z.).I !.f.f.f.1+<+k i 2+ .6+.         ",
+"        . ! f F @.#.$.=+f.f.7+-.;.>.,.].^.<.f.f.f.$+m.|.z.).I !.8+f.f.f.9+k i h 2+` 0+.         ",
+"        . ~ g F #.$.%.a+f.f.f.h.>.,.].^.<.[.f.f.f.$+|.z.).I !.K b+f.f.f.c+i h f C d+e+.         ",
+"        . { h E $.%.&.8.f.f.f.f+,.].^.<.[.0.f.f.f.g+z.).I !.K h+f.f.f.f.i h f d C i+j+.         ",
+"        . ] i G %.&.*.=.f.f.f.f.k+^.<.[.0.}.f.f.f.l+).I !.K &+m+f.f.f.n+h f d o+p+W q+.         ",
+"        . ^ j G &.*.=.-.r+f.f.f.f.s+[.0.}.a.$+f.f.t+I !.K &+u+f.f.f.f.v+f d o+a A w+x+.         ",
+"        . / k G *.=.-.;.>.y+f.f.f.f.z+}.a.m.|.z.).I !.K &+A+f.f.f.f.B+f d o+a 9 z T C+.         ",
+"        . ( l G =.-.;.>.,.D+f.f.f.f.f.E+F+|.z.).I !.K G+H+f.f.f.f.I+f d o+a 9 J+K+L+M+.         ",
+"        . _ m G -.;.>.,.].^.s+f.f.f.f.f.f.f.N+O+O+|+f.f.f.f.f.f.I+f d o+a 9 J+P+z R Q+.         ",
+"        . : n H ;.>.,.].^.<.[.R+S+f.f.f.f.f.f.f.f.f.f.f.f.f.f.T+f d o+a 9 J+P+4 U+V+W+.         ",
+"        . < o G >.,.].^.<.[.0.}.a.X+f.f.f.f.f.f.f.f.f.f.f.7+Y+f d o+a 9 J+P+4 Z+`+ @.@.         ",
+"        . [ p I ,.].^.<.[.0.}.a.m.|.z.+@@@|+f.f.f.f.#@$@%@h f d o+a 9 J+P+4 Z+u &@*@=@.         ",
+"        . . q J '.^.<.[.0.}.a.m.|.z.).I !.K &+p {+<+k i h f d o+a 9 J+P+4 Z+u -@*@;@. .         ",
+"          . r K )./.[.0.}.a.m.|.z.).I !.K &+p {+<+k i h f d o+a 9 J+P+4 Z+u 3 >@,@'@.           ",
+"          . . )@!.(.}.}.a.m.|.z.).I !.K &+p {+<+k i h f d o+a 9 J+P+4 Z+u -@>@,@!@. .           ",
+"            . M ~@_.|.a.b.b.b.b.G.}.}.`.*+*+G.G.2+2+2+C C p+A z K+z U+`+&@*@,@!@{@.             ",
+"              . . :.1.b.0.n.t.A.H.;.U. +&.%.]+@.+. .` d+i+W w+T L+R V+ @*@;@'@. .               ",
+"                . . . c.i.o.u.B.I.O.V..+.+'+^+[+3+6+0+e+j+q+x+C+M+Q+W+.@=@. . .                 ",
+"                    . . . . . . . . . . . . . . . . . . . . . . . . . . . .                     ",
+"                                                                                                ",
+"                                                                                                ",
+"                                                                                                ",
+"                                                                                                "};
diff --git a/DCuhre/d07hre.f b/DCuhre/d07hre.f
new file mode 100644
index 0000000000000000000000000000000000000000..ec9de3814c73b8e2108d16550bdbfecabb6abc8b
--- /dev/null
+++ b/DCuhre/d07hre.f
@@ -0,0 +1,152 @@
+      SUBROUTINE D07HRE(NDIM,WTLENG,W,G,ERRCOF,RULPTS)
+C***BEGIN PROLOGUE D07HRE
+C***KEYWORDS basic integration rule, degree 7
+C***PURPOSE  To initialize a degree 7 basic rule, and null rules.
+C***AUTHOR   Alan Genz, Computer Science Department, Washington
+C            State University, Pullman, WA 99163-1210 USA
+C***LAST MODIFICATION 88-05-31
+C***DESCRIPTION  D07HRE initializes a degree 7 integration rule,
+C            two degree 5 null rules, one degree 3 null rule and one
+C            degree 1 null rule for the hypercube [-1,1]**NDIM.
+C
+C   ON ENTRY
+C
+C   NDIM   Integer.
+C          Number of variables.
+C   WTLENG Integer.
+C          The number of weights in each of the rules.
+C          WTLENG MUST be set equal to 6.
+C
+C   ON RETURN
+C   W      Real array of dimension (5,WTLENG).
+C          The weights for the basic and null rules.
+C          W(1,1),...,W(1,WTLENG) are weights for the basic rule.
+C          W(I,1),...,W(I,WTLENG), for I > 1 are null rule weights.
+C   G      Real array of dimension (NDIM, WTLENG).
+C          The fully symmetric sum generators for the rules.
+C          G(1, J), ..., G(NDIM, J) are the are the generators for the
+C          points associated with the Jth weights.
+C   ERRCOF Real array of dimension 6.
+C          Heuristic error coefficients that are used in the
+C          error estimation in BASRUL.
+C   RULPTS Real array of dimension WTLENG.
+C          A work array.
+C
+C***REFERENCES A. Genz and A. Malik,
+C             "An Imbedded Family of Fully Symmetric Numerical
+C              Integration Rules",
+C              SIAM J Numer. Anal. 20 (1983), pp. 580-588.
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE D07HRE
+C
+C   Global variables
+C
+      INTEGER NDIM,WTLENG
+      DOUBLE PRECISION W(5,WTLENG),G(NDIM,WTLENG),ERRCOF(6)
+      DOUBLE PRECISION RULPTS(WTLENG)
+C
+C   Local Variables
+C
+      DOUBLE PRECISION RATIO,LAM0,LAM1,LAM2,LAMP,TWONDM
+      INTEGER I,J
+C
+C***FIRST EXECUTABLE STATEMENT D07HRE
+C
+C
+C     Initialize generators, weights and RULPTS
+C
+      DO 30 J = 1,WTLENG
+          DO 10 I = 1,NDIM
+              G(I,J) = 0
+10        CONTINUE
+          DO 20 I = 1,5
+              W(I,J) = 0
+20        CONTINUE
+          RULPTS(J) = 2*NDIM
+30    CONTINUE
+      TWONDM = 2**NDIM
+      RULPTS(WTLENG) = TWONDM
+      RULPTS(WTLENG-1) = 2*NDIM* (NDIM-1)
+      RULPTS(1) = 1
+C
+C     Compute squared generator parameters
+C
+      LAM0 = 0.4707
+      LAMP = 0.5625
+      LAM1 = 4/ (15-5/LAM0)
+      RATIO = (1-LAM1/LAM0)/27
+      LAM2 = (5-7*LAM1-35*RATIO)/ (7-35*LAM1/3-35*RATIO/LAM0)
+C
+C     Compute degree 7 rule weights
+C
+      W(1,6) = 1/ (3*LAM0)**3/TWONDM
+      W(1,5) = (1-5*LAM0/3)/ (60* (LAM1-LAM0)*LAM1**2)
+      W(1,3) = (1-5*LAM2/3-5*TWONDM*W(1,6)*LAM0* (LAM0-LAM2))/
+     +         (10*LAM1* (LAM1-LAM2)) - 2* (NDIM-1)*W(1,5)
+      W(1,2) = (1-5*LAM1/3-5*TWONDM*W(1,6)*LAM0* (LAM0-LAM1))/
+     +         (10*LAM2* (LAM2-LAM1))
+C
+C     Compute weights for 2 degree 5, 1 degree 3 and 1 degree 1 rules
+C
+      W(2,6) = 1/ (36*LAM0**3)/TWONDM
+      W(2,5) = (1-9*TWONDM*W(2,6)*LAM0**2)/ (36*LAM1**2)
+      W(2,3) = (1-5*LAM2/3-5*TWONDM*W(2,6)*LAM0* (LAM0-LAM2))/
+     +         (10*LAM1* (LAM1-LAM2)) - 2* (NDIM-1)*W(2,5)
+      W(2,2) = (1-5*LAM1/3-5*TWONDM*W(2,6)*LAM0* (LAM0-LAM1))/
+     +         (10*LAM2* (LAM2-LAM1))
+      W(3,6) = 5/ (108*LAM0**3)/TWONDM
+      W(3,5) = (1-9*TWONDM*W(3,6)*LAM0**2)/ (36*LAM1**2)
+      W(3,3) = (1-5*LAMP/3-5*TWONDM*W(3,6)*LAM0* (LAM0-LAMP))/
+     +         (10*LAM1* (LAM1-LAMP)) - 2* (NDIM-1)*W(3,5)
+      W(3,4) = (1-5*LAM1/3-5*TWONDM*W(3,6)*LAM0* (LAM0-LAM1))/
+     +         (10*LAMP* (LAMP-LAM1))
+      W(4,6) = 1/ (54*LAM0**3)/TWONDM
+      W(4,5) = (1-18*TWONDM*W(4,6)*LAM0**2)/ (72*LAM1**2)
+      W(4,3) = (1-10*LAM2/3-10*TWONDM*W(4,6)*LAM0* (LAM0-LAM2))/
+     +         (20*LAM1* (LAM1-LAM2)) - 2* (NDIM-1)*W(4,5)
+      W(4,2) = (1-10*LAM1/3-10*TWONDM*W(4,6)*LAM0* (LAM0-LAM1))/
+     +         (20*LAM2* (LAM2-LAM1))
+C
+C     Set generator values
+C
+      LAM0 = SQRT(LAM0)
+      LAM1 = SQRT(LAM1)
+      LAM2 = SQRT(LAM2)
+      LAMP = SQRT(LAMP)
+      DO 40 I = 1,NDIM
+          G(I,WTLENG) = LAM0
+40    CONTINUE
+      G(1,WTLENG-1) = LAM1
+      G(2,WTLENG-1) = LAM1
+      G(1,WTLENG-4) = LAM2
+      G(1,WTLENG-3) = LAM1
+      G(1,WTLENG-2) = LAMP
+C
+C     Compute final weight values.
+C     The null rule weights are computed from differences between
+C     the degree 7 rule weights and lower degree rule weights.
+C
+      W(1,1) = TWONDM
+      DO 70 J = 2,5
+          DO 50 I = 2,WTLENG
+              W(J,I) = W(J,I) - W(1,I)
+              W(J,1) = W(J,1) - RULPTS(I)*W(J,I)
+50        CONTINUE
+70    CONTINUE
+      DO 80 I = 2,WTLENG
+          W(1,I) = TWONDM*W(1,I)
+          W(1,1) = W(1,1) - RULPTS(I)*W(1,I)
+80    CONTINUE
+C
+C     Set error coefficients
+C
+      ERRCOF(1) = 5
+      ERRCOF(2) = 5
+      ERRCOF(3) = 1
+      ERRCOF(4) = 5
+      ERRCOF(5) = 0.5
+      ERRCOF(6) = 0.25
+C
+C***END D07HRE
+C
+      END
diff --git a/DCuhre/d09hre.f b/DCuhre/d09hre.f
new file mode 100644
index 0000000000000000000000000000000000000000..47d27cc5438929f078ceecb4d35e26a586abd040
--- /dev/null
+++ b/DCuhre/d09hre.f
@@ -0,0 +1,208 @@
+      SUBROUTINE D09HRE(NDIM,WTLENG,W,G,ERRCOF,RULPTS)
+C***BEGIN PROLOGUE D09HRE
+C***KEYWORDS basic integration rule, degree 9
+C***PURPOSE  To initialize a degree 9 basic rule and null rules.
+C***AUTHOR   Alan Genz, Computer Science Department, Washington
+C            State University, Pullman, WA 99163-1210 USA
+C***LAST MODIFICATION 88-05-20
+C***DESCRIPTION  D09HRE initializes a degree 9 integration rule,
+C            two degree 7 null rules, one degree 5 null rule and one
+C            degree 3 null rule for the hypercube [-1,1]**NDIM.
+C
+C   ON ENTRY
+C
+C   NDIM   Integer.
+C          Number of variables.
+C   WTLENG Integer.
+C          The number of weights in each of the rules.
+C
+C   ON RETURN
+C   W      Real array of dimension (5,WTLENG).
+C          The weights for the basic and null rules.
+C          W(1,1),...,W(1,WTLENG) are weights for the basic rule.
+C          W(I,1),...,W(I,WTLENG), for I > 1 are null rule weights.
+C   G      Real array of dimension (NDIM, WTLENG).
+C          The fully symmetric sum generators for the rules.
+C          G(1, J), ..., G(NDIM, J) are the are the generators for the
+C          points associated with the Jth weights.
+C   ERRCOF Real array of dimension 6.
+C          Heuristic error coefficients that are used in the
+C          error estimation in BASRUL.
+C   RULPTS Real array of dimension WTLENG.
+C          A work array.
+C
+C***REFERENCES A. Genz and A. Malik,
+C             "An Imbedded Family of Fully Symmetric Numerical
+C              Integration Rules",
+C              SIAM J Numer. Anal. 20 (1983), pp. 580-588.
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE D09HRE
+C
+C   Global variables
+C
+      INTEGER NDIM,WTLENG
+      DOUBLE PRECISION W(5,WTLENG),G(NDIM,WTLENG),ERRCOF(6)
+      DOUBLE PRECISION RULPTS(WTLENG)
+C
+C   Local Variables
+C
+      DOUBLE PRECISION RATIO,LAM0,LAM1,LAM2,LAM3,LAMP,TWONDM
+      INTEGER I,J
+C
+C***FIRST EXECUTABLE STATEMENT D09HRE
+C
+C
+C     Initialize generators, weights and RULPTS
+C
+      DO 30 J = 1,WTLENG
+          DO 10 I = 1,NDIM
+              G(I,J) = 0
+10        CONTINUE
+          DO 20 I = 1,5
+              W(I,J) = 0
+20        CONTINUE
+          RULPTS(J) = 2*NDIM
+30    CONTINUE
+      TWONDM = 2**NDIM
+      RULPTS(WTLENG) = TWONDM
+      IF (NDIM.GT.2) RULPTS(8) = (4*NDIM* (NDIM-1)* (NDIM-2))/3
+      RULPTS(7) = 4*NDIM* (NDIM-1)
+      RULPTS(6) = 2*NDIM* (NDIM-1)
+      RULPTS(1) = 1
+C
+C     Compute squared generator parameters
+C
+      LAM0 = 0.4707
+      LAM1 = 4/ (15-5/LAM0)
+      RATIO = (1-LAM1/LAM0)/27
+      LAM2 = (5-7*LAM1-35*RATIO)/ (7-35*LAM1/3-35*RATIO/LAM0)
+      RATIO = RATIO* (1-LAM2/LAM0)/3
+      LAM3 = (7-9* (LAM2+LAM1)+63*LAM2*LAM1/5-63*RATIO)/
+     +       (9-63* (LAM2+LAM1)/5+21*LAM2*LAM1-63*RATIO/LAM0)
+      LAMP = 0.0625
+C
+C     Compute degree 9 rule weights
+C
+      W(1,WTLENG) = 1/ (3*LAM0)**4/TWONDM
+      IF (NDIM.GT.2) W(1,8) = (1-1/ (3*LAM0))/ (6*LAM1)**3
+      W(1,7) = (1-7* (LAM0+LAM1)/5+7*LAM0*LAM1/3)/
+     +         (84*LAM1*LAM2* (LAM2-LAM0)* (LAM2-LAM1))
+      W(1,6) = (1-7* (LAM0+LAM2)/5+7*LAM0*LAM2/3)/
+     +         (84*LAM1*LAM1* (LAM1-LAM0)* (LAM1-LAM2)) -
+     +         W(1,7)*LAM2/LAM1 - 2* (NDIM-2)*W(1,8)
+      W(1,4) = (1-9* ((LAM0+LAM1+LAM2)/7- (LAM0*LAM1+LAM0*LAM2+
+     +         LAM1*LAM2)/5)-3*LAM0*LAM1*LAM2)/
+     +         (18*LAM3* (LAM3-LAM0)* (LAM3-LAM1)* (LAM3-LAM2))
+      W(1,3) = (1-9* ((LAM0+LAM1+LAM3)/7- (LAM0*LAM1+LAM0*LAM3+
+     +         LAM1*LAM3)/5)-3*LAM0*LAM1*LAM3)/
+     +         (18*LAM2* (LAM2-LAM0)* (LAM2-LAM1)* (LAM2-LAM3)) -
+     +         2* (NDIM-1)*W(1,7)
+      W(1,2) = (1-9* ((LAM0+LAM2+LAM3)/7- (LAM0*LAM2+LAM0*LAM3+
+     +         LAM2*LAM3)/5)-3*LAM0*LAM2*LAM3)/
+     +         (18*LAM1* (LAM1-LAM0)* (LAM1-LAM2)* (LAM1-LAM3)) -
+     +         2* (NDIM-1)* (W(1,7)+W(1,6)+ (NDIM-2)*W(1,8))
+C
+C     Compute weights for 2 degree 7, 1 degree 5 and 1 degree 3 rules
+C
+      W(2,WTLENG) = 1/ (108*LAM0**4)/TWONDM
+      IF (NDIM.GT.2) W(2,8) = (1-27*TWONDM*W(2,9)*LAM0**3)/ (6*LAM1)**3
+      W(2,7) = (1-5*LAM1/3-15*TWONDM*W(2,WTLENG)*LAM0**2* (LAM0-LAM1))/
+     +          (60*LAM1*LAM2* (LAM2-LAM1))
+      W(2,6) = (1-9* (8*LAM1*LAM2*W(2,7)+TWONDM*W(2,WTLENG)*LAM0**2))/
+     +         (36*LAM1*LAM1) - 2*W(2,8)* (NDIM-2)
+      W(2,4) = (1-7* ((LAM1+LAM2)/5-LAM1*LAM2/3+TWONDM*W(2,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAM2)))/
+     +         (14*LAM3* (LAM3-LAM1)* (LAM3-LAM2))
+      W(2,3) = (1-7* ((LAM1+LAM3)/5-LAM1*LAM3/3+TWONDM*W(2,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAM3)))/
+     +         (14*LAM2* (LAM2-LAM1)* (LAM2-LAM3)) - 2* (NDIM-1)*W(2,7)
+      W(2,2) = (1-7* ((LAM2+LAM3)/5-LAM2*LAM3/3+TWONDM*W(2,
+     +         WTLENG)*LAM0* (LAM0-LAM2)* (LAM0-LAM3)))/
+     +         (14*LAM1* (LAM1-LAM2)* (LAM1-LAM3)) -
+     +         2* (NDIM-1)* (W(2,7)+W(2,6)+ (NDIM-2)*W(2,8))
+      W(3,WTLENG) = 5/ (324*LAM0**4)/TWONDM
+      IF (NDIM.GT.2) W(3,8) = (1-27*TWONDM*W(3,9)*LAM0**3)/ (6*LAM1)**3
+      W(3,7) = (1-5*LAM1/3-15*TWONDM*W(3,WTLENG)*LAM0**2* (LAM0-LAM1))/
+     +          (60*LAM1*LAM2* (LAM2-LAM1))
+      W(3,6) = (1-9* (8*LAM1*LAM2*W(3,7)+TWONDM*W(3,WTLENG)*LAM0**2))/
+     +         (36*LAM1*LAM1) - 2*W(3,8)* (NDIM-2)
+      W(3,5) = (1-7* ((LAM1+LAM2)/5-LAM1*LAM2/3+TWONDM*W(3,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAM2)))/
+     +         (14*LAMP* (LAMP-LAM1)* (LAMP-LAM2))
+      W(3,3) = (1-7* ((LAM1+LAMP)/5-LAM1*LAMP/3+TWONDM*W(3,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAMP)))/
+     +         (14*LAM2* (LAM2-LAM1)* (LAM2-LAMP)) - 2* (NDIM-1)*W(3,7)
+      W(3,2) = (1-7* ((LAM2+LAMP)/5-LAM2*LAMP/3+TWONDM*W(3,
+     +         WTLENG)*LAM0* (LAM0-LAM2)* (LAM0-LAMP)))/
+     +         (14*LAM1* (LAM1-LAM2)* (LAM1-LAMP)) -
+     +         2* (NDIM-1)* (W(3,7)+W(3,6)+ (NDIM-2)*W(3,8))
+      W(4,WTLENG) = 2/ (81*LAM0**4)/TWONDM
+      IF (NDIM.GT.2) W(4,8) = (2-27*TWONDM*W(4,9)*LAM0**3)/ (6*LAM1)**3
+      W(4,7) = (2-15*LAM1/9-15*TWONDM*W(4,WTLENG)*LAM0* (LAM0-LAM1))/
+     +         (60*LAM1*LAM2* (LAM2-LAM1))
+      W(4,6) = (1-9* (8*LAM1*LAM2*W(4,7)+TWONDM*W(4,WTLENG)*LAM0**2))/
+     +         (36*LAM1*LAM1) - 2*W(4,8)* (NDIM-2)
+      W(4,4) = (2-7* ((LAM1+LAM2)/5-LAM1*LAM2/3+TWONDM*W(4,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAM2)))/
+     +         (14*LAM3* (LAM3-LAM1)* (LAM3-LAM2))
+      W(4,3) = (2-7* ((LAM1+LAM3)/5-LAM1*LAM3/3+TWONDM*W(4,
+     +         WTLENG)*LAM0* (LAM0-LAM1)* (LAM0-LAM3)))/
+     +         (14*LAM2* (LAM2-LAM1)* (LAM2-LAM3)) - 2* (NDIM-1)*W(4,7)
+      W(4,2) = (2-7* ((LAM2+LAM3)/5-LAM2*LAM3/3+TWONDM*W(4,
+     +         WTLENG)*LAM0* (LAM0-LAM2)* (LAM0-LAM3)))/
+     +         (14*LAM1* (LAM1-LAM2)* (LAM1-LAM3)) -
+     +         2* (NDIM-1)* (W(4,7)+W(4,6)+ (NDIM-2)*W(4,8))
+      W(5,2) = 1/ (6*LAM1)
+C
+C     Set generator values
+C
+      LAM0 = SQRT(LAM0)
+      LAM1 = SQRT(LAM1)
+      LAM2 = SQRT(LAM2)
+      LAM3 = SQRT(LAM3)
+      LAMP = SQRT(LAMP)
+      DO 40 I = 1,NDIM
+          G(I,WTLENG) = LAM0
+40    CONTINUE
+      IF (NDIM.GT.2) THEN
+          G(1,8) = LAM1
+          G(2,8) = LAM1
+          G(3,8) = LAM1
+      END IF
+      G(1,7) = LAM1
+      G(2,7) = LAM2
+      G(1,6) = LAM1
+      G(2,6) = LAM1
+      G(1,5) = LAMP
+      G(1,4) = LAM3
+      G(1,3) = LAM2
+      G(1,2) = LAM1
+C
+C     Compute final weight values.
+C     The null rule weights are computed from differences between
+C     the degree 9 rule weights and lower degree rule weights.
+C
+      W(1,1) = TWONDM
+      DO 70 J = 2,5
+          DO 50 I = 2,WTLENG
+              W(J,I) = W(J,I) - W(1,I)
+              W(J,1) = W(J,1) - RULPTS(I)*W(J,I)
+50        CONTINUE
+70    CONTINUE
+      DO 80 I = 2,WTLENG
+          W(1,I) = TWONDM*W(1,I)
+          W(1,1) = W(1,1) - RULPTS(I)*W(1,I)
+80    CONTINUE
+C
+C     Set error coefficients
+C
+      ERRCOF(1) = 5
+      ERRCOF(2) = 5
+      ERRCOF(3) = 1.
+      ERRCOF(4) = 5
+      ERRCOF(5) = 0.5
+      ERRCOF(6) = 0.25
+C
+C***END D09HRE
+C
+      END
diff --git a/DCuhre/d113re.f b/DCuhre/d113re.f
new file mode 100644
index 0000000000000000000000000000000000000000..3240bcf756378041868d91c9d615f3035f92727e
--- /dev/null
+++ b/DCuhre/d113re.f
@@ -0,0 +1,179 @@
+      SUBROUTINE D113RE(WTLENG,W,G,ERRCOF,RULPTS)
+C***BEGIN PROLOGUE D113RE
+C***AUTHOR   Jarle Berntsen, EDB-senteret,
+C            University of Bergen, Thormohlens gt. 55,
+C            N-5008 Bergen, NORWAY
+C***PURPOSE D113RE computes abscissas and weights of a 3 dimensional
+C            integration rule of degree 11.
+C            Two null rules of degree 9, one null rule of degree 7
+C            and one null rule of degree 5 to be used in error
+C            estimation are also computed.
+C***DESCRIPTION D113RE will select the correct values of the abscissas
+C            and corresponding weights for different
+C            integration rules and null rules and assign them to G
+C            and W.
+C            The heuristic error coefficients ERRCOF
+C            will also be computed.
+C
+C
+C   ON ENTRY
+C
+C     WTLENG Integer.
+C            The number of weights in each of the rules.
+C
+C   ON RETURN
+C
+C     W      Real array of dimension (5,WTLENG).
+C            The weights for the basic and null rules.
+C            W(1,1),...,W(1,WTLENG) are weights for the basic rule.
+C            W(I,1),...,W(I,WTLENG), for I > 1 are null rule weights.
+C     G      Real array of dimension (NDIM,WTLENG).
+C            The fully symmetric sum generators for the rules.
+C            G(1,J),...,G(NDIM,J) are the generators for the points
+C            associated with the the Jth weights.
+C     ERRCOF Real array of dimension 6.
+C            Heuristic error coefficients that are used in the
+C            error estimation in BASRUL.
+C     RULPTS Real array of dimension WTLENG.
+C            The number of points used by each generator.
+C
+C***REFERENCES  J.Berntsen, Cautious adaptive numerical integration
+C               over the 3-cube, Reports in Informatics 17, Dept. of
+C               Inf.,Univ. of Bergen, Norway, 1985.
+C               J.Berntsen and T.O.Espelid, On the construction of
+C               higher degree three-dimensional embedded integration
+C               rules, SIAM J. Numer. Anal.,Vol. 25,No. 1, pp.222-234,
+C               1988.
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE D113RE
+C
+C   Global variables.
+C
+      INTEGER WTLENG
+      DOUBLE PRECISION W(5,WTLENG),G(3,WTLENG),ERRCOF(6)
+      DOUBLE PRECISION RULPTS(WTLENG)
+C
+C   Local variables.
+C
+      INTEGER I,J
+      DOUBLE PRECISION DIM3G(14)
+      DOUBLE PRECISION DIM3W(13,5)
+C
+      DATA (DIM3G(I),I=1,14)/0.1900000000000000D+00,
+     +     0.5000000000000000D+00,0.7500000000000000D+00,
+     +     0.8000000000000000D+00,0.9949999999999999D+00,
+     +     0.9987344998351400D+00,0.7793703685672423D+00,
+     +     0.9999698993088767D+00,0.7902637224771788D+00,
+     +     0.4403396687650737D+00,0.4378478459006862D+00,
+     +     0.9549373822794593D+00,0.9661093133630748D+00,
+     +     0.4577105877763134D+00/
+C
+      DATA (DIM3W(I,1),I=1,13)/0.7923078151105734D-02,
+     +     0.6797177392788080D-01,0.1086986538805825D-02,
+     +     0.1838633662212829D+00,0.3362119777829031D-01,
+     +     0.1013751123334062D-01,0.1687648683985235D-02,
+     +     0.1346468564512807D+00,0.1750145884600386D-02,
+     +     0.7752336383837454D-01,0.2461864902770251D+00,
+     +     0.6797944868483039D-01,0.1419962823300713D-01/
+C
+      DATA (DIM3W(I,2),I=1,13)/0.1715006248224684D+01,
+     +     - .3755893815889209D+00,0.1488632145140549D+00,
+     +     - .2497046640620823D+00,0.1792501419135204D+00,
+     +     0.3446126758973890D-02, - .5140483185555825D-02,
+     +     0.6536017839876425D-02, - .6513454939229700D-03,
+     +     - .6304672433547204D-02,0.1266959399788263D-01,
+     +     - .5454241018647931D-02,0.4826995274768427D-02/
+C
+      DATA (DIM3W(I,3),I=1,13)/0.1936014978949526D+01,
+     +     - .3673449403754268D+00,0.2929778657898176D-01,
+     +     - .1151883520260315D+00,0.5086658220872218D-01,
+     +     0.4453911087786469D-01, - .2287828257125900D-01,
+     +     0.2908926216345833D-01, - .2898884350669207D-02,
+     +     - .2805963413307495D-01,0.5638741361145884D-01,
+     +     - .2427469611942451D-01,0.2148307034182882D-01/
+C
+      DATA (DIM3W(I,4),I=1,13)/0.5170828195605760D+00,
+     +     0.1445269144914044D-01, - .3601489663995932D+00,
+     +     0.3628307003418485D+00,0.7148802650872729D-02,
+     +     - .9222852896022966D-01,0.1719339732471725D-01,
+     +     - .1021416537460350D+00, - .7504397861080493D-02,
+     +     0.1648362537726711D-01,0.5234610158469334D-01,
+     +     0.1445432331613066D-01,0.3019236275367777D-02/
+C
+      DATA (DIM3W(I,5),I=1,13)/0.2054404503818520D+01,
+     +     0.1377759988490120D-01, - .5768062917904410D+00,
+     +     0.3726835047700328D-01,0.6814878939777219D-02,
+     +     0.5723169733851849D-01, - .4493018743811285D-01,
+     +     0.2729236573866348D-01,0.3547473950556990D-03,
+     +     0.1571366799739551D-01,0.4990099219278567D-01,
+     +     0.1377915552666770D-01,0.2878206423099872D-02/
+C
+C***FIRST EXECUTABLE STATEMENT D113RE
+C
+C   Assign values to W.
+C
+      DO 10 I = 1,13
+          DO 10 J = 1,5
+              W(J,I) = DIM3W(I,J)
+10    CONTINUE
+C
+C   Assign values to G.
+C
+      DO 20 I = 1,3
+          DO 20 J = 1,13
+              G(I,J) = 0
+20    CONTINUE
+      G(1,2) = DIM3G(1)
+      G(1,3) = DIM3G(2)
+      G(1,4) = DIM3G(3)
+      G(1,5) = DIM3G(4)
+      G(1,6) = DIM3G(5)
+      G(1,7) = DIM3G(6)
+      G(2,7) = G(1,7)
+      G(1,8) = DIM3G(7)
+      G(2,8) = G(1,8)
+      G(1,9) = DIM3G(8)
+      G(2,9) = G(1,9)
+      G(3,9) = G(1,9)
+      G(1,10) = DIM3G(9)
+      G(2,10) = G(1,10)
+      G(3,10) = G(1,10)
+      G(1,11) = DIM3G(10)
+      G(2,11) = G(1,11)
+      G(3,11) = G(1,11)
+      G(1,12) = DIM3G(12)
+      G(2,12) = DIM3G(11)
+      G(3,12) = G(2,12)
+      G(1,13) = DIM3G(13)
+      G(2,13) = G(1,13)
+      G(3,13) = DIM3G(14)
+C
+C   Assign values to RULPTS.
+C
+      RULPTS(1) = 1
+      RULPTS(2) = 6
+      RULPTS(3) = 6
+      RULPTS(4) = 6
+      RULPTS(5) = 6
+      RULPTS(6) = 6
+      RULPTS(7) = 12
+      RULPTS(8) = 12
+      RULPTS(9) = 8
+      RULPTS(10) = 8
+      RULPTS(11) = 8
+      RULPTS(12) = 24
+      RULPTS(13) = 24
+C
+C   Assign values to ERRCOF.
+C
+      ERRCOF(1) = 4
+      ERRCOF(2) = 4.
+      ERRCOF(3) = 0.5
+      ERRCOF(4) = 3.
+      ERRCOF(5) = 0.5
+      ERRCOF(6) = 0.25
+C
+C***END D113RE
+C
+      RETURN
+      END
diff --git a/DCuhre/d132re.f b/DCuhre/d132re.f
new file mode 100644
index 0000000000000000000000000000000000000000..c6d436b227bf1de3d291e852be69510355191dd3
--- /dev/null
+++ b/DCuhre/d132re.f
@@ -0,0 +1,171 @@
+      SUBROUTINE D132RE(WTLENG,W,G,ERRCOF,RULPTS)
+C***BEGIN PROLOGUE D132RE
+C***AUTHOR   Jarle Berntsen, EDB-senteret,
+C            University of Bergen, Thormohlens gt. 55,
+C            N-5008 Bergen, NORWAY
+C***PURPOSE D132RE computes abscissas and weights of a 2 dimensional
+C            integration rule of degree 13.
+C            Two null rules of degree 11, one null rule of degree 9
+C            and one null rule of degree 7 to be used in error
+C            estimation are also computed.
+C ***DESCRIPTION D132RE will select the correct values of the abscissas
+C            and corresponding weights for different
+C            integration rules and null rules and assign them to
+C            G and W. The heuristic error coefficients ERRCOF
+C            will also be assigned.
+C
+C
+C   ON ENTRY
+C
+C     WTLENG Integer.
+C            The number of weights in each of the rules.
+C
+C   ON RETURN
+C
+C     W      Real array of dimension (5,WTLENG).
+C            The weights for the basic and null rules.
+C            W(1,1),...,W(1,WTLENG) are weights for the basic rule.
+C            W(I,1),...,W(I,WTLENG), for I > 1 are null rule weights.
+C     G      Real array of dimension (NDIM,WTLENG).
+C            The fully symmetric sum generators for the rules.
+C            G(1,J),...,G(NDIM,J) are the generators for the points
+C            associated with the the Jth weights.
+C     ERRCOF Real array of dimension 6.
+C            Heuristic error coefficients that are used in the
+C            error estimation in BASRUL.
+C     RULPTS Real array of dimension WTLENG.
+C            The number of points produced by each generator.
+C***REFERENCES S.Eriksen,
+C              Thesis of the degree cand.scient, Dept. of Informatics,
+C              Univ. of Bergen,Norway, 1984.
+C
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE D132RE
+C
+C   Global variables
+C
+      INTEGER WTLENG
+      DOUBLE PRECISION W(5,WTLENG),G(2,WTLENG),ERRCOF(6)
+      DOUBLE PRECISION RULPTS(WTLENG)
+C
+C   Local variables.
+C
+      INTEGER I,J
+      DOUBLE PRECISION DIM2G(16)
+      DOUBLE PRECISION DIM2W(14,5)
+C
+      DATA (DIM2G(I),I=1,16)/0.2517129343453109D+00,
+     +     0.7013933644534266D+00,0.9590960631619962D+00,
+     +     0.9956010478552127D+00,0.5000000000000000D+00,
+     +     0.1594544658297559D+00,0.3808991135940188D+00,
+     +     0.6582769255267192D+00,0.8761473165029315D+00,
+     +     0.9982431840531980D+00,0.9790222658168462D+00,
+     +     0.6492284325645389D+00,0.8727421201131239D+00,
+     +     0.3582614645881228D+00,0.5666666666666666D+00,
+     +     0.2077777777777778D+00/
+C
+      DATA (DIM2W(I,1),I=1,14)/0.3379692360134460D-01,
+     +     0.9508589607597761D-01,0.1176006468056962D+00,
+     +     0.2657774586326950D-01,0.1701441770200640D-01,
+     +     0.0000000000000000D+00,0.1626593098637410D-01,
+     +     0.1344892658526199D+00,0.1328032165460149D+00,
+     +     0.5637474769991870D-01,0.3908279081310500D-02,
+     +     0.3012798777432150D-01,0.1030873234689166D+00,
+     +     0.6250000000000000D-01/
+C
+      DATA (DIM2W(I,2),I=1,14)/0.3213775489050763D+00,
+     +     - .1767341636743844D+00,0.7347600537466072D-01,
+     +     - .3638022004364754D-01,0.2125297922098712D-01,
+     +     0.1460984204026913D+00,0.1747613286152099D-01,
+     +     0.1444954045641582D+00,0.1307687976001325D-03,
+     +     0.5380992313941161D-03,0.1042259576889814D-03,
+     +     - .1401152865045733D-02,0.8041788181514763D-02,
+     +     - .1420416552759383D+00/
+C
+      DATA (DIM2W(I,3),I=1,14)/0.3372900883288987D+00,
+     +     - .1644903060344491D+00,0.7707849911634622D-01,
+     +     - .3804478358506310D-01,0.2223559940380806D-01,
+     +     0.1480693879765931D+00,0.4467143702185814D-05,
+     +     0.1508944767074130D+00,0.3647200107516215D-04,
+     +     0.5777198999013880D-03,0.1041757313688177D-03,
+     +     - .1452822267047819D-02,0.8338339968783705D-02,
+     +     - .1472796329231960D+00/
+C
+      DATA (DIM2W(I,4),I=1,14)/ - .8264123822525677D+00,
+     +     0.3065838614094360D+00,0.2389292538329435D-02,
+     +     - .1343024157997222D+00,0.8833366840533900D-01,
+     +     0.0000000000000000D+00,0.9786283074168292D-03,
+     +     - .1319227889147519D+00,0.7990012200150630D-02,
+     +     0.3391747079760626D-02,0.2294915718283264D-02,
+     +     - .1358584986119197D-01,0.4025866859057809D-01,
+     +     0.3760268580063992D-02/
+C
+      DATA (DIM2W(I,5),I=1,14)/0.6539094339575232D+00,
+     +     - .2041614154424632D+00, - .1746981515794990D+00,
+     +     0.3937939671417803D-01,0.6974520545933992D-02,
+     +     0.0000000000000000D+00,0.6667702171778258D-02,
+     +     0.5512960621544304D-01,0.5443846381278607D-01,
+     +     0.2310903863953934D-01,0.1506937747477189D-01,
+     +     - .6057021648901890D-01,0.4225737654686337D-01,
+     +     0.2561989142123099D-01/
+C
+C***FIRST EXECUTABLE STATEMENT D132RE
+C
+C   Assign values to W.
+C
+      DO 10 I = 1,14
+          DO 10 J = 1,5
+              W(J,I) = DIM2W(I,J)
+10    CONTINUE
+C
+C   Assign values to G.
+C
+      DO 20 I = 1,2
+          DO 20 J = 1,14
+              G(I,J) = 0
+20    CONTINUE
+      G(1,2) = DIM2G(1)
+      G(1,3) = DIM2G(2)
+      G(1,4) = DIM2G(3)
+      G(1,5) = DIM2G(4)
+      G(1,6) = DIM2G(5)
+      G(1,7) = DIM2G(6)
+      G(2,7) = G(1,7)
+      G(1,8) = DIM2G(7)
+      G(2,8) = G(1,8)
+      G(1,9) = DIM2G(8)
+      G(2,9) = G(1,9)
+      G(1,10) = DIM2G(9)
+      G(2,10) = G(1,10)
+      G(1,11) = DIM2G(10)
+      G(2,11) = G(1,11)
+      G(1,12) = DIM2G(11)
+      G(2,12) = DIM2G(12)
+      G(1,13) = DIM2G(13)
+      G(2,13) = DIM2G(14)
+      G(1,14) = DIM2G(15)
+      G(2,14) = DIM2G(16)
+C
+C   Assign values to RULPTS.
+C
+      RULPTS(1) = 1
+      DO 30 I = 2,11
+          RULPTS(I) = 4
+30    CONTINUE
+      RULPTS(12) = 8
+      RULPTS(13) = 8
+      RULPTS(14) = 8
+C
+C   Assign values to ERRCOF.
+C
+      ERRCOF(1) = 10
+      ERRCOF(2) = 10
+      ERRCOF(3) = 1.
+      ERRCOF(4) = 5.
+      ERRCOF(5) = 0.5
+      ERRCOF(6) = 0.25
+C
+C***END D132RE
+C
+      RETURN
+      END
diff --git a/DCuhre/dadhre.f b/DCuhre/dadhre.f
new file mode 100644
index 0000000000000000000000000000000000000000..277b049992ec981059ad12c5cc82576a487e6a75
--- /dev/null
+++ b/DCuhre/dadhre.f
@@ -0,0 +1,453 @@
+      SUBROUTINE DADHRE(NDIM,NUMFUN,MDIV,A,B,MINSUB,MAXSUB,FUNSUB,
+     +                  EPSABS,EPSREL,KEY,RESTAR,NUM,LENW,WTLENG,
+     +                  RESULT,ABSERR,NEVAL,NSUB,IFAIL,VALUES,
+     +                  ERRORS,CENTRS,HWIDTS,GREATE,DIR,OLDRES,WORK,G,W,
+     +                  RULPTS,CENTER,HWIDTH,X,SCALES,NORMS)
+C***BEGIN PROLOGUE DADHRE
+C***KEYWORDS automatic multidimensional integrator,
+C            n-dimensional hyper-rectangles,
+C            general purpose, global adaptive
+C***PURPOSE  The routine calculates an approximation to a given
+C            vector of definite integrals, I, over a hyper-rectangular
+C            region hopefully satisfying for each component of I the
+C            following claim for accuracy:
+C            ABS(I(K)-RESULT(K)).LE.MAX(EPSABS,EPSREL*ABS(I(K)))
+C***DESCRIPTION Computation of integrals over hyper-rectangular
+C            regions.
+C            DADHRE repeatedly subdivides the region
+C            of integration and estimates the integrals and the
+C            errors over the subregions with  greatest
+C            estimated errors until the error request
+C            is met or MAXSUB subregions are stored.
+C            The regions are divided in two equally sized parts along
+C            the direction with greatest absolute fourth divided
+C            difference.
+C
+C   ON ENTRY
+C
+C     NDIM   Integer.
+C            Number of variables. 1 < NDIM <= MAXDIM.
+C     NUMFUN Integer.
+C            Number of components of the integral.
+C     MDIV   Integer.
+C            Defines the number of new subregions that are divided
+C            in each subdivision step.
+C     A      Real array of dimension NDIM.
+C            Lower limits of integration.
+C     B      Real array of dimension NDIM.
+C            Upper limits of integration.
+C     MINSUB Integer.
+C            The computations proceed until there are at least
+C            MINSUB subregions in the data structure.
+C     MAXSUB Integer.
+C            The computations proceed until there are at most
+C            MAXSUB subregions in the data structure.
+C
+C     FUNSUB Externally declared subroutine for computing
+C            all components of the integrand in the given
+C            evaluation point.
+C            It must have parameters (NDIM,X,NUMFUN,FUNVLS)
+C            Input parameters:
+C              NDIM   Integer that defines the dimension of the
+C                     integral.
+C              X      Real array of dimension NDIM
+C                     that defines the evaluation point.
+C              NUMFUN Integer that defines the number of
+C                     components of I.
+C            Output parameter:
+C              FUNVLS Real array of dimension NUMFUN
+C                     that defines NUMFUN components of the integrand.
+C
+C     EPSABS Real.
+C            Requested absolute error.
+C     EPSREL Real.
+C            Requested relative error.
+C     KEY    Integer.
+C            Key to selected local integration rule.
+C            KEY = 0 is the default value.
+C                  For NDIM = 2 the degree 13 rule is selected.
+C                  For NDIM = 3 the degree 11 rule is selected.
+C                  For NDIM > 3 the degree  9 rule is selected.
+C            KEY = 1 gives the user the 2 dimensional degree 13
+C                  integration rule that uses 65 evaluation points.
+C            KEY = 2 gives the user the 3 dimensional degree 11
+C                  integration rule that uses 127 evaluation points.
+C            KEY = 3 gives the user the degree 9 integration rule.
+C            KEY = 4 gives the user the degree 7 integration rule.
+C                  This is the recommended rule for problems that
+C                  require great adaptivity.
+C     RESTAR Integer.
+C            If RESTAR = 0, this is the first attempt to compute
+C            the integral.
+C            If RESTAR = 1, then we restart a previous attempt.
+C            (In this case the output parameters from DADHRE
+C            must not be changed since the last
+C            exit from DADHRE.)
+C     NUM    Integer.
+C            The number of function evaluations over each subregion.
+C     LENW   Integer.
+C            Defines the length of the working array WORK.
+C            LENW should be greater or equal to
+C            16*MDIV*NUMFUN.
+C     WTLENG Integer.
+C            The number of weights in the basic integration rule.
+C     NSUB   Integer.
+C            If RESTAR = 1, then NSUB must specify the number
+C            of subregions stored in the previous call to DADHRE.
+C
+C   ON RETURN
+C
+C     RESULT Real array of dimension NUMFUN.
+C            Approximations to all components of the integral.
+C     ABSERR Real array of dimension NUMFUN.
+C            Estimates of absolute accuracies.
+C     NEVAL  Integer.
+C            Number of function evaluations used by DADHRE.
+C     NSUB   Integer.
+C            Number of stored subregions.
+C     IFAIL  Integer.
+C            IFAIL = 0 for normal exit, when ABSERR(K) <=  EPSABS or
+C              ABSERR(K) <=  ABS(RESULT(K))*EPSREL with MAXSUB or less
+C              subregions processed for all values of K,
+C              1 <=  K <=  NUMFUN.
+C            IFAIL = 1 if MAXSUB was too small for DADHRE
+C              to obtain the required accuracy. In this case DADHRE
+C              returns values of RESULT with estimated absolute
+C              accuracies ABSERR.
+C     VALUES Real array of dimension (NUMFUN,MAXSUB).
+C            Used to store estimated values of the integrals
+C            over the subregions.
+C     ERRORS Real array of dimension (NUMFUN,MAXSUB).
+C            Used to store the corresponding estimated errors.
+C     CENTRS Real array of dimension (NDIM,MAXSUB).
+C            Used to store the centers of the stored subregions.
+C     HWIDTS Real array of dimension (NDIM,MAXSUB).
+C            Used to store the half widths of the stored subregions.
+C     GREATE Real array of dimension MAXSUB.
+C            Used to store the greatest estimated errors in
+C            all subregions.
+C     DIR    Real array of dimension MAXSUB.
+C            DIR is used to store the directions for
+C            further subdivision.
+C     OLDRES Real array of dimension (NUMFUN,MDIV).
+C            Used to store old estimates of the integrals over the
+C            subregions.
+C     WORK   Real array of dimension LENW.
+C            Used  in DRLHRE and DTRHRE.
+C     G      Real array of dimension (NDIM,WTLENG,2*MDIV).
+C            The fully symmetric sum generators for the rules.
+C            G(1,J,1),...,G(NDIM,J,1) are the generators for the
+C            points associated with the Jth weights.
+C            When MDIV subregions are divided in 2*MDIV
+C            subregions, the subregions may be processed on different
+C            processors and we must make a copy of the generators
+C            for each processor.
+C     W      Real array of dimension (5,WTLENG).
+C            The weights for the basic and null rules.
+C            W(1,1), ..., W(1,WTLENG) are weights for the basic rule.
+C            W(I,1), ..., W(I,WTLENG) , for I > 1 are null rule weights.
+C     RULPTS Real array of dimension WTLENG.
+C            Work array used in DINHRE.
+C     CENTER Real array of dimension NDIM.
+C            Work array used in DTRHRE.
+C     HWIDTH Real array of dimension NDIM.
+C            Work array used in DTRHRE.
+C     X      Real array of dimension (NDIM,2*MDIV).
+C            Work array used in DRLHRE.
+C     SCALES Real array of dimension (3,WTLENG).
+C            Work array used by DINHRE and DRLHRE.
+C     NORMS  Real array of dimension (3,WTLENG).
+C            Work array used by DINHRE and DRLHRE.
+C
+C***REFERENCES
+C
+C   P. van Dooren and L. de Ridder, Algorithm 6, An adaptive algorithm
+C   for numerical integration over an n-dimensional cube, J.Comput.Appl.
+C   Math. 2(1976)207-217.
+C
+C   A.C.Genz and A.A.Malik, Algorithm 019. Remarks on algorithm 006:
+C   An adaptive algorithm for numerical integration over an
+C   N-dimensional rectangular region,J.Comput.Appl.Math. 6(1980)295-302.
+C
+C***ROUTINES CALLED DTRHRE,DINHRE,DRLHRE
+C***END PROLOGUE DADHRE
+C
+C   Global variables.
+C
+      EXTERNAL FUNSUB
+      INTEGER NDIM,NUMFUN,MDIV,MINSUB,MAXSUB,KEY,LENW,RESTAR
+      INTEGER NUM,NEVAL,NSUB,IFAIL,WTLENG
+      DOUBLE PRECISION A(NDIM),B(NDIM),EPSABS,EPSREL
+      DOUBLE PRECISION RESULT(NUMFUN),ABSERR(NUMFUN)
+      DOUBLE PRECISION VALUES(NUMFUN,MAXSUB),ERRORS(NUMFUN,MAXSUB)
+      DOUBLE PRECISION CENTRS(NDIM,MAXSUB)
+      DOUBLE PRECISION HWIDTS(NDIM,MAXSUB)
+      DOUBLE PRECISION GREATE(MAXSUB),DIR(MAXSUB)
+      DOUBLE PRECISION OLDRES(NUMFUN,MDIV)
+      DOUBLE PRECISION WORK(LENW),RULPTS(WTLENG)
+      DOUBLE PRECISION G(NDIM,WTLENG,2*MDIV),W(5,WTLENG)
+      DOUBLE PRECISION CENTER(NDIM),HWIDTH(NDIM),X(NDIM,2*MDIV)
+      DOUBLE PRECISION SCALES(3,WTLENG),NORMS(3,WTLENG)
+C
+C   Local variables.
+C
+C   INTSGN is used to get correct sign on the integral.
+C   SBRGNS is the number of stored subregions.
+C   NDIV   The number of subregions to be divided in each main step.
+C   POINTR Pointer to the position in the data structure where
+C          the new subregions are to be stored.
+C   DIRECT Direction of subdivision.
+C   ERRCOF Heuristic error coeff. defined in DINHRE and used by DRLHRE
+C          and DADHRE.
+C
+      INTEGER I,J,K
+      INTEGER INTSGN,SBRGNS
+      INTEGER L1
+      INTEGER NDIV,POINTR,DIRECT,INDEX
+      DOUBLE PRECISION OLDCEN,EST1,EST2,ERRCOF(6)
+C
+C***FIRST EXECUTABLE STATEMENT DADHRE
+C
+C   Get the correct sign on the integral.
+C
+      INTSGN = 1
+      DO 10 J = 1,NDIM
+          IF (B(J).LT.A(J)) THEN
+              INTSGN = - INTSGN
+          END IF
+10    CONTINUE
+C
+C   Call DINHRE to compute the weights and abscissas of
+C   the function evaluation points.
+C
+      CALL DINHRE(NDIM,KEY,WTLENG,W,G,ERRCOF,RULPTS,SCALES,NORMS)
+C
+C   If RESTAR = 1, then this is a restart run.
+C
+      IF (RESTAR.EQ.1) THEN
+          SBRGNS = NSUB
+          GO TO 110
+      END IF
+C
+C   Initialize the SBRGNS, CENTRS and HWIDTS.
+C
+      SBRGNS = 1
+      DO 15 J = 1,NDIM
+          CENTRS(J,1) = (A(J)+B(J))/2
+          HWIDTS(J,1) = ABS(B(J)-A(J))/2
+15    CONTINUE
+C
+C   Initialize RESULT, ABSERR and NEVAL.
+C
+      DO 20 J = 1,NUMFUN
+          RESULT(J) = 0
+          ABSERR(J) = 0
+20    CONTINUE
+      NEVAL = 0
+C
+C   Apply DRLHRE over the whole region.
+C
+      CALL DRLHRE(NDIM,CENTRS(1,1),HWIDTS(1,1),WTLENG,G,W,ERRCOF,NUMFUN,
+     +            FUNSUB,SCALES,NORMS,X,WORK,VALUES(1,1),ERRORS(1,1),
+     +            DIR(1))
+      NEVAL = NEVAL + NUM
+C
+C   Add the computed values to RESULT and ABSERR.
+C
+      DO 55 J = 1,NUMFUN
+          RESULT(J) = RESULT(J) + VALUES(J,1)
+55    CONTINUE
+      DO 65 J = 1,NUMFUN
+          ABSERR(J) = ABSERR(J) + ERRORS(J,1)
+65    CONTINUE
+C
+C   Store results in heap.
+C
+      INDEX = 1
+      CALL DTRHRE(2,NDIM,NUMFUN,INDEX,VALUES,ERRORS,CENTRS,HWIDTS,
+     +            GREATE,WORK(1),WORK(NUMFUN+1),CENTER,HWIDTH,DIR)
+C
+C***End initialisation.
+C
+C***Begin loop while the error is too great,
+C   and SBRGNS+1 is less than MAXSUB.
+C
+110   IF (SBRGNS+1.LE.MAXSUB) THEN
+C
+C   If we are allowed to divide further,
+C   prepare to apply basic rule over each half of the
+C   NDIV subregions with greatest errors.
+C   If MAXSUB is great enough, NDIV = MDIV
+C
+          IF (MDIV.GT.1) THEN
+              NDIV = MAXSUB - SBRGNS
+              NDIV = MIN(NDIV,MDIV,SBRGNS)
+          ELSE
+              NDIV = 1
+          END IF
+C
+C   Divide the NDIV subregions in two halves, and compute
+C   integral and error over each half.
+C
+          DO 150 I = 1,NDIV
+              POINTR = SBRGNS + NDIV + 1 - I
+C
+C   Adjust RESULT and ABSERR.
+C
+              DO 115 J = 1,NUMFUN
+                  RESULT(J) = RESULT(J) - VALUES(J,1)
+                  ABSERR(J) = ABSERR(J) - ERRORS(J,1)
+115           CONTINUE
+C
+C   Compute first half region.
+C
+              DO 120 J = 1,NDIM
+                  CENTRS(J,POINTR) = CENTRS(J,1)
+                  HWIDTS(J,POINTR) = HWIDTS(J,1)
+120           CONTINUE
+              DIRECT = DIR(1)
+              DIR(POINTR) = DIRECT
+              HWIDTS(DIRECT,POINTR) = HWIDTS(DIRECT,1)/2
+              OLDCEN = CENTRS(DIRECT,1)
+              CENTRS(DIRECT,POINTR) = OLDCEN - HWIDTS(DIRECT,POINTR)
+C
+C   Save the computed values of the integrals.
+C
+              DO 125 J = 1,NUMFUN
+                  OLDRES(J,NDIV-I+1) = VALUES(J,1)
+125           CONTINUE
+C
+C   Adjust the heap.
+C
+              CALL DTRHRE(1,NDIM,NUMFUN,SBRGNS,VALUES,ERRORS,CENTRS,
+     +                    HWIDTS,GREATE,WORK(1),WORK(NUMFUN+1),CENTER,
+     +                    HWIDTH,DIR)
+C
+C   Compute second half region.
+C
+              DO 130 J = 1,NDIM
+                  CENTRS(J,POINTR-1) = CENTRS(J,POINTR)
+                  HWIDTS(J,POINTR-1) = HWIDTS(J,POINTR)
+130           CONTINUE
+              CENTRS(DIRECT,POINTR-1) = OLDCEN + HWIDTS(DIRECT,POINTR)
+              HWIDTS(DIRECT,POINTR-1) = HWIDTS(DIRECT,POINTR)
+              DIR(POINTR-1) = DIRECT
+150       CONTINUE
+C
+C   Make copies of the generators for each processor.
+C
+          DO 190 I = 2,2*NDIV
+              DO 190 J = 1,NDIM
+                  DO 190 K = 1,WTLENG
+                      G(J,K,I) = G(J,K,1)
+190       CONTINUE
+C
+C   Apply basic rule.
+C
+Cvd$l cncall
+          DO 200 I = 1,2*NDIV
+              INDEX = SBRGNS + I
+              L1 = 1 + (I-1)*8*NUMFUN
+              CALL DRLHRE(NDIM,CENTRS(1,INDEX),HWIDTS(1,INDEX),WTLENG,
+     +                    G(1,1,I),W,ERRCOF,NUMFUN,FUNSUB,SCALES,NORMS,
+     +                    X(1,I),WORK(L1),VALUES(1,INDEX),
+     +                    ERRORS(1,INDEX),DIR(INDEX))
+200       CONTINUE
+          NEVAL = NEVAL + 2*NDIV*NUM
+C
+C   Add new contributions to RESULT.
+C
+          DO 220 I = 1,2*NDIV
+              DO 210 J = 1,NUMFUN
+                  RESULT(J) = RESULT(J) + VALUES(J,SBRGNS+I)
+210           CONTINUE
+220       CONTINUE
+C
+C   Check consistency of results and if necessary adjust
+C   the estimated errors.
+C
+          DO 240 I = 1,NDIV
+              GREATE(SBRGNS+2*I-1) = 0
+              GREATE(SBRGNS+2*I) = 0
+              DO 230 J = 1,NUMFUN
+                  EST1 = ABS(OLDRES(J,I)- (VALUES(J,
+     +                   SBRGNS+2*I-1)+VALUES(J,SBRGNS+2*I)))
+                  EST2 = ERRORS(J,SBRGNS+2*I-1) + ERRORS(J,SBRGNS+2*I)
+                  IF (EST2.GT.0) THEN
+                      ERRORS(J,SBRGNS+2*I-1) = ERRORS(J,SBRGNS+2*I-1)*
+     +                  (1+ERRCOF(5)*EST1/EST2)
+                      ERRORS(J,SBRGNS+2*I) = ERRORS(J,SBRGNS+2*I)*
+     +                                       (1+ERRCOF(5)*EST1/EST2)
+                  END IF
+                  ERRORS(J,SBRGNS+2*I-1) = ERRORS(J,SBRGNS+2*I-1) +
+     +                                     ERRCOF(6)*EST1
+                  ERRORS(J,SBRGNS+2*I) = ERRORS(J,SBRGNS+2*I) +
+     +                                   ERRCOF(6)*EST1
+                  IF (ERRORS(J,SBRGNS+2*I-1).GT.
+     +                GREATE(SBRGNS+2*I-1)) THEN
+                      GREATE(SBRGNS+2*I-1) = ERRORS(J,SBRGNS+2*I-1)
+                  END IF
+                  IF (ERRORS(J,SBRGNS+2*I).GT.GREATE(SBRGNS+2*I)) THEN
+                      GREATE(SBRGNS+2*I) = ERRORS(J,SBRGNS+2*I)
+                  END IF
+                  ABSERR(J) = ABSERR(J) + ERRORS(J,SBRGNS+2*I-1) +
+     +                        ERRORS(J,SBRGNS+2*I)
+230           CONTINUE
+240       CONTINUE
+C
+C   Store results in heap.
+C
+          DO 250 I = 1,2*NDIV
+              INDEX = SBRGNS + I
+              CALL DTRHRE(2,NDIM,NUMFUN,INDEX,VALUES,ERRORS,CENTRS,
+     +                    HWIDTS,GREATE,WORK(1),WORK(NUMFUN+1),CENTER,
+     +                    HWIDTH,DIR)
+250       CONTINUE
+          SBRGNS = SBRGNS + 2*NDIV
+C
+C   Check for termination.
+C
+          IF (SBRGNS.LT.MINSUB) THEN
+              GO TO 110
+          END IF
+          DO 255 J = 1,NUMFUN
+              IF (ABSERR(J).GT.EPSREL*ABS(RESULT(J)) .AND.
+     +            ABSERR(J).GT.EPSABS) THEN
+                  GO TO 110
+              END IF
+255       CONTINUE
+          IFAIL = 0
+          GO TO 499
+C
+C   Else we did not succeed with the
+C   given value of MAXSUB.
+C
+      ELSE
+          IFAIL = 1
+      END IF
+C
+C   Compute more accurate values of RESULT and ABSERR.
+C
+499   CONTINUE
+      DO 500 J = 1,NUMFUN
+          RESULT(J) = 0
+          ABSERR(J) = 0
+500   CONTINUE
+      DO 510 I = 1,SBRGNS
+          DO 505 J = 1,NUMFUN
+              RESULT(J) = RESULT(J) + VALUES(J,I)
+              ABSERR(J) = ABSERR(J) + ERRORS(J,I)
+505       CONTINUE
+510   CONTINUE
+C
+C   Compute correct sign on the integral.
+C
+      DO 600 J = 1,NUMFUN
+          RESULT(J) = RESULT(J)*INTSGN
+600   CONTINUE
+      NSUB = SBRGNS
+      RETURN
+C
+C***END DADHRE
+C
+      END
diff --git a/DCuhre/dchhre.f b/DCuhre/dchhre.f
new file mode 100644
index 0000000000000000000000000000000000000000..c9fd7010c3f030ce6ed7705ccc6ef1394bea2e97
--- /dev/null
+++ b/DCuhre/dchhre.f
@@ -0,0 +1,259 @@
+      SUBROUTINE DCHHRE(MAXDIM,NDIM,NUMFUN,MDIV,A,B,MINPTS,MAXPTS,
+     +                  EPSABS,EPSREL,KEY,NW,RESTAR,NUM,MAXSUB,MINSUB,
+     +                  KEYF,IFAIL,WTLENG)
+C***BEGIN PROLOGUE DCHHRE
+C***PURPOSE  DCHHRE checks the validity of the
+C            input parameters to DCUHRE.
+C***DESCRIPTION
+C            DCHHRE computes NUM, MAXSUB, MINSUB, KEYF, WTLENG and
+C            IFAIL as functions of the input parameters to DCUHRE,
+C            and checks the validity of the input parameters to DCUHRE.
+C
+C   ON ENTRY
+C
+C     MAXDIM Integer.
+C            The maximum allowed number of dimensions.
+C     NDIM   Integer.
+C            Number of variables. 1 < NDIM <= MAXDIM.
+C     NUMFUN Integer.
+C            Number of components of the integral.
+C     MDIV   Integer.
+C            MDIV is the number of subregions that are divided in
+C            each subdivision step in DADHRE.
+C            MDIV is chosen default to 1.
+C            For efficient execution on parallel computers
+C            with NPROC processors MDIV should be set equal to
+C            the smallest integer such that MOD(2*MDIV,NPROC) = 0.
+C     A      Real array of dimension NDIM.
+C            Lower limits of integration.
+C     B      Real array of dimension NDIM.
+C            Upper limits of integration.
+C     MINPTS Integer.
+C            Minimum number of function evaluations.
+C     MAXPTS Integer.
+C            Maximum number of function evaluations.
+C            The number of function evaluations over each subregion
+C            is NUM.
+C            If (KEY = 0 or KEY = 1) and (NDIM = 2) Then
+C              NUM = 65
+C            Elseif (KEY = 0 or KEY = 2) and (NDIM = 3) Then
+C              NUM = 127
+C            Elseif (KEY = 0 and NDIM > 3) or (KEY = 3) Then
+C              NUM = 1 + 4*2*NDIM + 2*NDIM*(NDIM-1) + 4*NDIM*(NDIM-1) +
+C                    4*NDIM*(NDIM-1)*(NDIM-2)/3 + 2**NDIM
+C            Elseif (KEY = 4) Then
+C              NUM = 1 + 3*2*NDIM + 2*NDIM*(NDIM-1) + 2**NDIM
+C            MAXPTS >= 3*NUM and MAXPTS >= MINPTS
+C     EPSABS Real.
+C            Requested absolute error.
+C     EPSREL Real.
+C            Requested relative error.
+C     KEY    Integer.
+C            Key to selected local integration rule.
+C            KEY = 0 is the default value.
+C                  For NDIM = 2 the degree 13 rule is selected.
+C                  For NDIM = 3 the degree 11 rule is selected.
+C                  For NDIM > 3 the degree  9 rule is selected.
+C            KEY = 1 gives the user the 2 dimensional degree 13
+C                  integration rule that uses 65 evaluation points.
+C            KEY = 2 gives the user the 3 dimensional degree 11
+C                  integration rule that uses 127 evaluation points.
+C            KEY = 3 gives the user the degree 9 integration rule.
+C            KEY = 4 gives the user the degree 7 integration rule.
+C                  This is the recommended rule for problems that
+C                  require great adaptivity.
+C     NW     Integer.
+C            Defines the length of the working array WORK.
+C            Let MAXSUB denote the maximum allowed number of subregions
+C            for the given values of MAXPTS, KEY and NDIM.
+C            MAXSUB = (MAXPTS-NUM)/(2*NUM) + 1
+C            NW should be greater or equal to
+C            MAXSUB*(2*NDIM+2*NUMFUN+2) + 17*NUMFUN + 1
+C            For efficient execution on parallel computers
+C            NW should be chosen greater or equal to
+C            MAXSUB*(2*NDIM+2*NUMFUN+2) + 17*NUMFUN*MDIV + 1
+C            where MDIV is the number of subregions that are divided in
+C            each subdivision step.
+C            MDIV is default set internally in DCUHRE equal to 1.
+C            For efficient execution on parallel computers
+C            with NPROC processors MDIV should be set equal to
+C            the smallest integer such that MOD(2*MDIV,NPROC) = 0.
+C     RESTAR Integer.
+C            If RESTAR = 0, this is the first attempt to compute
+C            the integral.
+C            If RESTAR = 1, then we restart a previous attempt.
+C
+C   ON RETURN
+C
+C     NUM    Integer.
+C            The number of function evaluations over each subregion.
+C     MAXSUB Integer.
+C            The maximum allowed number of subregions for the
+C            given values of MAXPTS, KEY and NDIM.
+C     MINSUB Integer.
+C            The minimum allowed number of subregions for the given
+C            values of MINPTS, KEY and NDIM.
+C     IFAIL  Integer.
+C            IFAIL = 0 for normal exit.
+C            IFAIL = 2 if KEY is less than 0 or KEY greater than 4.
+C            IFAIL = 3 if NDIM is less than 2 or NDIM greater than
+C                      MAXDIM.
+C            IFAIL = 4 if KEY = 1 and NDIM not equal to 2.
+C            IFAIL = 5 if KEY = 2 and NDIM not equal to 3.
+C            IFAIL = 6 if NUMFUN less than 1.
+C            IFAIL = 7 if volume of region of integration is zero.
+C            IFAIL = 8 if MAXPTS is less than 3*NUM.
+C            IFAIL = 9 if MAXPTS is less than MINPTS.
+C            IFAIL = 10 if EPSABS < 0 and EPSREL < 0.
+C            IFAIL = 11 if NW is too small.
+C            IFAIL = 12 if unlegal RESTAR.
+C     KEYF   Integer.
+C            Key to selected integration rule.
+C     WTLENG Integer.
+C            The number of generators of the chosen integration rule.
+C
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE DCHHRE
+C
+C   Global variables.
+C
+      INTEGER NDIM,NUMFUN,MDIV,MINPTS,MAXPTS,KEY,NW,MINSUB,MAXSUB
+      INTEGER RESTAR,NUM,KEYF,IFAIL,MAXDIM,WTLENG
+      DOUBLE PRECISION A(NDIM),B(NDIM),EPSABS,EPSREL
+C
+C   Local variables.
+C
+      INTEGER LIMIT,J
+C
+C***FIRST EXECUTABLE STATEMENT DCHHRE
+C
+      IFAIL = 0
+C
+C   Check on legal KEY.
+C
+      IF (KEY.LT.0 .OR. KEY.GT.4) THEN
+          IFAIL = 2
+          GO TO 999
+      END IF
+C
+C   Check on legal NDIM.
+C
+      IF (NDIM.LT.2 .OR. NDIM.GT.MAXDIM) THEN
+          IFAIL = 3
+          GO TO 999
+      END IF
+C
+C   For KEY = 1, NDIM must be equal to 2.
+C
+      IF (KEY.EQ.1 .AND. NDIM.NE.2) THEN
+          IFAIL = 4
+          GO TO 999
+      END IF
+C
+C   For KEY = 2, NDIM must be equal to 3.
+C
+      IF (KEY.EQ.2 .AND. NDIM.NE.3) THEN
+          IFAIL = 5
+          GO TO 999
+      END IF
+C
+C   For KEY = 0, we point at the selected integration rule.
+C
+      IF (KEY.EQ.0) THEN
+          IF (NDIM.EQ.2) THEN
+              KEYF = 1
+          ELSE IF (NDIM.EQ.3) THEN
+              KEYF = 2
+          ELSE
+              KEYF = 3
+          ENDIF
+      ELSE
+          KEYF = KEY
+      ENDIF
+C
+C   Compute NUM and WTLENG as a function of KEYF and NDIM.
+C
+      IF (KEYF.EQ.1) THEN
+          NUM = 65
+          WTLENG = 14
+      ELSE IF (KEYF.EQ.2) THEN
+          NUM = 127
+          WTLENG = 13
+      ELSE IF (KEYF.EQ.3) THEN
+          NUM = 1 + 4*2*NDIM + 2*NDIM* (NDIM-1) + 4*NDIM* (NDIM-1) +
+     +          4*NDIM* (NDIM-1)* (NDIM-2)/3 + 2**NDIM
+          WTLENG = 9
+          IF (NDIM.EQ.2) WTLENG = 8
+      ELSE IF (KEYF.EQ.4) THEN
+          NUM = 1 + 3*2*NDIM + 2*NDIM* (NDIM-1) + 2**NDIM
+          WTLENG = 6
+      END IF
+C
+C   Compute MAXSUB.
+C
+      MAXSUB = (MAXPTS-NUM)/ (2*NUM) + 1
+C
+C   Compute MINSUB.
+C
+      MINSUB = (MINPTS-NUM)/ (2*NUM) + 1
+      IF (MOD(MINPTS-NUM,2*NUM).NE.0) THEN
+          MINSUB = MINSUB + 1
+      END IF
+      MINSUB = MAX(2,MINSUB)
+C
+C   Check on positive NUMFUN.
+C
+      IF (NUMFUN.LT.1) THEN
+          IFAIL = 6
+          GO TO 999
+      END IF
+C
+C   Check on legal upper and lower limits of integration.
+C
+      DO 10 J = 1,NDIM
+          IF (A(J)-B(J).EQ.0) THEN
+              IFAIL = 7
+              GO TO 999
+          END IF
+10    CONTINUE
+C
+C   Check on MAXPTS < 3*NUM.
+C
+      IF (MAXPTS.LT.3*NUM) THEN
+          IFAIL = 8
+          GO TO 999
+      END IF
+C
+C   Check on MAXPTS >= MINPTS.
+C
+      IF (MAXPTS.LT.MINPTS) THEN
+          IFAIL = 9
+          GO TO 999
+      END IF
+C
+C   Check on legal accuracy requests.
+C
+      IF (EPSABS.LT.0 .AND. EPSREL.LT.0) THEN
+          IFAIL = 10
+          GO TO 999
+      END IF
+C
+C   Check on big enough double precision workspace.
+C
+      LIMIT = MAXSUB* (2*NDIM+2*NUMFUN+2) + 17*MDIV*NUMFUN + 1
+      IF (NW.LT.LIMIT) THEN
+          IFAIL = 11
+          GO TO 999
+      END IF
+C
+C    Check on legal RESTAR.
+C
+      IF (RESTAR.NE.0 .AND. RESTAR.NE.1) THEN
+          IFAIL = 12
+          GO TO 999
+      END IF
+999   RETURN
+C
+C***END DCHHRE
+C
+      END
diff --git a/DCuhre/dcuhre.f b/DCuhre/dcuhre.f
new file mode 100755
index 0000000000000000000000000000000000000000..40a8ab721aa64fdb90a5048f9f48ce8f8fd068ed
--- /dev/null
+++ b/DCuhre/dcuhre.f
@@ -0,0 +1,473 @@
+
+!       SUBROUTINE CUHRE_TEST(YRANGE,NDIM,INTEGRAND,INIT,NCALL,ITMX,NPRN,
+!      +             NUMFUN,PDIM,WORKERS,VG_RESULT,VG_ERROR,VG_CHI2)
+!       IMPLICIT NONE
+!       INTEGER, PARAMETER :: NW=10000000
+!       INTEGER :: KEY,MINPTS,MAXPTS,IFAIL,NUMFUN,PDIM,WORKERS
+!       INTEGER :: NDIM,RESTART,NCALLS
+!       INTEGER(8) :: NCALL,ITMX,NPRN
+!       LOGICAL :: INIT
+!       REAL(8) :: A(1:NDIM),B(1:NDIM),EPSABS,EPSREL,WORK(1:NW)
+!       REAL(8) :: VG_RESULT,VG_ERROR,VG_CHI2
+!       REAL(8) :: YRANGE(1:NDIM),ERROR(1:NUMFUN),RESULT(1:NUMFUN)
+!       EXTERNAL INTEGRAND
+!       
+!       
+!            A(:) = 0D0
+!            B(:) = 1D0
+!            
+!            MINPTS = 1000
+!            MAXPTS = NCALL*ITMX
+!            EPSABS = 0D0
+!            EPSREL = 1e-8
+!            KEY = 3
+!            RESTART = 0 
+!            
+!            
+!       
+!       CALL DCUHRE(NDIM,NUMFUN,A,B,MINPTS,MAXPTS,INTEGRAND,
+!      +EPSABS,EPSREL,KEY,NW,RESTART,RESULT,ERROR,NCALLS,IFAIL,WORK)
+!       
+!             
+!       VG_RESULT= RESULT(1)
+!       VG_ERROR = ERROR(1)
+!       print *, "IFAIL",IFAIL 
+!             
+! 
+!           
+!             
+!       
+!       
+!       RETURN
+!       END SUBROUTINE
+
+
+
+      SUBROUTINE DCUHRE(NDIM,NUMFUN,A,B,MINPTS,MAXPTS,FUNSUB,EPSABS,
+     +                  EPSREL,KEY,NW,RESTAR,RESULT,ABSERR,NEVAL,IFAIL,
+     +                  WORK)
+C***BEGIN PROLOGUE DCUHRE
+C***DATE WRITTEN   900116   (YYMMDD)
+C***REVISION DATE  900116   (YYMMDD)
+C***CATEGORY NO. H2B1A1
+C***AUTHOR
+C            Jarle Berntsen, The Computing Centre,
+C            University of Bergen, Thormohlens gt. 55,
+C            N-5008 Bergen, Norway
+C            Phone..  47-5-544055
+C            Email..  jarle@eik.ii.uib.no
+C            Terje O. Espelid, Department of Informatics,
+C            University of Bergen, Thormohlens gt. 55,
+C            N-5008 Bergen, Norway
+C            Phone..  47-5-544180
+C            Email..  terje@eik.ii.uib.no
+C            Alan Genz, Computer Science Department, Washington State
+C            University, Pullman, WA 99163-1210, USA
+C            Phone.. 509-335-2131
+C            Email..  acg@cs2.cs.wsu.edu
+C***KEYWORDS automatic multidimensional integrator,
+C            n-dimensional hyper-rectangles,
+C            general purpose, global adaptive
+C***PURPOSE  The routine calculates an approximation to a given
+C            vector of definite integrals
+C
+C      B(1) B(2)     B(NDIM)
+C     I    I    ... I       (F ,F ,...,F      ) DX(NDIM)...DX(2)DX(1),
+C      A(1) A(2)     A(NDIM)  1  2      NUMFUN
+C
+C       where F = F (X ,X ,...,X    ), I = 1,2,...,NUMFUN.
+C              I   I  1  2      NDIM
+C
+C            hopefully satisfying for each component of I the following
+C            claim for accuracy:
+C            ABS(I(K)-RESULT(K)).LE.MAX(EPSABS,EPSREL*ABS(I(K)))
+C***DESCRIPTION Computation of integrals over hyper-rectangular
+C            regions.
+C            DCUHRE is a driver for the integration routine
+C            DADHRE, which repeatedly subdivides the region
+C            of integration and estimates the integrals and the
+C            errors over the subregions with greatest
+C            estimated errors until the error request
+C            is met or MAXPTS function evaluations have been used.
+C
+C            For NDIM = 2 the default integration rule is of
+C            degree 13 and uses 65 evaluation points.
+C            For NDIM = 3 the default integration rule is of
+C            degree 11 and uses 127 evaluation points.
+C            For NDIM greater then 3 the default integration rule
+C            is of degree 9 and uses NUM evaluation points where
+C              NUM = 1 + 4*2*NDIM + 2*NDIM*(NDIM-1) + 4*NDIM*(NDIM-1) +
+C                    4*NDIM*(NDIM-1)*(NDIM-2)/3 + 2**NDIM
+C            The degree 9 rule may also be applied for NDIM = 2
+C            and NDIM = 3.
+C            A rule of degree 7 is available in all dimensions.
+C            The number of evaluation
+C            points used by the degree 7 rule is
+C              NUM = 1 + 3*2*NDIM + 2*NDIM*(NDIM-1) + 2**NDIM
+C
+C            When DCUHRE computes estimates to a vector of
+C            integrals, all components of the vector are given
+C            the same treatment. That is, I(F ) and I(F ) for
+C                                            J         K
+C            J not equal to K, are estimated with the same
+C            subdivision of the region of integration.
+C            For integrals with enough similarity, we may save
+C            time by applying DCUHRE to all integrands in one call.
+C            For integrals that vary continuously as functions of
+C            some parameter, the estimates produced by DCUHRE will
+C            also vary continuously when the same subdivision is
+C            applied to all components. This will generally not be
+C            the case when the different components are given
+C            separate treatment.
+C
+C            On the other hand this feature should be used with
+C            caution when the different components of the integrals
+C            require clearly different subdivisions.
+C
+C   ON ENTRY
+C
+C     NDIM   Integer.
+C            Number of variables. 1 < NDIM <=  15.
+C     NUMFUN Integer.
+C            Number of components of the integral.
+C     A      Real array of dimension NDIM.
+C            Lower limits of integration.
+C     B      Real array of dimension NDIM.
+C            Upper limits of integration.
+C     MINPTS Integer.
+C            Minimum number of function evaluations.
+C     MAXPTS Integer.
+C            Maximum number of function evaluations.
+C            The number of function evaluations over each subregion
+C            is NUM.
+C            If (KEY = 0 or KEY = 1) and (NDIM = 2) Then
+C              NUM = 65
+C            Elseif (KEY = 0 or KEY = 2) and (NDIM = 3) Then
+C              NUM = 127
+C            Elseif (KEY = 0 and NDIM > 3) or (KEY = 3) Then
+C              NUM = 1 + 4*2*NDIM + 2*NDIM*(NDIM-1) + 4*NDIM*(NDIM-1) +
+C                    4*NDIM*(NDIM-1)*(NDIM-2)/3 + 2**NDIM
+C            Elseif (KEY = 4) Then
+C              NUM = 1 + 3*2*NDIM + 2*NDIM*(NDIM-1) + 2**NDIM
+C            MAXPTS >= 3*NUM and MAXPTS >= MINPTS
+C            For 3 < NDIM < 13 the minimum values for MAXPTS are:
+C             NDIM =    4   5   6    7    8    9    10   11    12
+C            KEY = 3:  459 819 1359 2151 3315 5067 7815 12351 20235
+C            KEY = 4:  195 309  483  765 1251 2133 3795  7005 13299
+C     FUNSUB Externally declared subroutine for computing
+C            all components of the integrand at the given
+C            evaluation point.
+C            It must have parameters (NDIM,X,NUMFUN,FUNVLS)
+C            Input parameters:
+C              NDIM   Integer that defines the dimension of the
+C                     integral.
+C              X      Real array of dimension NDIM
+C                     that defines the evaluation point.
+C              NUMFUN Integer that defines the number of
+C                     components of I.
+C            Output parameter:
+C              FUNVLS Real array of dimension NUMFUN
+C                     that defines NUMFUN components of the integrand.
+C
+C     EPSABS Real.
+C            Requested absolute error.
+C     EPSREL Real.
+C            Requested relative error.
+C     KEY    Integer.
+C            Key to selected local integration rule.
+C            KEY = 0 is the default value.
+C                  For NDIM = 2 the degree 13 rule is selected.
+C                  For NDIM = 3 the degree 11 rule is selected.
+C                  For NDIM > 3 the degree  9 rule is selected.
+C            KEY = 1 gives the user the 2 dimensional degree 13
+C                  integration rule that uses 65 evaluation points.
+C            KEY = 2 gives the user the 3 dimensional degree 11
+C                  integration rule that uses 127 evaluation points.
+C            KEY = 3 gives the user the degree 9 integration rule.
+C            KEY = 4 gives the user the degree 7 integration rule.
+C                  This is the recommended rule for problems that
+C                  require great adaptivity.
+C     NW     Integer.
+C            Defines the length of the working array WORK.
+C            Let MAXSUB denote the maximum allowed number of subregions
+C            for the given values of MAXPTS, KEY and NDIM.
+C            MAXSUB = (MAXPTS-NUM)/(2*NUM) + 1
+C            NW should be greater or equal to
+C            MAXSUB*(2*NDIM+2*NUMFUN+2) + 17*NUMFUN + 1
+C            For efficient execution on parallel computers
+C            NW should be chosen greater or equal to
+C            MAXSUB*(2*NDIM+2*NUMFUN+2) + 17*NUMFUN*MDIV + 1
+C            where MDIV is the number of subregions that are divided in
+C            each subdivision step.
+C            MDIV is default set internally in DCUHRE equal to 1.
+C            For efficient execution on parallel computers
+C            with NPROC processors MDIV should be set equal to
+C            the smallest integer such that MOD(2*MDIV,NPROC) = 0.
+C
+C     RESTAR Integer.
+C            If RESTAR = 0, this is the first attempt to compute
+C            the integral.
+C            If RESTAR = 1, then we restart a previous attempt.
+C            In this case the only parameters for DCUHRE that may
+C            be changed (with respect to the previous call of DCUHRE)
+C            are MINPTS, MAXPTS, EPSABS, EPSREL and RESTAR.
+C
+C   ON RETURN
+C
+C     RESULT Real array of dimension NUMFUN.
+C            Approximations to all components of the integral.
+C     ABSERR Real array of dimension NUMFUN.
+C            Estimates of absolute errors.
+C     NEVAL  Integer.
+C            Number of function evaluations used by DCUHRE.
+C     IFAIL  Integer.
+C            IFAIL = 0 for normal exit, when ABSERR(K) <=  EPSABS or
+C              ABSERR(K) <=  ABS(RESULT(K))*EPSREL with MAXPTS or less
+C              function evaluations for all values of K,
+C              1 <= K <= NUMFUN .
+C            IFAIL = 1 if MAXPTS was too small for DCUHRE
+C              to obtain the required accuracy. In this case DCUHRE
+C              returns values of RESULT with estimated absolute
+C              errors ABSERR.
+C            IFAIL = 2 if KEY is less than 0 or KEY greater than 4.
+C            IFAIL = 3 if NDIM is less than 2 or NDIM greater than 15.
+C            IFAIL = 4 if KEY = 1 and NDIM not equal to 2.
+C            IFAIL = 5 if KEY = 2 and NDIM not equal to 3.
+C            IFAIL = 6 if NUMFUN is less than 1.
+C            IFAIL = 7 if volume of region of integration is zero.
+C            IFAIL = 8 if MAXPTS is less than 3*NUM.
+C            IFAIL = 9 if MAXPTS is less than MINPTS.
+C            IFAIL = 10 if EPSABS < 0 and EPSREL < 0.
+C            IFAIL = 11 if NW is too small.
+C            IFAIL = 12 if unlegal RESTAR.
+C     WORK   Real array of dimension NW.
+C            Used as working storage.
+C            WORK(NW) = NSUB, the number of subregions in the data
+C            structure.
+C            Let WRKSUB=(NW-1-17*NUMFUN*MDIV)/(2*NDIM+2*NUMFUN+2)
+C            WORK(1),...,WORK(NUMFUN*WRKSUB) contain
+C              the estimated components of the integrals over the
+C              subregions.
+C            WORK(NUMFUN*WRKSUB+1),...,WORK(2*NUMFUN*WRKSUB) contain
+C              the estimated errors over the subregions.
+C            WORK(2*NUMFUN*WRKSUB+1),...,WORK(2*NUMFUN*WRKSUB+NDIM*
+C              WRKSUB) contain the centers of the subregions.
+C            WORK(2*NUMFUN*WRKSUB+NDIM*WRKSUB+1),...,WORK((2*NUMFUN+
+C              NDIM)*WRKSUB+NDIM*WRKSUB) contain subregion half widths.
+C            WORK(2*NUMFUN*WRKSUB+2*NDIM*WRKSUB+1),...,WORK(2*NUMFUN*
+C              WRKSUB+2*NDIM*WRKSUB+WRKSUB) contain the greatest errors
+C              in each subregion.
+C            WORK((2*NUMFUN+2*NDIM+1)*WRKSUB+1),...,WORK((2*NUMFUN+
+C              2*NDIM+1)*WRKSUB+WRKSUB) contain the direction of
+C              subdivision in each subregion.
+C            WORK(2*(NDIM+NUMFUN+1)*WRKSUB),...,WORK(2*(NDIM+NUMFUN+1)*
+C              WRKSUB+ 17*MDIV*NUMFUN) is used as temporary
+C              storage in DADHRE.
+C
+C
+C        DCUHRE Example Test Program
+C
+C
+C   DTEST1 is a simple test driver for DCUHRE.
+C
+C   Output produced on a SUN 3/50.
+c
+C       DCUHRE TEST RESULTS
+C
+C    FTEST CALLS = 3549, IFAIL =  0
+C   N   ESTIMATED ERROR   INTEGRAL
+C   1     0.00000010     0.13850818
+C   2     0.00000013     0.06369469
+C   3     0.00000874     0.05861748
+C   4     0.00000021     0.05407034
+C   5     0.00000019     0.05005614
+C   6     0.00000009     0.04654608
+C
+C     PROGRAM DTEST1
+C     EXTERNAL FTEST
+C     INTEGER KEY, N, NF, NDIM, MINCLS, MAXCLS, IFAIL, NEVAL, NW
+C     PARAMETER (NDIM = 5, NW = 5000, NF = NDIM+1)
+C     DOUBLE PRECISION A(NDIM), B(NDIM), WRKSTR(NW)
+C     DOUBLE PRECISION ABSEST(NF), FINEST(NF), ABSREQ, RELREQ
+C     DO 10 N = 1,NDIM
+C        A(N) = 0
+C        B(N) = 1
+C  10 CONTINUE
+C     MINCLS = 0
+C     MAXCLS = 10000
+C     KEY = 0
+C     ABSREQ = 0
+C     RELREQ = 1E-3
+C     CALL DCUHRE(NDIM, NF, A, B, MINCLS, MAXCLS, FTEST, ABSREQ, RELREQ,
+C    * KEY, NW, 0, FINEST, ABSEST, NEVAL, IFAIL, WRKSTR)
+C     PRINT 9999, NEVAL, IFAIL
+C9999 FORMAT (8X, 'DCUHRE TEST RESULTS', //'     FTEST CALLS = ', I4,
+C    * ', IFAIL = ', I2, /'    N   ESTIMATED ERROR   INTEGRAL')
+C     DO 20 N = 1,NF
+C        PRINT 9998, N, ABSEST(N), FINEST(N)
+C9998    FORMAT (3X, I2, 2F15.8)
+C  20 CONTINUE
+C     END
+C     SUBROUTINE FTEST(NDIM, Z, NFUN, F)
+C     INTEGER N, NDIM, NFUN
+C     DOUBLE PRECISION Z(NDIM), F(NFUN), SUM
+C     SUM = 0
+C     DO 10 N = 1,NDIM
+C        SUM = SUM + N*Z(N)**2
+C  10 CONTINUE
+C     F(1) = EXP(-SUM/2)
+C     DO 20 N = 1,NDIM
+C        F(N+1) = Z(N)*F(1)
+C  20 CONTINUE
+C     END
+C
+C***LONG DESCRIPTION
+C
+C   The information for each subregion is contained in the
+C   data structure WORK.
+C   When passed on to DADHRE, WORK is split into eight
+C   arrays VALUES, ERRORS, CENTRS, HWIDTS, GREATE, DIR,
+C   OLDRES and WORK.
+C   VALUES contains the estimated values of the integrals.
+C   ERRORS contains the estimated errors.
+C   CENTRS contains the centers of the subregions.
+C   HWIDTS contains the half widths of the subregions.
+C   GREATE contains the greatest estimated error for each subregion.
+C   DIR    contains the directions for further subdivision.
+C   OLDRES and WORK are used as work arrays in DADHRE.
+C
+C   The data structures for the subregions are in DADHRE organized
+C   as a heap, and the size of GREATE(I) defines the position of
+C   region I in the heap. The heap is maintained by the program
+C   DTRHRE.
+C
+C   The subroutine DADHRE is written for efficient execution on shared
+C   memory parallel computer. On a computer with NPROC processors we wil
+C   in each subdivision step divide MDIV regions, where MDIV is
+C   chosen such that MOD(2*MDIV,NPROC) = 0, in totally 2*MDIV new region
+C   Each processor will then compute estimates of the integrals and erro
+C   over 2*MDIV/NPROC subregions in each subdivision step.
+C   The subroutine for estimating the integral and the error over
+C   each subregion, DRLHRE, uses WORK2 as a work array.
+C   We must make sure that each processor writes its results to
+C   separate parts of the memory, and therefore the sizes of WORK and
+C   WORK2 are functions of MDIV.
+C   In order to achieve parallel processing of subregions, compiler
+C   directives should be placed in front of the DO 200
+C   loop in DADHRE on machines like Alliant and CRAY.
+C
+C***REFERENCES
+C   J.Berntsen, T.O.Espelid and A.Genz, An Adaptive Algorithm
+C   for the Approximate Calculation of Multiple Integrals,
+C   To be published.
+C
+C   J.Berntsen, T.O.Espelid and A.Genz, DCUHRE: An Adaptive
+C   Multidimensional Integration Routine for a Vector of
+C   Integrals, To be published.
+C
+C***ROUTINES CALLED DCHHRE,DADHRE
+C***END PROLOGUE DCUHRE
+C
+C   Global variables.
+C
+      EXTERNAL FUNSUB
+      INTEGER NDIM,NUMFUN,MINPTS,MAXPTS,KEY,NW,RESTAR
+      INTEGER NEVAL,IFAIL
+      DOUBLE PRECISION A(NDIM),B(NDIM),EPSABS,EPSREL
+      DOUBLE PRECISION RESULT(NUMFUN),ABSERR(NUMFUN),WORK(NW)
+C
+C   Local variables.
+C
+C   MDIV   Integer.
+C          MDIV is the number of subregions that are divided in
+C          each subdivision step in DADHRE.
+C          MDIV is chosen default to 1.
+C          For efficient execution on parallel computers
+C          with NPROC processors MDIV should be set equal to
+C          the smallest integer such that MOD(2*MDIV,NPROC) = 0.
+C   MAXDIM Integer.
+C          The maximum allowed value of NDIM.
+C   MAXWT  Integer. The maximum number of weights used by the
+C          integration rule.
+C   WTLENG Integer.
+C          The number of generators used by the selected rule.
+C   WORK2  Real work space. The length
+C          depends on the parameters MDIV,MAXDIM and MAXWT.
+C   MAXSUB Integer.
+C          The maximum allowed number of subdivisions
+C          for the given values of KEY, NDIM and MAXPTS.
+C   MINSUB Integer.
+C          The minimum allowed number of subregions for the given
+C          values of MINPTS, KEY and NDIM.
+C   WRKSUB Integer.
+C          The maximum allowed number of subregions as a function
+C          of NW, NUMFUN, NDIM and MDIV. This determines the length
+C          of the main work arrays.
+C   NUM    Integer. The number of integrand evaluations needed
+C          over each subregion.
+C
+      INTEGER MDIV,MAXWT,WTLENG,MAXDIM,LENW2,MAXSUB,MINSUB
+      INTEGER NUM,NSUB,LENW,KEYF
+      PARAMETER (MDIV=1)
+      PARAMETER (MAXDIM=15)
+      PARAMETER (MAXWT=14)
+      PARAMETER (LENW2=2*MDIV*MAXDIM* (MAXWT+1)+12*MAXWT+2*MAXDIM)
+      INTEGER WRKSUB,I1,I2,I3,I4,I5,I6,I7,I8,K1,K2,K3,K4,K5,K6,K7,K8
+      DOUBLE PRECISION WORK2(LENW2)
+C
+C***FIRST EXECUTABLE STATEMENT DCUHRE
+C
+C   Compute NUM, WTLENG, MAXSUB and MINSUB,
+C   and check the input parameters.
+C
+
+
+      CALL DCHHRE(MAXDIM,NDIM,NUMFUN,MDIV,A,B,MINPTS,MAXPTS,EPSABS,
+     +            EPSREL,KEY,NW,RESTAR,NUM,MAXSUB,MINSUB,KEYF,
+     +            IFAIL,WTLENG)
+      WRKSUB = (NW - 1 - 17*MDIV*NUMFUN)/(2*NDIM + 2*NUMFUN + 2)
+      IF (IFAIL.NE.0) THEN
+          GO TO 999
+      END IF
+C
+C   Split up the work space.
+C
+      I1 = 1
+      I2 = I1 + WRKSUB*NUMFUN
+      I3 = I2 + WRKSUB*NUMFUN
+      I4 = I3 + WRKSUB*NDIM
+      I5 = I4 + WRKSUB*NDIM
+      I6 = I5 + WRKSUB
+      I7 = I6 + WRKSUB
+      I8 = I7 + NUMFUN*MDIV
+      K1 = 1
+      K2 = K1 + 2*MDIV*WTLENG*NDIM
+      K3 = K2 + WTLENG*5
+      K4 = K3 + WTLENG
+      K5 = K4 + NDIM
+      K6 = K5 + NDIM
+      K7 = K6 + 2*MDIV*NDIM
+      K8 = K7 + 3*WTLENG
+C
+C   On restart runs the number of subregions from the
+C   previous call is assigned to NSUB.
+C
+      IF (RESTAR.EQ.1) THEN
+          NSUB = WORK(NW)
+      END IF
+C
+C   Compute the size of the temporary work space needed in DADHRE.
+C
+      LENW = 16*MDIV*NUMFUN
+      CALL DADHRE(NDIM,NUMFUN,MDIV,A,B,MINSUB,MAXSUB,FUNSUB,EPSABS,
+     +            EPSREL,KEYF,RESTAR,NUM,LENW,WTLENG,
+     +            RESULT,ABSERR,NEVAL,NSUB,IFAIL,WORK(I1),WORK(I2),
+     +            WORK(I3),WORK(I4),WORK(I5),WORK(I6),WORK(I7),WORK(I8),
+     +            WORK2(K1),WORK2(K2),WORK2(K3),WORK2(K4),WORK2(K5),
+     +            WORK2(K6),WORK2(K7),WORK2(K8))
+      WORK(NW) = NSUB
+999   RETURN
+C
+C***END DCUHRE
+C
+      END
diff --git a/DCuhre/dfshre.f b/DCuhre/dfshre.f
new file mode 100644
index 0000000000000000000000000000000000000000..9361aeda1e2b62782e694d5c7e7d44bcbf593ff2
--- /dev/null
+++ b/DCuhre/dfshre.f
@@ -0,0 +1,119 @@
+      SUBROUTINE DFSHRE(NDIM,CENTER,HWIDTH,X,G,NUMFUN,FUNSUB,FULSMS,
+     +                  FUNVLS)
+C***BEGIN PROLOGUE DFSHRE
+C***KEYWORDS fully symmetric sum
+C***PURPOSE  To compute fully symmetric basic rule sums
+C***AUTHOR   Alan Genz, Computer Science Department, Washington
+C            State University, Pullman, WA 99163-1210 USA
+C***LAST MODIFICATION 88-04-08
+C***DESCRIPTION DFSHRE computes a fully symmetric sum for a vector
+C            of integrand values over a hyper-rectangular region.
+C            The sum is fully symmetric with respect to the center of
+C            the region and is taken over all sign changes and
+C            permutations of the generators for the sum.
+C
+C   ON ENTRY
+C
+C   NDIM   Integer.
+C          Number of variables.
+C   CENTER Real array of dimension NDIM.
+C          The coordinates for the center of the region.
+C   HWIDTH Real Array of dimension NDIM.
+C          HWIDTH(I) is half of the width of dimension I of the region.
+C   X      Real Array of dimension NDIM.
+C          A work array.
+C   G      Real Array of dimension NDIM.
+C          The generators for the fully symmetric sum. These MUST BE
+C          non-negative and non-increasing.
+C   NUMFUN Integer.
+C          Number of components for the vector integrand.
+C   FUNSUB Externally declared subroutine.
+C          For computing the components of the integrand at a point X.
+C          It must have parameters (NDIM, X, NUMFUN, FUNVLS).
+C           Input Parameters:
+C            X      Real array of dimension NDIM.
+C                   Defines the evaluation point.
+C            NDIM   Integer.
+C                   Number of variables for the integrand.
+C            NUMFUN Integer.
+C                   Number of components for the vector integrand.
+C           Output Parameters:
+C            FUNVLS Real array of dimension NUMFUN.
+C                   The components of the integrand at the point X.
+C   ON RETURN
+C
+C   FULSMS Real array of dimension NUMFUN.
+C          The values for the fully symmetric sums for each component
+C          of the integrand.
+C   FUNVLS Real array of dimension NUMFUN.
+C          A work array.
+C
+C***ROUTINES CALLED: FUNSUB
+C
+C***END PROLOGUE DFSHRE
+C
+C   Global variables.
+C
+      EXTERNAL FUNSUB
+      INTEGER NDIM,NUMFUN
+      DOUBLE PRECISION CENTER(NDIM),HWIDTH(NDIM),X(NDIM),G(NDIM),
+     +                 FULSMS(NUMFUN),FUNVLS(NUMFUN)
+C
+C   Local variables.
+C
+      INTEGER IXCHNG,LXCHNG,I,J,L
+      DOUBLE PRECISION GL,GI
+C
+C***FIRST EXECUTABLE STATEMENT DFSHRE
+C
+      DO 10 J = 1,NUMFUN
+          FULSMS(J) = 0
+10    CONTINUE
+C
+C     Compute centrally symmetric sum for permutation of G
+C
+20    DO 30 I = 1,NDIM
+          X(I) = CENTER(I) + G(I)*HWIDTH(I)
+30    CONTINUE
+40    CALL FUNSUB(NDIM,X,NUMFUN,FUNVLS)
+      DO 50 J = 1,NUMFUN
+          FULSMS(J) = FULSMS(J) + FUNVLS(J)
+50    CONTINUE
+      DO 60 I = 1,NDIM
+          G(I) = - G(I)
+          X(I) = CENTER(I) + G(I)*HWIDTH(I)
+          IF (G(I).LT.0) GO TO 40
+60    CONTINUE
+C
+C       Find next distinct permutation of G and loop back for next sum.
+C       Permutations are generated in reverse lexicographic order.
+C
+      DO 80 I = 2,NDIM
+          IF (G(I-1).GT.G(I)) THEN
+              GI = G(I)
+              IXCHNG = I - 1
+              DO 70 L = 1, (I-1)/2
+                  GL = G(L)
+                  G(L) = G(I-L)
+                  G(I-L) = GL
+                  IF (GL.LE.GI) IXCHNG = IXCHNG - 1
+                  IF (G(L).GT.GI) LXCHNG = L
+70            CONTINUE
+              IF (G(IXCHNG).LE.GI) IXCHNG = LXCHNG
+              G(I) = G(IXCHNG)
+              G(IXCHNG) = GI
+              GO TO 20
+          END IF
+80    CONTINUE
+C
+C     Restore original order to generators
+C
+      DO 90 I = 1,NDIM/2
+          GI = G(I)
+          G(I) = G(NDIM-I+1)
+          G(NDIM-I+1) = GI
+90    CONTINUE
+C
+C***END DFSHRE
+C
+      END
diff --git a/DCuhre/dinhre.f b/DCuhre/dinhre.f
new file mode 100644
index 0000000000000000000000000000000000000000..9796dd22d5f3456111fd309824365c408f606887
--- /dev/null
+++ b/DCuhre/dinhre.f
@@ -0,0 +1,111 @@
+      SUBROUTINE DINHRE(NDIM,KEY,WTLENG,W,G,ERRCOF,RULPTS,SCALES,NORMS)
+C***BEGIN PROLOGUE DINHRE
+C***PURPOSE DINHRE computes abscissas and weights of the integration
+C            rule and the null rules to be used in error estimation.
+C            These are computed as functions of NDIM and KEY.
+C***DESCRIPTION DINHRE will for given values of NDIM and KEY compute or
+C            select the correct values of the abscissas and
+C            corresponding weights for different
+C            integration rules and null rules and assign them to
+C            G and W.
+C            The heuristic error coefficients ERRCOF
+C            will be computed as a function of KEY.
+C            Scaling factors SCALES and normalization factors NORMS
+C            used in the error estimation are computed.
+C
+C
+C   ON ENTRY
+C
+C     NDIM   Integer.
+C            Number of variables.
+C     KEY    Integer.
+C            Key to selected local integration rule.
+C     WTLENG Integer.
+C            The number of weights in each of the rules.
+C
+C   ON RETURN
+C
+C     W      Real array of dimension (5,WTLENG).
+C            The weights for the basic and null rules.
+C            W(1,1), ...,W(1,WTLENG) are weights for the basic rule.
+C            W(I,1), ...,W(I,WTLENG), for I > 1 are null rule weights.
+C     G      Real array of dimension (NDIM,WTLENG).
+C            The fully symmetric sum generators for the rules.
+C            G(1,J),...,G(NDIM,J) are the generators for the points
+C            associated with the the Jth weights.
+C     ERRCOF Real array of dimension 6.
+C            Heuristic error coefficients that are used in the
+C            error estimation in BASRUL.
+C            It is assumed that the error is computed using:
+C             IF (N1*ERRCOF(1) < N2 and N2*ERRCOF(2) < N3)
+C               THEN ERROR = ERRCOF(3)*N1
+C               ELSE ERROR = ERRCOF(4)*MAX(N1, N2, N3)
+C             ERROR = ERROR + EP*(ERRCOF(5)*ERROR/(ES+ERROR)+ERRCOF(6))
+C            where N1-N3 are the null rules, EP is the error for
+C            the parent
+C            subregion and ES is the error for the sibling subregion.
+C     RULPTS Real array of dimension WTLENG.
+C            A work array containing the number of points produced by
+C            each generator of the selected rule.
+C     SCALES Real array of dimension (3,WTLENG).
+C            Scaling factors used to construct new null rules,
+C            N1, N2 and N3,
+C            based on a linear combination of two successive null rules
+C            in the sequence of null rules.
+C     NORMS  Real array of dimension (3,WTLENG).
+C            2**NDIM/(1-norm of the null rule constructed by each of
+C            the scaling factors.)
+C
+C***ROUTINES CALLED  D132RE,D113RE,D07HRE,D09HRE
+C***END PROLOGUE DINHRE
+C
+C   Global variables.
+C
+      INTEGER NDIM,KEY,WTLENG
+      DOUBLE PRECISION G(NDIM,WTLENG),W(5,WTLENG),ERRCOF(6)
+      DOUBLE PRECISION RULPTS(WTLENG),SCALES(3,WTLENG)
+      DOUBLE PRECISION NORMS(3,WTLENG)
+C
+C   Local variables.
+C
+      INTEGER I,J,K
+      DOUBLE PRECISION WE(14)
+C
+C***FIRST EXECUTABLE STATEMENT DINHRE
+C
+C   Compute W, G and ERRCOF.
+C
+      IF (KEY.EQ.1) THEN
+          CALL D132RE(WTLENG,W,G,ERRCOF,RULPTS)
+      ELSE IF (KEY.EQ.2) THEN
+          CALL D113RE(WTLENG,W,G,ERRCOF,RULPTS)
+      ELSE IF (KEY.EQ.3) THEN
+          CALL D09HRE(NDIM,WTLENG,W,G,ERRCOF,RULPTS)
+      ELSE IF (KEY.EQ.4) THEN
+          CALL D07HRE(NDIM,WTLENG,W,G,ERRCOF,RULPTS)
+      END IF
+C
+C   Compute SCALES and NORMS.
+C
+      DO 100 K = 1,3
+          DO 50 I = 1,WTLENG
+              IF (W(K+1,I).NE.0) THEN
+                  SCALES(K,I) = - W(K+2,I)/W(K+1,I)
+              ELSE
+                  SCALES(K,I) = 100
+              END IF
+              DO 30 J = 1,WTLENG
+                  WE(J) = W(K+2,J) + SCALES(K,I)*W(K+1,J)
+30            CONTINUE
+              NORMS(K,I) = 0
+              DO 40 J = 1,WTLENG
+                  NORMS(K,I) = NORMS(K,I) + RULPTS(J)*ABS(WE(J))
+40            CONTINUE
+              NORMS(K,I) = 2**NDIM/NORMS(K,I)
+50        CONTINUE
+100   CONTINUE
+      RETURN
+C
+C***END DINHRE
+C
+      END
diff --git a/DCuhre/drlhre.f b/DCuhre/drlhre.f
new file mode 100644
index 0000000000000000000000000000000000000000..cea05ce60268b68cfd036267c1f2152d82713207
--- /dev/null
+++ b/DCuhre/drlhre.f
@@ -0,0 +1,209 @@
+      SUBROUTINE DRLHRE(NDIM,CENTER,HWIDTH,WTLENG,G,W,ERRCOF,NUMFUN,
+     +                  FUNSUB,SCALES,NORMS,X,NULL,BASVAL,RGNERR,DIRECT)
+C***BEGIN PROLOGUE DRLHRE
+C***KEYWORDS basic numerical integration rule
+C***PURPOSE  To compute basic integration rule values.
+C***AUTHOR   Alan Genz, Computer Science Department, Washington
+C            State University, Pullman, WA 99163-1210 USA
+C***LAST MODIFICATION 90-02-06
+C***DESCRIPTION DRLHRE computes basic integration rule values for a
+C            vector of integrands over a hyper-rectangular region.
+C            These are estimates for the integrals. DRLHRE also computes
+C            estimates for the errors and determines the coordinate axis
+C            where the fourth difference for the integrands is largest.
+C
+C   ON ENTRY
+C
+C   NDIM   Integer.
+C          Number of variables.
+C   CENTER Real array of dimension NDIM.
+C          The coordinates for the center of the region.
+C   HWIDTH Real Array of dimension NDIM.
+C          HWIDTH(I) is half of the width of dimension I of the region.
+C   WTLENG Integer.
+C          The number of weights in the basic integration rule.
+C   G      Real array of dimension (NDIM,WTLENG).
+C          The fully symmetric sum generators for the rules.
+C          G(1,J), ..., G(NDIM,J) are the are the generators for the
+C          points associated with the Jth weights.
+C   W      Real array of dimension (5,WTLENG).
+C          The weights for the basic and null rules.
+C          W(1,1),...,W(1,WTLENG) are weights for the basic rule.
+C          W(I,1),...,W(I,WTLENG), for I > 1 are null rule weights.
+C   ERRCOF Real array of dimension 6.
+C          The error coefficients for the rules.
+C          It is assumed that the error is computed using:
+C           IF (N1*ERRCOF(1) < N2 and N2*ERRCOF(2) < N3)
+C             THEN ERROR = ERRCOF(3)*N1
+C             ELSE ERROR = ERRCOF(4)*MAX(N1, N2, N3)
+C           ERROR = ERROR + EP*(ERRCOF(5)*ERROR/(ES+ERROR)+ERRCOF(6))
+C          where N1-N4 are the null rules, EP is the error
+C          for the parent
+C          subregion and ES is the error for the sibling subregion.
+C   NUMFUN Integer.
+C          Number of components for the vector integrand.
+C   FUNSUB Externally declared subroutine.
+C          For computing the components of the integrand at a point X.
+C          It must have parameters (NDIM,X,NUMFUN,FUNVLS).
+C           Input Parameters:
+C            X      Real array of dimension NDIM.
+C                   Defines the evaluation point.
+C            NDIM   Integer.
+C                   Number of variables for the integrand.
+C            NUMFUN Integer.
+C                   Number of components for the vector integrand.
+C           Output Parameters:
+C            FUNVLS Real array of dimension NUMFUN.
+C                   The components of the integrand at the point X.
+C   SCALES Real array of dimension (3,WTLENG).
+C          Scaling factors used to construct new null rules based
+C          on a linear combination of two successive null rules
+C          in the sequence of null rules.
+C   NORMS  Real array of dimension (3,WTLENG).
+C          2**NDIM/(1-norm of the null rule constructed by each of the
+C          scaling factors.)
+C   X      Real Array of dimension NDIM.
+C          A work array.
+C   NULL   Real array of dimension (NUMFUN, 8)
+C          A work array.
+C
+C   ON RETURN
+C
+C   BASVAL Real array of dimension NUMFUN.
+C          The values for the basic rule for each component
+C          of the integrand.
+C   RGNERR Real array of dimension NUMFUN.
+C          The error estimates for each component of the integrand.
+C   DIRECT Real.
+C          The coordinate axis where the fourth difference of the
+C          integrand values is largest.
+C
+C***REFERENCES
+C   A.C.Genz and A.A.Malik, An adaptive algorithm for numerical
+C   integration over an N-dimensional rectangular region,
+C   J.Comp.Appl.Math., 6:295-302, 1980.
+C
+C   T.O.Espelid, Integration Rules, Null Rules and Error
+C   Estimation, Reports in Informatics 33, Dept. of Informatics,
+C   Univ. of Bergen, 1988.
+C
+C***ROUTINES CALLED: DFSHRE, FUNSUB
+C
+C***END PROLOGUE DRLHRE
+C
+C   Global variables.
+C
+      EXTERNAL FUNSUB
+      INTEGER WTLENG,NUMFUN,NDIM
+      DOUBLE PRECISION CENTER(NDIM),X(NDIM),HWIDTH(NDIM),BASVAL(NUMFUN),
+     +                 RGNERR(NUMFUN),NULL(NUMFUN,8),W(5,WTLENG),
+     +                 G(NDIM,WTLENG),ERRCOF(6),DIRECT,SCALES(3,WTLENG),
+     +                 NORMS(3,WTLENG)
+C
+C   Local variables.
+C
+      DOUBLE PRECISION RGNVOL,DIFSUM,DIFMAX,FRTHDF
+      INTEGER I,J,K,DIVAXN
+      DOUBLE PRECISION SEARCH,RATIO
+C
+C***FIRST EXECUTABLE STATEMENT DRLHRE
+C
+C
+C       Compute volume of subregion, initialize DIVAXN and rule sums;
+C       compute fourth differences and new DIVAXN (RGNERR is used
+C       for a work array here). The integrand values used for the
+C       fourth divided differences are accumulated in rule arrays.
+C
+      RGNVOL = 1
+      DIVAXN = 1
+      DO 10 I = 1,NDIM
+          RGNVOL = RGNVOL*HWIDTH(I)
+          X(I) = CENTER(I)
+          IF (HWIDTH(I).GT.HWIDTH(DIVAXN)) DIVAXN = I
+10    CONTINUE
+      CALL FUNSUB(NDIM,X,NUMFUN,RGNERR)
+      DO 30 J = 1,NUMFUN
+          BASVAL(J) = W(1,1)*RGNERR(J)
+          DO 20 K = 1,4
+              NULL(J,K) = W(K+1,1)*RGNERR(J)
+20        CONTINUE
+30    CONTINUE
+      DIFMAX = 0
+      RATIO = (G(1,3)/G(1,2))**2
+      DO 60 I = 1,NDIM
+          X(I) = CENTER(I) - HWIDTH(I)*G(1,2)
+          CALL FUNSUB(NDIM,X,NUMFUN,NULL(1,5))
+          X(I) = CENTER(I) + HWIDTH(I)*G(1,2)
+          CALL FUNSUB(NDIM,X,NUMFUN,NULL(1,6))
+          X(I) = CENTER(I) - HWIDTH(I)*G(1,3)
+          CALL FUNSUB(NDIM,X,NUMFUN,NULL(1,7))
+          X(I) = CENTER(I) + HWIDTH(I)*G(1,3)
+          CALL FUNSUB(NDIM,X,NUMFUN,NULL(1,8))
+          X(I) = CENTER(I)
+          DIFSUM = 0
+          DO 50 J = 1,NUMFUN
+              FRTHDF = 2* (1-RATIO)*RGNERR(J) - (NULL(J,7)+NULL(J,8)) +
+     +                 RATIO* (NULL(J,5)+NULL(J,6))
+C
+C           Ignore differences below roundoff
+C
+              IF (RGNERR(J)+FRTHDF/4.NE.RGNERR(J)) DIFSUM = DIFSUM +
+     +            ABS(FRTHDF)
+              DO 40 K = 1,4
+                  NULL(J,K) = NULL(J,K) + W(K+1,2)*
+     +                        (NULL(J,5)+NULL(J,6)) +
+     +                        W(K+1,3)* (NULL(J,7)+NULL(J,8))
+40            CONTINUE
+              BASVAL(J) = BASVAL(J) + W(1,2)* (NULL(J,5)+NULL(J,6)) +
+     +                    W(1,3)* (NULL(J,7)+NULL(J,8))
+50        CONTINUE
+          IF (DIFSUM.GT.DIFMAX) THEN
+              DIFMAX = DIFSUM
+              DIVAXN = I
+          END IF
+60    CONTINUE
+      DIRECT = DIVAXN
+C
+C    Finish computing the rule values.
+C
+      DO 90 I = 4,WTLENG
+          CALL DFSHRE(NDIM,CENTER,HWIDTH,X,G(1,I),NUMFUN,FUNSUB,RGNERR,
+     +                NULL(1,5))
+          DO 80 J = 1,NUMFUN
+              BASVAL(J) = BASVAL(J) + W(1,I)*RGNERR(J)
+              DO 70 K = 1,4
+                  NULL(J,K) = NULL(J,K) + W(K+1,I)*RGNERR(J)
+70            CONTINUE
+80        CONTINUE
+90    CONTINUE
+C
+C    Compute errors.
+C
+      DO 130 J = 1,NUMFUN
+C
+C    We search for the null rule, in the linear space spanned by two
+C    successive null rules in our sequence, which gives the greatest
+C    error estimate among all normalized (1-norm) null rules in this
+C    space.
+C
+          DO 110 I = 1,3
+              SEARCH = 0
+              DO 100 K = 1,WTLENG
+                  SEARCH = MAX(SEARCH,ABS(NULL(J,I+1)+SCALES(I,
+     +                     K)*NULL(J,I))*NORMS(I,K))
+100           CONTINUE
+              NULL(J,I) = SEARCH
+110       CONTINUE
+          IF (ERRCOF(1)*NULL(J,1).LE.NULL(J,2) .AND.
+     +        ERRCOF(2)*NULL(J,2).LE.NULL(J,3)) THEN
+              RGNERR(J) = ERRCOF(3)*NULL(J,1)
+          ELSE
+              RGNERR(J) = ERRCOF(4)*MAX(NULL(J,1),NULL(J,2),NULL(J,3))
+          END IF
+          RGNERR(J) = RGNVOL*RGNERR(J)
+          BASVAL(J) = RGNVOL*BASVAL(J)
+130   CONTINUE
+C
+C***END DRLHRE
+C
+      END
diff --git a/DCuhre/dtrhre.f b/DCuhre/dtrhre.f
new file mode 100644
index 0000000000000000000000000000000000000000..d52a1de1ec9a5500460417d5c4d0f639176b16f0
--- /dev/null
+++ b/DCuhre/dtrhre.f
@@ -0,0 +1,176 @@
+      SUBROUTINE DTRHRE(DVFLAG,NDIM,NUMFUN,SBRGNS,VALUES,ERRORS,CENTRS,
+     +                  HWIDTS,GREATE,ERROR,VALUE,CENTER,HWIDTH,DIR)
+C***BEGIN PROLOGUE DTRHRE
+C***PURPOSE DTRHRE maintains a heap of subregions.
+C***DESCRIPTION DTRHRE maintains a heap of subregions.
+C            The subregions are ordered according to the size
+C            of the greatest error estimates of each subregion(GREATE).
+C
+C   PARAMETERS
+C
+C     DVFLAG Integer.
+C            If DVFLAG = 1, we remove the subregion with
+C            greatest error from the heap.
+C            If DVFLAG = 2, we insert a new subregion in the heap.
+C     NDIM   Integer.
+C            Number of variables.
+C     NUMFUN Integer.
+C            Number of components of the integral.
+C     SBRGNS Integer.
+C            Number of subregions in the heap.
+C     VALUES Real array of dimension (NUMFUN,SBRGNS).
+C            Used to store estimated values of the integrals
+C            over the subregions.
+C     ERRORS Real array of dimension (NUMFUN,SBRGNS).
+C            Used to store the corresponding estimated errors.
+C     CENTRS Real array of dimension (NDIM,SBRGNS).
+C            Used to store the center limits of the stored subregions.
+C     HWIDTS Real array of dimension (NDIM,SBRGNS).
+C            Used to store the hwidth limits of the stored subregions.
+C     GREATE Real array of dimension SBRGNS.
+C            Used to store the greatest estimated errors in
+C            all subregions.
+C     ERROR  Real array of dimension NUMFUN.
+C            Used as intermediate storage for the error of a subregion.
+C     VALUE  Real array of dimension NUMFUN.
+C            Used as intermediate storage for the estimate
+C            of the integral over a subregion.
+C     CENTER Real array of dimension NDIM.
+C            Used as intermediate storage for the center of
+C            the subregion.
+C     HWIDTH Real array of dimension NDIM.
+C            Used as intermediate storage for the half width of
+C            the subregion.
+C     DIR    Integer array of dimension SBRGNS.
+C            DIR is used to store the directions for
+C            further subdivision.
+C
+C***ROUTINES CALLED-NONE
+C***END PROLOGUE DTRHRE
+C
+C   Global variables.
+C
+      INTEGER DVFLAG,NDIM,NUMFUN,SBRGNS
+      DOUBLE PRECISION VALUES(NUMFUN,*),ERRORS(NUMFUN,*)
+      DOUBLE PRECISION CENTRS(NDIM,*)
+      DOUBLE PRECISION HWIDTS(NDIM,*)
+      DOUBLE PRECISION GREATE(*)
+      DOUBLE PRECISION ERROR(NUMFUN),VALUE(NUMFUN)
+      DOUBLE PRECISION CENTER(NDIM),HWIDTH(NDIM)
+      DOUBLE PRECISION DIR(*)
+C
+C   Local variables.
+C
+C   GREAT  is used as intermediate storage for the greatest error of a
+C          subregion.
+C   DIRECT is used as intermediate storage for the direction of further
+C          subdivision.
+C   SUBRGN Position of child/parent subregion in the heap.
+C   SUBTMP Position of parent/child subregion in the heap.
+C
+      INTEGER J,SUBRGN,SUBTMP
+      DOUBLE PRECISION GREAT,DIRECT
+C
+C***FIRST EXECUTABLE STATEMENT DTRHRE
+C
+C   Save values to be stored in their correct place in the heap.
+C
+      GREAT = GREATE(SBRGNS)
+      DIRECT = DIR(SBRGNS)
+      DO 5 J = 1,NUMFUN
+          ERROR(J) = ERRORS(J,SBRGNS)
+          VALUE(J) = VALUES(J,SBRGNS)
+5     CONTINUE
+      DO 10 J = 1,NDIM
+          CENTER(J) = CENTRS(J,SBRGNS)
+          HWIDTH(J) = HWIDTS(J,SBRGNS)
+10    CONTINUE
+C
+C    If DVFLAG = 1, we will remove the region
+C    with greatest estimated error from the heap.
+C
+      IF (DVFLAG.EQ.1) THEN
+          SBRGNS = SBRGNS - 1
+          SUBRGN = 1
+20        SUBTMP = 2*SUBRGN
+          IF (SUBTMP.LE.SBRGNS) THEN
+              IF (SUBTMP.NE.SBRGNS) THEN
+C
+C   Find max. of left and right child.
+C
+                  IF (GREATE(SUBTMP).LT.GREATE(SUBTMP+1)) THEN
+                      SUBTMP = SUBTMP + 1
+                  END IF
+              END IF
+C
+C   Compare max.child with parent.
+C   If parent is max., then done.
+C
+              IF (GREAT.LT.GREATE(SUBTMP)) THEN
+C
+C   Move the values at position subtmp up the heap.
+C
+                  GREATE(SUBRGN) = GREATE(SUBTMP)
+                  DO 25 J = 1,NUMFUN
+                      ERRORS(J,SUBRGN) = ERRORS(J,SUBTMP)
+                      VALUES(J,SUBRGN) = VALUES(J,SUBTMP)
+25                CONTINUE
+                  DIR(SUBRGN) = DIR(SUBTMP)
+                  DO 30 J = 1,NDIM
+                      CENTRS(J,SUBRGN) = CENTRS(J,SUBTMP)
+                      HWIDTS(J,SUBRGN) = HWIDTS(J,SUBTMP)
+30                CONTINUE
+                  SUBRGN = SUBTMP
+                  GO TO 20
+              END IF
+          END IF
+      ELSE IF (DVFLAG.EQ.2) THEN
+C
+C   If DVFLAG = 2, then insert new region in the heap.
+C
+          SUBRGN = SBRGNS
+40        SUBTMP = SUBRGN/2
+          IF (SUBTMP.GE.1) THEN
+C
+C   Compare max.child with parent.
+C   If parent is max, then done.
+C
+              IF (GREAT.GT.GREATE(SUBTMP)) THEN
+C
+C   Move the values at position subtmp down the heap.
+C
+                  GREATE(SUBRGN) = GREATE(SUBTMP)
+                  DO 45 J = 1,NUMFUN
+                      ERRORS(J,SUBRGN) = ERRORS(J,SUBTMP)
+                      VALUES(J,SUBRGN) = VALUES(J,SUBTMP)
+45                CONTINUE
+                  DIR(SUBRGN) = DIR(SUBTMP)
+                  DO 50 J = 1,NDIM
+                      CENTRS(J,SUBRGN) = CENTRS(J,SUBTMP)
+                      HWIDTS(J,SUBRGN) = HWIDTS(J,SUBTMP)
+50                CONTINUE
+                  SUBRGN = SUBTMP
+                  GO TO 40
+              END IF
+          END IF
+      END IF
+C
+C    Insert the saved values in their correct places.
+C
+      IF (SBRGNS.GT.0) THEN
+          GREATE(SUBRGN) = GREAT
+          DO 55 J = 1,NUMFUN
+              ERRORS(J,SUBRGN) = ERROR(J)
+              VALUES(J,SUBRGN) = VALUE(J)
+55        CONTINUE
+          DIR(SUBRGN) = DIRECT
+          DO 60 J = 1,NDIM
+              CENTRS(J,SUBRGN) = CENTER(J)
+              HWIDTS(J,SUBRGN) = HWIDTH(J)
+60        CONTINUE
+      END IF
+C
+C***END DTRHRE
+C
+      RETURN
+      END
diff --git a/DCuhre/manual.pdf b/DCuhre/manual.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..63153b5273dc509437e4762b7f3574620b1a72f6
Binary files /dev/null and b/DCuhre/manual.pdf differ
diff --git a/Foam/DemoFoam.f b/Foam/DemoFoam.f
new file mode 100644
index 0000000000000000000000000000000000000000..0effa4ac9d7462fc5e15c8624e883f09fb48c627
--- /dev/null
+++ b/Foam/DemoFoam.f
@@ -0,0 +1,307 @@
+*////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                        //
+*//                 Test of Foam   (S. Jadach, November 2000)                              //
+*//                                                                                        //
+*//   To execute this test:       make DemoFoam
+*//                               make -f Makefile DemoFoam
+*//	                          make -f Makefile DemoFoamMap
+*//
+*////////////////////////////////////////////////////////////////////////////////////////////
+      PROGRAM Main
+      IMPLICIT NONE
+      CALL Main2 ! 2-dim test
+      END
+
+
+      SUBROUTINE Main2
+*////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                        //
+*//   Test of Foam with 2-dimensional testing function                                     //
+*//   gmake TestFoam
+*//   gmake DemoFoamMap
+*//                                                                                        //
+*////////////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION   Density2
+      EXTERNAL           Density2
+      INTEGER            nBuf,nSampl,OptDrive,k
+      DOUBLE PRECISION   MCresult,MCerror,MCwt,MCvector(10)
+      INTEGER            nDim ! dimension of simlical subspace
+      INTEGER            kDim ! dimension of hyp-cubical subspace
+      INTEGER            loop,nevtot,OptEdge,eps,Effic
+      DOUBLE PRECISION   Xsec,Error
+*
+      OPEN(16,FILE='output-DemoFoam')
+*=========================================================
+      nDim      = 2
+      kDim      = 0
+      nBuf      = 5000          ! Buffer length <5000, default = 1000
+      nSampl    = 200           ! Number of MC events in exploration of a cell, default = 200
+      nBuf      = 150           ! SPECIAL for ploting
+      nSampl    = 1000          ! SPECIAL for ploting
+      OptDrive  = 2             ! Type of Drive =0,1,2 for TrueVol,Sigma,WtMax, default = 2
+      OptEdge   = 1             ! Include vertices in sampling or not, =0,1, default =1
+*=========================================================
+      CALL GLK_Book1(8100,'WT distribution  $', 80, 0.0d0,2d0)
+*=======================================================================
+      CALL FoamA_SetnDim(          nDim)
+      CALL FoamA_SetkDim(          kDim)
+      CALL FoamA_SetnBuf(          nBuf)
+      CALL FoamA_SetnSampl(      nSampl)
+      CALL FoamA_SetOptDrive(  OptDrive)
+      CALL FoamA_SetOptEdge(    OptEdge)
+      CALL FoamA_SetChat(1)
+*------------------------------------
+      CALL FoamA_Initialize(Density2)
+*------------------------------------
+      WRITE(*,*) ' ####################################################################'
+      WRITE(*,*) ' ############## back in main program ################################'
+      WRITE(*,*) ' ####################################################################'
+*------------------------------------
+      CALL WtLimitStart(1004,1005,1000,10d0)      
+*------------------------------------
+      nevtot = 200000
+      nevtot = 1000000
+      DO loop = 1, nevtot
+*------------------------------------
+         CALL FoamA_MakeEvent(Density2)    ! generate MC event
+         CALL FoamA_GetMCvector(MCvector)  ! get MC event, vector
+         CALL FoamA_GetMCwt(MCwt)          ! get MC weight
+         IF(loop.LE.20) THEN
+            WRITE(*,'(a,10f10.5)') '##### MCwt,MCvector=',MCwt,(MCvector(k),k=1,nDim) !
+         ENDIF
+*------------------------------------
+         CALL WtLimitFill(MCwt)
+         CALL GLK_Fil1(8100,MCwt,1d0)
+      ENDDO
+      WRITE(*,*) ' ####################################################################' !
+      WRITE(*,*) ' ############## generation finished  ################################' !
+      WRITE(*,*) ' ####################################################################' !
+*------------------------------------
+      CALL FoamA_Finalize(MCresult,MCerror)
+*------------------------------------
+      WRITE(*,'(a,g19.9,a,g19.9,a,f7.5)') 
+     $     'MCresult= ',MCresult,' +- ',MCerror,'         RelErr= ',MCerror/MCresult !
+*------------------------------------
+      eps = 5d-4
+      CALL WtLimitFind(16,eps,Effic)
+*------------------------------------
+* Remember that nbuf=<500, because om TeX memory
+      OPEN(11, FILE='demo-cell-map.txp')
+      CALL FoamA_PltBegin(-11)
+      IF( nBuf.LE.2500)  CALL FoamA_PltVert
+      IF( nBuf.LE. 500)  CALL FoamA_PltCell
+      CALL FoamA_PltEnd
+*------------------------------------
+      CALL FoamA_BufActPrint(16)
+      CALL GLK_Print(8100)
+      WRITE(*,*) ' ####### Main2 finished ######## '
+      END                       ! Main2
+
+
+      DOUBLE PRECISION FUNCTION Density2(Xarg)
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  Xarg(*)
+      DOUBLE PRECISION  TFun2Sphere
+      DOUBLE PRECISION  TFun2Diagon
+      DOUBLE PRECISION  TFun2Void
+*
+cc      Density2  = TFun2Diagon(Xarg) ! (f_a)
+      Density2  = TFun2Sphere(Xarg) ! (f_b)
+cc      Density2  = TFun2Void(Xarg) ! (f_c)
+      END                       !!!Density2
+
+
+      DOUBLE PRECISION FUNCTION Density3(Xarg)
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  Xarg(*)
+      DOUBLE PRECISION  TFun3Sphere,RFun3Sphere,TFun3Diagon,TFun3Void,RFun3Void
+*----------------------------------------------
+      Density3 = TFun3Diagon(Xarg) ! Cylinder along diagonal
+cc      Density3 = TFun3Sphere(Xarg) ! Thin sphere
+cc      Density3  =TFun3Void(Xarg)   ! Big cubical void, efficiency 0.34
+      END                       !!!Density3
+
+
+*///////////////////////////////////////////////////////////////////////////////////////////////////
+*//               Collection of testing functions                                                 //
+*//                                                                                               //
+*///////////////////////////////////////////////////////////////////////////////////////////////////
+
+      DOUBLE PRECISION FUNCTION TFun3Void(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Big empty void inside cube, only near surface thin uniform layer of density //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Fun
+      DOUBLE PRECISION  Thickness
+      DATA   Thickness / 0.050 /             ! Thickness of the cube
+*---------------------------------------------------------------
+      Fun=0d0
+      IF( x(1).LT.Thickness) Fun=1/Thickness
+      IF( x(2).LT.Thickness) Fun=1/Thickness
+      IF( x(3).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(1)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(2)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(3)).LT.Thickness) Fun=1/Thickness
+      TFun3Void = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun2Void(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Big empty void inside cube, only near surface thin uniform layer of density //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Fun
+      DOUBLE PRECISION  Thickness
+      DATA   Thickness / 0.050 /             ! Thickness of the cube walls
+*---------------------------------------------------------------
+      Fun=0d0
+      IF( x(1).LT.Thickness) Fun=1/Thickness
+      IF( x(2).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(1)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(2)).LT.Thickness) Fun=1/Thickness
+      TFun2Void = Fun
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun3Diagon(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Density only within cylinder along diagonal
+*//  Slight parallel shift off diagonal, see vector A
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Thickness,R,Fun
+      DATA   Thickness / 0.020 /             ! radius of cylinder along diagonal
+      DOUBLE PRECISION  A1,A2,A3
+      DATA   A1,A2,A3  / 0.15, 0.10, -0.15 / ! slight parallel shift from diagonal
+*---------------------------------------------------------------
+      R   = (x(1)-x(2) -A1+A2)**2 +(x(2)-x(3) -A2+A3)**2 +(x(3)-x(1) -A3+A1)**2  ! distance from diagonal
+      Fun = Thickness/( R + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      TFun3Diagon = Fun*(5d0+x(3))           ! 20% tilt along z-axis
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun2Diagon(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Density only within cylinder along diagonal
+*//  Slight parallel shift off diagonal, see vector A
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Thickness,R,Fun
+      DATA   Thickness / 0.020 /             ! radius of cylinder along diagonal
+      DOUBLE PRECISION  A1,A2
+      DATA   A1,A2 / 0.15, 0.10 /            ! slight parallel shift from diagonal
+*---------------------------------------------------------------
+      R   = (x(1)+x(2) -1)**2            ! distance from diagonal
+      Fun = Thickness/( R + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      TFun2Diagon = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun3Sphere(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   3-dimensional testing function                                             //
+*//   Thin sphere centered at (A1,A2,A3) with Radius and Thickness defined below //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Radius,Thickness,A1,A2,A3,R,Fun
+      DATA   A1,A2,A3  / 0.25, 0.40, 0.50 / ! centre of sphere
+      DATA   Radius    / 0.35  /            ! radius  of sphere
+      DATA   Thickness / 0.020 /            ! thickness of sphere
+*---------------------------------------------------------------
+      R   = SQRT( (x(1)-A1)**2 +(x(2)-A2)**2 +(x(3)-A3)**2 )
+      Fun = Thickness/( (R-Radius)**2 + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      Fun = Fun/(4d0*Pi*Radius**2)                       ! Normalize to one
+      TFun3Sphere    = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun2Sphere(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   3-dimensional testing function                                             //
+*//   Thin sphere centered at (A1,A2,A3) with Radius and Thickness defined below //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Radius,Thickness,A1,A2,R,Fun
+      DATA   A1,A2  / 0.25, 0.40 / ! centre of sphere
+      DATA   Radius    / 0.35  /            ! radius  of sphere
+      DATA   Thickness / 0.020 /            ! thickness of sphere
+*---------------------------------------------------------------
+      R   = SQRT( (x(1)-A1)**2 +(x(2)-A2)**2 )
+      Fun = Thickness/( (R-Radius)**2 + Thickness**2)/Pi ! Breit-Wigner profile
+      Fun = Fun/(4d0*Pi*Radius**2)                       ! Normalize to one
+      TFun2Sphere    = Fun
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun1d1(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x
+      DOUBLE PRECISION  x0,gamma,pi
+*---------------------------------------------------------------
+      pi = 4d0*DATAN(1d0)
+* breit-wigner
+      x0=0.6d0
+      gamma=0.001d0
+      TFun1d1    = 1d0/pi*gamma/( (x-x0)**2 + gamma**2 )
+      END
+
+      DOUBLE PRECISION FUNCTION TFun1d(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   sharp peak on the background of a mild function                            //
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x
+      DOUBLE PRECISION  x0,pi,gamma,lambda
+*---------------------------------------------------------------
+      pi = 4d0*DATAN(1d0)
+* breit-wigner
+      x0=0.6d0
+      gamma=0.00001d0
+      lambda = 3d0
+      TFun1d    = 1d0/pi*gamma/( (x-x0)**2 + gamma**2 )
+     $            +EXP(-lambda*x)*lambda
+     $            +EXP(-lambda)
+      END
+
+      DOUBLE PRECISION FUNCTION Tfun1d2(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x,eps
+*---------------------------------------------------------------
+* 1/x singularity
+      eps =0.05d0
+      Tfun1d2    = 1d0/(x+eps)
+      END
+
+      DOUBLE PRECISION FUNCTION Tfun1d3(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x,eps
+*---------------------------------------------------------------
+* primitive
+      Tfun1d3    = 1d0-x
+      END
diff --git a/Foam/DemoMCell.f b/Foam/DemoMCell.f
new file mode 100644
index 0000000000000000000000000000000000000000..ac88c7a053378df4cb69cb78760bf3490016fdac
--- /dev/null
+++ b/Foam/DemoMCell.f
@@ -0,0 +1,304 @@
+*////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                        //
+*//                 Test of MCell   (S. Jadach, November 2000)                             //
+*//                                                                                        //
+*//   To execute this test:       make DemoMCell
+*//                               make -f Makefile DemoMCell
+*//	                          make -f Makefile DemoMCellMap
+*//
+*////////////////////////////////////////////////////////////////////////////////////////////
+      PROGRAM Main
+      IMPLICIT NONE
+      CALL Main2 ! 2-dim test
+      END
+
+
+      SUBROUTINE Main2
+*////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                        //
+*//   Test of MCell with 2-dimensional testing function                                     //
+*//   gmake TestMCell
+*//   gmake DemoMCellMap
+*//                                                                                        //
+*////////////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION   Density2
+      EXTERNAL           Density2
+      INTEGER            nBuf,nSampl,OptDrive,k
+      DOUBLE PRECISION   MCresult,MCerror,MCwt,MCvector(10)
+      INTEGER            kDim ! dimension of hyp-cubical subspace
+      INTEGER            loop,nevtot,OptEdge,eps,Effic
+      DOUBLE PRECISION   Xsec,Error
+*
+      OPEN(16,FILE='output-DemoMCell')
+*=========================================================
+      kDim      = 2
+      nBuf      = 5000          ! Buffer length <5000, default = 1000
+      nSampl    = 200           ! Number of MC events in exploration of a cell, default = 200
+      nBuf      = 150           ! SPECIAL for ploting
+      nSampl    = 1000          ! SPECIAL for ploting
+      OptDrive  = 2             ! Type of Drive =0,1,2 for TrueVol,Sigma,WtMax, default = 2
+      OptEdge   = 1             ! Include vertices in sampling or not, =0,1, default =1
+*=========================================================
+      CALL GLK_Book1(8100,'WT distribution  $', 80, 0.0d0,2d0)
+*=======================================================================
+      CALL MCellA_SetkDim(          kDim)
+      CALL MCellA_SetnBuf(          nBuf)
+      CALL MCellA_SetnSampl(      nSampl)
+      CALL MCellA_SetOptDrive(  OptDrive)
+      CALL MCellA_SetOptEdge(    OptEdge)
+      CALL MCellA_SetChat(1)
+*------------------------------------
+      CALL MCellA_Initialize(Density2)
+*------------------------------------
+      WRITE(*,*) ' ####################################################################'
+      WRITE(*,*) ' ############## back in main program ################################'
+      WRITE(*,*) ' ####################################################################'
+*------------------------------------
+      CALL WtLimitStart(1004,1005,1000,10d0)      
+*------------------------------------
+      nevtot = 200000
+      nevtot = 1000000
+      DO loop = 1, nevtot
+*------------------------------------
+         CALL MCellA_MakeEvent(Density2)    ! generate MC event
+         CALL MCellA_GetMCvector(MCvector)  ! get MC event, vector
+         CALL MCellA_GetMCwt(MCwt)          ! get MC weight
+         IF(loop.LE.20) THEN
+            WRITE(*,'(a,10f10.5)') '##### MCwt,MCvector=',MCwt,(MCvector(k),k=1,kDim) !
+         ENDIF
+*------------------------------------
+         CALL WtLimitFill(MCwt)
+         CALL GLK_Fil1(8100,MCwt,1d0)
+      ENDDO
+      WRITE( *,*) ' ####################################################################' !
+      WRITE( *,*) ' ############## generation finished  ################################' !
+      WRITE(16,*) ' ############## generation finished  ################################' !
+      WRITE( *,*) ' ####################################################################' !
+*------------------------------------
+      CALL MCellA_Finalize(MCresult,MCerror)
+*------------------------------------
+      WRITE(*,'(a,g19.9,a,g19.9,a,f7.5)') 
+     $     'MCresult= ',MCresult,' +- ',MCerror,'         RelErr= ',MCerror/MCresult !
+*------------------------------------
+      eps = 5d-4
+      CALL WtLimitFind(16,eps,Effic)
+*------------------------------------
+* Remember that nbuf=<500, because om TeX memory
+      OPEN(11, FILE='demo-cell-map.txp')
+      CALL MCellA_PltBegin(-11)
+      IF( nBuf.LE.2000)  CALL MCellA_PltCell
+      CALL MCellA_PltEnd
+*------------------------------------
+      CALL MCellA_BufActPrint(16)
+      CALL GLK_Print(8100)
+      WRITE(*,*) ' ####### Main2 finished ######## '
+      END                       ! Main2
+
+
+      DOUBLE PRECISION FUNCTION Density2(Xarg)
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  Xarg(*)
+      DOUBLE PRECISION  TFun2Sphere
+      DOUBLE PRECISION  TFun2Diagon
+      DOUBLE PRECISION  TFun2Void
+*
+cc      Density2  = TFun2Diagon(Xarg) ! (f_a)
+      Density2  = TFun2Sphere(Xarg) ! (f_b)
+cc      Density2  = TFun2Void(Xarg) ! (f_c)
+      END                       !!!Density2
+
+
+      DOUBLE PRECISION FUNCTION Density3(Xarg)
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  Xarg(*)
+      DOUBLE PRECISION  TFun3Sphere,RFun3Sphere,TFun3Diagon,TFun3Void,RFun3Void
+*----------------------------------------------
+      Density3 = TFun3Diagon(Xarg) ! Cylinder along diagonal
+cc      Density3 = TFun3Sphere(Xarg) ! Thin sphere
+cc      Density3  =TFun3Void(Xarg)   ! Big cubical void, efficiency 0.34
+      END                       !!!Density3
+
+
+*///////////////////////////////////////////////////////////////////////////////////////////////////
+*//               Collection of testing functions                                                 //
+*//                                                                                               //
+*///////////////////////////////////////////////////////////////////////////////////////////////////
+
+      DOUBLE PRECISION FUNCTION TFun3Void(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Big empty void inside cube, only near surface thin uniform layer of density //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Fun
+      DOUBLE PRECISION  Thickness
+      DATA   Thickness / 0.050 /             ! Thickness of the cube
+*---------------------------------------------------------------
+      Fun=0d0
+      IF( x(1).LT.Thickness) Fun=1/Thickness
+      IF( x(2).LT.Thickness) Fun=1/Thickness
+      IF( x(3).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(1)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(2)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(3)).LT.Thickness) Fun=1/Thickness
+      TFun3Void = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun2Void(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Big empty void inside cube, only near surface thin uniform layer of density //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Fun
+      DOUBLE PRECISION  Thickness
+      DATA   Thickness / 0.050 /             ! Thickness of the cube walls
+*---------------------------------------------------------------
+      Fun=0d0
+      IF( x(1).LT.Thickness) Fun=1/Thickness
+      IF( x(2).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(1)).LT.Thickness) Fun=1/Thickness
+      IF( (1d0-x(2)).LT.Thickness) Fun=1/Thickness
+      TFun2Void = Fun
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun3Diagon(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Density only within cylinder along diagonal
+*//  Slight parallel shift off diagonal, see vector A
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Thickness,R,Fun
+      DATA   Thickness / 0.020 /             ! radius of cylinder along diagonal
+      DOUBLE PRECISION  A1,A2,A3
+      DATA   A1,A2,A3  / 0.15, 0.10, -0.15 / ! slight parallel shift from diagonal
+*---------------------------------------------------------------
+      R   = (x(1)-x(2) -A1+A2)**2 +(x(2)-x(3) -A2+A3)**2 +(x(3)-x(1) -A3+A1)**2  ! distance from diagonal
+      Fun = Thickness/( R + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      TFun3Diagon = Fun*(5d0+x(3))           ! 20% tilt along z-axis
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun2Diagon(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//  Density only within cylinder along diagonal
+*//  Slight parallel shift off diagonal, see vector A
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Thickness,R,Fun
+      DATA   Thickness / 0.020 /             ! radius of cylinder along diagonal
+      DOUBLE PRECISION  A1,A2
+      DATA   A1,A2 / 0.15, 0.10 /            ! slight parallel shift from diagonal
+*---------------------------------------------------------------
+      R   = (x(1)+x(2) -1)**2            ! distance from diagonal
+      Fun = Thickness/( R + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      TFun2Diagon = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun3Sphere(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   3-dimensional testing function                                             //
+*//   Thin sphere centered at (A1,A2,A3) with Radius and Thickness defined below //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Radius,Thickness,A1,A2,A3,R,Fun
+      DATA   A1,A2,A3  / 0.25, 0.40, 0.50 / ! centre of sphere
+      DATA   Radius    / 0.35  /            ! radius  of sphere
+      DATA   Thickness / 0.020 /            ! thickness of sphere
+*---------------------------------------------------------------
+      R   = SQRT( (x(1)-A1)**2 +(x(2)-A2)**2 +(x(3)-A3)**2 )
+      Fun = Thickness/( (R-Radius)**2 + Thickness**2)/Pi ! Breit-Wigner profile, normalized to delta
+      Fun = Fun/(4d0*Pi*Radius**2)                       ! Normalize to one
+      TFun3Sphere    = Fun
+      END
+
+      DOUBLE PRECISION FUNCTION TFun2Sphere(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   3-dimensional testing function                                             //
+*//   Thin sphere centered at (A1,A2,A3) with Radius and Thickness defined below //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x(*)
+      DOUBLE PRECISION  Pi
+      PARAMETER( Pi=3.1415926535897932d0)
+      DOUBLE PRECISION  Radius,Thickness,A1,A2,R,Fun
+      DATA   A1,A2  / 0.25, 0.40 / ! centre of sphere
+      DATA   Radius    / 0.35  /            ! radius  of sphere
+      DATA   Thickness / 0.020 /            ! thickness of sphere
+*---------------------------------------------------------------
+      R   = SQRT( (x(1)-A1)**2 +(x(2)-A2)**2 )
+      Fun = Thickness/( (R-Radius)**2 + Thickness**2)/Pi ! Breit-Wigner profile
+      Fun = Fun/(4d0*Pi*Radius**2)                       ! Normalize to one
+      TFun2Sphere    = Fun
+      END
+
+
+      DOUBLE PRECISION FUNCTION TFun1d1(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x
+      DOUBLE PRECISION  x0,gamma,pi
+*---------------------------------------------------------------
+      pi = 4d0*DATAN(1d0)
+* breit-wigner
+      x0=0.6d0
+      gamma=0.001d0
+      TFun1d1    = 1d0/pi*gamma/( (x-x0)**2 + gamma**2 )
+      END
+
+      DOUBLE PRECISION FUNCTION TFun1d(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//   sharp peak on the background of a mild function                            //
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x
+      DOUBLE PRECISION  x0,pi,gamma,lambda
+*---------------------------------------------------------------
+      pi = 4d0*DATAN(1d0)
+* breit-wigner
+      x0=0.6d0
+      gamma=0.00001d0
+      lambda = 3d0
+      TFun1d    = 1d0/pi*gamma/( (x-x0)**2 + gamma**2 )
+     $            +EXP(-lambda*x)*lambda
+     $            +EXP(-lambda)
+      END
+
+      DOUBLE PRECISION FUNCTION Tfun1d2(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x,eps
+*---------------------------------------------------------------
+* 1/x singularity
+      eps =0.05d0
+      Tfun1d2    = 1d0/(x+eps)
+      END
+
+      DOUBLE PRECISION FUNCTION Tfun1d3(x)
+*//////////////////////////////////////////////////////////////////////////////////
+*//                                                                              //
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  x,eps
+*---------------------------------------------------------------
+* primitive
+      Tfun1d3    = 1d0-x
+      END
diff --git a/Foam/FoamA.f b/Foam/FoamA.f
new file mode 100644
index 0000000000000000000000000000000000000000..bcb449d6b8cc5991d14529ce4867765c72f29037
--- /dev/null
+++ b/Foam/FoamA.f
@@ -0,0 +1,2209 @@
+*///////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                       //
+*//             Foam Version 2.02                                                         //
+*//             November 2000                                                             //
+*//                                                                                       //
+*//  N-dimensional general purpose Monte Carlo sampler                                    //
+*//  with the self-adapting simplical and hyper-cubical grid                              //
+*//                                                                                       //
+*//             Author:   Stanislaw JADACH                                                //
+*//             Address:  INP Cracow, DESY-Zeuthen                                        //
+*//             Email:    S.Jadach@cern.ch, S.Jadach@ifj.edu.pl                           //
+*//             HomePage: http://home.cern.ch/jadach/                                     //
+*//                                                                                       //
+*//  First version 1.00 written by S.J. in May 1999 during visit in DESY                  //
+*//        version 2.00 written by S.J. in Aug 2000 during visit in DESY-Zeuthen          //
+*///////////////////////////////////////////////////////////////////////////////////////////
+
+
+*////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                                    //
+*//          Pseudoclass Foam                                                                          //
+*//                                                                                                    //
+*//                                                                                                    //
+*//                      Initialization of the grid                                                    //
+*//  FoamA_PreInitialize                 : Pre-initialization, set all default values (constructor?)   //
+*//  FoamA_Initialize(FunW)              : Initialization of the grid etc.                             //
+*//  FoamA_InitVertices                  : Initializes first vertices of the basic cube                //
+*//  FoamA_InitCells                     : Initializes first n-factorial cells inside original cube    //
+*//  FoamA_DefCell                       : Create new (daughter) cell and append at end of the buffer  //
+*//  FoamA_Explore(iCell,funW)           : Short MC sampling in iCell, determine <wt>, wtMax etc.      //
+*//  FoamA_RanDiscr(Driv,nTot,Power,iRand) : Random choice of cell division direction                  //
+*//  FoamA_MakeAlpha(Alpha)              : auxiliary procedure for FoamA_Explore                       //
+*//  FoamA_MakeLambda(Lambda)            : auxiliary procedure for FoamA_Explore                       //
+*//  FoamA_Determinant(R,Det)            : determinant of matrix R                                     //
+*//  FoamA_Det2Lapl(R,i1,i2)             : Laplace formula for 1-dim. determinant                      //
+*//  FoamA_Det3Lapl(R,i1,i2,i3)          : Laplace formula for 2-dim. determinant                      //
+*//  FoamA_Det4Lapl(R,i1,i2,i3,i4)       : Laplace formula for 3-dim. determinant                      //
+*//  FoamA_Det5Lapl(R,i1,i2,i3,i4,i5)    : Laplace formula for 4-dim. determinant                      //
+*//  FoamA_Grow(funW)              : grow cells until buffer is full                                   //
+*//  FoamA_PeekMax(iCell)          : choose randomly one cell, used also in MC generation              //
+*//  FoamA_PeekRand1(iCell)        : Generates randomly one (active) cell pointer iCell                //
+*//  FoamA_Divide(iCell,funW,RC)   :Divide iCell into two daughters; iCell retained, taged as inactive //
+*//  FoamA_ActUpda                 : Creates list of active cells (pointers)                           //
+*//                     Generation                                                                     //
+*//  FoamA_MakeEvent(Density)      : Generates point/vector Xrand with the weight MCwt                 //
+*//  FoamA_CellGener(Density)      : Cooses randomly one of active cells                               //
+*//  FoamA_GetMCvector(MCvector)   : Provides point/vector MCvector generated by  MakeEvent            //
+*//  FoamA_GetMCwt(MCwt)           : Provides MCwt, MC weight calculated by MakeEvent                  //
+*//  FoamA_MCgenerate(funW,X,MCwt) : Alternative entry, Generates point X with the weight MCwt         //
+*//                     Finalization                                                                   //
+*//  FoamA_Finalize(MCresult,MCerror)    : Calculates integral and its error after (only from) MC run  //
+*//                     Other Getters and Setters                                                      //
+*//  MCellA_GetTotPrim(TotPrim)    :Provides Primary integral used in MC generation                    //
+*//  FoamA_SetnDim(nDim)           :Sets no. of dimensions simplices   (to be called before Initialize)//
+*//  FoamA_SetkDim(kDim)           :Sets no. of dimensions hypercubics (to be called before Initialize)//
+*//  FoamA_GetnDim(nDim)           :Provides nDim, miscelaneous, for tests                             //
+*//  FoamA_SetnBuf(nBuf)           :Sets nBuf, working area in buffer                                  //
+*//  FoamA_SetnBin(nBin)           :Sets nBin, no of bins in histo in exploration <nBinMax=256         //
+*//  FoamA_SetOut(Out)             :Sets output unit number                                            //
+*//  FoamA_SetChat(Chat)           :Sets chat level; Chat=0,1,2 chat level in output, Chat=1 normal    //
+*//  FoamA_SetnSampl(nSampl)       :Sets nSampl; No of MC sampling before dividing cell                //
+*//  FoamA_SetOptDrive(OptDrive)   :Sets OptDrive; type of Drive =0,1,2 for True,Sigma,WtMax           //
+*//  FoamA_SetOptPeek              :Sets type of method in cell division                               //
+*//  FoamA_SetOptEdge(OptEdge)     :Sets OptEdge; decides whether vertices are included in the sampling//
+*//  FoamA_SetOptRanIni(OptRanIni) :Sets OptRanIni=0,1, for rand. numb. initialization inside/outside  //
+*//  FoamA_SetOptRanLux(OptRanLux) :Sets OptRanLux=-1,0,1,2,3 raand.numb.gen. level                    //
+*//  FoamA_GetnCalls(nCalls)       :Get total no of function calls                                     //
+*//                    Debugging and miscelaneous                                                      //
+*//  FoamA_Check(mout,level)       :Checks all pointers (after comression) debuging!                   //
+*//  FoamA_BufPrint(mout)          :Prints all cells, debugging                                        //
+*//  FoamA_BufActPrint(mout)       :Prints all active cells, debugging                                 //
+*//  FoamA_VertPrint(mout)         :Prints all vertices,  debugging                                    //
+*//  FoamA_PltBegin                :Ploting 2-dim. cells and vertices                                  //
+*//  FoamA_PltVert(mout)           :Ploting 2-dim. cells and vertices                                  //
+*//  FoamA_PltCell(mout)           :Ploting 2-dim. cells and vertices                                  //
+*//  FoamA_PltEnd                  :Ploting 2-dim. cells and vertices                                  //
+*//                                                                                                    //
+*////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                                    //
+*//  Input parameters:                                                                                 //
+*//    nDim     number of dimensions for simplices, for the moment nDim=1-5 in this version,           //
+*//             n>5 requires re-writing FoamA_Determinant,                                             //
+*//    kDim     number of dimensions for hypercubics                                                   //
+*//             Dimen = total number of dimensions = nDim +kDim                                        //
+*//             for n=1 alternatively Foam1A may be used, could be factor 2 faster!                    //
+*//    nBuf     Actual dynamic lenth of the buffer m_nBuf<m_nBufMax. For strongly peaked distribution  //
+*//             nBuf should be as large as possible, this will increase CPU time in initialization     //
+*//             MC generation is weakly affected by increasing nBuf                                    //
+*//    nSampl   No of sampling when dividing cell, nSampl=10-100 is OK, further increase improves      //
+*//             costs CPU time and apparently does not increase grid efficiency too much.              //
+*//             This should be checked however for every new distribution.                             //
+*//    OptDrive Type of Drive =0,1,2 for TrueInt,Sigma,WtMax,  Drive=WtMax is the best if we aim       //
+*//             at rejection leading to wt=1 events. If not then Drive=Sigma iswiser choice leading    //
+*//             to save of CPU time.  Simplistic Drive=Sigma is correct but not recommeneded (ineffic.)//
+*//    OptEdge  decides whether vertices are included in the sampling. Default  OptEdge=1 causes that  //
+*//             vertices at the edge of simplex cells are included always in MC exploration            //
+*//             of the cell. In the case of density distrib. with weak integrable singularities        //
+*//             at the edges it may be not possible and OptEdge=0 may help.                            //
+*//    OptOrd decides whether the integration domain in simplical subspace is unit cube or simplex.    //
+*//             It is active only for  nDim=2,3,4. For OptOrd=0 (default) the initial domain is unit   //
+*//             hypercubic split into nDim! simplices in the initialization phase.                     //
+*//             If m_OptOrd=1 then initial domain is simplex and the integration variables providede   //
+*//             by FoamA_GetMCvector(V) are ordered: V(1)<V(2)<...<V(nDim)<1.                          //
+*//             Hyp-cubical variables  0<V(nDim+1), V(nDim+2),...,V(nDim+kDim)<1 are never ordered.    //
+*//    EvPerBin Limit on effective number of eevents per bin in exploration phase. This option saves   //
+*//             considerably CPU time.      =0 option is desabled, recommended value is >20.           //
+*//    Out      Miscelaneous. Output unit number.                                                      //
+*//    Chat     Miscelaneous. Chat=0,1,2 chat level in output, Chat=1 normal level.                    //
+*//                                                                                                    //
+*//                                                                                                    //
+*////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//  Terminology:                                                                                      //
+*//    "Active cells" are these which did not divide and are eligible for division                     //
+*//  Remarks:                                                                                          //
+*//    List of active cells is not realy necessary, but let us keep it for possible                    //
+*//    future developements or tests.                                                                  //
+*////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+      SUBROUTINE FoamA_PreInitialize     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Presets certain defaults for switches and other and regualtory parameters.     //
+*//   They Can be reset with setters                                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER i,j
+*
+      INTEGER   m_Magic        ! Magic cookie, to avoid multiple initialization
+      DATA      m_Magic /378231178/
+      SAVE      m_Magic
+*     -------------------------------------------------
+      IF(m_Magic .EQ. 378231178 ) THEN
+         m_MagicInit = m_Magic
+         m_Magic     = 0
+      ENDIF
+      IF(m_MagicInit .NE. 378231178 ) RETURN
+      WRITE(m_out,*) '===============FoamA_PreInitialize=============='
+      m_MagicInit= 0
+      m_nDim     = 0                 ! dimension siplices
+      m_kDim     = 0                 ! dimension hypercubics
+      m_Dimen    = m_nDim+m_kDim     ! dimension total
+      m_nBuf     = 1000              ! Actual dynamic lenth of the buffer m_nBuf<m_nBufMax
+      m_nBin     = 8                 ! No of bins in cell exploration/division  <nBinMax  
+      m_nSampl   = 200               ! No of sampling when dividing cell
+      m_OptDrive = 2                 ! type of Drive =0,1,2 for TrueVol,Sigma,WtMax
+      m_OptEdge  = 0                 ! decides whether vertices are included in the sampling
+      m_OptPeek  = 0                 ! type of Peek =0,1 for maximum, random
+      m_Out      = 6                 ! Output unit
+      m_Chat     = 1                 ! Chat=0,1,2 chat level in output, Chat=1 normal level
+      m_OptOrd   = 0                 ! Entire integr domain is hyp-cubic if =0 and simplex if =1
+      m_EvPerBin = 25                ! Upper limit on eevents/bin in exploration, =0 disabled 
+      m_OptRanIni= 1                 ! Rand.num. generator initialized (=1) inside PianA
+      m_OptRanLux= 3                 ! Rand.num. generator level (-1 for PseuMar)
+*
+      m_LastCe   = 0                 ! length of dynamical buffor for cells
+      m_LastVe   = 0                 ! length of dynamical buffor for vertices
+* Clean up list of simplical vertices
+      DO i=1,m_vMax
+         DO j=1,m_nDim
+            m_VerX(i,j) = 0d0        ! vertices
+         ENDDO
+      ENDDO
+* Clean up hypercubic parameters
+      DO i=1,m_nBufMax
+         DO j=1,m_KdiMax
+            m_CeVer1(i,j)=0d0        ! hcubic position
+            m_CeVer2(i,j)=0d0        ! hcubic size
+         ENDDO
+      ENDDO
+*
+      m_nCalls   = 0                 ! No of function calls
+*
+      END
+
+      SUBROUTINE FoamA_Flush        !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Use this before re-initialization of the Foam                                  //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      m_MagicInit = 378231178   ! Reset Magic cookie, alowing initialization
+      WRITE(m_out,*) '===============FoamA_Flush=============='
+      CALL FoamA_PreInitialize
+      END
+
+      SUBROUTINE FoamA_Initialize(FunW)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Basic initialization, create "foam of cells"                                   //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            i,j,k,iCell,kCell
+      DOUBLE PRECISION   TotPrim
+*---------------------------------------------
+      CALL FoamA_PreInitialize
+* User may prefers to initialize r.n.gen. by himsef, the initialization below can be inhibited 
+      IF( m_OptRanIni.EQ. 1 ) THEN
+         IF(m_OptRanLux.EQ.-1) THEN
+            CALL PseuMar_Initialize(54217137, 0, 0) ! Initialization of random number generator
+         ELSEIF(m_OptRanLux.GE.0 .AND. m_OptRanLux.LE.4 ) THEN
+            CALL RLUXGO( m_OptRanLux, 54217137,0,0) ! Initialization of random number generator
+         ELSE
+            WRITE(*,    *) ' ### STOP in FoamA_Initialize, wrong OptRanLux =',m_OptRanLux !
+            WRITE(m_Out,*) ' ### STOP in FoamA_Initialize, wrong OptRanLux =',m_OptRanLux !
+         ENDIF
+      ENDIF
+      IF( (m_nBuf .GT. m_nBufMax) .OR. (m_nBuf .LE. 0) ) THEN
+         WRITE(*,    *) ' ### STOP in FoamA_Initialize, wrong m_nBuf =',m_nBuf !
+         WRITE(m_Out,*) ' ### STOP in FoamA_Initialize, wrong m_nBuf =',m_nBuf !
+         STOP
+      ENDIF
+      IF( (m_nBin .GT. m_nBinMax) .OR. (m_nBin .LE. 0) ) THEN
+         WRITE(*,    *) ' ### STOP in PianA_Initialize, wrong m_nBin =',m_nBin !
+         WRITE(m_Out,*) ' ### STOP in PianA_Initialize, wrong m_nBin =',m_nBin !
+         STOP
+      ENDIF
+      IF( m_Dimen .LE. 0 ) THEN
+         WRITE(*,    *) ' ### STOP in FoamA_Initialize, wrong m_Dimen =',m_Dimen !
+         WRITE(m_Out,*) ' ### STOP in FoamA_Initialize, wrong m_Dimen =',m_Dimen !
+         STOP
+      ENDIF
+* First  cells are the (nDim)! simplices from division of the basic unit cube
+      CALL FoamA_InitVertices
+      CALL FoamA_InitCells(funW)
+
+***** CALL FoamA_VertPrint(6)   ! debug
+***** CALL FoamA_BufPrint(6)    ! debug
+
+      CALL  FoamA_Grow(funW)
+* Update list of active cells, only for internal tests
+      CALL FoamA_ActUpda
+      CALL FoamA_Check(6,0)     ! Check if the liked list is OK
+* --------------------------------------------------------------------------------------------
+      IF( m_Chat.GE.1) THEN
+         WRITE(m_Out,'( 3(a,i4),2(a,g15.8) )') 
+     $      'Foam_Initialize:  No. Cells=',m_LastCe,'  Active=',m_LastAc, '  No. Vertices=' ,m_LastVe, !
+     $      '  True Integ.=',m_CeIntg(1),'  Driver Integ.=',m_CeDriv(1)  !
+      ENDIF
+      IF( m_Chat.EQ.2) THEN
+         CALL FoamA_BufPrint(    m_Out)
+         CALL FoamA_BufActPrint( m_Out)
+         CALL FoamA_VertPrint(   m_Out)
+      ENDIF
+* Initializations for M.C. generation
+      m_Drive  = m_CeDriv(1)  ! M.C. generation Drive value of integral
+      m_SumWt  = 0d0          ! M.C. generation sum of Wt
+      m_SumWt2 = 0d0          ! M.C. generation sum of Wt**2
+      m_NevGen  = 0d0         ! M.C. generation sum of 1d0
+      m_WtMax  = -1d99        ! M.C. generation maximum wt
+      m_WtMin  =  1d99        ! M.C. generation minimum wt
+      m_VolTot = m_CeIntg(1)  ! Estimate of integral tot. without error
+      m_MCresult = m_VolTot   ! M.C. generation Final value of ITEGRAL, temporary asignment
+      m_MCerror  = m_VolTot   ! M.C. generation Final walue of ERROR  , temporary asignment
+*
+*((((((((((((################################################################################
+*((((((((((((################################################################################
+c      CALL FoamA_VertPrint(  6)
+c      CALL FoamA_BufPrint(   6)
+c      CALL FoamA_BufActPrint(6)
+c      CALL FoamA_Check(      6,0)
+c      WRITE(*,*) ' ########### STOP ########### developement not finished @@@@' !
+c      STOP
+*))))))))))))################################################################################
+*))))))))))))################################################################################
+*
+* Cumulative Primary for MC generation, see FoamA_CellGener
+      CALL FoamA_ActUpda
+      TotPrim = 0d0
+      m_CePrCu(0)= 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         TotPrim = TotPrim +m_CePrim( iCell )
+         m_CePrCu(kCell)=TotPrim
+      ENDDO
+* ----------------------------------------------------
+      IF( m_Chat.GE.1) WRITE(m_Out,'( 2(a,g15.8) )')
+     $     'Foam_Initialize:  TotPrimary =',TotPrim,'   True/Primary =', m_CeIntg(1)/TotPrim
+      END                       ! FoamA_Initialize
+
+      SUBROUTINE FoamA_InitVertices    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   In siplical subspace initialize 2^nDim vertices at corners of basic hyper-cube //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER       iVe,i,j,l,digit( m_NdiMax)
+*
+      IF( m_OptOrd .EQ.0) THEN
+*//////////////////////////////////////////////////////////////////////////////////////
+*// Here we have all vertices of the initial unit hypercube
+*// like (0000),(1000),(0100),(1100),(0010)...(1111)
+         m_LastVe = 2**m_nDim
+         DO i=1,m_nDim
+            digit(i)=0
+         ENDDO
+         DO iVe=1,m_LastVe
+*****    WRITE(*,'(a,i5,a,10i5)') 'iVe=', iVe, '  digit=',(digit(j),j=1,m_nDim)
+            DO i=1,m_nDim
+               m_VerX(iVe,i) = digit(i) ! Simplical vertex positions
+            ENDDO
+            digit(1)=digit(1)+1         ! Basic increment
+            DO i=1,m_nDim-1
+               IF(digit(i).EQ.2) THEN   ! Overflow goes to higher digits
+                  digit(i)=0
+                  digit(i+1)=digit(i+1)+1
+               ENDIF
+            ENDDO
+         ENDDO
+      ELSE
+*//////////////////////////////////////////////////////////////////////////////////////
+*// Here we have only vertices of the SINGLE  INITIAL SIMPLEX 
+*// like (0000),(1000),(1110),(1111)
+         m_LastVe = m_nDim+1
+         DO iVe=1,m_LastVe
+            DO i=1,m_nDim
+               m_VerX(iVe,i) =0
+               IF(i.LT.iVe) m_VerX(iVe,i) =1  ! Simplical vertex positions
+            ENDDO
+*****       WRITE(*,'(a,i5,a,10f5.0)') 'iVe=', iVe, '  m_VerX=',(m_VerX(iVe,i),i=1,m_nDim)!
+         ENDDO
+      ENDIF
+      END                       !! FoamA_InitVertices
+
+      SUBROUTINE FoamA_InitCells(funW)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Initialize first n-factorial cells inside original cube                        //
+*//   MC exploration done for all newly defined cells                                //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            perm(m_NdiMax),mask,iCeNew,iCell
+      INTEGER            iCe,i,j,k,iVe,Vert(m_NdiMax),digit(m_NdiMax),factorial,NoMC !
+      DOUBLE PRECISION   HcPosi(m_KdiMax),   HcSize(m_KdiMax)
+*     -----------------------------------------------------------------------------
+      DO j=1,m_kDim
+         HcPosi(j)=0d0
+         HcSize(j)=1d0
+      ENDDO
+      DO iVe=1,m_nDim+1
+         Vert(iVe) =0
+      ENDDO
+      IF( m_nDim .EQ. 0 ) THEN
+*//////////////////////////////////////////////////////////////////////////////////////
+*//      Only hypercubics, no simplices                                              //
+*//////////////////////////////////////////////////////////////////////////////////////
+*        ROOT cell ACTIVE, no daughters
+         NoMC= m_nSampl
+*        -------------------- Stat,Pare, Dau1, Dau2, MCsampl,VertList, Position,Size,   iCeNew)
+         CALL FoamA_DefCell(     1,  -1,   -1,   -1,    NoMC,   Vert, HcPosi,  HcSize, iCeNew) !
+         CALL FoamA_Explore(iCeNew,funW) ! Initial MC sampling
+      ELSEIF( m_nDim .EQ. 1 ) THEN
+*//////////////////////////////////////////////////////////////////////////////////////
+*//      Simplical algorithm in one dimension                                        //
+*//////////////////////////////////////////////////////////////////////////////////////
+         Vert(1) =1
+         Vert(2) =2
+*        ROOT cell ACTIVE, no daughters
+*        -------------------- Stat,Pare, Dau1, Dau2,  MCsampl,VertList, Position,Size,   iCeNew
+         CALL FoamA_DefCell(     1,  -1,   -1,   -1, m_nSampl,    Vert, HcPosi,  HcSize, iCeNew) !
+         CALL FoamA_Explore(iCeNew,funW) ! Initial MC sampling
+      ELSE
+         IF( m_OptOrd .EQ.0) THEN
+*//////////////////////////////////////////////////////////////////////////////////////
+*//      (nDim)! Simplices in more two and more dimensions                           //
+*//////////////////////////////////////////////////////////////////////////////////////
+            factorial=1
+            DO k = 1,m_nDim
+               factorial = factorial*k
+            ENDDO
+*           ROOT cell INACTIVE, (nDim)! daugter cells defined below
+*           ----------------- Stat,Pare, Dau1,        Dau2,  MCsampl, VertList, Position,Size,   iCeNew)
+            CALL FoamA_DefCell( -1,  -1,    2, factorial+1, m_nSampl,     Vert, HcPosi,  HcSize, iCeNew) !
+* ================================================================
+* START OF LOOP OVER permutations of (1,2,3,...,m_nDim)
+            iCe=0
+            DO i=1,m_nDim
+               perm(i)=m_nDim
+            ENDDO
+ 300        CONTINUE
+            perm(1)=perm(1)-1
+            DO k = 1,m_nDim-1
+               IF(perm(k).EQ.0) THEN
+                  perm(k)=m_nDim
+                  perm(k+1)=perm(k+1)-1
+               ENDIF
+            ENDDO
+            Mask=1
+            DO i=1,m_nDim
+               DO j=i+1,m_nDim
+                  IF( perm(i).EQ.perm(j) ) Mask=0
+               ENDDO
+            ENDDO
+            IF(Mask.EQ.1) THEN
+*           At this point NEW PERMUTATION is found !!!
+               iCe=iCe+1
+               DO iVe=1,m_nDim+1
+*              This digit represents single BASIC SIMPLEX, other obtained by permuting dimensions
+                  DO k=1,m_nDim
+                     digit(k)=0
+                     IF(k.LT.iVe) digit(k)=1
+                  ENDDO
+*                 Translation from "binary" digit to serial pointer of a given vertex
+                  j=0
+                  DO k=1,m_nDim
+                     j=j+  digit(perm(k)) *2**(k-1)
+                  ENDDO
+                  Vert(iVe)=j+1
+               ENDDO
+*****    WRITE(*,*) '########>>>>>>> iCe =',iCe, 'permut= ',(perm(i),i=1,m_nDim)
+*****    WRITE(*,*) '########>>>>>>> Vert= ',(vert(i),i=1,m_nDim+1)
+*              Define ACTIVE simplical cell
+*              ----------------- Stat,Pare,Dau1,Dau2,  MCsampl,VertList, Position,Size,   iCeNew
+               CALL FoamA_DefCell(  1,   1,  -1,  -1, m_nSampl,    Vert, HcPosi,  HcSize, iCeNew) !
+*              ---------------------------------------------------------------------
+               IF( iCe.EQ.factorial) GOTO 100 ! Last permutation found
+            ENDIF
+            GOTO 300            ! END OF LOOP over permutations
+* ================================================================
+ 100        CONTINUE
+            DO iCell = 2,m_LastCe
+               CALL FoamA_Explore(iCell,funW) ! Initial MC sampling, necessarily in a separate loop
+            ENDDO
+         ELSE
+*//////////////////////////////////////////////////////////////////////////////////////
+*//      Single initial simplex in two or more dimension (ordered integr. variables) //
+*//////////////////////////////////////////////////////////////////////////////////////
+            DO k = 1,m_nDim+1
+               Vert(k) =k
+            ENDDO
+*           ROOT cell ACTIVE, no daughters
+*           -------------------- Stat,Pare, Dau1, Dau2,  MCsampl, VertList, Position,Size,    iCeNew)
+            CALL FoamA_DefCell(     1,  -1,   -1,   -1, m_nSampl,     Vert, HcPosi,  HcSize,  iCeNew) !
+            CALL FoamA_Explore(iCeNew,funW) ! Initial MC sampling
+         ENDIF  ! m_OptOrd
+      ENDIF  ! m_nDim
+      END                       !!!FoamA_InitCells
+
+      SUBROUTINE FoamA_DefCell(Stat,Pare,Dau1,Dau2,NoMC,Vertex,HcPosi,HcSize,iCeNew)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Create new (daughter) cell and append it at the very end of the buffer         //
+*//   iCeNew is pointer of the new cell                                              //
+*//   Note clever trick: volume of this daughter is assigned initialy half volume    //
+*//   of the parent, if parent exists.                                               //
+*//   In Explore this value is used to update all parents such that                  //
+*//   in the entrire tree parents have volume being sum of all daughter volumes.     //
+*//   This summation discipline is useful for MC generation of an active cell by     //
+*//   going randomly from top to bottom of the tree.                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            Stat,Pare,Dau1,Dau2,iCeNew,k,NoMC
+      INTEGER            Vertex(m_NdiMax+1)
+      DOUBLE PRECISION   HcPosi(m_KdiMax), HcSize(m_KdiMax)
+*     ------------------------------------------------------------------
+      IF( m_LastCe .EQ. m_nBuf) THEN
+         WRITE(*,*) ' STOP in FoamA_DefCell: something wrong with m_nBuf=',m_nBuf !
+         STOP
+      ENDIF
+      m_LastCe = m_LastCe+1
+      iCeNew   = m_LastCe
+      m_CeStat(iCeNew)= Stat                    ! status code, =0 inactive, =1 active
+      m_CePare(iCeNew)= Pare                    ! parent cell pointer
+      m_CeDau1(iCeNew)= Dau1                    ! daughter1 cell pointer
+      m_CeDau2(iCeNew)= Dau2                    ! daughter2 cell pointer
+      m_CeSamp(iCeNew)= NoMC                    ! No of MC events in exploration
+      m_CeBest(iCeNew)= -1                      ! pointer for planning division of the cell
+      m_CeXave(iCeNew)= 0.5d0                   ! factor for division
+*  simplical subspace: vertex list
+      DO k=1,m_NdiMax+1
+         m_CeVert(iCeNew,k)= Vertex(k)
+      ENDDO
+*  hypercubical subspace: position and size
+      DO k=1,m_kDim
+         m_CeVer1(iCeNew,k) = HcPosi(k)
+         m_CeVer2(iCeNew,k) = HcSize(k)
+      ENDDO
+*
+      IF(Pare.NE.-1) THEN
+         m_CeIntg(iCeNew)= m_CeIntg(Pare)/2d0   ! integr. half of parent
+         m_CeDriv(iCeNew)= m_CeDriv(Pare)/2d0   ! integr. half of parent
+      ELSE
+         m_CeIntg(iCeNew)= 0d0
+         m_CeDriv(iCeNew)= 0d0
+      ENDIF
+      m_CeVolu(iCeNew)= 0d0                     ! cartesian Volume   
+      END                       ! FoamA_DefCell
+
+
+      SUBROUTINE FoamA_Explore(iCell,funW)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Explore newly defined cell with help of special short MC sampling              //
+*//   As a result, estimetes of true and Drive volume will be defined                //
+*//   Average and dispersion of the weight distribution will be found along each     //
+*//   edge and the best edge (minimum dispersion) is memorized for future use.       //
+*//   Axerage x for eventual future cell division is also defined.                   //
+*//   Recorded are aso minimum and maximu weight etc.                                //
+*//   The volume estimate in all (inactive) parent cells is updated                  //
+*//   Note that links to parents and initial volume = 1/2 parent has to be           //
+*//   already defined prior to calling this routine.                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell
+* Simplical subspace
+      DOUBLE PRECISION   Vec(m_NdiMax+1,m_NdiMax)
+      DOUBLE PRECISION   Xre(m_NdiMax,  m_NdiMax), Yre(m_NdiMax,  m_NdiMax) !
+      DOUBLE PRECISION   Lambda(m_NdiMax),VolPart(m_NdiMax+1)
+* Hyper-Cubic subspace
+      DOUBLE PRECISION   Alpha( m_KdiMax)
+      INTEGER            digit( m_KdiMax)
+* Total space
+      DOUBLE PRECISION   Vrand( m_DimMax)
+* Edge sampling working space, matrices
+      DOUBLE PRECISION   Xdivi(m_NdiviMax)
+      DOUBLE PRECISION   Histo(m_NdiviMax,m_nBinMax),Xsu1(m_NdiviMax),Xsu2(m_NdiviMax) !
+*--------
+      INTEGER            loop,i,j,k,parent,iv,jv,kv,nEdges,kBest,iBin,nDivi,NevEff !
+      DOUBLE PRECISION   x,x1,x2,Wt,Vsum,xBest,yBest
+      DOUBLE PRECISION   Det,VolOld, DriOld, XrSum,Factorial
+      DOUBLE PRECISION   Dx,DxHc,DxSp,DxPartial,NoMC
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+*-----------------------------------------------------------------------
+* memorize old values, will be needed for correcting parent cells
+      VolOld = m_CeIntg(iCell)
+      DriOld = m_CeDriv(iCell)
+*
+      Factorial=1
+      DO i=1,m_nDim
+         Factorial=Factorial*i
+      ENDDO
+      DxSp=1d0          ! Cartesian volume of the simplex
+      DxHc=1d0          ! Cartesian volume of the hypercube
+*
+      IF( m_nDim.GT.0) THEN
+         DO iv=1,m_nDim+1
+            DO j=1,m_nDim
+               Vec(iv,j) = m_VerX( m_CeVert(iCell,iv) ,j) ! decode vertex vectors
+            ENDDO
+         ENDDO
+         DO iv=1,m_nDim
+            DO j=1,m_nDim
+               Xre(iv,j) = Vec(iv,j)-Vec(m_nDim+1,j) ! relative to last vertex
+            ENDDO
+         ENDDO
+         CALL FoamA_Determinant(Xre,Det)
+         IF(Det.EQ.0d0) WRITE(*,*) '!!!!! WARNING: Determinant=',Det
+         DxSp = DxSp*ABS(Det)/Factorial       ! Simplical Cartesian volume of the Cell
+      ENDIF
+      IF( m_kDim.GT.0) THEN
+         DO i=1,m_kDim
+            DxHc = DxHc*m_CeVer2(iCell,i) ! Product of sizes in hypercubical subspace
+         ENDDO
+      ENDIF
+      Dx=DxSp*DxHc              ! Total cartesian volume
+      m_CeVolu(iCell)  = Dx
+c[[[[[[[[[[[[[[[
+c      DO iv=1,m_nDim
+c          WRITE(*,'(a,9f10.5)') '### Xre=',(Xre(iv,j),j=1,m_nDim)
+c      ENDDO
+c      WRITE(*,'(a,f12.6)') 'FoamA_Explore: Cartesian volume Dx =',Dx
+c]]]]]]]]]]]]]]]
+
+*/////////////////////////////////////////////////////
+*//    Exploratory MC sampling to probe the cell    //
+*/////////////////////////////////////////////////////
+      m_CeSum(iCell,1) =  0
+      m_CeSum(iCell,2) =  0
+      m_CeSum(iCell,3) =  0
+      m_CeSum(iCell,4) =  1d90  ! wtmin
+      m_CeSum(iCell,5) = -1d90  ! wtmax
+      DO k=1,m_NdiviMax
+         Xsu1(k)=0d0
+         Xsu2(k)=0d0
+         DO iBin=1,m_nBin
+            Histo(k,iBin)=0d0
+         ENDDO
+      ENDDO
+*///////////////////////////////////////////////////////////////////////////////////
+*     Additional scan over vertices in order to improve max/min weights
+*     Note that this option adds 2**m_kDim of the function calls, limited to 1000!
+      IF( m_OptEdge .EQ. 1 ) THEN
+         DO k=1,m_kDim
+            digit(k)=0          ! initialize first partitions
+         ENDDO
+         DO loop=1,1000         ! start of loop over partitions
+            DO iv=1,m_nDim+1
+               DO j=1,m_nDim
+                  Vrand(j) = m_VerX( m_CeVert(iCell,iv) ,j) ! simplical subspace
+               ENDDO
+               DO j=1,m_kDim
+                  Vrand(m_nDim+j) = m_CeVer1(iCell,j) + digit(j)*m_CeVer2(iCell,j) ! h-cubical subspace
+               ENDDO
+               Wt =funW(Vrand)*Dx ! weight average normalised to integral over the cell
+               m_CeSum(iCell,4) = MIN( m_CeSum(iCell,4),Wt) ! minium weight
+               m_CeSum(iCell,5) = MAX( m_CeSum(iCell,5),Wt) ! maximu weight
+            ENDDO
+            digit(1)=digit(1)+1
+            DO k=1,m_kDim-1
+               IF(digit(k).EQ.2) THEN
+                  digit(k)=0
+                  digit(k+1)=digit(k+1)+1
+               ENDIF
+            ENDDO
+            IF( m_kDim .EQ.0 )      GOTO 122
+            IF( digit(m_kDim).EQ.2) GOTO 122
+         ENDDO                  ! end of loop over partitions
+ 122     CONTINUE
+      ENDIF
+*///////////////////////////////////////////////////////////////////////////////////
+*     generate randomly/uniformly vector Vrand inside this simplex&hypercube
+      DO i=1,m_CeSamp(iCell)
+         CALL FoamA_MakeLambda(Lambda)
+         CALL FoamA_MakeAlpha( Alpha)
+         DO j=1,m_nDim
+            Vrand(j) = Vec(m_nDim+1,j)
+            DO iv=1,m_nDim
+               Vrand(j) = Vrand(j) +Lambda(iv)*Xre(iv,j) ! simplical subspace
+            ENDDO
+         ENDDO
+         DO j=1,m_kDim
+            Vrand(m_nDim+j) = m_CeVer1(iCell,j) +Alpha(j)*m_CeVer2(iCell,j) ! hypcubic subspace
+         ENDDO
+****     WRITE(*,'(a,6f12.6)') ' Lambda    =',(Lambda(k),k=1,m_nDim)
+****     WRITE(*,'(a,6f12.6)') ' Alpha     =',(Alpha(k), k=1,m_kDim)
+****     WRITE(*,'(a,6f12.6)') ' Vrand     =',(Vrand(k), k=1,m_Dimen)
+*///////////////////////////////////////////////////////////////////////////////////
+* Projecting on all simplex edges, preparatory step, partial volumes etc.
+         IF( m_nDim .GT. 0 ) THEN
+            Vsum=0d0
+            DO jv=1,m_nDim+1    ! vertex jv will be replaced with Vrand
+               kv=0             ! kv numbers all verices axcept jv
+               DO iv=1,m_nDim+1
+                  IF(iv.NE.jv) THEN
+                     kv=kv+1
+                     DO j=1,m_nDim
+                        Yre(kv,j) = Vec(iv,j)-Vrand(j) ! All vertices except jv relative to Vrand
+                     ENDDO
+                  ENDIF
+               ENDDO
+               CALL FoamA_Determinant(Yre,DxPartial)
+               VolPart(jv) = ABS(DxPartial)/Factorial
+               Vsum=Vsum + VolPart(jv)
+            ENDDO
+            IF( ABS(Vsum-DxSp)/DxSp .GT. 1d-5) GOTO 950 ! X-check
+         ENDIF
+*------------------------------------------------------------------------------------
+* IMPORTANT! Two Loops below determine the indexing of edges (simplex and hypercube)
+*------------------------------------------------------------------------------------
+         nEdges=0
+         DO jv=1,m_nDim+1
+            DO iv=jv+1,m_nDim+1
+               nEdges=nEdges+1
+               Xdivi(nEdges) = VolPart(jv) / ( VolPart(jv)+VolPart(iv) )
+            ENDDO
+         ENDDO
+         DO j=1,m_kDim
+            nEdges=nEdges+1
+            Xdivi(nEdges) = Alpha(j)
+         ENDDO
+*///////////////////////////////////////////////////////////////////////////////////
+         Wt =funW(Vrand)*Dx  ! principal weight normalised to integral over the cell
+*------------------------------------------------------------------------------------
+         m_nCalls = m_nCalls+1
+         m_CeSum(iCell,1) = m_CeSum(iCell,1)+ Wt         ! sum of weights
+         m_CeSum(iCell,2) = m_CeSum(iCell,2)+ Wt*Wt      ! sum of weights squared
+         m_CeSum(iCell,3) = m_CeSum(iCell,3)+ 1d0        ! sum of 1
+         m_CeSum(iCell,4) = MIN( m_CeSum(iCell,4),Wt)    ! minium weight
+         m_CeSum(iCell,5) = MAX( m_CeSum(iCell,5),Wt)    ! maximu weight
+* Search for the best edge candidate for future cell division, prepare MC material
+         Ndivi  = (m_nDim+1)*m_nDim/2 +m_kDim
+         IF(nEdges.NE.nDivi) GOTO 970
+         DO k=1,nDivi
+            Xsu1(k)=Xsu1(k) +Xdivi(k)*Wt                 ! averages for all Xdivi
+            Xsu2(k)=Xsu2(k) +Xdivi(k)**2*Wt
+            iBin = INT(Xdivi(k)*m_nBin)+1d0
+            iBin = MIN(MAX(iBin,0),m_nBin)
+            Histo(k,iBin) = Histo(k,iBin)+Wt             ! fill histo for each edge
+c[[[[[[[[[[[[ debug [[[[[[[[[[[[ debug [[[[[[[[[[[[
+c            IF(iCell.EQ.4) THEN
+c               CALL GLK_Fil1(1200+k, Xdivi(k),Wt)
+c            ENDIF
+c]]]]]]]]]]]] debug ]]]]]]]]]]]] debug ]]]]]]]]]]]]
+         ENDDO
+         IF( m_EvPerBin.GT.0 ) THEN
+            NevEff = m_CeSum(iCell,1)**2/m_CeSum(iCell,2)
+            IF( NevEff .GE. m_nBin*m_EvPerBin) GOTO 222 !
+         ENDIF
+      ENDDO
+ 222  CONTINUE
+*///////////////////////////////////////////////////////
+*//   End of Special Short MC sampling to probe cell  //
+*///////////////////////////////////////////////////////
+
+
+*//////////////////////////////////////////////////////////////////////////////////////
+*//  Determine the best edge candidate for future cell division, 
+*//  using MC  material in Histo,Xsu1,Xsu2
+*//  kBest,xBest,yBest are the output results
+      CALL FoamA_Carver(iCell,Histo,Xsu1,Xsu2,kBest,xBest,yBest)
+*//////////////////////////////////////////////////////////////////////////////////////
+      NoMC =m_CeSum(iCell,3)
+      IF( m_CeSum(iCell,1) .LT.0d0) GOTO 920
+      m_CeXave(iCell)  = xBest                      ! best lambda for future division
+      m_CeBest(iCell)  = kBest                      ! best edge for future division
+      m_CeIntg(iCell)  = m_CeSum(iCell,1)/NoMC      ! estimator of the true integral
+*!!!!!!!!!  DrivE is for the Foam build-up (not for MC generation)    !!!!!!!!!!
+*!!!!!!!!!  PRIMARY is for MC generation (not for the Foam build-up ) !!!!!!!!!!
+      IF(     m_OptDrive.EQ.0 ) THEN
+         m_CePrim(iCell) = m_CeIntg(iCell)                   ! True integral, MC generation
+         m_CeDriv(iCell) = m_CeIntg(iCell)                   ! True integral, Foam build-up
+      ELSEIF( m_OptDrive.EQ.1 ) THEN
+         m_CePrim(iCell) = DSQRT(m_CeSum(iCell,2)/NoMC)      ! Sqrt( <w>**2 + sigma**2 )= Sqrt(<w**2>)
+         m_CeDriv(iCell) = DSQRT(m_CeSum(iCell,2)/NoMC -m_CeIntg(iCell)**2) ! sigma =Sqrt(<w**2>-<w>**2)
+      ELSEIF( m_OptDrive.EQ.2 ) THEN
+         m_CePrim(iCell) = m_CeSum(iCell,5)                  ! wtmax    , MC generation
+         m_CeDriv(iCell) = m_CeSum(iCell,5) -m_CeIntg(iCell) ! wtmax-<w>, Foam build-up
+      ELSE
+         WRITE(m_out,*) ' ++++ STOP in FoamA_Explore, wrong m_OptDrive =',m_OptDrive !
+         WRITE(    *,*) ' ++++ STOP in FoamA_Explore, wrong m_OptDrive =',m_OptDrive !
+         STOP
+      ENDIF
+* correct volume and Drive in all parent cells to the top of the tree
+      parent = m_CePare(iCell)
+      DO i = 1,m_nBuf
+         IF( parent .EQ. -1 ) GOTO 100 ! Exit if no parent exists
+         m_CeIntg(parent)  = m_CeIntg(parent)  +( m_CeIntg(iCell)  -VolOld) !
+         m_CeDriv(parent)  = m_CeDriv(parent)  +( m_CeDriv(iCell)  -DriOld) !
+         parent=m_CePare(parent)
+      ENDDO
+ 100  CONTINUE
+      RETURN
+ 920  WRITE(*,*) ' ### STOP in FoamA_Explore: something wrong with integrand ' !
+      STOP
+ 950  WRITE(*,*) ' ### STOP in FoamA_Explore: something wrong with volume calculation ' !
+      WRITE(*,*) ' Vsum,DxSp= ',Vsum,DxSp
+      STOP
+ 960  WRITE(*,*) ' ### STOP in FoamA_Explore: something wrong with best pair pointer =',kBest !
+      STOP
+ 970  WRITE(*,*) ' ### STOP in FoamA_Explore: something wrong with Ndivi =',nDivi !
+      STOP
+      END                       ! FoamA_Explore
+
+
+
+      SUBROUTINE FoamA_Carver(iCell,Histo,Xsu1,Xsu2,kBest,xBest,yBest)  !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*// Determine the best edge candidate for future cell division, using MC  material   //
+*// kBest is the best edge found, xBest and yBest are the best values of lambda      //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell,kBest
+      DOUBLE PRECISION   xBest,yBest,zBest
+      DOUBLE PRECISION   Histo(m_NdiviMax,m_nBinMax), Xsu1(m_NdiviMax), Xsu2(m_NdiviMax) !
+      DOUBLE PRECISION   Bins(m_nBinMax)
+      INTEGER            i,j,k, iBin, nDivi
+      INTEGER            iUp,iLow, jUp,jLow, kDivi, jv,iv, jDivi
+      DOUBLE PRECISION   SumWt,BinMax,This, Carve, yLevel
+      DOUBLE PRECISION   CarvOne,CarvTwo,CarvMax
+*
+      kBest =1
+      xBest =0.5d0
+      yBest =1d0
+      SumWt  = m_CeSum(iCell,1)
+      IF( SumWt .NE. 0d0) THEN
+         CarvMax = -1d150
+         nDivi  = (m_nDim+1)*m_nDim/2 +m_kDim
+         DO kDivi=1,nDivi
+            BinMax  = -1d150
+            DO iBin=1,m_nBin    ! Unload histo and Maximum bin
+               Bins(iBin) = Histo(kDivi,iBin)
+               BinMax = MAX( BinMax, Bins(iBin)) ! Maximum content/bin
+            ENDDO
+            CarvTwo = 0d0
+            DO iBin=1,m_nBin
+               Bins(iBin) = Bins(iBin)/BinMax ! Normalize to the highest bin
+               CarvTwo = CarvTwo + (1d0-Bins(iBin))/m_nBin ! Total carve
+            ENDDO
+* Find maximum 'rectangular carve' in betwen the two bins (jLow,...,jUp)
+            jLow =1
+            jUp  =m_nBin
+            CarvOne = -1d150
+            yLevel  = -1d150
+            DO iBin=1,m_nBin
+               This = Bins(iBin)
+               iLow = iBin
+               DO j=iBin,1,-1   ! walk to the left and find first bin > current
+                  IF(This .LT. Bins(j) ) GOTO 100
+                  iLow = j
+               ENDDO
+ 100           CONTINUE
+               iUp  = iBin
+               DO j=iBin,m_nBin ! walk to the right and find first bin > current
+                  IF(This .LT. Bins(j) ) GOTO 200
+                  iUp  = j
+               ENDDO
+ 200           CONTINUE
+               Carve = (iUp-iLow+1)*(1d0-This)/m_nBin
+               IF( Carve .GT. CarvOne) THEN
+                  CarvOne = Carve
+                  jLow = iLow
+                  jUp  = iUp
+                  yLevel = This
+               ENDIF
+            ENDDO               ! end-loop over histogram bins 
+*************************************************************
+**               IF( CarvOne .GT. CarvMax) THEN
+**                  CarvMax   = CarvOne
+*************************************************************
+            IF( CarvTwo .GT. CarvMax) THEN
+               CarvMax   = CarvTwo
+               kBest = kDivi    ! Best edge
+               xBest = (jLow-1d0)/m_nBin
+               yBest = (jUp*1d0)/m_nBin
+               IF(jLow .EQ. 1 )     xBest = yBest
+               IF(jUp  .EQ. m_nBin) yBest = xBest
+* division ratio in units of 1/m_nBin, testing
+               jDivi = jLow-1
+               IF(jLow .EQ. 1 )     jDivi=jUp
+**************************************************************
+* The improvement below does not seem to matter at all
+*                  IF( 0.5d0*(xBest+yBest) .LT. 0.5d0) THEN
+*                     zBest =xBest
+*                     xBest =yBest
+*                     yBest =zBest
+*                  ENDIF
+**************************************************************
+            ENDIF
+*[[[[[[[[[[[[ debug [[[[[[[[[[[[ debug [[[[[[[[[[[[[[[[[[
+*               WRITE(*,'(a,4i5,f10.5)') '==iCell,kDivi,jLow,jUp,CarvMax= ',iCell,kDivi,jLow,jUp,CarvOne !!
+*               IF(iCell.EQ.2 ) THEN
+*                  CALL GLK_Pak(  1200+kDivi,Bins)
+*                  DO iBin = 1,m_nBin
+*                     Bins(iBin) = 1d0
+*                  ENDDO
+*                  DO iBin=jLow,jUp
+*                     Bins(iBin) = yLevel
+*                  ENDDO
+*                  CALL GLK_Pak(  1400+kDivi,Bins)
+*               ENDIF
+c]]]]]]]]]]]]debug ]]]]]]]]]]]] debug ]]]]]]]]]]]]]]]]]]]
+         ENDDO                  ! end-loop over nDivi
+      ENDIF
+*[[[[[[[[[[[[ debug [[[[[[[[[[[[ debug [[[[[[[[[[[[
+*      WRITE(*,'(a,i5)')        ' FoamA_Carver , iCell = ', iCell
+*      WRITE(*,'(a,i5,3f10.5)') ' kBest,xBest,yBest= ', kBest, xBest,yBest!!
+*]]]]]]]]]]]] debug ]]]]]]]]]]]] debug ]]]]]]]]]]]]
+      END                       ! FoamA_Carver
+
+
+      SUBROUTINE FoamA_RanDiscr(Driv,nTot,Power,iRand)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   PRESENTLY UNUSED !!!                                                           //
+*//   Generates iRand in (1,nTot) acconding to discrete un-normalized probab. Driv   //
+*//   Power is normaly =1, can be useful for special purposes                        //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      DOUBLE PRECISION   Driv(*),Power
+      INTEGER            nTot,iRand
+      INTEGER            i
+      DOUBLE PRECISION   random,sum,Total
+      REAL               Qrand(10)        ! from PseuMar
+*
+      Total   = 0d0
+      DO i= 1,nTot
+         Total = Total +Driv( i)**Power
+      ENDDO
+      IF(Total .EQ. 0d0) GOTO 990
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,1)
+      ELSE
+         CALL RanLux(Qrand,1)
+      ENDIF
+      random = Qrand(1)
+      iRand  = -1
+      sum   = 0d0
+      DO i= 1,nTot
+         iRand  = i
+         sum = sum +Driv( i)**Power
+         IF( random .LT. sum/Total ) GOTO 100
+      ENDDO
+      IF(iRand .EQ. -1) GOTO 990
+ 100  CONTINUE
+      RETURN
+ 990  WRITE(*,*) ' ### STOP in FoamA_RanDiscr, something went wrong !!!!'
+      STOP
+      END
+
+
+      SUBROUTINE FoamA_MakeAlpha(Alpha)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                      //
+*//   Provides random vector Alpha, each component in (0,1) range                        //
+*//                                                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   Alpha(m_KdiMax), y
+      REAL               Qrand( m_KdiMax)        ! from PseuMar
+      INTEGER            i,k
+*     --------------------------------------------------------
+      IF( m_kDim.LT.0 .OR. m_kDim.GT.m_KdiMax) THEN
+         WRITE(*,*) 'STOP in FoamA_MakeAlpha: m_kDim=',m_kDim
+         STOP
+      ENDIF
+      IF(m_kDim.LE.0) RETURN
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,m_kDim)
+      ELSE
+         CALL RanLux(Qrand,m_kDim)
+      ENDIF
+      DO k =1,m_kDim
+         Alpha(k)=Qrand(k)
+      ENDDO
+      END
+
+      SUBROUTINE FoamA_MakeLambda(Lambda)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                      //
+*//   Provides random vector Lambda such that Sum Lamba(i) = 1, with uniform probab.     //
+*//   This  vector is used to populate uniformly the interior of a simplex.              //
+*//   The method is: generate point inside cube, order components (maping into simplex)  //
+*//   and take differences of Lambda(i+1) - Lambda(i)                                    //
+*//                                                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            i,k
+      DOUBLE PRECISION   Lambda(m_NdiMax), y
+      REAL               Qrand( m_NdiMax)        ! from PseuMar
+      REAL               x
+*     --------------------------------------------------------
+      IF(m_nDim.LE.0) RETURN
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,m_nDim)
+      ELSE
+         CALL RanLux(Qrand,m_nDim)
+      ENDIF
+* ordering vector components (maping into simplex)
+      DO i =m_nDim,1,-1
+         DO k =2,i
+            IF( Qrand(k).LT.Qrand(k-1)) THEN
+               x            = Qrand(k)
+               Qrand(k)    = Qrand(k-1)
+               Qrand(k-1)  = x
+            ENDIF
+         ENDDO
+      ENDDO
+* Sum of lambdas should equal one
+      Lambda(1)=Qrand(1)
+      DO k =2,m_nDim
+         Lambda(k)=Qrand(k)-Qrand(k-1)
+      ENDDO
+      END                       ! MakeLambda
+
+
+      SUBROUTINE FoamA_Determinant(R,Det)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Calculates determinant of matrix R                                             //
+*//   Use of Laplace formula should be perhaps replaced with something faster        //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   R(m_NdiMax,m_NdiMax),Det
+      DOUBLE PRECISION   FoamA_Det2Lapl, FoamA_Det3Lapl,FoamA_Det4Lapl,FoamA_Det5Lapl !
+*     -------------------------------------------------
+      IF(        m_nDim .EQ. 1) THEN
+         Det= R(1,1)
+      ELSEIF(    m_nDim .EQ. 2) THEN
+         Det= FoamA_Det2Lapl(R, 1,2)
+      ELSEIF(    m_nDim .EQ. 3) THEN
+         Det= FoamA_Det3Lapl(R, 1,2,3)
+      ELSEIF(    m_nDim .EQ. 4) THEN
+         Det= FoamA_Det4Lapl(R, 1,2,3,4)
+      ELSEIF(    m_nDim .EQ. 5) THEN
+         Det= FoamA_Det5Lapl(R, 1,2,3,4,5)
+      ELSE
+         WRITE(*,*) '####FoamA_Determinant: STOP, m_nDim =',m_nDim
+         STOP
+      ENDIF
+      END                       ! FoamA_Determinant
+
+      DOUBLE PRECISION FUNCTION FoamA_Det2Lapl(R,i1,i2)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   R(m_NdiMax,m_NdiMax),Det
+      INTEGER  i1,i2
+*     ------------------------------------------------------------
+      FoamA_Det2Lapl= R(1,i1)*R(2,i2) - R(1,i2)*R(2,i1)
+      END
+
+
+      DOUBLE PRECISION FUNCTION FoamA_Det3Lapl(R,i1,i2,i3)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Determinat Laplace method                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   R(m_NdiMax,m_NdiMax),Det,FoamA_Det2Lapl
+      INTEGER  i1,i2,i3
+*     ------------------------------------------------------------
+      FoamA_Det3Lapl=+R(3,i1) *FoamA_Det2Lapl(R,i2,i3)
+     $               -R(3,i2) *FoamA_Det2Lapl(R,i1,i3)
+     $               +R(3,i3) *FoamA_Det2Lapl(R,i1,i2)
+      END
+
+      DOUBLE PRECISION FUNCTION FoamA_Det4Lapl(R,i1,i2,i3,i4)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Determinat Laplace method                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   R(m_NdiMax,m_NdiMax),Det,FoamA_Det3Lapl
+      INTEGER  i1,i2,i3,i4
+*     ------------------------------------------------------------
+      FoamA_Det4Lapl=-R(4,i1) *FoamA_Det3Lapl(R,i2,i3,i4)
+     $               +R(4,i2) *FoamA_Det3Lapl(R,i1,i3,i4)
+     $               -R(4,i3) *FoamA_Det3Lapl(R,i1,i2,i4)
+     $               +R(4,i4) *FoamA_Det3Lapl(R,i1,i2,i3)
+      END
+
+      DOUBLE PRECISION FUNCTION FoamA_Det5Lapl(R,i1,i2,i3,i4,i5)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Determinat Laplace method                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   R(m_NdiMax,m_NdiMax), Det, FoamA_Det4Lapl
+      INTEGER  i1,i2,i3,i4,i5
+*     ------------------------------------------------------------
+      FoamA_Det5Lapl=+R(5,i1) *FoamA_Det4Lapl(R,i2,i3,i4,i5)
+     $               -R(5,i2) *FoamA_Det4Lapl(R,i1,i3,i4,i5)
+     $               +R(5,i3) *FoamA_Det4Lapl(R,i1,i2,i4,i5)
+     $               -R(5,i4) *FoamA_Det4Lapl(R,i1,i2,i3,i5)
+     $               +R(5,i5) *FoamA_Det4Lapl(R,i1,i2,i3,i4)
+      END
+
+
+      SUBROUTINE FoamA_Grow(funW)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Grow new cells by division                                                     //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            i,RC,iCell
+*---------------------------------------------
+* Final division
+      DO i=1,100000
+         IF(  m_OptPeek .EQ. 0 ) THEN
+            CALL FoamA_PeekMax(  iCell)       ! choose cell with maximum Drive
+         ELSE
+            CALL FoamA_PeekRand1(iCell)       ! randomly choose one cell
+         ENDIF
+         CALL FoamA_Divide( iCell,funW,RC)    ! and divide it into two
+c[[[[
+c         CALL FoamA_BufPrint(    m_Out)
+c         CALL FoamA_VertPrint(  6)
+c]]]]
+         IF(RC.EQ.-1) GOTO 300
+      ENDDO
+ 300  CONTINUE
+      WRITE(16,*) '######################### FoamA_Grow #####################'
+*****[[[[[[ debug
+***** CALL FoamA_BufPrint(    6)
+***** CALL FoamA_BufActPrint( 6)
+***** CALL FoamA_VertPrint(   6)
+*****]]]]]]
+      CALL FoamA_Check(6,0)
+      END                       ! FoamA_Grow
+
+      SUBROUTINE FoamA_PeekMax(iCell)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Create list of active cells (pointers) using DrivE                             //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER   iCell
+      INTEGER   i
+      DOUBLE PRECISION  DrivMax, Driv
+*     ---------------------------------------------------
+      iCell = 0
+      DrivMax = -1d150
+      DO i = 1,m_LastCe
+         IF( m_CeStat(i).EQ.1 ) THEN
+            Driv=  ABS(m_CeDriv(i))
+            IF(Driv .GT. DrivMax) THEN
+               DrivMax = Driv
+               iCell = i
+            ENDIF
+         ENDIF
+      ENDDO
+****  WRITE(*,*) '###>>> FoamA_PeekMax: iCell=',iCell
+      IF(iCell.EQ.0) THEN
+         WRITE(*,*) '### STOP in FoamA_PeekMax: not found iCell=', iCell
+         STOP
+      ENDIF
+      END                       ! FoamA_PeekMax
+
+
+      SUBROUTINE FoamA_PeekRand1(iCell)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//       Peek up randomly TREE-WISE the pointer iCell of an active cell             //
+*//                        Using DrivE                                               //
+*// We walk randomly from top of tree downwards until we find active cell m_CeStat=1 //
+*// At each step one of daugters cells is choosen randomly according                 //
+*// to their volume estimates.                                                       //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell
+      INTEGER            kCell,i,Dau1,Dau2,iDau
+      DOUBLE PRECISION   random,p1,volu1,volu2,volu,TotDri,sum
+      REAL               Qrand(10)        ! from PseuMar
+*     ----------------------------------------------------------------
+* first cell is special because it has nDim-factorial daughters, istead of just 2
+      iCell=1
+      IF(m_CeStat(iCell).EQ.1) RETURN ! In case of cubics firs cell may be active
+      kCell = 1
+      Dau1  = m_CeDau1(kCell)
+      Dau2  = m_CeDau2(kCell)
+      TotDri   = 0d0
+      DO iCell= Dau1,Dau2
+         TotDri = TotDri+m_CeDriv( iCell )
+      ENDDO
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,1)
+      ELSE
+         CALL RanLux(Qrand,1)
+      ENDIF
+      random = Qrand(1)
+      iDau  = -1
+      sum   = 0d0
+      DO iCell= Dau1,Dau2
+         iDau  = iCell
+         sum = sum+m_CeDriv( iCell )
+         IF( random .LT. sum/TotDri ) GOTO 100
+      ENDDO
+      IF(iDau.EQ.-1) GOTO 990
+ 100  kCell=iDau
+****[[[[[[[[[[[[[[[[
+****  WRITE(*,*) '%%%%%%%%%%%%%%%%%%%%%% FoamA_PeekRand1: top daughter =',kCell
+****]]]]]]]]]]]]]]]]
+      IF( m_CeStat( kCell ) .EQ. 1 ) GOTO 300
+* now the other standard cells with 2 daughters
+      DO i=1,10000000
+         IF( m_CeStat( kCell ) .EQ. 1 ) GOTO 300
+         volu1= m_CeDriv( m_CeDau1(kCell) )
+         volu2= m_CeDriv( m_CeDau2(kCell) )
+         p1 = volu1/(volu1+volu2)
+         IF(m_OptRanLux.EQ.-1) THEN
+            CALL PseuMar_MakeVec(Qrand,1)
+         ELSE
+            CALL RanLux(Qrand,1)
+         ENDIF
+         random = Qrand(1)
+         IF( random .LT. p1 ) THEN
+            kCell = m_CeDau1(kCell)
+         ELSE
+            kCell = m_CeDau2(kCell)
+         ENDIF
+****[[[[[[[[[[[[[[[[[[[[
+****  WRITE(*,*) '%%%%%%%%%%%%%%%%%%%%%% FoamA_PeekRand1: normal daughter =',kCell
+****]]]]]]]]]]]]]]]]]]]]]
+      ENDDO
+      GOTO 990
+ 300  CONTINUE
+      iCell=kCell
+****[[[[[[[[[[[[[[[[[[[[
+****  WRITE(*,*) '%%%%%%%%%%%%%%%%%%%%%% FoamA_PeekRand1: choosen cell =',kCell
+****]]]]]]]]]]]]]]]]]]]]]
+      RETURN
+ 990  WRITE(*,*) ' ### STOP in FoamA_PeekRand1, something went wrong !!!!'
+      STOP
+      END                       !!! FoamA_PeekRand1
+
+
+      SUBROUTINE FoamA_Divide(iCell,funW,RC)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Divide cell iCell into two daughter cells                                      //
+*//   The iCell is retained and taged as inactive, daughter cells are appended       //
+*//   at the end of the buffer.                                                      //
+*//   New vertex is added to list of vertice.                                        //
+*//   List of active cells is updated, iCell remooved, two daughters added           //
+*//   and their properties set with help of MC sampling (FoamA_Explore)              //
+*//   Return Code RC=-1 of buffer limit is reached,  m_LastCe=m_nBuf                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell,RC
+      INTEGER            Dau1, Dau2, kVer1(m_NdiMax+1), kVer2(m_NdiMax+1),p1,p2 !
+      DOUBLE PRECISION   HcPosi1(m_KdiMax),   HcSize1(m_KdiMax)
+      DOUBLE PRECISION   HcPosi2(m_KdiMax),   HcSize2(m_KdiMax)
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            Old1,Old2,j,k,jv,iv,nEdges,kBest,kDivi,NoMC
+      DOUBLE PRECISION   Xave
+      INTEGER            nDivi,nDivi0
+*--------------------------------------------------------------------------------------
+      RC = 0
+      IF( m_LastCe+2 .GT. m_nBuf) GOTO 990 !! abort if no space in buffer
+* reset cell as inactive
+      m_CeStat(iCell) = 0
+*------------------------------------------------------------------------------------
+* Define lists of vertices for daughters, initially inherited...
+      IF(m_nDim .GT. 0) THEN
+         DO jv=1,m_nDim+1
+            kVer1(jv) = m_CeVert(iCell,jv)
+            kVer2(jv) = m_CeVert(iCell,jv)
+         ENDDO
+      ENDIF
+* Position and size initially also inherited
+      DO j=1,m_kDim
+         HcPosi1(j)=m_CeVer1(iCell,j)
+         HcSize1(j)=m_CeVer2(iCell,j)
+         HcPosi2(j)=m_CeVer1(iCell,j)
+         HcSize2(j)=m_CeVer2(iCell,j)
+      ENDDO
+*--------------------------------------------------------------------------------------
+      nDivi  = (m_nDim+1)*m_nDim/2 +m_kDim
+      nDivi0 = (m_nDim+1)*m_nDim/2
+      kBest  = m_CeBest(iCell)
+      IF( kBest.LE.nDivi0) THEN
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   The best division in simplical subspace
+*//////////////////////////////////////////////////////////////////////////////////////
+         m_LastVe=m_LastVe+1    ! add new vertex to the list
+         IF(m_LastVe.GT.m_vMax) GOTO 980
+         Xave  = m_CeXave(iCell)
+         nEdges=0
+         DO jv=1,m_nDim+1
+            DO iv=jv+1,m_nDim+1
+               nEdges=nEdges+1
+               IF( nEdges.EQ.kBest) THEN
+                  p1 =  m_CeVert(iCell,jv)
+                  p2 =  m_CeVert(iCell,iv)
+                  DO j=1,m_nDim
+                     m_VerX(m_LastVe,j) = Xave*m_VerX(p1,j) + (1d0-Xave)*m_VerX(p2,j) ! New Vertex
+                  ENDDO
+                  Old1=jv
+                  Old2=iv
+                  GOTO 100
+               ENDIF
+            ENDDO
+         ENDDO
+ 100     CONTINUE
+         kVer1(Old1)=m_LastVe   ! one old vertex replaced by new one
+         kVer2(Old2)=m_LastVe   ! one old vertex replaced by new one
+      ELSE
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   The best division in hypercubical subspace
+*//   Position and size inherited except one direction k=kDivi
+*//////////////////////////////////////////////////////////////////////////////////////
+         Xave  = m_CeXave(iCell)
+         kDivi = kBest-nDivi0
+         HcPosi1(kDivi)=      m_CeVer1(iCell,kDivi)        ! (1) Position unchanged
+         HcSize1(kDivi)= Xave*m_CeVer2(iCell,kDivi)        ! (1) Size reduced by Xave
+         HcPosi2(kDivi)= HcPosi1(kDivi) +HcSize1(kDivi)    ! (2) Position shifted
+         HcSize2(kDivi)= (1d0-Xave)*m_CeVer2(iCell,kDivi)  ! (2) Size reduced by (1-Xave)
+      ENDIF
+* define two daughter cells (active)
+      NoMC= m_nSampl
+* ------------------------ Stat, Pare, Dau1,Dau2, MCsampl, VertList, Position,Size,  iCeNew
+      CALL FoamA_DefCell(  1, iCell,  -1,  -1,    NoMC,   kVer1,  HcPosi1, HcSize1, Dau1) !
+      CALL FoamA_DefCell(  1, iCell,  -1,  -1,    NoMC,   kVer2,  HcPosi2, HcSize2, Dau2) !
+      m_CeDau1(iCell) = Dau1
+      m_CeDau2(iCell) = Dau2
+      CALL FoamA_Explore(Dau1,funW)
+      CALL FoamA_Explore(Dau2,funW)
+* Update list of active cells, only for internal tests
+      CALL FoamA_ActUpda
+      RETURN
+ 990  RC=-1                     !!buffer limit is reached,  m_LastCe=m_nBuf
+      RETURN
+ 980  WRITE(*,*) ' ### STOP in FoamA_Divide: too short list of vertices '
+      STOP
+      END                       ! FoamA_Divide
+
+
+
+      SUBROUTINE FoamA_ActUpda     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Create list of active cells (pointers)                                         //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER   iCell,Dau1,Dau2
+      INTEGER   i
+*     ---------------------------------------------------
+      m_LastAc=0
+      DO iCell = 1,m_LastCe
+         IF( m_CeStat(iCell).EQ.1 ) THEN
+            m_LastAc=m_LastAc+1
+            IF(m_LastAc .EQ. m_cMax) GOTO 950
+            m_ActC(m_LastAc) = iCell
+         ENDIF
+      ENDDO
+      RETURN
+ 900  WRITE(*,*) '### STOP in FoamA_ActUpda: not found iCell=', iCell
+      STOP
+ 950  WRITE(*,*) '### STOP in FoamA_ActUpda: list of active cells too short'
+      STOP
+      END                       ! FoamA_ActUpda
+
+
+      SUBROUTINE FoamA_CellGener(iCell)     !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//       Peek up randomly pointer iCell of an active cell according to PRIMARY      //
+*//       Straightforward way, using list of active pointes made by ActUpda          //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell
+      INTEGER            kCell,i,Dau1,Dau2,iDau
+      DOUBLE PRECISION   random,x1,TotPrim
+      INTEGER            klower,kuper,krange,kurrent,DipSwitch
+      REAL               Qrand(10)        ! from PseuMar
+      INTEGER   iCont
+      DATA      iCont/0/
+      iCont = iCont+1
+*     ----------------------------------------------------------------
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,1)
+      ELSE
+         CALL RanLux(Qrand,1)
+      ENDIF
+      random = Qrand(1)
+*     ---------------------------------------------------
+      TotPrim = m_CePrCu(m_LastAc)
+      x1 = TotPrim *random
+      DipSwitch=0               ! =0 is faater
+      IF( DipSwitch.EQ.1) THEN
+*-------- primitive method --------
+         DO kCell = 1,m_LastAc
+            iCell = m_ActC(kCell)
+            IF( m_CePrCu(kCell) .GE. x1 ) GOTO 800
+         ENDDO
+         WRITE(*,*) '### STOP1 in FoamA_CellGener: something wrong' !
+         STOP
+ 800     CONTINUE
+      ELSEIF( DipSwitch.EQ.0) THEN
+*-------- a bit more sophisticated/faster method ------
+         klower   = 0
+         kuper    = m_LastAc
+         DO i=1,m_LastAc
+            krange   = (kuper-klower+1)/2
+            kurrent  = klower +krange
+            IF( x1 .LE. m_CePrCu(kurrent) ) THEN
+               kuper = kurrent
+            ELSE
+               klower = kurrent
+            ENDIF
+            IF(kuper-klower.LE.1) GOTO 850
+         ENDDO
+         WRITE(*,*) ' STOP in FoamA_CellGener'
+         STOP
+ 850     CONTINUE
+         iCell = m_ActC(kuper)
+         kCell = kuper
+      ELSE
+         iCell = m_ActC(1)      ! nonsense for tests
+      ENDIF
+***** IF(iCont.LE.10) WRITE(*,*) 'LastAc,kCell,iCell = ',m_LastAc,kCell,iCell !! debug
+      END                       ! FoamA_CellGener
+
+
+      SUBROUTINE FoamA_MakeEvent(funW)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Generates point/vector Xrand with the weight MCwt                              //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            iCell,i,j,iv
+      DOUBLE PRECISION   Wt,x1,x2,Dx,MCwt
+      DOUBLE PRECISION   Alpha( m_KdiMax) ! Hyper-Cubic subspace
+      DOUBLE PRECISION   Lambda(m_NdiMax) ! Simplical subspace
+*     -----------------------------------------------------------------
+*     choose randomly one cell
+      CALL FoamA_CellGener( iCell)
+*     generate randomly/uniformly vector Vrand inside this simplex
+      CALL FoamA_MakeAlpha( Alpha)
+      CALL FoamA_MakeLambda(Lambda)
+      DO j=1,m_nDim
+         m_MCvector(j) = m_VerX( m_CeVert(iCell,m_nDim+1) ,j)
+         DO iv=1,m_nDim
+            m_MCvector(j) = m_MCvector(j) 
+     $           +Lambda(iv)*( m_VerX( m_CeVert(iCell,iv) ,j) -m_VerX( m_CeVert(iCell,m_nDim+1) ,j) ) !
+         ENDDO
+      ENDDO
+      DO j=1,m_kDim
+         m_MCvector(m_nDim+j) = m_CeVer1(iCell,j) +Alpha(j)*m_CeVer2(iCell,j) ! hypcubic subspace
+      ENDDO
+      Dx = m_CeVolu(iCell)      ! Cartesian volume of the Cell
+*[[[[[[[[[[[[
+***** CALL FoamA_TestNewConcept(iCell)
+*]]]]]]]]]]]]
+* weight average normalised to PRIMARY integral over the cell
+      MCwt =funW(m_MCvector)*Dx/m_CePrim(iCell) ! PRIMARY controls normalization
+      m_nCalls =  m_nCalls+1
+      m_MCwt   =  MCwt
+* accumulation of statistics for the main MC weight
+      m_SumWt  =  m_SumWt  +MCwt         ! sum of Wt
+      m_SumWt2 =  m_SumWt2 +MCWt*MCwt    ! sum of Wt**2
+      m_NevGen =  m_NevGen +1d0          ! sum of 1d0
+      m_WtMax  =  MAX(m_WtMax,MCwt)      ! maximum wt
+      m_WtMin  =  MIN(m_WtMin,MCwt)      ! minimum wt
+* update also weight sums in the cell,
+* note weights here are normalized absolutely, eg. to the value of the integral
+      Wt = MCwt*m_CePrim(iCell)
+      m_CeSum(iCell,1) = m_CeSum(iCell,1)+ Wt      ! sum of weights
+      m_CeSum(iCell,2) = m_CeSum(iCell,2)+ Wt*Wt   ! sum of weights squared
+      m_CeSum(iCell,3) = m_CeSum(iCell,3)+ 1d0     ! sum of 1
+      m_CeSum(iCell,4) = MIN( m_CeSum(iCell,4),Wt) ! minium weight
+      m_CeSum(iCell,5) = MAX( m_CeSum(iCell,5),Wt) ! maximu weight
+      END                       ! FoamA_MakeEvent
+
+      SUBROUTINE FoamA_GetMCvector(MCvector)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION  MCvector(*)
+      INTEGER           k
+*-----------------------
+      DO k=1,m_Dimen
+         MCvector(k)    = m_MCvector(k)
+      ENDDO
+      END
+
+      SUBROUTINE FoamA_GetMCwt(MCwt)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION  MCwt
+*-----------------------
+      MCwt    = m_MCwt
+      END
+
+      SUBROUTINE FoamA_MCgenerate(funW,MCvector,MCwt)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Obsolete                                                                       //
+*//   Generates point/vector MCvector with the weight MCwt                           //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION   MCvector(*),MCwt
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            j
+*     ---------------------------------------------------------------
+      CALL FoamA_MakeEvent(funW)
+      MCwt = m_MCwt
+      DO j=1,m_Dimen
+         MCvector(j) =m_MCvector(j)
+      ENDDO
+      END                       !!FoamA_MCgenerate
+
+
+      SUBROUTINE FoamA_Finalize(MCresult,MCerror)    !# Finalization
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   After MC run is completed it calculates integral and its error         //
+*//   Also prints some information/statistics on the MC run                  //
+*//   Remember that PRIMARY controls normalization of the integration        //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+*
+      DOUBLE PRECISION     MCresult,MCerror,MCerelat
+      DOUBLE PRECISION     Vtot,Verr,VerRela,TotPrim
+      INTEGER              kCell,iCell
+*-----------------------------------------------------------------------------
+      MCresult =0d0
+      MCerelat =1d0
+      TotPrim = 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         TotPrim = TotPrim +m_CePrim( iCell )
+      ENDDO
+      IF(m_NevGen .GT. 0) THEN
+         MCresult = TotPrim *m_SumWt/m_NevGen
+         IF(m_SumWt.NE.0d0)  MCerelat  = m_SumWt2/m_SumWt**2 -1d0/m_NevGen !
+         IF(MCerelat.GT.0d0) MCerelat =  SQRT( ABS(MCerelat) ) !
+         IF(MCerelat.LT.0d0) MCerelat = -SQRT( ABS(MCerelat) ) !
+      ENDIF
+      MCerror = MCresult*MCerelat
+* some test printouts
+      WRITE(m_Out,'(3a)') '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||' !
+      WRITE(m_Out,'(3a)') '||||||||||||||||||||||||||||||', ' FoamA_Finalize ', !
+     $                    '||||||||||||||||||||||||||||||'
+      WRITE(m_Out,'(a,2g18.9,f11.7)')               'MCresult, MCerror, Errela= ',MCresult,MCerror,MCerelat !
+      WRITE(m_Out,'(a,2f11.5)')                     'Minimum maximum weight   = ',m_WtMin,m_WtMax !
+      IF(m_NevGen .GT. 0) WRITE(m_Out,'(a,2f11.5)') 'Average wt SumWt/NevGen  = ',m_SumWt/m_NevGen !
+      WRITE(m_Out,'(a,i15)')                        'Total of function calls  = ',m_nCalls !
+      WRITE(m_Out,'(a,2i15)')                       'Number of cells&vertices = ',m_LastCe,m_LastVe !
+      WRITE(m_Out,'(a,f12.1,2g18.9)')               'NevGen,SumWt,m_SumWt2    = ',m_NevGen,m_SumWt,m_SumWt2 !
+      END       ! FoamA_Finalize
+
+
+
+      SUBROUTINE FoamA_GetTotPrim(TotPrim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Total integral from cell statistics, including initialization + MC generation  //
+*//   It can be invoked just after initialization or after MC generation             //
+*//   Note that this estimate is distorted slightly if vertices are included in      //
+*//   the exploration of the cells.                                                  //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      INCLUDE 'FoamA.h'
+      DOUBLE PRECISION  TotPrim,Sum
+      INTEGER   kCell,  iCell      
+      Sum = 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         Sum = Sum +m_CePrim( iCell )
+      ENDDO
+      TotPrim=Sum
+      END
+
+
+      SUBROUTINE FoamA_SetnDim(nDim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nDim
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_nDim = nDim
+      m_Dimen=m_nDim+m_kDim
+      END                       !!! FoamA_SetnDim
+
+      SUBROUTINE FoamA_SetkDim(kDim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      kDim
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_kDim = kDim
+      m_Dimen=m_nDim+m_kDim
+      END                       !!! FoamA_SetnDim
+
+      SUBROUTINE FoamA_GetnDim(nDim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nDim
+*     -------------------------------------------------
+      nDim = m_nDim
+      END                       !!! FoamA_SetnDim
+
+      SUBROUTINE FoamA_GetkDim(kDim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      kDim
+*     -------------------------------------------------
+      kDim = m_kDim
+      END                       !!! FoamA_SetkDim
+
+      SUBROUTINE FoamA_GetnCalls(nCalls)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nCalls
+*     -------------------------------------------------
+      nCalls = m_nCalls
+      END                       !!! FoamA_SetnCalls
+
+      SUBROUTINE FoamA_SetnBuf(nBuf)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nBuf
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_nBuf = nBuf
+      END                       !!! FoamA_SetnBuf
+
+      SUBROUTINE FoamA_SetnBin(nBin)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nBin
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_nBin = nBin
+      END                       !!! FoamA_SetnBin
+
+      SUBROUTINE FoamA_SetOut(Out)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      Out
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_Out = Out
+      END                       !!! FoamA_SetOut
+
+      SUBROUTINE FoamA_SetChat(Chat)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      Chat
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_Chat = Chat
+      END                       !!! FoamA_SetChat
+
+      SUBROUTINE FoamA_SetnSampl(nSampl)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      nSampl
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_nSampl = nSampl
+      END                       !!! FoamA_SetnSampl
+
+      SUBROUTINE FoamA_SetOptDrive(OptDrive)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptDrive
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptDrive = OptDrive
+      END                       !!! FoamA_SetOptDrive
+
+      SUBROUTINE FoamA_SetEvPerBin(EvPerBin)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      EvPerBin
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_EvPerBin = EvPerBin
+      END                       !!! FoamA_SetEvPerBin
+
+      SUBROUTINE FoamA_SetOptPeek(OptPeek)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptPeek
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptPeek = OptPeek
+      END                       !!! FoamA_SetOptPeek
+
+      SUBROUTINE FoamA_SetOptEdge(OptEdge)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptEdge
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptEdge = OptEdge
+      END                       !!! FoamA_SetOptEdge
+
+      SUBROUTINE FoamA_SetOptOrd(OptOrd)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptOrd
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptOrd = OptOrd
+      END                       !!! FoamA_SetOptOrd
+
+
+      SUBROUTINE FoamA_SetOptRanIni(OptRanIni)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptRanIni
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptRanIni = OptRanIni
+      END                       !!! FoamA_SetOptRanIni
+
+      SUBROUTINE FoamA_SetOptRanLux(OptRanLux)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER      OptRanLux
+*     -------------------------------------------------
+      CALL FoamA_PreInitialize
+      m_OptRanLux = OptRanLux
+      END                       !!! FoamA_SetOptRanLux
+
+      SUBROUTINE FoamA_Check(mout,level)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//  Checks all pointers, It is is a usefull autodiagnostic.                         //
+*//                                                                                  //
+*//  level=0, no printout, failures causes STOP                                      //
+*//  level=1, printout, failures lead to WARNINGS only                               //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER       mout,level
+      INTEGER       nFailures, iCell, Dau1,Dau2, Pare, NoRefs(m_vMax), iVe,n !
+      INTEGER       NoEmpty, iError
+*     ---------------------------------------------------------
+      nFailures=0
+      iError   =0
+      IF(level.EQ.1) WRITE(mout,*)
+     $'//////////////////////////////////////// FoamA_Checks /////////////////////////////////////////////' !
+      DO iCell = 1,m_LastCe
+         Dau1 = m_CeDau1(iCell)
+         Dau2 = m_CeDau2(iCell)
+         Pare = m_CePare(iCell)
+* checking on parents
+         IF(iCell.GT.1) THEN
+            IF(Pare.GT.m_LastCe) THEN
+               iError   =1
+               nFailures = nFailures+1
+               IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' Parent out of range = ',Pare !
+            ENDIF
+         ENDIF
+         IF(iCell.GT.1) THEN
+            IF(  (Pare.NE.1) .AND. (m_CeDau1(Pare).NE.iCell) .AND. (m_CeDau2(Pare).NE.iCell)  ) THEN !
+               iError   =2
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' Parent not pointing to this daughter Pare= ',Pare !
+            ENDIF
+         ENDIF
+* checking on daughters
+         IF( Dau1 .GT. m_LastCe ) THEN
+            iError   =3
+            nFailures = nFailures+1
+            IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' First  Daugter out of range Dau1= ',Dau1 !
+         ENDIF
+         IF( Dau2 .GT.m_LastCe ) THEN
+            iError   =4
+            nFailures = nFailures+1
+            IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' Second Daugter out of range Dau2= ',Dau2 !
+         ENDIF
+         IF( Dau1.GE.1 .AND. Dau1.LE. m_LastCe) THEN
+            IF( m_CePare(Dau1).NE.iCell ) THEN
+               iError   =5
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' First  Daugter not pointing to parent Dau1= ',Dau1 !
+            ENDIF
+         ENDIF
+         IF( Dau2.GE.1 .AND. Dau2.LE. m_LastCe) THEN
+            IF( m_CePare(Dau2).NE.iCell ) THEN
+               iError   =6
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' Second Daugter not pointing to parent Dau2= ',Dau2 !
+            ENDIF
+         ENDIF 
+      ENDDO
+* check on vertices
+      DO iVe = 1, m_LastVe
+         NoRefs(iVe)=0
+      ENDDO
+      DO iVe = 1, m_LastVe
+         DO iCell = 1, m_LastCe
+            DO n=1,m_nDim+1
+               IF( iVe .EQ. m_CeVert(iCell,n) ) NoRefs(iVe) =1
+            ENDDO
+         ENDDO
+      ENDDO
+      DO iVe = 1, m_LastVe
+         IF(NoRefs(iVe).EQ.0 .AND.  level.EQ.1) WRITE(mout,*) '***** Vertex no. ',iVe, '  NOT referenced!' !
+      ENDDO
+* Check for empty cells
+      NoEmpty = 0d0
+      DO iCell = 1,m_LastCe
+         IF( m_CeStat(iCell).EQ.1 ) THEN
+            IF( m_CeDriv(iCell) .EQ. 0d0) NoEmpty = NoEmpty +1
+         ENDIF
+      ENDDO
+      IF( NoEmpty.GT.0) THEN
+         WRITE(mout,*) '++++++++++ FoamA_Check: !!! WARNING!!!! Empty Cells found NoEmpty= ',NoEmpty !
+         WRITE(   *,*) '++++++++++ FoamA_Check: !!! WARNING!!!! Empty Cells found NoEmpty= ',NoEmpty !
+      ENDIF
+* summary
+      IF(level.EQ.1) WRITE(mout,*) '++++++++++ FoamA_Check has found total ', nFailures, ' failures ' !
+      IF(level.EQ.1) WRITE(mout,*)
+     $'///////////////////////////////////////////////////////////////////////////////////////////////////' !
+      IF(level.EQ.0 .AND. nFailures.GT.0 ) THEN
+         WRITE(mout,*) '++++++++++ STOP in FoamA_Check, found total ', nFailures, ' failures ' !
+         WRITE(mout,*) '++++++++++ iErro= ',iError
+         STOP
+      ENDIF
+      END                       ! FoamA_Check
+
+
+
+      SUBROUTINE FoamA_BufPrint(mout)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   all cells                                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell,mout,active,j
+*     ----------------------------------------------------------------
+      active  =0
+      WRITE(mout,'(3a)') '==============================================', ' ALL-CELLS ',
+     $                   '=============================================='
+      WRITE(mout,'(3a)') 
+     $     ' iCell  Stat  Pare  Dau1  Dau2 kBest       Xave     Volume      Drive  TrueInteg  Ver1  Ver2  ...'
+      DO iCell = 1, m_LastCe
+         WRITE(mout,'(6i6,4f11.5,20i6)')
+     $        iCell, m_CeStat(iCell),  m_CePare(iCell), m_CeDau1(iCell), m_CeDau2(iCell), !
+     $        m_CeBest(iCell),                          ! pointer to best division
+     $        m_CeXave(iCell),                          ! factor for Best division 
+     $        m_CeVolu(iCell),                          ! Cartesian Volume
+     $        m_CeDriv(iCell),                          ! Drive 
+     $        m_CeIntg(iCell),                          ! TrueInteg
+     $        (m_CeVert(iCell,j), j=1,m_nDim+1)         ! vertices
+         IF(m_kDim .GT. 0 ) THEN
+            WRITE(mout,'(a,(50g11.6))')
+     $           '       HypCubs Posit&Size: ',
+     $           (m_CeVer1(iCell,j), j=1,m_kDim), ! position
+     $           (m_CeVer2(iCell,j), j=1,m_kDim)  ! size
+         ENDIF
+         IF(m_CeStat(iCell).EQ.1) active  = active +1
+      ENDDO
+      WRITE(mout,*) ' All cells: ',m_LastCe, ' Active: ', active
+      END                       !! FoamA_BufPrint
+
+
+
+      SUBROUTINE FoamA_BufActPrint(mout)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Active cells only                                                              //
+*//   Side=1 indicates that this cell is "side leaf" sticking out of main branch     //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell,mout,active,Side,Pare,j
+      DOUBLE PRECISION   DriRat,IntgSum,DrivSum,Fact,WtMin,WtMax
+      DOUBLE PRECISION   AveWt, Sigma, Nentry
+*     ----------------------------------------------------------------
+      WRITE(mout,'(3a)') '==================================================', ' ACTIVE CELLS ',
+     $                   '=================================================='
+      IntgSum =0d0
+      DrivSum =0d0
+      WtMin   =  1d60
+      WtMax   = -1d60
+      active  =0
+      WRITE(mout,'(2a)') ' iCell Stat Pare Dau1 Dau2',
+     $   '     WtMin      WtMax        <w>  sigma/<w>     Volume      Drive    TrueInt   Ver1  Ver2 ...' !
+      DO iCell = 1, m_LastCe
+         IF(m_CeStat(iCell).EQ.1) THEN
+            Nentry = m_CeSum(iCell,3)
+            AveWt  = m_CeSum(iCell,1)/m_CeSum(iCell,3)
+            Sigma  = DSQRT(  ABS(m_CeSum(iCell,2)/Nentry - AveWt**2))
+            IF(AveWt.NE.0d0) WtMin = Min( WtMin, m_CeSum(iCell,4)/AveWt)
+            IF(AveWt.NE.0d0) WtMax = Max( WtMax, m_CeSum(iCell,5)/AveWt)
+            IF(AveWt.NE.0d0) Sigma = Sigma/AveWt
+            WRITE(mout,'(5i5, 7f11.5 ,10i5)') 
+     $           iCell, m_CeStat(iCell),  m_CePare(iCell),  m_CeDau1(iCell), m_CeDau2(iCell), !
+     $           m_CeSum(iCell,4),       ! minWt/AveWt
+     $           m_CeSum(iCell,5),       ! maxWt/AveWt
+     $           m_CeIntg(iCell) /(m_CeDriv(iCell)+1d-100), ! average weight
+     $           Sigma/(AveWt+1d-100),   ! sigma/AveWt
+     $           m_CeVolu(iCell),        ! Cartesian volume
+     $           m_CeDriv(iCell),        ! Driver Integral
+     $           m_CeIntg(iCell),        ! True   Integral
+     $           (m_CeVert(iCell,j), j=1,m_nDim+1) ! vertices
+            IF(m_kDim .GT. 0 ) THEN
+               WRITE(mout,'(a,(50g11.6))')
+     $              '      HypCubs Posit&Size: ',
+     $              (m_CeVer1(iCell,j), j=1,m_kDim), ! position
+     $              (m_CeVer2(iCell,j), j=1,m_kDim)  ! size
+            ENDIF
+            IntgSum = IntgSum +m_CeIntg(iCell)
+            DrivSum = DrivSum +m_CeDriv(iCell)
+            active  = active +1
+         ENDIF
+      ENDDO
+      WRITE(mout,'(a,i6,a,2i6)') 'All cells: ',m_LastCe, '      Active: ', active, m_LastAc !
+      WRITE(mout,'(a,2f12.5)')   'Minimum and Maximum Weight/<Wt>       = ',WtMin,WtMax !
+      WRITE(mout,'(a,2g20.13)')  'Total True Integral in active cells   = ', IntgSum, m_CeIntg(1) !
+      WRITE(mout,'(a,2g20.13)')  'Total Driver Integral in active cells = ', DrivSum, m_CeDriv(1) !
+      WRITE(mout,'(a,f12.5)')    'True/Drive = ', IntgSum/DrivSum
+      END                       !! FoamA_BufActPrint
+
+
+      SUBROUTINE FoamA_VertPrint(mout)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   all vertices                                                                   //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            mout, iCell, iVe, NoRefs(m_vMax), NoRefsAc(m_vMax), k,j
+*     ----------------------------------------------------------------
+      DO iVe = 1, m_LastVe
+         NoRefs(iVe)=0
+      ENDDO
+      DO iVe = 1, m_LastVe
+         DO iCell = 1, m_LastCe
+            DO k=1,m_nDim+1
+               IF( iVe .EQ. m_CeVert(iCell,k) ) NoRefs(iVe) =NoRefs(iVe) +1 !
+               IF(m_CeStat(iCell) .EQ. 1) THEN
+                  IF( iVe .EQ. m_CeVert(iCell,k) ) NoRefsAc(iVe) =NoRefsAc(iVe) +1 !
+               ENDIF
+            ENDDO
+         ENDDO
+      ENDDO
+      WRITE(mout,*) '=====================ALL VERTICES===================================' !
+      WRITE(mout,*) ' iVert   NoRefs  NoRefsAc       Vertex     Componets    ' !
+      DO iVe = 1, m_LastVe
+         WRITE(mout,'(i6,2i10,5f17.10)') iVe,NoRefs(iVe),NoRefsAc(iVe), (m_VerX(iVe,j),j=1,m_nDim) !
+      ENDDO
+      END                       !! VertPrint
+
+
+
+      SUBROUTINE FoamA_PltBegin(ltx)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Initialization, write header of TeX file                                       //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER   ltx
+*---------------------------------------------------
+      m_ltx  = ABS(ltx)
+      IF(ltx .GT. 0 ) THEN
+         WRITE(m_ltx,'(2A)') '\\newpage'
+      ELSE
+*------------------------------!
+*           Header
+*------------------------------!
+         WRITE(m_ltx,'(A)') '\\documentclass[12pt]{article}'
+         WRITE(m_ltx,'(A)') '\\usepackage{color}' !<-for colors!!!
+         WRITE(m_ltx,'(A)') '\\usepackage{epic}' !<-for extended ploting
+         WRITE(m_ltx,'(A)') '\\textwidth  = 16cm'
+         WRITE(m_ltx,'(A)') '\\textheight = 18cm'
+         WRITE(m_ltx,'(A)') '\\pagestyle{empty}'
+         WRITE(m_ltx,'(A)') '\\begin{document}'
+         WRITE(m_ltx,'(A)') '  '
+         WRITE(m_ltx,'(A)') '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' !
+         WRITE(m_ltx,'(A)') '\\begin{figure}[!ht]'
+         WRITE(m_ltx,'(A)') '\\centering'
+*------------------------------!
+* Frames and labels
+*------------------------------!
+         WRITE(m_ltx,'(A)') '% =========== big frame, title etc. ======='
+         WRITE(m_ltx,'(A)') '\\setlength{\\unitlength}{0.1mm}'
+         WRITE(m_ltx,'(A)') '\\begin{picture}(1600,1600)'
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\framebox(1600,1600){ }}'
+      ENDIF
+      END
+
+      SUBROUTINE FoamA_PltVert     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Plot all vertices                                                              //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell, iVe, NoRefs(m_vMax), NoRefsAc(m_vMax), k,j
+*------------------------------------------------------------------------------
+*     Mark plots for plots
+      CHARACTER*62 star,diamond,circle,ring,times,disc,plus,box,dot
+      PARAMETER (diamond ='\\makebox(0,0){\\Large $\\diamond$}')
+      PARAMETER (star    ='\\makebox(0,0){\\Large $\\star$}')
+      PARAMETER (circle  ='\\circle{30}')
+      PARAMETER (ring    ='\\circle{20}')
+      PARAMETER (times   ='\\makebox(0,0){\\Large $\\times$}')
+      PARAMETER (disc    ='\\circle*{20}')
+      PARAMETER (plus    ='\\makebox(0,0){\\Large $+$}')
+      PARAMETER (box     ='\\makebox(0,0){\\Large $\\Box$}') !!! does not work???
+      PARAMETER (dot     ='\\circle*{10}')
+*------------------------------------------------------------------------------
+      CHARACTER*62  chmark
+      INTEGER       kx,ky
+*---------------------------------------------------------------------------------------------
+      IF(m_nDim.EQ.2) THEN
+* Count references of vertices
+         DO iVe = 1, m_LastVe
+            NoRefs(iVe)=0
+         ENDDO
+         DO iVe = 1, m_LastVe
+            DO iCell = 1, m_LastCe
+               DO k=1,m_nDim+1
+                  IF( iVe .EQ. m_CeVert(iCell,k) ) NoRefs(iVe) =NoRefs(iVe) +1 !
+                  IF(m_CeStat(iCell) .EQ. 1) THEN
+                     IF( iVe .EQ. m_CeVert(iCell,k) ) NoRefsAc(iVe) =NoRefsAc(iVe) +1 !
+                  ENDIF
+               ENDDO
+            ENDDO
+         ENDDO
+*---------------------------------------------------------------------------------------------
+* Begin frame
+         WRITE(m_ltx,'(A)') '% =========== Vertices Vertices ==========='
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\begin{picture}( 1600,1600)' !
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\framebox( 1600,1600){ }}' !
+* Plotting symbol
+         IF(m_LastVe.LE.250) THEN
+            WRITE(m_ltx,'(10A)') '\\newcommand{\\VD}[2]{\\put(#1,#2){',disc,'}}' !
+            WRITE(m_ltx,'(10A)') '\\newcommand{\\VS}[2]{\\put(#1,#2){',star,'}}' !
+         ELSE
+            WRITE(m_ltx,'(10A)') '\\newcommand{\\VD}[2]{\\put(#1,#2){',dot,'}}' !
+            WRITE(m_ltx,'(10A)') '\\newcommand{\\VS}[2]{\\put(#1,#2){',dot,'}}' !
+         ENDIF
+         WRITE(m_ltx,'(10A)') 
+     $        '\\newcommand{\\VN}[3]{\\put(#1,#2){\\makebox(0,0)[b]{\\hbox{\\color{red}\\scriptsize #3}}}}' !
+         DO iVe = 1, m_LastVe
+            kx = m_VerX(iVe,1)*1600
+            ky = m_VerX(iVe,2)*1600
+*****         WRITE(*,*) NoRefs(iVe),NoRefsAc(iVe)
+            IF( NoRefsAc(iVe).LE.2 ) THEN
+               WRITE(m_ltx,'(A,I5,A,I5,A)') '\\VD{',kx,'}{',ky,'}'
+            ELSE
+               WRITE(m_ltx,'(A,I5,A,I5,A)') '\\VS{',kx,'}{',ky,'}'
+            ENDIF            
+            IF(m_LastVe.LE.250) WRITE(   m_ltx,'(A,I5,A,I5,A,I5,A)') '\\VN{',kx-8,'}{',ky+12,'}{',iVe,'}' !
+         ENDDO
+* Close frame
+         WRITE(m_ltx,'(A)') '\\end{picture}}'
+         WRITE(m_ltx,'(A)') '% ============== End Vertices ==========='
+      ENDIF
+*---------------------------------------------------------------------------------------------
+      END                       !! VertPrint
+
+
+      SUBROUTINE FoamA_PltCell     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Plot all simplectic cells                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+      INTEGER            iCell,active,j
+      INTEGER            iV1,iV2,iV3
+      INTEGER            kx1,ky1,kx2,ky2,kx3,ky3,kx,ky,lx,ly
+*---------------------------------------------------------------------------------------------
+*                        Rectangular 2-dim FOAM
+*---------------------------------------------------------------------------------------------
+      IF(m_kDim.EQ.2) THEN
+         WRITE(m_ltx,'(A)') '% =========== Vertices Vertices ==========='
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\begin{picture}( 1600,1600)' !
+         DO iCell = 2, m_LastCe
+            IF(m_CeStat(iCell).EQ.1) THEN ! Only active cells
+               kx = m_CeVer1(iCell,1)*1600
+               ky = m_CeVer1(iCell,2)*1600
+               lx = m_CeVer2(iCell,1)*1600
+               ly = m_CeVer2(iCell,2)*1600
+               kx1 = kx+lx/2
+               ky1 = ky+ly/2
+*     cell rectangle
+               WRITE(m_ltx,'(A,I5,A,I5,A,I5,A,I5,A)') 
+     $              '\\put(',kx,',',ky,'){\\color{black}\\framebox(',lx,',',ly,'){ }}' !
+***               WRITE(m_ltx,'(A,I5,A,I5,A,I5,A,I5,A)') 
+***     $              '\\put(',kx,',',ky,'){\\color{black}\\dashbox{7}(',lx,',',ly,'){ }}' !
+*     cell number
+               IF(m_LastCe.LE.250) WRITE(m_ltx,'(A,I4,A,I4,A,I4,A)') 
+     $            '\\put(',kx1,',',ky1,'){\\makebox(0,0)[b]{\\hbox{\\small\\color{magenta}\\scriptsize ',iCell,' }}}' !
+            ENDIF
+         ENDDO
+* Close frame
+         WRITE(m_ltx,'(A)') '\\end{picture}}'
+         WRITE(m_ltx,'(A)') '% ============== End Vertices ==========='
+      ENDIF
+*---------------------------------------------------------------------------------------------
+*                        Triangulare 2-dim FOAM
+*---------------------------------------------------------------------------------------------
+      IF(m_nDim.EQ.2) THEN
+         WRITE(m_ltx,'(A)') '% =========== Vertices Vertices ==========='
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\begin{picture}( 1600,1600)' !
+         DO iCell = 2, m_LastCe
+            iV1=m_CeVert(iCell,1)
+            iV2=m_CeVert(iCell,2)
+            iV3=m_CeVert(iCell,3)
+            kx1 = m_VerX(iV1,1)*1600
+            ky1 = m_VerX(iV1,2)*1600
+            kx2 = m_VerX(iV2,1)*1600
+            ky2 = m_VerX(iV2,2)*1600
+            kx3 = m_VerX(iV3,1)*1600
+            ky3 = m_VerX(iV3,2)*1600
+            kx= (kx1+kx2+kx3)/3
+            ky= (ky1+ky2+ky3)/3
+            IF(m_CeStat(iCell).EQ.1) THEN
+***         WRITE(*,*) iCell,iV1,iV2,iV3
+               WRITE(m_ltx,'(A,I4,A,I4,A,I4,A,I4,A)') '\\drawline(',kx1,',',ky1,')(',kx2,',',ky2,')' !
+               WRITE(m_ltx,'(A,I4,A,I4,A,I4,A,I4,A)') '\\drawline(',kx2,',',ky2,')(',kx3,',',ky3,')' !
+               WRITE(m_ltx,'(A,I4,A,I4,A,I4,A,I4,A)') '\\drawline(',kx3,',',ky3,')(',kx1,',',ky1,')' !
+               IF(m_LastCe.LE.250) WRITE(m_ltx,'(A,I4,A,I4,A,I4,A)') 
+     $              '\\put(',kx,',',ky,'){\\makebox(0,0)[b]{\\hbox{\\color{magenta}\\scriptsize ',iCell,' }}}' !
+            ENDIF
+         ENDDO
+* Close frame
+         WRITE(m_ltx,'(A)') '\\end{picture}}'
+         WRITE(m_ltx,'(A)') '% ============== End Vertices ==========='
+      ENDIF
+      END                       !! FoamA_BufPrint
+
+      SUBROUTINE FoamA_PltMisc     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Miscelaneous                                                                   //
+*//   Plot of frame for 2-dim void testing function                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+*
+      WRITE(m_ltx,'(A)') '\\put(80,80){\\color{blue}\\dashbox{7}( 1440,1440){ }}' ! 5% edge band
+      END                       !! FoamA_PltMisc
+
+      SUBROUTINE FoamA_PltEnd     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Close Tex file with plot                                                       //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'FoamA.h'
+*
+      WRITE(m_ltx,'(A)') '\\end{picture}'
+      WRITE(m_ltx,'(A)') '\\end{figure}'
+      WRITE(m_ltx,'(A)') '\\end{document}'
+      CLOSE(m_ltx)
+      END
+
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/FoamA.h b/Foam/FoamA.h
new file mode 100644
index 0000000000000000000000000000000000000000..eac42bd6ff3e355aa02e2b723eaa1a2495eeb8a6
--- /dev/null
+++ b/Foam/FoamA.h
@@ -0,0 +1,97 @@
+*///////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                   //
+*//          Pseudoclass FoamA                                                        //
+*//                                                                                   //
+*///////////////////////////////////////////////////////////////////////////////////////
+*
+*
+      INTEGER        m_nBinMax
+      PARAMETER  (   m_nBinMax =256 )
+      INTEGER        m_NdiMax
+      PARAMETER  (   m_NdiMax  = 5 )    ! maximum dimension for siplices
+      INTEGER        m_KdiMax
+      PARAMETER  (   m_KdiMax  = 15 )   ! maximum dimension for hypercubics
+      INTEGER        m_DimMax
+      PARAMETER  (   m_DimMax  = m_NdiMax+ m_KdiMax )   !  maximum total dimension
+      INTEGER        m_nBufMax
+      PARAMETER  (   m_nBufMax = 10000 )  ! maximum buffer length for all cells
+      INTEGER        m_vMax
+      PARAMETER  (   m_vMax    = 10000  ) ! maximum number of vertices
+      INTEGER        m_cMax
+      PARAMETER  (   m_cMax    = 10000 )  ! maximum number of (active) Cells
+      INTEGER        m_sMax
+      PARAMETER  (   m_sMax    = 5 )     ! statistics of the weight
+      INTEGER        m_NpairMax
+      PARAMETER  (   m_NpairMax  = m_NdiMax*(m_NdiMax+1)/2 ) ! no. of pairs of vertices
+      INTEGER        m_NdiviMax
+      PARAMETER  (   m_NdiviMax  = m_NpairMax+m_KdiMax ) ! Total no. of division samplings
+*
+      INTEGER            m_CeStat,   m_CePare,   m_CeDau1,  m_CeDau2,  m_CeSamp, m_CeVert, m_CeBest !
+      DOUBLE PRECISION   m_CeIntg,   m_CeSum,    m_CeDriv,  m_CePrim,  m_CePrCu, m_CeXave, m_CeVolu !
+      INTEGER            m_LastCe,   m_LastAc,   m_nBuf,    m_nBin,    m_LastVe !
+      INTEGER            m_ActC
+      DOUBLE PRECISION   m_VerX,     m_VolTot   !
+      INTEGER            m_Ndim,     m_Kdim,     m_Dimen
+      INTEGER            m_Chat,     m_Out,      m_nSampl,  m_Ncalls !
+      INTEGER            m_OptPeek,  m_OptDrive, m_OptEdge, m_OptOrd,  m_EvPerBin, m_OptRanIni, m_OptRanLux!
+      DOUBLE PRECISION   m_Drive,    m_SumWt,    m_SumWt2,  m_NevGen,    m_WtMax,   m_WtMin !
+      DOUBLE PRECISION   m_MCresult, m_MCerror,  m_MCwt,    m_MCvector !
+      DOUBLE PRECISION   m_CeVer1,   m_CeVer2
+      INTEGER            m_Ltx,      m_MagicInit
+*
+      COMMON /c_FoamA/   
+     $ m_CeStat(m_nBufMax),           ! Cell member: status=0 inactive, =1 active
+     $ m_CePare(m_nBufMax),           ! Cell member: parent cell pointer
+     $ m_CeDau1(m_nBufMax),           ! Cell member: daughter1 cell pointer
+     $ m_CeDau2(m_nBufMax),           ! Cell member: daughter2 cell pointer
+     $ m_CeSamp(m_nBufMax),           ! Cell member: No of MC events in exploration
+     $ m_CeVert(m_nBufMax,m_NdiMax+1),! Cell member: simplex vertex pointers
+     $ m_CeVer1(m_nBufMax,m_KdiMax),  ! Cell member: hypercubic vertex position
+     $ m_CeVer2(m_nBufMax,m_KdiMax),  ! Cell member: hypercubic vertex size
+     $ m_CeIntg(m_nBufMax),           ! Cell member: integral estimator
+     $ m_CeDriv(m_nBufMax),           ! Cell member: Drive integral estimate, from build-up
+     $ m_CePrim(m_nBufMax),           ! Cell member: Primary integral estimate, MC generation
+     $ m_CePrCu(0:m_nBufMax),         ! Cell member: Cumulative Primary 
+     $ m_CeVolu(m_nBufMax),           ! Cell member: Cartesian volume
+     $ m_CeXave(m_nBufMax),           ! Cell member: Average best X
+     $ m_CeBest(m_nBufMax),           ! Cell member: Best pair of vertices, pointer
+     $ m_CeSum( m_nBufMax,m_sMax),    ! Cell member: weight summaries
+     $ m_VerX(  m_vMax, m_NdiMax), ! List of all VERTEX positions
+     $ m_ActC(m_cMax),             ! List of all pointers to ACTIVE cells
+     $ m_VolTot,                   ! Estimate of Volume total, without error
+     $ m_Drive,             ! M.C. generation Drive value of integral
+     $ m_SumWt,             ! M.C. generation sum of Wt
+     $ m_SumWt2,            ! M.C. generation sum of Wt**2
+     $ m_NevGen,            ! M.C. generation sum of 1d0
+     $ m_WtMax,             ! M.C. generation maximum wt
+     $ m_WtMin,             ! M.C. generation minimum wt
+     $ m_MCresult,          ! M.C. generation Final value of INTEGRAL
+     $ m_MCerror,           ! M.C. generation Final walue of ERROR
+     $ m_MCwt,              ! M.C. generation current event weight
+     $ m_MCvector(m_DimMax),! M.C. generated vector, dimension=m_NdiMax+ m_KdiMax
+     $ m_Ndim,              ! dimension of the siplices
+     $ m_Kdim,              ! dimension of the hypercubics
+     $ m_Dimen,             ! total dimension of the problem =m_Ndim+m_Kdim
+     $ m_nBuf,              ! Actual dynamic lenth of the buffer m_nBuf<m_nBufMax
+     $ m_nBin,              ! No of bins in histogram for cell exploration/division
+     $ m_LastVe,            ! Last vertex
+     $ m_LastAc,            ! Last active cell
+     $ m_LastCe,            ! Last cell in buffer 
+     $ m_nSampl,            ! No. of sampling when dividing cell
+     $ m_Ncalls,            ! No. of function calls, total
+     $ m_OptPeek,           ! Flag for  random ceel choice: Peek =0,1 for maximum,
+     $ m_OptDrive,          ! Flag for type of Drive =0,1,2 for TrueVol,Sigma,WtMax
+     $ m_OptEdge,           ! Flag which decides whether vertices are included in the sampling
+     $ m_OptOrd,            ! Flag =0 default, entire domain is hyp-cubic, =1 it is simplex
+     $ m_EvPerBin,          ! Maximum effective eevents per bin, saves CPU, =0 inactive
+     $ m_OptRanIni,         ! Flag =0 default, =1 r.n. generator not initialized in PianA
+     $ m_OptRanLux,         ! Flag =-1,0,1,2,3,4 r.n. generator level
+     $ m_Chat,              ! Flag for chat level in output, Chat=1 normal level
+     $ m_Ltx,               ! Latex Output unit, for debug
+     $ m_Out,               ! Output unit
+     $ m_MagicInit          ! Magic cookie of initialization (global variable)
+*
+      SAVE /c_FoamA/
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/GLK.f b/Foam/GLK.f
new file mode 100644
index 0000000000000000000000000000000000000000..3c4295f36c441cbcd8ff15b2e3103e85d3623ff2
--- /dev/null
+++ b/Foam/GLK.f
@@ -0,0 +1,4565 @@
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                       Pseudo-Class  GLK                                  //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+*
+*
+*//////////////////////////////////////////////////////////////////////////////
+*// =======================================================================  //
+*// ==========================  _GLK_  ====================================  //
+*// ========== General Library of histogramming/ploting utilities =========  //
+*// ========== It is similar but not identical to HBOOK and HPLOT =========  //
+*// =======================================================================  //
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                      Version:    1.30                                    //
+*//              Last correction:    January 1999                            //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+*//
+*//    ********************************************************************
+*//    *  History of the package:                                         *
+*//    *  MINI-HBOOK writen by S. Jadach, Rutherford Lab. 1976            *
+*//    *  Rewritten December 1989 (S.J.)   and in 1997 (S.J.)             *
+*//    ********************************************************************
+*//
+*//  Installation remarks:
+*//  (1) printing backslash character depends on F77 compilator,
+*//      user may need to modify definition of BS variable in HPLCAP
+*//
+*//  Usage of the program:
+*//  (1) In many cases names and meanings of programs and their
+*//      parameters is the same as in original CERN libraries HBOOK
+*//  (2) Unlike to original HBOOK and HPLOT, all floating parameters
+*//      of the programs are in DOUBLE PRECISION !
+*//  (3) GLK stores histograms in DOUBLE PRECISION  and always with
+*//      errors. DOUBLE PRECISION  storage is essential for 10**7 events statistics!
+*//  (4) Output from GLK is a picture recorded as regular a LaTeX file
+*//      with frame and curves/histograms, it is easy to change fonts
+*//      add captions, merge plots, etc. by normal editing. Finally,
+*//      picture may be inserted in any place into LaTeX source of the
+*//      article.
+*//  (5) WARNING: two-dimensional histograms are not active!!!
+*//  
+*//////////////////////////////////////////////////////////////////////////////
+*//     List of procedures,  non-user subprograms in brackets                //
+*//////////////////////////////////////////////////////////////////////////////
+*    SUBR/FUNC       1 PAR. 2 PAR. 3 PAR. 4 PAR. 5 PAR. 6 PAR.
+*  ====================================================================
+*     (GLK_Initialize) ----   ----    ----   ----   ----   ----
+*      GLK_hi          INT    INT     ----   ----   ----   ----
+*      GLK_hie         INT    INT     ----   ----   ----   ----
+*      GLK_Fil1        INT    DBL     DBL    ----   ----   ----
+*      GLK_Fil2        INT    DBL     DBL    DBL    ----   ----
+*      GLK_Book1       INT    CHR*80  INT    DBL    DBL    ----
+*     (GLK_OptOut)     INT    INT     INT    INT    INT     INT
+* (L.F. GLK_Exist)     INT    -----  ------  ----   ----   ----
+*      GLK_Idopt       INT    CHR*4   -----  ----   ----   ----
+*      GLK_BookFun1    INT    CHR*80   INT   DBL    DBL  DP-FUNC
+*      GLK_Idopt       INT    CHR*4   -----  ----   ----   ----
+*      GLK_Book2       INT    CHR*80   INT   DBL    DBL     INT  DBL DBL
+*      GLK_PrintAll    ---    ----   ----   ----   ----   ----
+*      GLK_SetNout     INT    ----   ----   ----   ----   ----
+*      GLK_Print       INT    ----   ----   ----   ----   ----
+*      GLK_Operat      INT    CHR*1   INT    INT    DBL    DBL
+*      GLK_Hinbo1      INT    CHR*8   INT    DBL    DBL    ----
+*      GLK_Unpak       INT    DBL(*) CHR*(*) INT    ---    ----
+*      GLK_Pak         INT    DBL(*)  ----   ----   ---    ----
+*      GLK_Pake        INT    DBL(*)  ----   ----   ---    ----
+*      GLK_Range1      INT    DBL     DBL    ----   ---    ----
+*      GLK_Hinbo2      INT    INT     DBL    DBL    INT    DBL   DBL
+*      GLK_Ymaxim      INT    DBL     ----   ----   ---    ----
+*      GLK_Yminim      INT    DBL     ----   ----   ---    ----
+*      GLK_Reset       INT   CHR*(*)  ----   ----   ---    ----
+*      GLK_Delet       INT     ----   ----   ----   ----   ----
+*     (GLK_Copch)     CHR*80 CHR*80  ----   ----   ----   ----
+*     (GLK_hadres)     INT    INT   ----   ----   ----   ----
+*      GLK_Hrfile      INT   CHR*(*) CHR*(*) ----   ----   ----
+*      GLK_Hrout       INT    INT    CHR*8   ----   ----   ----
+*      GLK_Hrin        INT    INT     INT    ----   ----   ----
+*      GLK_Hrend     CHR*(*) ----    ----   ----   ----   ----
+*  *******************  HPLOT entries ******************
+*      GLK_PlInt       INT    ----    ----   ----   ----   ----
+*      GLK_PlCap       INT    ----    ----   ----   ----   ----
+*      GLK_PlEnd       ----   ----    ----   ----   ----   ----
+*      GLK_Plot        INT    CHR*1   CHR*1   INT   ----   ----
+*     (GLK_Plfram1)    INT      INT     INT  ----   ----   ----
+*     (GLK_SAxisX)     INT      DBL     DBL   INT    DBL   ----
+*     (GLK_SAxisY)     INT      DBL     DBL   INT    DBL   ----
+*     (GLK_PlHist)     INT      INT     DBL   DBL    INT    INT
+*     (GLK_PlHis2)     INT      INT     DBL   DBL    INT    INT
+*     (GLK_PlCirc)     INT      INT     INT   DBL    DBL    DBL
+*     (GLK_aprof)      DBL      INT     DBL  ----   ----   ----
+*      GLK_PlSet       INT      DBL    ----  ----   ----   ----
+*      GLK_PlTitle     INT    CHR*80   ----  ----   ----   ----
+*  *******************  WMONIT entries ******************
+*      GLK_WtMon       INT ???
+*  *******************************************************************
+*                         END OF TABLE
+*  *******************************************************************
+*          Map of memory for single histogram
+*          ----------------------------------
+*  (1-7) Header
+*  ist +1   mark      9999999999999
+*  ist +2   mark      9d12 + id*10 + 9
+*  ist +3   iflag1    9d12 + iflag1*10 +9
+*  ist +4   iflag2    9d12 + iflag2*10 +9
+*  ist +5   scamin    minimum y-scale
+*  ist +6   scamax    maximum y-scale
+*  ist +7   jdlast    address of the next histogram
+*                     from previous history of calls (see hadres)
+*          ----------------------------------
+*              Binning size informations
+*          ----------------------------------
+*  One dimensional histogram            Two dimensional histog.
+*  -------------------------            ----------------------
+*  (8-11) Binning information           (8-15) Binning information
+*  ist2 = ist+7
+*  ist2 +1    NCHX                          ist2 +5   NCHY
+*  ist2 +2      XL                          ist2 +6     YL
+*  ist2 +3      XU                          ist2 +7     YU
+*  ist2 +4   FACTX                          ist2 +8  FACTY
+*
+*          ----------------------------------
+*             All kind of sums and  maxwt
+*          ----------------------------------
+*  One dimensional histogram            Two dimensional histog.
+*  -------------------------            ----------------------
+*  (12-24) Under/over-flow average x    (16-24)
+*  ist3 = ist+11
+*  ist3 +1   Underflow                     All nine combinations
+*  ist3 +2   Normal                        (U,N,O) x (U,N,O)
+*  ist3 +3   Overflow                      sum wt only (no errors)
+*  ist3 +4   U  sum w**2
+*  ist3 +5   N  sum w**2
+*  ist3 +6   O  sum w**2
+*  ist3 +7   Sum 1
+*  ist3 +8   Sum wt*x
+*  ist3 +9   Sum wt*x*x
+*  ist3 +10  nevzer    (GLK_WtMon)
+*  ist3 +11  nevove    (GLK_WtMon)
+*  ist3 +12  nevacc    (GLK_WtMon)
+*  ist3 +13  maxwt     (GLK_WtMon)
+*          ----------------------------------
+*           Content of bins including errors
+*          ----------------------------------
+*  (25 to 24+2*nchx)                     (25 to 24 +nchx*nchy)
+*     sum wt and sum wt**2            sum wt only (no errors)
+*  ----------------------------------------------------------------
+*//////////////////////////////////////////////////////////////////////////////
+
+      SUBROUTINE GLK_Initialize
+*     *************************
+* First Initialization called from may routines
+*     *************************************
+      IMPLICIT NONE
+*----------------------------------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+*----------------------------------------------------------------------
+* Note that backslash definition is varying from one
+* instalation/compiler to another, you have to figure out by yourself
+* how to fill backslash code into m_BS
+ccc      CHARACTER*1 BBS1
+ccc      DATA BBS1 /'\\'/    ! IBM or HP with 'f77 +B '
+ccc      CHARACTER*1 BBS2
+ccc      DATA BBS2 /1H\ /    ! HP  f77 with standard options
+*-----------------------------------------------
+      INTEGER init,i,j,k
+      DATA init /0/
+*-----------------------------------------------
+      IF(init .NE. 0) RETURN
+      init=1
+* default output unit
+      m_out=16
+      m_length=0
+* color
+      m_KeyCol=0
+* table range
+      m_KeyTbr = 0
+      DO k=1,3
+         m_TabRan(k)=1
+      ENDDO
+* labels for 1-st col of table
+      m_KeyTbl = 0
+      DO j=1,m_MaxNlab
+         DO k=1,32
+            m_TabLab(j)(k:k)=' '
+         ENDDO
+      ENDDO
+*
+      DO k=1,80
+         m_Color(k:k)=' '
+      ENDDO
+      m_Color(1:1)='%'
+*
+      DO i=1,m_idmax
+         DO k=1,3
+            m_index(i,k)=0
+         ENDDO
+         DO k=1,80
+            m_titlc(i)(k:k)=' '
+         ENDDO
+      ENDDO
+      DO k=1,m_LenmB
+         m_b(k)=0d0
+      ENDDO
+*----------------------------------------------------------------------
+**    m_BS = BBS1      ! IBM or HP with 'f77 +B '
+**    m_BS = BBS2      ! HP standard options
+      m_BS = '\\'      ! 
+*----------------------------------------------------------------------
+      END
+ 
+      SUBROUTINE GLK_Flush
+*     ********************
+* FLUSH memory, all histos erased!
+*     *************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER i,k
+*------------------------------------------------
+      CALL GLK_Initialize
+      m_length=0
+      DO i=1,m_idmax
+         DO k=1,3
+            m_index(i,k)=0
+         ENDDO
+         DO k=1,80
+            m_titlc(i)(k:k)=' '
+         ENDDO
+      ENDDO
+      DO k=1,m_LenmB
+         m_b(k)=0d0
+      ENDDO
+      END
+
+      LOGICAL FUNCTION GLK_Exist(id)
+*     ******************************
+* this function is true when id  exists !!!!
+*     ***************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id,lact
+*------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      GLK_Exist = lact .NE. 0
+***   IF(GLK_Exist)      WRITE(6,*) 'GLK_Exist: does   ID,lact=',id,lact
+***   IF(.not.GLK_Exist) write(6,*) 'GLK_Exist: doesnt ID,lact=',id,lact
+      END
+
+
+      SUBROUTINE GLK_SetBin(id,ib,xb)
+*//////////////////////////////////////////////////
+*//  Setting out bin content S.J. 20 apr 2000
+*//////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER  id,ib
+      DOUBLE PRECISION xb
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,idmem,lact
+      SAVE idmem
+      DATA idmem / -1256765/
+*------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact) ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hi: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1 .AND. ityphi.NE.3) THEN
+         CALL GLK_Stop1(' GLK_hi: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = nint(m_b(ist2+1))
+      IF(ib .EQ. 0) THEN                     ! underflow
+         m_b(ist3 +1) = xb
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin
+         m_b(ist +m_buf1+ib) = xb
+      ELSEIF(ib .EQ. nch+1) THEN             ! overflow
+         m_b(ist3 +3) = xb
+      ELSE
+         CALL GLK_Stop1('+++++ GLK_SetBin: wrong binning id=',id)
+      ENDIF
+      END
+
+      SUBROUTINE  GLK_SetErr(id,ib,xe)
+*//////////////////////////////////////////////////////
+*//   getting out error of the bin, s.j. 20 apr 2000 //
+*//////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      DOUBLE PRECISION xe
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,lact,ib,id
+      SAVE       idmem
+      INTEGER    idmem
+      DATA idmem / -1256765/
+*---------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact)  ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hie: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1) THEN
+        CALL GLK_Stop1(' GLK_hie: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = m_b(ist2+1)
+      IF(ib .EQ. 0) THEN                     ! underflow
+         m_b(ist3 +4) = xe**2
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin, error content
+         m_b(ist+m_buf1+nch+ib) = xe**2
+      ELSEIF(ib .EQ. nch+1) THEN             ! overflow
+         m_b(ist3 +6) = xe**2
+      ELSE
+         CALL GLK_Stop1('+++GLK_SetErr: wrong binning id= ',id)
+      ENDIF
+      END
+
+
+      SUBROUTINE GLK_GetBin(id,ib,xb)
+*//////////////////////////////////////////////////
+*//  getting out bin content S.J. 20 apr 2000
+*//////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER  id,ib
+      DOUBLE PRECISION xb
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,idmem,lact
+      SAVE idmem
+      DATA idmem / -1256765/
+*------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact) ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hi: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1 .AND. ityphi.NE.3) THEN
+         CALL GLK_Stop1(' GLK_hi: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = nint(m_b(ist2+1))
+      IF(ib .EQ. 0) THEN                     ! underflow
+         xb =   m_b(ist3 +1)
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin
+         xb =   m_b(ist +m_buf1+ib)
+      ELSEIF(ib .EQ. nch+1) THEN             ! overflow
+         xb =   m_b(ist3 +3)
+      ELSE
+         CALL GLK_Stop1('+++++ GLK_GetBin: wrong binning id=',id)
+      ENDIF
+      END
+
+      SUBROUTINE  GLK_GetErr(id,ib,xe)
+*//////////////////////////////////////////////////////
+*//   getting out error of the bin, s.j. 20 apr 2000 //
+*//////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      DOUBLE PRECISION xe
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,lact,ib,id
+      SAVE       idmem
+      INTEGER    idmem
+      DATA idmem / -1256765/
+*---------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact)  ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hie: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1) THEN
+        CALL GLK_Stop1(' GLK_hie: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = m_b(ist2+1)
+      IF(ib .EQ. 0) THEN                     ! underflow
+         xe=   DSQRT( DABS(m_b(ist3 +4)))
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin, error content
+         xe=   DSQRT( DABS(m_b(ist+m_buf1+nch+ib)) )
+      ELSEIF(ib .EQ. nch+1) THEN             ! overflow
+         xe=   DSQRT( DABS(m_b(ist3 +6)))
+      ELSE
+         CALL GLK_Stop1('+++GLK_GetErr: wrong binning id= ',id)
+      ENDIF
+      END
+
+
+      DOUBLE PRECISION FUNCTION GLK_hi(id,ib)
+*     **********************
+* getting out bin content S.J. 18-Nov. 90
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER  id,ib
+* locals
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,idmem,lact
+      SAVE idmem
+      DATA idmem / -1256765/
+*------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact) ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hi: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1 .AND. ityphi.NE.3) THEN
+         CALL GLK_Stop1(' GLK_hi: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = nint(m_b(ist2+1))
+      IF(ib .EQ. 0) THEN        ! underflow
+         GLK_hi=   m_b(ist3 +1)
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin
+         GLK_hi=   m_b(ist +m_buf1+ib)
+      ELSEIF(ib .EQ. nch+1) THEN ! overflow
+         GLK_hi=   m_b(ist3 +3)
+      ELSE
+         CALL GLK_Stop1(' GLK_hi: wrong binning id=',id)
+      ENDIF
+      END
+
+      DOUBLE PRECISION FUNCTION  GLK_hie(id,ib)
+*     ************************
+* getting out error of the bin, s.j. 18-nov. 90
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+* locals
+      INTEGER    ist,ist2,ist3,iflag2,ityphi,nch,lact,ib,id
+      SAVE       idmem
+      INTEGER    idmem
+      DATA idmem / -1256765/
+*---------------------------------------------------------
+      IF(id .EQ. idmem) goto 100
+      idmem=id
+      CALL GLK_hadres(id,lact)  ! some checks, not repeated if id the same as previously
+      IF(lact .EQ. 0) THEN
+        CALL GLK_Stop1(' GLK_hie: nonexisting histo id=',id)
+      ENDIF
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10 ! checking if histo is of proper type
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1) THEN
+        CALL GLK_Stop1(' GLK_hie: 1-dim histos only !!! id=',id)
+      ENDIF
+  100 CONTINUE
+      nch  = m_b(ist2+1)
+      IF(ib .EQ. 0) THEN        ! underflow
+         GLK_hie=   dsqrt( dabs(m_b(ist3 +4)))
+      ELSEIF(ib .GE. 1.and.ib .LE. nch) THEN ! normal bin, error content
+         GLK_hie=   dsqrt( dabs(m_b(ist+m_buf1+nch+ib)) )
+      ELSEIF(ib .EQ. nch+1) THEN ! overflow
+         GLK_hie=   dsqrt( dabs(m_b(ist3 +6)))
+      ELSE
+         CALL GLK_Stop1('+++GLK_hie: wrong binning id= ',id)
+      ENDIF
+      END
+
+      SUBROUTINE GLK_Fil1(id,xx,wtx)
+*     *****************************
+* recommended fast filling 1-dim. histogram s.j. 18 nov. 90
+* overflow/underflow corrected by Maciek and Zbyszek
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  xx,wtx
+* local
+      INTEGER           ist,ist2,ist3,iflag2,ityphi,ipose1,iposx1,kposx1,kpose1,kx,nchx,lact
+      DOUBLE PRECISION  x1,wt1,xl,factx,xu
+*-------------------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+* exit for non-existig histo
+      IF(lact .EQ. 0)  RETURN
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+* one-dim. histo only
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1)  CALL GLK_Stop1('+++GLK_Fil1: wrong id=  ',id)
+      x1= xx
+      wt1= wtx
+      m_index(lact,3)=m_index(lact,3)+1
+* all entries
+      m_b(ist3 +7)  =m_b(ist3 +7)   +1
+* for average x
+      m_b(ist3 +8)  =m_b(ist3 +8)  +wt1
+      m_b(ist3 +9)  =m_b(ist3 +9)  +wt1*x1
+* filling coordinates
+      nchx  =m_b(ist2 +1)
+      xl    =m_b(ist2 +2)
+      xu    =m_b(ist2 +3)
+      factx =m_b(ist2 +4)
+      IF(x1 .LT. xl) THEN
+* underflow
+         iposx1 = ist3 +1
+         ipose1 = ist3 +4
+         kposx1 = 0
+      ELSEIF(x1 .GT. xu) THEN
+* or overflow
+         iposx1 = ist3 +3
+         ipose1 = ist3 +6
+         kposx1 = 0
+      ELSE
+* or any normal bin
+         iposx1 = ist3 +2
+         ipose1 = ist3 +5
+* or given normal bin
+         kx = (x1-xl)*factx+1d0
+         kx = MIN( MAX(kx,1) ,nchx)
+         kposx1 = ist +m_buf1+kx
+         kpose1 = ist +m_buf1+nchx+kx
+      ENDIF
+      m_b(iposx1) = m_b(iposx1)  +wt1
+      m_b(ipose1) = m_b(ipose1)  +wt1*wt1
+      IF( kposx1 .NE. 0) m_b(kposx1) = m_b(kposx1)  +wt1
+      IF( kposx1 .NE. 0) m_b(kpose1) = m_b(kpose1)  +wt1*wt1
+      END   !GLK_Fil1
+
+      SUBROUTINE GLK_Fil1diff(id,xx,wtx,yy,wty)
+*     *****************************************
+* Special filling routine to fill the difference f(x)-g(y)
+* in the case when f and g are very similar x and y are close for each event.
+* In this case coherent filling is done if x and y fall into the same bin.
+* Note that bin width starts to be important in this method.
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+*
+      INTEGER           id
+      DOUBLE PRECISION  xx,wtx,yy,wty
+*    
+      DOUBLE PRECISION  x1,x2,wt2,wt1,factx,xl,xu
+      INTEGER           ist,ist2,ist3,iflag2,ityphi,kx,ke1,ie1,kx1,kx2,ke2,ix2,ie2,nchx,lact,ix1
+*-----------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+* exit for non-existig histo
+      IF(lact .EQ. 0)  RETURN
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+* one-dim. histo only
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1) THEN
+        CALL GLK_Stop1('GLK_Fil1diff: 1-dim histos only !!! id=',id)
+      ENDIF
+      x1= xx
+      x2= yy
+      wt1= wtx
+      wt2= wty
+      m_index(lact,3)=m_index(lact,3)+1
+* all entries
+      m_b(ist3 +7)  =m_b(ist3 +7)   +1
+* for average x or y not very well defined yet
+      m_b(ist3 +8)  =m_b(ist3 +8)  +wt1*x1 - wt2*x2
+      m_b(ist3 +9)  =m_b(ist3 +9)  +wt1*x1*x1 - wt2*x2*x2
+* filling coordinates
+      nchx  =m_b(ist2 +1)
+      xl    =m_b(ist2 +2)
+      xu    =m_b(ist2 +3)
+      factx =m_b(ist2 +4)
+* first variable
+      IF(x1 .LT. xl) THEN       ! underflow
+         ix1 = ist3 +1
+         ie1 = ist3 +4
+         kx1 = 0
+      ELSEIF(x1 .GT. xu) THEN   ! or overflow
+         ix1 = ist3 +3
+         ie1 = ist3 +6
+         kx1 = 0
+      ELSE                      ! normal bin
+         ix1 = ist3 +2
+         ie1 = ist3 +5
+         kx = (x1-xl)*factx+1d0
+         kx = MIN( MAX(kx,1) ,nchx)
+         kx1 = ist +m_buf1+kx
+         ke1 = ist +m_buf1+nchx+kx
+      ENDIF
+* second variable
+      IF(x2 .LT. xl) THEN       ! underflow
+         ix2 = ist3 +1
+         ie2 = ist3 +4
+         kx2 = 0
+      ELSEIF(x2 .GT. xu) THEN   ! or overflow
+         ix2 = ist3 +3
+         ie2 = ist3 +6
+         kx2 = 0
+      ELSE                      ! normal bin
+         ix2 = ist3 +2
+         ie2 = ist3 +5
+         kx = (x2-xl)*factx+1d0
+         kx = MIN( MAX(kx,1) ,nchx)
+         kx2 = ist +m_buf1+kx
+         ke2 = ist +m_buf1+nchx+kx
+      ENDIF
+* coherent filling
+      IF( ix1 .EQ. ix2 ) THEN
+         m_b(ix1) = m_b(ix1)  +wt1-wt2
+         m_b(ie1) = m_b(ie1)  +(wt1-wt2)**2
+      ELSE
+         m_b(ix1) = m_b(ix1)  +wt1
+         m_b(ie1) = m_b(ie1)  +wt1*wt1
+         m_b(ix2) = m_b(ix2)  -wt2
+         m_b(ie2) = m_b(ie2)  +wt2*wt2
+      ENDIF
+      IF( kx1 .EQ. kx2 ) THEN
+         IF( kx1 .NE. 0) THEN
+            m_b(kx1) = m_b(kx1)  +wt1-wt2
+            m_b(ke1) = m_b(ke1)  +(wt1-wt2)**2
+         ENDIF
+      ELSE
+         IF( kx1 .NE. 0) THEN
+            m_b(kx1) = m_b(kx1)  +wt1
+            m_b(ke1) = m_b(ke1)  +wt1*wt1
+         ENDIF
+         IF( kx2 .NE. 0) THEN
+            m_b(kx2) = m_b(kx2)  -wt2
+            m_b(ke2) = m_b(ke2)  +wt2*wt2
+         ENDIF
+      ENDIF
+      END   !GLK_Fil1diff
+
+      SUBROUTINE GLK_Fil2(id,x,y,wtw)
+*     ****************************
+* this routine not finished, 1-dim only!
+*     ***********************************
+      IMPLICIT NONE     
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  x,y,wtw
+* local
+      INTEGER           ist,iflag2,ityphi,ist2,ist3,nchx,nchy,ly,ky,k2,kx,lact,lx,k,l
+      DOUBLE PRECISION  xx,yy,wt,factx,xl,yl,facty
+*-------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0)  RETURN
+      ist  = m_index(lact,2)
+* one-dim. histo
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 2) THEN
+        CALL GLK_Stop1('GLK_Fil2: 2-dim histos only !!! id=',id)
+      ENDIF
+*...two-dim. scattergram, no errors!
+      ist2 = ist+7
+      ist3 = ist+15
+      xx= x
+      yy= y
+      wt= wtw
+      m_index(lact,3)=m_index(lact,3)+1
+* x-axis
+      nchx  =m_b(ist2 +1)
+      xl    =m_b(ist2 +2)
+      factx =m_b(ist2 +4)
+      kx=(xx-xl)*factx+1d0
+      lx=2
+      IF(kx .LT. 1)     lx=1
+      IF(kx .GT. nchx)  lx=3
+      l     = ist+34  +lx
+      m_b(l)  = m_b(l)    +wt
+      k     = ist+m_buf2  +kx
+      IF(lx .EQ. 2) m_b(k)  =m_b(k)  +wt
+      k2    = ist+m_buf2  +nchx+kx
+      IF(lx .EQ. 2) m_b(k2) =m_b(k2) +wt**2
+* y-axix
+      nchy  =m_b(ist2 +5)
+      yl    =m_b(ist2 +6)
+      facty =m_b(ist2 +8)
+      ky=(yy-yl)*facty+1d0
+      ly=2
+      IF(ky .LT. 1)    ly=1
+      IF(ky .GT. nchy) ly=3
+* under/over-flow
+      l = ist3  +lx +3*(ly-1)
+      m_b(l) =m_b(l)+wt
+* regular bin
+      k = ist+m_buf2 +kx +nchx*(ky-1)
+      IF(lx .EQ. 2.and.ly .EQ. 2) m_b(k)=m_b(k)+wt
+      END
+
+      SUBROUTINE GLK_Book1(id,title,nnchx,xxl,xxu)
+*     ********************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER          id
+      DOUBLE PRECISION xxl,xxu
+      CHARACTER*80 title
+* locals
+      DOUBLE PRECISION xl,xu,ddx
+      INTEGER          ist,nchx,ioplog,iopsla,ioperb,iflag2,ityphi,iflag1
+      INTEGER          ist3,ist2,lengt2,lact,nnchx,iopsc2,iopsc1,j
+      LOGICAL GLK_Exist
+*-------------------------------------------------
+      CALL GLK_Initialize
+      IF(GLK_Exist(id)) goto 900
+      ist=m_length
+      CALL GLK_hadres(0,lact)
+* Check if there is a free entry in the m_index
+      IF(lact .EQ. 0)
+     $     CALL GLK_Stop1('GLK_Book1: to many histos !!!!!,   id= ',id)
+      m_index(lact,1)=id
+      m_index(lact,2)=m_length
+      m_index(lact,3)=0
+* -------
+      CALL GLK_Copch(title,m_titlc(lact))
+      nchx =nnchx
+      IF(nchx .GT. m_MaxNb)
+     $     CALL GLK_Stop1(' GLK_Book1: To many bins requested,id= ',id)
+      xl   =xxl
+      xu   =xxu
+* ---------- title and bin content ----------
+      lengt2 = m_length +2*nchx +m_buf1+1
+      IF(lengt2 .GE. m_LenmB)
+     $  CALL GLK_Stop1('GLK_Book1:too litle storage, m_LenmB= ',m_LenmB)
+*
+      DO j=m_length+1,lengt2+1
+         m_b(j) = 0d0
+      ENDDO
+      m_length=lengt2
+*... default flags
+      ioplog   = 1
+      iopsla   = 1
+      ioperb   = 1
+      iopsc1   = 1
+      iopsc2   = 1
+      iflag1   =
+     $ ioplog+10*iopsla+100*ioperb+1000*iopsc1+10000*iopsc2
+      ityphi   = 1
+      iflag2   = ityphi
+* examples of decoding flags
+*      id       = nint(m_b(ist+2)-9d0-9d12)/10
+*      iflag1   = nint(m_b(ist+3)-9d0-9d12)/10
+*      ioplog = mod(iflag1,10)
+*      iopsla = mod(iflag1,100)/10
+*      ioperb = mod(iflag1,1000)/100
+*      iopsc1 = mod(iflag1,10000)/1000
+*      iopsc2 = mod(iflag1,100000)/10000
+*      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+*      ityphi = mod(iflag2,10)
+*--------- buffer -----------------
+* header
+      m_b(ist +1)  = 9999999999999d0
+      m_b(ist +2)  = 9d12 +     id*10 +9d0
+      m_b(ist +3)  = 9d12 + iflag1*10 +9d0
+      m_b(ist +4)  = 9d12 + iflag2*10 +9d0
+* dummy vertical scale
+      m_b(ist +5)  =  -100d0
+      m_b(ist +6)  =   100d0
+* pointer used to speed up search of histogram address
+      m_b(ist +7)  =   0d0
+* information on binning
+      ist2         = ist+7
+      m_b(ist2 +1) = nchx
+      m_b(ist2 +2) = xl
+      m_b(ist2 +3) = xu
+      ddx = xu-xl
+      IF(ddx .EQ. 0d0) CALL GLK_Stop1('+++GLK_Book1: xl=xu,  id= ',id)
+      m_b(ist2 +4) = DFLOAT(nchx)/ddx
+*
+* under/over-flow etc.
+      ist3       = ist+11
+      DO j=1,13
+         m_b(ist3 +j)=0d0
+      ENDDO
+      RETURN
+*----------------
+ 900  CALL GLK_Retu1(' WARNING GLK_Book1: already exists id= ', id)
+      END
+
+      SUBROUTINE GLK_Retu1(mesage,id)
+*     *******************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER id
+      CHARACTER*(*) mesage
+*-----------------------------
+      WRITE(m_out,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(m_out,'(a,a,i10,a)')
+     $                          '++ ', mesage, id, ' ++'
+      WRITE(m_out,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(6   ,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(6   ,'(a,a,i10,a)')
+     $                          '++ ', mesage, id, ' ++'
+      WRITE(6   ,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      END
+
+      SUBROUTINE GLK_Stop1(mesage,id)
+*     *******************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      CHARACTER*(*) mesage
+      INTEGER id
+*-----------------------------
+      WRITE(m_out,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(m_out,'(a,a,i10,a)')
+     $                          '++ ', mesage, id, ' ++'
+      WRITE(m_out,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(6   ,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      WRITE(6   ,'(a,a,i10,a)')
+     $                          '++ ', mesage, id, ' ++'
+      WRITE(6   ,'(a)')
+     $          '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
+      STOP
+      END
+
+
+      SUBROUTINE GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+*     ********************************************************
+* decoding option flags
+*     **********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER    id,ioplog,iopsla,ioperb,iopsc1,iopsc2
+      INTEGER    ist,iflag1,lact
+*----------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist=m_index(lact,2)
+* decoding flags
+      iflag1   = nint(m_b(ist+3)-9d0-9d12)/10
+      ioplog = mod(iflag1,10)
+      iopsla = mod(iflag1,100)/10
+      ioperb = mod(iflag1,1000)/100
+      iopsc1 = mod(iflag1,10000)/1000
+      iopsc2 = mod(iflag1,100000)/10000
+      END
+
+      SUBROUTINE GLK_idopt(id,ch)
+*     ************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER     id
+      CHARACTER*4 ch
+*
+      INTEGER     lact,ist,ioplog,ioperb,iopsla,iopsc1,iopsc2,iflag1
+*----------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist=m_index(lact,2)
+* decoding flags
+      CALL GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      IF(ch .EQ.       'LOGY'  ) THEN
+* log scale for print
+        ioplog = 2
+      ELSEIF(ch .EQ.   'ERRO'  ) THEN
+* errors in printing/plotting
+       ioperb  = 2
+      ELSEIF(ch .EQ.   'SLAN'  ) THEN
+* slanted line in plotting
+       iopsla  = 2
+      ELSEIF(ch .EQ.   'YMIN'  ) THEN
+       iopsc1  = 2
+      ELSEIF(ch .EQ.   'YMAX'  ) THEN
+       iopsc2  = 2
+      ENDIF
+* encoding back
+      iflag1   = ioplog+10*iopsla+100*ioperb+1000*iopsc1+10000*iopsc2
+      m_b(ist+3) = 9d12 + iflag1*10 +9d0
+      END
+
+
+      SUBROUTINE GLK_BookFun1(id,title,nchx,xmin,xmax,func)
+*/////////////////////////////////////////////////////////////////////////
+*//   fills histogram with function func(x)                             //
+*/////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  xmin,xmax,func
+      CHARACTER*80 title
+*
+      DOUBLE PRECISION  yy(m_MaxNb)
+      EXTERNAL func
+      LOGICAL GLK_Exist
+      INTEGER           ib,nchx
+      DOUBLE PRECISION  xl,xu,x
+*---------------------------------------------------------------------
+      CALL GLK_Initialize
+      IF(GLK_Exist(id)) GOTO 900
+ 15   xl=xmin
+      xu=xmax
+      CALL GLK_Book1(id,title,nchx,xl,xu)
+*...slanted line in plotting
+      CALL GLK_idopt(id,'SLAN')
+      IF(nchx .GT. 200) goto 901
+      DO ib=1,nchx
+         x= xmin +(xmax-xmin)/nchx*(ib-0.5d0)
+         yy(ib) = func(x)
+      ENDDO
+      CALL GLK_Pak(id,yy)
+      RETURN
+ 900  CALL GLK_Retu1('+++GLK_BookFun1: already exists id=',id)
+      CALL GLK_Delet(id)
+      GOTO 15
+ 901  CALL GLK_Stop1('+++GLK_BookFun1: to many bins, id=',id)
+      END
+
+      SUBROUTINE GLK_BookFun1I(id,title,nchx,xmin,xmax,func)
+*/////////////////////////////////////////////////////////////////////////
+*//   Fills histogram with function func(x)                             //
+*//   Gauss integration over each bin is done, can be slow.             //
+*/////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  xmin,xmax,func
+      CHARACTER*80 title
+*
+      DOUBLE PRECISION  yy(m_MaxNb)
+      EXTERNAL func
+      LOGICAL GLK_Exist
+      INTEGER           ib,nchx
+      DOUBLE PRECISION  xl,xu,x
+      DOUBLE PRECISION  GLK_Gauss,a,b,Eeps,dx
+*---------------------------------------------------------------------
+      CALL GLK_Initialize
+      IF(GLK_Exist(id)) GOTO 900
+ 15   xl=xmin
+      xu=xmax
+      CALL GLK_Book1(id,title,nchx,xl,xu)
+      IF(nchx .GT. 200) goto 901
+      Eeps = -0.01d0             !!! relat. precision requirement not very demanding
+      dx = (xmax-xmin)/nchx
+      DO ib=1,nchx
+         a= xmin +dx*(ib-1)
+         b= xmin +dx*ib
+         yy(ib) = GLK_Gauss(func,a,b,Eeps)/dx   !! 16-point Gauss integration over bin
+      ENDDO
+      CALL GLK_Pak(id,yy)
+      RETURN
+ 900  CALL GLK_Retu1('+++GLK_BookFun1I: already exists id=',id)
+      CALL GLK_Delet(id)
+      GOTO 15
+ 901  CALL GLK_Stop1('+++GLK_BookFun1I: to many bins, id=',id)
+      END
+
+      SUBROUTINE GLK_BookFun1S(id,title,nchx,xmin,xmax,func)
+*/////////////////////////////////////////////////////////////////////////
+*// Fills histogram with function func(x)                               //
+*// three point fit used                                                //
+*/////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      DOUBLE PRECISION  xmin,xmax,func
+      EXTERNAL func
+      INTEGER  id,nchx
+      CHARACTER*80 title
+* locals
+      DOUBLE PRECISION  yy(m_MaxNb),yy1(0:m_MaxNb)
+      LOGICAL GLK_Exist
+      DOUBLE PRECISION  xl,xu,x3,x2,dx
+      INTEGER           ib  
+*--------------------------------------------------------
+      CALL GLK_Initialize
+      IF( GLK_Exist(id) ) GOTO 900
+ 15   xl=xmin
+      xu=xmax
+      CALL GLK_Book1(id,title,nchx,xl,xu)
+
+*...slanted line in plotting
+      CALL GLK_idopt(id,'SLAN')
+      IF(nchx.gt.200) GOTO 901
+
+      yy1(0) = func(xmin)
+      dx=(xmax-xmin)/nchx
+
+      DO ib=1,nchx
+         x2= xmin +dx*(ib-0.5d0)
+         x3= x2 +dx*0.5d0
+         yy(ib)  = func(x2)
+         yy1(ib) = func(x3)
+*..  simpson
+         yy(ib) = ( yy1(ib-1) +4*yy (ib) +yy1(ib))/6d0
+      ENDDO
+
+      CALL GLK_Pak(id,yy)
+      RETURN
+ 900  CALL GLK_Retu1('+++GLK_BookFun1S: already exists, id=',id)
+      CALL GLK_Delet(id)
+      GOTO 15
+ 901  CALL GLK_Stop1(' +++GLK_BookFun1S: to many bins, id=',id)
+      END
+
+      DOUBLE PRECISION FUNCTION GLK_Gauss(f,a,b,Eeps)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*// This is iterative integration procedure                                  //
+*// originates  probably from CERN library                                   //
+*// it subdivides inegration range until required precision is reached       //
+*// precision is a difference from 8 and 16 point Gauss itegr. result        //
+*// Eeps POSITIVE treated as absolute precision                              //
+*// Eeps NEGATIVE treated as relative precision                              //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      DOUBLE PRECISION  f,a,b,Eeps
+*
+      DOUBLE PRECISION  c1,c2,bb,s8,s16,y,aa,const,delta,eps,u
+      INTEGER           i
+*
+      DOUBLE PRECISION  w(12),x(12)
+      EXTERNAL f
+      DATA const /1.0d-19/
+      DATA w
+     1/0.10122 85362 90376, 0.22238 10344 53374, 0.31370 66458 77887,
+     2 0.36268 37833 78362, 0.02715 24594 11754, 0.06225 35239 38648,
+     3 0.09515 85116 82493, 0.12462 89712 55534, 0.14959 59888 16577,
+     4 0.16915 65193 95003, 0.18260 34150 44924, 0.18945 06104 55069/
+      DATA x
+     1/0.96028 98564 97536, 0.79666 64774 13627, 0.52553 24099 16329,
+     2 0.18343 46424 95650, 0.98940 09349 91650, 0.94457 50230 73233,
+     3 0.86563 12023 87832, 0.75540 44083 55003, 0.61787 62444 02644,
+     4 0.45801 67776 57227, 0.28160 35507 79259, 0.09501 25098 37637/
+*-----------------------------------------------------------------------------
+      eps=abs(Eeps)
+      delta=const*abs(a-b)
+      GLK_Gauss=0d0
+      aa=a
+    5 y=b-aa
+      IF(abs(y)  .LE.  delta) RETURN
+    2 bb=aa+y
+      c1=0.5d0*(aa+bb)
+      c2=c1-aa
+      s8=0d0
+      s16=0d0
+      DO 1 i=1,4
+      u=x(i)*c2
+    1 s8=s8+w(i)*(f(c1+u)+f(c1-u))
+      DO 3 i=5,12
+      u=x(i)*c2
+    3 s16=s16+w(i)*(f(c1+u)+f(c1-u))
+      s8=s8*c2
+      s16=s16*c2
+      IF(Eeps .LT. 0d0) THEN
+        IF(abs(s16-s8)  .GT.  eps*abs(s16)) GOTO 4
+      ELSE
+        IF(abs(s16-s8)  .GT.  eps) GOTO 4
+      ENDIF
+      GLK_Gauss=GLK_Gauss+s16
+      aa=bb
+      GOTO 5
+    4 y=0.5d0*y
+      IF(abs(y)  .GT.  delta) GOTO 2
+      WRITE(*,7)
+      GLK_Gauss=0d0
+      RETURN
+    7 FORMAT(1x,36hgaus  ... too high accuracy required)
+      END
+
+
+
+      SUBROUTINE GLK_Book2(ID,TITLE,NCHX,XL,XU,NCHY,YL,YU)
+*     ***************************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           ID,NCHX,NCHY
+      DOUBLE PRECISION  XL,XU,YL,YU
+      CHARACTER*80 TITLE
+*
+      INTEGER   ist,lact,lengt2,j,nnchx,nnchy
+      LOGICAL GLK_EXIST
+*-------------------------------------------------------------------------
+      CALL GLK_Initialize
+      IF(GLK_EXIST(ID)) GOTO 900
+      ist=m_length
+      CALL GLK_hadres(0,lact)
+      IF(LACT .EQ. 0) GOTO 901
+      m_index(LACT,1)=ID
+      m_index(LACT,2)=m_length
+      CALL GLK_COPCH(TITLE,M_TITLC(LACT))
+      nnchx=NCHX
+      nnchy=NCHY
+      LENGT2 = M_LENGTH  +44+nnchx*nnchy
+      IF(LENGT2 .GE. m_LenmB) GOTO 902
+      DO 10 J=M_LENGTH+1,LENGT2+1
+   10 m_b(J) = 0D0
+      M_LENGTH=LENGT2
+      m_b(ist+1)=nnchx
+      m_b(ist+2)=XL
+      m_b(ist+3)=XU
+      m_b(ist+4)=float(nnchx)/(m_b(ist+3)-m_b(ist+2))
+      m_b(ist+5)=nnchy
+      m_b(ist+6)=YL
+      m_b(ist+7)=YU
+      m_b(ist+8)=float(nnchy)/(m_b(ist+7)-m_b(ist+6))
+      RETURN
+  900 CALL GLK_Retu1('GLK_Book2: histo already exists!!!! id=',id)
+      RETURN
+  901 CALL GLK_Stop1('GLK_Book2: too many histos !!!!! lact= ',LACT)
+      RETURN
+  902 CALL GLK_Stop1('GLK_Book2: too litle storage, m_LenmB=',m_LenmB)
+      RETURN
+      END
+
+      SUBROUTINE GLK_PrintAll
+*     ***********************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER i,id
+
+      DO i=1,m_idmax
+         id=m_index(i,1)
+         IF(id .GT. 0) CALL GLK_Print(id)
+      ENDDO
+      END
+
+      SUBROUTINE GLK_ListPrint(mout)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER i,id
+      CHARACTER*80 title
+      INTEGER             nb,mout
+      DOUBLE PRECISION    xmin,xmax
+*----------------------------------
+      WRITE(mout,*) 
+     $'============================================================================================'
+      WRITE(mout,*) 
+     $'     ID                 TITLE                                                nb, xmin, xmax'
+      DO i=1,m_idmax
+         id=m_index(i,1)
+         IF(id .NE. 0) THEN
+            CALL GLK_hinbo1(id,title,nb,xmin,xmax)
+            WRITE(mout,'(i8,a,a,i8,2g14.6)') id, '  ', title, nb,xmin,xmax
+         ENDIF
+      ENDDO
+      END
+
+
+
+      SUBROUTINE GLK_Print(id)
+*     ***********************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER  id
+*
+      DOUBLE PRECISION xl,bind,xlow,z,er,avex,dx,fact,ovef,undf,bmax,bmin,deltb
+      DOUBLE PRECISION sum,sumw,sumx
+      INTEGER          ist,ist2,ist3,idec,k2,k1,kros,j,ind,i,n,i1,ky,nchy,kx,nent,iflag2,lmx
+      INTEGER          ioplog,iopsla,ioperb,iopsc1,iopsc2,lact,ker,ityphi,kzer,k,ibn,nchx,istr
+      LOGICAL llg
+      CHARACTER*1 line(0:105),lchr(22),lb,lx,li,l0
+      SAVE lb,lx,li,l0,lchr
+      DATA lb,lx,li,l0 /' ','X','I','0'/
+      DATA lchr/' ','1','2','3','4','5','6','7','8','9',
+     $      'A','B','C','D','E','F','G','H','I','J','K','*'/
+*---------------------------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) goto 900
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+      idec    = nint(m_b(ist+2)-9d0-9d12)/10
+      IF(idec .NE. id) WRITE(6,*) '++++GLK_PRINT: PANIC! ID,IDEC= ',ID,IDEC
+      CALL GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      ker    =  ioperb-1
+      lmx = 67
+      IF(ker .EQ. 1) lmx=54
+      nent=m_index(lact,3)
+      IF(nent  .EQ.  0)                          GOTO 901
+      WRITE(m_out,1000) id,m_titlc(lact)
+ 1000 FORMAT('1',/,1X,I9,10X,A)
+*
+* one-dim. histo
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .EQ. 2) GOTO 200
+      IF( (ityphi.NE.1) .AND. (ityphi.NE.3) )
+     $   CALL GLK_Stop1(' GLK_PRINT: wrong histo type, id=',id)
+
+      nchx =   m_b(ist2 +1)
+      xl   =   m_b(ist2 +2)
+      dx   =  (  m_b(ist2 +3)-m_b(ist2 +2)  )/float(nchx)
+* fixing vertical scale
+      istr=ist+m_buf1+1
+      bmin = m_b(istr)
+      bmax = m_b(istr)+1d-5*abs(m_b(istr))  ! problems for single bin case
+      DO  ibn=istr,istr+nchx-1
+         bmax = max(bmax,m_b(ibn))
+         bmin = min(bmin,m_b(ibn))
+      ENDDO
+      IF(bmin  .EQ.  bmax)                       GOTO 903
+      IF(iopsc1 .EQ. 2) bmin=m_b(ist +5)
+      IF(iopsc2 .EQ. 2) bmax=m_b(ist +6)
+*
+      llg=ioplog .EQ. 2
+      IF(llg.and.bmin .LE. 0d0) bmin=bmax/10000.d0
+*
+      deltb = bmax-bmin
+      IF(deltb  .EQ.  0d0)                       GOTO 902
+      fact  = (lmx-1)/deltb
+      kzer  = -bmin*fact+1.00001d0
+      IF(llg) fact=(lmx-1)/(log(bmax)-log(bmin))
+      IF(llg) kzer=-log(bmin)*fact+1.00001d0
+*
+      undf = m_b(ist3 +1)
+      ovef = m_b(ist3 +3)
+      avex = 0d0
+      sumw  = m_b(ist3 +8)
+      sumx  = m_b(ist3 +9)
+      IF(sumw .NE. 0d0) avex = sumx/sumw
+      WRITE(m_out,'(4a15      )')  'nent',' sum','bmin','bmax'
+      WRITE(m_out,'(i15,3e15.5)')   nent,   sum,  bmin,  bmax
+      WRITE(m_out,'(4a15  )')      'undf','ovef','sumw','avex'
+      WRITE(m_out,'(4e15.5)')       undf,  ovef,  sumw,  avex
+*
+      IF(llg) write(m_out,1105)
+ 1105 format(35x,17hlogarithmic scale)
+*
+      kzer=max0(kzer,0)
+      kzer=min0(kzer,lmx)
+      xlow=xl
+      do 100 k=1,nchx
+* first fill with blanks
+      do  45 j=1,105
+   45 line(j)  =lb
+* THEN fill upper and lower boundry
+      line(1)  =li
+      line(lmx)=li
+      ind=istr+k-1
+      bind=m_b(ind)
+      bind= max(bind,bmin)
+      bind= min(bind,bmax)
+      kros=(bind-bmin)*fact+1.0001d0
+      IF(llg) kros=log(bind/bmin)*fact+1.0001d0
+      k2=max0(kros,kzer)
+      k2=min0(lmx,max0(1,k2))
+      k1=min0(kros,kzer)
+      k1=min0(lmx,max0(1,k1))
+      do 50 j=k1,k2
+   50 line(j)=lx
+      line(kzer)=l0
+      z=m_b(ind)
+      IF(ker .NE. 1) THEN
+        WRITE(m_out,'(a, f7.4,  a, d14.6,  132a1)')
+     $             ' ', xlow,' ',     z,' ',(line(i),i=1,lmx)
+      ELSE
+        er=dsqrt(dabs(m_b(ind+nchx)))
+        WRITE(m_out,'(a,f7.4,  a,d14.6,  a,d14.6, 132a1 )')
+     $             ' ',xlow,' ',    z,' ',   er,' ',(line(i),i=1,lmx)
+      ENDIF
+      xlow=xlow+dx
+  100 continue
+      RETURN
+*//////////////////////////////////////////////////////////////////////
+*// two dimensional requires complete restoration and tests          //
+*//////////////////////////////////////////////////////////////////////
+  200 continue
+      nchx=m_b(ist+1)
+      nchy=m_b(ist+5)
+      WRITE(m_out,2000) (lx,i=1,nchy)
+ 2000 format(1h ,10x,2hxx,100a1)
+      do 300 kx=1,nchx
+      do 250 ky=1,nchy
+      k=ist +m_buf2 +kx+nchx*(ky-1)
+      N=m_b(K)+1.99999D0
+      n=max0(n,1)
+      n=min0(n,22)
+      IF(DABS(m_b(k)) .LT. 1D-20) n=1
+      line(ky)=lchr(n)
+  250 continue
+      line(nchy+1)=lx
+      i1=nchy+1
+      WRITE(m_out,2100) (line(i),i=1,i1)
+ 2100 format(1h ,10x,1hx,100a1)
+  300 continue
+      WRITE(m_out,2000) (lx,i=1,nchy)
+      RETURN
+ 900  CALL GLK_Retu1('GLK_PRINT: nonexisting histo',id)
+      RETURN
+ 901  CALL GLK_Retu1('   GLK_PRINT: nent.eq.0',ID)
+      RETURN
+ 902  CALL GLK_Retu1('   GLK_PRINT: wrong plotting limits, id=',id)
+      RETURN
+ 903  CALL GLK_Retu1('   GLK_PRINT: bmin.eq.bmax, id=',id)
+      END
+
+      SUBROUTINE GLK_Operat(ida,chr,idb,idc,coef1,coef2)
+*     **********************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           ida,idb,idc
+      DOUBLE PRECISION  coef1,coef2
+      CHARACTER*80      title
+      CHARACTER*1       chr
+*
+      DOUBLE PRECISION  xl,xu
+      INTEGER           ista,ista2,ista3,ncha,iflag2a,ityphia,lactb
+      INTEGER           k,j,nchc,istc2,istc3,i1,j2,j3,j1,i2,i3,istc,istb2,istb3,nchb
+      INTEGER           lacta,id,istb,nchx,iflag2b,ityphib,lactc
+*----------------------------------------------------------
+      CALL GLK_hadres(ida,lacta)
+      IF(lacta .EQ. 0) RETURN
+      ista  = m_index(lacta,2)
+      ista2 = ista+7
+      ista3 = ista+11
+      ncha  = m_b(ista2+1)
+* check for type
+      iflag2a   = nint(m_b(ista+4)-9d0-9d12)/10
+      ityphia   = mod(iflag2a,10)
+      IF(ityphia .NE. 1) CALL GLK_Stop1('GLK_Operat: 1-dim histos only, id=',id)
+*------------------
+      CALL GLK_hadres(idb,lactb)
+      IF(lactb .EQ. 0) RETURN
+      istb  = m_index(lactb,2)
+      istb2 = istb+7
+      istb3 = istb+11
+      nchb  = m_b(istb2+1)
+      IF(nchb .NE. ncha) goto 900
+* check for type
+      iflag2b   = nint(m_b(istb+4)-9d0-9d12)/10
+      ityphib   = mod(iflag2b,10)
+      IF(ityphib .NE. 1)  CALL GLK_Stop1('GLK_Operat: 1-dim histos only, id=',id)
+*------------------
+      CALL GLK_hadres(idc,lactc)
+      IF(lactc .EQ. 0) THEN
+* ...if nonexistent, histo idc is here defined
+        CALL GLK_hinbo1(ida,title,nchx,xl,xu)
+        CALL GLK_Book1(idc,title,nchx,xl,xu)
+        CALL GLK_hadres(idc,lactc)
+        istc  = m_index(lactc,2)
+*...option copied from ida
+        m_b(istc+ 3)= m_b(ista +3)
+      ENDIF
+*...one nominal entry recorded
+      m_index(lactc,3) = 1
+*
+      istc  =  m_index(lactc,2)
+      istc2 =  istc+7
+      istc3 =  istc+11
+      nchc  =  m_b(istc2+1)
+*
+      IF(nchc .NE. ncha) goto 900
+      IF(ncha .NE. nchb .OR. nchb .NE. nchc) GOTO 900
+      DO k=1,ncha+3
+         IF(k .GT. ncha) THEN
+*     underflow, overflow
+            j=k-ncha
+            i1 = ista3 +j
+            i2 = istb3 +j
+            i3 = istc3 +j
+            j1 = ista3 +3+j
+            j2 = istb3 +3+j
+            j3 = istc3 +3+j
+         ELSE
+*     normal bins
+            i1 = ista +m_buf1 +k
+            i2 = istb +m_buf1 +k
+            i3 = istc +m_buf1 +k
+            j1 = ista +m_buf1 +ncha+k
+            j2 = istb +m_buf1 +ncha+k
+            j3 = istc +m_buf1 +ncha+k
+         ENDIF
+         IF    (chr .EQ. '+')   THEN
+            m_b(i3) =    coef1*m_b(i1) +    coef2*m_b(i2)
+            m_b(j3) = coef1**2*m_b(j1) + coef2**2*m_b(j2)
+         ELSEIF(chr .EQ. '-')   THEN
+            m_b(i3) = coef1*m_b(i1) - coef2*m_b(i2)
+            m_b(j3) = coef1**2*m_b(j1) + coef2**2*m_b(j2)
+         ELSEIF(chr .EQ. '*')   THEN
+            m_b(j3) = (coef1*coef2)**2
+     $           *(m_b(j1)*m_b(i2)**2 + m_b(j2)*m_b(i1)**2)
+            m_b(i3) = coef1*m_b(i1) * coef2*m_b(i2)
+         ELSEIF(chr .EQ. '/')   THEN
+            IF(m_b(i2) .EQ. 0d0) THEN
+               m_b(i3) = 0d0
+               m_b(j3) = 0d0
+            ELSE
+***               m_b(j3) = (coef1/coef2)**2/m_b(i2)**4           ! problems with overflow
+***     $              *(m_b(j1)*m_b(i2)**2 + m_b(j2)*m_b(i1)**2) ! problems with overflow
+               m_b(j3) = (coef1/coef2)**2 *m_b(j1) /m_b(i2)**2
+     $                  +(coef1/coef2)**2 *m_b(j2) *(m_b(i1)/m_b(i2)**2)**2
+               m_b(i3) = (coef1*m_b(i1) )/( coef2*m_b(i2))
+            ENDIF
+         ELSE
+            GOTO 901
+         ENDIF
+      ENDDO
+      RETURN
+ 900  WRITE(m_out,*) '+++++ GLK_Operat: non-equal no. bins ',ida,idb,idc
+      WRITE(    6,*) '+++++ GLK_Operat: non-equal no. bins ',ida,idb,idc
+      STOP
+ 901  WRITE(m_out,*) '+++++ GLK_Operat: wrong chr=',chr
+      WRITE(    6,*) '+++++ GLK_Operat: wrong chr=',chr
+      STOP
+      END
+
+      SUBROUTINE GLK_hinbo1(id,title,nchx,xl,xu)
+*     **************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id,nchx
+      DOUBLE PRECISION  xl,xu
+      CHARACTER*80 title
+      INTEGER           lact,ist,ist2
+*----------------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) THEN
+         CALL GLK_Stop1('+++STOP in GLK_hinbo1: wrong id=',id)
+      ENDIF
+      ist=m_index(lact,2)
+      ist2   = ist+7
+      nchx   = m_b(ist2 +1)
+      xl     = m_b(ist2 +2)
+      xu     = m_b(ist2 +3)
+      title  = m_titlc(lact)
+      END
+
+      SUBROUTINE GLK_UnPak(id,a,chd1,idum)
+*     *********************************
+* getting out histogram content (and error)
+* chd1= 'ERRO' is nonstandard option (unpack errors)
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id,idum
+      DOUBLE PRECISION  a(*)
+      CHARACTER*(*) chd1
+*
+      INTEGER            lact,ist,ist2,iflag2,ityphi,local,nch,nchy,ib
+*------------------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) goto 900
+      ist   = m_index(lact,2)
+      ist2  = ist+7
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .EQ. 1) THEN
+         nch   = m_b(ist2 +1)
+         local = ist +m_buf1
+      ELSEIF(ityphi .EQ. 2) THEN
+         nchy  = m_b(ist2+5)
+         nch   = nch*nchy
+         local = ist+ m_buf2
+      ELSE
+         CALL GLK_Stop1('+++GLK_UnPak: check type of histo id=',id)
+      ENDIF
+      do 10 ib=1,nch
+      IF(chd1 .NE. 'ERRO') THEN
+* normal bin
+        a(ib) = m_b(local+ib)
+      ELSE
+* error content
+        IF(ityphi .EQ. 2) goto 901
+        a(ib) = dsqrt( dabs(m_b(local+nch+ib) ))
+      ENDIF
+   10 continue
+      RETURN
+ 900  CALL GLK_Retu1('+++GLK_UnPak: nonexisting id=',id)
+      RETURN
+ 901  CALL GLK_Retu1('+++GLK_UnPak: no errors, two-dim, id=',id)
+      END
+
+      SUBROUTINE GLK_Pak(id,a)
+*     ************************
+* Loading in histogram content
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  a(*)
+*
+      INTEGER           lact,ist,ist2,iflag2,ityphi,nch,local,ib,nchy
+*----------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) goto 900
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+* 2-dimens histo alowed
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .EQ. 1) THEN
+         nch   = m_b(ist2 +1)
+         local = ist+m_buf1
+      ELSEIF(ityphi .EQ. 2) THEN
+         nchy  = m_b(ist2+5)
+         nch   = nch*nchy
+         local = ist+m_buf2
+      ELSE
+         CALL GLK_Stop1('+++GLK_Pak: wrong histo type, id=',id)
+      ENDIF
+      DO ib=1,nch
+         m_b(local +ib) = a(ib)
+      ENDDO
+* one nominal entry recorded
+      m_index(lact,3)  = 1
+      RETURN
+  900 CONTINUE
+      CALL GLK_Stop1('+++GLK_Pak: nonexisting id=',id)
+      END
+
+      SUBROUTINE GLK_Pake(id,a)
+*     **********************
+* Loading in error content
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  a(*)
+*
+      INTEGER           lact,ist,ist2,nch,iflag2,ityphi
+      INTEGER           nb,ib
+*---------------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) goto 901
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      nch=m_b(ist2+1)
+* 2-dimens histo NOT alowed
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 1) GOTO 900
+      DO ib=1,nch
+         m_b(ist+m_buf1+nch+ib) = a(ib)**2
+      ENDDO
+      CALL GLK_idopt( id,'ERRO')
+      RETURN
+  900 CALL GLK_Stop1('+++GLK_Pake: only for 1-dim hist, id=',id)
+      RETURN
+  901 CALL GLK_Stop1('+++GLK_Pake: nonexisting id=',id)
+      END
+
+
+      SUBROUTINE GLK_Range1(id,ylr,yur)
+*     *****************************
+* provides y-scale for 1-dim plots
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  ylr,yur
+*
+      INTEGER           lact,ist,ist2,nch,ib,ioplog,iopsla,ioperb,iopsc1,iopsc2
+      DOUBLE PRECISION  yl,yu
+*-------------------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      nch  = m_b(ist2 +1)
+      yl   = m_b(ist+m_buf1+1)
+      yu   = m_b(ist+m_buf1+1)
+      DO ib=1,nch
+         yl = min(yl,m_b(ist+m_buf1+ib))
+         yu = max(yu,m_b(ist+m_buf1+ib))
+      ENDDO
+* For default range some safety range is added
+      yu = yu + 0.05*ABS(yu-yl)
+***   yl = yl - 0.05*ABS(yu-yl) ! to be decided later on
+
+* If range was pre-defined then yl,yu are overwritten
+      CALL GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      IF(iopsc1 .EQ. 2) yl= m_b( ist +5)
+      IF(iopsc2 .EQ. 2) yu= m_b( ist +6)
+      ylr = yl
+      yur = yu
+      END
+
+
+      SUBROUTINE GLK_hinbo2(id,nchx,xl,xu,nchy,yl,yu)
+*     *******************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id,nchx,nchy
+      DOUBLE PRECISION  xl,xu,yl,yu
+      INTEGER           lact,ist,ist2
+*--------------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) goto 900
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      nchx = m_b(ist2 +1)
+      xl   = m_b(ist2 +2)
+      xu   = m_b(ist2 +3)
+      nchy = m_b(ist2 +5)
+      yl   = m_b(ist2 +6)
+      yu   = m_b(ist2 +7)
+      RETURN
+  900 CALL GLK_Stop1(' +++GLK_hinbo2: nonexisting histo id= ',id)
+      END
+
+
+      SUBROUTINE GLK_Ymaxim(id,wmax)
+*     **************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  wmax
+      INTEGER           lact,ist,jd,k
+*-------------------------------------------------------
+      IF(id .NE. 0) THEN
+         CALL GLK_hadres(id,lact)
+         IF(lact .EQ. 0) RETURN
+         ist= m_index(lact,2)
+         m_b(ist+6) =wmax
+         CALL GLK_idopt(id,'YMAX')
+      ELSE
+         DO k=1,m_idmax
+            IF(m_index(k,1) .EQ. 0) GOTO 20
+            ist=m_index(k,2)
+            jd =m_index(k,1)
+            m_b(ist+6) =wmax
+            CALL GLK_idopt(jd,'YMAX')
+         ENDDO
+ 20      CONTINUE
+      ENDIF
+      END
+
+      SUBROUTINE GLK_Yminim(id,wmin)
+*     ******************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id
+      DOUBLE PRECISION  wmin
+      INTEGER           lact,ist,k,jd
+*---------------------------------------------
+      IF(id .NE. 0) THEN
+         CALL GLK_hadres(id,lact)
+         IF(lact .EQ. 0) RETURN
+         ist =m_index(lact,2)
+         m_b(ist+5) =wmin
+         CALL GLK_idopt(id,'YMIN')
+      ELSE
+         DO k=1,m_idmax
+            IF(m_index(k,1) .EQ. 0) GOTO 20
+            ist=m_index(k,2)
+            jd =m_index(k,1)
+            m_b(ist+5) =wmin
+            CALL GLK_idopt(jd,'YMIN')
+         ENDDO
+ 20      CONTINUE
+      ENDIF
+      END
+
+      SUBROUTINE GLK_Reset(id,chd1)
+*     **************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER       id
+      CHARACTER*(*) chd1
+      INTEGER  lact,ist,ist2,iflag2,ityphi,ist3,nchx,nch,local,nchy,j
+*-------------------------------------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .LE. 0) RETURN
+      ist  =m_index(lact,2)
+      ist2 = ist+7
+*
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .EQ. 1) THEN
+* one-dim.
+        ist3  = ist+11
+        nchx  = m_b(ist2 +1)
+        nch   = 2*nchx
+        local = ist + m_buf1
+      ELSEIF(ityphi .EQ. 2) THEN
+* two-dim.
+        ist3  = ist+15
+        nchx  = m_b(ist2 +1)
+        nchy  = m_b(ist2 +5)
+        nch   = nchx*nchy
+        local = ist +m_buf2
+      ELSE
+         CALL GLK_Stop1('+++GLK_Reset: wrong type  id=',id)
+      ENDIF
+* reset miscaelaneous entries and bins
+      DO j=ist3+1,local +nch
+         m_b(j)    = 0d0
+      ENDDO
+* and no. of entries in m_index
+      m_index(lact,3) = 0
+      END
+
+      SUBROUTINE GLK_Delet(id1)
+*     *********************
+* Now it should work (stj Nov. 91) but watch out!
+* should works for 2-dim histos, please check this!
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           id1
+*
+      LOGICAL GLK_Exist
+      INTEGER           id,lact,ist,ist2,nch,iflag2,ityphi,local,k,i,l,next,idec,nchx,nchy
+*--------------------------------------------
+      ID=ID1
+      IF(id .EQ. 0) GOTO 300
+      IF( .NOT. GLK_Exist(id)) GOTO 900
+      CALL GLK_hadres(id,lact)
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+*----
+*[[[      WRITE(6,*) 'GLK_DELET-ing ID= ',ID
+      idec    = nint(m_b(ist+2)-9d0-9d12)/10
+      IF(idec .NE. id) WRITE(6,*)
+     $     '++++GLK_DELET: ALARM! ID,IDEC= ',ID,IDEC
+*----
+      nch  = m_b(ist2 +1)
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = MOD(iflag2,10)
+      IF(ityphi .EQ. 1) THEN
+* one-dim.
+        nchx  = m_b(ist2 +1)
+        nch   = 2*nchx
+* lenght of local histo to be removed
+        local = nch+m_buf1+1
+      ELSEIF(ityphi .EQ. 2) THEN
+* two-dim.
+        nchx  = m_b(ist2 +1)
+        nchy  = m_b(ist2 +5)
+        nch   = nchx*nchy
+* lenght of local histo to be removed
+        local = nch+m_buf2+1
+      ELSE
+         CALL GLK_Stop1('+++GLK_Delet: wrong type id=',id)
+      ENDIF
+* starting position of next histo in storage b
+      next = ist+1 +local
+* move down all histos above this one
+      DO 15 k =next,m_length
+      m_b(k-local)=m_b(k)
+   15 CONTINUE
+* define new end of storage
+      m_length=m_length-local
+* clean free space at the end of storage b
+      DO 20 k=m_length+1, m_length+local
+   20 m_b(k)=0d0
+* shift adresses of all displaced histos
+      DO 25 l=lact+1,m_idmax
+      IF(m_index(l,1) .NE. 0) m_index(l,2)=m_index(l,2)-local
+   25 CONTINUE
+* move entries in m_index down by one and remove id=lact entry
+      DO 30 l=lact+1,m_idmax
+      m_index(l-1,1)=m_index(l,1)
+      m_index(l-1,2)=m_index(l,2)
+      m_index(l-1,3)=m_index(l,3)
+      m_titlc(l-1)=m_titlc(l)
+   30 CONTINUE
+* last entry should be always empty
+      m_index(m_idmax,1)=0
+      m_index(m_idmax,2)=0
+      m_index(m_idmax,3)=0
+      do 50 k=1,80
+   50 m_titlc(m_idmax)(k:k)=' '
+      RETURN
+* -----------------------------------
+* Deleting all histos at once!!!
+  300 m_length=0
+      DO 400 i=1,m_idmax
+      DO 340 k=1,3
+  340 m_index(i,k)=0
+      DO 350 k=1,80
+  350 m_titlc(i)(k:k)=' '
+ 400  CONTINUE
+      RETURN
+* -----------------------------------
+ 900  CONTINUE
+      CALL GLK_Retu1(' +++GLK_DELET: nonexisting histo id= ',id)
+      END
+
+
+      SUBROUTINE GLK_Copch(ch1,ch2)
+*     *****************************
+      IMPLICIT NONE
+* copies CHARACTER*80 ch1 into ch2 up to a first $ sign
+      CHARACTER*80 ch1,ch2
+      LOGICAL met
+      INTEGER      i
+*----------------------------
+      met = .FALSE.
+      DO i=1,80
+         IF( ch1(i:i) .EQ. '$' .or. met )   THEN
+            ch2(i:i)=' '
+            met=.TRUE.
+         ELSE
+            ch2(i:i)=ch1(i:i)
+         ENDIF
+      ENDDO
+      END
+
+      INTEGER FUNCTION GLK_jadre2(id)
+*------------------------------------------------
+* Good old version -- but it is very very slow!!!
+* In the case of 100 histograms or more.
+*------------------------------------------------
+      IMPLICIT NONE 
+      INCLUDE 'GLK.h'
+      INTEGER           id,i
+*---------------------------------------
+      GLK_jadre2=0
+      DO 1 i=1,m_idmax
+      IF(m_index(i,1) .EQ. id) goto 2
+    1 CONTINUE
+* Nothing found.
+      RETURN
+* Found: id=0 is also legitimate find!!!
+    2 GLK_jadre2=i
+      END
+
+      SUBROUTINE GLK_hadres(id1,jadres)
+*     *********************************
+*--------------------------------------------------------------------
+* Educated guess based on past history is used to find quickly
+* location of the histogram in the matrix m_index.
+* This is based on observation that subsequent histogram calls
+* are linked into loops (so one can predict easily which histo will
+* be called next time).
+*--------------------------------------------------------------------
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER       id1,jadres
+      INTEGER       ist,i,id
+*----------------------------------------------------------------------
+      INTEGER iguess,jdlast,idlast
+      DATA    iguess,jdlast,idlast /-2141593,-3141593,-3141593/
+      SAVE    iguess,jdlast,idlast
+*----------------------------------------------------------------------
+      id=id1
+* --- The case of ID=0 treated separately, it is used to find out
+* --- last entry in the m_index (it is marked with zero)
+      IF(id .EQ. 0) THEN
+         DO i=1,m_idmax
+            IF(m_index(i,1) .EQ. 0) GOTO 44
+         ENDDO
+         CALL GLK_Stop1('+++GLK_hadres: Too short m_index=',m_index)
+ 44      CONTINUE
+         jadres = i
+         RETURN
+      ENDIF
+
+* --- Omit sophistications if lack of initialization
+      IF(jdlast .EQ. -3141593) GOTO 10
+      IF(iguess .EQ. -2141593) GOTO 10
+      IF(iguess .EQ. 0) GOTO 10
+      IF(jdlast .EQ. 0) GOTO 10
+
+* --- Try first previous histo (for repeated calls)
+      IF(jdlast .LT. 1 .OR. jdlast .GT. m_idmax) THEN
+         WRITE(6,*) '+++++ hadres: jdlast=',jdlast
+      ENDIF
+      IF(m_index(jdlast,1) .EQ. id) THEN
+         jadres = jdlast
+*##   WRITE(6,*)
+*##   $   'found, guess based on previous call to jadres ',jdlast
+         GOTO 20
+      ENDIF
+
+* --- Try current guess based on previous call
+      IF(iguess .LT. 1 .OR. iguess .GT. m_idmax)  THEN
+         WRITE(6,*)'+++++ hadres: iguess=',iguess
+      ENDIF
+      IF(m_index(iguess,1) .EQ. id) THEN
+         jadres = iguess
+*##   WRITE(6,*)
+*##   $   'found, guess on previous calls recorded in m_b(ist+7)',jdlast
+         GOTO 20
+      ENDIF
+
+* ================================================
+*    Do it HARD WAY, Search all matrix m_index
+* ================================================
+ 10   CONTINUE
+*##   WRITE(6,*) 'trying HARD WAY'
+      DO i=1,m_idmax
+         jadres=i
+         IF(m_index(i,1) .EQ. id) GOTO 20
+      ENDDO
+* -------------------------------------
+*     Nothing found: jadres=0
+* -------------------------------------
+      jadres=0
+      RETURN
+* =====================================
+*     Found: Set new guess for next call
+* =====================================
+ 20   CONTINUE
+* --- and store result as a new guess in previous histo
+* --- but only if it existed!!!!
+      DO i=1,m_idmax
+         IF(m_index(i,1) .EQ. 0) GOTO 40
+         IF(m_index(i,1) .EQ. idlast) THEN
+            ist=m_index(i,2)
+            IF(ist .GT. 0 .AND. ist .LT. m_LenmB) m_b(ist +7) = jadres
+*##   WRITE(6,*) 'STORED     id=',id
+            GOTO 40
+         ENDIF
+      ENDDO
+ 40   CONTINUE
+*##   WRITE(6,*)  'found, hard way searching all of m_index)', jdlast
+      iguess = m_b( m_index(jadres,2) +7)
+      jdlast = jadres
+      idlast = id
+      END
+
+
+*--------------------------------------------------------------
+* ----------- storing histograms in the disk file -------------
+*--------------------------------------------------------------
+
+      SUBROUTINE GLK_ReadFile(Dname)
+*     ******************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER ninph
+      CHARACTER*60 Dname
+*-------------------------------------------------
+      CALL GLK_Initialize
+* Read histograms
+      WRITE(    *,*) 'GLK_ReadFile: Reading histos from ', Dname
+      WRITE(m_out,*) 'GLK_ReadFile: Reading histos from ', Dname
+      ninph = 21
+      OPEN(ninph,file=Dname)           ! Open dump-file
+      CALL GLK_hrfile(ninph,' ',' ')   ! Define dump-file unit in GKL
+      CALL GLK_hrin(0,0,0)             ! Read histos from dump-file
+      CALL GLK_hrend(' ')              ! Close dump-file
+      END
+
+      SUBROUTINE GLK_WriteFile(Dname)
+*     ******************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER nouth
+      CHARACTER*60 Dname
+*-------------------------------------------------
+      CALL GLK_Initialize
+* Write all histograms into disk file
+      WRITE(    *,*) 'GLK_WriteFile: Writing histos into ', Dname
+      WRITE(m_out,*) 'GLK_WriteFile: Writing histos into ', Dname
+      nouth=22
+      OPEN(nouth,file=Dname)           ! Open dump-file
+      CALL GLK_hrfile(nouth,' ',' ')   ! Define dump-file in GLK
+      CALL GLK_hrout(0,0,' ')          ! Dump all histos on disk
+      CALL GLK_hrend(' ')              ! Close dump-file
+      END
+
+      SUBROUTINE GLK_hrfile(nhruni,chd1,chd2)
+*     ***************************************
+      IMPLICIT NONE
+      CHARACTER*(*) chd1,chd2
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER nhruni
+*-------------------------------------------------
+      CALL GLK_Initialize
+      m_huni=nhruni
+      END
+
+      SUBROUTINE GLK_hrout(idum1,idum2,chdum)
+*     ***************************************
+      IMPLICIT NONE
+      CHARACTER*8 chdum
+*
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER i,k,last,idum1,idum2
+*-----------------------------------------------------------------------
+      CALL GLK_Initialize
+      CALL GLK_hadres(0,last)
+      IF(last.EQ.0) GOTO 900
+      m_LenInd = last -1 
+      WRITE(m_huni,'(6i10)')    m_version, m_LenInd, m_LenmB, m_Length
+      WRITE(m_huni,'(6i15)')    ((m_index(i,k),k=1,3),i=1,m_LenInd)
+      WRITE(m_huni,'(a80)')     (m_titlc(i),          i=1,m_LenInd)
+      WRITE(m_huni,'(3d24.16)') (m_b(i), i=1,m_length)
+      RETURN
+ 900  CONTINUE
+      WRITE(m_out,*) '+++ GLK_hrout: no space in index'
+      WRITE(    *,*) '+++ GLK_hrout: no space in index'
+      END
+
+
+      SUBROUTINE GLK_hrin(idum1,idum2,idum3)
+*     **************************************
+* New version which has a possibility to
+*            MERGE histograms
+* If given ID already exists then it is modified by adding 1000000 !!!!
+* Mergigng is done simply by appending new histograms at the
+* very end of the m_index and bin matrices.
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER        idum1,idum2,idum3
+      INTEGER        l,lact,lenold,istn,idn,k,lenind3,nvrs3,nouth
+      INTEGER        i,lengt3,lenma3
+* Copy of the new m_index from the disk
+      INTEGER        lndex(m_idmax,3)
+      CHARACTER*80   titld(m_idmax)
+      LOGICAL GLK_Exist
+*-----------------------------------------------------------
+      CALL GLK_Initialize
+      nouth=m_huni
+* Read basic params
+      READ(nouth,'(6i10)')   nvrs3,lenind3,lenma3,lengt3
+      IF(m_length+lengt3 .GE. m_LenmB) GOTO 900
+* Check version
+      IF(m_version .NE. nvrs3) WRITE(m_out,*)
+     $ '+++++WARNING (GLK_hrin): histos produced by older version',nvrs3
+      IF(m_version .NE. nvrs3) WRITE(6,*)
+     $ '+++++WARNING (GLK_hrin): histos produced by older version',nvrs3
+      DO i=1,m_idmax
+         DO k=1,3
+            lndex(i,k)=0
+         ENDDO
+      ENDDO
+* Read new index and title from the disk
+* We keep backward compatibility for reading disk files
+      IF(nvrs3. LT. 130) lenind3 = m_idmax
+      IF(nvrs3. LT. 134) THEN
+         READ(nouth,'(6i10)')  ((lndex(i,k),k=1,3),i=1,lenind3)
+      ELSE
+         READ(nouth,'(6i15)')  ((lndex(i,k),k=1,3),i=1,lenind3)
+      ENDIF
+      READ(nouth,'(a80)')   (titld(i),          i=1,lenind3)
+      lenold=m_length
+* Append AT ONCE content of new histos at the end of storage m_b
+      m_length=m_length+lengt3
+      READ(nouth,'(3d24.16)') (m_b(i),i=lenold+1,m_length)
+
+* Append ONE BY ONE m_index and m_titlc with new histos
+      CALL GLK_hadres(0,lact)
+      DO l=1,lenind3
+         IF(lact .EQ. 0) GOTO 901
+         idn= lndex(l,1)
+         IF(idn .EQ. 0) GOTO 100
+* Identical id's are changed by adding big number = 1000000
+ 10      CONTINUE
+         IF( GLK_Exist(idn) ) THEN
+            idn = idn +1000000*(idn/iabs(idn))
+            GOTO 10
+         ENDIF
+         m_index(lact,1)=idn
+         m_index(lact,2)=lndex(l,2)+lenold
+         m_index(lact,3)=lndex(l,3)
+         m_titlc(lact)  =titld(l)
+* Still one small correction in the newly appended histo
+         istn  = m_index(lact,2)
+         m_b(istn +2)  = 9d12 +     idn*10 +9d0
+         lact=lact+1
+      ENDDO
+  100 CONTINUE
+      RETURN
+
+ 900  CONTINUE
+      CALL GLK_Stop1('++++ GLK_hrin: to litle space, m_LenmB= ',m_LenmB)
+ 901  CONTINUE
+      CALL GLK_Stop1('++++ GLK_hrin: to many histos, m_idmax= ',m_idmax)
+      END
+
+
+      SUBROUTINE GLK_hrin2(idum1,idum2,idum3)
+*     **********************************
+* New version which has a possibility to
+*            ADD histograms
+* If ID is not existing already then no action is taken
+*     ***********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER         idum1,idum2,idum3
+* Copy of the histos from the disk
+      DOUBLE PRECISION  bz(m_LenmB)
+      INTEGER           indez(m_idmax,3)
+      CHARACTER*80      titlz(m_idmax)
+      LOGICAL           GLK_Exist
+      INTEGER           nouth,ist3,nchx,ist,ist2,ist3z,nchxz,istz
+      INTEGER           ist2z,lact,lenmaz,lengtz,nvrsz,lenindz,lz,id,i,k
+*-------------------------------------------------------------
+      CALL GLK_Initialize
+      nouth=m_huni
+* Read basic params
+      READ(nouth,'(6i10)')   nvrsz,lenindz,lenmaz,lengtz
+* Check version
+      IF(m_version .NE. nvrsz) WRITE(m_out,*)
+     $ '++++WARNING (GLK_hrin2): histos produced by older version',nvrsz
+      IF(m_version .NE. nvrsz) WRITE(*,*)
+     $ '++++WARNING (GLK_hrin2): histos produced by older version',nvrsz
+
+* We keep backward compatibility for reading disk files
+      IF(nvrsz. LT. 130) lenindz = m_idmax
+      DO i=1,m_idmax
+         DO k=1,3
+            indez(i,k)=0
+         ENDDO
+      ENDDO
+* Read new m_index, title and bins from the disk
+      IF(nvrsz. LT. 140) THEN
+         READ(nouth,'(6i10)')    ((indez(i,k),k=1,3),i=1,lenindz)
+      ELSE
+         READ(nouth,'(6i15)')    ((indez(i,k),k=1,3),i=1,lenindz)
+      ENDIF
+      READ(nouth,'(a80)')     (titlz(i) ,         i=1,lenindz)
+      READ(nouth,'(3d24.16)') (bz(i),i=1,lengtz)
+
+* Add new histos from disk to existing ones one by one
+      DO lz=1,lenindz
+         id= indez(lz,1)
+         IF(id .EQ. 0) GOTO 200
+         IF( .NOT. GLK_Exist(id)) THEN
+            CALL GLK_Retu1('GLK_hrin2: unmached skipped histo ID=', id)
+            GOTO 100
+         ENDIF
+* parameters of existing histo
+         CALL GLK_hadres(id,lact)
+         ist  = m_index(lact,2)
+         ist2 = ist+7
+         ist3 = ist+11
+         nchx = m_b(ist2 +1)
+* parameters of the histo from the disk
+         istz   = indez(lz,2)
+         ist2z  = istz+7
+         ist3z  = istz+11
+         nchxz  = bz(ist2z +1)
+         IF(nchx .NE. nchxz) THEN
+            CALL GLK_Retu1('GLK_hrin2: non-equal bins, skipped ID=', id)
+            GOTO 100
+         ENDIF
+* Add/Merge all additive entries of the two histos
+* No of entries in m_index
+         m_index(lact,3) = m_index(lact,3)+indez(lact,3)
+* Overflows, underflows etc.
+         DO i=1,12
+            m_b(ist3+i)=m_b(ist3+i) +bz(ist3z+i)
+         ENDDO
+* Except of this one non-additive entry
+         m_b(ist3+13)=max(m_b(ist3+13),m_b(ist3z+13))
+* Regular bin content added now!
+         DO i= 1, 2*nchx
+            m_b(ist+m_buf1+i)=m_b(ist+m_buf1+i) +bz(istz+m_buf1+i)
+         ENDDO
+ 100     CONTINUE
+      ENDDO
+ 200  CONTINUE
+      END
+
+      SUBROUTINE GLK_hrend(chdum)
+*     ***********************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      CHARACTER*(*) chdum
+*---------------------------
+      CLOSE(m_huni)
+      END
+*======================================================================
+*                End of histograming procedures
+*======================================================================
+
+
+
+*======================================================================
+*               Ploting procedures using LaTeX
+*======================================================================
+
+      SUBROUTINE GLK_PlInitialize(Lint,TeXfile)
+*----------------------------------------------------------------------
+* Lint =0 
+*     Normal mode, full LaTeX header
+* Lint =1
+*     For TeX file is used in \input, no  LaTeX header
+* Lint =2
+*     LaTeX header for one-page plot used as input for postscript
+*
+* Negative Lint only for debug, big frame around plot is added.
+*----------------------------------------------------------------------
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER Lint,noufig
+      CHARACTER*60  TeXfile
+*---------------------------------
+* Initialize GLK_Plot
+      CALL GLK_PlInt(Lint)             ! Define header style
+      noufig=11                        ! 
+      OPEN(noufig,file=TeXfile)        ! Open LaTeX file
+      CALL GLK_PlCap(noufig)           ! Initialize GLK_Plot
+      END
+
+      SUBROUTINE GLK_PlEnd
+*     ********************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+*---------------------------------------------------
+* Note that TeX file is used in \input then you may not want
+* to have header and \end{document}
+      IF( ABS(m_lint) .NE. 1) THEN
+         WRITE(m_ltx,'(2A)') m_BS,'end{document}'
+      ENDIF
+      CLOSE(m_ltx)
+      END
+
+      SUBROUTINE GLK_PlInt(Lint)
+*     **************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER Lint
+*---------------------------------
+      m_lint = Lint
+      END
+
+      SUBROUTINE GLK_PlCap(LtxUnit)
+*     ****************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER   LtxUnit,i,k
+*---------
+      CALL GLK_Initialize
+      m_KeyTit= 0
+      DO i=1,m_titlen
+         DO k=1,80
+            m_titch(i)(k:k)=' '
+         ENDDO
+      ENDDO
+*---------
+      m_tline = 1
+      m_ltx=IABS(LtxUnit)
+
+      IF( ABS(m_lint) .EQ. 0) THEN
+* Normal mode, no colors!!!
+         WRITE(m_ltx,'(A,A)') m_BS,'documentclass[12pt]{article}'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{html}'
+         WRITE(m_ltx,'(A,A)') m_BS,'textwidth  = 16cm'
+         WRITE(m_ltx,'(A,A)') m_BS,'textheight = 18cm'
+         WRITE(m_ltx,'(A,A)') m_BS,'begin{document}'
+         WRITE(m_ltx,'(A)') '  '
+      ELSEIF( ABS(m_lint) .EQ. 1) THEN
+* For TeX file is used in \input
+         WRITE(m_ltx,'(A)') '  '
+      ELSEIF( ABS(m_lint) .EQ. 2) THEN
+* For one-page plot being input for postrscript
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'documentclass[12pt,html]{article}'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'documentclass[12pt,dvips]{seminar}' !<-for colors!!!
+         WRITE(m_ltx,'(A,A)') m_BS,'documentclass[12pt,dvips]{article}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{amsmath}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{amssymb}'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{html}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{epsfig}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{epic}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{eepic}'
+         WRITE(m_ltx,'(A,A)') m_BS,'usepackage{color}' !<-for colors!!!
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'hoffset    = -1in'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'voffset    = -1in'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'textwidth  = 16cm'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'textheight = 16cm'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'oddsidemargin = 0cm'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'topmargin     = 0cm'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'headheight    = 0cm'
+*!!         WRITE(m_ltx,'(A,A)') m_BS,'headsep       = 0cm'
+         WRITE(m_ltx,'(A,A)') m_BS,'begin{document}'
+         WRITE(m_ltx,'(A,A)') m_BS,'pagestyle{empty}'
+         WRITE(m_ltx,'(A)') '  '
+      ELSE
+         CALL GLK_Stop1('+++STOP in GLK_PlInt, wrong m_lint=',m_lint)
+      ENDIF
+      END
+
+
+      SUBROUTINE GLK_Plot(id,ch1,ch2,kdum)
+*     ************************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      CHARACTER CH1,CH2,CHR
+      CHARACTER*80 TITLE
+      INTEGER          id,kdum
+      DOUBLE PRECISION YY(m_MaxNb),YER(m_MaxNb)
+      LOGICAL GLK_EXIST
+      INTEGER          idum,kax,kay,ioplog,iopsla,ioperb,iopsc1,iopsc2
+      INTEGER          ker,nchx
+      DOUBLE PRECISION XL,XU,DXL,DXU,yl,yu
+*--------------------------------------------
+      DATA CHR /' '/
+* RETURN if histo non-existing
+      IF(.NOT.GLK_EXIST(ID)) GOTO 900
+* ...unpack histogram
+      CALL GLK_UNPAK(ID,YY ,'    ',IDUM)
+      CALL GLK_UNPAK(ID,YER,'ERRO',IDUM)
+      CALL GLK_HINBO1(ID,TITLE,NCHX,DXL,DXU)
+      XL = DXL
+      XU = DXU
+      CALL GLK_RANGE1(ID,YL,YU)
+      kax=1200
+      kay=1200
+      IF(CH1 .EQ. 'S') THEN
+* ...superimpose plot
+        BACKSPACE(m_ltx)
+        BACKSPACE(m_ltx)
+      ELSE
+* ...new frame only
+        CHR=CH1
+        CALL GLK_Plfram1(ID,kax,kay)
+      ENDIF
+      WRITE(m_ltx,'(A)')     '%========== next plot (line) =========='
+      WRITE(m_ltx,'(A,I10)') '%==== HISTOGRAM ID=',ID
+      WRITE(m_ltx,'(A,A70 )')'% ',TITLE
+*...cont. line for functions
+      CALL GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      ker = ioperb-1
+      IF (iopsla .EQ. 2)  CHR='C'
+*...suppress GLK_PLOT assignments
+      IF (CH2 .EQ. 'B')   CHR=' '
+      IF (CH2 .EQ. '*')   CHR='*'
+      IF (CH2 .EQ. 'C')   CHR='C'
+*...various types of lines
+      IF     (CHR .EQ. ' ') THEN
+*...contour line used for histogram
+          CALL GLK_PlHist(kax,kay,NCHX,YL,YU,YY,KER,YER)
+      ELSE IF(CHR .EQ. '*') THEN
+*...marks in the midle of the bin
+          CALL GLK_PlHis2(kax,kay,NCHX,YL,YU,YY,KER,YER)
+      ELSE IF(CHR .EQ. 'C') THEN
+*...slanted (dotted) line in plotting non-MC functions
+          CALL GLK_PlCirc(kax,kay,NCHX,YL,YU,YY)
+      ENDIF
+*------------------------------!
+* Ending
+*------------------------------!
+      WRITE(m_ltx,'(2A)') m_BS,'end{picture} % close entire picture '
+      WRITE(m_ltx,'(2A)') m_BS,'end{figure}'
+
+      RETURN
+  900 CALL GLK_Retu1('+++GLK_PLOT: Nonexistig histo, skipped, id=' ,ID)
+      END
+
+      SUBROUTINE GLK_Plfram1(ID,kax,kay)
+*     **********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           ID,kax,kay
+      CHARACTER*80 title
+      DOUBLE PRECISION   TIPSY(20),TIPSX(20)
+      DOUBLE PRECISION   XL,DXL,XU,DXU
+      INTEGER            ntipy,ntipx,nchx,icont
+      DOUBLE PRECISION   yu,yl
+      DATA ICONT/0/
+*----------------
+      ICONT=ICONT+1
+      CALL GLK_HINBO1(ID,TITLE,NCHX,DXL,DXU)
+      XL = DXL
+      XU = DXU
+      CALL GLK_RANGE1(ID,YL,YU)
+
+      IF(ICONT .GT. 1) WRITE(m_ltx,'(2A)') m_BS,'newpage'
+*------------------------------!
+*           Header
+*------------------------------!
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)') '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+     $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'
+      WRITE(m_ltx,'(A)') '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+     $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'
+      WRITE(m_ltx,'(2A)') m_BS,'begin{figure}[!ht]'
+      WRITE(m_ltx,'(2A)') m_BS,'centering'
+*------------------------------!
+* General Caption
+*------------------------------!
+      WRITE(m_ltx,'(4A)') m_BS,'caption{',m_BS,'small'
+      IF(M_KEYTIT.EQ.0) THEN
+        WRITE(m_ltx,'(A)')     TITLE
+      ELSE
+        WRITE(m_ltx,'(A)')     m_titch(1)
+      ENDIF
+      WRITE(m_ltx,'(A)') '}'
+*------------------------------!
+* Frames and labels
+*------------------------------!
+      WRITE(m_ltx,'(A)') '% =========== big frame, title etc. ======='
+      WRITE(m_ltx,'(4A)') m_BS,'setlength{',m_BS,'unitlength}{0.1mm}'
+      WRITE(m_ltx,'(2A)') m_BS,'begin{picture}(1600,1500)'
+      WRITE(m_ltx,'(4A)')
+     $     m_BS,'put(0,0){',m_BS,'framebox(1600,1500){ }}'
+      WRITE(m_ltx,'(A)') '% =========== small frame, labeled axis ==='
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $    m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $    m_BS,'put(0,0){',m_BS,'framebox( ',kax,',',kay,'){ }}'
+      WRITE(m_ltx,'(A)') '% =========== x and y axis ================'
+      CALL GLK_SAxisX(kax,XL,XU,NTIPX,TIPSX)
+      CALL GLK_SAxisY(kay,YL,YU,NTIPY,TIPSY)
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}'
+     $                ,'% end of plotting labeled axis'
+      END
+
+      SUBROUTINE GLK_SAxisX(kay,YL,YU,NLT,TIPSY)
+*     ***************************************
+* plotting x-axis with long and short tips
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           kay,NLT
+      DOUBLE PRECISION  YL,YU,TIPSY(20)
+*
+      INTEGER           LY,JY,n,nts,k,lex
+      DOUBLE PRECISION  DY,pds,scmx,p0s,ddys,yy0l,ddyl,pdl,p0l,yy0s
+*---------------------------------------------------
+      DY= ABS(YU-YL)
+      LY = NINT( LOG10(DY) -0.4999999d0 )
+      JY = NINT(DY/10d0**LY)
+      DDYL = DY*10d0**(-LY)
+      IF( JY .EQ. 1)             DDYL = 10d0**LY*0.25d0
+      IF( JY .GE. 2.AND.JY .LE. 3) DDYL = 10d0**LY*0.5d0
+      IF( JY .GE. 4.AND.JY .LE. 6) DDYL = 10d0**LY*1.0d0
+      IF( JY .GE. 7)             DDYL = 10d0**LY*2.0d0
+      WRITE(m_ltx,'(A)') '% .......GLK_SAxisX........ '
+      WRITE(m_ltx,'(A,I4)') '%  JY= ',JY
+*-------
+      NLT = INT(DY/DDYL)
+      NLT = MAX0(MIN0(NLT,20),1)+1
+      YY0L = NINT(YL/DDYL+0.5d0)*DDYL
+      DDYS = DDYL/10d0
+      YY0S = NINT(YL/DDYS+0.4999999d0)*DDYS
+      P0L = kay*(YY0L-YL)/(YU-YL)
+      PDL = kay*DDYL/(YU-YL)
+      P0S = kay*(YY0S-YL)/(YU-YL)
+      PDS = kay*DDYS/(YU-YL)
+      NLT = INT(ABS(YU-YY0L)/DDYL+0.0000001d0)+1
+      NTS = INT(ABS(YU-YY0S)/DDYS+0.0000001d0)+1
+      DO 41 N=1,NLT
+      TIPSY(N) =YY0L+ DDYL*(N-1)
+  41  CONTINUE
+      WRITE(m_ltx,1000)
+     $ m_BS,'multiput('  ,P0L,  ',0)('  ,PDL,  ',0){'  ,NLT,  '}{',
+     $ m_BS,'line(0,1){25}}',
+     $ m_BS,'multiput('  ,P0S,  ',0)('  ,PDS,  ',0){'  ,NTS,  '}{',
+     $ m_BS,'line(0,1){10}}'
+      WRITE(m_ltx,1001)
+     $ m_BS,'multiput('  ,P0L,  ','  ,kay,  ')('  ,PDL,  ',0){'  ,NLT,
+     $ '}{'  ,m_BS,  'line(0,-1){25}}',
+     $ m_BS,'multiput('  ,P0S,  ','  ,kay,  ')('  ,PDS,  ',0){'  ,NTS,
+     $ '}{'  ,m_BS,  'line(0,-1){10}}'
+ 1000 FORMAT(2A,F8.2,A,F8.2,A,I4,3A)
+ 1001 FORMAT(2A,F8.2,A,I4,A,F8.2,A,I4,3A)
+* ...labeling of axis
+      SCMX = DMAX1(DABS(YL),DABS(YU))
+      LEX  = NINT( LOG10(SCMX) -0.50001)
+      DO 45 N=1,NLT
+      K = NINT(kay*(TIPSY(N)-YL)/(YU-YL))
+      IF(LEX .LT. 2.AND.LEX .GT. -1) THEN
+* ...without exponent
+      WRITE(m_ltx,'(2A,I4,5A,F8.3,A)')
+     $ m_BS,'put(',K,',-25){',m_BS,'makebox(0,0)[t]{',m_BS,'large $ ',
+     $ TIPSY(N), ' $}}'
+      ELSE
+* ...with exponent
+      WRITE(m_ltx,'(2A,I4,5A,F8.3,2A,I4,A)')
+     $ m_BS,'put(' ,K, ',-25){',m_BS,'makebox(0,0)[t]{',m_BS,'large $ ',
+     $ TIPSY(N)/(10d0**LEX),m_BS,'cdot 10^{',LEX,'} $}}'
+      ENDIF
+  45  CONTINUE
+      END
+
+      SUBROUTINE GLK_SAxisY(kay,yl,yu,nlt,tipsy)
+*     ******************************************
+* plotting y-axis with long and short tips
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER          kay,nlt
+      DOUBLE PRECISION yl,yu,tipsy(20)
+*
+      DOUBLE PRECISION dy,ddyl,z0l,scmx,yy0s,ddys,yy0l,p0l,pds,p0s,pdl
+      INTEGER          ly,jy,n,nts,k,lex
+*---------------------------------------------------
+      DY= ABS(YU-YL)
+      LY = NINT( LOG10(DY) -0.49999999d0 )
+      JY = NINT(DY/10d0**LY)
+      DDYL = DY*10d0**(-LY)
+      IF( JY .EQ. 1)             DDYL = 10d0**LY*0.25d0
+      IF( JY .GE. 2.AND.JY .LE. 3) DDYL = 10d0**LY*0.5d0
+      IF( JY .GE. 4.AND.JY .LE. 6) DDYL = 10d0**LY*1.0d0
+      IF( JY .GE. 7)             DDYL = 10d0**LY*2.0d0
+      WRITE(m_ltx,'(A)') '% .......GLK_SAxisY........ '
+      WRITE(m_ltx,'(A,I4)') '%  JY= ',JY
+*-------
+      NLT = INT(DY/DDYL)
+      NLT = MAX0(MIN0(NLT,20),1)+1
+      YY0L = NINT(YL/DDYL+0.4999999d0)*DDYL
+      DDYS = DDYL/10d0
+      YY0S = NINT(YL/DDYS+0.5d0)*DDYS
+      P0L = kay*(YY0L-YL)/(YU-YL)
+      PDL = kay*DDYL/(YU-YL)
+      P0S = kay*(YY0S-YL)/(YU-YL)
+      PDS = kay*DDYS/(YU-YL)
+      NLT= INT(ABS(YU-YY0L)/DDYL+0.0000001d0) +1
+      NTS= INT(ABS(YU-YY0S)/DDYS+0.0000001d0) +1
+      DO 41 N=1,NLT
+      TIPSY(N) =YY0L+ DDYL*(N-1)
+  41  CONTINUE
+* plotting tics on vertical axis
+      WRITE(m_ltx,1000)
+     $ m_BS,'multiput(0,'  ,P0L,  ')(0,'  ,PDL  ,'){'  ,NLT,  '}{',
+     $ m_BS,'line(1,0){25}}',
+     $ m_BS,'multiput(0,'  ,P0S,  ')(0,'  ,PDS,  '){'  ,NTS,  '}{',
+     $ m_BS,'line(1,0){10}}'
+      WRITE(m_ltx,1001)
+     $ m_BS,'multiput('  ,kay,  ','  ,P0L,  ')(0,'  ,PDL,  '){'  ,NLT,
+     $ '}{',m_BS,'line(-1,0){25}}',
+     $ m_BS,'multiput('  ,kay,  ','  ,P0S,  ')(0,'  ,PDS,  '){'  ,NTS,
+     $ '}{',m_BS,'line(-1,0){10}}'
+ 1000 FORMAT(2A,F8.2,A,F8.2,A,I4,3A)
+ 1001 FORMAT(2A,I4,A,F8.2,A,F8.2,A,I4,3A)
+* ...Zero line if necessary
+      Z0L = kay*(-YL)/(YU-YL)
+      IF(Z0L .GT. 0D0.AND.Z0L .LT. FLOAT(kay))
+     $      WRITE(m_ltx,'(2A,F8.2,3A,I4,A)')
+     $       m_BS,'put(0,'  ,Z0L,  '){',m_BS,'line(1,0){'  ,kay,  '}}'
+* ...labeling of axis
+      SCMX = DMAX1(DABS(YL),DABS(YU))
+      LEX  = NINT( LOG10(SCMX) -0.50001d0)
+      DO 45 N=1,NLT
+      K = NINT(kay*(TIPSY(N)-YL)/(YU-YL))
+      IF(LEX .LT. 2.AND.LEX .GT. -1) THEN
+* ...without exponent
+      WRITE(m_ltx,'(2A,I4,5A,F8.3,A)')
+     $  m_BS,'put(-25,'  ,K,  '){',m_BS,'makebox(0,0)[r]{',
+     $  m_BS,'large $ '  ,TIPSY(N),  ' $}}'
+      ELSE
+* ...with exponent
+      WRITE(m_ltx,'(2A,I4,5A,F8.3,2A,I4,A)')
+     $ m_BS,'put(-25,'  ,K,  '){',m_BS,'makebox(0,0)[r]{',
+     $ m_BS,'large $ '
+     $ ,TIPSY(N)/(10d0**LEX),  m_BS,'cdot 10^{'  ,LEX,  '} $}}'
+      ENDIF
+  45  CONTINUE
+      END
+
+      SUBROUTINE GLK_PlHist(kax,kay,nchx,yl,yu,yy,ker,yer)
+*     ************************************************
+* plotting contour line for histogram
+*     ***********************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           kax,kay,nchx,ker
+      DOUBLE PRECISION  yl,yu,yy(*),yer(*)
+      CHARACTER*80 FMT1
+*
+      INTEGER           IX0,ix2,idx,ie,ierr,idy,ib,iy0,iy1,ix1
+*---------------------------------------------------
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $  m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(A)') '% ========== plotting primitives =========='
+*...various types of line
+      IF(m_tline .EQ. 1) THEN
+         WRITE(m_ltx,'(2A)') m_BS,'thicklines '
+      ELSE
+         WRITE(m_ltx,'(2A)') m_BS,'thinlines '
+      ENDIF
+*...short macros for vertical/horizontal straight lines
+      WRITE(m_ltx,'(8A)')
+     $ m_BS,'newcommand{',m_BS,'x}[3]{',m_BS,'put(#1,#2){',
+     $ m_BS,'line(1,0){#3}}}'
+      WRITE(m_ltx,'(8A)')
+     $ m_BS,'newcommand{',m_BS,'y}[3]{',m_BS,'put(#1,#2){',
+     $ m_BS,'line(0,1){#3}}}'
+      WRITE(m_ltx,'(8A)')
+     $ m_BS,'newcommand{',m_BS,'z}[3]{',m_BS,'put(#1,#2){',
+     $ m_BS,'line(0,-1){#3}}}'
+*   error bars
+      WRITE(m_ltx,'(8A)')
+     $   m_BS,'newcommand{',m_BS,'e}[3]{',
+     $   m_BS,'put(#1,#2){',m_BS,'line(0,1){#3}}}'
+      IX0=0
+      IY0=0
+      DO 100 IB=1,NCHX
+      IX1 = NINT(kax*(IB-0.00001)/NCHX)   !ib=7
+      IY1 = NINT(kay*(YY(IB)-YL)/(YU-YL)) !iy1=775,while ix0=168,iy0=770
+      IDY = IY1-IY0
+      IDX = IX1-IX0
+      FMT1 = '(2(2A,I4,A,I4,A,I4,A))'
+      IF( IDY .GE. 0) THEN
+         IF(IY1 .GE. 0.AND.IY1 .LE. kay)
+     $   WRITE(m_ltx,FMT1) m_BS,'y{',IX0,'}{',IY0,'}{',IDY,'}',
+     $                     m_BS,'x{',IX0,'}{',IY1,'}{',IDX,'}'
+      ELSE
+         IF(IY1 .GE. 0.AND.IY1 .LE. kay)
+     $   WRITE(m_ltx,FMT1) m_BS,'z{',IX0,'}{',IY0,'}{',-IDY,'}',
+     $                     m_BS,'x{',IX0,'}{',IY1,'}{',IDX,'}'
+      ENDIF
+      IX0=IX1
+      IY0=IY1
+      IF(KER .EQ. 1) THEN
+        IX2  = NINT(kax*(IB-0.5000d0)/NCHX)
+        IERR = NINT(kay*((YY(IB)-YER(IB))-YL)/(YU-YL))
+        IE = NINT(kay*YER(IB)/(YU-YL))
+        IF(IY1 .GE. 0.AND.IY1 .LE. kay.and.abs(ierr) .LE. 9999
+     $     .and.2*ie .LE. 9999) WRITE(m_ltx,8000) m_BS,IX2,IERR,IE*2
+      ENDIF
+ 100  CONTINUE
+8000  FORMAT(4(A1,2He{,I4,2H}{,I5,2H}{,I4,1H}:1X ))
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}',
+     $       ' % end of plotting histogram'
+* change line-style
+      m_tline= m_tline+1
+      IF(m_tline .GT. 2) m_tline=1
+      END
+
+      SUBROUTINE GLK_PlHis2(kax,kay,nchx,yl,yu,yy,ker,yer)
+*     ************************************************
+* marks in the midle of the bin
+*     **********************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      DOUBLE PRECISION  yl,yu,yy(*),yer(*)
+      INTEGER           kax,kay,nchx,ker
+*
+      INTEGER           iy1,ierr,ie,ix1,irad1,irad2,ib
+*---------------------------------------------------
+
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $ m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(A)') '% ========== plotting primitives =========='
+*...various types of mark
+      IRAD1= 6
+      IRAD2=10
+      IF(m_tline .EQ. 1) THEN
+*   small filled circle
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle*{',IRAD1,'}}}'
+      ELSEIF(m_tline .EQ. 2) THEN
+*   small open circle
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle{',IRAD1,'}}}'
+      ELSEIF(m_tline .EQ. 3) THEN
+*   big filled circle
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle*{',IRAD2,'}}}'
+      ELSEIF(m_tline .EQ. 4) THEN
+*   big open circle
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle{',IRAD2,'}}}'
+* Other symbols
+      ELSEIF(m_tline .EQ. 5) THEN
+       WRITE(m_ltx,'(10A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'makebox(0,0){$',m_BS,'diamond$}}}'
+      ELSE
+       WRITE(m_ltx,'(10A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'makebox(0,0){$',m_BS,'star$}}}'
+      ENDIF
+*   error bars
+      WRITE(m_ltx,'(8A)')
+     $   m_BS,'newcommand{',m_BS,'E}[3]{',
+     $   m_BS,'put(#1,#2){',m_BS,'line(0,1){#3}}}'
+      DO 100 IB=1,NCHX
+      IX1 = NINT(kax*(IB-0.5000d0)/NCHX)
+      IY1 = NINT(kay*(YY(IB)-YL)/(YU-YL))
+      IF(IY1 .GE. 0.AND.IY1 .LE. kay) WRITE(m_ltx,7000) m_BS,IX1,IY1
+      IF(KER .EQ. 1) THEN
+        IERR = NINT(kay*((YY(IB)-YER(IB))-YL)/(YU-YL))
+        IE   = NINT(kay*YER(IB)/(YU-YL))
+        IF(IY1 .GE. 0.AND.IY1 .LE. kay.and.abs(ierr) .LE. 9999
+     $       .and.2*ie .LE. 9999) WRITE(m_ltx,8000) m_BS,IX1,IERR,IE*2
+      ENDIF
+ 100  CONTINUE
+7000  FORMAT(4(A1,2HR{,I4,2H}{,I4,1H}:1X ))
+8000  FORMAT(4(A1,2HE{,I4,2H}{,I5,2H}{,I4,1H}:1X ))
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}',
+     $    ' % end of plotting histogram'
+* change line-style
+      m_tline= m_tline+1
+      IF(m_tline .GT. 6) m_tline=1
+      END
+
+      SUBROUTINE GLK_PlCirc(kax,kay,nchx,yl,yu,yy)
+*     ****************************************
+* plots equidistant points, four-point interpolation,
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           kax,kay,nchx
+      DOUBLE PRECISION  yl,yu,yy(*)
+*
+      INTEGER           IX(m_MaxNb),IY(m_MaxNb)
+      DOUBLE PRECISION  ai0,dx,aj0,ds,facy,aj,ai
+      INTEGER           ipnt,i,iter,ipoin,irad1,irad2
+      DOUBLE PRECISION  GLK_AproF
+*---------------------------------------------------
+
+* ...various types of line
+* ...distance between points is DS, radius of a point is IRAD
+      IRAD2=6
+      IRAD1=3
+* .............
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $  m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(A)') '% ========== plotting primitives =========='
+      IF(m_tline .EQ. 1) THEN
+*   small filled circle
+       DS = 10
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle*{',IRAD1,'}}}'
+      ELSEIF(m_tline .EQ. 2) THEN
+*   small open circle
+       DS = 10
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle{',IRAD1,'}}}'
+      ELSEIF(m_tline .EQ. 3) THEN
+*   big filled circle
+       DS = 20
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle*{',IRAD2,'}}}'
+      ELSEIF(m_tline .EQ. 4) THEN
+*   big open circle
+       DS = 20
+       WRITE(m_ltx,'(8A,I3,A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'circle{',IRAD2,'}}}'
+* Other symbols
+      ELSEIF(m_tline .EQ. 5) THEN
+       DS = 20
+       WRITE(m_ltx,'(10A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'makebox(0,0){$',m_BS,'diamond$}}}'
+      ELSE
+       DS = 20
+       WRITE(m_ltx,'(10A)')
+     $   m_BS,'newcommand{',m_BS,'R}[2]{',
+     $   m_BS,'put(#1,#2){',m_BS,'makebox(0,0){$',m_BS,'star$}}}'
+      ENDIF
+      FACY = kay/(YU-YL)
+* plot first point
+      AI  = 0.
+      AJ  = (GLK_AproF( (AI/kax)*NCHX+0.5d0, NCHX, YY) -YL)*FACY
+      IPNT =1
+      IX(IPNT) = INT(AI)
+      IY(IPNT) = INT(AJ)
+      DX =  DS
+      AI0 = AI
+      AJ0 = AJ
+* plot next points
+      DO 100 IPOIN=2,3000
+* iteration to get (approximately) equal distance among ploted points
+      DO  50 ITER=1,3
+      AI  = AI0+DX
+      AJ  = (GLK_AproF( (AI/kax)*NCHX+0.5d0, NCHX, YY) -YL)*FACY
+      DX  = DX *DS/SQRT(DX**2 + (AJ-AJ0)**2)
+  50  CONTINUE
+      IF(INT(AJ) .GE. 0.AND.INT(AJ) .LE. kay.AND.INT(AI) .LE. kax) THEN
+         IPNT = IPNT+1
+         IX(IPNT) = INT(AI)
+         IY(IPNT) = INT(AJ)
+      ENDIF
+      AI0 = AI
+      AJ0 = AJ
+      IF(INT(AI) .GT. kax) GOTO 101
+ 100  CONTINUE
+ 101  CONTINUE
+      WRITE(m_ltx,7000) (m_BS,IX(I),IY(I), I=1,IPNT)
+7000  FORMAT(4(A1,2HR{,I4,2H}{,I4,1H}:1X ))
+      WRITE(m_ltx,'(2A)') m_BS,'end{picture}} % end of plotting line'
+* change line-style
+      m_tline= m_tline+1
+      IF(m_tline .GT. 2) m_tline=1
+      END
+
+      DOUBLE PRECISION  FUNCTION GLK_AproF(px,nch,yy)
+*     ************************************************
+* PX is a continuous extension of the m_index in array YY
+      IMPLICIT NONE
+      INTEGER           nch,ip
+      DOUBLE PRECISION  px,yy(*),X,p
+*-----------------------------------------------------
+      X=PX
+      IF(X .LT. 0.0.OR.X .GT. FLOAT(NCH+1)) THEN
+        GLK_AproF= -1E-20
+        RETURN
+      ENDIF
+      IP=INT(X)
+      IF(IP .LT. 2)     IP=2
+      IF(IP .GT. NCH-2) IP=NCH-2
+      P=X-IP
+      GLK_AproF =
+     $     -(1./6.)*P*(P-1)*(P-2)  *YY(IP-1)
+     $     +(1./2.)*(P*P-1)*(P-2)  *YY(IP  )
+     $     -(1./2.)*P*(P+1)*(P-2)  *YY(IP+1)
+     $     +(1./6.)*P*(P*P-1)      *YY(IP+2)
+      END
+
+      SUBROUTINE GLK_PlTitle(title)
+*     *****************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      CHARACTER*80 title
+*----------------------------------------
+      m_KeyTit=1
+      CALL GLK_Copch(title,m_titch(1))
+      END
+
+      SUBROUTINE GLK_PlCapt(lines)
+*     ****************************
+* This routine defines caption and should be called
+* before CALL GLK_Plot2, GLK_PlTable or bpltab2
+* The matrix CHARACTER*80 lines containes text of the caption ended
+* with the last line '% end-of-caption'
+      IMPLICIT NONE
+      CHARACTER*80 lines(*)
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER i
+*----------------------------------
+      m_KeyTit=0
+      DO i=1,m_titlen
+         m_titch(i)=lines(i)
+         m_KeyTit= m_KeyTit+1
+         IF(lines(i) .EQ. '% end-of-caption' ) GOTO 100
+      ENDDO
+      CALL GLK_Retu1(' WARNING from GLK_PlCapt: to many lines =',m_titlen)
+ 100  CONTINUE
+      END
+
+      SUBROUTINE GLK_PlLabel(lines)
+*     *****************************
+* This should be envoked after 'CALL GLK_Plot2'
+* to add lines of TeX to a given plot
+*     ***********************************
+      IMPLICIT NONE
+      CHARACTER*80 lines(*)
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER i
+*----------------------------------
+      m_KeyTit=0
+      DO i=1,m_titlen
+         m_titch(i)=lines(i)
+         m_KeyTit= m_KeyTit+1
+         IF(lines(i) .EQ. '% end-of-label' ) GOTO 100
+      ENDDO
+      CALL GLK_Retu1(' WARNING from GLK_PlLabel: to many lines =',m_titlen)
+ 100  CONTINUE
+*------------------------------!
+*   erase Ending               !
+*------------------------------!
+      BACKSPACE(m_ltx)
+      BACKSPACE(m_ltx)
+*
+      DO i=1,m_KeyTit
+        WRITE(m_ltx,'(A)')     m_titch(i)
+      ENDDO
+*------------------------------!
+*   restore Ending             !
+*------------------------------!
+      WRITE(m_ltx,'(2A)') m_BS,'end{picture} % close entire picture '
+      IF(ABS(m_lint) .EQ. 2) THEN
+         WRITE(m_ltx,'(A)') '%====== end of GLK_PlLabel =========='
+      ELSE
+         WRITE(m_ltx,'(2A)') m_BS,'end{figure}'
+      ENDIF
+      END
+
+
+      SUBROUTINE GLK_Plot2(id,ch1,ch2,chmark,chxfmt,chyfmt)
+*     *****************************************************
+* The new, more user-friendly, version of older GLK_Plot
+* INPUT:
+*    ID          histogram identifier
+*    ch1 = ' '   normal new plot
+*        = 'S'   impose new plot on previous one
+*    ch2 = ' '   ploting line default, contour
+*        = '*'   error bars in midle of the bin
+*        = 'R'   error bars at Right edge of the bin
+*        = 'L'   error bars at Left  edge of the bin
+*        = 'C'   slanted continuous smooth line
+*    chmark =    TeX symbol for ploting points
+*    chxfmt =    format (string) for labeling x-axis
+*    chyfmt =    format (string) for labeling y-axis
+* Furthermore:
+* Captions are defined by means of
+*    CALL GLK_PlCapt(capt) before CALL GLK_Plot2
+*    where CHARACTER*80 capt(50) is content of
+*    caption, line by line, see also comments in GLK_PlCapt routine.
+* Additional text as a TeX source text can be appended by means of
+*    CALL GLK_PlLabel(lines) after CALL GLK_Plot2
+*    where CHARACTER*80 lines(50) is the TeX add-on.
+*    This is to be used to decorate plot with
+*    any kind marks, special labels and text on the plot.
+*
+*     ************************************
+      IMPLICIT NONE
+      INTEGER id
+      CHARACTER ch1,ch2,chmark*(*)
+      CHARACTER*8 chxfmt,chyfmt
+      INCLUDE 'GLK.h'
+      SAVE
+      DOUBLE PRECISION  yy(m_MaxNb),yer(m_MaxNb)
+      CHARACTER*80 title
+*---------------------------------------------------------------------
+      LOGICAL GLK_Exist
+      INTEGER kax,kay,incr,ker,nchx
+      INTEGER iopsla,ioplog,ioperb,iopsc1,iopsc2,idum
+      DOUBLE PRECISION   dxl,dxu,xu,xl,yu,yl
+      CHARACTER chr
+      DATA CHR /' '/
+* TeX Names of the error-bar command and of the point-mark command
+      CHARACTER*1 chre, chrp1
+      PARAMETER ( chre = 'E', chrp1= 'R' )
+      CHARACTER*2 chrp
+* TeX Name of the point-mark command
+      CHARACTER*1 chrx(12)
+      DATA  chrx /'a','b','c','d','f','g','h','i','j','k','l','m'/
+*---------------------------------------------------------------------
+* RETURN if histo non-existing
+      IF(.NOT.GLK_Exist(id)) GOTO 900
+* ...unpack histogram
+      CALL GLK_UnPak(id,yy ,'    ',idum)
+      CALL GLK_UnPak(id,yer,'ERRO',idum)
+      CALL GLK_hinbo1(id,title,nchx,dxl,dxu)
+* Header
+      kax=1200
+      kay=1200
+      IF(CH1 .EQ. 'S') THEN
+* Superimpose plot
+        incr=incr+1
+        BACKSPACE(m_ltx)
+        BACKSPACE(m_ltx)
+      ELSE
+* New frame only
+        incr=1
+        CHR=CH1
+        CALL GLK_PlFrame(id,kax,kay,chxfmt,chyfmt)
+* The Y-range from first plot is preserved
+        CALL GLK_Range1(id,yl,yu)
+      ENDIF
+* The X-range as in histo
+      xl = dxl
+      xu = dxu
+*
+      chrp= chrp1//chrx(incr)
+      WRITE(m_ltx,'(A)')    '%=GLK_Plot2:  next plot (line) =========='
+      WRITE(m_ltx,'(A,I10)')'%====HISTOGRAM ID=',ID
+      WRITE(m_ltx,'(A,A70 )') '% ',TITLE
+      CALL GLK_OptOut(id,ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      ker = ioperb-1
+* Default line type
+      IF (iopsla .EQ. 2) THEN
+         CHR='C'
+      ELSE
+         CHR=' '
+      ENDIF
+* User defined line-type
+      IF (CH2 .EQ. 'B')   CHR=' '
+*...marks in the midle of the bin
+      IF (CH2 .EQ. '*')   CHR='*'
+*...marks on the right edge of the bin
+      IF (CH2 .EQ. 'R')   CHR='R'
+*...marks on the left edge of the bin
+      IF (CH2 .EQ. 'L')   CHR='L'
+      IF (CH2 .EQ. 'C')   CHR='C'
+*...various types of lines
+      IF     (CHR .EQ. ' ') THEN
+*...contour line used for histogram
+          CALL GLK_PlKont(kax,kay,nchx,yl,yu,yy,ker,yer)
+      ELSE IF(CHR .EQ. '*' .OR. CHR .EQ. 'R'.OR. CHR .EQ. 'L') THEN
+*...marks on the right/left/midle of the bin
+         CALL GLK_PlMark(kax,kay,nchx,yl,yu,yy,ker,yer,chmark,chr,chrp,chre)
+      ELSE IF(CHR .EQ. 'C') THEN
+*...slanted (dotted) line in plotting non-MC functions
+          CALL GLK_PlCirc(kax,kay,nchx,yl,yu,yy)
+      ENDIF
+*------------------------------!
+*        ENDing                !
+*------------------------------!
+      WRITE(m_ltx,'(2A)') m_BS,'end{picture} % close entire picture '
+      IF(ABS(m_lint) .EQ. 2) THEN
+         WRITE(m_ltx,'(A)') '%== GLK_Plot2:  end of plot  =========='
+      ELSE
+         WRITE(m_ltx,'(2A)') m_BS,'end{figure}'
+      ENDIF
+      RETURN
+  900 CALL GLK_Stop1('+++GLK_Plot2: Nonexistig histo, skipped, id= ',ID)
+      END
+
+      SUBROUTINE GLK_PlFrame(id,kax,kay,chxfmt,chyfmt)
+*     ************************************************
+      IMPLICIT NONE
+      INTEGER id,kax,kay
+      CHARACTER chxfmt*(*),chyfmt*(*)
+      INCLUDE 'GLK.h'
+      SAVE
+*---------------------------------------------------
+      CHARACTER*80 title
+      DOUBLE PRECISION    dxl,dxu,xl,xu,yl,yu
+      INTEGER  icont,i,nchx
+      DATA icont/0/
+*---------------------------------------------------
+      icont=icont+1
+      CALL GLK_hinbo1(id,title,nchx,dxl,dxu)
+      xl = dxl
+      xu = dxu
+      CALL GLK_Range1(id,yl,yu)
+*
+      IF(icont .GT. 1) WRITE(m_ltx,'(2A)') m_BS,'newpage'
+*------------------------------!
+*           Header
+*------------------------------!
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)')
+     $'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'
+      WRITE(m_ltx,'(A)')
+     $'%%%%%%%%%%%%%%%%%%%%%%GLK_PlFrame%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'
+      IF(ABS(m_lint) .EQ. 2) THEN
+         WRITE(m_ltx,'(2A)') m_BS,'noindent'
+      ELSE
+         WRITE(m_ltx,'(2A)') m_BS,'begin{figure}[!ht]'
+         WRITE(m_ltx,'(2A)') m_BS,'centering'
+*         WRITE(m_ltx,'(2A)') m_BS,'htmlimage{scale=1.4}'
+      ENDIF
+*------------------------------!
+* General Caption
+*------------------------------!
+      IF(ABS(m_lint) .NE. 2) THEN
+         WRITE(m_ltx,'(6A)')
+     $        m_BS,'caption{',m_BS,'footnotesize',m_BS,'sf'
+         DO i=1,m_KeyTit
+            WRITE(m_ltx,'(A)')     m_titch(i)
+         ENDDO
+         WRITE(m_ltx,'(A)') '}'
+      ENDIF
+*------------------------------!
+* Frames and labels
+*------------------------------!
+      WRITE(m_ltx,'(A)') '% =========== big frame, title etc. ======='
+      WRITE(m_ltx,'(4A)') m_BS,'setlength{',m_BS,'unitlength}{0.1mm}'
+      WRITE(m_ltx,'(2A)') m_BS,'begin{picture}(1600,1500)'
+      IF( m_lint .LT. 0) THEN
+* Big frame usefull for debuging
+         WRITE(m_ltx,'(4A)')
+     $        m_BS,'put(0,0){',m_BS,'framebox(1600,1500){ }}'
+      ENDIF
+      WRITE(m_ltx,'(A)') '% =========== small frame, labeled axis ==='
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $    m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(4A,I4,A,I4,A)')
+     $    m_BS,'put(0,0){',m_BS,'framebox( ',kax,',',kay,'){ }}'
+      WRITE(m_ltx,'(A)') '% =========== x and y axis ================'
+      CALL GLK_AxisX(kax,xl,xu,chxfmt)
+      CALL GLK_AxisY(kay,yl,yu,chyfmt)
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}'
+     $                ,'% end of plotting labeled axis'
+      END
+
+      SUBROUTINE GLK_AxisX(kay,yl,yu,chxfmt)
+*     ***************************************
+* plotting x-axis with long and short tips
+      IMPLICIT NONE
+      INTEGER  kay
+      DOUBLE PRECISION    yl,yu
+      CHARACTER chxfmt*16
+      INCLUDE 'GLK.h'
+      SAVE
+*-------------------------------------------------------
+      CHARACTER*64 fmt1,fmt2
+      PARAMETER (fmt1 = '(2A,F8.2,A,F8.2,A,I4,3A)')
+      PARAMETER (fmt2 = '(2A,F8.2,A,I4,A,F8.2,A,I4,3A)')
+      DOUBLE PRECISION   dy,ddy,ddyl,yy0l,ddys,yy0s,p0s,pds,scmx,p0l,pdl
+      INTEGER ly,jy,nlt,nts,lex,k,n
+      DOUBLE PRECISION  tipsy(20)
+*-------------------------------------------------------
+      dy= ABS(yu-yl)
+      ly = NINT( LOG10(dy) -0.4999999d0 )
+      jy = NINT(dy/10d0**ly)
+      ddyl = dy*10d0**(-ly)
+      IF( jy .EQ. 1)                 ddyl = 10d0**ly*0.25d0
+      IF( jy .GE. 2 .AND. jy .LE. 3) ddyl = 10d0**ly*0.5d0
+      IF( jy .GE. 4 .AND. jy .LE. 6) ddyl = 10d0**ly*1.0d0
+      IF( jy .GE. 7)                 ddyl = 10d0**ly*2.0d0
+      WRITE(m_ltx,'(A)') '% -------GLK_AxisX---- '
+      WRITE(m_ltx,'(A,I4)') '%  JY= ',JY
+*-------
+      nlt = INT(dy/ddyl)
+      nlt = MAX0(MIN0(nlt,20),1)+1
+      yy0l = NINT(yl/ddyl+0.5d0)*ddyl
+      ddys = ddyl/10d0
+      yy0s = NINT(yl/ddys+0.4999999d0)*ddys
+      p0l = kay*(yy0l-yl)/(yu-yl)
+      pdl = kay*ddyl/(yu-yl)
+      p0s = kay*(yy0s-yl)/(yu-yl)
+      pds = kay*ddys/(yu-yl)
+      nlt = INT(ABS(yu-yy0l)/ddyl+0.0000001d0)+1
+      nts = INT(abs(yu-yy0s)/ddys+0.0000001d0)+1
+      DO n=1,nlt
+         tipsy(n) =yy0l+ ddyl*(n-1)
+      ENDDO
+      WRITE(m_ltx,fmt1)
+     $ m_BS,'multiput('  ,P0L,  ',0)('  ,PDL,  ',0){'  ,NLT,  '}{',
+     $ m_BS,'line(0,1){25}}',
+     $ m_BS,'multiput('  ,P0S,  ',0)('  ,PDS,  ',0){'  ,NTS,  '}{',
+     $ m_BS,'line(0,1){10}}'
+      WRITE(m_ltx,fmt2)
+     $ m_BS,'multiput('  ,P0L,  ','  ,kay,  ')('  ,PDL,  ',0){'  ,NLT,
+     $ '}{'  ,m_BS,  'line(0,-1){25}}',
+     $ m_BS,'multiput('  ,P0S,  ','  ,kay,  ')('  ,PDS,  ',0){'  ,NTS,
+     $ '}{'  ,m_BS,  'line(0,-1){10}}'
+* ...labeling of axis
+      scmx = DMAX1(DABS(yl),DABS(YU))
+      lex  = NINT( LOG10(scmx) -0.50001)
+      DO n=1,nlt
+         k = nint(kay*(tipsy(n)-yl)/(yu-yl))
+         IF(lex .LE. 3 .AND. lex .GE. -3) THEN
+* ...without exponent
+           WRITE(m_ltx,'(2A,I4,5A,'//chxfmt//',A)')
+     $     m_BS,'put(',K,',-25){',m_BS,'makebox(0,0)[t]{',
+     $           m_BS,'Large $ ', TIPSY(N), ' $}}'
+         ELSE
+* ...with exponent
+           WRITE(m_ltx,'(2A,I4,5A,'//chxfmt//',2A,I4,A)')
+     $     m_BS,'put('  ,K,  ',-25){',m_BS,'makebox(0,0)[t]{',
+     $     m_BS,'Large $ ',
+     $     TIPSY(N)/(10d0**LEX),m_BS,'cdot 10^{',LEX,'} $}}'
+         ENDIF
+      ENDDO
+      END
+
+      SUBROUTINE GLK_AxisY(kay,yl,yu,chyfmt)
+*     ***************************************
+* plotting y-axis with long and short tips
+      IMPLICIT NONE
+      INTEGER  kay
+      DOUBLE PRECISION    yl,yu
+      CHARACTER chyfmt*16
+      INCLUDE 'GLK.h'
+      SAVE
+      DOUBLE PRECISION  tipsy(20)
+*------------------------------------------------------------------
+      CHARACTER*64 fmt1,fmt2
+      PARAMETER (fmt1 = '(2A,F8.2,A,F8.2,A,I4,3A)')
+      PARAMETER (fmt2 = '(2A,I4,A,F8.2,A,F8.2,A,I4,3A)')
+      INTEGER ly,jy,nlt,nts,lex,n,k
+      DOUBLE PRECISION   ddyl,dy,yy0l,p0l,pdl,pds,scmx,z0l,p0s,yy0s,ddys
+*------------------------------------------------------------------
+      dy= ABS(yu-yl)
+      ly = NINT( log10(dy) -0.49999999d0 )
+      jy = NINT(dy/10d0**ly)
+      ddyl = dy*10d0**(-ly)
+      IF( jy .EQ. 1)                 ddyl = 10d0**ly*0.25d0
+      IF( jy .GE. 2 .AND. jy .LE. 3) ddyl = 10d0**ly*0.5d0
+      IF( jy .GE. 4 .AND. jy .LE. 6) ddyl = 10d0**ly*1.0d0
+      IF( jy .GE. 7)                 ddyl = 10d0**ly*2.0d0
+      WRITE(m_ltx,'(A)') '% --------GLK_SAxisY------- '
+      WRITE(m_ltx,'(A,I4)') '%  JY= ',JY
+*-------
+      nlt = INT(dy/ddyl)
+      nlt = MAX0(MIN0(nlt,20),1)+1
+      yy0l = NINT(yl/ddyl+0.4999999d0)*ddyl
+      ddys = ddyl/10d0
+      yy0s = nint(yl/ddys+0.5d0)*ddys
+      p0l = kay*(yy0l-yl)/(yu-yl)
+      pdl = kay*ddyl/(yu-yl)
+      p0s = kay*(yy0s-yl)/(yu-yl)
+      pds = kay*ddys/(yu-yl)
+      nlt= INT(ABS(yu-yy0l)/ddyl+0.0000001d0) +1
+      nts= INT(ABS(yu-yy0s)/ddys+0.0000001d0) +1
+      DO N=1,NLT
+         tipsy(n) =yy0l+ ddyl*(n-1)
+      ENDDO
+* plotting tics on vertical axis
+      WRITE(m_ltx,fmt1)
+     $ m_BS,'multiput(0,'  ,P0L,  ')(0,'  ,PDL  ,'){'  ,NLT,  '}{', m_BS,'line(1,0){25}}',
+     $ m_BS,'multiput(0,'  ,P0S,  ')(0,'  ,PDS,  '){'  ,NTS,  '}{', m_BS,'line(1,0){10}}'
+      WRITE(m_ltx,fmt2)
+     $ m_BS,'multiput('  ,kay,  ','  ,P0L,  ')(0,'  ,PDL,  '){'  ,NLT,
+     $ '}{',m_BS,'line(-1,0){25}}',
+     $ m_BS,'multiput('  ,kay,  ','  ,P0S,  ')(0,'  ,PDS,  '){'  ,NTS,
+     $ '}{',m_BS,'line(-1,0){10}}'
+* ...Zero line if necessary
+      Z0L = kay*(-YL)/(YU-YL)
+      IF( (Z0L .GT. 0D0) .AND. (Z0L .LT. FLOAT(kay)) )
+     $ WRITE(m_ltx,'(2A,F8.2,3A,I4,A)') m_BS,'put(0,'  ,Z0L,  '){',m_BS,'line(1,0){'  ,kay,  '}}'
+* ...labeling of axis
+      SCMX = DMAX1(DABS(YL),DABS(YU))
+      LEX  = NINT( LOG10(SCMX) -0.50001d0)
+      DO n=1,nlt
+         k = nint(kay*(tipsy(n)-yl)/(yu-yl))
+         IF(lex .LE. 3 .AND. lex .GE. -3) THEN
+* ...without exponent
+            WRITE(m_ltx,'(2A,I4,5A,'//chyfmt//',A)')
+     $           m_BS,'put(-25,'  ,K,  '){',m_BS,'makebox(0,0)[r]{',
+     $           m_BS,'Large $ '  ,TIPSY(N),  ' $}}'
+         ELSE
+* ...with exponent
+            WRITE(m_ltx,'(2A,I4,5A,'//chyfmt//',2A,I4,A)')
+     $           m_BS,'put(-25,'  ,K,  '){',m_BS,'makebox(0,0)[r]{',
+     $           m_BS,'Large $ ',
+     $           TIPSY(N)/(10d0**LEX),  m_BS,'cdot 10^{'  ,LEX,  '} $}}'
+      ENDIF
+      ENDDO
+      END
+
+      SUBROUTINE GLK_PlKont(kax,kay,nchx,yl,yu,yy,ker,yer)
+*/////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                 //
+*//             Plotting contour line for histogram (formely PlHis)                 //
+*//                                                                                 //
+*/////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER kax,kay,nchx,ker
+      DOUBLE PRECISION   yl, yu, yy(*),yer(*),z0l
+      INCLUDE 'GLK.h'
+      SAVE
+*---------------------------------------------------
+      CHARACTER*80 fmt1
+      INTEGER  ix0,iy0,ib,ix1,iy1,ie,ierr,ix2,idy,idx
+      DOUBLE PRECISION    yib
+*---------------------------------------------------
+      WRITE(m_ltx,'(4A,I4,A,I4,A)') m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(A)') '% ========== plotting primitives =========='
+* Color string, optionaly
+      IF(m_KeyCol .EQ. 1) THEN
+         WRITE(m_ltx,'(A)') m_Color
+         m_KeyCol = 0
+      ENDIF
+*...short macros for vertical/horizontal straight lines
+      WRITE(m_ltx,'(8A)')
+     $     m_BS,'newcommand{',m_BS,'x}[3]{',m_BS,'put(#1,#2){', m_BS,'line(1,0){#3}}}'
+      WRITE(m_ltx,'(8A)')
+     $     m_BS,'newcommand{',m_BS,'y}[3]{',m_BS,'put(#1,#2){', m_BS,'line(0,1){#3}}}'
+      WRITE(m_ltx,'(8A)')
+     $     m_BS,'newcommand{',m_BS,'z}[3]{',m_BS,'put(#1,#2){', m_BS,'line(0,-1){#3}}}'
+*   error bars
+      WRITE(m_ltx,'(8A)')
+     $     m_BS,'newcommand{',m_BS,'e}[3]{', m_BS,'put(#1,#2){',m_BS,'line(0,1){#3}}}'
+* Starting point for the line
+      ix0=0
+      iy0=0
+* Start at Zero line if possible
+      z0l = kay*(-yl)/(yu-yl)
+      IF( (z0l .GT. 0d0) .AND. (z0l .LT. FLOAT(kay)) )  iy0=z0l
+      DO ib=1,nchx
+         yib = yy(ib)
+         ix1 = NINT(kax*(ib-0.00001d0)/nchx) ! new x
+         iy1 = NINT(kay*(yib-yl)/(yu-yl))    ! new y
+         iy1 = MIN(MAX(iy1,-1),kay+1)        ! cosmetics
+         idx = ix1-ix0                       ! delta x
+         idy = iy1-iy0                       ! delta y
+         fmt1 = '(2(2a,i4,a,i4,a,i4,a))'
+         IF(iy1 .GE. 0 .AND. iy1 .LE. kay) THEN
+            IF( idy .GE. 0) THEN             ! up
+               WRITE(m_ltx,fmt1) m_BS,'y{',ix0,'}{',iy0,'}{',idy,'}',
+     $                           m_BS,'x{',ix0,'}{',iy1,'}{',idx,'}'
+            ELSE                             ! down
+               WRITE(m_ltx,fmt1) m_BS,'z{',IX0,'}{',IY0,'}{',-idy,'}',
+     $                           m_BS,'x{',IX0,'}{',IY1,'}{',idx,'}'
+            ENDIF
+         ENDIF
+         ix0=ix1
+         iy0=iy1
+         IF(ker .EQ. 1) THEN
+            ix2  = NINT(kax*(ib-0.5000d0)/nchx)
+            ierr = NINT(kay*((yy(ib)-yer(ib))-yl)/(yu-yl))  ! bottom of error bar
+            ie = NINT(kay*yer(ib)/(yu-yl))                  ! total length of error bar
+*        Cosmetics
+            IF(ierr .LT. 0) THEN
+               ie= ie+ierr
+               ierr = 0
+            ENDIF
+            IF( (ierr+2*ie) .GT. kay) THEN
+               ie= IABS(kay-ierr)/2
+            ENDIF
+            IF( (iy1.GE.0).AND.(iy1.LE. kay).AND.(ABS(1d0*ierr).LE.9999d0).AND.(2d0*ie.LE.9999d0) ) 
+     $           WRITE(m_ltx,8000) m_BS,ix2,ierr,2*ie
+         ENDIF
+      ENDDO
+8000  FORMAT(4(A1,2He{,I4,2H}{,I5,2H}{,I4,1H}:1X ))
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}', ' % end of plotting histogram'
+* change line-style
+      m_tline= m_tline+1
+      IF(m_tline .GT. 2) m_tline=1
+      END
+
+      SUBROUTINE GLK_PlMark(kax,kay,nchx,yl,yu,yy,ker,yer,chmark,chr,chr2,chr3)
+*/////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                 //
+*//                       marks in the midle of the bin                             //
+*//                                                                                 //
+*/////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER     kax,kay,nchx,ker
+      DOUBLE PRECISION       yl,yu, yy(*),yer(*)
+      CHARACTER*1 chr
+      CHARACTER   chmark*(*),chr2*(*),chr3*(*)
+*---------------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER    ib,ix1,iy1,ierr,ie
+*---------------------------------------------------
+      WRITE(m_ltx,'(4A,I4,A,I4,A)') m_BS,'put(300,250){',m_BS,'begin{picture}( ',kax,',',kay,')'
+      WRITE(m_ltx,'(A)') '% ===GLK_PlMark: plotting primitives ======'
+* Color string, optionaly
+      IF(m_KeyCol .EQ. 1) THEN
+         WRITE(m_ltx,'(A)') m_Color
+         m_KeyCol = 0
+      ENDIF
+* Plotting symbol
+      WRITE(m_ltx,'(10A)') m_BS,'newcommand{',m_BS,chr2  , '}[2]{', m_BS,'put(#1,#2){',chmark,'}}'
+* Error bar symbol
+      WRITE(m_ltx,'(10A)')
+     $   m_BS,'newcommand{',m_BS,chr3  , '}[3]{', m_BS,'put(#1,#2){',m_BS,'line(0,1){#3}}}'
+
+      DO ib=1,nchx
+         IF(chr .EQ. '*') THEN
+            ix1 = NINT(kax*(ib-0.5000d0)/nchx) ! Midle of bin
+         ELSEIF(chr .EQ. 'R') THEN
+            ix1 = NINT(kax*(ib*1d0)/nchx)      ! Right edge of bin
+         ELSEIF(chr .EQ. 'L') THEN
+            ix1 = NINT(kax*(ib-1d0)/nchx)      ! Left edge of bin
+         ELSE
+            WRITE(6,*) '+++++ plamark: wrong line type:',chr
+            RETURN
+         ENDIF
+         iy1 = NINT(kay*(yy(ib)-yl)/(yu-yl))
+         IF(iy1 .GE. 0 .AND. iy1 .LE. kay)
+     $   WRITE(m_ltx,'(A,A,A,I4,A,I4,A)')
+     $               m_BS,chr2, '{' ,IX1, '}{' ,IY1, '}'
+         IF(ker .EQ. 1) THEN
+            ierr = NINT(kay*((yy(ib)-yer(ib))-yl)/(yu-yl)) ! bottom of error bar
+            ie   = NINT(kay*yer(ib)/(yu-yl))               ! total length of error bar
+*        Cosmetics
+            IF(ierr .LT. 0) THEN
+               ie= ie+ierr
+               ierr = 0
+            ENDIF
+            IF( (ierr+2*ie) .GT. kay) THEN
+               ie= IABS(kay-ierr)/2
+            ENDIF
+            IF((iy1.GE.0) .AND.(iy1.LE.kay) .AND.(ABS(1d0*ierr).LE.9999d0) .AND.(2d0*ie.LE.9999d0))
+     $      WRITE(m_ltx,'(A,A,A,I4,A,I5,A,I4,A)')
+     $          m_BS, chr3,  '{'  ,IX1, '}{'  ,ierr, '}{'  ,2*ie,   '}'
+         ENDIF
+      ENDDO
+      WRITE(m_ltx,'(3A)') m_BS,'end{picture}}',
+     $    ' % end of plotting histogram'
+      END
+
+
+      SUBROUTINE GLK_PlTable(Npl,idl,capt,fmt,nch1,incr,npag)
+*     ******************************************************
+* Tables in TeX, up to 9 columns
+* Npl           = numbers of columns/histograms
+* idl(1:Npl)    = list of histo id's
+* capt(1:Npl+1) = list of captions above each column
+* fmt(1:1)      = format to print x(i) in first columb,
+*                 h(i) and error he(i) in further columns
+* nch1,incr     = raws are printet in the sequence
+*                 (h(i),he(i),i=nch1,nbin,incr), nbin is no. of bins.
+* npag          = 0 no page eject, =1 with page eject
+*     ******************************************************
+      IMPLICIT NONE
+*--------------- parameters ------------
+      INTEGER        Npl,idl(*),nch1,incr,npag
+      CHARACTER*(*)  capt(*)
+      CHARACTER*(*)  fmt(3)
+*-------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+*---------------------------------------------------
+      CHARACTER*16 fmt1,fmt2,fmt3
+      LOGICAL GLK_Exist
+      INTEGER   i,j,k,n,nchx,nplt,idum,id1,id
+      INTEGER   iopsc1,ioperb,iopsla,iopsc2,ioplog
+      DOUBLE PRECISION     xl,xu,dxl,dxu,xi
+      DOUBLE PRECISION     yyy(m_MaxNb),yer(m_MaxNb),bi(m_MaxNb,9),er(m_MaxNb,9)
+      CHARACTER*80 title
+      CHARACTER*1 Cn(9)
+      DATA Cn /'1','2','3','4','5','6','7','8','9'/
+*-----------------------------------------------------------------------------
+* Return if histo non-existing or to many columns
+      IF(.NOT.GLK_EXIST(ID)) GOTO 900
+      IF(Npl .GT. 9 )     GOTO 901
+      fmt1 = fmt(1)
+      fmt2 = fmt(2)
+      fmt3 = fmt(3)
+*
+* npack histograms
+      id1=idl(1)
+      CALL GLK_hinbo1( id1,title,nchx,dxl,dxu)
+      xl = dxl
+      xu = dxu
+      DO n=1,Npl
+        CALL GLK_UnPak( idl(n),yyy ,'    ',idum)
+        CALL GLK_UnPak( idl(n),yer ,'ERRO',idum)
+        DO k=1,nchx
+           bi(k,n)=yyy(k)
+           er(k,n)=yer(k)
+        ENDDO
+      ENDDO
+*------------------------------!
+*           Header
+*------------------------------!
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)') ' '
+      WRITE(m_ltx,'(A)') '% ========================================='
+      WRITE(m_ltx,'(A)') '% ============= begin table ==============='
+      WRITE(m_ltx,'(2A)') m_BS,'begin{table}[!ht]'
+      WRITE(m_ltx,'(2A)') m_BS,'centering'
+*------------------------------!
+* Central Caption
+*------------------------------!
+      WRITE(m_ltx,'(4A)') m_BS,'caption{',m_BS,'small'
+      DO i=1,m_KeyTit
+        WRITE(m_ltx,'(A)')     m_titch(i)
+      ENDDO
+      WRITE(m_ltx,'(A)') '}'
+*------------------------------!
+* Tabular header
+*------------------------------!
+      WRITE(m_ltx,'(20A)') m_BS,'begin{tabular}
+     $ {|',  ('|r',j=1,Npl+1),  '||}'
+*
+      WRITE(m_ltx,'(4A)') m_BS,'hline',m_BS,'hline'
+*------------------------------!
+* Captions in columns
+*------------------------------!
+      WRITE(m_ltx,'(2A)') capt(1),('&',capt(j+1),j=1,Npl)
+*
+      WRITE(m_ltx,'(2A)') m_BS,m_BS
+      WRITE(m_ltx,'(2A)') m_BS,'hline'
+*----------------------------------------!
+* Table content
+* Note that by default RIGHT EDGE of bin is printed, as necessary for
+* cumulative distributions, this can be changed with SLAN option
+*----------------------------------------!
+      CALL GLK_OptOut(idl(1),ioplog,iopsla,ioperb,iopsc1,iopsc2)
+      DO k=nch1,nchx,incr
+        xi= dxl + (dxu-dxl)*k/(1d0*nchx)
+        IF(iopsla.eq.2) xi= dxl + (dxu-dxl)*(k-0.5d0)/(1d0*nchx)
+        IF(ioperb.eq.2) THEN
+        WRITE(m_ltx,'(A,'//fmt1//','//Cn(Npl)//'(A,'//fmt2//',A,A,'//fmt3//'),  A)')
+     $               '$', xi, ('$ & $', bi(k,j), m_BS, 'pm', er(k,j), j=1,Npl), '$'
+        WRITE(m_ltx,'(2A)') m_BS,m_BS
+        ELSE
+        WRITE(m_ltx,'(A,'//fmt1//','//Cn(Npl)//'(A,'//fmt2//'),  A)')
+     $               '$', xi, ('$ & $', bi(k,j), j=1,Npl), '$'
+        WRITE(m_ltx,'(2A)') m_BS,m_BS
+        ENDIF
+      ENDDO
+*------------------------------!
+* Ending
+*------------------------------!
+      WRITE(m_ltx,'(4A)') m_BS,'hline',m_BS,'hline'
+      WRITE(m_ltx,'(2A)') m_BS,'end{tabular}'
+      WRITE(m_ltx,'(2A)') m_BS,'end{table}'
+      WRITE(m_ltx,'(A)') '% ============= end   table ==============='
+      WRITE(m_ltx,'(A)') '% ========================================='
+      IF(npag .NE. 0) WRITE(m_ltx,'(2A)') m_BS,'newpage'
+
+      RETURN
+ 900  CALL GLK_Retu1('++++ GLK_PlTable: Nonexistig histo id=',ID)
+      RETURN
+ 901  CALL GLK_Retu1('++++ GLK_PlTable: To many columns Nplt=',Nplt)
+      END
+
+      SUBROUTINE GLK_PlTable2(Npl,idl,ccapt,mcapt,fmt,chr1,chr2,chr3)
+*     ***************************************************************
+* Tables in TeX, up to 9 columns
+* Npl           = numbers of columns/histograms
+* idl(1:Npl)    = list of histo id's
+* ccapt(1:Npl+1)= list of column-captions above each column
+* mcapt         = multicolumn header, none if mcapt=' ',
+* fmt(1:1)      = format to print x(i) in first columb,
+*                 h(i) and error he(i) in further columns
+* chr1          = ' ' normal default, ='S' the Same table continued
+* chr2          = ' ' midle of the bin for x(i) in the first column
+*               = 'R' right edge,     ='L' left edge of the bin
+* chr3          = ' ' no page eject,  ='E' with page eject at the end.
+* Furthermore:
+* Captions are defined by means of
+*    CALL GLK_PlCapt(capt) before CALL GLK_PlTable2
+*    where CHARACTER*80 capt(50) is content of
+*    caption, line by line, see also comments in GLK_PlCapt routine.
+*
+*     ******************************************************
+      IMPLICIT NONE
+*-------------- parameters--------------
+      INTEGER       Npl,idl(*)
+      CHARACTER*(*) ccapt(*)
+      CHARACTER*(*) fmt(3)
+      CHARACTER*1   chr1,chr2,chr3
+      CHARACTER*(*) mcapt
+*----------------------------------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+*----------------------------------------------------------------------
+      CHARACTER*16 fmt1,fmt2,fmt3
+      LOGICAL GLK_Exist
+      INTEGER   iopsc1,ioperb,iopsla,iopsc2,ioplog
+      INTEGER   i,j,k,n,idum,id1,id,nchx,Nplt
+      DOUBLE PRECISION     xl,xu,xi,dxu,dxl
+      DOUBLE PRECISION     yyy(m_MaxNb),yer(m_MaxNb),bi(m_MaxNb,9),er(m_MaxNb,9)
+      CHARACTER*80 title
+      CHARACTER*1 Cn(9)
+      CHARACTER*32 TabLab(11)        ! label in 1-st column of table
+      INTEGER   k1,k2,k3,iraw
+      DATA Cn /'1','2','3','4','5','6','7','8','9'/
+*----------------------------------------------------------------------
+* RETURN if histo non-existing or to many columns
+      IF(.NOT.GLK_EXIST(ID)) GOTO 900
+      IF(Npl .GT. 9 )     GOTO 901
+      fmt1 = fmt(1)
+      fmt2 = fmt(2)
+      fmt3 = fmt(3)
+*
+* unpack histograms
+      id1 = idl(1)
+      CALL GLK_hinbo1( id1,title,nchx,dxl,dxu)
+      xl = dxl
+      xu = dxu
+      DO n=1,Npl
+         CALL GLK_UnPak( idl(n),yyy ,'    ',idum)
+         CALL GLK_UnPak( idl(n),yer ,'ERRO',idum)
+         DO k=1,nchx
+            bi(k,n)=yyy(k)
+            er(k,n)=yer(k)
+         ENDDO
+      ENDDO
+
+      IF(chr1 .EQ. ' ' ) THEN
+*------------------------------!
+*           Header
+*------------------------------!
+         WRITE(m_ltx,'(A)') ' '
+         WRITE(m_ltx,'(A)') ' '
+         WRITE(m_ltx,'(A)') '% ========================================'
+         WRITE(m_ltx,'(A)') '% ============ begin table ==============='
+*
+         IF(ABS(m_lint) .EQ. 2 ) THEN
+            WRITE(m_ltx,'(2A)') m_BS,'noindent'
+         ELSE
+            WRITE(m_ltx,'(2A)') m_BS,'begin{table}[!ht]'
+            WRITE(m_ltx,'(2A)') m_BS,'centering'
+         ENDIF
+*------------------------------!
+* Central Caption
+*------------------------------!
+         IF(ABS(m_lint) .NE. 2 ) THEN
+            WRITE(m_ltx,'(6A)')
+     $           m_BS,'caption{',m_BS,'footnotesize',m_BS,'sf'
+            DO i=1,m_KeyTit
+               WRITE(m_ltx,'(A)')     m_titch(i)
+            ENDDO
+            WRITE(m_ltx,'(A)') '}'
+         ENDIF
+*------------------------------!
+* Tabular header
+*------------------------------!
+         WRITE(m_ltx,'(20A)') m_BS,'begin{tabular}
+     $        {|',  ('|r',j=1,Npl+1),  '||}'
+         WRITE(m_ltx,'(4A)') m_BS,'hline',m_BS,'hline'
+*------------------------------!
+* Captions in columns
+*------------------------------!
+         WRITE(m_ltx,'(2A)') ccapt(1),('&',ccapt(j+1),j=1,Npl)
+*------------------------------!
+* Append previous table
+*------------------------------!
+      ELSEIF(chr1 .EQ. 'S' ) THEN
+         DO i=1,7
+            BACKSPACE(m_ltx)
+         ENDDO
+      ELSE
+         WRITE(*,*) ' ++++ GLK_PlTable2: WRONG chr1 ' ,chr1
+      ENDIF
+
+      WRITE(m_ltx,'(2A)') m_BS,m_BS
+      WRITE(m_ltx,'(2A)') m_BS,'hline'
+
+*------------------------------!
+* Optional multicolumn caption
+*------------------------------!
+      IF(mcapt .NE. ' ') THEN
+         WRITE(m_ltx,'(3A,I2,A)') '& ',m_BS,'multicolumn{',Npl,'}{c||}{'
+         WRITE(m_ltx,'(3A)') '     ',mcapt, ' }'
+         WRITE(m_ltx,'(2A)') m_BS,m_BS
+         WRITE(m_ltx,'(2A)') m_BS,'hline'
+      ENDIF
+
+*----------------------------------------!
+* Table content
+* Note that by default RIGHT EDGE of bin is printed, as necessary for
+* cumulative distributions, this can be changed with SLAN option
+*----------------------------------------!
+      CALL GLK_OptOut(idl(1),ioplog,iopsla,ioperb,iopsc1,iopsc2)
+*
+* table printout can be controlled by  GLK_SetTabRan(i1,i2,i3)
+      k1=1
+      k2=nchx
+      k3=1
+      IF( m_KeyTbr .EQ. 1 ) THEN
+         k1 = MAX(k1,m_TabRan(1))
+         k2 = MIN(k2,m_TabRan(2))
+         k3 = MAX(k3,m_TabRan(3))
+         m_KeyTbr = 0
+      ENDIF
+      IF( m_KeyTbl .EQ. 0 ) THEN
+* In the FIRST COLUMN the position of the bin edge/midle is ploted
+         DO k=k1,k2,k3
+            IF(chr2 .EQ. 'R') THEN
+               xi= dxl + (dxu-dxl)*k/(1d0*nchx)         ! right
+            ELSEIF(chr2 .EQ. 'L') THEN
+               xi= dxl + (dxu-dxl)*(k-1d0)/(1d0*nchx)   ! left
+            ELSE
+               xi= dxl + (dxu-dxl)*(k-0.5d0)/(1d0*nchx) ! middle
+            ENDIF
+            IF(ioperb.eq.2) THEN
+               WRITE(m_ltx,'(A,'//fmt1//','//Cn(Npl)//'(A,'//fmt2//',A,A,'//fmt3//'),  A)') !
+     $                       '$', xi, ('$ & $', bi(k,j), m_BS, 'pm', er(k,j), j=1,Npl), '$' !
+               WRITE(m_ltx,'(2A)') m_BS,m_BS
+            ELSE
+               WRITE(m_ltx,'(A,'//fmt1//','//Cn(Npl)//'(A,'//fmt2//'),  A)') !
+     $                      '$', xi, ('$ & $', bi(k,j), j=1,Npl), '$'        !
+               WRITE(m_ltx,'(2A)') m_BS,m_BS
+            ENDIF
+         ENDDO
+      ELSE
+         m_KeyTbl = 0
+         iraw=0
+         DO k=k1,k2,k3
+            iraw=iraw+1
+            IF(ioperb.eq.2) THEN
+               WRITE(m_ltx,'(A, '//Cn(Npl)//'(A,'//fmt2//',A,A,'//fmt3//',A) )' ) !
+     $                  m_TabLab(iraw), (' & $', bi(k,j), m_BS, 'pm', er(k,j),'$', j=1,Npl) !
+               WRITE(m_ltx,'(2A)') m_BS,m_BS
+            ELSE
+               WRITE(m_ltx,'(A, '//Cn(Npl)//'(A,'//fmt2//',A) )' ) !
+     $                  m_TabLab(iraw), (' & $', bi(k,j),'$', j=1,Npl) !
+               WRITE(m_ltx,'(2A)') m_BS,m_BS
+            ENDIF
+         ENDDO
+      ENDIF
+*------------------------------!
+* Ending
+*------------------------------!
+      WRITE(m_ltx,'(4A)') m_BS,'hline',m_BS,'hline'
+      WRITE(m_ltx,'(2A)') m_BS,'end{tabular}'
+      IF(ABS(m_lint) .EQ. 2 ) THEN
+         WRITE(m_ltx,'(A)') '% ========================================'
+      ELSE
+         WRITE(m_ltx,'(2A)') m_BS,'end{table}'
+      ENDIF
+      WRITE(m_ltx,'(A)') '% ============= end   table =============='
+      WRITE(m_ltx,'(A)') '% ========================================'
+      IF(chr3 .EQ. 'E') THEN
+         WRITE(m_ltx,'(2A)') m_BS,'newpage'
+      ELSE
+         WRITE(m_ltx,'(A)') '% ========================================'
+      ENDIF
+      RETURN
+ 900  CALL GLK_Retu1(' ++++ GLK_PlTable2: Nonexistig histo,id= ',ID)
+      RETURN
+ 901  CALL GLK_Retu1(' ++++ GLK_PlTable2: To many columns Nplt= ',Nplt)
+      END
+
+
+      SUBROUTINE GLK_WtMon(mode,id,par1,par2,par3)
+*     ********************************************
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+* !!!!  It is now replaces by GKL_M package, see below  !!!
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+*
+* Utility program for monitoring M.C. rejection weights.
+* ---------------------------------------------------------
+* It is backward compatible with WMONIT except:
+*  (1) for id=-1 one  should call as follows:
+*      GLK_WtMon(-1,id,0d0,1d0,1d0) or skip initialisation completely!
+*  (2) maximum absolute weight is looked for,
+*  (3) GLK_Print(-id) prints weight distribution, net profit!
+*  (4) no restriction id<100 any more!
+* ---------------------------------------------------------
+* wt is weight, wtmax is maximum weight and rn is random number.
+* IF(mode .EQ. -1) then
+*          initalization if entry id,
+*        - wtmax is maximum weight used for couting overweighted
+*          other arguments are ignored
+* ELSEIF(mode .EQ. 0) then
+*          summing up weights etc. for a given event for entry id
+*        - wt is current weight.
+*        - wtmax is maximum weight used for couting overweighted
+*          events with wt>wtmax.
+*        - rn is random number used in rejection, it is used to
+*          count no. of accepted (rn < wt/wtmax) and rejected
+*          (wt > wt/wtmax) events,
+*          if ro rejection then put rn=0d0.
+* ELSEIF(mode .EQ. 1) THEN
+*          in this mode wmonit repports on accumulated statistics
+*        - averwt= average weight wt counting all event
+*        - errela= relative error of averwt
+*        - nevtot= total number of accounted events
+*        - nevacc= no. of accepted events (rn < wt/wtmax)
+*        - nevneg= no. of events with negative weight (wt < 0)
+*        - nevzer= no. of events with zero weight (wt = 0d0)
+*        - nevove= no. of overweghted events (wt > wtmax)
+*          and if you do not want to use cmonit then the value
+*          the value of averwt is assigned to wt,
+*          the value of errela is assigned to wtmax and
+*          the value of wtmax  is assigned to rn in this mode.
+* ELSEIF(mode .EQ. 2) THEN
+*          all information defined for entry id defined above
+*          for mode=2 is just printed of unit nout
+* ENDIF
+* note that output repport (mode=1,2) is done dynamically just for a
+* given entry id only and it may be repeated many times for one id and
+* for various id's as well.
+*     ************************
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER           mode,id
+      DOUBLE PRECISION  par1,par2,par3
+* locals
+      INTEGER           idg,nevneg,nevzer,nevtot,nevove,nevacc,nbin,lact,ist3,ntot,ist,ist2
+      DOUBLE PRECISION  xl,xu,errela,sswt,averwt,wwmax,swt,wt,wtmax,rn
+*---------------------------------------------------------------------------
+      idg = -id
+      IF(id .LE. 0) THEN
+           CALL GLK_Stop1(' =====> GLK_WtMon: wrong id= ',id)
+      ENDIF
+      IF(mode .EQ. -1) THEN
+*     *******************
+           nbin = nint(dabs(par3))
+           IF(nbin .GT. 100) nbin =100
+           IF(nbin .EQ. 0)   nbin =1
+           xl   =  par1
+           xu   =  par2
+           IF(xu .LE. xl) THEN
+             xl = 0d0
+             xu = 1d0
+           ENDIF
+           CALL GLK_hadres(idg,lact)
+           IF(lact .EQ. 0) THEN
+              CALL GLK_Book1(idg,' GLK_WtMon $',nbin,xl,xu)
+           ELSE
+              WRITE(m_out,*) ' WARNING GLK_WtMon: exists, id= ',id
+              WRITE(    6,*) ' WARNING GLK_WtMon: exists, id= ',id
+           ENDIF
+      ELSEIF(mode .EQ. 0) THEN
+*     **********************
+         CALL GLK_hadres(idg,lact)
+           IF(lact .EQ. 0) THEN
+              WRITE(m_out,*) ' *****> GLK_WtMon: uninitialized, id= ',id
+              WRITE(    6,*) ' *****> GLK_WtMon: uninitialized, id= ',id
+              CALL GLK_Book1(idg,' GLK_WtMon $',1,0d0,1d0)
+              CALL GLK_hadres(idg,lact)
+           ENDIF
+           wt   =par1
+           wtmax=par2
+           rn   =par3
+*     standard entries
+           CALL GLK_Fil1(idg,wt,1d0)  !!!! <-- principal filling!!!!
+*     additional goodies
+           ist  = m_index(lact,2)
+           ist2 = ist+7
+           ist3 = ist+11
+*    maximum weight -- maximum by absolute value but keeping sign
+           m_b(ist3+13)    = max( dabs(m_b(ist3+13)) ,dabs(wt))
+           IF(wt .NE. 0d0) m_b(ist3+13)=m_b(ist3+13) *wt/dabs(wt)
+*    nevzer,nevove,nevacc
+           IF(wt .EQ. 0d0)        m_b(ist3+10) =m_b(ist3+10) +1d0
+           IF(wt .GT. wtmax)      m_b(ist3+11) =m_b(ist3+11) +1d0
+           IF(rn*wtmax .LE. wt)   m_b(ist3+12) =m_b(ist3+12) +1d0
+      ELSEIF(mode .GE. 1 .OR. mode .LE. 10) THEN
+*     *************************************
+         CALL GLK_hadres(idg,lact)
+           IF(lact .EQ. 0) THEN
+              CALL GLK_Stop1(' lack of initialization, id=',id)
+           ENDIF
+           ist    = m_index(lact,2)
+           ist2   = ist+7
+           ist3   = ist+11
+           ntot   = nint(m_b(ist3 +7))
+           swt    =      m_b(ist3 +8)
+           sswt   =      m_b(ist3 +9)
+           IF(ntot.LE.0 .OR. swt.EQ.0d0 )  THEN
+              averwt=0d0
+              errela=0d0
+           ELSE
+              averwt=swt/float(ntot)
+              errela=sqrt(abs(sswt/swt**2-1d0/float(ntot)))
+           ENDIF
+           nevneg = m_b(ist3  +1) !!! it us underflow, xlow=0 assumed!!!
+           nevzer = m_b(ist3 +10)
+           nevove = m_b(ist3 +11)
+           nevacc = m_b(ist3 +12)
+           wwmax  = m_b(ist3 +13)
+           nevtot = ntot
+* Output through parameters
+           par1   = averwt
+           par2   = errela
+           par3   = nevtot
+           IF(mode .EQ. 2) THEN
+              par1   = nevacc
+              par2   = nevneg
+              par3   = nevove
+           ELSEIF(mode .EQ. 3) THEN
+              par1   = nevneg
+              par2   = wwmax
+           ENDIF
+*  no printout for mode <10
+*  ************************
+           IF(mode .LE. 9) RETURN
+           WRITE(m_out,1003) id, averwt, errela, wwmax
+           WRITE(m_out,1004) nevtot,nevacc,nevneg,nevove,nevzer
+           IF(mode .LE. 10) RETURN
+           CALL GLK_Print(idg)
+      ELSE
+*     ****
+           CALL GLK_Stop1('+++GLK_WtMon: wrong mode=',mode)
+      ENDIF
+*     *****
+ 1003 FORMAT(
+     $  ' ======================= GLK_WtMon ========================='
+     $/,'   id           averwt         errela            wwmax'
+     $/,    i5,           e17.7,         f15.9,           e17.7)
+ 1004 FORMAT(
+     $  ' -----------------------------------------------------------'
+     $/,'      nevtot      nevacc      nevneg      nevove      nevzer'
+     $/,   5i12)
+      END
+
+      SUBROUTINE GLK_CumHis(IdGen,id1,id2)
+*     ************************************
+*///////////////////////////////////////////////////////////////////////////
+*//   Cumulates histogram content starting from UNDERFLOW                 //
+*//   and normalizes to the total x-section in NANOBARNS                  //
+*//   IdGen is ID of special histogram written by M.C. generator itself   //
+*//   id2. NE. id1 required!!!                                            //
+*///////////////////////////////////////////////////////////////////////////
+*     ***********************************
+      IMPLICIT NONE
+      INTEGER  IdGen,id1,id2
+*----------------------------------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+*----------------------------------------------------------------------
+      CHARACTER*80 TITLE
+      DOUBLE PRECISION    X(m_MaxNb),ER(m_MaxNb)
+      LOGICAL GLK_EXIST
+      DOUBLE PRECISION    swt,sswt,xsec,errel,tmin,tmax
+      DOUBLE PRECISION    xscrnb,ERela,WtSup
+      INTEGER  i,nbt,nevt
+      DOUBLE PRECISION    GLK_hi,GLK_hie
+*----------------------------------------------------------------------
+      IF (GLK_Exist(id2)) GOTO 900
+*
+      CALL GLK_MgetNtot(IdGen,nevt)
+      CALL GLK_MgetAve( IdGen,xscrnb,ERela,WtSup)
+*
+      IF(nevt .EQ. 0) GOTO 901
+      CALL GLK_hinbo1(id1,title,nbt,tmin,tmax)
+      swt  = GLK_hi( id1,0)     ! UNDERFLOW
+      sswt = GLK_hie(id1,0)**2  ! UNDERFLOW
+      DO i=1,nbt
+         swt   = swt + GLK_hi( id1,i)
+         sswt  = sswt+ GLK_hie(id1,i)**2
+* note NEVT in error calc. is for the entire sample related
+* to the crude x-section XCRU including !!! zero weight events !!!!
+         xsec  = 0d0
+         errel = 0d0
+         IF(swt .NE. 0d0 .AND. nevt .NE. 0) THEN
+            xsec  = swt*(xscrnb/nevt)
+            errel = SQRT(ABS(sswt/swt**2-1d0/FLOAT(nevt)))
+         ENDIF
+         x(i)  = xsec
+         er(i) = xsec*errel
+      ENDDO
+*! store result in id2
+      CALL GLK_Book1(id2,title,nbt,tmin,tmax)
+      CALL GLK_Pak(  id2,x)
+      CALL GLK_Pake( id2,er)
+      CALL GLK_idopt(id2,'ERRO')
+      RETURN
+ 900  WRITE(6,*) '+++++ CUMHIS: ID2 exixsts!!',ID2
+      RETURN
+ 901  WRITE(6,*) '+++++ CUMHIS: EMPTY HISTO ID=',ID1
+      END
+
+
+
+
+      SUBROUTINE GLK_RenHst(chak,IdGen,id1,id2)
+*     *****************************************
+*///////////////////////////////////////////////////////////////////////////
+*//   IdGen is ID of special histogram written by M.C. generator itself   //
+*//   This routine RE-NORMALIZES to  NANOBARNS or to UNITY                //
+*//   CHAK = 'NB  '    normal case [nb]                                   //
+*//   CHAK = 'NB10'    log10 x-scale assumed [nb]                         //
+*//   CHAK = 'UNIT'    normalization to unity                             //
+*//   id2 .NE. id1 required !!!                                           //
+*///////////////////////////////////////////////////////////////////////////
+*     ***********************************
+      IMPLICIT NONE
+      CHARACTER*4 CHAK
+      INTEGER     IdGen,id1,id2
+*----------------------------------------------------------------------
+      INCLUDE 'GLK.h'
+      SAVE
+      CHARACTER*80 TITLE
+      DOUBLE PRECISION        xscrnb,ERela,WtSup,tmin,tmax
+      DOUBLE PRECISION        swt,fln10,fact
+      INTEGER      i,nbt,nevt
+      DOUBLE PRECISION    GLK_hi,GLK_hie
+*----------------------------------------------------------------------
+      IF( id2 .eq. id1) GOTO 900
+
+      CALL GLK_MgetNtot(IdGen,nevt)
+      CALL GLK_MgetAve( IdGen,xscrnb,ERela,WtSup)
+*
+      CALL GLK_hinbo1(id1,title,nbt,tmin,tmax)
+      IF(     chak .EQ. 'NB  ') THEN
+         fact = nbt*xscrnb/(nevt*(tmax-tmin))
+         CALL GLK_Operat(id1,'+',id1,id2, fact, 0d0)
+      ELSEIF( chak .EQ. 'NB10') THEN
+         fln10 = log(10.)
+         fact = nbt*xscrnb/(nevt*(tmax-tmin)*fln10)
+         CALL GLK_Operat(id1,'+',id1,id2, fact, 0d0)
+      ELSEIF( chak .EQ. 'UNIT') THEN
+         swt  = GLK_hi(id1,0)
+         DO i=1,nbt+1
+            swt   = swt + GLK_hi(id1,i)
+         ENDDO
+         fact = nbt/((tmax-tmin))/swt
+         CALL GLK_Operat(id1,'+',id1,id2, fact, 0d0)
+      ELSEIF( chak .EQ. 'UN10') THEN
+         swt  = GLK_hi(id1,0)
+         DO i=1,nbt+1
+            swt   = swt + GLK_hi(id1,i)
+         ENDDO
+         fact = nbt/((tmax-tmin)*log(10.))/swt
+         CALL GLK_Operat(id1,'+',id1,id2, fact, 0d0)
+      ELSEIF( chak .EQ. '    ') THEN
+         CALL GLK_Operat(id1,'+',id1,id2, 1d0, 0d0)
+      ELSE
+         WRITE(6,*) '+++++ RENHST: wrong chak=',chak
+      ENDIF
+*
+      RETURN
+ 900  WRITE(6,*) '+++++ RENHST: ID1=ID2=',ID1
+      END
+
+
+*///////////////////////////////////////////////////////////////////////
+*//                New Weight Motoring ToolBox
+*//               (replacement for WTmonit etc.)
+*//
+*//  The tool to monitor very precisely the average weigh
+*//  and other features of the weight distribution.
+*//  Note that in principle we are vitaly interested in three parts
+*//  of the weight distribution:
+*//     Underflow (-infty,0)
+*//     Regular   (0, WTmax)
+*//     Overflow  (WTmax,+infty)
+*//  with special emphasis on events with exactly zero weight WT=0d0.
+*//  Nevertheless, we split (0, WTmax) range into several bins
+*//  in order to be able to visualise the weight distribution.
+*//  (Using stardard tools for histogram)
+*//
+*//
+*///////////////////////////////////////////////////////////////////////
+      SUBROUTINE GLK_Mbook(idm,title,nnchx,WTmax)
+*     ******************************************
+*///////////////////////////////////////////////////////////////////////
+*//
+*//   Booking one entry. Note it is not an ordinary histogram!!!
+*//   It works just like GLK_Book1 except that it
+*//   has internaly negative id and x_minimum is always zero.
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER idm
+      CHARACTER*80 title
+      DOUBLE PRECISION   WTmax
+*
+      LOGICAL GLK_Exist
+      INTEGER j,id,nnchx,nchx,lact,lengt2,ist,ist2,ist3
+      INTEGER iopsc1, iopsc2, ioperb, ioplog, iopsla
+      INTEGER iflag1, iflag2
+      INTEGER ityphi
+      DOUBLE PRECISION   xl,xu,ddx
+*-------------------------------------------------
+      CALL GLK_Initialize
+      id = -idm
+      IF(GLK_Exist(id)) goto 900
+      ist=m_length
+      CALL GLK_hadres(0,lact)
+* Check if there is a free entry in the m_index
+      IF(lact .EQ. 0) CALL GLK_Stop1('GLK_Mbook: no space left,id= ',id)
+      m_index(lact,1)=id
+      m_index(lact,2)=m_length
+      m_index(lact,3)=0
+* ---------- limits 
+      CALL GLK_Copch(title,m_titlc(lact))
+      nchx =nnchx
+      IF(nchx .GT. m_MaxNb)
+     $     CALL GLK_Stop1(' GLK_Mbook: Too many bins ,id= ',id)
+      xl   = 0d0
+      xu   = WTmax
+* ---------- title and bin content ----------
+      lengt2 = m_length +2*nchx +m_buf1+1
+      IF(lengt2 .GE. m_LenmB)
+     $  CALL GLK_Stop1('GLK_Mbook:too litle storage, m_LenmB= ',m_LenmB)
+*
+      DO j=m_length+1,lengt2+1
+         m_b(j) = 0d0
+      ENDDO
+      m_length=lengt2
+*... default flags
+      ioplog   = 1
+      iopsla   = 1
+      ioperb   = 1
+      iopsc1   = 1
+      iopsc2   = 1
+      iflag1   =
+     $ ioplog+10*iopsla+100*ioperb+1000*iopsc1+10000*iopsc2
+      ityphi   = 3  !!!! <-- new type of histo !!!!
+      iflag2   = ityphi
+* examples of decoding flags
+*      id       = nint(m_b(ist+2)-9d0-9d12)/10
+*      iflag1   = nint(m_b(ist+3)-9d0-9d12)/10
+*      ioplog = mod(iflag1,10)
+*      iopsla = mod(iflag1,100)/10
+*      ioperb = mod(iflag1,1000)/100
+*      iopsc1 = mod(iflag1,10000)/1000
+*      iopsc2 = mod(iflag1,100000)/10000
+*      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+*      ityphi = mod(iflag2,10)
+*--------- buffer -----------------
+* header
+      m_b(ist +1)  = 9999999999999d0
+      m_b(ist +2)  = 9d12 +     id*10 +9d0
+      m_b(ist +3)  = 9d12 + iflag1*10 +9d0
+      m_b(ist +4)  = 9d12 + iflag2*10 +9d0
+* dummy vertical scale
+      m_b(ist +5)  =  -100d0
+      m_b(ist +6)  =   100d0
+* pointer used to speed up search of histogram address
+      m_b(ist +7)  =   0d0
+* information on binning
+      ist2         = ist+7
+      m_b(ist2 +1) = nchx
+      m_b(ist2 +2) = xl
+      m_b(ist2 +3) = xu
+      ddx = xu-xl
+      IF(ddx .EQ. 0d0)
+     $     CALL GLK_Stop1(' GLK_Mbook:    xl=xu,              id= ',id)
+      m_b(ist2 +4) = float(nchx)/ddx
+*
+* under/over-flow etc.
+      ist3       = ist+11
+      DO j=1,13
+         m_b(ist3 +j)=0d0
+      ENDDO
+      RETURN
+*----------------
+ 900  CALL GLK_Retu1(' WARNING GLK_Mbook: already exists id= ', id)
+      END
+
+
+      SUBROUTINE GLK_Mfill(idm,Wtm,rn)
+*     ********************************
+*///////////////////////////////////////////////////////////////////////
+*//
+*//    filling of M-subpackage entry
+*//    simillar as fil1 for 1-dim histo but the storage for error
+*//    is now used to store sum for 'partial averages' <wt-xlowedge>
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER idm
+      DOUBLE PRECISION  Wtm,rn
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER id
+      INTEGER lact, ist, ist2, ist3, iflag2, nchx, ityphi
+      INTEGER iposx1,ipose1, kposx1, kpose1, kx
+      DOUBLE PRECISION   Wt, deltx, factx, xlowedge
+      DOUBLE PRECISION   xu, xl, x1, wtmax
+*---------------------------------
+      id = -idm
+      Wt = Wtm
+      CALL GLK_hadres(id,lact)
+* exit for non-existig histo
+      IF(lact .EQ. 0)  
+     $     CALL GLK_Stop1('+++GLK_Mfill: nonexisting id= ',id)
+
+      ist  = m_index(lact,2)
+      ist2 = ist+7
+      ist3 = ist+11
+* one-dim. histo only
+      iflag2   = nint(m_b(ist+4)-9d0-9d12)/10
+      ityphi   = mod(iflag2,10)
+      IF(ityphi .NE. 3) CALL GLK_Stop1('+++GLK_Mfill: wrong id=  ',id)
+      x1 =  Wt
+      m_index(lact,3)=m_index(lact,3)+1
+* for standard average of x=Wt and its error
+      m_b(ist3 +7)  =m_b(ist3 +7)  +1
+      m_b(ist3 +8)  =m_b(ist3 +8)  +x1
+      m_b(ist3 +9)  =m_b(ist3 +9)  +x1*x1
+* filling coordinates
+      nchx  = m_b(ist2 +1)
+      xl    = m_b(ist2 +2)      !!<--- It was set to zero in book!!!
+      xu    = m_b(ist2 +3)
+      WtMax = xu
+      factx = m_b(ist2 +4)      ! (fact=nchx/(xu-xl)
+      deltx = 1d0/factx
+      IF(x1 .LT. xl) THEN
+* (U)nderflow
+         iposx1 = ist3 +1
+         ipose1 = ist3 +4
+         m_b(iposx1) = m_b(iposx1)  +1d0
+         m_b(ipose1) = m_b(ipose1)  +Wt
+      ELSEIF(x1 .GT. xu) THEN
+* (O)verflow
+         iposx1 = ist3 +3
+         ipose1 = ist3 +6
+         kposx1 = 0
+         m_b(iposx1) = m_b(iposx1)  +1d0
+         m_b(ipose1) = m_b(ipose1)  +(Wt- WtMax)
+      ELSE
+* All of (R)egular range (0,WtMax) in one bin
+         iposx1 = ist3 +2
+         ipose1 = ist3 +5
+         m_b(iposx1) = m_b(iposx1)  +1d0
+         m_b(ipose1) = m_b(ipose1)  +Wt
+* (R)egular bin, the ACTUAL one
+         kx = (x1-xl)*factx+1d0
+         kx = MIN( MAX(kx,1) ,nchx)
+         kposx1 = ist +m_buf1+kx
+         kpose1 = ist +m_buf1+nchx+kx
+         xlowedge = deltx*(kx-1)
+         m_b(kposx1) = m_b(kposx1)  +1d0
+         m_b(kpose1) = m_b(kpose1)  +(Wt-xlowedge)
+      ENDIF
+*--------------------------------
+* Additional goodies:
+* maximum weight -- maximum by absolute value but keeping sign
+      m_b(ist3+13) = MAX( DABS(m_b(ist3+13)) ,DABS(wt))
+      IF(wt .NE. 0d0) m_b(ist3+13)=m_b(ist3+13) *wt/dabs(wt)
+* nevzer,nevove,nevacc
+      IF(wt .EQ. 0d0)        m_b(ist3+10) =m_b(ist3+10) +1d0
+      IF(wt .GT. wtmax)      m_b(ist3+11) =m_b(ist3+11) +1d0
+      IF(rn*wtmax .LE. wt)   m_b(ist3+12) =m_b(ist3+12) +1d0
+*---
+      END   !GLK_Mfill
+
+
+      SUBROUTINE GLK_MgetAll(idm,
+     $     AveWt,ERela, WtSup, AvUnd, AvOve,
+     $     Ntot,Nacc,Nneg,Nove,Nzer)
+*     ***************************************************************
+*///////////////////////////////////////////////////////////////////////
+*//
+*//   Get all statistics out
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER idm
+      DOUBLE PRECISION   AveWt,ERela, WtSup, AvUnd, AvOve
+      INTEGER Ntot,Nacc,Nneg,Nove,Nzer
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER id,ist,ist2,ist3,lact
+      DOUBLE PRECISION   swt,sswt
+*--------------------
+      id= -idm
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0)
+     $     CALL GLK_Stop1('GLK_MgetAll:lack of initialization, id=',id)
+      ist    = m_index(lact,2)
+      ist2   = ist+7
+      ist3   = ist+11
+      Ntot   = nint(m_b(ist3 +7))
+      swt    =      m_b(ist3 +8)
+      sswt   =      m_b(ist3 +9)
+      IF(Ntot.LE.0 .OR. swt.EQ.0d0 )  THEN
+         AveWt=0d0
+         ERela=0d0
+      ELSE
+         AveWt=swt/DFLOAT(Ntot)
+         ERela=sqrt(abs(sswt/swt**2-1d0/float(Ntot)))
+      ENDIF
+      WtSup  = m_b(ist3 +13)
+      AvUnd  = m_b(ist3 +4)/Ntot
+      AvOve  = m_b(ist3 +6)/Ntot
+      Nneg = m_b(ist3  +1)    ! NB. it is underflow
+      Nzer = m_b(ist3 +10)
+      Nove = m_b(ist3 +11)
+      Nacc = m_b(ist3 +12)
+*-----------------------------
+*      WRITE(m_out,1003) idm, AveWt, ERela, WtSup
+*      WRITE(m_out,1004) Ntot,Nacc,Nneg,Nove,Nzer
+* 1003 FORMAT(
+*     $  ' ======================= GLK_Mget =========================='
+*     $/,'   id            AveWt          ERela            WtSup'
+*     $/,    i5,           e17.7,         f15.9,           e17.7)
+* 1004 FORMAT(
+*     $  ' -----------------------------------------------------------'
+*     $/,'        Ntot        Nacc        Nneg        Nove        Nzer'
+*     $/,   5i12)
+*------------------------------
+      END
+
+      SUBROUTINE GLK_MgetNtot(id,Ntot)
+*///////////////////////////////////////////////////////////////////////
+*//
+*//   Get Ntotal only
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER idm,id
+      DOUBLE PRECISION   AveWt, ERela, WtSup, AvUnd, AvOve
+      INTEGER Ntot, Nacc, Nneg, Nove, Nzer
+*--------------------
+      CALL GLK_MgetAll(id,
+     $     AveWt,ERela, WtSup, AvUnd, AvOve,
+     $     Ntot,Nacc,Nneg,Nove,Nzer)
+      END
+
+      SUBROUTINE GLK_MgetAve(id,AveWt,ERela,WtSup)
+*///////////////////////////////////////////////////////////////////////
+*//
+*//   Get averages only and highest weight
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER idm,id
+      DOUBLE PRECISION   AveWt, ERela, WtSup, AvUnd, AvOve
+      INTEGER Ntot, Nacc, Nneg, Nove, Nzer
+*--------------------
+      CALL GLK_MgetAll(id,
+     $     AveWt,ERela, WtSup, AvUnd, AvOve,
+     $     Ntot,Nacc,Nneg,Nove,Nzer)
+      END
+
+      SUBROUTINE GLK_Mprint(idm)
+*///////////////////////////////////////////////////////////////////////
+*//
+*//   Printout
+*//   Note that bin errors have now changed meaning
+*//
+*///////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER idm,id
+      id= -idm
+      CALL GLK_Print(id)
+      END
+
+*//////////////////////////////////////////////////////////////////////////////
+*//////////////////////////////////////////////////////////////////////////////
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                     Setters and Getters                                  //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+
+      SUBROUTINE GLK_Clone1(id1,id2,title2)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Clone 1-dimensional histo with onl bining and new title                //
+*//////////////////////////////////////////////////////////////////////////////
+      CHARACTER*80 title1, title2, title3
+      INTEGER      i,nb
+      DOUBLE PRECISION        xmin,xmax
+
+      CALL GLK_hinbo1(id1,title1,nb,xmin,xmax)
+      CALL GLK_Copch(title2,title3)
+      CALL GLK_Book1(id2,title3,nb,xmin,xmax)
+
+      END
+
+      SUBROUTINE GLK_Ymimax(id,wmin,wmax)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER id
+      DOUBLE PRECISION  wmin,wmax
+
+      CALL GLK_Yminim(id,wmin)
+      CALL GLK_Ymaxim(id,wmax)
+      END
+
+
+      SUBROUTINE GLK_PLset(ch,xx)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   Old style seter, sets type of the ploting mark                         //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      CHARACTER*4 CH
+      DOUBLE PRECISION  xx
+      INCLUDE 'GLK.h'
+      SAVE
+*----------------------------------
+      IF(CH .EQ. 'DMOD') THEN
+        m_tline = NINT(xx)
+      ENDIF
+      END
+
+      SUBROUTINE GLK_SetNout(ilun)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   Sets output unit number                                                //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      SAVE
+      INTEGER ilun
+
+      CALL GLK_Initialize
+      m_out=ilun
+      END
+
+      SUBROUTINE GLK_GetYmin(id,ymin)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymin
+      INTEGER lact,ist
+*
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist= m_index(lact,2)
+      ymin = m_b(ist+5)
+      END
+
+      SUBROUTINE GLK_GetYmax(id,ymax)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymax
+      INTEGER lact,ist
+*
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist= m_index(lact,2)
+      ymax = m_b(ist+6)
+      END
+
+      SUBROUTINE GLK_SetYmin(id,ymin)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymin
+      INTEGER lact,ist
+*
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist= m_index(lact,2)
+      m_b(ist+5) = ymin
+      CALL GLK_idopt(id,'YMIN')
+      END
+
+      SUBROUTINE GLK_SetYmax(id,ymax)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymax
+      INTEGER lact,ist
+*
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) RETURN
+      ist= m_index(lact,2)
+      m_b(ist+6) = ymax
+      CALL GLK_idopt(id,'YMAX')
+      END
+
+
+      SUBROUTINE GLK_GetYminYmax(id,ymin,ymax)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymin,ymax
+*
+      CALL GLK_GetYmin(id,ymin)
+      CALL GLK_GetYmax(id,ymax)
+      END
+
+      SUBROUTINE GLK_SetYminYmax(id,ymin,ymax)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id
+      DOUBLE PRECISION   ymin,ymax
+*
+      CALL GLK_SetYmin(id,ymin)
+      CALL GLK_SetYmax(id,ymax)
+      END
+
+      SUBROUTINE GLK_CopyYmin(id1,id2)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id1,id2
+      DOUBLE PRECISION   ymin
+*
+      CALL GLK_GetYmin(id1,ymin)
+      CALL GLK_SetYmin(id2,ymin)
+      END
+
+      SUBROUTINE GLK_CopyYmax(id1,id2)
+*//////////////////////////////////////////////////////////////////////////////
+*//   Sets vertical scale                                                    //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER id1,id2
+      DOUBLE PRECISION   ymax
+*
+      CALL GLK_GetYmax(id1,ymax)
+      CALL GLK_SetYmax(id2,ymax)
+      END
+
+      SUBROUTINE GLK_SetColor(Color)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   Sets output unit number                                                //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      CHARACTER*(*) Color
+*
+      CALL GLK_Copch(Color,m_Color)
+*
+      m_KeyCol = 1              !flag set up
+      END
+
+      SUBROUTINE GLK_SetTabRan(i1,i2,i3)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   Sets table range for taple printout in GKL_PlTable2                    //
+*//   i1,i2,i3 are lower limit, upper limit and increment                    //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER i1,i2,i3
+*
+      m_KeyTbr = 1              !flag set up
+      m_TabRan(1) = i1
+      m_TabRan(2) = i2
+      m_TabRan(3) = i3
+      END
+
+      SUBROUTINE GLK_SetTabLab(Nent,TabLab)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   Sets table range for taple printout in GKL_PlTable2                    //
+*//   i1,i2,i3 are lower limit, upper limit and increment                    //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      CHARACTER*32 TabLab(*)
+      INTEGER Nent,j
+      m_KeyTbl = 1
+      IF( Nent.LE.0 .OR. Nent.GT.m_MaxNlab ) THEN
+         CALL GLK_Stop1('+++STOP in GLK_SetTabLab: wrong Nent=',Nent)
+      ENDIF
+      DO j=1,m_MaxNlab
+         m_TabLab(j)=TabLab(j)
+      ENDDO
+      END
+
+      SUBROUTINE GLK_GetNb(id,Nb)
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'GLK.h'
+      INTEGER  id,Nb
+* local
+      CHARACTER*80 title
+      INTEGER lact,ist,ist2
+*-------------
+      CALL GLK_hadres(id,lact)
+      IF(lact .EQ. 0) THEN
+         CALL GLK_Stop1('+++STOP in GLK_GetNb: wrong id=',id)
+      ENDIF
+      ist    = m_index(lact,2)
+      ist2   = ist+7
+      Nb     = m_b(ist2 +1)
+      END
+
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                      End of CLASS  GLK                                   //
+*//////////////////////////////////////////////////////////////////////////////
+
diff --git a/Foam/GLK.h b/Foam/GLK.h
new file mode 100644
index 0000000000000000000000000000000000000000..2e2659bbdc4a12560dd9342c76b5d27a37f8c558
--- /dev/null
+++ b/Foam/GLK.h
@@ -0,0 +1,78 @@
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                       Pseudo-Class  GLK                                  //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+
+*//////////////////////////////////////////////////////////////////////////////
+*// =======================================================================  //
+*// ==========================  _GLK_  ====================================  //
+*// ========== General Library of histogramming/ploting utilities =========  //
+*// ========== It is similar but not identical to HBOOK and HPLOT =========  //
+*// =======================================================================  //
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                      Version:    1.31                                    //
+*//              Last correction:    May 2000                                //
+*//                                                                          //
+*//////////////////////////////////////////////////////////////////////////////
+
+      INTEGER    m_version         ! this is the actual version number
+      PARAMETER( m_version = 140)
+*-----------------------------------------------------------------------------
+      INTEGER m_idmax              ! maximum number of bins
+      PARAMETER( m_idmax=400)
+* Parameters m_buf1 and m_buf2 are lenths of buffors/headers in the histogram
+* m_buf1 is for 1-dim histogram and m_buf2 for 2-dim histo
+* m_buf2 is still not very consequently implemented 
+* so m_buf1=m_buf2 is still required
+      INTEGER    m_buf1,    m_buf2
+      PARAMETER( m_buf1=24, m_buf2=24)
+      INTEGER    m_MaxNb
+      PARAMETER( m_MaxNb = 50000)   ! maximum numbers of bins
+      INTEGER    m_MaxNlab
+      PARAMETER( m_MaxNlab = 100)   ! maximum numbers labels in table 1-st col.
+*-----------------------------------------------------------------------------
+      INTEGER       m_LenmB
+      PARAMETER    (m_LenmB = 100000)
+      DOUBLE PRECISION   m_b
+      INTEGER      m_out, m_huni, m_length, m_LenInd, m_index
+      CHARACTER*80 m_titlc
+      INTEGER      m_lint, m_ltx, m_KeyTit
+      CHARACTER*80 m_titch         ! title of plot, several lines
+      INTEGER      m_titlen        ! number of lines
+      PARAMETER(   m_titlen =50)
+      CHARACTER*1  m_BS            ! backslash character
+      INTEGER      m_tline         ! variable controling style of line or mark
+      CHARACTER*80 m_Color         ! string defining color
+      INTEGER      m_KeyCol        ! control of color use, reset internaly!
+      INTEGER      m_KeyTbr        ! control of table range, reset after use!
+      INTEGER      m_TabRan        ! Table range for ploting
+      INTEGER      m_KeyTbl        ! Tag for Table first column label
+      CHARACTER*32 m_TabLab        ! label in 1-st column of table
+*-----------------------------------------------------------------------------
+      COMMON  /c_GLK/ 
+     $   m_b(m_LenmB),             ! storage for all histograms
+     $   m_out,                    ! general output for printouts
+     $   m_huni,                   ! disk unit number for histos
+     $   m_length,                 ! act. length of m_b   (less than m_LenmB )
+     $   m_LenInd,                 ! act. length of index, UNDER DEVELOPEMENT!
+     $   m_index(m_idmax,3),       ! index of histos
+     $   m_titlc(m_idmax),         ! titles of histos
+     $   m_tline,                  ! general output for printouts
+     $   m_lint,                   ! argument of gplint, sets various styles
+     $   m_ltx,                    ! output unit for latex
+     $   m_titch(m_titlen),        ! title of plot, several lines
+     $   m_Color,                  ! string defining color
+     $   m_KeyTit,                 ! status key of plot Title
+     $   m_KeyCol,                 ! status key of Color
+     $   m_KeyTbr,                 ! status key of Table range for ploting
+     $   m_TabRan(3),              ! Table range for ploting
+     $   m_KeyTbl,                 ! status for Table first column label
+     $   m_TabLab(m_MaxNlab),      ! Label in 1-st column of table
+     $   m_BS                      ! backslash for LaTex (machine dependent!)
+
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//                      End of CLASS  GLG                                   //
+*//////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/MCellA.f b/Foam/MCellA.f
new file mode 100644
index 0000000000000000000000000000000000000000..3494f36db3b0efd4af58ad68be887b4b65f2beae
--- /dev/null
+++ b/Foam/MCellA.f
@@ -0,0 +1,1537 @@
+*///////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                       //
+*//             MCell  Mega Cell MC sampler                                               //
+*//             Version 2.02 November 2000                                                //
+*//                                                                                       //
+*//  N-dimensional general purpose Monte Carlo sampler                                    //
+*//  with the self-adapting HYPER-CUBICAL grid                                            //
+*//                                                                                       //
+*//             Author:   Stanislaw JADACH                                                //
+*//             Address:  INP Cracow, DESY-Zeuthen                                        //
+*//             Email:    Stanislaw.Jadach@cern.ch, Stanislaw.Jadach@ifj.edu.pl           //
+*//             HomePage: http://home.cern.ch/jadach/                                     //
+*//                                                                                       //
+*//  First version 1.00 written by S.J. in August 2000 during visit in DESY-Zeuthen       //
+*///////////////////////////////////////////////////////////////////////////////////////////
+
+
+*/////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                                     //
+*//          Pseudoclass MCellA                                                                         //
+*//                                                                                                     //
+*//                                                                                                     //
+*//                      Initialization of the grid                                                     //
+*//  MCellA_PreInitialize                 : Pre-initialization, set all default values (constructor?)   //
+*//  MCellA_Initialize(FunW)              : Initialization of the grid etc.                             //
+*//  MCellA_InitCells                     : Initializes first n-factorial cells inside original cube    //
+*//  MCellA_DefCell                       : Create new (daughter) cell and append at end of the buffer  //
+*//  MCellA_Explore(iCell,funW)           : Short MC sampling in iCell, determine <wt>, wtMax etc.      //
+*//  MCellA_RanDiscr(Driv,nTot,Power,iRand) : Random choice of cell division direction                  //
+*//  MCellA_MakeAlpha(Alpha)              : auxiliary procedure for MCellA_Explore                      //
+*//  MCellA_Grow(funW)              : grow cells until buffer is full                                   //
+*//  MCellA_PeekMax(iCell)          : choose randomly one cell, used also in MC generation              //
+*//  MCellA_PeekRand1(iCell)        : Generates randomly one (active) cell pointer iCell                //
+*//  MCellA_Divide(iCell,funW,RC)   :Divide iCell into two daughters; iCell retained, taged as inactive //
+*//  MCellA_ActUpda                 : Creates list of active cells (pointers)                           //
+*//                     Generation                                                                      //
+*//  MCellA_MakeEvent(Density)      : Generates point/vector Xrand with the weight MCwt                 //
+*//  MCellA_CellGener(Density)      : Cooses randomly one of active cells                               //
+*//  MCellA_GetMCvector(MCvector)   : Provides point/vector MCvector generated by  MakeEvent            //
+*//  MCellA_GetMCwt(MCwt)           : Provides MCwt, MC weight calculated by MakeEvent                  //
+*//  MCellA_MCgenerate(funW,X,MCwt) : Alternative entry, Generates point X with the weight MCwt         //
+*//                     Finalization                                                                    //
+*//  MCellA_Finalize(MCresult,MCerror)    : Calculates integral and its error after (only from) MC run  //
+*//                     Other Getters and Setters                                                       //
+*//  MCellA_GetTotPrim(TotPrim)     !Provides Prrimary used in MC generation                            //
+*//  MCellA_SetKdim(Kdim)           :Sets no. of dimensions hypercubics (to be called before Initialize)//
+*//  MCellA_SetnBuf(nBuf)           :Sets nBuf, working area in buffer                                  //
+*//  MCellA_SetnBin(nBin)           :Sets nBin, histogram size for cell exploration/division            //
+*//  MCellA_SetOut(Out)             :Sets output unit number                                            //
+*//  MCellA_SetChat(Chat)           :Sets chat level; Chat=0,1,2 chat level in output, Chat=1 normal    //
+*//  MCellA_SetnSampl(nSampl)       :Sets nSampl; No of MC sampling before dividing cell                //
+*//  MCellA_SetOptDrive(OptDrive)   :Sets OptDrive; type of Driver =0,1,2 for True,Sigma,WtMax          //
+*//  MCellA_SetOptPeek              :Sets type of method in cell division                               //
+*//  MCellA_SetOptEdge(OptEdge)     :Sets OptEdge; decides whether vertices are included in the sampling//
+*//  MCellA_SetOptRanIni(OptRanIni) :Sets OptRanIni=0,1, for rand. numb. initialization inside/outside  //
+*//  MCellA_SetOptRanLux(OptRanLux) :Sets OptRanLux=-1,0,1,2,3 raand.numb.gen. level                    //
+*//  MCellA_GetnCalls(nCalls)       :Get total no of function calls                                     //
+*//                    Debugging and miscelaneous                                                       //
+*//  MCellA_Check(mout,level)       :Checks all pointers (after comression) debuging!                   //
+*//  MCellA_BufPrint(mout)          :Prints all cells, debugging                                        //
+*//  MCellA_BufActPrint(mout)       :Prints all active cells, debugging                                 //
+*//  MCellA_PltBegin                :Ploting 2-dim. cells and vertices                                  //
+*//  MCellA_PltCell(mout)           :Ploting 2-dim. cells and vertices                                  //
+*//  MCellA_PltEnd                  :Ploting 2-dim. cells and vertices                                  //
+*//                                                                                                     //
+*/////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                                     //
+*//  Input parameters:                                                                                  //
+*//    kDim     number of dimensions for hypercubics                                                    //
+*//    nBuf     Actual dynamic lenth of the buffer m_nBuf<m_nBufMax. For strongly peaked distribution   //
+*//             nBuf should be as large as possible, this will increase CPU time in initialization      //
+*//             MC generation is weakly affected by increasing nBuf                                     //
+*//    nSampl   No of sampling when dividing cell, nSampl=10-100 is OK, further increase improves       //
+*//             costs CPU time and apparently does not increase grid efficiency too much.               //
+*//             This should be checked however for every new distribution.                              //
+*//    OptDrive Type of Driver =0,1,2 for TrueInt,Sigma,WtMax, Driver=WtMax is the best if we aim       //
+*//             at rejection leading to wt=1 events. If not then Driver=Sigma iswiser choice leading    //
+*//             to save of CPU time.  Simplistic Driver=Sigma is correct but not recommeneded (ineffic.)//
+*//    OptEdge  decides whether vertices are included in the sampling. Default  OptEdge=1 causes that   //
+*//             vertices at the edge of simplex cells are included always in MC exploration             //
+*//             of the cell. In the case of density distrib. with weak integrable singularities         //
+*//             at the edges it may be not possible and OptEdge=0 may help.                             //
+*//    EvPerBin Enhancement of MC statistics in the beginning of the foam build-up (testing new ideas). //
+*//             =0 (default) no enhacement, =0 enhancement is none, fo hyp-cubic foeam only.            //
+*//    Out      Miscelaneous. Output unit number.                                                       //
+*//    Chat     Miscelaneous. Chat=0,1,2 chat level in output, Chat=1 normal level.                     //
+*//                                                                                                     //
+*//                                                                                                     //
+*/////////////////////////////////////////////////////////////////////////////////////////////////////////
+*//  Terminology:                                                                                       //
+*//    "Active cells" are these which did not divide and are eligible for division                      //
+*//  Remarks:                                                                                           //
+*//    List of active cells is not realy necessary, but let us keep it for possible                     //
+*//    future developements or tests.                                                                   //
+*/////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+      SUBROUTINE MCellA_PreInitialize     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Presets certain defaults for switches and other and regualtory parameters.     //
+*//   They Can be reset with setters                                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER i,j
+*
+      INTEGER   m_Magic        ! Magic cookie, to avoid multiple initialization
+      DATA      m_Magic /378231178/
+      SAVE      m_Magic
+*     -------------------------------------------------
+      IF(m_Magic .EQ. 378231178 ) THEN
+         m_MagicInit = m_Magic
+         m_Magic     = 0
+      ENDIF
+      IF(m_MagicInit .NE. 378231178 ) RETURN
+      IF(m_Chat.GT.0) THEN
+         WRITE(m_out,*) '================================================' !
+         WRITE(m_out,*) '===============MCellA_PreInitialize==============' !
+         WRITE(m_out,*) '================================================' !
+      ENDIF
+      m_MagicInit= 0
+      m_kDim     = 0                 ! dimension hypercubics
+      m_Dimen    = m_kDim            ! dimension total
+      m_nBuf     = 1000              ! Actual dynamic lenth of the buffer m_nBuf<m_nBufMax
+      m_nBin     = 8                 ! No of histogram bins in exploring cell 
+      m_nSampl   = 200               ! No of sampling when dividing cell
+      m_OptDrive = 2                 ! type of Driver =0,1,2 for TrueVol,Sigma,WtMax
+      m_OptEdge  = 0                 ! decides whether vertices are included in the sampling
+      m_OptPeek  = 1                 ! type of Peek =0,1 for maximum, random
+      m_Out      = 6                 ! Output unit
+      m_Chat     = 1                 ! Chat=0,1,2 chat level in output, Chat=1 normal level
+      m_OptRanIni= 1                 ! Rand.num. generator initialized (=1) inside MCellA
+      m_OptRanLux= 3                 ! Rand.num. generator level =-1,0,1,2,3,4
+      m_EvPerBin =25                 ! Cut MC statistics in the end of build-up <m_EvPerBin*nBin
+*
+      m_LastCe   = 0                 ! Initial length of dynamical buffor for cells
+      m_nCalls   = 0                 ! Initial counter of function calls
+      END
+
+      SUBROUTINE MCellA_Flush        !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Use this before re-initialization of the MCellA                                //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      m_MagicInit = 378231178   ! Reset Magic cookie, alowing initialization
+      IF(m_Chat.GT.0) THEN
+         WRITE(m_out,*) '========================================'
+         WRITE(m_out,*) '===============MCellA_Flush=============='
+         WRITE(m_out,*) '========================================'
+      ENDIF
+      CALL MCellA_PreInitialize
+      END
+
+      SUBROUTINE MCellA_Initialize(FunW)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Basic initialization, create "foam of cells"                                   //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            i,j,k,iCell,kCell
+      DOUBLE PRECISION   TotPrim
+*---------------------------------------------
+      CALL MCellA_PreInitialize
+* User may prefers to initialize r.n.gen. by himsef, the initialization below can be inhibited 
+      IF( m_OptRanIni.EQ. 1 ) THEN
+         IF(m_OptRanLux.EQ.-1) THEN
+            CALL PseuMar_Initialize(54217137, 0, 0) ! Initialization of random number generator
+         ELSEIF(m_OptRanLux.GE.0 .AND. m_OptRanLux.LE.4 ) THEN
+            CALL RLUXGO( m_OptRanLux, 54217137,0,0) ! Initialization of random number generator
+         ELSE
+            WRITE(*,    *) ' ### STOP in MCellA_Initialize, wrong OptRanLux =',m_OptRanLux !
+            WRITE(m_Out,*) ' ### STOP in MCellA_Initialize, wrong OptRanLux =',m_OptRanLux !
+         ENDIF
+      ENDIF
+*
+      IF( m_nBuf .GT. m_nBufMax) THEN
+         WRITE(*,    *) ' ### STOP in MCellA_Initialize, to big m_nBuf =',m_nBuf !
+         WRITE(m_Out,*) ' ### STOP in MCellA_Initialize, to big m_nBuf =',m_nBuf !
+         STOP
+      ENDIF
+      IF( m_nBin .GT. m_nBinMax) THEN
+         WRITE(*,    *) ' ### STOP in MCellA_Initialize, to big m_nBin =',m_nBin !
+         WRITE(m_Out,*) ' ### STOP in MCellA_Initialize, to big m_nBin =',m_nBin !
+         STOP
+      ENDIF
+      IF( m_Dimen .LE. 0 ) THEN
+         WRITE(*,    *) ' ### STOP in MCellA_Initialize, m_Dimen =',m_Dimen !
+         WRITE(m_Out,*) ' ### STOP in MCellA_Initialize, m_Dimen =',m_Dimen !
+         STOP
+      ENDIF
+* Initialize cells
+      CALL MCellA_InitCells(funW)
+***** CALL MCellA_BufPrint(m_Out)
+
+      CALL  MCellA_Grow(funW)
+* Update list of active cells, only for internal tests
+      CALL MCellA_ActUpda
+      CALL MCellA_Check(6,0)     ! Check if the liked list is OK
+*     -----------------------
+      IF( m_Chat.GE.1) THEN
+            WRITE(m_Out,'( 2(a,i9), 2(a,g18.9) )') 
+     $      'Initialize>>>>GROWTH Cells:',m_LastCe,' Active:',m_LastAc, !
+     $      ' Integral:',m_CeIntg(1),' Driver:',m_CeDriv(1) !
+      ENDIF
+      IF( m_Chat.EQ.2) THEN
+         CALL MCellA_BufPrint(    m_Out)
+         CALL MCellA_BufActPrint( m_Out)
+      ENDIF
+* Initializations for M.C. generation
+      m_Drive  = m_CeDriv(1)  ! M.C. generation value of Driver integral
+      m_SumWt  = 0d0          ! M.C. generation sum of Wt
+      m_SumWt2 = 0d0          ! M.C. generation sum of Wt**2
+      m_NevGen  = 0d0         ! M.C. generation sum of 1d0
+      m_WtMax  = -1d99        ! M.C. generation maximum wt
+      m_WtMin  =  1d99        ! M.C. generation minimum wt
+      m_VolTot = m_CeIntg(1)  ! Estimate of integral tot. without error
+      m_MCresult = m_VolTot   ! M.C. generation Final value of ITEGRAL, temporary asignment
+      m_MCerror  = m_VolTot   ! M.C. generation Final walue of ERROR  , temporary asignment
+*
+*((((((((((((################################################################################
+*((((((((((((################################################################################
+c      CALL MCellA_BufPrint(   6)
+c      CALL MCellA_BufActPrint(6)
+c      CALL MCellA_Check(      6,0)
+c      WRITE(*,*) ' ########### STOP ########### developement not finished @@@@' !
+c      STOP
+*))))))))))))################################################################################
+*))))))))))))################################################################################
+*
+* Cumulative Primary for MC generation, see MCellA_CellGener
+      CALL MCellA_ActUpda
+      TotPrim = 0d0
+      m_CePrCu(0)= 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         TotPrim = TotPrim +m_CePrim( iCell )
+         m_CePrCu(kCell)=TotPrim
+      ENDDO
+
+      END                       ! MCellA_Initialize
+
+      SUBROUTINE MCellA_InitCells(funW)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Initialize first n-factorial cells inside original cube                        //
+*//   MC exploration done for all newly defined cells                                //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            iCeNew,iCell,NoMC
+      INTEGER            i,j,k
+*     -----------------------------------------------------------------------------
+*//////////////////////////////////////////////////////////////////////////////////////
+*        ROOT cell ACTIVE, no daughters
+      NoMC= m_nSampl
+*     -------------------- Stat,Pare, Dau1, Dau2, MCsampl,  iCeNew)
+      CALL MCellA_DefCell(     1,  -1,   -1,   -1,    NoMC,  iCeNew) !
+      CALL MCellA_Explore(iCeNew,funW) ! Initial MC sampling
+      END                       !!!MCellA_InitCells
+
+      SUBROUTINE MCellA_DefCell(Stat,Pare,Dau1,Dau2,NoMC,iCeNew)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Create new (daughter) cell and append it at the very end of the buffer         //
+*//   iCeNew is pointer of the new cell                                              //
+*//   Note clever trick: volume of this daughter is assigned initialy half volume    //
+*//   of the parent, if parent exists.                                               //
+*//   In Explore this value is used to update all parents such that                  //
+*//   in the entrire tree parents have volume being sum of all daughter volumes.     //
+*//   This summation discipline is useful for MC generation of an active cell by     //
+*//   going randomly from top to bottom of the tree.                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            Stat,Pare,Dau1,Dau2,iCeNew,k,NoMC
+*     ------------------------------------------------------------------
+      IF( m_LastCe .EQ. m_nBuf) THEN
+         WRITE(*,*) ' STOP in MCellA_DefCell: something wrong with m_nBuf=',m_nBuf !
+         STOP
+      ENDIF
+      m_LastCe = m_LastCe+1
+      iCeNew   = m_LastCe
+      m_CeStat(iCeNew)= Stat                    ! status code, =0 inactive, =1 active
+      m_CePare(iCeNew)= Pare                    ! parent cell pointer
+      m_CeDau1(iCeNew)= Dau1                    ! daughter1 cell pointer
+      m_CeDau2(iCeNew)= Dau2                    ! daughter2 cell pointer
+      m_CeSamp(iCeNew)= NoMC                    ! No of MC events in exploration
+*
+      IF(Pare.EQ.-1) THEN
+         m_CeIntg(iCeNew)= 0d0
+         m_CeDriv(iCeNew)= 0d0
+      ELSE
+         m_CeIntg(iCeNew)= m_CeIntg(Pare)/2d0   ! integr. half of parent
+         m_CeDriv(iCeNew)= m_CeDriv(Pare)/2d0   ! integr. half of parent
+      ENDIF
+      END                       ! MCellA_DefCell
+
+
+      SUBROUTINE MCellA_Explore(iCell,funW)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Explore newly defined cell with help of special short MC sampling              //
+*//   As a result, estimetes of true and driver integral will be defined             //
+*//   Average and dispersion of the weight distribution will be found along each     //
+*//   edge and the best edge (minimum dispersion) is memorized for future use.       //
+*//   Axerage x for eventual future cell division is also defined.                   //
+*//   Recorded are aso minimum and maximu weight etc.                                //
+*//   The volume estimate in all (inactive) parent cells is updated                  //
+*//   Note that links to parents and initial volume = 1/2 parent has to be           //
+*//   already defined prior to calling this routine.                                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell
+* Hyper-Cubic subspace
+      DOUBLE PRECISION   Alpha( m_KdiMax)
+      INTEGER            digit( m_KdiMax)
+* Total space
+      DOUBLE PRECISION   Vrand( m_DimMax)
+* Edge sampling working space, matrices
+      DOUBLE PRECISION   Xdivi( m_KdiMax)
+      DOUBLE PRECISION   Histo( m_KdiMax,m_nBinMax)
+*--------
+      INTEGER            loop,i,j,k,parent,iv,jv,kv,iBin,nDivi,NevEff !
+      DOUBLE PRECISION   x,x1,x2,Wt,Vsum,SumWt,NoMC
+      DOUBLE PRECISION   Dx,VolOld, DriOld, XrSum
+      DOUBLE PRECISION   Posi(m_KdiMax),Size(m_KdiMax)
+      DOUBLE PRECISION   CeSum(10)
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+*-----------------------------------------------------------------------
+* memorize old values, will be needed for correcting parent cells
+      VolOld = m_CeIntg(iCell)
+      DriOld = m_CeDriv(iCell)
+* get position and size vectors from PARENT explorations
+      CALL MCellA_GetHcube(iCell,Posi,Size)
+      Dx=1d0          ! Cartesian volume of the hypercube
+      DO i=1,m_Kdim
+         Dx = Dx*Size(i) ! Product of sizes in hypercubical subspace
+      ENDDO
+*/////////////////////////////////////////////////////
+*//    Exploratory MC sampling to probe the cell    //
+*/////////////////////////////////////////////////////
+      CeSum(1) =  0
+      CeSum(2) =  0
+      CeSum(3) =  0
+      CeSum(4) =  1d90  ! wtmin
+      CeSum(5) = -1d90  ! wtmax
+      DO k=1,m_KdiMax
+         DO iBin=1,m_nBin
+            Histo(k,iBin)=0d0
+         ENDDO
+      ENDDO
+*///////////////////////////////////////////////////////////////////////////////////
+*     Additional scan over vertices in order to improve max/min weights
+*     Note that this option adds 2**m_Kdim of the function calls, limited to 1000!
+      IF( m_OptEdge .EQ. 1 ) THEN
+         DO k=1,m_Kdim
+            digit(k)=0          ! initialize first partitions
+         ENDDO
+         DO loop=1,1000         ! start of loop over partitions
+            DO j=1,m_Kdim
+               Vrand(j) = Posi(j) + digit(j)*Size(j) ! h-cubical subspace
+            ENDDO
+            Wt =funW(Vrand)*Dx  ! weight average normalised to integral over the cell
+            CeSum(4) = MIN( CeSum(4),Wt) ! minium weight
+            CeSum(5) = MAX( CeSum(5),Wt) ! maximu weight
+            digit(1)=digit(1)+1
+            DO k=1,m_Kdim-1
+               IF(digit(k).EQ.2) THEN
+                  digit(k)=0
+                  digit(k+1)=digit(k+1)+1
+               ENDIF
+            ENDDO
+            IF( m_Kdim .EQ.0 )      GOTO 122
+            IF( digit(m_Kdim).EQ.2) GOTO 122
+         ENDDO                  ! end of loop over partitions
+ 122     CONTINUE
+      ENDIF
+*///////////////////////////////////////////////////////////////////////////////////
+*     generate randomly/uniformly vector Vrand inside this simplex&hypercube
+      DO i=1,m_CeSamp(iCell)
+         CALL MCellA_MakeAlpha( Alpha)
+         DO j=1,m_Kdim
+            Vrand(j) = Posi(j) +Alpha(j)*Size(j) ! hypcubic subspace
+         ENDDO
+*------------------------------------------------------------------------------------
+* IMPORTANT! Two Loops below determine the indexing of edges (simplex and hypercube)
+*------------------------------------------------------------------------------------
+         DO j=1,m_Kdim
+            Xdivi(j) = Alpha(j)
+         ENDDO
+*///////////////////////////////////////////////////////////////////////////////////
+         Wt =funW(Vrand)*Dx  ! principal weight normalised to integral over the cell
+*------------------------------------------------------------------------------------
+         m_nCalls = m_nCalls+1
+         CeSum(1) = CeSum(1)+ Wt         ! sum of weights
+         CeSum(2) = CeSum(2)+ Wt*Wt      ! sum of weights squared
+         CeSum(3) = CeSum(3)+ 1d0        ! sum of 1
+         CeSum(4) = MIN( CeSum(4),Wt)    ! minium weight
+         CeSum(5) = MAX( CeSum(5),Wt)    ! maximu weight
+* Search for the best edge candidate for future cell division, prepare MC material
+         Ndivi  = m_kDim
+         DO k=1,nDivi
+            iBin = INT(Xdivi(k)*m_nBin)+1d0
+            iBin = MIN(MAX(iBin,0),m_nBin)
+            Histo(k,iBin) = Histo(k,iBin)+Wt             ! fill histo for each edge
+c[[[[[[[[[[[[ debug [[[[[[[[[[[[ debug [[[[[[[[[[[[
+c            IF(iCell.EQ.4) THEN
+c               CALL GLK_Fil1(1200+k, Xdivi(k),Wt)
+c            ENDIF
+c]]]]]]]]]]]] debug ]]]]]]]]]]]] debug ]]]]]]]]]]]]
+         ENDDO
+         IF( m_EvPerBin.GT.0 ) THEN
+            NevEff = CeSum(1)**2/CeSum(2)
+            IF( NevEff .GE. m_nBin*m_EvPerBin) GOTO 222 !
+         ENDIF
+      ENDDO
+ 222  CONTINUE
+*///////////////////////////////////////////////////////
+*//   End of Special Short MC sampling to probe cell  //
+*///////////////////////////////////////////////////////
+
+
+*//////////////////////////////////////////////////////////////////////////////////////
+*//  Determine the best edge candidate for future cell division, 
+*//  using MC  material in Histo
+      SumWt  = CeSum(1)
+      NoMC   = CeSum(3)
+      CALL MCellA_Carver(iCell,SumWt,Histo)
+*//////////////////////////////////////////////////////////////////////////////////////
+      IF( CeSum(1) .LT.0d0) GOTO 920
+      m_CeIntg(iCell)  = CeSum(1)/NoMC      ! estimator of the true integral
+*!!!!!!!!!  DRIVER is for the Foam build-up (not for MC generation)   !!!!!!!!!!
+*!!!!!!!!!  PRIMARY is for MC generation (not for the Foam build-up ) !!!!!!!!!!
+      IF(     m_OptDrive.EQ.0 ) THEN
+         m_CePrim(iCell) = m_CeIntg(iCell)           ! True integral, MC generation
+         m_CeDriv(iCell) = m_CeIntg(iCell)           ! True integral, Foam build-up
+      ELSEIF( m_OptDrive.EQ.1 ) THEN
+         m_CePrim(iCell) = DSQRT(CeSum(2)/NoMC)      ! Sqrt( <w>**2 + sigma**2 )=Sqrt(<w**2>)
+         m_CeDriv(iCell) = DSQRT(CeSum(2)/NoMC -m_CeIntg(iCell)**2) ! sigma=Sqrt(<w**2>-<w>**2)
+      ELSEIF( m_OptDrive.EQ.2 ) THEN
+         m_CePrim(iCell) = CeSum(5)                  ! wtmax    , MC generation
+         m_CeDriv(iCell) = CeSum(5) -m_CeIntg(iCell) ! wtmax-<w>, Foam build-up
+      ELSE
+         WRITE(m_out,*) ' ++++ STOP in MCellA_Explore, wrong m_OptDrive =',m_OptDrive !
+         WRITE(    *,*) ' ++++ STOP in MCellA_Explore, wrong m_OptDrive =',m_OptDrive !
+         STOP
+      ENDIF
+c{{{      WRITE(*,*) 'iCell=',iCell,NoMC,INT(CeSum(1)**2/CeSum(2))
+* correct volume and driver in all parent cells to the top of the tree
+      parent = m_CePare(iCell)
+      DO i = 1,m_nBuf
+         IF( parent .EQ. -1 ) GOTO 100 ! Exit if no parent exists
+         m_CeIntg(parent)  = m_CeIntg(parent)  +( m_CeIntg(iCell)  -VolOld) !
+         m_CeDriv(parent)  = m_CeDriv(parent)  +( m_CeDriv(iCell)  -DriOld) !
+         parent=m_CePare(parent)
+      ENDDO
+ 100  CONTINUE
+      RETURN
+ 920  WRITE(*,*) ' ### STOP in MCellA_Explore: something wrong with integrand ' !
+      STOP
+ 970  WRITE(*,*) ' ### STOP in MCellA_Explore: something wrong with Ndivi =',nDivi !
+      STOP
+      END                       ! MCellA_Explore
+
+
+      SUBROUTINE MCellA_Carver(iCell,SumWt,Histo)  !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*// Determine the best edge candidate for future cell division, using MC  material   //
+*// kBest is the best edge found, xBest and yBest are the best values of lambda      //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell
+      DOUBLE PRECISION   SumWt, Histo(m_KdiMax,m_nBinMax)
+      DOUBLE PRECISION   xBest,yBest,zBest
+      DOUBLE PRECISION   Bins(m_nBinMax)
+      INTEGER            i,j,k, iBin, nDivi,kBest
+      INTEGER            iUp,iLow, jUp,jLow, kDivi, jv,iv, jDivi
+      DOUBLE PRECISION   BinMax,This, Carve, yLevel
+      DOUBLE PRECISION   CarvOne,CarvTwo,CarvMax
+*
+      kBest =1
+      xBest =0.5d0
+      yBest =1d0
+      IF( SumWt .NE. 0d0) THEN
+         CarvMax = -1d150
+         nDivi  = m_kDim
+         DO kDivi=1,nDivi
+            BinMax  = -1d150
+            DO iBin=1,m_nBin    ! Unload histo and Maximum bin
+               Bins(iBin) = Histo(kDivi,iBin)
+               BinMax = MAX( BinMax, Bins(iBin)) ! Maximum content/bin
+            ENDDO
+            CarvTwo = 0d0
+            DO iBin=1,m_nBin
+               Bins(iBin) = Bins(iBin)/BinMax ! Normalize to the highest bin
+               CarvTwo = CarvTwo + (1d0-Bins(iBin))/m_nBin ! Another carve (more stable)
+            ENDDO
+* Find maximum 'rectangular carve' in betwen the two bins (jLow,...,jUp)
+            jLow =1
+            jUp  =m_nBin
+            CarvOne = -1d150
+            yLevel  = -1d150
+            DO iBin=1,m_nBin
+               This = Bins(iBin)
+               iLow = iBin
+               DO j=iBin,1,-1   ! walk to the left and find first bin > current
+                  IF(This .LT. Bins(j) ) GOTO 100
+                  iLow = j
+               ENDDO
+ 100           CONTINUE
+               iUp  = iBin
+               DO j=iBin,m_nBin ! walk to the right and find first bin > current
+                  IF(This .LT. Bins(j) ) GOTO 200
+                  iUp  = j
+               ENDDO
+ 200           CONTINUE
+               Carve = (iUp-iLow+1)*(1d0-This)/m_nBin
+               IF( Carve .GT. CarvOne) THEN
+                  CarvOne = Carve
+                  jLow = iLow
+                  jUp  = iUp
+                  yLevel = This
+               ENDIF
+            ENDDO               ! end-loop over histogram bins 
+*************************************************************
+**               IF( CarvOne .GT. CarvMax) THEN
+**                  CarvMax   = CarvOne
+*************************************************************
+            IF( CarvTwo .GT. CarvMax) THEN
+               CarvMax   = CarvTwo
+               kBest = kDivi    ! Best edge
+               xBest = (jLow-1d0)/m_nBin
+               yBest = (jUp*1d0)/m_nBin
+               IF(jLow .EQ. 1 )     xBest = yBest
+               IF(jUp  .EQ. m_nBin) yBest = xBest
+* division ratio in units of 1/m_nBin, testing
+               jDivi = jLow-1
+               IF(jLow .EQ. 1 )     jDivi=jUp
+**************************************************************
+* The improvement below does not seem to matter at all
+*                  IF( 0.5d0*(xBest+yBest) .LT. 0.5d0) THEN
+*                     zBest =xBest
+*                     xBest =yBest
+*                     yBest =zBest
+*                  ENDIF
+**************************************************************
+            ENDIF
+         ENDDO                  ! end-loop over nDivi
+      ENDIF
+      m_CeDivi(iCell) = jDivi +kBest*32768 ! parameters for future division
+      END                       ! MCellA_Carver
+
+
+      SUBROUTINE  MCellA_GetHcube(iCell,Posi,Size)
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Testing new concept of the Cell encodong/decoding using short integers         //
+*//   Using  m_CeDivi(iCell) we recover cell position Posi(tion) and Size vectors    //
+*//   using all parents and grandparents in the tree.                                //
+*//   The CPU overhead in generation is 50%                                          //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER           iCell
+      DOUBLE PRECISION  Posi(*),Size(*)
+      INTEGER           i,j,k, kBest, jDivi, parent,daughter
+      DOUBLE PRECISION  xDivi
+      DOUBLE PRECISION  sum1,sum2
+*--------------------
+      DO j=1,m_Kdim
+         Size(j)=1d0
+         Posi(j)=0d0
+      ENDDO
+* loop over parent cells to the top of the tree
+      daughter = iCell
+      parent   = m_CePare(iCell)
+      DO i = 1,m_nBuf
+         IF( parent .EQ. -1 ) GOTO 100 ! Exit if no parent exists
+         jDivi = MOD(m_CeDivi(parent),32768) ! division bin < 32768
+         kBest = m_CeDivi(parent)/32768      ! best edge 
+         xDivi = (jDivi*1d0)/m_nBin
+         IF(     m_CeDau1(parent).EQ.daughter  ) THEN
+            Size(kBest)=Size(kBest)*xDivi
+            Posi(kBest)=Posi(kBest)*xDivi
+         ELSEIF( m_CeDau2(parent).EQ.daughter  ) THEN
+            Size(kBest)=Size(kBest)*(1d0-xDivi)
+            Posi(kBest)=Posi(kBest)*(1d0-xDivi)+xDivi
+         ELSE
+            WRITE(*,*) ' STOP in MCellA_TestNew, daughter,parent=',daughter,parent !
+         ENDIF
+         daughter = parent
+         parent   = m_CePare(parent)
+      ENDDO
+ 100  CONTINUE
+      END                       ! MCellA_GetHcube
+
+
+      SUBROUTINE MCellA_RanDiscr(Driv,nTot,Power,iRand)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   PRESENTLY UNUSED !!!                                                           //
+*//   Generates iRand in (1,nTot) acconding to discrete un-normalized probab. Driv   //
+*//   Power is normaly =1, can be useful for special purposes                        //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      DOUBLE PRECISION   Driv(*),Power
+      INTEGER            nTot,iRand
+      INTEGER            i
+      DOUBLE PRECISION   random,sum,Total
+      REAL               Qrand(10)        ! from PseuMar
+*
+      Total   = 0d0
+      DO i= 1,nTot
+         Total = Total +Driv( i)**Power
+      ENDDO
+      IF(Total .EQ. 0d0) GOTO 990
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,1)
+      ELSE
+         CALL RanLux(Qrand,1)
+      ENDIF
+      random = Qrand(1)
+      iRand  = -1
+      sum   = 0d0
+      DO i= 1,nTot
+         iRand  = i
+         sum = sum +Driv( i)**Power
+         IF( random .LT. sum/Total ) GOTO 100
+      ENDDO
+      IF(iRand .EQ. -1) GOTO 990
+ 100  CONTINUE
+      RETURN
+ 990  WRITE(*,*) ' ### STOP in MCellA_RanDiscr, something went wrong !!!!'
+      STOP
+      END
+
+
+      SUBROUTINE MCellA_MakeAlpha(Alpha)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                      //
+*//   Provides random vector Alpha, each component in (0,1) range                        //
+*//                                                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   Alpha(m_KdiMax), y
+      REAL               Qrand( m_KdiMax)        ! from PseuMar
+      INTEGER            i,k
+*     --------------------------------------------------------
+      IF( m_Kdim.LT.0 .OR. m_Kdim.GT.m_KdiMax) THEN
+         WRITE(*,*) 'STOP in MCellA_MakeAlpha: m_Kdim=',m_Kdim
+         STOP
+      ENDIF
+      IF(m_Kdim.LE.0) RETURN
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,m_Kdim)
+      ELSE
+         CALL RanLux(Qrand,m_Kdim)
+      ENDIF
+      DO k =1,m_Kdim
+         Alpha(k)=Qrand(k)
+      ENDDO
+      END
+
+
+
+      SUBROUTINE MCellA_Grow(funW)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Grow new cells by division                                                     //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            i,RC,iCell
+*---------------------------------------------
+* Final division
+      DO i=1,100000
+         IF(  m_OptPeek .EQ. 0 ) THEN
+            CALL MCellA_PeekMax(  iCell)       ! choose cell with maximum driver functional
+         ELSE
+            CALL MCellA_PeekRand1(iCell)       ! randomly choose one cell
+         ENDIF
+         CALL MCellA_Divide( iCell,funW,RC)    ! and divide it into two
+c[[[[
+c         CALL MCellA_BufPrint(    m_Out)
+c]]]]
+         IF(RC.EQ.-1) GOTO 300
+      ENDDO
+ 300  CONTINUE
+      WRITE(16,*) '######################### MCellA_Grow #####################'
+*****[[[[[[ debug
+***** CALL MCellA_BufPrint(    6)
+***** CALL MCellA_BufActPrint( 6)
+*****]]]]]]
+      CALL MCellA_Check(6,0)
+      END                       ! MCellA_Grow
+
+      SUBROUTINE MCellA_PeekMax(iCell)    !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Find active cell containing maximum Driver functional  (foam built-up only)    //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER   iCell
+      INTEGER   i
+      DOUBLE PRECISION  DrivMax, Driv
+*     ---------------------------------------------------
+      iCell = 0
+      DrivMax = -1d150
+      DO i = 1,m_LastCe
+         IF( m_CeStat(i).EQ.1 ) THEN
+            Driv=  ABS(m_CeDriv(i))
+            IF(Driv .GT. DrivMax) THEN
+               DrivMax = Driv
+               iCell = i
+            ENDIF
+         ENDIF
+      ENDDO
+****  WRITE(*,*) '###>>> MCellA_PeekMax: iCell=',iCell
+      IF(iCell.EQ.0) THEN
+         WRITE(*,*) '### STOP in MCellA_PeekMax: not found iCell=', iCell
+         STOP
+      ENDIF
+      END                       ! MCellA_PeekMax
+
+
+      SUBROUTINE MCellA_PeekRand1(iCell)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//       Peek up randomly TREE-WISE the pointer iCell of an active cell             //
+*//                        Using DRIVER functional                                   //
+*// We walk randomly from top of tree downwards until we find active cell m_CeStat=1 //
+*// At each step one of daugters cells is choosen randomly according                 //
+*// to their DRIVER functional estimates.                                            //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell
+      INTEGER            kCell,i,Dau1,Dau2,iDau
+      DOUBLE PRECISION   random,p1,volu1,volu2,volu,TotDri,sum
+      REAL               Qrand(10)        ! from PseuMar
+*     ----------------------------------------------------------------
+      kCell=1
+* All standard cells with 2 daughters
+      DO i=1,10000000
+         IF( m_CeStat( kCell ) .EQ. 1 ) GOTO 300
+         volu1= m_CeDriv( m_CeDau1(kCell) )
+         volu2= m_CeDriv( m_CeDau2(kCell) )
+         p1 = volu1/(volu1+volu2)
+         IF(m_OptRanLux.EQ.-1) THEN
+            CALL PseuMar_MakeVec(Qrand,1)
+         ELSE
+            CALL RanLux(Qrand,1)
+         ENDIF
+         random = Qrand(1)
+         IF( random .LT. p1 ) THEN
+            kCell = m_CeDau1(kCell)
+         ELSE
+            kCell = m_CeDau2(kCell)
+         ENDIF
+      ENDDO
+      GOTO 990
+ 300  CONTINUE
+      iCell=kCell
+      RETURN
+ 990  WRITE(*,*) ' ### STOP in MCellA_PeekRand1, something went wrong !!!!'
+      STOP
+      END                       !!! MCellA_PeekRand1
+
+
+      SUBROUTINE MCellA_Divide(iCell,funW,RC)     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Divide cell iCell into two daughter cells                                      //
+*//   The iCell is retained and taged as inactive, daughter cells are appended       //
+*//   at the end of the buffer.                                                      //
+*//   New vertex is added to list of vertice.                                        //
+*//   List of active cells is updated, iCell remooved, two daughters added           //
+*//   and their properties set with help of MC sampling (MCellA_Explore)             //
+*//   Return Code RC=-1 of buffer limit is reached,  m_LastCe=m_nBuf                 //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell,RC
+      INTEGER            Dau1, Dau2
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            Old1,Old2,j,k,jv,iv,nEdges,NoMC
+c      DOUBLE PRECISION   Xave
+*--------------------------------------------------------------------------------------
+      RC = 0
+      IF( m_LastCe+2 .GT. m_nBuf) GOTO 990 !! abort if no space in buffer
+* reset cell as inactive
+      m_CeStat(iCell) = 0
+      NoMC= m_nSampl
+* --------------------- Stat, Pare, Dau1,Dau2, MCsampl,iCeNew
+      CALL MCellA_DefCell(  1, iCell,  -1,  -1,    NoMC,    Dau1) !
+      CALL MCellA_DefCell(  1, iCell,  -1,  -1,    NoMC,    Dau2) !
+      m_CeDau1(iCell) = Dau1
+      m_CeDau2(iCell) = Dau2
+      CALL MCellA_Explore(Dau1,funW)
+      CALL MCellA_Explore(Dau2,funW)
+* Update list of active cells, only for internal tests
+      CALL MCellA_ActUpda
+      RETURN
+ 990  RC=-1                     !!buffer limit is reached,  m_LastCe=m_nBuf
+      RETURN
+ 980  WRITE(*,*) ' ### STOP in MCellA_Divide: too short list of vertices '
+      STOP
+      END                       ! MCellA_Divide
+
+
+
+      SUBROUTINE MCellA_ActUpda     !# Initialization
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Create list of active cells (pointers)                                         //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER   iCell,Dau1,Dau2
+      INTEGER   i
+*     ---------------------------------------------------
+      m_LastAc=0
+      DO iCell = 1,m_LastCe
+         IF( m_CeStat(iCell).EQ.1 ) THEN
+            m_LastAc=m_LastAc+1
+            IF(m_LastAc .EQ. m_cMax) GOTO 950
+            m_ActC(m_LastAc) = iCell
+         ENDIF
+      ENDDO
+      RETURN
+ 900  WRITE(*,*) '### STOP in MCellA_ActUpda: not found iCell=', iCell
+      STOP
+ 950  WRITE(*,*) '### STOP in MCellA_ActUpda: list of active cells too short' !
+      STOP
+      END                       ! MCellA_ActUpda
+
+
+      SUBROUTINE MCellA_CellGener(iCell)     !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//       Peek up randomly pointer iCell of an active cell according to PRIMARY      //
+*//       Straightforward way, using list of active pointes made by ActUpda          //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell
+      INTEGER            kCell,i,Dau1,Dau2,iDau
+      DOUBLE PRECISION   random,x1,TotPrim
+      INTEGER            klower,kuper,krange,kurrent,DipSwitch
+      REAL               Qrand(10)        ! from PseuMar
+      INTEGER   iCont
+      DATA      iCont/0/
+      iCont = iCont+1
+*     ----------------------------------------------------------------
+      IF(m_OptRanLux.EQ.-1) THEN
+         CALL PseuMar_MakeVec(Qrand,1)
+      ELSE
+         CALL RanLux(Qrand,1)
+      ENDIF
+      random = Qrand(1)
+*     ---------------------------------------------------
+      TotPrim = m_CePrCu(m_LastAc)
+      x1 = TotPrim *random
+      DipSwitch=0               ! =0 is faater
+      IF( DipSwitch.EQ.1) THEN
+*-------- primitive method --------
+         DO kCell = 1,m_LastAc
+            iCell = m_ActC(kCell)
+            IF( m_CePrCu(kCell) .GE. x1 ) GOTO 800
+         ENDDO
+         WRITE(*,*) '### STOP1 in MCellA_CellGener: something wrong' !
+         STOP
+ 800     CONTINUE
+      ELSEIF( DipSwitch.EQ.0) THEN
+*-------- a bit more sophisticated/faster method ------
+         klower   = 0
+         kuper    = m_LastAc
+         DO i=1,m_LastAc
+            krange   = (kuper-klower+1)/2
+            kurrent  = klower +krange
+            IF( x1 .LE. m_CePrCu(kurrent) ) THEN
+               kuper = kurrent
+            ELSE
+               klower = kurrent
+            ENDIF
+            IF(kuper-klower.LE.1) GOTO 850
+         ENDDO
+         WRITE(*,*) ' STOP in MCellA_CellGener'
+         STOP
+ 850     CONTINUE
+         iCell = m_ActC(kuper)
+         kCell = kuper
+      ELSE
+         iCell = m_ActC(1)      ! nonsense for tests
+      ENDIF
+***** IF(iCont.LE.10) WRITE(*,*) 'LastAc,kCell,iCell = ',m_LastAc,kCell,iCell !! debug
+      END                       ! MCellA_CellGener
+
+
+      SUBROUTINE MCellA_MakeEvent(funW)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Generates point/vector Xrand with the weight MCwt                              //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            iCell,i,j,iv
+      DOUBLE PRECISION   Wt,x1,x2,Dx,MCwt
+      DOUBLE PRECISION   Alpha( m_KdiMax) ! Hyper-Cubic subspace
+      DOUBLE PRECISION   Posi(m_KdiMax),Size(m_KdiMax)
+*     -----------------------------------------------------------------
+*     choose randomly one cell
+      CALL MCellA_CellGener( iCell)
+*     generate randomly/uniformly vector Vrand inside this simplex
+      CALL MCellA_MakeAlpha( Alpha)
+      CALL MCellA_GetHcube(iCell,Posi,Size)
+      DO j=1,m_Kdim
+         m_MCvector(j) = Posi(j) +Alpha(j)*Size(j) ! hypcubic subspace
+      ENDDO
+      Dx =1d0
+      DO j=1,m_Kdim
+         Dx=Dx*Size(j)
+      ENDDO
+* weight average normalised to PRIMARY integral over the cell
+      MCwt =funW(m_MCvector)*Dx/m_CePrim(iCell) ! PRIMARY controls normalization
+      m_nCalls =  m_nCalls+1
+      m_MCwt   =  MCwt
+* accumulation of statistics for the main MC weight
+      m_SumWt  =  m_SumWt  +MCwt         ! sum of Wt
+      m_SumWt2 =  m_SumWt2 +MCWt*MCwt    ! sum of Wt**2
+      m_NevGen =  m_NevGen +1d0          ! sum of 1d0
+      m_WtMax  =  MAX(m_WtMax,MCwt)      ! maximum wt
+      m_WtMin  =  MIN(m_WtMin,MCwt)      ! minimum wt
+      END                       ! MCellA_MakeEvent
+
+      SUBROUTINE MCellA_GetMCvector(MCvector)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION  MCvector(*)
+      INTEGER           k
+*-----------------------
+      DO k=1,m_Dimen
+         MCvector(k)    = m_MCvector(k)
+      ENDDO
+      END
+
+      SUBROUTINE MCellA_GetMCwt(MCwt)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION  MCwt
+*-----------------------
+      MCwt    = m_MCwt
+      END
+
+      SUBROUTINE MCellA_MCgenerate(funW,MCvector,MCwt)    !# Generation
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Obsolete                                                                       //
+*//   Generates point/vector MCvector with the weight MCwt                           //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION   MCvector(*),MCwt
+      DOUBLE PRECISION   funW
+      EXTERNAL           funW
+      INTEGER            j
+*     ---------------------------------------------------------------
+      CALL MCellA_MakeEvent(funW)
+      MCwt = m_MCwt
+      DO j=1,m_Dimen
+         MCvector(j) =m_MCvector(j)
+      ENDDO
+      END                       !!MCellA_MCgenerate
+
+
+      SUBROUTINE MCellA_Finalize(MCresult,MCerror)    !# Finalization
+*//////////////////////////////////////////////////////////////////////////////
+*//                                                                          //
+*//   After MC run is completed it calculates integral and its error         //
+*//   Also prints some information/statistics on the MC run                  //
+*//   Remember that PRIMARY controls normalization of the integration        //
+*//////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+*
+      DOUBLE PRECISION     MCresult,MCerror,MCerelat
+      DOUBLE PRECISION     Vtot,Verr,VerRela,TotPrim
+      INTEGER              kCell,iCell
+*-----------------------------------------------------------------------------
+      MCresult =0d0
+      MCerelat =1d0
+      TotPrim = 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         TotPrim = TotPrim +m_CePrim( iCell )
+      ENDDO
+      IF(m_NevGen .GT. 0) THEN
+         MCresult = TotPrim *m_SumWt/m_NevGen
+         IF(m_SumWt.NE.0d0)  MCerelat  = m_SumWt2/m_SumWt**2 -1d0/m_NevGen !
+         IF(MCerelat.GT.0d0) MCerelat =  SQRT( ABS(MCerelat) ) !
+         IF(MCerelat.LT.0d0) MCerelat = -SQRT( ABS(MCerelat) ) !
+      ENDIF
+      MCerror = MCresult*MCerelat
+      Vtot=m_CeIntg(1)
+* some test printouts
+      IF(m_Chat.GT.0) THEN
+      WRITE(m_Out,'(3a)') '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||' !
+      WRITE(m_Out,'(3a)') '||||||||||||||||||||||||||||||', ' MCellA_Finalize ', !
+     $                    '||||||||||||||||||||||||||||||'
+      WRITE(m_Out,'(a,2g18.9,f11.7)')               'MCresult, MCerror, Errela= ',MCresult,MCerror,MCerelat !
+      WRITE(m_Out,'(a,2f11.5)')                     'Minimum maximum weight   = ',m_WtMin,m_WtMax !
+      IF(m_NevGen .GT. 0) WRITE(m_Out,'(a,2f11.5)') 'Average wt SumWt/NevGen  = ',m_SumWt/m_NevGen !
+      WRITE(m_Out,'(a,i15)')                        'Total of function calls  = ',m_nCalls !
+      WRITE(m_Out,'(a,2i15)')                       'Number of cells          = ',m_LastCe !
+      WRITE(m_Out,'(a,f12.1,2g18.9)')               'NevGen,SumWt,m_SumWt2    = ',m_NevGen,m_SumWt,m_SumWt2 !
+      WRITE(m_Out,'(a,2g18.9)')                     'Integ.Est. from Explorat.= ',Vtot !
+      WRITE(m_Out,'(3a)') '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||' !
+      ENDIF
+      END       ! MCellA_Finalize
+
+
+
+      SUBROUTINE MCellA_GetTotPrim(TotPrim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//   Total integral from cell statistics, including initialization + MC generation  //
+*//   It can be invoked just after initialization or after MC generation             //
+*//   Note that this estimate is distorted slightly if vertices are included in      //
+*//   the exploration of the cells.                                                  //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      INCLUDE 'MCellA.h'
+      DOUBLE PRECISION  TotPrim,Sum
+      INTEGER   kCell,  iCell      
+      Sum = 0d0
+      DO kCell = 1,m_LastAc
+         iCell  = m_ActC(kCell)
+         Sum = Sum +m_CePrim( iCell )
+      ENDDO
+      TotPrim=Sum
+      END
+
+
+      SUBROUTINE MCellA_SetKdim(Kdim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      Kdim
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_Kdim = Kdim
+      m_Dimen=m_Kdim
+      END                       !!! MCellA_SetKdim
+
+      SUBROUTINE MCellA_GetKdim(Kdim)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      Kdim
+*     -------------------------------------------------
+      Kdim = m_Kdim
+      END                       !!! MCellA_SetKdim
+
+      SUBROUTINE MCellA_SetnBuf(nBuf)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      nBuf
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_nBuf = nBuf
+      END                       !!! MCellA_SetnBuf
+
+      SUBROUTINE MCellA_SetnBin(nBin)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      nBin
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_nBin = nBin
+      END                       !!! MCellA_SetnBin
+
+      SUBROUTINE MCellA_SetOut(Out)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      Out
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_Out = Out
+      END                       !!! MCellA_SetOut
+
+      SUBROUTINE MCellA_SetChat(Chat)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      Chat
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_Chat = Chat
+      END                       !!! MCellA_SetChat
+
+      SUBROUTINE MCellA_SetnSampl(nSampl)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      nSampl
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_nSampl = nSampl
+      END                       !!! MCellA_SetnSampl
+
+      SUBROUTINE MCellA_SetOptDrive(OptDrive)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      OptDrive
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_OptDrive = OptDrive
+      END                       !!! MCellA_SetOptDrive
+
+      SUBROUTINE MCellA_SetEvPerBin(EvPerBin)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      EvPerBin
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_EvPerBin = EvPerBin
+      END                       !!! MCellA_SetEvPerBin
+
+
+      SUBROUTINE MCellA_SetOptPeek(OptPeek)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      OptPeek
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_OptPeek = OptPeek
+      END                       !!! MCellA_SetOptPeek
+
+      SUBROUTINE MCellA_SetOptEdge(OptEdge)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      OptEdge
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_OptEdge = OptEdge
+      END                       !!! MCellA_SetOptEdge
+
+      SUBROUTINE MCellA_SetOptRanIni(OptRanIni)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      OptRanIni
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_OptRanIni = OptRanIni
+      END                       !!! MCellA_SetOptRanIni
+
+      SUBROUTINE MCellA_SetOptRanLux(OptRanLux)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      OptRanLux
+*     -------------------------------------------------
+      CALL MCellA_PreInitialize
+      m_OptRanLux = OptRanLux
+      END                       !!! MCellA_SetOptRanLux
+
+      SUBROUTINE MCellA_GetnCalls(nCalls)     !# Getters and Setters
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER      nCalls
+*     -------------------------------------------------
+      nCalls = m_nCalls
+      END                       !!! MCellA_SetnCalls
+
+      SUBROUTINE MCellA_Check(mout,level)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//  Checks all pointers, It is is a usefull autodiagnostic.                         //
+*//                                                                                  //
+*//  level=0, no printout, failures causes STOP                                      //
+*//  level=1, printout, failures lead to WARNINGS only                               //
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER       mout,level
+      INTEGER       nFailures, iCell, Dau1,Dau2, Pare, iVe,n !
+      INTEGER       NoEmpty, iError
+*     ---------------------------------------------------------
+      nFailures=0
+      iError   =0
+      IF(level.EQ.1) WRITE(mout,*)
+     $'//////////////////////////////////////// MCellA_Checks /////////////////////////////////////////////' !
+      DO iCell = 1,m_LastCe
+         Dau1 = m_CeDau1(iCell)
+         Dau2 = m_CeDau2(iCell)
+         Pare = m_CePare(iCell)
+* checking on parents
+         IF(iCell.GT.1) THEN
+            IF(Pare.GT.m_LastCe) THEN
+               iError   =1
+               nFailures = nFailures+1
+               IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' Parent out of range = ',Pare !
+            ENDIF
+         ENDIF
+         IF(iCell.GT.1) THEN
+            IF(  (Pare.NE.1) .AND. (m_CeDau1(Pare).NE.iCell) .AND. (m_CeDau2(Pare).NE.iCell)  ) THEN !
+               iError   =2
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' Parent not pointing to this daughter Pare= ',Pare !
+            ENDIF
+         ENDIF
+* checking on daughters
+         IF( Dau1 .GT. m_LastCe ) THEN
+            iError   =3
+            nFailures = nFailures+1
+            IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' First  Daugter out of range Dau1= ',Dau1 !
+         ENDIF
+         IF( Dau2 .GT.m_LastCe ) THEN
+            iError   =4
+            nFailures = nFailures+1
+            IF(level.EQ.1) WRITE(mout,*) '##### iCell= ',iCell,' Second Daugter out of range Dau2= ',Dau2 !
+         ENDIF
+         IF( Dau1.GE.1 .AND. Dau1.LE. m_LastCe) THEN
+            IF( m_CePare(Dau1).NE.iCell ) THEN
+               iError   =5
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' First  Daugter not pointing to parent Dau1= ',Dau1 !
+            ENDIF
+         ENDIF
+         IF( Dau2.GE.1 .AND. Dau2.LE. m_LastCe) THEN
+            IF( m_CePare(Dau2).NE.iCell ) THEN
+               iError   =6
+               nFailures = nFailures+1
+               IF(level.EQ.1) 
+     $              WRITE(mout,*) '##### iCell= ',iCell,' Second Daugter not pointing to parent Dau2= ',Dau2 !
+            ENDIF
+         ENDIF 
+      ENDDO
+* Check for empty cells
+      NoEmpty = 0d0
+      DO iCell = 1,m_LastCe
+         IF( m_CeStat(iCell).EQ.1 ) THEN
+            IF( m_CeDriv(iCell) .EQ. 0d0) NoEmpty = NoEmpty +1
+         ENDIF
+      ENDDO
+      IF( NoEmpty.GT.0) THEN
+         WRITE(mout,*) '++++++++++ MCellA_Check: !!! WARNING!!!! Empty Cells found NoEmpty= ',NoEmpty !
+         WRITE(   *,*) '++++++++++ MCellA_Check: !!! WARNING!!!! Empty Cells found NoEmpty= ',NoEmpty !
+      ENDIF
+* summary
+      IF(level.EQ.1) WRITE(mout,*) '++++++++++ MCellA_Check has found total ', nFailures, ' failures ' !
+      IF(level.EQ.1) WRITE(mout,*)
+     $'///////////////////////////////////////////////////////////////////////////////////////////////////' !
+      IF(level.EQ.0 .AND. nFailures.GT.0 ) THEN
+         WRITE(mout,*) '++++++++++ STOP in MCellA_Check, found total ', nFailures, ' failures ' !
+         WRITE(mout,*) '++++++++++ iErro= ',iError
+         STOP
+      ENDIF
+      END                       ! MCellA_Check
+
+
+
+      SUBROUTINE MCellA_BufPrint(mout)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   all cells                                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell,mout,active,j
+      DOUBLE PRECISION   Posi(m_KdiMax),Size(m_KdiMax)
+*     ----------------------------------------------------------------
+      active  =0
+      WRITE(mout,'(3a)') '==============================================', ' ALL-CELLS ',
+     $                   '=============================================='
+      WRITE(mout,'(3a)') ' iCell  Stat  Pare  Dau1  Dau2  Best      Xave      Drive   Ver1  Ver2  ...'
+      DO iCell = 1, m_LastCe
+         WRITE(mout,'(5i6,f11.5,20i6)')
+     $        iCell, m_CeStat(iCell),  m_CePare(iCell), m_CeDau1(iCell), m_CeDau2(iCell), !
+     $        m_CeDriv(iCell)                           ! Drive 
+         IF(m_Kdim .GT. 0 ) THEN
+            CALL MCellA_GetHcube(iCell,Posi,Size)
+            WRITE(mout,'(a,50g12.6)')
+     $           '      HypCubs Posit&Size: ',
+     $           (Posi(j), j=1,m_Kdim), ! position
+     $           (Size(j), j=1,m_Kdim)  ! size
+         ENDIF
+         IF(m_CeStat(iCell).EQ.1) active  = active +1
+      ENDDO
+      WRITE(mout,*) ' All cells: ',m_LastCe, ' Active: ', active
+      END                       !! MCellA_BufPrint
+
+
+
+      SUBROUTINE MCellA_BufActPrint(mout)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Active cells only                                                              //
+*//   Side=1 indicates that this cell is "side leaf" sticking out of main branch     //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell,mout,active,Side,Pare,j
+      DOUBLE PRECISION   VolRat,DriRat,VoluSum,DrivSum,RatMax,RatMin,Fact !
+      DOUBLE PRECISION   Posi(m_KdiMax),Size(m_KdiMax)
+*     ----------------------------------------------------------------
+      WRITE(mout,'(3a)') '==================================================', ' ACTIVE CELLS ',
+     $                   '=================================================='
+      VoluSum =0d0
+      DrivSum =0d0
+      RatMin  =  1d60
+      RatMax  = -1d60
+      active  =0
+      WRITE(mout,'(2a)') ' iCell Stat Pare Dau1 Dau2 Side',
+     $                   '     <w>    Sig/<w>      Drive    VolTrue  ' !
+      DO iCell = 1, m_LastCe
+         IF(m_CeStat(iCell).EQ.1) THEN
+            side=0
+            Pare = m_CePare(iCell)
+            IF(Pare.GT.0) THEN
+               IF( m_CeStat(m_CeDau1(Pare))*m_CeStat(m_CeDau2(Pare)) .EQ. 0  ) Side=1 !
+            ENDIF
+            VolRat = m_CeIntg(iCell)* m_LastAc/m_CeDriv(1)
+            DriRat = m_CeDriv(iCell)* m_LastAc/m_CeDriv(1)
+            RatMin = Min(RatMin,VolRat)
+            RatMax = Max(RatMax,VolRat)
+            WRITE(mout,'(6i5, 3f11.5 ,10i5)') 
+     $           iCell, m_CeStat(iCell),  m_CePare(iCell),  m_CeDau1(iCell),m_CeDau2(iCell),  side, !
+     $           m_CeIntg(iCell) /(m_CeDriv(iCell)+1d-100), ! average weight
+     $           DriRat,                 ! Drive/DriTot*Ncell
+     $           VolRat                  ! TrueVolu/VolTot*Ncell
+            IF(m_Kdim .GT. 0 ) THEN
+               CALL MCellA_GetHcube(iCell,Posi,Size)
+               WRITE(mout,'(a,50g12.6)')
+     $              '      HypCubs Posit&Size: ',
+     $              (Posi(j), j=1,m_Kdim), ! position
+     $              (Size(j), j=1,m_Kdim)  ! size
+            ENDIF
+            VoluSum = VoluSum +m_CeIntg(iCell)
+            DrivSum = DrivSum +m_CeDriv(iCell)
+            active  = active +1
+         ENDIF
+      ENDDO
+      WRITE(mout,'(a,i6,a,2i6)') 'All cells: ',m_LastCe, '      Active: ', active, m_LastAc !
+      WRITE(mout,'(a,2f12.5)')   'Minimum and Maximum Volume/Tot*nCell= ', RatMin,RatMax !
+      WRITE(mout,'(a,2g20.13)')  'Total True Integral in active cells = ', VoluSum, m_CeIntg(1) !
+      WRITE(mout,'(a,2g20.13)')  'Total Driver Integ in active cells  = ', DrivSum, m_CeDriv(1) !
+      WRITE(mout,'(a,f12.5)')    'True/Drive = ', VoluSum/DrivSum
+      END                       !! MCellA_BufActPrint
+
+
+
+      SUBROUTINE MCellA_PltBegin(ltx)     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Initialization, write header of TeX file                                       //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER   ltx
+*---------------------------------------------------
+      m_ltx  = ABS(ltx)
+      IF(ltx .GT. 0 ) THEN
+         WRITE(m_ltx,'(2A)') '\\newpage'
+      ELSE
+*------------------------------!
+*           Header
+*------------------------------!
+         WRITE(m_ltx,'(A)') '\\documentclass[12pt]{article}'
+         WRITE(m_ltx,'(A)') '\\usepackage{color}' !<-for colors!!!
+         WRITE(m_ltx,'(A)') '\\usepackage{epic}' !<-for extended ploting
+         WRITE(m_ltx,'(A)') '\\textwidth  = 16cm'
+         WRITE(m_ltx,'(A)') '\\textheight = 18cm'
+         WRITE(m_ltx,'(A)') '\\pagestyle{empty}'
+         WRITE(m_ltx,'(A)') '\\begin{document}'
+         WRITE(m_ltx,'(A)') '  '
+         WRITE(m_ltx,'(A)') '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' !
+         WRITE(m_ltx,'(A)') '\\begin{figure}[!ht]'
+         WRITE(m_ltx,'(A)') '\\centering'
+*------------------------------!
+* Frames and labels
+*------------------------------!
+         WRITE(m_ltx,'(A)') '% =========== big frame, title etc. ======='
+         WRITE(m_ltx,'(A)') '\\setlength{\\unitlength}{0.1mm}'
+         WRITE(m_ltx,'(A)') '\\begin{picture}(1600,1600)'
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\framebox(1600,1600){ }}'
+      ENDIF
+      END
+
+      SUBROUTINE MCellA_PltCell     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Plot all simplectic cells                                                      //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+      INTEGER            iCell,active,j
+      INTEGER            iV1,iV2,iV3
+      INTEGER            kx1,ky1,kx2,ky2,kx3,ky3,kx,ky,lx,ly
+      DOUBLE PRECISION   Posi(m_KdiMax),Size(m_KdiMax)
+*---------------------------------------------------------------------------------------------
+*                        Rectangular 2-dim FOAM
+*---------------------------------------------------------------------------------------------
+      IF(m_kDim.EQ.2) THEN
+         WRITE(m_ltx,'(A)') '% =========== Vertices Vertices ==========='
+         WRITE(m_ltx,'(A)') '\\put(0,0){\\begin{picture}( 1600,1600)' !
+         DO iCell = 2, m_LastCe
+            IF(m_CeStat(iCell).EQ.1) THEN ! Only active cells
+               CALL MCellA_GetHcube(iCell,Posi,Size)
+               kx = Posi(1)*1600
+               ky = Posi(2)*1600
+               lx = Size(1)*1600
+               ly = Size(2)*1600
+               kx1 = kx+lx/2
+               ky1 = ky+ly/2
+*     cell rectangle
+               WRITE(m_ltx,'(A,I5,A,I5,A,I5,A,I5,A)') 
+     $              '\\put(',kx,',',ky,'){\\color{black}\\framebox(',lx,',',ly,'){ }}' !
+***               WRITE(m_ltx,'(A,I5,A,I5,A,I5,A,I5,A)') 
+***     $              '\\put(',kx,',',ky,'){\\color{black}\\dashbox{7}(',lx,',',ly,'){ }}' !
+*     cell number
+               IF(m_LastCe.LE.250) WRITE(m_ltx,'(A,I4,A,I4,A,I4,A)') 
+     $            '\\put(',kx1,',',ky1,'){\\makebox(0,0)[b]{\\hbox{\\small\\color{magenta}\\scriptsize ',iCell,' }}}' !
+            ENDIF
+         ENDDO
+* Close frame
+         WRITE(m_ltx,'(A)') '\\end{picture}}'
+         WRITE(m_ltx,'(A)') '% ============== End Vertices ==========='
+      ENDIF
+      END                       !! MCellA_BufPrint
+
+      SUBROUTINE MCellA_PltMisc     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   Miscelaneous                                                                   //
+*//   Plot of frame for 2-dim void testing function                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+*
+      WRITE(m_ltx,'(A)') '\\put(80,80){\\color{blue}\\dashbox{7}( 1440,1440){ }}' ! 5% edge band
+      END                       !! MCellA_PltMisc
+
+      SUBROUTINE MCellA_PltEnd     !# Miscelaneous and debug
+*//////////////////////////////////////////////////////////////////////////////////////
+*//   DEBUG                                                                          //
+*//   Close Tex file with plot                                                       //
+*//////////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'MCellA.h'
+*
+      WRITE(m_ltx,'(A)') '\\end{picture}'
+      WRITE(m_ltx,'(A)') '\\end{figure}'
+      WRITE(m_ltx,'(A)') '\\end{document}'
+      CLOSE(m_ltx)
+      END
+
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/MCellA.h b/Foam/MCellA.h
new file mode 100644
index 0000000000000000000000000000000000000000..3df3449e757a35db54e405166cf720e4cf06968e
--- /dev/null
+++ b/Foam/MCellA.h
@@ -0,0 +1,80 @@
+*///////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                   //
+*//          Pseudoclass MCellA                                                       //
+*//          MCell  Mega Cell MC saampler                                             //
+*//                                                                                   //
+*//   To get Mega cells (re)define  m_nBufMax  below                                  //
+*//                                                                                   //
+*///////////////////////////////////////////////////////////////////////////////////////
+*
+      INTEGER            m_nBinMax
+      PARAMETER          (m_nBinMax=256)
+*
+      INTEGER        m_nBufMax
+      PARAMETER  (   m_nBufMax = 100000 )         ! maximum buffer length for all cells (100k=8MB)
+      INTEGER        m_KdiMax
+      PARAMETER  (   m_KdiMax  = 20 )             ! maximum dimension for hypercubics
+      INTEGER        m_DimMax
+      PARAMETER  (   m_DimMax  = m_KdiMax )       !  maximum total dimension
+      INTEGER        m_cMax
+      PARAMETER  (   m_cMax    = m_nBufMax/2+1 )  ! maximum number of (active) Cells
+*
+      INTEGER            m_CeStat,   m_CePare,   m_CeDau1,  m_CeDau2,  m_CeSamp, m_CeVert !
+      DOUBLE PRECISION   m_CeIntg,   m_CeDriv,  m_CePrim,   m_CePrCu !
+      INTEGER            m_CeDivi
+      INTEGER            m_LastCe,   m_LastAc,   m_nBuf,    m_nBin,    m_ActC !
+      INTEGER            m_Kdim,     m_Dimen
+      INTEGER            m_Chat,     m_Out,      m_nSampl,  m_Ncalls !
+      INTEGER            m_OptPeek,  m_OptDrive, m_OptEdge, m_EvPerBin, m_OptRanIni, m_OptRanLux!
+      DOUBLE PRECISION   m_VolTot   !
+      DOUBLE PRECISION   m_Drive,    m_SumWt,    m_SumWt2,  m_NevGen,    m_WtMax,   m_WtMin !
+      DOUBLE PRECISION   m_MCresult, m_MCerror,  m_MCwt,    m_MCvector !
+      INTEGER            m_Ltx,      m_MagicInit
+*
+      COMMON /c_MCellA/   
+     $ m_CeStat(m_nBufMax),           ! Cell member: (4B) status=0 inactive, =1 active
+     $ m_CePare(m_nBufMax),           ! Cell member: (4B) parent cell pointer
+     $ m_CeDau1(m_nBufMax),           ! Cell member: (4B) daughter1 cell pointer
+     $ m_CeDau2(m_nBufMax),           ! Cell member: (4B) daughter2 cell pointer
+     $ m_CeSamp(m_nBufMax),           ! Cell member: (4B) No of MC events in exploration
+     $ m_CeDivi(m_nBufMax),           ! Cell member: (4B) Division ratio and edge
+     $ m_CeIntg(m_nBufMax),           ! Cell member: (8B) integral estimator
+     $ m_CeDriv(m_nBufMax),           ! Cell member: (8B) Drive integral estimate, for build-up
+     $ m_CePrim(m_nBufMax),           ! Cell member: (8B) Primary integral estimate, MC generation
+     $ m_CePrCu(0:m_cMax),            ! Active Cell member: (8B) Cumulative Primary 
+     $ m_ActC(    m_cMax),            ! Active Cell member: (8B) List of all pointers to ACTIVE cells
+* Actually 56B/Cell, 100k Cells = 5.6MB, factor 2 compression still possible.
+     $ m_VolTot,            ! Estimate of Volume total, without error
+     $ m_Drive,             ! M.C. generation Drive value of integral
+     $ m_SumWt,             ! M.C. generation sum of Wt
+     $ m_SumWt2,            ! M.C. generation sum of Wt**2
+     $ m_NevGen,            ! M.C. generation sum of 1d0
+     $ m_WtMax,             ! M.C. generation maximum wt
+     $ m_WtMin,             ! M.C. generation minimum wt
+     $ m_MCresult,          ! M.C. generation Final value of INTEGRAL
+     $ m_MCerror,           ! M.C. generation Final walue of ERROR
+     $ m_MCwt,              ! M.C. generation current event weight
+     $ m_MCvector(m_DimMax),! M.C. generated vector,
+     $ m_Kdim,              ! dimension of the hypercubics
+     $ m_Dimen,             ! total dimension of the problem =m_Kdim
+     $ m_nBuf,              ! Actual dynamic lenth of the buffer m_nBuf<m_nBufMax
+     $ m_nBin,              ! Actual dynamic lenth of the buffer m_nBuf<m_nBufMax
+     $ m_LastAc,            ! Last active cell
+     $ m_LastCe,            ! Last cell in buffer 
+     $ m_nSampl,            ! No. of sampling when dividing cell
+     $ m_Ncalls,            ! No. of function calls, total
+     $ m_OptPeek,           ! Flag for  random ceel choice: Peek =0,1 for maximum,
+     $ m_OptDrive,          ! Flag for type of Drive =0,1,2 for TrueVol,Sigma,WtMax
+     $ m_OptEdge,           ! Flag which decides whether vertices are included in the sampling
+     $ m_EvPerBin,          ! Max eff. MC events/bin, (saving CPU) inactive if =0
+     $ m_OptRanIni,         ! Flag default, =1 r.n. generator not initialized in MCellA
+     $ m_OptRanLux,         ! Flag =-1,0,1,2,3,4 r.n. generator level
+     $ m_Chat,              ! Flag for chat level in output, Chat=1 normal level
+     $ m_Ltx,               ! Latex Output unit, for debug
+     $ m_Out,               ! Output unit
+     $ m_MagicInit          ! Magic cookie of initialization (global variable)
+*
+      SAVE /c_MCellA/
+*//////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                  //
+*//////////////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/Makefile b/Foam/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..9e06fa5f67cf6a114f85b984fcf8e4e68208ffb4
--- /dev/null
+++ b/Foam/Makefile
@@ -0,0 +1,76 @@
+##############################################################################
+# 	make DemoFoam
+# 	make DemoMCell
+#	make -f Makefile DemoFoam
+#	make -f Makefile DemoMCell
+#	make -f Makefile map-eps
+##############################################################################
+all:	DemoFoam
+##############################################################################
+.SUFFIXES:  .eps .dvi .tex .txi .html .bib .blg .bbl .aux .txp
+#---------------------------------------------------------------------------
+XPS    = gv -geometry +0+10 -bg white -fg black  -magstep 0 
+XPS4   = gv -bg white -fg black  -magstep -4 
+#---------------------------------------------------------------------------
+########### Linux flags:
+FFLAGS  =  -fno-automatic -ffixed-line-length-132 -fbackslash -C
+########### HP  flags:
+### +es for 100 or more columns, +B for backslash in strings, +K  for global SAVE
+#FFLAGS  =  -K +es +B -O
+########### IBM/AIX  flags:
+# fixed=132 for 132 columns,
+# qextname for C-style external names with underscore at the end of external name
+#FFLAGS  =  -qfixed=132 -qextname -O -C -qextchk
+#FFLAGS  =  -qfixed=132 -qextname -g -C -qextchk -qinitauto=FF -qflttrap=overflow:underflow:zerodivide:invalid:enable
+########### DEC/ALPHA  flags:
+#FFLAGS  =  -extend_source -qfixed=120 -qextname -O  -C -qextchk  
+#---------------------------------------------------------------------------
+#FFLAGS  =  -qfixed=132 -qextname -g  -C -qextchk -qflttrap=overflow:zerodivide:invalid:enable  -qsigtrap
+#LDFLAGS =  -bloadmap:LinkMap
+F77 = gfortran
+LD = $(F77)
+LDFLAGS  =
+##############################################################################
+.f.o:
+	$(F77) $(FFLAGS) -c $<
+############# postscript translation (one page)
+.txp.dvi:
+	(latex $< )
+############# option E is for tight bounding on one
+.dvi.eps:
+	(dvips -E $< -o $@;	$(XPS4) $@ )
+###	(dvips -E $< -o )
+##############################################################################
+SRCLIST= " "
+##############################################################################
+FoamA.o:	FoamA.h
+MCellA.o:	MCellA.h
+PseuMar.o:	PseuMar.h
+GLK.o:		GLK.h
+##############################################################################
+COMMAND3 = DemoFoam.exe
+OBJECTS3 = DemoFoam.o FoamA.o PseuMar.o GLK.o ranlux.o WtLimit.o
+$(COMMAND3): $(OBJECTS3)
+	$(LD) -o $@ $(LDFLAGS) $(OBJECTS3)
+#########
+DemoFoam:	$(COMMAND3)
+	(time ./$(COMMAND3); diff output-DemoFoam-linux output-DemoFoam | more )
+#############################
+DemoFoamMap:	DemoFoam
+	(latex demo-cell-map.txp; dvips  -E demo-cell-map.dvi -o demo-cell-map.eps;  $(XPS) demo-cell-map.eps&)
+##############################################################################
+##############################################################################
+COMMAND5 = DemoMCell.exe
+OBJECTS5 = DemoMCell.o MCellA.o PseuMar.o GLK.o ranlux.o WtLimit.o
+$(COMMAND5): $(OBJECTS5)
+	$(LD) -o $@ $(LDFLAGS) $(OBJECTS5)
+#########
+DemoMCell:	$(COMMAND5)
+	(time ./$(COMMAND5); diff output-DemoMCell-linux output-DemoMCell | more )
+#############################
+DemoMCellMap:	DemoMCell
+	(latex demo-cell-map.txp; dvips  -E demo-cell-map.dvi -o demo-cell-map.eps;  $(XPS) demo-cell-map.eps&)
+##############################################################################
+line_count:
+	(cat *.f *.h | wc -l )
+##############################################################################
diff --git a/Foam/PseuMar.f b/Foam/PseuMar.f
new file mode 100644
index 0000000000000000000000000000000000000000..d2b96c14b93ef76751729ab31fe9b1417ac623ac
--- /dev/null
+++ b/Foam/PseuMar.f
@@ -0,0 +1,173 @@
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*// Actual version rewritten by S. Jadach, Nov 1997.                        //
+*//                                                                         //
+*// Universal random number generator proposed by MARSAGLIA and ZAMAN       //
+*// in report FSU-SCRI-87-50                                                //
+*//        modified by F. James, 1988 and 1989, to generate a vector        //
+*//        of pseudorandom numbers rvec of length lenv, and to put in       //
+*//        the COMMON block everything needed to specify currrent state,    //
+*//        and to add input and output entry points rmarin, rmarut.         //
+*// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   //
+*// ++  CALLing sequences for ranmar:                                  ++   //
+*// ++      CALL ranmar (rvec, len)   returns a vector rvec of len     ++   //
+*// ++                   32-bit random floating point numbers between  ++   //
+*// ++                   zero and one.                                 ++   //
+*// ++      CALL rmarin(i1,n1,n2)   initializes the generator from one ++   //
+*// ++                  32-bit integer i1, and number counts n1,n2     ++   //
+*// ++                  (for initializing, set n1=n2=0, but to restart ++   //
+*// ++                    a previously generated sequence, use values  ++   //
+*// ++                    output by rmarut)                            ++   //
+*// ++      CALL rmarut(i1,n1,n2)   outputs the value of the original  ++   //
+*// ++                  seed and the two number counts, to be used     ++   //
+*// ++                  for restarting by initializing to i1 and       ++   //
+*// ++                  skipping n2*100000000+n1 numbers.              ++   //
+*// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   //
+*//                                                                         //
+*//         Initializing routine for ranmar, may be called before           //
+*//         generating pseudorandom numbers with ranmar. the input          //
+*//         values should be in the ranges:  0<=ijklin<=900 000 000         //
+*//                                          0<=ntotin<=999 999 999         //
+*//                                          0<=ntot2n<<999 999 999!        //
+*// to get the standard values in MARSAGLIA's paper, ijklin=54217137        //
+*//                                            ntotin,ntot2n=0              //
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
+
+
+      SUBROUTINE PseuMar_Initialize(ijkl_new, ntot_new,ntot2_new)
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'PseuMar.h'
+      INTEGER ijkl_new, ntot_new, ntot2_new
+*
+      REAL    t,uni,s
+      INTEGER m,i24,jj,idum,loop2,now
+      INTEGER i,j,ij,k,l,ii,kl
+
+      m_iwarm = 9000009   ! special mark on initialization
+
+      m_ijkl = ijkl_new
+      m_ntot = max(ntot_new,0)
+      m_ntot2= max(ntot2_new,0)
+      
+      ij = m_ijkl/30082
+      kl = m_ijkl - 30082*ij
+      i = MOD(ij/177, 177) + 2
+      j = MOD(ij, 177)     + 2
+      k = MOD(kl/169, 178) + 1
+      l = MOD(kl, 169)
+      WRITE(6,'(a,5i10)')
+     $     'ranmar initialized: ij,kl,ijkl,ntot,ntot2=',
+     $     ij,kl,m_ijkl,m_ntot,m_ntot2
+      DO ii= 1, 97
+         s = 0.
+         t = .5
+         DO jj= 1, 24
+            m = MOD(MOD(i*j,179)*k, 179)
+            i = j
+            j = k
+            k = m
+            l = MOD(53*l+1, 169)
+            IF (MOD(l*m,64)  .GE.  32)  s = s+t
+            t = 0.5*t
+         ENDDO
+         m_U(ii) = s
+      ENDDO
+      m_twom24 = 1.0
+      DO i24= 1, 24
+         m_twom24 = 0.5*m_twom24
+      ENDDO
+      m_C  =   362436.*m_twom24
+      m_CD =  7654321.*m_twom24
+      m_CM = 16777213.*m_twom24
+      m_i97 = 97
+      m_j97 = 33
+*       complete initialization by skipping
+*            (ntot2*modcns + ntot) random numbers
+      DO loop2= 1, m_ntot2+1
+         now = modcns
+         IF (loop2  .EQ.  m_ntot2+1)  now=m_ntot
+         IF (now  .GT.  0)  THEN
+            WRITE(6,'(a,i15)') ' rmarin skipping over ',now
+            DO idum = 1, m_ntot
+               uni = m_U(m_i97)-m_U(m_j97)
+               IF (uni  .LT.  0.)  uni=uni+1.
+               m_U(m_i97) = uni
+               m_i97 = m_i97-1
+               IF (m_i97  .EQ.  0)  m_i97=97
+               m_j97 = m_j97-1
+               IF (m_j97  .EQ.  0)  m_j97=97
+               m_C = m_C - m_CD
+               IF (m_C  .LT.  0.)   m_C=m_C+m_CM
+            ENDDO
+         ENDIF
+      ENDDO
+      END
+
+
+      SUBROUTINE PseuMar_MakeVec(rvec,lenv)
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'PseuMar.h'
+*
+      REAL              rvec(*)
+      INTEGER lenv
+      INTEGER ijkl_new, ntot_new,ntot2_new
+      REAL              zuni,uni
+      INTEGER ivec
+*-------------------------------------------------------------------------
+      IF (m_iwarm  .NE.  9000009)  THEN
+* Default initialization. User has called ranmar without rmarin.
+         ijkl_new  = 54217137
+         ntot_new  = 0
+         ntot2_new = 0
+         CALL PseuMar_Initialize(ijkl_new, ntot_new,ntot2_new)
+      ENDIF
+
+* Normal entry to generate lenv random numbers
+      DO ivec= 1, lenv
+         uni = m_U(m_i97)-m_U(m_j97)
+         IF (uni  .LT.  0.)  uni=uni+1.
+         m_U(m_i97) = uni
+         m_i97 = m_i97-1
+         IF (m_i97  .EQ.  0)  m_i97=97
+         m_j97 = m_j97-1
+         IF (m_j97  .EQ.  0)  m_j97=97
+         m_C = m_C - m_CD
+         IF (m_C  .LT.  0.)   m_C=m_C+m_CM
+         uni = uni-m_C
+         IF (uni  .LT.  0.) uni=uni+1.
+         rvec(ivec) = uni
+* Replace exact zeros by uniform distr. *2**-24
+         IF (uni  .EQ.  0.)  THEN
+            zuni = m_twom24*m_U(2)
+*     an exact zero here is very unlikely, but let's be safe.
+            IF (zuni  .EQ.  0.) zuni= m_twom24*m_twom24
+            rvec(ivec) = zuni
+         ENDIF
+      ENDDO
+      m_ntot  = m_ntot + lenv
+      IF (m_ntot  .GE.  modcns)  THEN
+         m_ntot2  =  m_ntot2 + 1
+         m_ntot   =  m_ntot - modcns
+      ENDIF
+      END
+
+
+      SUBROUTINE PseuMar_Out(ijkl_out, ntot_out, ntot2_out)
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INCLUDE 'PseuMar.h'
+      INTEGER ijkl_out, ntot_out, ntot2_out
+*
+      ijkl_out  = m_ijkl
+      ntot_out  = m_ntot
+      ntot2_out = m_ntot2
+      END
diff --git a/Foam/PseuMar.h b/Foam/PseuMar.h
new file mode 100644
index 0000000000000000000000000000000000000000..9026be5a5c3966ea6ad3cce03be7c2337c863775
--- /dev/null
+++ b/Foam/PseuMar.h
@@ -0,0 +1,32 @@
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*//                                                                         //
+*// Universal random number generator proposed by MARSAGLIA and ZAMAN       //
+*// in report FSU-SCRI-87-50                                                //
+*//                                                                         //
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
+
+      INTEGER    modcns
+      PARAMETER (modcns = 1000000000)
+
+      REAL      m_U, m_C, m_CD, m_CM, m_twom24
+      INTEGER   m_i97, m_j97, m_ntot, m_ijkl, m_ntot2, m_iwarm
+
+      COMMON /c_PseuMar/ 
+     $  m_U(97),
+     $  m_C,
+     $  m_CD,
+     $  m_CM,
+     $  m_i97,
+     $  m_j97,
+     $  m_twom24,
+     $  m_ijkl,
+     $  m_ntot,
+     $  m_ntot2,
+     $  m_iwarm
+
+*/////////////////////////////////////////////////////////////////////////////
+*//                                                                         //
+*//                                                                         //
+*/////////////////////////////////////////////////////////////////////////////
diff --git a/Foam/README b/Foam/README
new file mode 100644
index 0000000000000000000000000000000000000000..0c8c0a8e1c0fa2d5040962dbf407491891609169
--- /dev/null
+++ b/Foam/README
@@ -0,0 +1,37 @@
+*///////////////////////////////////////////////////////////////////////////////////////////
+*//                                                                                       //
+*//             Foam Version 2.02                                                         //
+*//             May 2001                                                                  //
+*//                                                                                       //
+*//  N-dimensional general purpose Monte Carlo sampler                                    //
+*//  with the self-adapting simplical and hyper-cubical grid                              //
+*//                                                                                       //
+*//             Author:   Stanislaw JADACH                                                //
+*//             Address:  INP Cracow                                                      //
+*//             Email:    Stanislaw.Jadach@cern.ch, Stanislaw.Jadach@ifj.edu.pl           //
+*//             HomePage: http://home.cern.ch/jadach/                                     //
+*//                                                                                       //
+*//  First version 1.00 written by S.J. in May 1999 during visit in DESY-Hamburg          //
+*//        version 2.00 written by S.J. in Aug 2000 during visit in DESY-Zeuthen          //
+*///////////////////////////////////////////////////////////////////////////////////////////
+
+Commands to run test programs are listed in Makefile.
+# 	make DemoFoam
+# 	make DemoMCell
+
+Fortran flags for various platforms are listed in Makefile.
+
+The basic programs are:
+    FoamA.f  with header file FoamA.h
+    MCellA.f with header file MCellA.h
+
+For the description of the input (configuration) parameters see comments
+in FoamA.f and MCellA.f respectively.
+
+Demonstration main programs DemoFoam.f and DemoMCell.f can serve as templates
+for the user application programs
+
+The testing main program uses histograming package GLK of the KK Monte Carlo,
+which user may replace with any other histograming package.
+
+Note that C++ version of Foam is now available.
\ No newline at end of file
diff --git a/Foam/WtLimit.f b/Foam/WtLimit.f
new file mode 100644
index 0000000000000000000000000000000000000000..3af6f98f2bdc12377020a717c52865c565c6b7f6
--- /dev/null
+++ b/Foam/WtLimit.f
@@ -0,0 +1,135 @@
+
+      SUBROUTINE WtLimitFind(mmout,eeps,Effic)
+*//////////////////////////////////////////////////////////////////////////////////
+*// Calculates wtmax for which overflow integral is below epsilon
+*// The precision of the result is limited by beam size and statistics
+*// Initialization
+*//         CALL WtLimitStart(id1,id2,nchx,xu)
+*//                  id1,id2 = histogram idents
+*//                  nchx,xu = histogram bin number and upper limit
+*// For each eevent
+*//         CALL WtLimitFill(Wt)
+*//                  Wt  =   weight under scrutinity
+*// Fianalization
+*//         CALL WtLimitFind(mout,eps,Effic)
+*//                  mout =  output unit number (disk)
+*//                  eps  =  epsilon in the definition of WtMax
+*//                  Effic=  Efficiency=<wt>/WtMax
+*// Extra getters:
+*//         CALL WtLimitGetAveWt(AveWt)
+*//         CALL WtLimitGetWtMax(WtMax)
+*//                  Remember to call WtLimitFind before!!!
+*//////////////////////////////////////////////////////////////////////////////////
+      IMPLICIT NONE
+      INTEGER           id1,id2,iid1,iid2,nchx,nnchx
+      DOUBLE PRECISION  Wt1,eeps,eps,Effic
+      INTEGER           mmout,mout
+      DOUBLE PRECISION  xl,xu,xxu
+      DOUBLE PRECISION  Bin, Bin1, LowEdge
+      DOUBLE PRECISION  AAveWt,AveWt,WtMax
+      INTEGER           ib,ibX
+      DOUBLE PRECISION  GLK_hi
+      DOUBLE PRECISION  sum,sumWt,WtLimit,AveWt1
+      LOGICAL GLK_Exist
+      INTEGER           init
+      SAVE
+      DATA              init/0/
+*     ------------------------------------------
+      mout=mmout
+      IF(init.EQ.0) THEN
+         WRITE(   *,*) 'WtLimitFind: WARNING!!! lack of initialization' !
+         WRITE(mout,*) 'WtLimitFind: WARNING!!! lack of initialization' !
+         RETURN
+      ENDIF
+***   CALL GLK_Print(id1 )
+***   CALL GLK_Print(id2 )
+      eps=eeps
+      sum   = 0d0
+      sumWt = 0d0
+      DO ib=0,nchx+1
+         Bin  = GLK_hi(id1,ib)
+         Bin1 = GLK_hi(id2,ib)
+         sum   = sum   +Bin
+         sumWt = sumWt +Bin1
+      ENDDO
+      IF(sum.EQ.0d0 .OR. sumWt.EQ.0d0) THEN
+         WRITE(   *,*) 'WtLimitFind: zero content of histogram !!!',sum,sumWt  !
+         WRITE(mout,*) 'WtLimitFind: zero content of histogram !!!',sum,sumWt  !
+         RETURN
+      ENDIF
+      AveWt = sumWt/sum
+      DO ibX=nchx+1,1,-1
+         LowEdge =xl+(ibX-1d0)*(xu-xl)/nchx
+         sum   = 0d0
+         sumWt = 0d0
+         DO ib=0,nchx+1
+            Bin  = GLK_hi(id1,ib)
+            Bin1 = GLK_hi(id2,ib)
+            IF(ib.GE.ibX) Bin1=LowEdge*Bin
+            sum   = sum   +Bin
+            sumWt = sumWt +Bin1
+         ENDDO
+         AveWt1 = sumWt/sum
+         IF( ABS(1d0-AveWt1/AveWt) .GT. eps ) GOTO 100
+      ENDDO
+ 100  CONTINUE
+      IF(ibX.EQ.nchx+1) THEN
+         WtLimit=1d200
+         Effic=0d0
+         WRITE(   *,*) '+++++ WtLimit undefined. Higher uper limit in histogram' !
+         WRITE(mout,*) '+++++ WtLimit undefined. Higher uper limit in histogram' !
+      ELSEIF(ibX.EQ.1) THEN
+         WtLimit=0d0
+         Effic=-1d0
+         WRITE(   *,*) '+++++ WtLimit undefined. Lower uper limit or more bins' !
+         WRITE(mout,*) '+++++ WtLimit undefined. Lower uper limit or more bins' !
+      ELSE
+         WtLimit=xl+(ibX)*(xu-xl)/nchx ! We over-estimate WtLimit, under-estimate Effic
+         Effic=AveWt/WtLimit
+      ENDIF
+      WRITE(   *,*) '00000000000000000000000000000000000000000000000000000000000000000000000' !
+      WRITE(   *,*) '00-->WtLimit: No_evt., <Wt>,  WtLimit= ',sum,AveWt,WtLimit !
+      WRITE(   *,*) '00-->WtLimit: EFFICIENCY <Wt>/WtLimit= ',Effic !
+      WRITE(   *,*) '00000000000000000000000000000000000000000000000000000000000000000000000' !
+      WRITE(mout,*) '-----------------------------------------------------------------------' !
+      WRITE(mout,*) '-->FindWtLimit: content, <Wt>,  WtLimit= ',sum,AveWt,WtLimit !
+      WRITE(mout,*) '-->FindWtLimit: EFFICIENCY <Wt>/WtLimit= ',Effic !
+*----------------------------------------------------
+      RETURN
+*----------------------------------------------------
+      ENTRY WtLimitFill(Wt1)
+      IF(init.EQ.0) THEN
+         WRITE(*,*) 'WtLimitFill: STOP, lack of initialization' !
+         STOP
+      ENDIF
+      CALL GLK_Fil1(id1, Wt1, 1d0)
+      CALL GLK_Fil1(id2, Wt1, Wt1)
+      RETURN      
+*----------------------------------------------------
+      ENTRY WtLimitStart(iid1,iid2,nnchx,xxu)
+      init=init+1
+      id1=iid1
+      id2=iid2
+      nchx=nnchx
+      xl=0d0
+      xu=xxu
+      IF( GLK_Exist(id1) ) THEN
+         WRITE(*,*) '------ WtLimitStart: WARNING!!!! deleting id1=', id1!
+         CALL GLK_Delet(id1)
+      ENDIF
+      IF( GLK_Exist(id2) ) THEN
+         WRITE(*,*) '------ WtLimitStart: WARNING!!!! deleting id2=', id2!
+         CALL GLK_Delet(id2)
+      ENDIF
+      CALL GLK_Book1(iid1,'MC weight  $',nchx, xl,xu)
+      CALL GLK_Book1(iid2,'MC weight  $',nchx, xl,xu)
+      RETURN
+*----------------------------------------------------
+      ENTRY WtLimitGetAveWt(AAveWt)
+      AAveWt=AveWt
+      RETURN
+*----------------------------------------------------
+      ENTRY WtLimitGetWtMax(WtMax)
+      WtMax=WtLimit
+      RETURN
+      END                       !!!WtLimitFind
diff --git a/Foam/demo-cell-map.txp b/Foam/demo-cell-map.txp
new file mode 100644
index 0000000000000000000000000000000000000000..ecce29665cbe9073857dab0656cccbb5e449383d
--- /dev/null
+++ b/Foam/demo-cell-map.txp
@@ -0,0 +1,484 @@
+\documentclass[12pt]{article}
+\usepackage{color}
+\usepackage{epic}
+\textwidth  = 16cm
+\textheight = 18cm
+\pagestyle{empty}
+\begin{document}
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{figure}[!ht]
+\centering
+% =========== big frame, title etc. =======
+\setlength{\unitlength}{0.1mm}
+\begin{picture}(1600,1600)
+\put(0,0){\framebox(1600,1600){ }}
+% =========== Vertices Vertices ===========
+\put(0,0){\begin{picture}( 1600,1600)
+\put(0,0){\framebox( 1600,1600){ }}
+\newcommand{\VD}[2]{\put(#1,#2){\circle*{20}                                                  }}
+\newcommand{\VS}[2]{\put(#1,#2){\makebox(0,0){\Large $\star$}                                 }}
+\newcommand{\VN}[3]{\put(#1,#2){\makebox(0,0)[b]{\hbox{\color{red}\scriptsize #3}}}}
+\VS{    0}{    0}
+\VN{   -8}{   12}{    1}
+\VS{ 1600}{    0}
+\VN{ 1592}{   12}{    2}
+\VS{    0}{ 1600}
+\VN{   -8}{ 1612}{    3}
+\VD{ 1600}{ 1600}
+\VN{ 1592}{ 1612}{    4}
+\VS{ 1000}{ 1000}
+\VN{  992}{ 1012}{    5}
+\VS{ 1000}{ 1000}
+\VN{  992}{ 1012}{    6}
+\VS{  250}{  250}
+\VN{  242}{  262}{    7}
+\VS{  875}{  875}
+\VN{  867}{  887}{    8}
+\VS{    0}{ 1000}
+\VN{   -8}{ 1012}{    9}
+\VS{ 1093}{   93}
+\VN{ 1085}{  105}{   10}
+\VS{  218}{  218}
+\VN{  210}{  230}{   11}
+\VS{  671}{  171}
+\VN{  663}{  183}{   12}
+\VS{  792}{  792}
+\VN{  784}{  804}{   13}
+\VS{  546}{ 1146}
+\VN{  538}{ 1158}{   14}
+\VS{   99}{  974}
+\VN{   91}{  986}{   15}
+\VS{  812}{  812}
+\VN{  804}{  824}{   16}
+\VS{  925}{  125}
+\VN{  917}{  137}{   17}
+\VS{  935}{  123}
+\VN{  927}{  135}{   18}
+\VS{    0}{ 1300}
+\VN{   -8}{ 1312}{   19}
+\VS{  707}{  332}
+\VN{  699}{  344}{   20}
+\VS{    0}{  375}
+\VN{   -8}{  387}{   21}
+\VD{ 1225}{ 1225}
+\VN{ 1217}{ 1237}{   22}
+\VS{  410}{ 1260}
+\VN{  402}{ 1272}{   23}
+\VS{  967}{  561}
+\VN{  959}{  573}{   24}
+\VS{  953}{  953}
+\VN{  945}{  965}{   25}
+\VS{  410}{ 1110}
+\VN{  402}{ 1122}{   26}
+\VS{  671}{  171}
+\VN{  663}{  183}{   27}
+\VS{  600}{    0}
+\VN{  592}{   12}{   28}
+\VS{  341}{ 1204}
+\VN{  333}{ 1216}{   29}
+\VD{  765}{  890}
+\VN{  757}{  902}{   30}
+\VS{ 1046}{  546}
+\VN{ 1038}{  558}{   31}
+\VD{  191}{  316}
+\VN{  183}{  328}{   32}
+\VS{  156}{  156}
+\VN{  148}{  168}{   33}
+\VD{   95}{  986}
+\VN{   87}{  998}{   34}
+\VS{  876}{  689}
+\VN{  868}{  701}{   35}
+\VD{   23}{  914}
+\VN{   15}{  926}{   36}
+\VS{  876}{  689}
+\VN{  868}{  701}{   37}
+\VS{  328}{ 1328}
+\VN{  320}{ 1340}{   38}
+\VD{ 1056}{ 1056}
+\VN{ 1048}{ 1068}{   39}
+\VS{  893}{  464}
+\VN{  885}{  476}{   40}
+\VS{  947}{  287}
+\VN{  939}{  299}{   41}
+\VS{    0}{ 1150}
+\VN{   -8}{ 1162}{   42}
+\VD{ 1150}{  750}
+\VN{ 1142}{  762}{   43}
+\VS{  765}{  890}
+\VN{  757}{  902}{   44}
+\VD{  958}{  958}
+\VN{  950}{  970}{   45}
+\VS{  164}{  164}
+\VN{  156}{  176}{   46}
+\VD{  566}{  191}
+\VN{  558}{  203}{   47}
+\VD{   99}{  974}
+\VN{   91}{  986}{   48}
+\VD{   54}{  804}
+\VN{   46}{  816}{   49}
+\VD{  503}{  128}
+\VN{  495}{  140}{   50}
+\VD{  256}{ 1153}
+\VN{  248}{ 1165}{   51}
+\VD{  959}{  451}
+\VN{  951}{  463}{   52}
+\VD{ 1150}{ 1150}
+\VN{ 1142}{ 1162}{   53}
+\VS{  706}{  815}
+\VN{  698}{  827}{   54}
+\VD{  689}{  251}
+\VN{  681}{  263}{   55}
+\VD{  299}{ 1216}
+\VN{  291}{ 1228}{   56}
+\VD{  479}{ 1279}
+\VN{  471}{ 1291}{   57}
+\VD{  693}{   93}
+\VN{  685}{  105}{   58}
+\VS{  114}{  879}
+\VN{  106}{  891}{   59}
+\VD{  693}{   93}
+\VN{  685}{  105}{   60}
+\VD{    0}{  140}
+\VN{   -8}{  152}{   61}
+\VD{  476}{ 1276}
+\VN{  468}{ 1288}{   62}
+\VD{  697}{  236}
+\VN{  689}{  248}{   63}
+\VD{  640}{ 1140}
+\VN{  632}{ 1152}{   64}
+\VD{  737}{  159}
+\VN{  729}{  171}{   65}
+\VD{  188}{   48}
+\VN{  180}{   60}{   66}
+\VD{  645}{  741}
+\VN{  637}{  753}{   67}
+\VD{  191}{  191}
+\VN{  183}{  203}{   68}
+\VD{  246}{  845}
+\VN{  238}{  857}{   69}
+\VD{  957}{  424}
+\VN{  949}{  436}{   70}
+\VD{  273}{ 1223}
+\VN{  265}{ 1235}{   71}
+\VD{ 1003}{  499}
+\VN{  995}{  511}{   72}
+\VD{  682}{   82}
+\VN{  674}{   94}{   73}
+\VD{  307}{ 1345}
+\VN{  299}{ 1357}{   74}
+\VD{  882}{  882}
+\VN{  874}{  894}{   75}
+\VD{  328}{ 1151}
+\VN{  320}{ 1163}{   76}
+\VD{  224}{ 1237}
+\VN{  216}{ 1249}{   77}
+\end{picture}}
+% ============== End Vertices ===========
+% =========== Vertices Vertices ===========
+\put(0,0){\begin{picture}( 1600,1600)
+\drawline( 250, 250)( 707, 332)
+\drawline( 707, 332)( 812, 812)
+\drawline( 812, 812)( 250, 250)
+\put( 589, 464){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   34 }}}
+\drawline(1225,1225)(   0,1600)
+\drawline(   0,1600)(1600,1600)
+\drawline(1600,1600)(1225,1225)
+\put( 941,1475){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   38 }}}
+\drawline( 410,1110)( 546,1146)
+\drawline( 546,1146)( 875, 875)
+\drawline( 875, 875)( 410,1110)
+\put( 610,1043){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   46 }}}
+\drawline( 600,   0)(1600,   0)
+\drawline(1600,   0)( 925, 125)
+\drawline( 925, 125)( 600,   0)
+\put(1041,  41){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   50 }}}
+\drawline( 765, 890)( 410,1110)
+\drawline( 410,1110)( 875, 875)
+\drawline( 875, 875)( 765, 890)
+\put( 683, 958){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   54 }}}
+\drawline( 935, 123)(1093,  93)
+\drawline(1093,  93)(1046, 546)
+\drawline(1046, 546)( 935, 123)
+\put(1024, 254){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   57 }}}
+\drawline(   0, 375)( 191, 316)
+\drawline( 191, 316)( 218, 218)
+\drawline( 218, 218)(   0, 375)
+\put( 136, 303){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   58 }}}
+\drawline(  95, 986)( 410,1110)
+\drawline( 410,1110)( 765, 890)
+\drawline( 765, 890)(  95, 986)
+\put( 423, 995){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   62 }}}
+\drawline(   0,1000)( 410,1110)
+\drawline( 410,1110)(  95, 986)
+\drawline(  95, 986)(   0,1000)
+\put( 168,1032){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   63 }}}
+\drawline(   0, 375)(  23, 914)
+\drawline(  23, 914)( 191, 316)
+\drawline( 191, 316)(   0, 375)
+\put(  71, 535){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   66 }}}
+\drawline(   0, 375)(   0,1000)
+\drawline(   0,1000)(  23, 914)
+\drawline(  23, 914)(   0, 375)
+\put(   7, 763){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   67 }}}
+\drawline( 876, 689)( 967, 561)
+\drawline( 967, 561)(1000,1000)
+\drawline(1000,1000)( 876, 689)
+\put( 947, 750){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   68 }}}
+\drawline(1056,1056)(   0,1600)
+\drawline(   0,1600)(1225,1225)
+\drawline(1225,1225)(1056,1056)
+\put( 760,1293){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   72 }}}
+\drawline(1000,1000)(   0,1600)
+\drawline(   0,1600)(1056,1056)
+\drawline(1056,1056)(1000,1000)
+\put( 685,1218){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   73 }}}
+\drawline( 893, 464)( 967, 561)
+\drawline( 967, 561)( 876, 689)
+\drawline( 876, 689)( 893, 464)
+\put( 912, 571){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   74 }}}
+\drawline(   0,1000)(   0,1150)
+\drawline(   0,1150)( 341,1204)
+\drawline( 341,1204)(   0,1000)
+\put( 113,1118){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   79 }}}
+\drawline(1093,  93)(1150, 750)
+\drawline(1150, 750)(1000,1000)
+\drawline(1000,1000)(1093,  93)
+\put(1081, 614){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   80 }}}
+\drawline(1093,  93)(1600,   0)
+\drawline(1600,   0)(1150, 750)
+\drawline(1150, 750)(1093,  93)
+\put(1281, 281){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   81 }}}
+\drawline( 792, 792)( 765, 890)
+\drawline( 765, 890)( 875, 875)
+\drawline( 875, 875)( 792, 792)
+\put( 810, 852){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   82 }}}
+\drawline( 953, 953)(   0,1600)
+\drawline(   0,1600)( 958, 958)
+\drawline( 958, 958)( 953, 953)
+\put( 637,1170){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   85 }}}
+\drawline( 164, 164)(   0, 375)
+\drawline(   0, 375)( 218, 218)
+\drawline( 218, 218)( 164, 164)
+\put( 127, 252){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   86 }}}
+\drawline( 566, 191)( 671, 171)
+\drawline( 671, 171)( 707, 332)
+\drawline( 707, 332)( 566, 191)
+\put( 648, 231){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   88 }}}
+\drawline( 250, 250)( 566, 191)
+\drawline( 566, 191)( 707, 332)
+\drawline( 707, 332)( 250, 250)
+\put( 507, 257){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   89 }}}
+\drawline(  99, 974)(   0,1000)
+\drawline(   0,1000)( 765, 890)
+\drawline( 765, 890)(  99, 974)
+\put( 288, 954){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   90 }}}
+\drawline( 792, 792)(  99, 974)
+\drawline(  99, 974)( 765, 890)
+\drawline( 765, 890)( 792, 792)
+\put( 552, 885){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   91 }}}
+\drawline(  54, 804)(   0,1000)
+\drawline(   0,1000)(  99, 974)
+\drawline(  99, 974)(  54, 804)
+\put(  51, 926){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   92 }}}
+\drawline( 218, 218)(  54, 804)
+\drawline(  54, 804)(  99, 974)
+\drawline(  99, 974)( 218, 218)
+\put( 123, 665){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   93 }}}
+\drawline( 503, 128)( 671, 171)
+\drawline( 671, 171)( 156, 156)
+\drawline( 156, 156)( 503, 128)
+\put( 443, 151){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   94 }}}
+\drawline( 256,1153)( 341,1204)
+\drawline( 341,1204)( 546,1146)
+\drawline( 546,1146)( 256,1153)
+\put( 381,1167){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   96 }}}
+\drawline( 935, 123)(1046, 546)
+\drawline(1046, 546)( 959, 451)
+\drawline( 959, 451)( 935, 123)
+\put( 980, 373){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize   99 }}}
+\drawline(1150,1150)(1600,   0)
+\drawline(1600,   0)(1600,1600)
+\drawline(1600,1600)(1150,1150)
+\put(1450, 916){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  100 }}}
+\drawline(1000,1000)(1600,   0)
+\drawline(1600,   0)(1150,1150)
+\drawline(1150,1150)(1000,1000)
+\put(1250, 716){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  101 }}}
+\drawline( 218, 218)( 706, 815)
+\drawline( 706, 815)( 792, 792)
+\drawline( 792, 792)( 218, 218)
+\put( 572, 608){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  102 }}}
+\drawline( 689, 251)( 671, 171)
+\drawline( 671, 171)( 876, 689)
+\drawline( 876, 689)( 689, 251)
+\put( 745, 370){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  104 }}}
+\drawline( 812, 812)( 689, 251)
+\drawline( 689, 251)( 876, 689)
+\drawline( 876, 689)( 812, 812)
+\put( 792, 584){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  105 }}}
+\drawline(   0,1150)( 299,1216)
+\drawline( 299,1216)( 341,1204)
+\drawline( 341,1204)(   0,1150)
+\put( 213,1190){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  106 }}}
+\drawline( 479,1279)(   0,1600)
+\drawline(   0,1600)(1000,1000)
+\drawline(1000,1000)( 479,1279)
+\put( 493,1293){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  108 }}}
+\drawline( 958, 958)( 479,1279)
+\drawline( 479,1279)(1000,1000)
+\drawline(1000,1000)( 958, 958)
+\put( 812,1079){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  109 }}}
+\drawline( 693,  93)( 600,   0)
+\drawline( 600,   0)( 925, 125)
+\drawline( 925, 125)( 693,  93)
+\put( 739,  72){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  110 }}}
+\drawline( 114, 879)(  99, 974)
+\drawline(  99, 974)( 706, 815)
+\drawline( 706, 815)( 114, 879)
+\put( 306, 889){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  112 }}}
+\drawline( 693,  93)( 925, 125)
+\drawline( 925, 125)( 671, 171)
+\drawline( 671, 171)( 693,  93)
+\put( 763, 129){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  114 }}}
+\drawline(   0,   0)( 693,  93)
+\drawline( 693,  93)( 671, 171)
+\drawline( 671, 171)(   0,   0)
+\put( 454,  88){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  115 }}}
+\drawline(   0, 140)(   0, 375)
+\drawline(   0, 375)( 164, 164)
+\drawline( 164, 164)(   0, 140)
+\put(  54, 226){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  116 }}}
+\drawline(   0,   0)(   0, 140)
+\drawline(   0, 140)( 164, 164)
+\drawline( 164, 164)(   0,   0)
+\put(  54, 101){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  117 }}}
+\drawline( 328,1328)( 476,1276)
+\drawline( 476,1276)( 953, 953)
+\drawline( 953, 953)( 328,1328)
+\put( 585,1185){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  118 }}}
+\drawline( 328,1328)(   0,1600)
+\drawline(   0,1600)( 476,1276)
+\drawline( 476,1276)( 328,1328)
+\put( 268,1401){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  119 }}}
+\drawline( 697, 236)( 893, 464)
+\drawline( 893, 464)( 876, 689)
+\drawline( 876, 689)( 697, 236)
+\put( 822, 463){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  120 }}}
+\drawline( 671, 171)( 893, 464)
+\drawline( 893, 464)( 697, 236)
+\drawline( 697, 236)( 671, 171)
+\put( 753, 290){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  121 }}}
+\drawline( 875, 875)( 640,1140)
+\drawline( 640,1140)( 953, 953)
+\drawline( 953, 953)( 875, 875)
+\put( 822, 989){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  122 }}}
+\drawline( 875, 875)( 328,1328)
+\drawline( 328,1328)( 640,1140)
+\drawline( 640,1140)( 875, 875)
+\put( 614,1114){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  123 }}}
+\drawline( 737, 159)( 935, 123)
+\drawline( 935, 123)( 947, 287)
+\drawline( 947, 287)( 737, 159)
+\put( 873, 189){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  124 }}}
+\drawline( 671, 171)( 737, 159)
+\drawline( 737, 159)( 947, 287)
+\drawline( 947, 287)( 671, 171)
+\put( 785, 205){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  125 }}}
+\drawline( 188,  48)( 503, 128)
+\drawline( 503, 128)( 156, 156)
+\drawline( 156, 156)( 188,  48)
+\put( 282, 110){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  126 }}}
+\drawline(   0,   0)( 188,  48)
+\drawline( 188,  48)( 156, 156)
+\drawline( 156, 156)(   0,   0)
+\put( 114,  68){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  127 }}}
+\drawline( 645, 741)( 114, 879)
+\drawline( 114, 879)( 706, 815)
+\drawline( 706, 815)( 645, 741)
+\put( 488, 811){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  128 }}}
+\drawline( 191, 191)( 671, 171)
+\drawline( 671, 171)( 250, 250)
+\drawline( 250, 250)( 191, 191)
+\put( 370, 204){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  130 }}}
+\drawline( 156, 156)( 671, 171)
+\drawline( 671, 171)( 191, 191)
+\drawline( 191, 191)( 156, 156)
+\put( 339, 172){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  131 }}}
+\drawline( 218, 218)( 246, 845)
+\drawline( 246, 845)( 645, 741)
+\drawline( 645, 741)( 218, 218)
+\put( 369, 601){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  132 }}}
+\drawline( 218, 218)( 114, 879)
+\drawline( 114, 879)( 246, 845)
+\drawline( 246, 845)( 218, 218)
+\put( 192, 647){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  133 }}}
+\drawline( 671, 171)( 957, 424)
+\drawline( 957, 424)( 967, 561)
+\drawline( 967, 561)( 671, 171)
+\put( 865, 385){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  134 }}}
+\drawline( 671, 171)( 947, 287)
+\drawline( 947, 287)( 957, 424)
+\drawline( 957, 424)( 671, 171)
+\put( 858, 294){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  135 }}}
+\drawline( 273,1223)( 410,1260)
+\drawline( 410,1260)( 546,1146)
+\drawline( 546,1146)( 273,1223)
+\put( 409,1209){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  136 }}}
+\drawline(   0,1300)( 410,1260)
+\drawline( 410,1260)( 273,1223)
+\drawline( 273,1223)(   0,1300)
+\put( 227,1261){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  137 }}}
+\drawline(1003, 499)(1046, 546)
+\drawline(1046, 546)(1000,1000)
+\drawline(1000,1000)(1003, 499)
+\put(1016, 681){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  138 }}}
+\drawline( 959, 451)(1003, 499)
+\drawline(1003, 499)(1000,1000)
+\drawline(1000,1000)( 959, 451)
+\put( 987, 650){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  139 }}}
+\drawline(   0,   0)( 682,  82)
+\drawline( 682,  82)( 693,  93)
+\drawline( 693,  93)(   0,   0)
+\put( 458,  58){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  140 }}}
+\drawline(   0,   0)( 600,   0)
+\drawline( 600,   0)( 682,  82)
+\drawline( 682,  82)(   0,   0)
+\put( 427,  27){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  141 }}}
+\drawline(   0,1300)( 307,1345)
+\drawline( 307,1345)( 410,1260)
+\drawline( 410,1260)(   0,1300)
+\put( 239,1301){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  142 }}}
+\drawline(   0,1300)(   0,1600)
+\drawline(   0,1600)( 307,1345)
+\drawline( 307,1345)(   0,1300)
+\put( 102,1415){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  143 }}}
+\drawline( 882, 882)( 876, 689)
+\drawline( 876, 689)(1000,1000)
+\drawline(1000,1000)( 882, 882)
+\put( 919, 857){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  144 }}}
+\drawline( 812, 812)( 876, 689)
+\drawline( 876, 689)( 882, 882)
+\drawline( 882, 882)( 812, 812)
+\put( 856, 794){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  145 }}}
+\drawline(   0,1000)( 328,1151)
+\drawline( 328,1151)( 546,1146)
+\drawline( 546,1146)(   0,1000)
+\put( 291,1099){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  146 }}}
+\drawline(   0,1000)( 256,1153)
+\drawline( 256,1153)( 328,1151)
+\drawline( 328,1151)(   0,1000)
+\put( 194,1101){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  147 }}}
+\drawline(   0,1150)( 224,1237)
+\drawline( 224,1237)( 299,1216)
+\drawline( 299,1216)(   0,1150)
+\put( 174,1201){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  148 }}}
+\drawline(   0,1150)(   0,1300)
+\drawline(   0,1300)( 224,1237)
+\drawline( 224,1237)(   0,1150)
+\put(  74,1229){\makebox(0,0)[b]{\hbox{\color{magenta}\scriptsize  149 }}}
+\end{picture}}
+% ============== End Vertices ===========
+\end{picture}
+\end{figure}
+\end{document}
diff --git a/Foam/output-DemoFoam b/Foam/output-DemoFoam
new file mode 100644
index 0000000000000000000000000000000000000000..576b4059f9025bc9714de486b58e30bd0893bf61
--- /dev/null
+++ b/Foam/output-DemoFoam
@@ -0,0 +1,172 @@
+ ######################### FoamA_Grow #####################
+ -----------------------------------------------------------------------
+ -->FindWtLimit: content, <Wt>,  WtLimit=    1000000.0000000000       0.42085001370098818        1.0900000000000001     
+ -->FindWtLimit: EFFICIENCY <Wt>/WtLimit=   0.38610093000090656     
+================================================== ACTIVE CELLS ==================================================
+ iCell Stat Pare Dau1 Dau2     WtMin      WtMax        <w>  sigma/<w>     Volume      Drive    TrueInt   Ver1  Ver2 ...
+   34    1   27   -1   -1    0.00285    0.03168    0.32102   61.77533    0.04120    0.02398    0.00770    7   20   16
+   38    1    4   -1   -1    0.00130    0.02093    0.50012   82.73549    0.11719    0.01393    0.00696   22    3    4
+   46    1   22   -1   -1    0.00523    0.05282    0.34765   39.91278    0.00961    0.03919    0.01363   26   14    8
+   50    1   29   -1   -1    0.00040    0.01994    0.27516  206.11625    0.02441    0.01537    0.00423   28    2   17
+   54    1   47   -1   -1    0.00153    0.01981    0.16545  227.80115    0.00360    0.01700    0.00281   30   26    8
+   57    1   30   -1   -1    0.00138    0.01603    0.52375  107.37728    0.01373    0.01048    0.00549   18   10   31
+   58    1   36   -1   -1    0.00112    0.00474    0.81498  127.13096    0.00334    0.00261    0.00213   21   32   11
+   62    1   55   -1   -1    0.00340    0.02576    0.46534   53.58365    0.02208    0.01758    0.00818   34   26   30
+   63    1   55   -1   -1    0.00197    0.02224    0.21304  171.23124    0.00315    0.01833    0.00391    9   26   34
+   66    1   59   -1   -1    0.00290    0.02904    0.30222   74.11969    0.02044    0.02230    0.00674   21   36   32
+   67    1   59   -1   -1    0.00101    0.02059    0.11569  376.65590    0.00292    0.01846    0.00214   21    9   36
+   68    1   42   -1   -1    0.00442    0.08874    1.48663    9.50793    0.00858    0.03569    0.05305   37   24    6
+   72    1   39   -1   -1    0.00241    0.04207    0.47027   49.30850    0.05273    0.02644    0.01243   39    3   22
+   73    1   39   -1   -1    0.00080    0.04292    0.45730   46.89129    0.01758    0.02937    0.01343    5    3   39
+   74    1   69   -1   -1    0.00503    0.03697    0.74023   33.95487    0.00358    0.02123    0.01571   40   24   37
+   79    1   53   -1   -1    0.01205    0.10353    2.78642    5.02700    0.01001    0.02734    0.07618    9   42   29
+   80    1   14   -1   -1    0.00221    0.03564    0.62429   41.73507    0.02197    0.02038    0.01272   10   43    6
+   81    1   14   -1   -1    0.00109    0.02121    0.44089  115.81899    0.06592    0.01420    0.00626   10    2   43
+   82    1   20   -1   -1    0.00105    0.01100    0.28654  245.99261    0.00200    0.00855    0.00245   13   44    8
+   85    1   44   -1   -1    0.00008    0.01733    0.81534   96.37587    0.00183    0.00953    0.00777   25    3   45
+   86    1   37   -1   -1    0.00314    0.02289    0.36600   79.18330    0.00401    0.01675    0.00613   46   21   11
+   88    1   35   -1   -1    0.00218    0.02649    0.28745  105.81765    0.00343    0.02058    0.00592   47   12   20
+   89    1   35   -1   -1    0.00260    0.01421    0.58688   75.72770    0.01030    0.00896    0.00526    7   47   20
+   90    1   83   -1   -1    0.00026    0.01235    0.06820 1545.47170    0.00175    0.01157    0.00079   48    9   44
+   91    1   83   -1   -1    0.00132    0.00983    0.39903  190.54237    0.01227    0.00703    0.00280   13   48   44
+   92    1   25   -1   -1    0.00114    0.02471    0.17786  200.96452    0.00350    0.02098    0.00373   49    9   15
+   93    1   25   -1   -1    0.00111    0.00984    0.29072  230.33035    0.01051    0.00763    0.00222   11   49   15
+   94    1   61   -1   -1    0.00502    0.02971    0.48177   39.41019    0.00381    0.02005    0.00966   50   27   33
+   96    1   52   -1   -1    0.00903    0.03106    1.35443   18.76892    0.00300    0.01318    0.01785   51   29   14
+   99    1   56   -1   -1    0.00156    0.02792    0.42746   68.03344    0.00515    0.01956    0.00836   18   31   52
+  100    1    6   -1   -1    0.00156    0.01390    0.55057   91.48280    0.14062    0.00897    0.00494   53    2    4
+  101    1    6   -1   -1    0.00077    0.02416    0.33700  105.20079    0.04688    0.01807    0.00609    6    2   53
+  102    1   24   -1   -1    0.00069    0.01148    0.16437  401.98687    0.01227    0.00986    0.00162   11   54   13
+  104    1   65   -1   -1    0.00072    0.01104    0.17505  505.58357    0.00143    0.00939    0.00164   55   12   35
+  105    1   65   -1   -1    0.00274    0.01563    0.53794   71.21472    0.01001    0.01016    0.00547   16   55   35
+  106    1   78   -1   -1    0.00151    0.01244    2.10046   39.62235    0.00125    0.00397    0.00833   42   56   29
+  108    1   84   -1   -1    0.00029    0.02498    0.50935  100.93021    0.00641    0.01612    0.00821   57    3    5
+  109    1   84   -1   -1    0.00330    0.05320    0.78998   28.59969    0.00641    0.02917    0.02305   45   57    5
+  110    1   51   -1   -1    0.00122    0.00834    0.73846  100.38471    0.00366    0.00480    0.00354   58   28   17
+  112    1  103   -1   -1    0.00091    0.00860    0.29549  299.38941    0.01073    0.00664    0.00196   59   15   54
+  114    1   49   -1   -1    0.00122    0.03786    0.46050   77.91731    0.00366    0.02589    0.01192   60   17   27
+  115    1   49   -1   -1    0.00299    0.11359    1.88252    5.66861    0.01099    0.03940    0.07418    1   60   27
+  116    1   87   -1   -1    0.01038    0.07765    1.19285   12.55067    0.00751    0.03541    0.04224   61   21   46
+  117    1   87   -1   -1    0.00123    0.04659    0.32285   87.97216    0.00451    0.03522    0.01137    1   61   46
+  118    1   70   -1   -1    0.00263    0.04733    1.19293   22.64102    0.00458    0.02158    0.02574   38   62   25
+  119    1   70   -1   -1    0.00021    0.00637    0.33226  490.48365    0.00458    0.00478    0.00159   38    3   62
+  120    1   75   -1   -1    0.00519    0.04309    0.35602   37.90704    0.00939    0.03178    0.01131   63   40   37
+  121    1   75   -1   -1    0.00233    0.01035    0.54296   94.96130    0.00134    0.00671    0.00364   12   40   63
+  122    1   71   -1   -1    0.01198    0.07888    2.14632    6.02273    0.00763    0.02507    0.05381    8   64   25
+  123    1   71   -1   -1    0.00439    0.07888    0.91639   15.51956    0.00763    0.04114    0.03770    8   38   64
+  124    1   77   -1   -1    0.00195    0.03862    0.28459   79.31444    0.00644    0.03006    0.00856   65   18   41
+  125    1   77   -1   -1    0.00243    0.02218    1.95646   27.64647    0.00215    0.00750    0.01468   12   65   41
+  126    1   95   -1   -1    0.01335    0.07395    1.51334    8.61507    0.00715    0.02942    0.04453   66   50   33
+  127    1   95   -1   -1    0.00117    0.04437    0.31642   90.30915    0.00429    0.03369    0.01066    1   66   33
+  128    1  113   -1   -1    0.00062    0.00277    0.52660  318.86933    0.00939    0.00181    0.00095   67   59   54
+  130    1   60   -1   -1    0.00260    0.04416    0.14078  117.32994    0.00572    0.03871    0.00545   68   27    7
+  131    1   60   -1   -1    0.00312    0.02674    0.28999   88.51930    0.00343    0.02073    0.00601   33   27   68
+  132    1  129   -1   -1    0.00166    0.04616    0.09057  214.72943    0.04931    0.04233    0.00383   11   69   67
+  133    1  129   -1   -1    0.00110    0.01539    0.14604  250.61051    0.01644    0.01343    0.00196   11   59   69
+  134    1   76   -1   -1    0.01622    0.07395    1.80991    8.18982    0.00715    0.02632    0.04763   12   70   24
+  135    1   76   -1   -1    0.00809    0.07395    1.55846    9.31956    0.00715    0.02890    0.04504   12   41   70
+  136    1   40   -1   -1    0.00911    0.04141    2.31932   11.00697    0.00401    0.01248    0.02894   71   23   14
+  137    1   40   -1   -1    0.00092    0.01772    0.55166   94.01411    0.00401    0.01142    0.00630   19   23   71
+  138    1   98   -1   -1    0.00221    0.01607    1.28966   37.16388    0.00429    0.00680    0.00877   72   31    6
+  139    1   98   -1   -1    0.00221    0.03885    1.01789   21.21497    0.00429    0.01903    0.01937   52   72    6
+  140    1  111   -1   -1    0.00037    0.00999    1.37786   78.76668    0.00137    0.00419    0.00577    1   73   58
+  141    1  111   -1   -1    0.00261    0.05687    0.55646   26.13806    0.00961    0.03542    0.01971    1   28   73
+  142    1   41   -1   -1    0.00139    0.01367    0.43360  115.14369    0.00601    0.00954    0.00413   19   74   23
+  143    1   41   -1   -1    0.00082    0.00799    0.56559  164.28273    0.01802    0.00511    0.00289   19    3   74
+  144    1   64   -1   -1    0.00221    0.04437    1.07486   25.84272    0.00429    0.02138    0.02298   75   35    6
+  145    1   64   -1   -1    0.00198    0.01938    0.31989  119.12900    0.00257    0.01468    0.00470   16   35   75
+  146    1   97   -1   -1    0.00560    0.04765    0.32980   33.03615    0.00676    0.03584    0.01182    9   76   14
+  147    1   97   -1   -1    0.00448    0.01588    0.87593   34.22696    0.00225    0.00847    0.00742    9   51   76
+  148    1  107   -1   -1    0.00264    0.01427    1.15190   47.20996    0.00219    0.00653    0.00752   42   77   56
+  149    1  107   -1   -1    0.00152    0.01489    0.71570   87.43450    0.00657    0.00854    0.00612   42   19   77
+All cells:    149      Active:     75    75
+Minimum and Maximum Weight/<Wt>       =      0.01088    15.23155
+Total True Integral in active cells   =   1.010730457437      1.010730457437    
+Total Driver Integral in active cells =   1.394681549625      1.394681549625    
+True/Drive =      0.72470
+1
+      8100          WT distribution                                                                 
+           nent            sum           bmin           bmax
+        1000000    0.00000E+00    0.00000E+00    0.48340E+05
+           undf           ovef           sumw           avex
+    0.00000E+00    0.00000E+00    0.10000E+07    0.42085E+00
+  0.0000   0.281500D+04 0XXX                                                              I
+  0.0250   0.148970D+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.0500   0.369750D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX               I
+  0.0750   0.406900D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX          I
+  0.1000   0.449440D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    I
+  0.1250   0.471930D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX I
+  0.1500   0.483400D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  0.1750   0.466470D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  I
+  0.2000   0.441040D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     I
+  0.2250   0.430100D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       I
+  0.2500   0.399270D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           I
+  0.2750   0.367230D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX               I
+  0.3000   0.337070D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                   I
+  0.3250   0.310140D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                       I
+  0.3500   0.291910D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                          I
+  0.3750   0.271380D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                            I
+  0.4000   0.251350D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                               I
+  0.4250   0.235500D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                 I
+  0.4500   0.220910D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                   I
+  0.4750   0.208880D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXX                                     I
+  0.5000   0.194640D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXX                                       I
+  0.5250   0.181260D+05 0XXXXXXXXXXXXXXXXXXXXXXXX                                         I
+  0.5500   0.173730D+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.5750   0.166840D+05 0XXXXXXXXXXXXXXXXXXXXXX                                           I
+  0.6000   0.158160D+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.6250   0.152450D+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.6500   0.143990D+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.6750   0.142380D+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.7000   0.137300D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7250   0.136350D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7500   0.134810D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7750   0.132550D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8000   0.130480D+05 0XXXXXXXXXXXXXXXXX                                                I
+  0.8250   0.134830D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8500   0.136720D+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8750   0.147010D+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.9000   0.156230D+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.9250   0.169900D+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.9500   0.212960D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                    I
+  0.9750   0.442080D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     I
+  1.0000   0.245000D+04 0XXX                                                              I
+  1.0250   0.620000D+02 0                                                                 I
+  1.0500   0.360000D+02 0                                                                 I
+  1.0750   0.600000D+01 0                                                                 I
+  1.1000   0.000000D+00 0                                                                 I
+  1.1250   0.000000D+00 0                                                                 I
+  1.1500   0.000000D+00 0                                                                 I
+  1.1750   0.000000D+00 0                                                                 I
+  1.2000   0.000000D+00 0                                                                 I
+  1.2250   0.000000D+00 0                                                                 I
+  1.2500   0.000000D+00 0                                                                 I
+  1.2750   0.000000D+00 0                                                                 I
+  1.3000   0.000000D+00 0                                                                 I
+  1.3250   0.000000D+00 0                                                                 I
+  1.3500   0.000000D+00 0                                                                 I
+  1.3750   0.000000D+00 0                                                                 I
+  1.4000   0.000000D+00 0                                                                 I
+  1.4250   0.000000D+00 0                                                                 I
+  1.4500   0.000000D+00 0                                                                 I
+  1.4750   0.000000D+00 0                                                                 I
+  1.5000   0.000000D+00 0                                                                 I
+  1.5250   0.000000D+00 0                                                                 I
+  1.5500   0.000000D+00 0                                                                 I
+  1.5750   0.000000D+00 0                                                                 I
+  1.6000   0.000000D+00 0                                                                 I
+  1.6250   0.000000D+00 0                                                                 I
+  1.6500   0.000000D+00 0                                                                 I
+  1.6750   0.000000D+00 0                                                                 I
+  1.7000   0.000000D+00 0                                                                 I
+  1.7250   0.000000D+00 0                                                                 I
+  1.7500   0.000000D+00 0                                                                 I
+  1.7750   0.000000D+00 0                                                                 I
+  1.8000   0.000000D+00 0                                                                 I
+  1.8250   0.000000D+00 0                                                                 I
+  1.8500   0.000000D+00 0                                                                 I
+  1.8750   0.000000D+00 0                                                                 I
+  1.9000   0.000000D+00 0                                                                 I
+  1.9250   0.000000D+00 0                                                                 I
+  1.9500   0.000000D+00 0                                                                 I
+  1.9750   0.000000D+00 0                                                                 I
diff --git a/Foam/output-DemoFoam-linux b/Foam/output-DemoFoam-linux
new file mode 100644
index 0000000000000000000000000000000000000000..145653491f50048f93130d4ea8c7f1396ea85b9d
--- /dev/null
+++ b/Foam/output-DemoFoam-linux
@@ -0,0 +1,172 @@
+ ######################### FoamA_Grow #####################
+ -----------------------------------------------------------------------
+ -->FindWtLimit: content, <Wt>,  WtLimit=   1000000.  0.420850014  1.09
+ -->FindWtLimit: EFFICIENCY <Wt>/WtLimit=   0.38610093
+================================================== ACTIVE CELLS ==================================================
+ iCell Stat Pare Dau1 Dau2     WtMin      WtMax        <w>  sigma/<w>     Volume      Drive    TrueInt   Ver1  Ver2 ...
+   34    1   27   -1   -1    0.00285    0.03168    0.32102   61.77533    0.04120    0.02398    0.00770    7   20   16
+   38    1    4   -1   -1    0.00130    0.02093    0.50012   82.73549    0.11719    0.01393    0.00696   22    3    4
+   46    1   22   -1   -1    0.00523    0.05282    0.34765   39.91278    0.00961    0.03919    0.01363   26   14    8
+   50    1   29   -1   -1    0.00040    0.01994    0.27516  206.11625    0.02441    0.01537    0.00423   28    2   17
+   54    1   47   -1   -1    0.00153    0.01981    0.16545  227.80115    0.00360    0.01700    0.00281   30   26    8
+   57    1   30   -1   -1    0.00138    0.01603    0.52375  107.37728    0.01373    0.01048    0.00549   18   10   31
+   58    1   36   -1   -1    0.00112    0.00474    0.81498  127.13096    0.00334    0.00261    0.00213   21   32   11
+   62    1   55   -1   -1    0.00340    0.02576    0.46534   53.58365    0.02208    0.01758    0.00818   34   26   30
+   63    1   55   -1   -1    0.00197    0.02224    0.21304  171.23124    0.00315    0.01833    0.00391    9   26   34
+   66    1   59   -1   -1    0.00290    0.02904    0.30222   74.11969    0.02044    0.02230    0.00674   21   36   32
+   67    1   59   -1   -1    0.00101    0.02059    0.11569  376.65590    0.00292    0.01846    0.00214   21    9   36
+   68    1   42   -1   -1    0.00442    0.08874    1.48663    9.50793    0.00858    0.03569    0.05305   37   24    6
+   72    1   39   -1   -1    0.00241    0.04207    0.47027   49.30850    0.05273    0.02644    0.01243   39    3   22
+   73    1   39   -1   -1    0.00080    0.04292    0.45730   46.89129    0.01758    0.02937    0.01343    5    3   39
+   74    1   69   -1   -1    0.00503    0.03697    0.74023   33.95487    0.00358    0.02123    0.01571   40   24   37
+   79    1   53   -1   -1    0.01205    0.10353    2.78642    5.02700    0.01001    0.02734    0.07618    9   42   29
+   80    1   14   -1   -1    0.00221    0.03564    0.62429   41.73507    0.02197    0.02038    0.01272   10   43    6
+   81    1   14   -1   -1    0.00109    0.02121    0.44089  115.81899    0.06592    0.01420    0.00626   10    2   43
+   82    1   20   -1   -1    0.00105    0.01100    0.28654  245.99261    0.00200    0.00855    0.00245   13   44    8
+   85    1   44   -1   -1    0.00008    0.01733    0.81534   96.37587    0.00183    0.00953    0.00777   25    3   45
+   86    1   37   -1   -1    0.00314    0.02289    0.36600   79.18330    0.00401    0.01675    0.00613   46   21   11
+   88    1   35   -1   -1    0.00218    0.02649    0.28745  105.81765    0.00343    0.02058    0.00592   47   12   20
+   89    1   35   -1   -1    0.00260    0.01421    0.58688   75.72770    0.01030    0.00896    0.00526    7   47   20
+   90    1   83   -1   -1    0.00026    0.01235    0.06820 1545.47170    0.00175    0.01157    0.00079   48    9   44
+   91    1   83   -1   -1    0.00132    0.00983    0.39903  190.54237    0.01227    0.00703    0.00280   13   48   44
+   92    1   25   -1   -1    0.00114    0.02471    0.17786  200.96452    0.00350    0.02098    0.00373   49    9   15
+   93    1   25   -1   -1    0.00111    0.00984    0.29072  230.33035    0.01051    0.00763    0.00222   11   49   15
+   94    1   61   -1   -1    0.00502    0.02971    0.48177   39.41019    0.00381    0.02005    0.00966   50   27   33
+   96    1   52   -1   -1    0.00903    0.03106    1.35443   18.76892    0.00300    0.01318    0.01785   51   29   14
+   99    1   56   -1   -1    0.00156    0.02792    0.42746   68.03344    0.00515    0.01956    0.00836   18   31   52
+  100    1    6   -1   -1    0.00156    0.01390    0.55057   91.48280    0.14062    0.00897    0.00494   53    2    4
+  101    1    6   -1   -1    0.00077    0.02416    0.33700  105.20079    0.04688    0.01807    0.00609    6    2   53
+  102    1   24   -1   -1    0.00069    0.01148    0.16437  401.98687    0.01227    0.00986    0.00162   11   54   13
+  104    1   65   -1   -1    0.00072    0.01104    0.17505  505.58357    0.00143    0.00939    0.00164   55   12   35
+  105    1   65   -1   -1    0.00274    0.01563    0.53794   71.21472    0.01001    0.01016    0.00547   16   55   35
+  106    1   78   -1   -1    0.00151    0.01244    2.10046   39.62235    0.00125    0.00397    0.00833   42   56   29
+  108    1   84   -1   -1    0.00029    0.02498    0.50935  100.93021    0.00641    0.01612    0.00821   57    3    5
+  109    1   84   -1   -1    0.00330    0.05320    0.78998   28.59969    0.00641    0.02917    0.02305   45   57    5
+  110    1   51   -1   -1    0.00122    0.00834    0.73846  100.38471    0.00366    0.00480    0.00354   58   28   17
+  112    1  103   -1   -1    0.00091    0.00860    0.29549  299.38941    0.01073    0.00664    0.00196   59   15   54
+  114    1   49   -1   -1    0.00122    0.03786    0.46050   77.91731    0.00366    0.02589    0.01192   60   17   27
+  115    1   49   -1   -1    0.00299    0.11359    1.88252    5.66861    0.01099    0.03940    0.07418    1   60   27
+  116    1   87   -1   -1    0.01038    0.07765    1.19285   12.55067    0.00751    0.03541    0.04224   61   21   46
+  117    1   87   -1   -1    0.00123    0.04659    0.32285   87.97216    0.00451    0.03522    0.01137    1   61   46
+  118    1   70   -1   -1    0.00263    0.04733    1.19293   22.64102    0.00458    0.02158    0.02574   38   62   25
+  119    1   70   -1   -1    0.00021    0.00637    0.33226  490.48366    0.00458    0.00478    0.00159   38    3   62
+  120    1   75   -1   -1    0.00519    0.04309    0.35602   37.90704    0.00939    0.03178    0.01131   63   40   37
+  121    1   75   -1   -1    0.00233    0.01035    0.54296   94.96130    0.00134    0.00671    0.00364   12   40   63
+  122    1   71   -1   -1    0.01198    0.07888    2.14632    6.02273    0.00763    0.02507    0.05381    8   64   25
+  123    1   71   -1   -1    0.00439    0.07888    0.91639   15.51956    0.00763    0.04114    0.03770    8   38   64
+  124    1   77   -1   -1    0.00195    0.03862    0.28459   79.31444    0.00644    0.03006    0.00856   65   18   41
+  125    1   77   -1   -1    0.00243    0.02218    1.95646   27.64647    0.00215    0.00750    0.01468   12   65   41
+  126    1   95   -1   -1    0.01335    0.07395    1.51334    8.61507    0.00715    0.02942    0.04453   66   50   33
+  127    1   95   -1   -1    0.00117    0.04437    0.31642   90.30915    0.00429    0.03369    0.01066    1   66   33
+  128    1  113   -1   -1    0.00062    0.00277    0.52660  318.86933    0.00939    0.00181    0.00095   67   59   54
+  130    1   60   -1   -1    0.00260    0.04416    0.14078  117.32994    0.00572    0.03871    0.00545   68   27    7
+  131    1   60   -1   -1    0.00312    0.02674    0.28999   88.51930    0.00343    0.02073    0.00601   33   27   68
+  132    1  129   -1   -1    0.00166    0.04616    0.09057  214.72943    0.04931    0.04233    0.00383   11   69   67
+  133    1  129   -1   -1    0.00110    0.01539    0.14604  250.61051    0.01644    0.01343    0.00196   11   59   69
+  134    1   76   -1   -1    0.01622    0.07395    1.80991    8.18982    0.00715    0.02632    0.04763   12   70   24
+  135    1   76   -1   -1    0.00809    0.07395    1.55846    9.31956    0.00715    0.02890    0.04504   12   41   70
+  136    1   40   -1   -1    0.00911    0.04141    2.31932   11.00697    0.00401    0.01248    0.02894   71   23   14
+  137    1   40   -1   -1    0.00092    0.01772    0.55166   94.01411    0.00401    0.01142    0.00630   19   23   71
+  138    1   98   -1   -1    0.00221    0.01607    1.28966   37.16388    0.00429    0.00680    0.00877   72   31    6
+  139    1   98   -1   -1    0.00221    0.03885    1.01789   21.21497    0.00429    0.01903    0.01937   52   72    6
+  140    1  111   -1   -1    0.00037    0.00999    1.37786   78.76668    0.00137    0.00419    0.00577    1   73   58
+  141    1  111   -1   -1    0.00261    0.05687    0.55646   26.13806    0.00961    0.03542    0.01971    1   28   73
+  142    1   41   -1   -1    0.00139    0.01367    0.43360  115.14369    0.00601    0.00954    0.00413   19   74   23
+  143    1   41   -1   -1    0.00082    0.00799    0.56559  164.28273    0.01802    0.00511    0.00289   19    3   74
+  144    1   64   -1   -1    0.00221    0.04437    1.07486   25.84272    0.00429    0.02138    0.02298   75   35    6
+  145    1   64   -1   -1    0.00198    0.01938    0.31989  119.12900    0.00257    0.01468    0.00470   16   35   75
+  146    1   97   -1   -1    0.00560    0.04765    0.32980   33.03615    0.00676    0.03584    0.01182    9   76   14
+  147    1   97   -1   -1    0.00448    0.01588    0.87593   34.22696    0.00225    0.00847    0.00742    9   51   76
+  148    1  107   -1   -1    0.00264    0.01427    1.15190   47.20996    0.00219    0.00653    0.00752   42   77   56
+  149    1  107   -1   -1    0.00152    0.01489    0.71570   87.43450    0.00657    0.00854    0.00612   42   19   77
+All cells:    149      Active:     75    75
+Minimum and Maximum Weight/<Wt>       =      0.01088    15.23155
+Total True Integral in active cells   =   1.010730457423      1.010730457423    
+Total Driver Integral in active cells =   1.394681549639      1.394681549639    
+True/Drive =      0.72470
+1
+      8100          WT distribution                                                                 
+           nent            sum           bmin           bmax
+        1000000    0.00000E+00    0.00000E+00    0.48340E+05
+           undf           ovef           sumw           avex
+    0.00000E+00    0.00000E+00    0.10000E+07    0.42085E+00
+  0.0000   0.281500E+04 0XXX                                                              I
+  0.0250   0.148970E+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.0500   0.369750E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX               I
+  0.0750   0.406900E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX          I
+  0.1000   0.449440E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    I
+  0.1250   0.471930E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX I
+  0.1500   0.483400E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  0.1750   0.466470E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  I
+  0.2000   0.441040E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     I
+  0.2250   0.430100E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       I
+  0.2500   0.399270E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           I
+  0.2750   0.367230E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX               I
+  0.3000   0.337070E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                   I
+  0.3250   0.310140E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                       I
+  0.3500   0.291910E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                          I
+  0.3750   0.271380E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                            I
+  0.4000   0.251350E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                               I
+  0.4250   0.235500E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                 I
+  0.4500   0.220910E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                   I
+  0.4750   0.208880E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXX                                     I
+  0.5000   0.194640E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXX                                       I
+  0.5250   0.181260E+05 0XXXXXXXXXXXXXXXXXXXXXXXX                                         I
+  0.5500   0.173730E+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.5750   0.166840E+05 0XXXXXXXXXXXXXXXXXXXXXX                                           I
+  0.6000   0.158160E+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.6250   0.152450E+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.6500   0.143990E+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.6750   0.142380E+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.7000   0.137300E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7250   0.136350E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7500   0.134810E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.7750   0.132550E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8000   0.130480E+05 0XXXXXXXXXXXXXXXXX                                                I
+  0.8250   0.134830E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8500   0.136720E+05 0XXXXXXXXXXXXXXXXXX                                               I
+  0.8750   0.147010E+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.9000   0.156230E+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.9250   0.169900E+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.9500   0.212960E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                    I
+  0.9750   0.442080E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     I
+  1.0000   0.245000E+04 0XXX                                                              I
+  1.0250   0.620000E+02 0                                                                 I
+  1.0500   0.360000E+02 0                                                                 I
+  1.0750   0.600000E+01 0                                                                 I
+  1.1000   0.000000E+00 0                                                                 I
+  1.1250   0.000000E+00 0                                                                 I
+  1.1500   0.000000E+00 0                                                                 I
+  1.1750   0.000000E+00 0                                                                 I
+  1.2000   0.000000E+00 0                                                                 I
+  1.2250   0.000000E+00 0                                                                 I
+  1.2500   0.000000E+00 0                                                                 I
+  1.2750   0.000000E+00 0                                                                 I
+  1.3000   0.000000E+00 0                                                                 I
+  1.3250   0.000000E+00 0                                                                 I
+  1.3500   0.000000E+00 0                                                                 I
+  1.3750   0.000000E+00 0                                                                 I
+  1.4000   0.000000E+00 0                                                                 I
+  1.4250   0.000000E+00 0                                                                 I
+  1.4500   0.000000E+00 0                                                                 I
+  1.4750   0.000000E+00 0                                                                 I
+  1.5000   0.000000E+00 0                                                                 I
+  1.5250   0.000000E+00 0                                                                 I
+  1.5500   0.000000E+00 0                                                                 I
+  1.5750   0.000000E+00 0                                                                 I
+  1.6000   0.000000E+00 0                                                                 I
+  1.6250   0.000000E+00 0                                                                 I
+  1.6500   0.000000E+00 0                                                                 I
+  1.6750   0.000000E+00 0                                                                 I
+  1.7000   0.000000E+00 0                                                                 I
+  1.7250   0.000000E+00 0                                                                 I
+  1.7500   0.000000E+00 0                                                                 I
+  1.7750   0.000000E+00 0                                                                 I
+  1.8000   0.000000E+00 0                                                                 I
+  1.8250   0.000000E+00 0                                                                 I
+  1.8500   0.000000E+00 0                                                                 I
+  1.8750   0.000000E+00 0                                                                 I
+  1.9000   0.000000E+00 0                                                                 I
+  1.9250   0.000000E+00 0                                                                 I
+  1.9500   0.000000E+00 0                                                                 I
+  1.9750   0.000000E+00 0                                                                 I
diff --git a/Foam/output-DemoMCell b/Foam/output-DemoMCell
new file mode 100644
index 0000000000000000000000000000000000000000..b7347691b82df0668a82240930028a80eaf94897
--- /dev/null
+++ b/Foam/output-DemoMCell
@@ -0,0 +1,248 @@
+ ######################### MCellA_Grow #####################
+  ############## generation finished  ################################
+ -----------------------------------------------------------------------
+ -->FindWtLimit: content, <Wt>,  WtLimit=    1000000.0000000000       0.38969327878436716        1.1299999999999999     
+ -->FindWtLimit: EFFICIENCY <Wt>/WtLimit=   0.34486130865873205     
+================================================== ACTIVE CELLS ==================================================
+ iCell Stat Pare Dau1 Dau2 Side     <w>    Sig/<w>      Drive    VolTrue  
+   20    1    9   -1   -1    1    0.43011    1.66903    0.71787
+      HypCubs Posit&Size:  0.00000    0.794922    0.625000    0.512695E-01
+   30    1   28   -1   -1    1    1.03915    0.63933    0.66437
+      HypCubs Posit&Size: 0.546875    0.125000    0.195312E-010.136719    
+   37    1   23   -1   -1    1    0.26646    0.53029    0.14130
+      HypCubs Posit&Size: 0.625000     0.00000    0.375000    0.125000    
+   40    1   24   -1   -1    1    0.15268    3.62460    0.55341
+      HypCubs Posit&Size: 0.117188    0.125000    0.307617    0.683594E-01
+   46    1   18   -1   -1    1    1.59836    0.37631    0.60149
+      HypCubs Posit&Size:  0.00000    0.125000    0.292969E-010.683594E-01
+   49    1   42   -1   -1    1    0.18081    2.61251    0.47237
+      HypCubs Posit&Size: 0.292969E-010.193359    0.878906E-010.418701    
+   50    1   44   -1   -1    0    2.03509    0.53695    1.09274
+      HypCubs Posit&Size: 0.468750    0.125000    0.488281E-010.683594E-01
+   51    1   44   -1   -1    0    1.22764    0.43895    0.53887
+      HypCubs Posit&Size: 0.517578    0.125000    0.292969E-010.683594E-01
+   56    1   41   -1   -1    0    0.76393    0.41375    0.31608
+      HypCubs Posit&Size: 0.424805    0.125000    0.439453E-010.341797E-01
+   57    1   41   -1   -1    0    0.58191    0.18394    0.10704
+      HypCubs Posit&Size: 0.424805    0.159180    0.439453E-010.341797E-01
+   60    1   31   -1   -1    1    0.34731    0.49255    0.17107
+      HypCubs Posit&Size: 0.566406    0.125000    0.585938E-010.683594E-01
+   62    1   17   -1   -1    1    0.47542    5.96447    2.83565
+      HypCubs Posit&Size:  0.00000    0.748779    0.390625    0.461426E-01
+   64    1   59   -1   -1    0    1.56935    1.42689    2.23929
+      HypCubs Posit&Size: 0.595703    0.261719    0.292969E-010.256348    
+   65    1   59   -1   -1    0    0.23715    1.12137    0.26593
+      HypCubs Posit&Size: 0.595703    0.518066    0.292969E-010.153809    
+   66    1   35   -1   -1    0    0.29670    1.69204    0.50203
+      HypCubs Posit&Size: 0.468750    0.671875    0.585938E-010.769043E-01
+   67    1   35   -1   -1    0    0.28017    0.61181    0.17141
+      HypCubs Posit&Size: 0.527344    0.671875    0.976562E-010.769043E-01
+   68    1   61   -1   -1    0    1.22455    0.32958    0.40358
+      HypCubs Posit&Size: 0.566406    0.193359    0.219727E-010.683594E-01
+   69    1   61   -1   -1    0    0.40482    0.54243    0.21959
+      HypCubs Posit&Size: 0.588379    0.193359    0.366211E-010.683594E-01
+   71    1   38   -1   -1    1    0.52048    1.97989    1.03050
+      HypCubs Posit&Size: 0.125000     0.00000    0.375000    0.312500E-01
+   75    1   55   -1   -1    1    0.51488    3.54090    1.82314
+      HypCubs Posit&Size: 0.187500    0.898438E-010.312500    0.351562E-01
+   80    1   77   -1   -1    1    2.19198    0.76584    1.67871
+      HypCubs Posit&Size: 0.546875    0.466797    0.488281E-010.102539    
+   82    1   32   -1   -1    0    0.34437    1.54858    0.53328
+      HypCubs Posit&Size: 0.117188    0.193359    0.263672    0.418701    
+   83    1   32   -1   -1    0    0.18357    2.47325    0.45401
+      HypCubs Posit&Size: 0.380859    0.193359    0.878906E-010.418701    
+   84    1   36   -1   -1    1    0.46417    0.19658    0.09125
+      HypCubs Posit&Size: 0.500000     0.00000    0.125000    0.625000E-01
+   86    1   48   -1   -1    1    0.56308    0.18106    0.10195
+      HypCubs Posit&Size:  0.00000    0.193359    0.292969E-010.523376E-01
+   88    1   78   -1   -1    0    0.31214    0.80193    0.25031
+      HypCubs Posit&Size: 0.468750    0.193359    0.488281E-010.598145E-01
+   89    1   78   -1   -1    0    1.58417    0.33102    0.52440
+      HypCubs Posit&Size: 0.517578    0.193359    0.292969E-010.598145E-01
+   90    1   33   -1   -1    0    0.43822    0.80860    0.35434
+      HypCubs Posit&Size: 0.117188    0.612061    0.263672    0.598145E-01
+   91    1   33   -1   -1    0    0.24151    2.06180    0.49795
+      HypCubs Posit&Size: 0.380859    0.612061    0.878906E-010.598145E-01
+   93    1   76   -1   -1    1    7.74698    0.06987    0.54126
+      HypCubs Posit&Size: 0.589600    0.261719    0.610352E-020.205078    
+   94    1   53   -1   -1    0    0.39839    1.81518    0.72315
+      HypCubs Posit&Size: 0.648438    0.125000    0.703125E-010.546875    
+   95    1   53   -1   -1    0    0.44940    0.17349    0.07797
+      HypCubs Posit&Size: 0.648438    0.671875    0.703125E-010.328125    
+  101    1   96   -1   -1    1    0.22010    3.02941    0.66678
+      HypCubs Posit&Size: 0.517578    0.253174    0.292969E-010.314026    
+  102    1   47   -1   -1    0    0.69568    0.43242    0.30083
+      HypCubs Posit&Size: 0.292969E-010.125000    0.878906E-010.170898E-01
+  103    1   47   -1   -1    0    0.24486    1.38272    0.33857
+      HypCubs Posit&Size: 0.292969E-010.142090    0.878906E-010.512695E-01
+  104    1   21   -1   -1    0    0.58299    0.75926    0.44264
+      HypCubs Posit&Size:  0.00000    0.846191    0.625000    0.961304E-01
+  105    1   21   -1   -1    0    1.71827    0.06872    0.11808
+      HypCubs Posit&Size:  0.00000    0.942322    0.625000    0.576782E-01
+  106    1   52   -1   -1    0    0.62020    1.06851    0.66269
+      HypCubs Posit&Size: 0.625000    0.125000    0.234375E-010.437500    
+  107    1   52   -1   -1    0    0.22646    0.42465    0.09617
+      HypCubs Posit&Size: 0.625000    0.562500    0.234375E-010.437500    
+  110    1   98   -1   -1    0    0.83252    0.15481    0.12888
+      HypCubs Posit&Size:  0.00000    0.612061    0.292969E-010.224304E-01
+  111    1   98   -1   -1    0    4.18076    0.10322    0.43152
+      HypCubs Posit&Size:  0.00000    0.634491    0.292969E-010.373840E-01
+  112    1   74   -1   -1    1    0.79169    1.18450    0.93775
+      HypCubs Posit&Size: 0.187500    0.312500E-010.312500    0.146484E-01
+  114    1  109   -1   -1    0    0.59832    0.16145    0.09660
+      HypCubs Posit&Size: 0.449219    0.748779    0.878906E-010.461426E-01
+  115    1  109   -1   -1    0    1.16330    0.03405    0.03961
+      HypCubs Posit&Size: 0.537109    0.748779    0.878906E-010.461426E-01
+  116    1  100   -1   -1    0    0.76182    0.08832    0.06728
+      HypCubs Posit&Size: 0.468750    0.253174    0.488281E-010.392532E-01
+  117    1  100   -1   -1    0    0.24656    1.32303    0.32621
+      HypCubs Posit&Size: 0.468750    0.292427    0.488281E-010.274773    
+  118    1   99   -1   -1    1    0.60336    0.40019    0.24146
+      HypCubs Posit&Size: 0.292969E-010.612061    0.219727E-010.598145E-01
+  120    1   70   -1   -1    0    0.85508    0.07079    0.06053
+      HypCubs Posit&Size:  0.00000     0.00000    0.781250E-010.312500E-01
+  121    1   70   -1   -1    0    1.00743    0.07311    0.07365
+      HypCubs Posit&Size: 0.781250E-01 0.00000    0.468750E-010.312500E-01
+  123    1   73   -1   -1    1    1.42496    2.26815    3.23204
+      HypCubs Posit&Size: 0.175781    0.710327    0.292969    0.384521E-01
+  124    1  113   -1   -1    0    1.90578    1.73042    3.29781
+      HypCubs Posit&Size: 0.187500    0.458984E-010.234375    0.439453E-01
+  125    1  113   -1   -1    0    0.27504    1.24875    0.34345
+      HypCubs Posit&Size: 0.421875    0.458984E-010.781250E-010.439453E-01
+  126    1  119   -1   -1    0    0.61810    0.13517    0.08355
+      HypCubs Posit&Size: 0.512695E-010.612061    0.659180E-010.299072E-01
+  127    1  119   -1   -1    0    0.43173    0.46752    0.20184
+      HypCubs Posit&Size: 0.512695E-010.641968    0.659180E-010.299072E-01
+  128    1   92   -1   -1    0    1.57655    0.62259    0.98154
+      HypCubs Posit&Size: 0.546875    0.261719    0.427246E-010.769043E-01
+  129    1   92   -1   -1    0    0.57685    1.63370    0.94240
+      HypCubs Posit&Size: 0.546875    0.338623    0.427246E-010.128174    
+  130    1  108   -1   -1    0    1.04487    0.05982    0.06250
+      HypCubs Posit&Size: 0.390625    0.748779    0.585938E-010.115356E-01
+  131    1  108   -1   -1    0    0.70970    0.13213    0.09377
+      HypCubs Posit&Size: 0.390625    0.760315    0.585938E-010.346069E-01
+  133    1  122   -1   -1    1    2.67344    0.37432    1.00073
+      HypCubs Posit&Size: 0.395508    0.671875    0.732422E-010.384521E-01
+  134    1  132   -1   -1    0    0.33220    1.49838    0.49776
+      HypCubs Posit&Size: 0.175781    0.671875    0.192261    0.384521E-01
+  135    1  132   -1   -1    0    0.66537    0.27364    0.18207
+      HypCubs Posit&Size: 0.368042    0.671875    0.274658E-010.384521E-01
+  136    1   54   -1   -1    0    0.38410    1.54689    0.59416
+      HypCubs Posit&Size:  0.00000    0.312500E-010.187500    0.234375E-01
+  137    1   54   -1   -1    0    0.99297    3.22960    3.20688
+      HypCubs Posit&Size:  0.00000    0.546875E-010.187500    0.703125E-01
+  138    1   87   -1   -1    0    0.53171    0.28830    0.15329
+      HypCubs Posit&Size:  0.00000    0.245697    0.292969E-010.274773    
+  139    1   87   -1   -1    0    0.32234    0.44444    0.14326
+      HypCubs Posit&Size:  0.00000    0.520470    0.292969E-010.915909E-01
+  140    1   11   -1   -1    0    0.52482    0.78059    0.40967
+      HypCubs Posit&Size: 0.718750    0.125000    0.105469    0.875000    
+  141    1   11   -1   -1    0    0.72495    0.33735    0.24456
+      HypCubs Posit&Size: 0.824219    0.125000    0.175781    0.875000    
+  142    1   72   -1   -1    0    0.53260    1.07659    0.57339
+      HypCubs Posit&Size:  0.00000    0.671875    0.439453E-010.769043E-01
+  143    1   72   -1   -1    0    1.12110    2.33330    2.61587
+      HypCubs Posit&Size: 0.439453E-010.671875    0.131836    0.769043E-01
+  144    1   81   -1   -1    0    1.00553    0.45709    0.45962
+      HypCubs Posit&Size: 0.546875    0.569336    0.488281E-010.384521E-01
+  145    1   81   -1   -1    0    0.27689    0.86553    0.23966
+      HypCubs Posit&Size: 0.546875    0.607788    0.488281E-010.640869E-01
+  146    1   97   -1   -1    0    1.06074    1.21081    1.28435
+      HypCubs Posit&Size: 0.468750    0.567200    0.781250E-010.654221E-01
+  147    1   97   -1   -1    0    1.54170    0.58909    0.90820
+      HypCubs Posit&Size: 0.468750    0.632622    0.781250E-010.392532E-01
+  148    1   85   -1   -1    0    0.40472    0.31255    0.12650
+      HypCubs Posit&Size: 0.500000    0.625000E-010.312500E-010.625000E-01
+  149    1   85   -1   -1    0    0.35919    0.36935    0.13267
+      HypCubs Posit&Size: 0.531250    0.625000E-010.937500E-010.625000E-01
+All cells:    149      Active:     75    75
+Minimum and Maximum Volume/Tot*nCell=      0.03961     3.29781
+Total True Integral in active cells =   1.010859049798      1.010859049798    
+Total Driver Integ in active cells  =   1.588167046128      1.588167046128    
+True/Drive =      0.63649
+1
+      8100          WT distribution                                                                 
+           nent            sum           bmin           bmax
+        1000000    0.00000E+00    0.00000E+00    0.62950E+05
+           undf           ovef           sumw           avex
+    0.00000E+00    0.00000E+00    0.10000E+07    0.38969E+00
+  0.0000   0.000000D+00 0                                                                 I
+  0.0250   0.751100D+04 0XXXXXXX                                                          I
+  0.0500   0.421170D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                     I
+  0.0750   0.603420D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  I
+  0.1000   0.629500D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  0.1250   0.622740D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXI
+  0.1500   0.569200D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      I
+  0.1750   0.516080D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           I
+  0.2000   0.470310D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                I
+  0.2250   0.422690D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                     I
+  0.2500   0.383710D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                         I
+  0.2750   0.351070D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                             I
+  0.3000   0.320110D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                I
+  0.3250   0.292170D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                   I
+  0.3500   0.269060D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXX                                     I
+  0.3750   0.245430D+05 0XXXXXXXXXXXXXXXXXXXXXXXXX                                        I
+  0.4000   0.225580D+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.4250   0.208780D+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.4500   0.194230D+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.4750   0.181370D+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.5000   0.167940D+05 0XXXXXXXXXXXXXXXXX                                                I
+  0.5250   0.160920D+05 0XXXXXXXXXXXXXXXX                                                 I
+  0.5500   0.150960D+05 0XXXXXXXXXXXXXXX                                                  I
+  0.5750   0.145580D+05 0XXXXXXXXXXXXXXX                                                  I
+  0.6000   0.140340D+05 0XXXXXXXXXXXXXX                                                   I
+  0.6250   0.132790D+05 0XXXXXXXXXXXXX                                                    I
+  0.6500   0.127090D+05 0XXXXXXXXXXXXX                                                    I
+  0.6750   0.120420D+05 0XXXXXXXXXXXX                                                     I
+  0.7000   0.119740D+05 0XXXXXXXXXXXX                                                     I
+  0.7250   0.117020D+05 0XXXXXXXXXXXX                                                     I
+  0.7500   0.115640D+05 0XXXXXXXXXXXX                                                     I
+  0.7750   0.113910D+05 0XXXXXXXXXXX                                                      I
+  0.8000   0.115190D+05 0XXXXXXXXXXXX                                                     I
+  0.8250   0.116460D+05 0XXXXXXXXXXXX                                                     I
+  0.8500   0.119490D+05 0XXXXXXXXXXXX                                                     I
+  0.8750   0.126770D+05 0XXXXXXXXXXXXX                                                    I
+  0.9000   0.134850D+05 0XXXXXXXXXXXXXX                                                   I
+  0.9250   0.154540D+05 0XXXXXXXXXXXXXXXX                                                 I
+  0.9500   0.186640D+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.9750   0.408830D+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                       I
+  1.0000   0.207100D+04 0XX                                                               I
+  1.0250   0.112000D+03 0                                                                 I
+  1.0500   0.740000D+02 0                                                                 I
+  1.0750   0.440000D+02 0                                                                 I
+  1.1000   0.140000D+02 0                                                                 I
+  1.1250   0.000000D+00 0                                                                 I
+  1.1500   0.000000D+00 0                                                                 I
+  1.1750   0.000000D+00 0                                                                 I
+  1.2000   0.000000D+00 0                                                                 I
+  1.2250   0.000000D+00 0                                                                 I
+  1.2500   0.000000D+00 0                                                                 I
+  1.2750   0.000000D+00 0                                                                 I
+  1.3000   0.000000D+00 0                                                                 I
+  1.3250   0.000000D+00 0                                                                 I
+  1.3500   0.000000D+00 0                                                                 I
+  1.3750   0.000000D+00 0                                                                 I
+  1.4000   0.000000D+00 0                                                                 I
+  1.4250   0.000000D+00 0                                                                 I
+  1.4500   0.000000D+00 0                                                                 I
+  1.4750   0.000000D+00 0                                                                 I
+  1.5000   0.000000D+00 0                                                                 I
+  1.5250   0.000000D+00 0                                                                 I
+  1.5500   0.000000D+00 0                                                                 I
+  1.5750   0.000000D+00 0                                                                 I
+  1.6000   0.000000D+00 0                                                                 I
+  1.6250   0.000000D+00 0                                                                 I
+  1.6500   0.000000D+00 0                                                                 I
+  1.6750   0.000000D+00 0                                                                 I
+  1.7000   0.000000D+00 0                                                                 I
+  1.7250   0.000000D+00 0                                                                 I
+  1.7500   0.000000D+00 0                                                                 I
+  1.7750   0.000000D+00 0                                                                 I
+  1.8000   0.000000D+00 0                                                                 I
+  1.8250   0.000000D+00 0                                                                 I
+  1.8500   0.000000D+00 0                                                                 I
+  1.8750   0.000000D+00 0                                                                 I
+  1.9000   0.000000D+00 0                                                                 I
+  1.9250   0.000000D+00 0                                                                 I
+  1.9500   0.000000D+00 0                                                                 I
+  1.9750   0.000000D+00 0                                                                 I
diff --git a/Foam/output-DemoMCell-linux b/Foam/output-DemoMCell-linux
new file mode 100644
index 0000000000000000000000000000000000000000..4dddd83f2726a0643c45f9d6e8a79ec711d94190
--- /dev/null
+++ b/Foam/output-DemoMCell-linux
@@ -0,0 +1,247 @@
+ ######################### MCellA_Grow #####################
+ -----------------------------------------------------------------------
+ -->FindWtLimit: content, <Wt>,  WtLimit=   1000000.  0.389693279  1.13
+ -->FindWtLimit: EFFICIENCY <Wt>/WtLimit=   0.344861309
+================================================== ACTIVE CELLS ==================================================
+ iCell Stat Pare Dau1 Dau2 Side     <w>    Sig/<w>      Drive    VolTrue  
+   20    1    9   -1   -1    1    0.43011    1.66903    0.71787
+      HypCubs Posit&Size:  0.00000    0.794922    0.625000    0.512695E-01
+   30    1   28   -1   -1    1    1.03915    0.63933    0.66437
+      HypCubs Posit&Size: 0.546875    0.125000    0.195312E-010.136719    
+   37    1   23   -1   -1    1    0.26646    0.53029    0.14130
+      HypCubs Posit&Size: 0.625000     0.00000    0.375000    0.125000    
+   40    1   24   -1   -1    1    0.15268    3.62460    0.55341
+      HypCubs Posit&Size: 0.117188    0.125000    0.307617    0.683594E-01
+   46    1   18   -1   -1    1    1.59836    0.37631    0.60149
+      HypCubs Posit&Size:  0.00000    0.125000    0.292969E-010.683594E-01
+   49    1   42   -1   -1    1    0.18081    2.61251    0.47237
+      HypCubs Posit&Size: 0.292969E-010.193359    0.878906E-010.418701    
+   50    1   44   -1   -1    0    2.03509    0.53695    1.09274
+      HypCubs Posit&Size: 0.468750    0.125000    0.488281E-010.683594E-01
+   51    1   44   -1   -1    0    1.22764    0.43895    0.53887
+      HypCubs Posit&Size: 0.517578    0.125000    0.292969E-010.683594E-01
+   56    1   41   -1   -1    0    0.76393    0.41375    0.31608
+      HypCubs Posit&Size: 0.424805    0.125000    0.439453E-010.341797E-01
+   57    1   41   -1   -1    0    0.58191    0.18394    0.10704
+      HypCubs Posit&Size: 0.424805    0.159180    0.439453E-010.341797E-01
+   60    1   31   -1   -1    1    0.34731    0.49255    0.17107
+      HypCubs Posit&Size: 0.566406    0.125000    0.585938E-010.683594E-01
+   62    1   17   -1   -1    1    0.47542    5.96447    2.83565
+      HypCubs Posit&Size:  0.00000    0.748779    0.390625    0.461426E-01
+   64    1   59   -1   -1    0    1.56935    1.42689    2.23929
+      HypCubs Posit&Size: 0.595703    0.261719    0.292969E-010.256348    
+   65    1   59   -1   -1    0    0.23715    1.12137    0.26593
+      HypCubs Posit&Size: 0.595703    0.518066    0.292969E-010.153809    
+   66    1   35   -1   -1    0    0.29670    1.69204    0.50203
+      HypCubs Posit&Size: 0.468750    0.671875    0.585938E-010.769043E-01
+   67    1   35   -1   -1    0    0.28017    0.61181    0.17141
+      HypCubs Posit&Size: 0.527344    0.671875    0.976562E-010.769043E-01
+   68    1   61   -1   -1    0    1.22455    0.32958    0.40358
+      HypCubs Posit&Size: 0.566406    0.193359    0.219727E-010.683594E-01
+   69    1   61   -1   -1    0    0.40482    0.54243    0.21959
+      HypCubs Posit&Size: 0.588379    0.193359    0.366211E-010.683594E-01
+   71    1   38   -1   -1    1    0.52048    1.97989    1.03050
+      HypCubs Posit&Size: 0.125000     0.00000    0.375000    0.312500E-01
+   75    1   55   -1   -1    1    0.51488    3.54090    1.82314
+      HypCubs Posit&Size: 0.187500    0.898438E-010.312500    0.351562E-01
+   80    1   77   -1   -1    1    2.19198    0.76584    1.67871
+      HypCubs Posit&Size: 0.546875    0.466797    0.488281E-010.102539    
+   82    1   32   -1   -1    0    0.34437    1.54858    0.53328
+      HypCubs Posit&Size: 0.117188    0.193359    0.263672    0.418701    
+   83    1   32   -1   -1    0    0.18357    2.47325    0.45401
+      HypCubs Posit&Size: 0.380859    0.193359    0.878906E-010.418701    
+   84    1   36   -1   -1    1    0.46417    0.19658    0.09125
+      HypCubs Posit&Size: 0.500000     0.00000    0.125000    0.625000E-01
+   86    1   48   -1   -1    1    0.56308    0.18106    0.10195
+      HypCubs Posit&Size:  0.00000    0.193359    0.292969E-010.523376E-01
+   88    1   78   -1   -1    0    0.31214    0.80193    0.25031
+      HypCubs Posit&Size: 0.468750    0.193359    0.488281E-010.598145E-01
+   89    1   78   -1   -1    0    1.58417    0.33102    0.52440
+      HypCubs Posit&Size: 0.517578    0.193359    0.292969E-010.598145E-01
+   90    1   33   -1   -1    0    0.43822    0.80860    0.35434
+      HypCubs Posit&Size: 0.117188    0.612061    0.263672    0.598145E-01
+   91    1   33   -1   -1    0    0.24151    2.06180    0.49795
+      HypCubs Posit&Size: 0.380859    0.612061    0.878906E-010.598145E-01
+   93    1   76   -1   -1    1    7.74698    0.06987    0.54126
+      HypCubs Posit&Size: 0.589600    0.261719    0.610352E-020.205078    
+   94    1   53   -1   -1    0    0.39839    1.81518    0.72315
+      HypCubs Posit&Size: 0.648438    0.125000    0.703125E-010.546875    
+   95    1   53   -1   -1    0    0.44940    0.17349    0.07797
+      HypCubs Posit&Size: 0.648438    0.671875    0.703125E-010.328125    
+  101    1   96   -1   -1    1    0.22010    3.02941    0.66678
+      HypCubs Posit&Size: 0.517578    0.253174    0.292969E-010.314026    
+  102    1   47   -1   -1    0    0.69568    0.43242    0.30083
+      HypCubs Posit&Size: 0.292969E-010.125000    0.878906E-010.170898E-01
+  103    1   47   -1   -1    0    0.24486    1.38272    0.33857
+      HypCubs Posit&Size: 0.292969E-010.142090    0.878906E-010.512695E-01
+  104    1   21   -1   -1    0    0.58299    0.75926    0.44264
+      HypCubs Posit&Size:  0.00000    0.846191    0.625000    0.961304E-01
+  105    1   21   -1   -1    0    1.71827    0.06872    0.11808
+      HypCubs Posit&Size:  0.00000    0.942322    0.625000    0.576782E-01
+  106    1   52   -1   -1    0    0.62020    1.06851    0.66269
+      HypCubs Posit&Size: 0.625000    0.125000    0.234375E-010.437500    
+  107    1   52   -1   -1    0    0.22646    0.42465    0.09617
+      HypCubs Posit&Size: 0.625000    0.562500    0.234375E-010.437500    
+  110    1   98   -1   -1    0    0.83252    0.15481    0.12888
+      HypCubs Posit&Size:  0.00000    0.612061    0.292969E-010.224304E-01
+  111    1   98   -1   -1    0    4.18076    0.10322    0.43152
+      HypCubs Posit&Size:  0.00000    0.634491    0.292969E-010.373840E-01
+  112    1   74   -1   -1    1    0.79169    1.18450    0.93775
+      HypCubs Posit&Size: 0.187500    0.312500E-010.312500    0.146484E-01
+  114    1  109   -1   -1    0    0.59832    0.16145    0.09660
+      HypCubs Posit&Size: 0.449219    0.748779    0.878906E-010.461426E-01
+  115    1  109   -1   -1    0    1.16330    0.03405    0.03961
+      HypCubs Posit&Size: 0.537109    0.748779    0.878906E-010.461426E-01
+  116    1  100   -1   -1    0    0.76182    0.08832    0.06728
+      HypCubs Posit&Size: 0.468750    0.253174    0.488281E-010.392532E-01
+  117    1  100   -1   -1    0    0.24656    1.32303    0.32621
+      HypCubs Posit&Size: 0.468750    0.292427    0.488281E-010.274773    
+  118    1   99   -1   -1    1    0.60336    0.40019    0.24146
+      HypCubs Posit&Size: 0.292969E-010.612061    0.219727E-010.598145E-01
+  120    1   70   -1   -1    0    0.85508    0.07079    0.06053
+      HypCubs Posit&Size:  0.00000     0.00000    0.781250E-010.312500E-01
+  121    1   70   -1   -1    0    1.00743    0.07311    0.07365
+      HypCubs Posit&Size: 0.781250E-01 0.00000    0.468750E-010.312500E-01
+  123    1   73   -1   -1    1    1.42496    2.26815    3.23204
+      HypCubs Posit&Size: 0.175781    0.710327    0.292969    0.384521E-01
+  124    1  113   -1   -1    0    1.90578    1.73042    3.29781
+      HypCubs Posit&Size: 0.187500    0.458984E-010.234375    0.439453E-01
+  125    1  113   -1   -1    0    0.27504    1.24875    0.34345
+      HypCubs Posit&Size: 0.421875    0.458984E-010.781250E-010.439453E-01
+  126    1  119   -1   -1    0    0.61810    0.13517    0.08355
+      HypCubs Posit&Size: 0.512695E-010.612061    0.659180E-010.299072E-01
+  127    1  119   -1   -1    0    0.43173    0.46752    0.20184
+      HypCubs Posit&Size: 0.512695E-010.641968    0.659180E-010.299072E-01
+  128    1   92   -1   -1    0    1.57655    0.62259    0.98154
+      HypCubs Posit&Size: 0.546875    0.261719    0.427246E-010.769043E-01
+  129    1   92   -1   -1    0    0.57685    1.63370    0.94240
+      HypCubs Posit&Size: 0.546875    0.338623    0.427246E-010.128174    
+  130    1  108   -1   -1    0    1.04487    0.05982    0.06250
+      HypCubs Posit&Size: 0.390625    0.748779    0.585938E-010.115356E-01
+  131    1  108   -1   -1    0    0.70970    0.13213    0.09377
+      HypCubs Posit&Size: 0.390625    0.760315    0.585938E-010.346069E-01
+  133    1  122   -1   -1    1    2.67344    0.37432    1.00073
+      HypCubs Posit&Size: 0.395508    0.671875    0.732422E-010.384521E-01
+  134    1  132   -1   -1    0    0.33220    1.49838    0.49776
+      HypCubs Posit&Size: 0.175781    0.671875    0.192261    0.384521E-01
+  135    1  132   -1   -1    0    0.66537    0.27364    0.18207
+      HypCubs Posit&Size: 0.368042    0.671875    0.274658E-010.384521E-01
+  136    1   54   -1   -1    0    0.38410    1.54689    0.59416
+      HypCubs Posit&Size:  0.00000    0.312500E-010.187500    0.234375E-01
+  137    1   54   -1   -1    0    0.99297    3.22960    3.20688
+      HypCubs Posit&Size:  0.00000    0.546875E-010.187500    0.703125E-01
+  138    1   87   -1   -1    0    0.53171    0.28830    0.15329
+      HypCubs Posit&Size:  0.00000    0.245697    0.292969E-010.274773    
+  139    1   87   -1   -1    0    0.32234    0.44444    0.14326
+      HypCubs Posit&Size:  0.00000    0.520470    0.292969E-010.915909E-01
+  140    1   11   -1   -1    0    0.52482    0.78059    0.40967
+      HypCubs Posit&Size: 0.718750    0.125000    0.105469    0.875000    
+  141    1   11   -1   -1    0    0.72495    0.33735    0.24456
+      HypCubs Posit&Size: 0.824219    0.125000    0.175781    0.875000    
+  142    1   72   -1   -1    0    0.53260    1.07659    0.57339
+      HypCubs Posit&Size:  0.00000    0.671875    0.439453E-010.769043E-01
+  143    1   72   -1   -1    0    1.12110    2.33330    2.61587
+      HypCubs Posit&Size: 0.439453E-010.671875    0.131836    0.769043E-01
+  144    1   81   -1   -1    0    1.00553    0.45709    0.45962
+      HypCubs Posit&Size: 0.546875    0.569336    0.488281E-010.384521E-01
+  145    1   81   -1   -1    0    0.27689    0.86553    0.23966
+      HypCubs Posit&Size: 0.546875    0.607788    0.488281E-010.640869E-01
+  146    1   97   -1   -1    0    1.06074    1.21081    1.28435
+      HypCubs Posit&Size: 0.468750    0.567200    0.781250E-010.654221E-01
+  147    1   97   -1   -1    0    1.54170    0.58909    0.90820
+      HypCubs Posit&Size: 0.468750    0.632622    0.781250E-010.392532E-01
+  148    1   85   -1   -1    0    0.40472    0.31255    0.12650
+      HypCubs Posit&Size: 0.500000    0.625000E-010.312500E-010.625000E-01
+  149    1   85   -1   -1    0    0.35919    0.36935    0.13267
+      HypCubs Posit&Size: 0.531250    0.625000E-010.937500E-010.625000E-01
+All cells:    149      Active:     75    75
+Minimum and Maximum Volume/Tot*nCell=      0.03961     3.29781
+Total True Integral in active cells =   1.010859049798      1.010859049798    
+Total Driver Integ in active cells  =   1.588167046128      1.588167046128    
+True/Drive =      0.63649
+1
+      8100          WT distribution                                                                 
+           nent            sum           bmin           bmax
+        1000000    0.00000E+00    0.00000E+00    0.62950E+05
+           undf           ovef           sumw           avex
+    0.00000E+00    0.00000E+00    0.10000E+07    0.38969E+00
+  0.0000   0.000000E+00 0                                                                 I
+  0.0250   0.751100E+04 0XXXXXXX                                                          I
+  0.0500   0.421170E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                     I
+  0.0750   0.603420E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  I
+  0.1000   0.629500E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+  0.1250   0.622740E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXI
+  0.1500   0.569200E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      I
+  0.1750   0.516080E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           I
+  0.2000   0.470310E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                I
+  0.2250   0.422690E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                     I
+  0.2500   0.383710E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                         I
+  0.2750   0.351070E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                             I
+  0.3000   0.320110E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                I
+  0.3250   0.292170E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                   I
+  0.3500   0.269060E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXX                                     I
+  0.3750   0.245430E+05 0XXXXXXXXXXXXXXXXXXXXXXXXX                                        I
+  0.4000   0.225580E+05 0XXXXXXXXXXXXXXXXXXXXXXX                                          I
+  0.4250   0.208780E+05 0XXXXXXXXXXXXXXXXXXXXX                                            I
+  0.4500   0.194230E+05 0XXXXXXXXXXXXXXXXXXXX                                             I
+  0.4750   0.181370E+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.5000   0.167940E+05 0XXXXXXXXXXXXXXXXX                                                I
+  0.5250   0.160920E+05 0XXXXXXXXXXXXXXXX                                                 I
+  0.5500   0.150960E+05 0XXXXXXXXXXXXXXX                                                  I
+  0.5750   0.145580E+05 0XXXXXXXXXXXXXXX                                                  I
+  0.6000   0.140340E+05 0XXXXXXXXXXXXXX                                                   I
+  0.6250   0.132790E+05 0XXXXXXXXXXXXX                                                    I
+  0.6500   0.127090E+05 0XXXXXXXXXXXXX                                                    I
+  0.6750   0.120420E+05 0XXXXXXXXXXXX                                                     I
+  0.7000   0.119740E+05 0XXXXXXXXXXXX                                                     I
+  0.7250   0.117020E+05 0XXXXXXXXXXXX                                                     I
+  0.7500   0.115640E+05 0XXXXXXXXXXXX                                                     I
+  0.7750   0.113910E+05 0XXXXXXXXXXX                                                      I
+  0.8000   0.115190E+05 0XXXXXXXXXXXX                                                     I
+  0.8250   0.116460E+05 0XXXXXXXXXXXX                                                     I
+  0.8500   0.119490E+05 0XXXXXXXXXXXX                                                     I
+  0.8750   0.126770E+05 0XXXXXXXXXXXXX                                                    I
+  0.9000   0.134850E+05 0XXXXXXXXXXXXXX                                                   I
+  0.9250   0.154540E+05 0XXXXXXXXXXXXXXXX                                                 I
+  0.9500   0.186640E+05 0XXXXXXXXXXXXXXXXXXX                                              I
+  0.9750   0.408830E+05 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                       I
+  1.0000   0.207100E+04 0XX                                                               I
+  1.0250   0.112000E+03 0                                                                 I
+  1.0500   0.740000E+02 0                                                                 I
+  1.0750   0.440000E+02 0                                                                 I
+  1.1000   0.140000E+02 0                                                                 I
+  1.1250   0.000000E+00 0                                                                 I
+  1.1500   0.000000E+00 0                                                                 I
+  1.1750   0.000000E+00 0                                                                 I
+  1.2000   0.000000E+00 0                                                                 I
+  1.2250   0.000000E+00 0                                                                 I
+  1.2500   0.000000E+00 0                                                                 I
+  1.2750   0.000000E+00 0                                                                 I
+  1.3000   0.000000E+00 0                                                                 I
+  1.3250   0.000000E+00 0                                                                 I
+  1.3500   0.000000E+00 0                                                                 I
+  1.3750   0.000000E+00 0                                                                 I
+  1.4000   0.000000E+00 0                                                                 I
+  1.4250   0.000000E+00 0                                                                 I
+  1.4500   0.000000E+00 0                                                                 I
+  1.4750   0.000000E+00 0                                                                 I
+  1.5000   0.000000E+00 0                                                                 I
+  1.5250   0.000000E+00 0                                                                 I
+  1.5500   0.000000E+00 0                                                                 I
+  1.5750   0.000000E+00 0                                                                 I
+  1.6000   0.000000E+00 0                                                                 I
+  1.6250   0.000000E+00 0                                                                 I
+  1.6500   0.000000E+00 0                                                                 I
+  1.6750   0.000000E+00 0                                                                 I
+  1.7000   0.000000E+00 0                                                                 I
+  1.7250   0.000000E+00 0                                                                 I
+  1.7500   0.000000E+00 0                                                                 I
+  1.7750   0.000000E+00 0                                                                 I
+  1.8000   0.000000E+00 0                                                                 I
+  1.8250   0.000000E+00 0                                                                 I
+  1.8500   0.000000E+00 0                                                                 I
+  1.8750   0.000000E+00 0                                                                 I
+  1.9000   0.000000E+00 0                                                                 I
+  1.9250   0.000000E+00 0                                                                 I
+  1.9500   0.000000E+00 0                                                                 I
+  1.9750   0.000000E+00 0                                                                 I
diff --git a/Foam/ranlux.f b/Foam/ranlux.f
new file mode 100644
index 0000000000000000000000000000000000000000..af23d9b59be0e0ac8d027a74f9b661e85825a8ec
--- /dev/null
+++ b/Foam/ranlux.f
@@ -0,0 +1,309 @@
+*
+* $Id: ranlux.f,v 1.1.1.1 2000/10/26 19:49:41 jadach Exp $
+*
+* $Log: ranlux.f,v $
+* Revision 1.1.1.1  2000/10/26 19:49:41  jadach
+* starting version
+*
+* Revision 1.1.1.1  1996/04/01 15:02:55  mclareni
+* Mathlib gen
+*
+*
+Cgs #include "gen/pilot.h"
+Cgs #include "pilot.h"
+      SUBROUTINE RANLUX(RVEC,LENV)
+C         Subtract-and-borrow random number generator proposed by
+C         Marsaglia and Zaman, implemented by F. James with the name
+C         RCARRY in 1991, and later improved by Martin Luescher
+C         in 1993 to produce "Luxury Pseudorandom Numbers".
+C     Fortran 77 coded by F. James, 1993
+C
+C   LUXURY LEVELS.
+C   ------ ------      The available luxury levels are:
+C
+C  level 0  (p=24): equivalent to the original RCARRY of Marsaglia
+C           and Zaman, very long period, but fails many tests.
+C  level 1  (p=48): considerable improvement in quality over level 0,
+C           now passes the gap test, but still fails spectral test.
+C  level 2  (p=97): passes all known tests, but theoretically still
+C           defective.
+C  level 3  (p=223): DEFAULT VALUE.  Any theoretically possible
+C           correlations have very small chance of being observed.
+C  level 4  (p=389): highest possible luxury, all 24 bits chaotic.
+C
+C!!! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+C!!!  Calling sequences for RANLUX:                                  ++
+C!!!      CALL RANLUX (RVEC, LEN)   returns a vector RVEC of LEN     ++
+C!!!                   32-bit random floating point numbers between  ++
+C!!!                   zero (not included) and one (also not incl.). ++
+C!!!      CALL RLUXGO(LUX,INT,K1,K2) initializes the generator from  ++
+C!!!               one 32-bit integer INT and sets Luxury Level LUX  ++
+C!!!               which is integer between zero and MAXLEV, or if   ++
+C!!!               LUX .GT. 24, it sets p=LUX directly.  K1 and K2   ++
+C!!!               should be set to zero unless restarting at a break++ 
+C!!!               point given by output of RLUXAT (see RLUXAT).     ++
+C!!!      CALL RLUXAT(LUX,INT,K1,K2) gets the values of four integers++
+C!!!               which can be used to restart the RANLUX generator ++
+C!!!               at the current point by calling RLUXGO.  K1 and K2++
+C!!!               specify how many numbers were generated since the ++
+C!!!               initialization with LUX and INT.  The restarting  ++
+C!!!               skips over  K1+K2*E9   numbers, so it can be long.++
+C!!!   A more efficient but less convenient way of restarting is by: ++
+C!!!      CALL RLUXIN(ISVEC)    restarts the generator from vector   ++
+C!!!                   ISVEC of 25 32-bit integers (see RLUXUT)      ++
+C!!!      CALL RLUXUT(ISVEC)    outputs the current values of the 25 ++
+C!!!                 32-bit integer seeds, to be used for restarting ++
+C!!!      ISVEC must be dimensioned 25 in the calling program        ++
+C!!! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      DIMENSION RVEC(LENV)
+      DIMENSION SEEDS(24), ISEEDS(24), ISDEXT(25)
+      PARAMETER (MAXLEV=4, LXDFLT=3)
+      DIMENSION NDSKIP(0:MAXLEV)
+      DIMENSION NEXT(24)
+      PARAMETER (TWOP12=4096., IGIGA=1000000000,JSDFLT=314159265)
+      PARAMETER (ITWO24=2**24, ICONS=2147483563)
+      SAVE NOTYET, I24, J24, CARRY, SEEDS, TWOM24, TWOM12, LUXLEV
+      SAVE NSKIP, NDSKIP, IN24, NEXT, KOUNT, MKOUNT, INSEED
+      INTEGER LUXLEV
+      LOGICAL NOTYET
+      DATA NOTYET, LUXLEV, IN24, KOUNT, MKOUNT /.TRUE., LXDFLT, 0,0,0/
+      DATA I24,J24,CARRY/24,10,0./
+C                               default
+C  Luxury Level   0     1     2   *3*    4
+      DATA NDSKIP/0,   24,   73,  199,  365 /
+Corresponds to p=24    48    97   223   389
+C     time factor 1     2     3     6    10   on slow workstation
+C                 1    1.5    2     3     5   on fast mainframe
+C
+C  NOTYET is .TRUE. if no initialization has been performed yet.
+C              Default Initialization by Multiplicative Congruential
+      IF (NOTYET) THEN
+         NOTYET = .FALSE.
+         JSEED = JSDFLT  
+         INSEED = JSEED
+         WRITE(6,'(A,I12)') ' RANLUX DEFAULT INITIALIZATION: ',JSEED
+         LUXLEV = LXDFLT
+         NSKIP = NDSKIP(LUXLEV)
+         LP = NSKIP + 24
+         IN24 = 0
+         KOUNT = 0
+         MKOUNT = 0
+         WRITE(6,'(A,I2,A,I4)')  ' RANLUX DEFAULT LUXURY LEVEL =  ',
+     +        LUXLEV,'      p =',LP
+            TWOM24 = 1.
+         DO 25 I= 1, 24
+            TWOM24 = TWOM24 * 0.5
+         K = JSEED/53668
+         JSEED = 40014*(JSEED-K*53668) -K*12211
+         IF (JSEED .LT. 0)  JSEED = JSEED+ICONS
+         ISEEDS(I) = MOD(JSEED,ITWO24)
+   25    CONTINUE
+         TWOM12 = TWOM24 * 4096.
+         DO 50 I= 1,24
+         SEEDS(I) = REAL(ISEEDS(I))*TWOM24
+         NEXT(I) = I-1
+   50    CONTINUE
+         NEXT(1) = 24
+         I24 = 24
+         J24 = 10
+         CARRY = 0.
+         IF (SEEDS(24) .EQ. 0.) CARRY = TWOM24
+      ENDIF
+C
+C          The Generator proper: "Subtract-with-borrow",
+C          as proposed by Marsaglia and Zaman,
+C          Florida State University, March, 1989
+C
+      DO 100 IVEC= 1, LENV
+      UNI = SEEDS(J24) - SEEDS(I24) - CARRY 
+      IF (UNI .LT. 0.)  THEN
+         UNI = UNI + 1.0
+         CARRY = TWOM24
+      ELSE
+         CARRY = 0.
+      ENDIF
+      SEEDS(I24) = UNI
+      I24 = NEXT(I24)
+      J24 = NEXT(J24)
+      RVEC(IVEC) = UNI
+C  small numbers (with less than 12 "significant" bits) are "padded".
+      IF (UNI .LT. TWOM12)  THEN
+         RVEC(IVEC) = RVEC(IVEC) + TWOM24*SEEDS(J24)
+C        and zero is forbidden in case someone takes a logarithm
+         IF (RVEC(IVEC) .EQ. 0.)  RVEC(IVEC) = TWOM24*TWOM24
+      ENDIF
+C        Skipping to luxury.  As proposed by Martin Luscher.
+      IN24 = IN24 + 1
+      IF (IN24 .EQ. 24)  THEN
+         IN24 = 0
+         KOUNT = KOUNT + NSKIP
+         DO 90 ISK= 1, NSKIP
+         UNI = SEEDS(J24) - SEEDS(I24) - CARRY
+         IF (UNI .LT. 0.)  THEN
+            UNI = UNI + 1.0
+            CARRY = TWOM24
+         ELSE
+            CARRY = 0.
+         ENDIF
+         SEEDS(I24) = UNI
+         I24 = NEXT(I24)
+         J24 = NEXT(J24)
+   90    CONTINUE
+      ENDIF
+  100 CONTINUE
+      KOUNT = KOUNT + LENV
+      IF (KOUNT .GE. IGIGA)  THEN
+         MKOUNT = MKOUNT + 1
+         KOUNT = KOUNT - IGIGA
+      ENDIF
+      RETURN
+C
+C           Entry to input and float integer seeds from previous run
+      ENTRY RLUXIN(ISDEXT)
+         NOTYET = .FALSE.
+         TWOM24 = 1.
+         DO 195 I= 1, 24
+         NEXT(I) = I-1
+  195    TWOM24 = TWOM24 * 0.5
+         NEXT(1) = 24
+         TWOM12 = TWOM24 * 4096.
+      WRITE(6,'(A)') ' FULL INITIALIZATION OF RANLUX WITH 25 INTEGERS:'
+      WRITE(6,'(5X,5I12)') ISDEXT
+      DO 200 I= 1, 24
+      SEEDS(I) = REAL(ISDEXT(I))*TWOM24
+  200 CONTINUE
+      CARRY = 0.
+      IF (ISDEXT(25) .LT. 0)  CARRY = TWOM24
+      ISD = IABS(ISDEXT(25))
+      I24 = MOD(ISD,100)
+      ISD = ISD/100
+      J24 = MOD(ISD,100)
+      ISD = ISD/100
+      IN24 = MOD(ISD,100)
+      ISD = ISD/100
+      LUXLEV = ISD
+        IF (LUXLEV .LE. MAXLEV) THEN
+          NSKIP = NDSKIP(LUXLEV)
+          WRITE (6,'(A,I2)') ' RANLUX LUXURY LEVEL SET BY RLUXIN TO: ',
+     +                         LUXLEV
+        ELSE  IF (LUXLEV .GE. 24) THEN
+          NSKIP = LUXLEV - 24
+          WRITE (6,'(A,I5)') ' RANLUX P-VALUE SET BY RLUXIN TO:',LUXLEV
+        ELSE
+          NSKIP = NDSKIP(MAXLEV)
+          WRITE (6,'(A,I5)') ' RANLUX ILLEGAL LUXURY RLUXIN: ',LUXLEV
+          LUXLEV = MAXLEV
+        ENDIF
+      INSEED = -1
+      RETURN
+C
+C                    Entry to ouput seeds as integers
+      ENTRY RLUXUT(ISDEXT)
+      DO 300 I= 1, 24
+         ISDEXT(I) = INT(SEEDS(I)*TWOP12*TWOP12)
+  300 CONTINUE
+      ISDEXT(25) = I24 + 100*J24 + 10000*IN24 + 1000000*LUXLEV
+      IF (CARRY .GT. 0.)  ISDEXT(25) = -ISDEXT(25)
+      RETURN
+C
+C                    Entry to output the "convenient" restart point
+      ENTRY RLUXAT(LOUT,INOUT,K1,K2)
+      LOUT = LUXLEV
+      INOUT = INSEED
+      K1 = KOUNT
+      K2 = MKOUNT
+      RETURN
+C
+C                    Entry to initialize from one or three integers
+      ENTRY RLUXGO(LUX,INS,K1,K2)
+         IF (LUX .LT. 0) THEN
+            LUXLEV = LXDFLT
+         ELSE IF (LUX .LE. MAXLEV) THEN
+            LUXLEV = LUX
+         ELSE IF (LUX .LT. 24 .OR. LUX .GT. 2000) THEN
+            LUXLEV = MAXLEV
+            WRITE (6,'(A,I7)') ' RANLUX ILLEGAL LUXURY RLUXGO: ',LUX
+         ELSE
+            LUXLEV = LUX
+            DO 310 ILX= 0, MAXLEV
+              IF (LUX .EQ. NDSKIP(ILX)+24)  LUXLEV = ILX
+  310       CONTINUE
+         ENDIF
+      IF (LUXLEV .LE. MAXLEV)  THEN
+         NSKIP = NDSKIP(LUXLEV)
+         WRITE(6,'(A,I2,A,I4)') ' RANLUX LUXURY LEVEL SET BY RLUXGO :',
+     +        LUXLEV,'     P=', NSKIP+24
+      ELSE
+          NSKIP = LUXLEV - 24
+          WRITE (6,'(A,I5)') ' RANLUX P-VALUE SET BY RLUXGO TO:',LUXLEV
+      ENDIF
+      IN24 = 0
+      IF (INS .LT. 0)  WRITE (6,'(A)')   
+     +   ' Illegal initialization by RLUXGO, negative input seed'
+      IF (INS .GT. 0)  THEN
+        JSEED = INS
+        WRITE(6,'(A,3I12)') ' RANLUX INITIALIZED BY RLUXGO FROM SEEDS',
+     +      JSEED, K1,K2
+      ELSE
+        JSEED = JSDFLT
+        WRITE(6,'(A)')' RANLUX INITIALIZED BY RLUXGO FROM DEFAULT SEED'
+      ENDIF
+      INSEED = JSEED
+      NOTYET = .FALSE.
+      TWOM24 = 1.
+         DO 325 I= 1, 24
+           TWOM24 = TWOM24 * 0.5
+         K = JSEED/53668
+         JSEED = 40014*(JSEED-K*53668) -K*12211
+         IF (JSEED .LT. 0)  JSEED = JSEED+ICONS
+         ISEEDS(I) = MOD(JSEED,ITWO24)
+  325    CONTINUE
+      TWOM12 = TWOM24 * 4096.
+         DO 350 I= 1,24
+         SEEDS(I) = REAL(ISEEDS(I))*TWOM24
+         NEXT(I) = I-1
+  350    CONTINUE
+      NEXT(1) = 24
+      I24 = 24
+      J24 = 10
+      CARRY = 0.
+      IF (SEEDS(24) .EQ. 0.) CARRY = TWOM24
+C        If restarting at a break point, skip K1 + IGIGA*K2
+C        Note that this is the number of numbers delivered to
+C        the user PLUS the number skipped (if luxury .GT. 0).
+      KOUNT = K1
+      MKOUNT = K2
+      IF (K1+K2 .NE. 0)  THEN
+        DO 500 IOUTER= 1, K2+1
+          INNER = IGIGA
+          IF (IOUTER .EQ. K2+1)  INNER = K1
+          DO 450 ISK= 1, INNER
+            UNI = SEEDS(J24) - SEEDS(I24) - CARRY 
+            IF (UNI .LT. 0.)  THEN
+               UNI = UNI + 1.0
+               CARRY = TWOM24
+            ELSE
+               CARRY = 0.
+            ENDIF
+            SEEDS(I24) = UNI
+            I24 = NEXT(I24)
+            J24 = NEXT(J24)
+  450     CONTINUE
+  500   CONTINUE
+C         Get the right value of IN24 by direct calculation
+        IN24 = MOD(KOUNT, NSKIP+24)
+        IF (MKOUNT .GT. 0)  THEN
+           IZIP = MOD(IGIGA, NSKIP+24)
+           IZIP2 = MKOUNT*IZIP + IN24
+           IN24 = MOD(IZIP2, NSKIP+24)
+        ENDIF
+C       Now IN24 had better be between zero and 23 inclusive
+        IF (IN24 .GT. 23) THEN
+           WRITE (6,'(A/A,3I11,A,I5)')  
+     +    '  Error in RESTARTING with RLUXGO:','  The values', INS,
+     +     K1, K2, ' cannot occur at luxury level', LUXLEV
+           IN24 = 0
+        ENDIF
+      ENDIF
+      RETURN
+      END
diff --git a/Vegas/nvegas.c b/Vegas/nvegas.c
index da61b85c152c42685c2922331a2baf4a44068eee..1a08f6162e0a0e759bfb2147cc6c9d6296ce4d25 100755
--- a/Vegas/nvegas.c
+++ b/Vegas/nvegas.c
@@ -4,7 +4,7 @@
  *   Implementation of G.P.Lepage's VEGAS-algorithm.
  *
  * SYNOPSIS
- *   void vegas(double regn[], int ndim, void (*fxn)(double x[], double f[]),
+ *   void nvegas(double regn[], int ndim, void (*fxn)(double x[], double f[]),
  *              int init, unsigned long ncall, int itmx, int nprn,
  *              int fcns, int pdim, int wrks,
  *              double tgral[], double sd[], double chi2a[]);
@@ -155,7 +155,7 @@ void gfsr_init(long seed)
 
 
 
-void vegas_(double regn[], int *ndim_in, void (*fxn)(double x[], double *wgt, double f[]),
+void nvegas_(double regn[], int *ndim_in, void (*fxn)(double x[], double *wgt, double f[]),
            int *init_in, int *ncall_in, int *itmx_in, int *nprn_in,
            int *fcns_in, int *pdim_in, int *wrks_in,
            double tgral[], double sd[], double chi2a[])
diff --git a/main.f90 b/main.f90
index 105b8b843065c107e9aa0b3a98d5422cef5d07b0..aa86889187a0bd4bb6bea84f786cb990ec25acdd 100755
--- a/main.f90
+++ b/main.f90
@@ -14,7 +14,7 @@ use ModKinematics
 use ifport
 #endif
 implicit none
-real(8) :: VG_Result,VG_Error,chi2
+real(8) :: MC_Result,MC_Error,chi2
 #if UseMPIVegas==1
 include 'mpif.h'
 integer ::ierror
@@ -142,11 +142,11 @@ use ModMisc
    use COLLIER
 #endif
 implicit none
-real(8) :: VG_Result,VG_Error,VG_Chi2
+real(8) :: MC_Result,MC_Error,MC_Chi2
 #if UseMPIVegas==1
 include 'mpif.h'
 #endif
-integer i,NDim,Nmax,rmax
+integer i,NDim,Nmax,rmax,NEVAL,IFAIL,iinit
 real(8) :: yrange(1:2*MXDIM)
 complex(8) :: qlI3,qlI4,Int
 real(8) :: shat,that,uhat,vhat,what,zhat
@@ -158,7 +158,10 @@ double complex :: DD1UV(0:rank/2,0:rank,0:rank,0:rank)
 double complex :: DE1(0:rank/2,0:rank,0:rank,0:rank,0:rank)
 double complex :: DE1UV(0:rank/2,0:rank,0:rank,0:rank,0:rank)
 real(8) :: Eerr(0:rank),MomInv(1:10)
-
+INTEGER, PARAMETER :: NW=10000000
+REAL(8) :: WORK(1:NW)
+integer ::  userdata, nvec, flags, mineval, maxeval, key,  spin, nbatch, gridno,nnew, nmin,nregions
+double precision :: epsrel, epsabs, flatness
 
 
   ndim=4
@@ -235,9 +238,9 @@ endif
   itmx  = VegasIt0
   init=.false.
 #if UseMPIVegas==1
-  call vegas_mpi(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,VG_Result,VG_Error,VG_Chi2)
+!   call vegas_mpi(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,MC_Result,MC_Error,MC_Chi2)
 #else
-  call vegas(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,VG_Result,VG_Error,VG_Chi2)
+!   call nvegas(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,MC_Result,MC_Error,MC_Chi2)
 #endif
 
 
@@ -246,27 +249,70 @@ endif
   itmx  = VegasIt1
   init=.true.
 #if UseMPIVegas==1
-  call vegas_mpi(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,VG_Result,VG_Error,VG_Chi2)
+!   call vegas_mpi(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,MC_Result,MC_Error,MC_Chi2)
 #else
-  call vegas(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,VG_Result,VG_Error,VG_Chi2)
+!   call nvegas(yrange(1:2*ndim),ndim,VegasIntegrand1,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,MC_Result,MC_Error,MC_Chi2)
 #endif
 
- print *, "ratio ",VG_Result/dreal(Int)
+ print *, "ratio ",MC_Result/dreal(Int)
+
+! write(13,*) kEFix*100d0,MC_Result,MC_Error
+! write(14,*) kEFix*100d0,MC_Result,MC_Error
+
+
+
+
+
+
+
+
+
+
+! 
+! ncall = VegasNc0*VegasIt0+VegasNc1*VegasIt1
+! iinit=0
+! call DCUHRE(ndim,NUMFUNCTIONS,yrange(1:4),yrange(5:8),ncall/10,ncall,VegasIntegrand1_DCUHRE,0d0,1d-6,0,NW,iinit,MC_result,MC_error,NEVAL,IFAIL,WORK)
+! 
+! 
+! print *, "cuhre ",i, MC_result,MC_error,NEVAL,IFAIL
+! print *, "ratio ",MC_Result/dreal(Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ncall = VegasNc0*VegasIt0+VegasNc1*VegasIt1
+
+ncall = 20000000
+
+userdata = 0 
+nvec =1 
+epsrel = 1d-5
+epsabs = 0d0
+flags = 0 
+key =  9 
+spin = -1
+
+call cuhre(ndim, NUMFUNCTIONS, VegasIntegrand1_CUBA, userdata, nvec, epsrel, epsabs, flags, ncall/2,ncall ,key, "", spin,nregions, NEVAL, IFAIL, MC_result,MC_error, MC_Chi2)
+
+print *, "cuba cuhre",MC_result,MC_error,NEVAL,IFAIL
 
-! write(13,*) kEFix*100d0,VG_Result,VG_Error
-! write(14,*) kEFix*100d0,VG_Result,VG_Error
 
 
+print *, "cuba cuhre ",i, MC_result,MC_error,NEVAL,IFAIL
+print *, "ratio ",MC_Result/dreal(Int)
 
-! print *, ""
-! call cuhre(yrange(1:2*ndim),ndim,VegasIntegrand1_DCUHRE,init,ncall,itmx,nprn,NUMFUNCTIONS,PDIM,WORKERS,VG_Result,VG_Error,VG_Chi2)
-! print *, "cuhre ",VG_Result,VG_Error
-! print *, "ratio ",VG_Result/dreal(Int)
-! stop
 
 
 
-! enddo
 
 
 return
@@ -451,7 +497,7 @@ END SUBROUTINE
 
 
 
-SUBROUTINE WriteHisto(TheUnit,curit,VG_CurrResult,VG_CurrError,VG_Result,VG_Error,Chi2,RunTime)
+SUBROUTINE WriteHisto(TheUnit,curit,VG_CurrResult,VG_CurrError,MC_Result,MC_Error,Chi2,RunTime)
 use ModKinematics
 use ModParameters
 implicit none
@@ -459,7 +505,7 @@ integer :: NBin,Hits,NHisto,SumHits,TheUnit,curit,NBin2,NBin3,NHisto2
 real(8) :: BinSize,LowVal,BinVal,Value,Error,Integral
 real(8) :: BinSize2,BinSize3,LowVal2,LowVal3,BinVal2,BinVal3
 real(8),parameter :: ToGeV=1d2, ToPb=1d-3
-real(8) :: VG_Result,VG_Error,RunTime,VG_CurrResult,VG_CurrError,Chi2
+real(8) :: MC_Result,MC_Error,RunTime,VG_CurrResult,VG_CurrError,Chi2
 character :: filename*(200),arg*(500)
 integer, save :: Prev_Process=-1313999
 
@@ -484,7 +530,7 @@ integer, save :: Prev_Process=-1313999
         open(unit=TheUnit+1,file=trim(filename),form='formatted',access= 'sequential',status='old',position='append')   ! status file
         if( curit.eq.1 ) write(TheUnit+1,'(A1,1X,A)') "#","-------------------------------------------------------------------------------------------------"
     endif
-    if( curit.gt.0 ) write(TheUnit+1,'(A1,1X,I3,4E20.8,F12.2)') "#",curit,VG_CurrResult,VG_CurrError,VG_Result,VG_Error,Chi2
+    if( curit.gt.0 ) write(TheUnit+1,'(A1,1X,I3,4E20.8,F12.2)') "#",curit,VG_CurrResult,VG_CurrError,MC_Result,MC_Error,Chi2
   endif
 
   call WriteParameters(TheUnit)
@@ -492,7 +538,7 @@ integer, save :: Prev_Process=-1313999
   write(TheUnit,"(A,2X,1F20.10)") "# EvalCounter  =",dble(EvalCounter)
   write(TheUnit,"(A,2X,1F20.10)") "# SkipCounter  =",dble(SkipCounter)
   if( EvalCounter.gt.0 .and. dble(SkipCounter)/dble(EvalCounter) .gt. 0.02d0 ) write(TheUnit,"(A,2X)") "# **** WARNING  ****: SkipCounter is larger than 2%"
-  write(TheUnit,"(A,2X,1PE20.10,2X,1PE20.5)") "#TotCS[fb]=",VG_Result,VG_Error
+  write(TheUnit,"(A,2X,1PE20.10,2X,1PE20.5)") "#TotCS[fb]=",MC_Result,MC_Error
   do NHisto=1,NumHistograms
       write(TheUnit,"(A,I2,A,A)") "# Histogram",NHisto,": ",Histo(NHisto)%Info
       Integral = 0d0
diff --git a/makefile b/makefile
index fc910a9f00e14a896adf81a2c43897bf140fc64b..a58be6b6bb5d527384fb9a3c54bf74b70db5be13 100755
--- a/makefile
+++ b/makefile
@@ -6,6 +6,8 @@ VegasDir = $(Here)/Vegas
 PSDir = $(Here)/PhaseSpace
 QCDLoop = $(Here)/QCDLoop-1.9
 CollierDir = $(Here)/COLLIER-1.1/
+CuhreDir = $(Here)/DCuhre
+CubaDir = $(Here)/Cuba
 
 
 
@@ -91,7 +93,19 @@ endif
 IntegralObj = $(QCDLoop)/ql/libqcdloop.a\
               $(QCDLoop)/ff/libff.a
 
+CuhreObj = $(CuhreDir)/dcuhre.o\
+           $(CuhreDir)/d07hre.o\
+           $(CuhreDir)/d09hre.o\
+           $(CuhreDir)/d113re.o\
+           $(CuhreDir)/d132re.o\
+           $(CuhreDir)/dadhre.o\
+           $(CuhreDir)/dchhre.o\
+           $(CuhreDir)/dfshre.o\
+           $(CuhreDir)/dinhre.o\
+           $(CuhreDir)/drlhre.o\
+           $(CuhreDir)/dtrhre.o
 
+CubaObj = $(CubaDir)/libcuba.a
 
 
 # ------------------------------------------------------------
@@ -114,7 +128,7 @@ all:  $(VegasObj) $(RockyObj) $(allObjects) $(IntegralObj)
 	@echo " linking"
 	@echo " executable file is " $(Exec)
 	@echo " "
-	$(fcomp) -o $(Exec) $(allObjects) $(RockyObj) $(VegasObj) $(IntegralObj) $(CollierLibflags)
+	$(fcomp) -o $(Exec) $(allObjects) $(RockyObj) $(VegasObj) $(IntegralObj) $(CollierLibflags) $(CuhreObj) $(CubaObj)
 
 clean:
 	rm -f ./modules/*.mod
diff --git a/mod_Integrand.f90 b/mod_Integrand.f90
index 86486a9e74777931f7f1a9d8e00f3efbd528b116..1da14fdc257811eae22e177bab2f5d654e209c8d 100755
--- a/mod_Integrand.f90
+++ b/mod_Integrand.f90
@@ -13,11 +13,34 @@ VgsWgt=1d0
    Res(1) = VegasIntegrand1(yRnd,VgsWgt,Dummy)
    Res(1) = Dummy(1)
 
- 
 RETURN  
 END SUBROUTINE  
 
 
+
+
+
+
+FUNCTION VegasIntegrand1_CUBA(ndim,yRnd,ncomp,res,userdata,nvec,core)
+implicit none
+integer :: VegasIntegrand1_CUBA
+integer ndim, ncomp, nvec, core,userdata
+double precision yRnd(ndim,nvec), res(nvec),VgsWgt,Dummy(1:1),xRnd(ndim)
+
+   xRnd(1:ndim) = yRnd(1:ndim,1)
+   Res(1) = VegasIntegrand1(xRnd,VgsWgt,Dummy)
+   Res(1) = Dummy(1)
+    
+  
+VegasIntegrand1_CUBA=0
+RETURN
+END FUNCTION
+
+
+
+
+
+
 FUNCTION VegasIntegrand1(yRnd,VgsWgt,Res)
 use ModParameters
 use ModMisc
@@ -76,6 +99,19 @@ END FUNCTION
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
 FUNCTION VegasIntegrand2(yRnd,VgsWgt,Res)
 use ModParameters
 use ModMisc
@@ -106,6 +142,57 @@ END FUNCTION
 
 
 
+SUBROUTINE VegasIntegrand3_DCUHRE(Ndim,yRnd,NumFun,Res)
+integer :: Ndim,NumFun
+real(8) :: yRnd(1:NDim),Res(1:NumFun),VgsWgt,Dummy(1:1)
+VgsWgt=1d0
+
+   Res(1) = VegasIntegrand3(yRnd,VgsWgt,Dummy)
+   Res(1) = Dummy(1)
+
+ 
+RETURN  
+END SUBROUTINE  
+
+
+
+
+
+
+
+
+
+
+
+
+
+FUNCTION VegasIntegrand3(yRnd,VgsWgt,res)
+implicit none
+integer :: VegasIntegrand3
+real(8) ::  yRnd(*),res(*),VgsWgt,x1,x2
+
+
+    x1 = yRnd(1)
+    x2 = yRnd(2)
+    res(1) = 0d0
+
+    if( dabs(x1+x2).lt.20d0 .and. dabs(x1-x2).lt.20d0  ) then
+        res(1) = dexp(-(x1+x2)**2)+dexp(-(x1-x2)**2)
+    endif
+    res(1) = res(1)/70.89815404d0 
+
+  
+VegasIntegrand3=0
+RETURN
+END FUNCTION
+
+
+
+
+
+
+
+
 
 END MODULE ModIntegrand
 
diff --git a/mod_LoopSpace.f90 b/mod_LoopSpace.f90
index 01492c0c3f06becbac78690fe91c45f530beeb70..fa59b8c558bf9a5685ecde61fbe91d72f68a06b7 100755
--- a/mod_LoopSpace.f90
+++ b/mod_LoopSpace.f90
@@ -14,7 +14,7 @@ public :: Eval1LoopIntegrand,Eval2LoopIntegrand
 real(8),public :: kappa(1:4),kLoop1(1:4),kLoop2(1:4)
 complex(8), public :: kLoop1Full(1:4)
 
-integer,public,parameter :: NPoint=5
+integer,public,parameter :: NPoint=4
 integer,public,parameter :: NPointMAX=5
 
 real(8),private ::mu1sq,mu2sq,E_soft,gamma1,gamma2
@@ -43,7 +43,7 @@ use modmisc
 implicit none
 real(8) :: uRnd(:),Jacobian
 real(8) :: kE,kE_sq,zeta,theta,phi
-real(8),parameter :: mu_Loop1_sq = (100d0*GeV)**2
+real(8),parameter :: mu_Loop1_sq = (1000d0*GeV)**2
 real(8) :: sinZ,cosZ,sinT,cosT,sinP,cosP
 real(8) :: cutout