diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index c1ed8567c6903cac002e95774376ef2ed8baf153..95d03dc2c1a383edbce9a26fd663de93fda1182a 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,4 +1,8 @@
-4.8.0 (Work-in-progress): new interactive and fully parametrizable definition of
+4.8.1 (Work-in-progress): new quasi-structured quad algorithm (replaces the
+"packing of parallelogram" algorithm); improved performance when transforming
+many OCC entities.
+
+4.8.0 (March 2, 2021): new interactive and fully parametrizable definition of
 boundary conditions, materials, etc. through ONELAB variables; new API functions
 for creating trimmed BSpline/Bezier patches, perform raw triangulations and
 tetrehedralizations, get upward adjacencies, and create extruded boundary layers
@@ -6,13 +10,14 @@ and automatic curve loops in built-in kernel; improved performance of high-order
 meshing of OCC models; improved handling of high resolution displays; new
 structured CGNS exporter; new transfinite Beta law; added support for embedded
 curves in HXT; added automatic conversion from partitioned MSH2 files to new
-partitioned entities; fixed order of Gauss quadrature for quads and hexas; code
-modernization (C++11); further uniformization of option names to match the
-documented terminology (Mesh.Point -> Mesh.Node, ...; old names are still
-accepted, but deprecated); deprecated Mesh.MinimumElementsPerTwoPi: set value
-directly to Mesh.MeshSizeFromCurvature instead; Python and Julia APIs now also
-define "snake case" aliases for all camelCase function names; small bug fixes
-and improvements.
+partitioned entities; element groups can now be imported from UNV files; fixed
+order of Gauss quadrature for quads and hexas; code modernization (C++11);
+further uniformization of option names to match the documented terminology
+(Mesh.Point -> Mesh.Node, ...; old names are still accepted, but deprecated);
+deprecated Mesh.MinimumElementsPerTwoPi: set value directly to
+Mesh.MeshSizeFromCurvature instead; Python and Julia APIs now also define "snake
+case" aliases for all camelCase function names; small bug fixes and
+improvements.
 
 * Incompatible API changes: new optional arguments to mesh/classifySurfaces,
   occ/addBSplineSurface, occ/addBezierSurface, occ/addPipe and view/probe;
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a5ee5e270735bb8fc32e96d33a701861a20d0880..b8990a166fc63fc12077b2a46defe219eddd6682 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -88,6 +88,7 @@ opt(POST "Enable post-processing module (required by GUI)" ${DEFAULT})
 opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF)
 opt(PRIVATE_API "Enable private API" OFF)
 opt(PRO "Enable PRO extensions" ${DEFAULT})
+opt(QUADMESHINGTOOLS "Enable QuadMeshingTools extensions" ${DEFAULT})
 opt(QUADTRI "Enable QuadTri structured meshing extensions" ${DEFAULT})
 opt(REVOROPT "Enable Revoropt (used for CVT remeshing)" OFF)
 opt(RPATH "Use RPATH in dynamically linked targets" ON)
@@ -105,7 +106,7 @@ opt(ZIPPER "Enable Zip file compression/decompression" OFF)
 
 set(GMSH_MAJOR_VERSION 4)
 set(GMSH_MINOR_VERSION 8)
-set(GMSH_PATCH_VERSION 0)
+set(GMSH_PATCH_VERSION 1)
 if(NOT GMSH_EXTRA_VERSION)
   set(GMSH_EXTRA_VERSION "")
 endif()
@@ -322,6 +323,7 @@ if(ENABLE_OPENMP)
     set_config_option(HAVE_OPENMP "OpenMP")
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    list(APPEND EXTERNAL_LIBRARIES "${OpenMP_CXX_LIBRARIES}")
   elseif(APPLE AND EXISTS "/opt/local/lib/libomp")
     # official Apple compiler with macports' libomp
     set_config_option(HAVE_OPENMP "OpenMP[MacPorts]")
@@ -1245,6 +1247,12 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pro AND ENABLE_PRO)
   add_subdirectory(pro)
 endif()
 
+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/QuadMeshingTools AND ENABLE_QUADMESHINGTOOLS)
+  set_config_option(HAVE_QUADMESHINGTOOLS "QuadMeshingTools")
+  add_subdirectory(contrib/QuadMeshingTools)
+  include_directories(BEFORE contrib/QuadMeshingTools)
+endif()
+
 if(ENABLE_OCC)
   set(OCC_MINIMAL_VERSION "6.9.1")
   if(WIN32)
@@ -1502,6 +1510,13 @@ if(WALL AND NOT MSVC)
     # FIXME: remove this when GCC behaves more intelligently
     set(WF "${WF} -Wno-attributes")
   endif()
+  if(WIN32 OR NOT HAVE_64BIT_SIZE_T)
+    # FIXME: remove printf family warnings on 32 bit systems and windows
+    check_cxx_compiler_flag("-Wformat=" WFORMAT)
+    if(WFORMAT)
+      set(WF "${WF} -Wformat=")
+    endif()
+  endif()
   set_compile_flags(WALL_SRC ${WF})
 endif()
 
diff --git a/CREDITS.txt b/CREDITS.txt
index d1769d857a77f926c2bedd217f19f8337b657bc2..86b517000b0ae15f7f2e07c8ebf9729afacd109f 100644
--- a/CREDITS.txt
+++ b/CREDITS.txt
@@ -31,9 +31,10 @@ cleanup and performance improvements), Celestin Marot (HXT/tetMesh),
 Pierre-Alexandre Beaufort (HXT/reparam), Zhidong Han (LSDYNA export), Ismail
 Badia (hierarchical basis functions), Jeremy Theler (X3D export), Thomas
 Toulorge (high order mesh optimizer, new CGNS IO), Max Orok (binary PLY), Marek
-Wojciechowski (PyPi packaging), Maxence Reberol (automatic transfinite), Michael
-Ermakov (Gambit export). See comments in the sources for more information. If we
-forgot to list your contributions please send us an email!
+Wojciechowski (PyPi packaging), Maxence Reberol (automatic transfinite, quad
+meshing tools), Michael Ermakov (Gambit export). See comments in the sources for
+more information. If we forgot to list your contributions please send us an
+email!
 
 Thanks to the following folks who have contributed by providing fresh ideas on
 theoretical or programming topics, who have sent patches, requests for changes
@@ -141,6 +142,14 @@ The colorbar widget (Fltk/colorbarWindow.cpp) was inspired by code from the
 Vis5d program for visualizing five dimensional gridded data sets, copyright (C)
 1990-1995, Bill Hibbard, Brian Paul, Dave Santek, and Andre Battaiola.
 
+The libOL code (Common/libol1.{c,h}) is Copyright 2012-2018 - by Loïc Maréchal /
+INRIA. This program is a free software. You can redistribute it and/or modify it
+under the terms of the MIT License as published by the Open Source Initiative.
+
+The Fast & memory efficient hashtable based on robin hood hashing
+(Common/robin_hood.h) is Copyright (c) 2018-2020 Martin Ankerl and is licensed
+under the MIT License.
+
 In addition, this version of Gmsh may contain the following contributed,
 optional codes in the contrib/ directory, each governed by their own license:
 
@@ -149,7 +158,7 @@ optional codes in the contrib/ directory, each governed by their own license:
 
 * contrib/gmm copyright (C) 2002-2008 Yves Renard;
 
-* contrib/hxt - Copyright (C) 2017-2018 - Universite catholique de Louvain;
+* contrib/hxt - Copyright (C) 2017-2020 - Universite catholique de Louvain;
 
 * contrib/kbipack copyright (C) 2005 Saku Suuriniemi;
 
@@ -180,4 +189,4 @@ optional codes in the contrib/ directory, each governed by their own license:
 * contrib/zipper from MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant -
   version 1.1 64 bits from Mathias Svensson.
 
-heck the configuration options to see which have been enabled.
+Check the configuration options to see which have been enabled.
diff --git a/Common/CMakeLists.txt b/Common/CMakeLists.txt
index b389bbc11ff91df30d63292ba6e782a901f7e3f4..3e0981d05a9701050bbbffd357f92fd51e966997 100644
--- a/Common/CMakeLists.txt
+++ b/Common/CMakeLists.txt
@@ -26,6 +26,7 @@ set(SRC
   GmshRemote.cpp
   gmshLocalNetworkClient.cpp
   gmsh.cpp
+  libol1.c # should do something different for C file ?
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index ef10af645a80b7dcb2faa63c49a624f9e95c49ea..e5cfec08e69e96d309ad9299a6d8c89949f15f02 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -109,7 +109,7 @@ std::vector<std::pair<std::string, std::string> > GetUsage()
                  "coordinates (Mesh.SaveParametric)"));
   s.push_back(mp("-save_topology", "Save model topology (Mesh.SaveTopology)"));
   s.push_back(mp("-algo string", "Select mesh algorithm: auto, meshadapt, del2d, "
-                 "front2d, delquad, pack, initial2d, del3d, front3d, mmg3d, hxt, "
+                 "front2d, delquad, quadqs, initial2d, del3d, front3d, mmg3d, hxt, "
                  "initial3d (Mesh.Algorithm and Mesh.Algorithm3D)"));
   s.push_back(mp("-smooth int", "Set number of mesh smoothing steps "
                  "(Mesh.Smoothing)"));
@@ -1201,6 +1201,8 @@ void GetOptions(bool readConfigFiles, bool exitOnError)
             opt_mesh_algo2d(0, GMSH_SET, ALGO_2D_FRONTAL_QUAD);
           else if(argv[i] == "PackingOfParallelograms" || argv[i] == "pack")
             opt_mesh_algo2d(0, GMSH_SET, ALGO_2D_PACK_PRLGRMS);
+          else if(argv[i] == "QuadQuasiStructured" || argv[i] == "quadqs")
+            opt_mesh_algo2d(0, GMSH_SET, ALGO_2D_QUAD_QUASI_STRUCT);
           else if(argv[i] == "initial2d")
             opt_mesh_algo2d(0, GMSH_SET, ALGO_2D_INITIAL_ONLY);
           else if(argv[i] == "del3d" || argv[i] == "gmsh3d")
diff --git a/Common/Context.h b/Common/Context.h
index eba5754299dd89fb093f362d9b80f431ff77a195..123dd08daea556ca325bceb9eadce736388c53d7 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -49,12 +49,14 @@ struct contextMeshOptions {
   unsigned int randomSeed;
   int nLayersPerGap;
   double gradation;
+  int quadqsSizemapMethod, quadqsTopoOptimMethods;
   std::function<double(int, int, double, double, double)> lcCallback;
   // mesh IO
   int fileFormat, firstElementTag, firstNodeTag;
   double mshFileVersion, medFileMinorVersion, scalingFactor;
   int medImportGroupsOfNodes, medSingleModel;
   int saveAll, saveTri, saveGroupsOfNodes, saveGroupsOfElements;
+  int readGroupsOfElements;
   int binary, bdfFieldFormat;
   int unvStrictFormat, stlRemoveDuplicateTriangles, stlOneSolidPerSurface;
   double stlLinearDeflection, stlAngularDeflection;
diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp
index 9897f7fd58fca830fa923b8da1001c21ac4efc35..4fdcedde1705a4ce217651ea0928394df3775f61 100644
--- a/Common/CreateFile.cpp
+++ b/Common/CreateFile.cpp
@@ -362,7 +362,9 @@ void CreateOutputFile(const std::string &fileName, int format,
 
   case FORMAT_UNV:
     GModel::current()->writeUNV
-      (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveGroupsOfNodes,
+      (name, CTX::instance()->mesh.saveAll,
+       CTX::instance()->mesh.saveGroupsOfElements,
+       CTX::instance()->mesh.saveGroupsOfNodes,
        CTX::instance()->mesh.scalingFactor);
     break;
 
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index c25201146870fdd233887695ca4c304636f66706..0e2c2dfbd516a2bdd75ff9d8c42f2d85ffe00c7f 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -1191,6 +1191,12 @@ StringXNumber MeshOptions_Number[] = {
     "Maximum angle between edges/faces within layers of BL triangles/tets "
     "for the detection of columns in the fast curving algorithm"},
 
+  { F|O, "IgnoreParametrization" , opt_mesh_ignore_parametrization, 0. ,
+    "Skip parametrization section when reading meshes in the MSH4 format." },
+  { F|O, "IgnorePeriodicity" , opt_mesh_ignore_periodicity , 1. ,
+    "Skip periodic node section and skip periodic boundary alignement step when "
+    "reading meshes in the MSH2 format." },
+
   { F|O, "LabelSampling" , opt_mesh_label_sampling , 1. ,
     "Label sampling rate (display one label every `LabelSampling' elements)" },
   { F|O, "LabelType" , opt_mesh_label_type , 0. ,
@@ -1282,43 +1288,6 @@ StringXNumber MeshOptions_Number[] = {
     "Import groups of nodes (0: no; 1: create geometrical point for each node)?" },
   { F|O, "MedSingleModel" , opt_mesh_med_single_model , 0. ,
     "Import MED meshes in the current model, even if several MED mesh names exist" },
-  { F|O, "PartitionHexWeight" , opt_mesh_partition_hex_weight , -1 ,
-    "Weight of hexahedral element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionLineWeight" , opt_mesh_partition_line_weight , -1 ,
-    "Weight of line element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionPrismWeight" , opt_mesh_partition_pri_weight , -1 ,
-    "Weight of prismatic element (wedge) for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionPyramidWeight" , opt_mesh_partition_pyr_weight , -1 ,
-    "Weight of pyramidal element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionQuadWeight" , opt_mesh_partition_qua_weight , -1 ,
-    "Weight of quadrangle for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionTrihedronWeight" , opt_mesh_partition_trih_weight , 0 ,
-    "Weight of trihedron element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionTetWeight" , opt_mesh_partition_tet_weight , -1 ,
-    "Weight of tetrahedral element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionTriWeight" , opt_mesh_partition_tri_weight , -1 ,
-    "Weight of triangle element for METIS load balancing (-1: automatic)" },
-  { F|O, "PartitionCreateTopology" , opt_mesh_partition_create_topology , 1 ,
-    "Create boundary representation of partitions" },
-  { F|O, "PartitionCreatePhysicals" , opt_mesh_partition_create_physicals , 1 ,
-    "Create physical groups for partitions, based on existing physical groups" },
-  { F|O, "PartitionCreateGhostCells" , opt_mesh_partition_create_ghost_cells , 0 ,
-    "Create ghost cells, i.e. create for each partition a ghost entity containing "
-    "elements connected to neighboring partitions by at least one node." },
-  { F|O, "PartitionSplitMeshFiles" , opt_mesh_partition_split_mesh_files , 0 ,
-    "Write one file for each mesh partition" },
-  { F|O, "PartitionTopologyFile" , opt_mesh_partition_save_topology_file , 0 ,
-    "Write a .pro file with the partition topology" },
-  { F|O, "PartitionOldStyleMsh2" , opt_mesh_partition_old_style_msh2 , 1 ,
-    "Write partitioned meshes in MSH2 format using old style (i.e. by not "
-    "referencing new partitioned entities, except on partition boundaries), "
-    "for backward compatibility" },
-  { F|O, "PartitionConvertMsh2" , opt_mesh_partition_convert_msh2 , 1 ,
-    "When reading partitioned meshes in MSH2 format, create new partition "
-    "entities"},
-
-  { F|O, "ReparamMaxTriangles" , opt_mesh_reparam_max_triangles , 250000 ,
-    "Maximum number of triangles in a single parametrization patch" },
 
   { F, "NbHexahedra" , opt_mesh_nb_hexahedra , 0. ,
     "Number of hexahedra in the current mesh (read-only)" },
@@ -1362,6 +1331,40 @@ StringXNumber MeshOptions_Number[] = {
     "Optimize the mesh using Netgen to improve the quality of tetrahedral "
     "elements" },
 
+  { F|O, "PartitionHexWeight" , opt_mesh_partition_hex_weight , -1 ,
+    "Weight of hexahedral element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionLineWeight" , opt_mesh_partition_line_weight , -1 ,
+    "Weight of line element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionPrismWeight" , opt_mesh_partition_pri_weight , -1 ,
+    "Weight of prismatic element (wedge) for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionPyramidWeight" , opt_mesh_partition_pyr_weight , -1 ,
+    "Weight of pyramidal element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionQuadWeight" , opt_mesh_partition_qua_weight , -1 ,
+    "Weight of quadrangle for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionTrihedronWeight" , opt_mesh_partition_trih_weight , 0 ,
+    "Weight of trihedron element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionTetWeight" , opt_mesh_partition_tet_weight , -1 ,
+    "Weight of tetrahedral element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionTriWeight" , opt_mesh_partition_tri_weight , -1 ,
+    "Weight of triangle element for METIS load balancing (-1: automatic)" },
+  { F|O, "PartitionCreateTopology" , opt_mesh_partition_create_topology , 1 ,
+    "Create boundary representation of partitions" },
+  { F|O, "PartitionCreatePhysicals" , opt_mesh_partition_create_physicals , 1 ,
+    "Create physical groups for partitions, based on existing physical groups" },
+  { F|O, "PartitionCreateGhostCells" , opt_mesh_partition_create_ghost_cells , 0 ,
+    "Create ghost cells, i.e. create for each partition a ghost entity containing "
+    "elements connected to neighboring partitions by at least one node." },
+  { F|O, "PartitionSplitMeshFiles" , opt_mesh_partition_split_mesh_files , 0 ,
+    "Write one file for each mesh partition" },
+  { F|O, "PartitionTopologyFile" , opt_mesh_partition_save_topology_file , 0 ,
+    "Write a .pro file with the partition topology" },
+  { F|O, "PartitionOldStyleMsh2" , opt_mesh_partition_old_style_msh2 , 1 ,
+    "Write partitioned meshes in MSH2 format using old style (i.e. by not "
+    "referencing new partitioned entities, except on partition boundaries), "
+    "for backward compatibility" },
+  { F|O, "PartitionConvertMsh2" , opt_mesh_partition_convert_msh2 , 1 ,
+    "When reading partitioned meshes in MSH2 format, create new partition "
+    "entities"},
   { F|O|D, "Points" , opt_mesh_nodes , 0. ,
     "[Deprecated]" },
   { F|O|D, "PointNumbers" , opt_mesh_node_labels , 0. ,
@@ -1370,6 +1373,9 @@ StringXNumber MeshOptions_Number[] = {
     "[Deprecated]" },
   { F|O|D, "PointType" , opt_mesh_node_type , 0. ,
     "[Deprecated]" },
+  { F|O, "PreserveNumberingMsh2" , opt_mesh_preserve_numbering_msh2 , 0. ,
+    "Preserve element numbering in MSH2 format (will break meshes with multiple "
+    "physical groups for a single elementary entity)"},
   { F|O, "Prisms" , opt_mesh_prisms , 1. ,
     "Display mesh prisms?" },
   { F|O, "Pyramids" , opt_mesh_pyramids , 1. ,
@@ -1377,8 +1383,23 @@ StringXNumber MeshOptions_Number[] = {
   { F|O, "Trihedra" , opt_mesh_trihedra , 1. ,
     "Display mesh trihedra?" },
 
+  { F|O, "QuadqsSizemapMethod" , opt_mesh_quadqs_sizemap_method, 0. ,
+    "Size map method in QuadQuasiStructured. 0: default, 1: cross-field,"
+      "2: cross-field + CAD small features adaptation,"
+      "3: from background mesh (e.g. sizes in current triangulation)"
+  },
+  { F|O, "QuadqsTopologyOptimizationMethods" , opt_mesh_quadqs_topo_optim_methods, 0. ,
+    "Topology optimization methods in QuadQuasiStructured. 0: default (all),"
+      "100: pattern-based CAD faces,"
+      "010: disk quadrangulation remeshing,"
+      "001: cavity remeshing,"
+      "xxx: combination of multiple methods (e.g. 111 for all)"
+  },
+
   { F|O, "Quadrangles" , opt_mesh_quadrangles , 1. ,
     "Display mesh quadrangles?" },
+
+
   { F|O, "QualityInf" , opt_mesh_quality_inf , 0.0 ,
     "Only display elements whose quality measure is greater than QualityInf" },
   { F|O, "QualitySup" , opt_mesh_quality_sup , 0.0 ,
@@ -1397,17 +1418,13 @@ StringXNumber MeshOptions_Number[] = {
     "RandomFactor * size(triangle)/size(model) approaches machine accuracy)" },
   { F|O, "RandomFactor3D" , opt_mesh_rand_factor3d , 1.e-12 ,
     "Random factor used in the 3D meshing algorithm" },
-
   { F|O, "RandomSeed" , opt_mesh_random_seed , 1. ,
     "Seed of pseudo-random number generator" },
-  { F|O, "PreserveNumberingMsh2" , opt_mesh_preserve_numbering_msh2 , 0. ,
-    "Preserve element numbering in MSH2 format (will break meshes with multiple "
-    "physical groups for a single elementary entity)"},
-  { F|O, "IgnoreParametrization" , opt_mesh_ignore_parametrization, 0. ,
-    "Skip parametrization section when reading meshes in the MSH4 format." },
-  { F|O, "IgnorePeriodicity" , opt_mesh_ignore_periodicity , 1. ,
-    "Skip periodic node section and skip periodic boundary alignement step when "
-    "reading meshes in the MSH2 format." },
+
+
+  { F|O, "ReadGroupsOfElements" , opt_mesh_read_groups_of_elements , 1. ,
+    "Read groups of elements in UNV meshes (this will discard the elementary "
+    "entity tags inferred from the element section)"},
 #if defined(HAVE_BLOSSOM)
   { F|O, "RecombinationAlgorithm" , opt_mesh_algo_recombine , 1 ,
 #else
@@ -1434,6 +1451,8 @@ StringXNumber MeshOptions_Number[] = {
     "Number of refinement steps in the MeshAdapt-based 2D algorithms" },
   { F|O, "Renumber" , opt_mesh_renumber , 1 ,
     "Renumber nodes and elements in a continuous sequence after mesh generation" },
+  { F|O, "ReparamMaxTriangles" , opt_mesh_reparam_max_triangles , 250000 ,
+    "Maximum number of triangles in a single parametrization patch" },
 
   { F,   "SaveAll" , opt_mesh_save_all , 0. ,
     "Save all elements, even if they don't belong to physical groups (for some "
@@ -1446,7 +1465,7 @@ StringXNumber MeshOptions_Number[] = {
   { F|O, "SaveParametric" , opt_mesh_save_parametric , 0. ,
     "Save parametric coordinates of nodes" },
   { F|O, "SaveGroupsOfElements" , opt_mesh_save_groups_of_elements , 1. ,
-    "Save groups of elements for each physical group (for INP mesh format)" },
+    "Save groups of elements for each physical group (for UNV and INP mesh format)" },
   { F|O, "SaveGroupsOfNodes" , opt_mesh_save_groups_of_nodes , 0. ,
     "Save groups of nodes for each physical group (for UNV, INP and Tochnog "
     "mesh formats). For the INP format, a negative value will save a group of node "
diff --git a/Common/GmshConfig.h.in b/Common/GmshConfig.h.in
index b021061f91ea98f5db640a75f72cf1551a5ce44e..f96189c2eb6179d0084796aff656c3e97128ca00 100644
--- a/Common/GmshConfig.h.in
+++ b/Common/GmshConfig.h.in
@@ -64,6 +64,7 @@
 #cmakedefine HAVE_POST
 #cmakedefine HAVE_POPPLER
 #cmakedefine HAVE_QUADTRI
+#cmakedefine HAVE_QUADMESHINGTOOLS
 #cmakedefine HAVE_REVOROPT
 #cmakedefine HAVE_SALOME
 #cmakedefine HAVE_SGEOM
diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index 47d900278fa45264efdb697ec3d7aa0f7f5ae3ae..aa55f2f95230a36bcac0697b348220d577ce16d4 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -241,6 +241,7 @@
 #define ALGO_2D_FRONTAL_QUAD      8
 #define ALGO_2D_PACK_PRLGRMS      9
 #define ALGO_2D_PACK_PRLGRMS_CSTR 10
+#define ALGO_2D_QUAD_QUASI_STRUCT 11
 
 // 3D meshing algorithms (numbers should not be changed)
 #define ALGO_3D_DELAUNAY     1
diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 9a8b3ddfad5473ea12f9666ddd15aae1882c3ebc..02f09aed2b41f0c03f349ee1e7ae5a9dd7aa1b3a 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -1296,6 +1296,22 @@ static void _setStandardOptions(onelab::parameter *p,
     p->setAttribute("AutoCheck", fopt["AutoCheck"][0] ? "1" : "0");
 }
 
+static void _setOtherAttributes(onelab::parameter *p,
+                                std::map<std::string, std::vector<std::string> > &copt)
+{
+  for(auto it = copt.begin(); it != copt.end(); it++)
+    if(p->getAttribute(it->first).empty() &&
+       it->first.compare("Name")          &&
+       it->first.compare("Label")         &&
+       it->first.compare("ShortHelp")     &&
+       it->first.compare("Help")          &&
+       it->first.compare("Visible")       &&
+       it->first.compare("ReadOnly")      &&
+       it->first.compare("NeverChanged")  &&
+       it->first.compare("ChangedValue")) // Attribute 'it' was not already set
+      p->setAttribute(it->first, it->second[0]);
+}
+
 static std::string _getParameterName(const std::string &key,
                                      std::map<std::string, std::vector<std::string> > &copt)
 {
@@ -1419,6 +1435,7 @@ void Msg::ExchangeOnelabParameter(const std::string &key,
   if(copt.count("NumberFormat"))
     ps[0].setAttribute("NumberFormat", copt["NumberFormat"][0]);
   _setStandardOptions(&ps[0], fopt, copt);
+  _setOtherAttributes(&ps[0], copt);
   _onelabClient->set(ps[0]);
 #endif
 }
@@ -1475,6 +1492,7 @@ void Msg::ExchangeOnelabParameter(const std::string &key,
   if(noMultipleSelection && copt.count("MultipleSelection"))
     ps[0].setAttribute("MultipleSelection", copt["MultipleSelection"][0]);
   _setStandardOptions(&ps[0], fopt, copt);
+  _setOtherAttributes(&ps[0], copt);
   _onelabClient->set(ps[0]);
 #endif
 }
diff --git a/Common/OS.cpp b/Common/OS.cpp
index 15e9e9cd4184c06f6adefc4684d0732fcb0ae84e..2757ef00fc5942f2bed44647be6c2f612e290116 100644
--- a/Common/OS.cpp
+++ b/Common/OS.cpp
@@ -624,7 +624,7 @@ int SystemCallExe(const std::string &exe, const std::string &argsOrCommand,
   }
   if(!blocking) cmd += " &";
   Msg::Info("Calling '%s'", cmd.c_str());
-  if(!system(cmd.c_str())) return 1;
+  return system(cmd.c_str());
 #endif
   return 0;
 }
diff --git a/Common/OctreeInternals.cpp b/Common/OctreeInternals.cpp
index 4f6a7c50898b2e13f2acbccb08aa6ffba34632d0..01a25b2e28e9844cca8ea363fe5b847eca1f3997 100644
--- a/Common/OctreeInternals.cpp
+++ b/Common/OctreeInternals.cpp
@@ -305,7 +305,8 @@ void *searchElement(octantBucket *_buckets_head, double *_pt,
   ptrBucket = findElementBucket(_buckets_head, _pt);
   if(ptrBucket == nullptr) {
     // this is not an error
-    Msg::Debug("Could not find point in octree");
+    // TODO RE ENABLE MSG
+    // Msg::Debug("Could not find point in octree (in search element)");
     return nullptr;
   }
 
@@ -397,7 +398,7 @@ void *searchAllElements(octantBucket *_buckets_head, double *_pt,
 
   ptrBucket = findElementBucket(_buckets_head, _pt);
   if(ptrBucket == nullptr) {
-    Msg::Debug("Could not find point in octree");
+    Msg::Debug("Could not find point in octree (in search all elements)");
     return nullptr;
   }
 
diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp
index 48df581ca4e399c210b74595b9c2d559c97e53e7..0689d2b04ff52eb3071a07db6e3898b683b9e9e6 100644
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@ -387,7 +387,8 @@ int MergeFile(const std::string &fileName, bool errorIfMissing,
     status = GModel::current()->readParasolidXMT(fileName);
   }
   else if(ext == ".unv" || ext == ".UNV") {
-    status = GModel::current()->readUNV(fileName);
+    status = GModel::current()->readUNV
+      (fileName, CTX::instance()->mesh.readGroupsOfElements);
   }
   else if(ext == ".vtk" || ext == ".VTK") {
     status = GModel::current()->readVTK(fileName, CTX::instance()->bigEndian);
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 61a384decb7f99295e5df8eea618a646b83ef340..b0ba81367af14209baff6e2034ae340bd148bce6 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -5860,7 +5860,7 @@ double opt_mesh_algo2d(OPT_ARGS_NUM)
     case ALGO_2D_FRONTAL_QUAD:
       FlGui::instance()->options->mesh.choice[2]->value(5);
       break;
-    case ALGO_2D_PACK_PRLGRMS:
+    case ALGO_2D_QUAD_QUASI_STRUCT:
       FlGui::instance()->options->mesh.choice[2]->value(6);
       break;
     case ALGO_2D_INITIAL_ONLY:
@@ -6305,6 +6305,12 @@ double opt_mesh_save_topology(OPT_ARGS_NUM)
   return CTX::instance()->mesh.saveTopology;
 }
 
+double opt_mesh_read_groups_of_elements(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET) CTX::instance()->mesh.readGroupsOfElements = (int)val;
+  return CTX::instance()->mesh.readGroupsOfElements;
+}
+
 double opt_mesh_save_groups_of_elements(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) CTX::instance()->mesh.saveGroupsOfElements = (int)val;
@@ -6568,6 +6574,17 @@ double opt_mesh_ignore_parametrization(OPT_ARGS_NUM)
   return CTX::instance()->mesh.ignoreParametrizationMsh4;
 }
 
+double opt_mesh_quadqs_sizemap_method(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET) CTX::instance()->mesh.quadqsSizemapMethod = (int)val;
+  return CTX::instance()->mesh.quadqsSizemapMethod;
+}
+
+double opt_mesh_quadqs_topo_optim_methods(OPT_ARGS_NUM) {
+  if(action & GMSH_SET) CTX::instance()->mesh.quadqsTopoOptimMethods = (int)val;
+  return CTX::instance()->mesh.quadqsTopoOptimMethods;
+}
+
 double opt_solver_listen(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) CTX::instance()->solver.listen = (int)val;
diff --git a/Common/Options.h b/Common/Options.h
index fa7045813cc227224430cd70e5d33cb89721a2e3..59c0feb7df70309f0092e7f61c86e5d668dd840a 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -574,6 +574,7 @@ double opt_mesh_save_all(OPT_ARGS_NUM);
 double opt_mesh_save_element_tag_type(OPT_ARGS_NUM);
 double opt_mesh_save_parametric(OPT_ARGS_NUM);
 double opt_mesh_save_topology(OPT_ARGS_NUM);
+double opt_mesh_read_groups_of_elements(OPT_ARGS_NUM);
 double opt_mesh_save_groups_of_elements(OPT_ARGS_NUM);
 double opt_mesh_save_groups_of_nodes(OPT_ARGS_NUM);
 double opt_mesh_color_carousel(OPT_ARGS_NUM);
@@ -603,6 +604,8 @@ double opt_mesh_renumber(OPT_ARGS_NUM);
 double opt_mesh_unv_strict_format(OPT_ARGS_NUM);
 double opt_mesh_reparam_max_triangles(OPT_ARGS_NUM);
 double opt_mesh_ignore_parametrization(OPT_ARGS_NUM);
+double opt_mesh_quadqs_sizemap_method(OPT_ARGS_NUM);
+double opt_mesh_quadqs_topo_optim_methods(OPT_ARGS_NUM);
 double opt_solver_listen(OPT_ARGS_NUM);
 double opt_solver_timeout(OPT_ARGS_NUM);
 double opt_solver_plugins(OPT_ARGS_NUM);
diff --git a/Common/libol1.c b/Common/libol1.c
new file mode 100644
index 0000000000000000000000000000000000000000..19bc6136b5476d3c39f107f7600b85995bda7e3c
--- /dev/null
+++ b/Common/libol1.c
@@ -0,0 +1,3060 @@
+// All libOL code is Copyright 2012-2018 - by Loïc Maréchal / INRIA.
+// This program is a free software.
+// You can redistribute it and/or modify it under the terms of the MIT License
+// as published by the Open Source Initiative.
+//  
+// 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 MIT License for more details.
+//  
+// You should have received a copy of the MIT License along with this program
+// as the file LICENSE.txt; if not, please see:
+// https://opensource.org/licenses/MIT
+//
+//
+// MIT License
+// 
+// Copyright (c) 2012-2018 Loïc Maréchal / INRIA
+// 
+// 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
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+
+/*----------------------------------------------------------------------------*/
+/*                                                                            */
+/*                      LIB OCTREE LOCALISATION V1.70                         */
+/*                                                                            */
+/*----------------------------------------------------------------------------*/
+/*                                                                            */
+/*    Description:         Octree for mesh localization                       */
+/*    Author:              Loic MARECHAL                                      */
+/*    Creation date:       mar 16 2012                                        */
+/*    Last modification:   feb 03 2021                                        */
+/*                                                                            */
+/*----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------*/
+/* ANSI C headers                                                             */
+/*----------------------------------------------------------------------------*/
+
+#include <assert.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "libol1.h"
+
+
+/*----------------------------------------------------------------------------*/
+/* Defines and macros                                                         */
+/*----------------------------------------------------------------------------*/
+
+#define MaxItmOct 20
+#define MaxOctLvl 10
+#define MinGrdLvl 5
+#define ItmPerBuc 100
+#define MemBlkSiz 100000
+#define TngFlg    1
+#define AniFlg    2
+#define MaxThr    256
+#define MIN(a,b)  ((a) < (b) ? (a) : (b))
+#define MAX(a,b)  ((a) > (b) ? (a) : (b))
+#define POW(a)    ((a)*(a))
+#define CUB(a)    ((a)*(a)*(a))
+
+
+/*----------------------------------------------------------------------------*/
+/* Local structures                                                           */
+/*----------------------------------------------------------------------------*/
+
+typedef struct
+{
+   itg   idx;
+   fpn   crd[3];
+}VerSct;
+
+typedef struct
+{
+   VerSct  *ver[2];
+   fpn      tng[3], siz;
+   itg      idx;
+}EdgSct;
+
+typedef struct
+{
+   EdgSct   edg[3];
+   VerSct  *ver[3];
+   fpn      nrm[3];
+   itg      idx;
+   float    ani;
+}TriSct;
+
+typedef struct
+{
+   VerSct  *ver[4];
+   EdgSct   edg[4];
+   TriSct   tri[2];
+   fpn      nrm[3];
+   itg      idx;
+}QadSct;
+
+typedef struct
+{
+   VerSct  *ver[4];
+   EdgSct   edg[6];
+   TriSct   tri[4];
+   itg      idx;
+   float    ani;
+}TetSct;
+
+typedef struct
+{
+   VerSct  *ver[5];
+   EdgSct   edg[8];
+   TriSct   tri[5][2];
+   itg      idx;
+}PyrSct;
+
+typedef struct
+{
+   VerSct  *ver[6];
+   EdgSct   edg[9];
+   TriSct   tri[5][2];
+   itg      idx;
+}PriSct;
+
+typedef struct
+{
+   VerSct  *ver[8];
+   EdgSct   edg[12];
+   QadSct   qad[6];
+   itg      idx;
+}HexSct;
+
+typedef struct LnkSctPtr
+{
+   itg      typ, idx;
+   struct   LnkSctPtr *nex;
+}LnkSct;
+
+typedef struct MemSctPtr
+{
+   size_t   siz;
+   void    *adr;
+   struct   MemSctPtr *nex;
+}MemSct;
+
+typedef struct
+{
+   VerSct   ver[8], BakVer[8];
+   EdgSct   edg, BakEdg;
+   TriSct   tri, BakTri;
+   QadSct   qad, BakQad;
+   TetSct   tet, BakTet;
+   PyrSct   pyr, BakPyr;
+   PriSct   pri, BakPri;
+   HexSct   hex, BakHex;
+   char    *FlgTab;
+   itg     *TagTab, tag;
+}MshThrSct;
+
+typedef struct
+{
+   MshThrSct thr[ MaxThr ];
+   size_t   UsrSiz[ LolNmbTyp ], NmbItm[ LolNmbTyp ];
+   fpn      aniso, eps;
+   itg      BasIdx;
+   char    *UsrPtr[ LolNmbTyp ];
+}MshSct;
+
+typedef struct OctSctPtr
+{
+   union
+   {
+      LnkSct *lnk;
+      struct OctSctPtr *son;
+   };
+   unsigned char NmbVer, NmbEdg, NmbFac, NmbVol, lvl, sub, ani, MaxItm;
+}OctSct;
+
+typedef struct
+{
+   OctSct  *oct;
+   itg      idx;
+   char     pos[3];
+}BucSct;
+
+typedef struct
+{
+   VerSct   ver[8];
+   HexSct   hex;
+   itg      tag, *ThrTag;
+   BucSct **ThrStk;
+}OctThrSct;
+
+typedef struct
+{
+   OctThrSct thr[ MaxThr ];
+   itg      MaxLvl, NmbFreOct, NmbOct, GrdLvl, NmbBuc, NmbThr;
+   size_t   MemUse;
+   fpn      eps, MaxSiz, MinSiz, BucSiz, bnd[2][3];
+   OctSct   oct, *CurOctBlk;
+   BucSct  *grd;
+   LnkSct  *NexFreLnk;
+   MemSct  *NexMem;
+   MshSct  *msh;
+}TreSct;
+
+
+/*----------------------------------------------------------------------------*/
+/* Prototypes of octree procedures                                            */
+/*----------------------------------------------------------------------------*/
+
+static void    SetMshBox   (TreSct *, MshSct *);
+static void    AddVer      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    AddEdg      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    AddTri      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    AddQad      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    AddTet      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    SubOct      (MshSct *, TreSct *, OctSct *, fpn *, fpn *);
+static void    LnkItm      (TreSct *, OctSct *, itg, itg, char);
+static OctSct *GetCrd      (OctSct *, itg, fpn *, fpn *, fpn *);
+static void    GetBox      (TreSct *, OctSct *, itg, itg *, itg, itg *,
+                           char *, fpn [2][3], fpn, fpn *, fpn *, itg );
+static itg     BoxIntBox   (fpn [2][3], fpn [2][3], fpn);
+static void    SetItm      (MshSct *, itg, itg, itg, itg);
+static void    AniTri      (MshSct *, itg);
+static void    SetSonCrd   (itg, fpn *, fpn *, fpn *, fpn *);
+static void    GetOctLnk   (MshSct *, itg, fpn *, itg *, fpn *, OctSct *,
+                           fpn *, fpn *, itg (void *, itg),  void *, itg);
+static void    IntRayOct   (TreSct *, MshSct *, fpn *, fpn *, itg *, fpn *,
+                            OctSct *, fpn *, fpn *, itg (void *, itg),  void *,
+                            itg);
+static void    GetBucBox   (TreSct *, BucSct *, fpn *, fpn *);
+static BucSct *GetBucNgb   (TreSct *, BucSct *, itg);
+static fpn     DisVerOct   (fpn *, fpn *, fpn *);
+static itg     VerInsOct   (fpn *, fpn *, fpn *);
+static char   *GetPtrItm   (MshSct *, itg, itg);
+static void    BakMshItm   (MshSct *);
+static void    RstMshItm   (MshSct *);
+
+
+/*----------------------------------------------------------------------------*/
+/* Prototypes of meshing procedures                                           */
+/*----------------------------------------------------------------------------*/
+
+static itg     EdgIntEdg   (EdgSct *, EdgSct *, VerSct *, fpn);
+static fpn     DisVerTri   (MshSct *, fpn *, TriSct *);
+static fpn     DisVerQad   (MshSct *, fpn *, QadSct *);
+static fpn     DisVerTet   (MshSct *, fpn *, TetSct *);
+static fpn     GetTriSrf   (TriSct *);
+static fpn     GetVolTet   (TetSct *);
+static fpn     DisVerEdg   (fpn *, EdgSct *);
+static void    GetTriVec   (TriSct *, fpn *);
+static void    SetTriNrm   (TriSct *);
+static void    SetTmpHex   (HexSct *, fpn *, fpn *);
+static itg     VerInsTet   (VerSct *, TetSct *, fpn);
+static itg     VerInsHex   (VerSct *, HexSct *);
+static itg     EdgIntHex   (EdgSct *, HexSct *, fpn);
+static itg     TriIntHex   (TriSct *, HexSct *, fpn);
+static itg     QadIntHex   (QadSct *, HexSct *, fpn);
+static itg     TetIntHex   (TetSct *, HexSct *, fpn);
+static itg     EdgIntQad   (HexSct *, itg, EdgSct *, VerSct *, fpn);
+static itg     EdgIntTri   (TriSct *, EdgSct *, VerSct *, fpn);
+static itg     VerInsTri   (TriSct *, VerSct *, fpn);
+static itg     VerInsEdg   (EdgSct *, VerSct *, fpn);
+static void    SetEdgTng   (EdgSct *);
+static fpn     GetTriAni   (TriSct *);
+
+
+/*----------------------------------------------------------------------------*/
+/* Prototypes of geometric procedures                                         */
+/*----------------------------------------------------------------------------*/
+
+static void    PrjVerLin   (fpn *, fpn *, fpn *, fpn *);
+static fpn     PrjVerPla   (fpn *, fpn *, fpn *, fpn *);
+static void    LinCmbVec3  (fpn,   fpn *, fpn,   fpn *, fpn *);
+static void    ClrVec      (fpn *);
+static void    CpyVec      (fpn *, fpn *);
+static void    AddVec2     (fpn *, fpn *);
+static void    SubVec2     (fpn *, fpn *);
+static void    SubVec3     (fpn *, fpn *, fpn *);
+static void    AddScaVec1  (fpn,   fpn *);
+static void    AddScaVec2  (fpn,   fpn *, fpn *);
+static void    MulVec1     (fpn,   fpn *);
+static void    MulVec2     (fpn,   fpn *, fpn *);
+static void    NrmVec      (fpn *);
+static void    CrsPrd      (fpn *, fpn *, fpn *);
+static fpn     DotPrd      (fpn *, fpn *);
+static fpn     dis         (fpn *, fpn *);
+static fpn     DisPow      (fpn *, fpn *);
+static fpn     DisVerPla   (fpn *, fpn *, fpn *);
+static fpn     GetNrmVec   (fpn *);
+static fpn     VerInsBox   (fpn *, fpn *, fpn *, fpn);
+static itg     LinIntBox   (fpn *, fpn *, fpn *, fpn *, fpn);
+static void    LinIntPla   (fpn *, fpn *, fpn *, fpn *, fpn *);
+
+
+/*----------------------------------------------------------------------------*/
+/* Prototypes of memory handling procedures                                   */
+/*----------------------------------------------------------------------------*/
+
+static void   *NewMem      (TreSct *, size_t);
+static void    FreAllMem   (TreSct *);
+
+
+/*----------------------------------------------------------------------------*/
+/* Local mesh connectivity tables                                             */
+/*----------------------------------------------------------------------------*/
+
+static const itg TetEdg[6][2]    = { {0,1}, {0,2}, {0,3}, {1,2}, {1,3}, {2,3} };
+static const itg TetFac[4][3]    = { {1,2,3}, {2,0,3}, {3,0,1}, {0,2,1} };
+static const itg TetFacEdg[4][3] = { {5,4,3}, {2,5,1}, {0,4,2}, {3,1,0} };
+static const itg tvpe[12][2]     = { {3,2}, {0,1}, {4,5}, {7,6}, {3,7}, {2,6},
+                                     {1,5}, {0,4}, {3,0}, {7,4}, {6,5}, {2,1} };
+static const itg tvpf[6][4]      = { {3,0,4,7}, {5,1,2,6}, {3,2,1,0},
+                                     {5,6,7,4},{3,7,6,2}, {5,4,0,1} };
+
+
+/*----------------------------------------------------------------------------*/
+/* Allocate and build a new octree from user's data                           */
+/*----------------------------------------------------------------------------*/
+
+int64_t LolNewOctree(itg NmbVer, fpn *PtrCrd1, fpn *PtrCrd2,
+                     itg NmbEdg, itg *PtrEdg1, itg *PtrEdg2,
+                     itg NmbTri, itg *PtrTri1, itg *PtrTri2,
+                     itg NmbQad, itg *PtrQad1, itg *PtrQad2,
+                     itg NmbTet, itg *PtrTet1, itg *PtrTet2,
+                     itg NmbPyr, itg *PtrPyr1, itg *PtrPyr2,
+                     itg NmbPri, itg *PtrPri1, itg *PtrPri2,
+                     itg NmbHex, itg *PtrHex1, itg *PtrHex2,
+                     itg BasIdx, itg NmbThr)
+{
+   itg         i, j, k, t, EdgIdx, TotItmCnt = 0, MaxItmCnt, idx = 0;
+   fpn         crd[3];
+   BucSct     *buc;
+   TreSct     *tre = NULL;
+   MshSct     *msh;
+   OctThrSct  *OctThr;
+   MshThrSct  *MshThr;
+
+   // Make sure we have a vertex table and a valid base index (0 or 1)
+   if(!NmbVer || !PtrCrd1 || !PtrCrd2 || (BasIdx < 0) || (BasIdx > 1) )
+      return(0);
+
+   NmbThr = MAX(NmbThr, 1);
+   NmbThr = MIN(NmbThr, MaxThr);
+   MaxItmCnt = NmbVer;
+
+   // Setup a single octant octree
+   tre = calloc(1, sizeof(TreSct));
+   assert(tre);
+
+   // Setup the mesh structure
+   msh = NewMem(tre, sizeof(MshSct));
+   msh->BasIdx = BasIdx;
+
+   msh->NmbItm[ LolTypVer ] = NmbVer;
+   TotItmCnt               += NmbVer;
+   msh->UsrPtr[ LolTypVer ] = (char *)PtrCrd1;
+   msh->UsrSiz[ LolTypVer ] = (char *)PtrCrd2 - (char *)PtrCrd1;
+
+   msh->NmbItm[ LolTypEdg ] = NmbEdg;
+   MaxItmCnt                = MAX(MaxItmCnt, NmbEdg);
+   TotItmCnt               += NmbEdg;
+   msh->UsrPtr[ LolTypEdg ] = (char *)PtrEdg1;
+   msh->UsrSiz[ LolTypEdg ] = (char *)PtrEdg2 - (char *)PtrEdg1;
+
+   msh->NmbItm[ LolTypTri ] = NmbTri;
+   MaxItmCnt                = MAX(MaxItmCnt, NmbTri);
+   TotItmCnt               += NmbTri;
+   msh->UsrPtr[ LolTypTri ] = (char *)PtrTri1;
+   msh->UsrSiz[ LolTypTri ] = (char *)PtrTri2 - (char *)PtrTri1;
+
+   msh->NmbItm[ LolTypQad ] = NmbQad;
+   MaxItmCnt                = MAX(MaxItmCnt, NmbQad);
+   TotItmCnt               += NmbQad;
+   msh->UsrPtr[ LolTypQad ] = (char *)PtrQad1;
+   msh->UsrSiz[ LolTypQad ] = (char *)PtrQad2 - (char *)PtrQad1;
+
+   msh->NmbItm[ LolTypTet ] = NmbTet;
+   MaxItmCnt                = MAX(MaxItmCnt, NmbTet);
+   TotItmCnt               += NmbTet;
+   msh->UsrPtr[ LolTypTet ] = (char *)PtrTet1;
+   msh->UsrSiz[ LolTypTet ] = (char *)PtrTet2 - (char *)PtrTet1;
+
+   for(t=0;t<NmbThr;t++)
+   {
+      MshThr = &msh->thr[t];
+
+      MshThr->FlgTab = NewMem(tre, (MaxItmCnt + 1) * sizeof(char) );
+      memset(MshThr->FlgTab, 0, (MaxItmCnt + 1) * sizeof(char));
+
+      MshThr->TagTab = NewMem(tre, (MaxItmCnt + 1) * sizeof(itg) );
+      memset(MshThr->TagTab, 0, (MaxItmCnt + 1) * sizeof(itg));
+
+      MshThr->tag = 0;
+   }
+
+   // Setup the octree structure
+   SetMshBox(tre, msh);
+   tre->msh = msh;
+   msh->eps = tre->eps;
+
+   // Set the grid size depending on the number of entities in the mesh
+   tre->GrdLvl = MAX(MinGrdLvl, log((TotItmCnt) / ItmPerBuc) / (3 * log(2)));
+   tre->NmbBuc = 1<<tre->GrdLvl;
+   tre->grd    = NewMem(tre, CUB(tre->NmbBuc) * sizeof(BucSct));
+   tre->NmbThr = NmbThr;
+
+   for(t=0;t<NmbThr;t++)
+   {
+      MshThr = &msh->thr[t];
+      OctThr = &tre->thr[t];
+
+      OctThr->ThrStk = NewMem(tre, CUB(tre->NmbBuc) * sizeof(void *));
+      OctThr->ThrTag = NewMem(tre, CUB(tre->NmbBuc) * sizeof(itg));
+
+      // Setup the temporary edge for local geometric calculations
+      for(i=0;i<2;i++)
+         MshThr->edg.ver[i] = &MshThr->ver[i];
+
+      // Setup the temporary triangle for local geometric calculations
+      for(i=0;i<3;i++)
+      {
+         MshThr->tri.ver[i] = &MshThr->ver[i];
+         MshThr->tri.edg[i].ver[0] = &MshThr->ver[ (i+1)%3 ];
+         MshThr->tri.edg[i].ver[1] = &MshThr->ver[ (i+2)%3 ];
+      }
+
+      // Setup the temporary quad for local geometric calculations
+      for(i=0;i<4;i++)
+      {
+         MshThr->qad.ver[i] = &MshThr->ver[i];
+         MshThr->qad.edg[i].ver[0] = &MshThr->ver[ i ];
+         MshThr->qad.edg[i].ver[1] = &MshThr->ver[ (i+1)%4 ];
+      }
+
+      // The quad is made of two triangles
+      MshThr->qad.tri[0].ver[0] = &MshThr->ver[0];
+      MshThr->qad.tri[0].ver[1] = &MshThr->ver[1];
+      MshThr->qad.tri[0].ver[2] = &MshThr->ver[2];
+
+      MshThr->qad.tri[1].ver[0] = &MshThr->ver[3];
+      MshThr->qad.tri[1].ver[1] = &MshThr->ver[2];
+      MshThr->qad.tri[1].ver[2] = &MshThr->ver[1];
+
+      for(i=0;i<2;i++)
+         for(j=0;j<3;j++)
+         {
+            MshThr->qad.tri[i].edg[j].ver[0] = MshThr->qad.tri[i].ver[ (j+1)%3 ];
+            MshThr->qad.tri[i].edg[j].ver[1] = MshThr->qad.tri[i].ver[ (j+2)%3 ];
+         }
+
+      // Setup the temporary tetrahedron for local geometric calculations
+      for(i=0;i<4;i++)
+         MshThr->tet.ver[i] = &MshThr->ver[i];
+
+      for(i=0;i<4;i++)
+      {
+         for(j=0;j<3;j++)
+            MshThr->tet.tri[i].ver[j] = MshThr->tet.ver[ TetFac[i][j] ];
+
+         for(j=0;j<3;j++)
+         {
+            EdgIdx = TetFacEdg[i][j];
+            MshThr->tet.tri[i].edg[j].ver[0] = MshThr->tet.ver[ TetEdg[ EdgIdx ][0] ];
+            MshThr->tet.tri[i].edg[j].ver[1] = MshThr->tet.ver[ TetEdg[ EdgIdx ][1] ];
+         }
+      }
+
+      for(i=0;i<6;i++)
+         for(j=0;j<2;j++)
+            MshThr->tet.edg[i].ver[j] = MshThr->tet.ver[ TetEdg[i][j] ];
+
+      // Setup the temporary hex for local geometric calculations
+      for(i=0;i<8;i++)
+         OctThr->hex.ver[i] = &OctThr->ver[i];
+
+      for(i=0;i<12;i++)
+      {
+         OctThr->hex.edg[i].ver[0] =  &OctThr->ver[ tvpe[i][0] ];
+         OctThr->hex.edg[i].ver[1] =  &OctThr->ver[ tvpe[i][1] ];
+      }
+
+      for(i=0;i<6;i++)
+         for(j=0;j<4;j++)
+            OctThr->hex.qad[i].ver[j] =  &OctThr->ver[ tvpf[i][j] ];
+
+      for(i=0;i<4;i++)
+      {
+         OctThr->hex.edg[i].tng[0] = 1;
+         OctThr->hex.edg[i].tng[1] = 0;
+         OctThr->hex.edg[i].tng[2] = 0;
+
+         OctThr->hex.edg[i+4].tng[0] = 0;
+         OctThr->hex.edg[i+4].tng[1] = 1;
+         OctThr->hex.edg[i+4].tng[2] = 0;
+
+         OctThr->hex.edg[i+8].tng[0] = 0;
+         OctThr->hex.edg[i+8].tng[1] = 0;
+         OctThr->hex.edg[i+8].tng[2] = 1;
+      }
+
+      OctThr->hex.qad[0].nrm[0] = 1;
+      OctThr->hex.qad[0].nrm[1] = 0;
+      OctThr->hex.qad[0].nrm[2] = 0;
+
+      OctThr->hex.qad[1].nrm[0] = -1;
+      OctThr->hex.qad[1].nrm[1] = 0;
+      OctThr->hex.qad[1].nrm[2] = 0;
+
+      OctThr->hex.qad[2].nrm[0] = 0;
+      OctThr->hex.qad[2].nrm[1] = 1;
+      OctThr->hex.qad[2].nrm[2] = 0;
+
+      OctThr->hex.qad[3].nrm[0] = 0;
+      OctThr->hex.qad[3].nrm[1] = -1;
+      OctThr->hex.qad[3].nrm[2] = 0;
+
+      OctThr->hex.qad[4].nrm[0] = 0;
+      OctThr->hex.qad[4].nrm[1] = 0;
+      OctThr->hex.qad[4].nrm[2] = 1;
+
+      OctThr->hex.qad[5].nrm[0] = 0;
+      OctThr->hex.qad[5].nrm[1] = 0;
+      OctThr->hex.qad[5].nrm[2] = -1;
+   }
+
+   // Insert each vertex in the octree
+   for(i=0;i<msh->NmbItm[ LolTypVer ];i++)
+   {
+      SetItm(msh, LolTypVer, i + BasIdx, 0, 0);
+      AddVer(msh, tre, &tre->oct, tre->bnd[0], tre->bnd[1]);
+   }
+
+   // Insert each edge in the octree
+   for(i=0;i<msh->NmbItm[ LolTypEdg ];i++)
+   {
+      SetItm(msh, LolTypEdg, i + BasIdx, 0, 0);
+      AddEdg(msh, tre, &tre->oct, tre->bnd[0], tre->bnd[1]);
+   }
+
+   // Insert each triangle in the octree
+   for(i=0;i<msh->NmbItm[ LolTypTri ];i++)
+   {
+      SetItm(msh, LolTypTri, i + BasIdx, TngFlg | AniFlg, 0);
+      AddTri(msh, tre, &tre->oct, tre->bnd[0], tre->bnd[1]);
+   }
+
+   // Insert each quad in the octree
+   for(i=0;i<msh->NmbItm[ LolTypQad ];i++)
+   {
+      SetItm(msh, LolTypQad, i + BasIdx, TngFlg | AniFlg, 0);
+      AddQad(msh, tre, &tre->oct, tre->bnd[0], tre->bnd[1]);
+   }
+
+   // Insert each tetrahedron in the octree
+   for(i=0;i<msh->NmbItm[ LolTypTet ];i++)
+   {
+      SetItm(msh, LolTypTet, i + BasIdx, TngFlg, 0);
+      AddTet(msh, tre, &tre->oct, tre->bnd[0], tre->bnd[1]);
+   }
+
+   // Setup an acceleration grid whose buckets point to an octant
+   tre->BucSiz = (tre->bnd[1][0] - tre->bnd[0][0]) / (fpn)tre->NmbBuc;
+   crd[0] = tre->bnd[0][0] + tre->BucSiz / 2.;
+
+   for(i=0;i<tre->NmbBuc;i++)
+   {
+      crd[1] = tre->bnd[0][1] + tre->BucSiz / 2.;
+
+      for(j=0;j<tre->NmbBuc;j++)
+      {
+         crd[2] = tre->bnd[0][2] + tre->BucSiz / 2.;
+
+         for(k=0;k<tre->NmbBuc;k++)
+         {
+            buc = &tre->grd[ i * POW(tre->NmbBuc) + j * tre->NmbBuc + k ];
+            buc->oct = GetCrd(&tre->oct, tre->GrdLvl,
+                              crd, tre->bnd[0], tre->bnd[1]);
+            buc->pos[0] = i;
+            buc->pos[1] = j;
+            buc->pos[2] = k;
+            buc->idx = idx++;
+            crd[2] += tre->BucSiz;
+         }
+
+         crd[1] += tre->BucSiz;
+      }
+
+      crd[0] += tre->BucSiz;
+   }
+
+   // Return the octree's unique ID
+   return((int64_t)tre);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Free the octants and the links                                             */
+/*----------------------------------------------------------------------------*/
+
+size_t LolFreeOctree(int64_t OctIdx)
+{
+   TreSct  *tre = (TreSct *)OctIdx;
+   size_t   MemUse = tre->MemUse;
+
+   FreAllMem(tre);
+   memset(tre, 0, sizeof(TreSct));
+
+   return(MemUse);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Search the octree for mesh entities included in this box                   */
+/*----------------------------------------------------------------------------*/
+
+itg LolGetBoundingBox(  int64_t OctIdx, itg typ, itg MaxItm, itg *ItmTab,
+                        fpn MinCrd[3], fpn MaxCrd[3], itg ThrIdx )
+{
+   itg i, NmbItm = 0;
+   fpn box[2][3] = { {MinCrd[0], MinCrd[1], MinCrd[2]},
+                     {MaxCrd[0], MaxCrd[1], MaxCrd[2]} };
+   TreSct *tre = (TreSct *)OctIdx;
+
+   GetBox(  tre, &tre->oct, typ, &NmbItm, MaxItm, ItmTab,
+            tre->msh->thr[ ThrIdx ].FlgTab, box, tre->eps,
+            tre->bnd[0], tre->bnd[1], ThrIdx );
+
+   for(i=0;i<NmbItm;i++)
+      tre->msh->thr[ ThrIdx ].FlgTab[ ItmTab[i] ] = 0;
+
+   return(NmbItm);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Recusrsive coordinates search                                              */
+/*----------------------------------------------------------------------------*/
+
+static OctSct *GetCrd(  OctSct *oct, itg MaxLvl, fpn VerCrd[3],
+                        fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg SonIdx;
+   fpn MidCrd[3], OctMin[3], OctMax[3], SonMin[3], SonMax[3];
+
+   CpyVec(MinCrd, OctMin);
+   CpyVec(MaxCrd, OctMax);
+
+   // Search for the smallest octant containing
+   // this vertex but stop at the grid level
+   while(oct->sub && (oct->lvl < MaxLvl))
+   {
+      LinCmbVec3(.5, OctMin, .5, OctMax, MidCrd);
+
+      SonIdx =    ((VerCrd[0] < MidCrd[0]) ? 0 : 1)
+               |  ((VerCrd[1] < MidCrd[1]) ? 0 : 2)
+               |  ((VerCrd[2] < MidCrd[2]) ? 0 : 4);
+
+      SetSonCrd(SonIdx, SonMin, SonMax, OctMin, OctMax);
+      CpyVec(SonMin, OctMin);
+      CpyVec(SonMax, OctMax);
+      oct = oct->son + SonIdx;
+   }
+
+   return(oct);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Recusrsive box search                                                      */
+/*----------------------------------------------------------------------------*/
+
+static void GetBox(  TreSct *tre, OctSct *oct, itg typ, itg *NmbItm,
+                     itg MaxItm, itg *ItmTab, char *FlgTab, fpn box[2][3],
+                     fpn eps, fpn MinCrd[3], fpn MaxCrd[3], itg ThrIdx )
+{
+   itg i;
+   LnkSct *lnk;
+   HexSct hex;
+   OctThrSct *ThrOct = &tre->thr[ ThrIdx ];
+   MshThrSct *ThrMsh = &tre->msh->thr[ ThrIdx ];
+   fpn xmid = (MinCrd[0] + MaxCrd[0])/2.;
+   fpn ymid = (MinCrd[1] + MaxCrd[1])/2.;
+   fpn zmid = (MinCrd[2] + MaxCrd[2])/2.;
+   fpn son[8][2][3] = {
+      { {MinCrd[0], MinCrd[1], MinCrd[2]}, {xmid, ymid, zmid} },
+      { {xmid, MinCrd[1], MinCrd[2]}, {MaxCrd[0], ymid, zmid} },
+      { {MinCrd[0], ymid, MinCrd[2]}, {xmid, MaxCrd[1], zmid} },
+      { {xmid, ymid, MinCrd[2]}, {MaxCrd[0], MaxCrd[1], zmid} },
+      { {MinCrd[0], MinCrd[1], zmid}, {xmid, ymid, MaxCrd[2]} },
+      { {xmid, MinCrd[1], zmid}, {MaxCrd[0], ymid, MaxCrd[2]} },
+      { {MinCrd[0], ymid, zmid}, {xmid, MaxCrd[1], MaxCrd[2]} },
+      { {xmid, ymid, zmid}, {MaxCrd[0], MaxCrd[1], MaxCrd[2]} } };
+
+   if(oct->sub)
+   {
+      // Recursively intersect the box with the octree
+      for(i=0;i<8;i++)
+         if(BoxIntBox(box, son[i], eps))
+            GetBox(  tre, oct->son+i, typ, NmbItm, MaxItm, ItmTab,
+                     FlgTab, box, eps, son[i][0], son[i][1], ThrIdx );
+   }
+   else if((lnk = oct->lnk) && (*NmbItm < MaxItm) )
+   {
+      SetTmpHex(&ThrOct->hex, box[0], box[1]);
+
+      // When a terminal octant is reached, add its linked entities
+      // to the table and flag them to avoid duplicates
+      do
+      {
+         if(lnk->typ != typ)
+            continue;
+
+         if(lnk->typ == LolTypVer)
+         {
+            SetItm(tre->msh, LolTypVer, lnk->idx, 0, ThrIdx);
+
+            if(!VerInsHex(&ThrMsh->ver[0], &ThrOct->hex))
+               continue;
+         }
+         else if(lnk->typ == LolTypEdg)
+         {
+            SetItm(tre->msh, LolTypEdg, lnk->idx, 0, ThrIdx);
+
+            if(!EdgIntHex(&ThrMsh->edg, &ThrOct->hex, tre->eps))
+               continue;
+         }
+         else if(lnk->typ == LolTypTri)
+         {
+            SetItm(tre->msh, LolTypTri, lnk->idx, TngFlg, ThrIdx);
+
+            if(!TriIntHex(&ThrMsh->tri, &ThrOct->hex, tre->eps))
+               continue;
+         }
+         else if(lnk->typ == LolTypQad)
+         {
+            SetItm(tre->msh, LolTypQad, lnk->idx, TngFlg, ThrIdx);
+
+            if(!QadIntHex(&ThrMsh->qad, &ThrOct->hex, tre->eps))
+               continue;
+         }
+         else if(lnk->typ == LolTypTet)
+         {
+            SetItm(tre->msh, LolTypTet, lnk->idx, TngFlg, ThrIdx);
+
+            if(!TetIntHex(&ThrMsh->tet, &ThrOct->hex, tre->eps))
+               continue;
+         }
+
+         if(!FlgTab[ lnk->idx ])
+         {
+            ItmTab[ (*NmbItm)++ ] = lnk->idx;
+            FlgTab[ lnk->idx ] = 1;
+         }
+      }while( (lnk = lnk->nex) && (*NmbItm < MaxItm) );
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Search for the nearest item from a vertex in the octree                    */
+/*----------------------------------------------------------------------------*/
+
+itg LolGetNearest(int64_t OctIdx, itg typ, fpn *VerCrd, fpn *MinDis, fpn MaxDis,
+                  itg (UsrPrc)(void *, itg), void *UsrDat, itg ThrIdx)
+{
+   TreSct     *tre = (TreSct *)OctIdx;
+   itg         i, ins = 0, out = 0, MinItm = 0, ini[3], *tag, len;
+   fpn         MinCrd[3], MaxCrd[3], vec[3];
+   MshSct     *msh = tre->msh;
+   BucSct     *IniBuc, *buc, *ngb, **stk;
+   OctThrSct  *ThrOct = &tre->thr[ ThrIdx ];
+   MshThrSct  *ThrMsh = &tre->msh->thr[ ThrIdx ];
+
+   if( (ThrIdx < 0) || (ThrIdx >= tre->NmbThr) )
+      return(0);
+
+   ThrOct->tag++;
+   ThrMsh->tag = ThrOct->tag;
+   tag = ThrOct->ThrTag;
+   stk = ThrOct->ThrStk;
+   len = tre->NmbBuc;
+   *MinDis = (MaxDis > 0.) ? POW(MaxDis) : DBL_MAX;
+
+   // Get the vertex's integer coordinates in the grid
+   // and clip it if it stands outside the bounding box
+   for(i=0;i<3;i++)
+   {
+      ini[i] = (VerCrd[i] - tre->bnd[0][i]) / tre->BucSiz;
+      ini[i] = MAX(0, ini[i]);
+      ini[i] = MIN(len-1, ini[i]);
+   }
+
+   IniBuc = &tre->grd[ ini[0] * POW(len) + ini[1] * len + ini[2] ];
+
+   // Push the octant containing the starting point on the lifo stack
+   stk[ ins++ ] = IniBuc;
+   tag[ IniBuc->idx ] = ThrOct->tag;
+
+   // Flood fill processing of the grid : 
+   // check octant's contents distance against the closest item
+   while(ins > out)
+   {
+      buc = stk[ out++ ];
+      GetBucBox(  tre, buc, MinCrd, MaxCrd );
+      GetOctLnk(  msh, typ, VerCrd, &MinItm, MinDis, buc->oct,
+                  MinCrd, MaxCrd, UsrPrc, UsrDat, ThrIdx );
+
+      // Push unprocessed neighbours on the stack as long as they are not too far
+      for(i=0;i<6;i++)
+      {
+         if( !(ngb = GetBucNgb(tre, buc, i)) || (tag[ ngb->idx ] == ThrOct->tag) )
+            continue;
+
+         GetBucBox(tre, ngb, MinCrd, MaxCrd);
+
+         if(DisVerOct(VerCrd, MinCrd, MaxCrd) < *MinDis)
+         {
+            stk[ ins++ ] = ngb;
+            tag[ ngb->idx ] = ThrOct->tag;
+         }
+      }
+   }
+
+   *MinDis = sqrt(*MinDis);
+
+   return(MinItm);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Find the closest intersected triangle along a line                         */
+/*----------------------------------------------------------------------------*/
+
+itg LolIntersectSurface(int64_t OctIdx, fpn *VerCrd, fpn *VerTng, fpn *MinDis,
+                        fpn MaxDis, itg (UsrPrc)(void *, itg), void *UsrDat,
+                        itg ThrIdx )
+{
+   TreSct     *tre = (TreSct *)OctIdx;
+   OctThrSct  *ThrOct = &tre->thr[ ThrIdx ];
+   MshThrSct  *ThrMsh = &tre->msh->thr[ ThrIdx ];
+   itg         i, ins=0, out=0, MinItm = 0, ini[3], *tag, len;
+   fpn         MinCrd[3], MaxCrd[3], vec[3];
+   MshSct     *msh = tre->msh;
+   BucSct     *IniBuc, *buc, *ngb, **stk;
+
+   ThrOct->tag++;
+   ThrMsh->tag = ThrOct->tag;
+   tag = ThrOct->ThrTag;
+   stk = ThrOct->ThrStk;
+   len = tre->NmbBuc;
+   *MinDis = (MaxDis > 0.) ? POW(MaxDis) : DBL_MAX;
+
+   // Get the vertex's integer coordinates in the grid
+   // and clip it if it stands outside the bounding box
+   for(i=0;i<3;i++)
+   {
+      ini[i] = (VerCrd[i] - tre->bnd[0][i]) / tre->BucSiz;
+      ini[i] = MAX(0, ini[i]);
+      ini[i] = MIN(tre->NmbBuc-1, ini[i]);
+   }
+
+   IniBuc = &tre->grd[ ini[0] * POW(len) + ini[1] * len + ini[2] ];
+
+   // Push the octant containing the starting point on the lifo stack
+   stk[ ins++ ] = IniBuc;
+   tag[ IniBuc->idx ] = ThrOct->tag;
+
+   // Flood fill processing of the grid : 
+   // check octant's contents distance against the closest item
+   while(ins > out)
+   {
+      buc = stk[ out++ ];
+      GetBucBox(  tre, buc, MinCrd, MaxCrd);
+      IntRayOct(  tre, msh, VerCrd, VerTng, &MinItm, MinDis, buc->oct,
+                  MinCrd, MaxCrd, UsrPrc, UsrDat, ThrIdx );
+
+      // Push unprocessed neighbours intersected by the line
+      // on the stack as long as they are not too far
+      for(i=0;i<6;i++)
+      {
+         if( !(ngb = GetBucNgb(tre, buc, i)) || (tag[ ngb->idx ] == ThrOct->tag) )
+            continue;
+
+         GetBucBox(tre, ngb, MinCrd, MaxCrd);
+
+         if(!LinIntBox(VerCrd, VerTng, MinCrd, MaxCrd, tre->eps))
+            continue;
+
+         if(DisVerOct(VerCrd, MinCrd, MaxCrd) < *MinDis)
+         {
+            stk[ ins++ ] = ngb;
+            tag[ ngb->idx ] = ThrOct->tag;
+         }
+      }
+   }
+
+   *MinDis = sqrt(*MinDis);
+
+   return(MinItm);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Project a vertex on a given enitity: vertex, edge, triangle or quad        */
+/*----------------------------------------------------------------------------*/
+
+itg LolProjectVertex(int64_t OctIdx, fpn *VerCrd, itg typ,
+                     itg MinItm, fpn *MinCrd, itg ThrIdx)
+{
+   TreSct     *tre = (TreSct *)OctIdx;
+   OctThrSct  *ThrOct = &tre->thr[ ThrIdx ];
+   MshThrSct  *ThrMsh = &tre->msh->thr[ ThrIdx ];
+   MshSct     *msh = tre->msh;
+   VerSct      TmpVer;
+   TriSct     *tri;
+   itg         i, EdgFlg = 0;
+   fpn         CurDis, MinDis = DBL_MAX;
+
+   if(typ == LolTypVer)
+   {
+      // Vertex case, there is only one possible projection:
+      // the target vertex itself
+      CpyVec((fpn *)GetPtrItm(msh, LolTypVer, MinItm), MinCrd);
+      return(1);
+   }
+   else if(typ == LolTypEdg)
+   {
+      // Edge case, the closest position may be on the edge itself
+      SetItm(msh, LolTypEdg, MinItm, 0, ThrIdx);
+      PrjVerLin(VerCrd, ThrMsh->edg.ver[0]->crd, ThrMsh->edg.tng, TmpVer.crd);
+
+      if(VerInsEdg(&ThrMsh->edg, &TmpVer, tre->eps))
+      {
+         CpyVec(TmpVer.crd, MinCrd);
+         return(2);
+      }
+
+      // Or one of its two vertices
+      if(dis(VerCrd, ThrMsh->edg.ver[0]->crd) < dis(VerCrd, ThrMsh->edg.ver[1]->crd))
+         CpyVec(ThrMsh->edg.ver[0]->crd, MinCrd);
+      else
+         CpyVec(ThrMsh->edg.ver[1]->crd, MinCrd);
+
+      return(1);
+   }
+   else if(typ == LolTypTri)
+   {
+      // Triangle case, the closest position may be on the triangle itself
+      SetItm(msh, LolTypTri, MinItm, TngFlg, ThrIdx);
+      PrjVerPla(VerCrd, ThrMsh->tri.ver[0]->crd, ThrMsh->tri.nrm, TmpVer.crd);
+
+      if(VerInsTri(&ThrMsh->tri, &TmpVer, tre->eps))
+      {
+         CpyVec(TmpVer.crd, MinCrd);
+         return(3); // the closest projection is inside the triangle
+      }
+
+      // Or fall inside one of its three edges
+      for(i=0;i<3;i++)
+      {
+         PrjVerLin(  VerCrd, ThrMsh->tri.edg[i].ver[0]->crd,
+                     ThrMsh->tri.edg[i].tng, TmpVer.crd );
+
+         if(VerInsEdg(&ThrMsh->tri.edg[i], &TmpVer, tre->eps)
+         && (dis(VerCrd, TmpVer.crd) < MinDis) )
+         {
+            MinDis = dis(VerCrd, TmpVer.crd);
+            CpyVec(TmpVer.crd, MinCrd);
+            EdgFlg = 2;
+         }
+      }
+
+      // Or one of the three vertices
+      for(i=0;i<3;i++)
+      {
+         CurDis = dis(VerCrd, ThrMsh->tri.ver[i]->crd);
+
+         if(CurDis < MinDis)
+         {
+            MinDis = CurDis;
+            CpyVec(ThrMsh->tri.ver[i]->crd, MinCrd);
+            EdgFlg = 0;
+         }
+      }
+
+      if(EdgFlg)
+         return(2); // the closest projection is on an edge
+      else
+         return(1); // the closest projection is on a vertex
+   }
+   else if(typ == LolTypQad)
+   {
+      SetItm(msh, LolTypQad, MinItm, TngFlg, ThrIdx);
+
+      // Compute the projection on the two triangles
+      for(i=0;i<2;i++)
+      {
+         tri = &ThrMsh->qad.tri[i];
+         PrjVerPla(VerCrd, tri->ver[0]->crd, tri->nrm, TmpVer.crd);
+
+         if(VerInsTri(tri, &TmpVer, tre->eps))
+         {
+            CpyVec(TmpVer.crd, MinCrd);
+            return(3); // the closest projection is inside the quad
+         }
+      }
+
+      // Check the projections on the four edges
+      for(i=0;i<4;i++)
+      {
+         PrjVerLin(  VerCrd, ThrMsh->qad.edg[i].ver[0]->crd,
+                     ThrMsh->qad.edg[i].tng, TmpVer.crd );
+
+         if(VerInsEdg(&ThrMsh->qad.edg[i], &TmpVer, tre->eps)
+         && (dis(VerCrd, TmpVer.crd) < MinDis) )
+         {
+            MinDis = dis(VerCrd, TmpVer.crd);
+            CpyVec(TmpVer.crd, MinCrd);
+            EdgFlg = 2;
+         }
+      }
+
+      // Or one of the four vertices
+      for(i=0;i<4;i++)
+      {
+         CurDis = dis(VerCrd, ThrMsh->qad.ver[i]->crd);
+
+         if(CurDis < MinDis)
+         {
+            MinDis = CurDis;
+            CpyVec(ThrMsh->qad.ver[i]->crd, MinCrd);
+            EdgFlg = 0;
+         }
+      }
+
+      if(EdgFlg)
+         return(2); // the closest projection is on an edge
+      else
+         return(1); // the closest projection is on a vertex
+   }
+   else
+      return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Extract the bounding box from a grid's bucket                              */
+/*----------------------------------------------------------------------------*/
+
+static void GetBucBox(  TreSct *tre, BucSct *buc,
+                        fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+   {
+      MinCrd[i] = tre->bnd[0][i] + buc->pos[i] * tre->BucSiz;
+      MaxCrd[i] = tre->bnd[0][i] + (buc->pos[i]+1) * tre->BucSiz;
+   }
+
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Get a bucket's neighbour from the grid                                     */
+/*----------------------------------------------------------------------------*/
+
+static BucSct *GetBucNgb(TreSct *tre, BucSct *buc, itg dir)
+{
+   if( (dir == 0) && (buc->pos[0] > 0) )
+      return(&tre->grd[ (buc->pos[0]-1) * POW(tre->NmbBuc)
+            + buc->pos[1] * tre->NmbBuc + buc->pos[2] ]);
+
+   if( (dir == 1) && (buc->pos[0] < tre->NmbBuc-1) )
+      return(&tre->grd[ (buc->pos[0]+1) * POW(tre->NmbBuc)
+            + buc->pos[1] * tre->NmbBuc + buc->pos[2] ]);
+
+   if( (dir == 2) && (buc->pos[1] > 0) )
+      return(&tre->grd[ buc->pos[0] * POW(tre->NmbBuc)
+            + (buc->pos[1]-1) * tre->NmbBuc + buc->pos[2] ]);
+
+   if( (dir == 3) && (buc->pos[1] < tre->NmbBuc-1) )
+      return(&tre->grd[ buc->pos[0] * POW(tre->NmbBuc)
+            + (buc->pos[1]+1) * tre->NmbBuc + buc->pos[2] ]);
+
+   if( (dir == 4) && (buc->pos[2] > 0) )
+      return(&tre->grd[ buc->pos[0] * POW(tre->NmbBuc)
+            + buc->pos[1] * tre->NmbBuc + buc->pos[2]-1 ]);
+
+   if( (dir == 5) && (buc->pos[2] < tre->NmbBuc-1) )
+      return(&tre->grd[ buc->pos[0] * POW(tre->NmbBuc)
+            + buc->pos[1] * tre->NmbBuc + buc->pos[2]+1 ]);
+
+   return(NULL);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a point and an octant                         */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerOct(fpn VerCrd[3], fpn MinCrd[3], fpn MaxCrd[3])
+{
+   itg i;
+   fpn ClpCrd[3];
+
+   // Project the vertex on the octant's surface
+   for(i=0;i<3;i++)
+   {
+      ClpCrd[i] = MAX(VerCrd[i], MinCrd[i]);
+      ClpCrd[i] = MIN(ClpCrd[i], MaxCrd[i]);
+   }
+
+   // The distance between the projection and the vertex is the shortest
+   // if this latter stands OUTSIDE the octant
+   return(DisPow(ClpCrd, VerCrd));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Search for the nearest item from a vertex from an octant                   */
+/*----------------------------------------------------------------------------*/
+
+static void GetOctLnk(  MshSct *msh, itg typ, fpn VerCrd[3], itg *MinItm,
+                        fpn *MinDis, OctSct *oct, fpn MinCrd[3], fpn MaxCrd[3],
+                        itg (UsrPrc)(void *, itg), void *UsrDat, itg ThrIdx )
+{
+   itg         i, *IdxTab;
+   fpn         CurDis, SonMin[3], SonMax[3];
+   LnkSct     *lnk;
+   MshThrSct  *ThrMsh = &msh->thr[ ThrIdx ];
+
+   if(oct->sub)
+   {
+      // Check each sons recursively as long as the minimum distance
+      // between the vertex and the octant is lower than
+      // the current distance from the closest entity
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+
+         if(DisVerOct(VerCrd, SonMin, SonMax) <= *MinDis)
+            GetOctLnk(  msh, typ, VerCrd, MinItm, MinDis, oct->son + i,
+                        SonMin, SonMax, UsrPrc, UsrDat, ThrIdx );
+      }
+   }
+   else if((lnk = oct->lnk))
+   {
+      // When a leaf octant is reached, compute the distance
+      // between its linked enities and the vertex
+      do
+      {
+         if(lnk->typ != typ)
+            continue;
+
+         if(lnk->typ == LolTypVer)
+            CurDis = DisPow(VerCrd, (fpn *)GetPtrItm(msh, LolTypVer, lnk->idx));
+         else if(lnk->typ == LolTypEdg)
+         {
+            SetItm(msh, LolTypEdg, lnk->idx, 0, ThrIdx);
+            CurDis = DisVerEdg(VerCrd, &ThrMsh->edg);
+         }
+         else if(lnk->typ == LolTypTri)
+         {
+            if(ThrMsh->TagTab[ lnk->idx ] == ThrMsh->tag)
+               continue;
+
+            ThrMsh->TagTab[ lnk->idx ] = ThrMsh->tag;
+
+            if(UsrPrc && !UsrPrc(UsrDat, lnk->idx))
+               continue;
+
+            SetItm(msh, LolTypTri, lnk->idx, 0, ThrIdx);
+            CurDis = DisVerTri(msh, VerCrd, &ThrMsh->tri);
+         }
+         else if(lnk->typ == LolTypQad)
+         {
+            if(ThrMsh->TagTab[ lnk->idx ] == ThrMsh->tag)
+               continue;
+
+            ThrMsh->TagTab[ lnk->idx ] = ThrMsh->tag;
+
+            if(UsrPrc && !UsrPrc(UsrDat, lnk->idx))
+               continue;
+
+            SetItm(msh, LolTypQad, lnk->idx, 0, ThrIdx);
+            CurDis = DisVerQad(msh, VerCrd, &ThrMsh->qad);
+         }
+         else if(lnk->typ == LolTypTet)
+         {
+            SetItm(msh, LolTypTet, lnk->idx, 0, ThrIdx);
+            CurDis = DisVerTet(msh, VerCrd, &ThrMsh->tet);
+         }
+
+         if(CurDis < *MinDis)
+         {
+            *MinItm = lnk->idx;
+            *MinDis = CurDis;
+         }
+      }while((lnk = lnk->nex));
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Search for the nearest triangle instersected by a line                     */
+/*----------------------------------------------------------------------------*/
+
+static void IntRayOct(  TreSct *tre, MshSct *msh, fpn *crd, fpn *tng,
+                        itg *MinItm, fpn *MinDis, OctSct *oct, fpn MinCrd[3],
+                        fpn MaxCrd[3], itg (UsrPrc)(void *, itg), void *UsrDat,
+                        itg ThrIdx )
+{
+   itg         i, *IdxTab;
+   fpn         CurDis, SonMin[3], SonMax[3];
+   VerSct      IntVer;
+   LnkSct     *lnk;
+   MshThrSct  *ThrMsh = &tre->msh->thr[ ThrIdx ];
+
+   if(oct->sub)
+   {
+      // Check each sons recursively as long as the minimum distance
+      // between the vertex and the octant is lower than
+      // the current distance from the closest entity
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+
+         if(!LinIntBox(crd, tng, SonMin, SonMax, msh->eps))
+            continue;
+
+         IntRayOct(  tre, msh, crd, tng, MinItm, MinDis, oct->son+i,
+                     SonMin, SonMax, UsrPrc, UsrDat, ThrIdx );
+      }
+   }
+   else if((lnk = oct->lnk))
+   {
+      // When a leaf octant is reached, compute the intersection
+      // between its linked triangles and the line
+      do
+      {
+         if(lnk->typ != LolTypTri)
+            continue;
+
+         if(ThrMsh->TagTab[ lnk->idx ] == ThrMsh->tag)
+            continue;
+
+         ThrMsh->TagTab[ lnk->idx ] = ThrMsh->tag;
+         SetItm(msh, LolTypTri, lnk->idx, 0, ThrIdx);
+
+         if(UsrPrc && !UsrPrc(UsrDat, lnk->idx))
+            continue;
+
+         if(DotPrd(tng, ThrMsh->tri.nrm) != 0.)
+         {
+            LinIntPla(  crd, tng, ThrMsh->tri.ver[0]->crd,
+                        ThrMsh->tri.nrm, IntVer.crd );
+
+            if(VerInsTri(&ThrMsh->tri, &IntVer, msh->eps))
+            {
+               CurDis = DisPow(IntVer.crd, crd);
+
+               if(CurDis < *MinDis)
+               {
+                  *MinItm = lnk->idx;
+                  *MinDis = CurDis;
+               }
+            }
+         }
+      }while((lnk = lnk->nex));
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Setup an arbitrary geometrical item structure from its index               */
+/*----------------------------------------------------------------------------*/
+
+static void SetItm(MshSct *msh, itg typ, itg idx, itg flg, itg ThrIdx)
+{
+   itg         i, j, *IdxTab;
+   const itg   TetEdgFac[6][2] = { {2,3}, {1,3}, {1,2}, {0,3}, {0,2}, {0,1} };
+   MshThrSct  *ThrMsh = &msh->thr[ ThrIdx ];
+
+   if(typ == LolTypVer)
+   {
+      ThrMsh->ver[0].idx = idx;
+      CpyVec((fpn *)GetPtrItm(msh, typ, idx), ThrMsh->ver[0].crd);
+   }
+   else if(typ == LolTypEdg)
+   {
+      // Setup the temporary edge structure with this edge's ID
+      ThrMsh->edg.idx = idx;
+      IdxTab = (itg *)GetPtrItm(msh, typ, idx);
+
+      for(i=0;i<2;i++)
+         CpyVec((fpn *)GetPtrItm(msh, LolTypVer, IdxTab[i]), ThrMsh->edg.ver[i]->crd);
+
+      SetEdgTng(&ThrMsh->edg);
+   }
+   else if(typ == LolTypTri)
+   {
+      // Setup the temporary triangle structure with this triangle's ID
+      ThrMsh->tri.idx = idx;
+      IdxTab = (itg *)GetPtrItm(msh, typ, idx);
+
+      for(i=0;i<3;i++)
+         CpyVec((fpn *)GetPtrItm(msh, LolTypVer, IdxTab[i]), ThrMsh->tri.ver[i]->crd);
+
+      SetTriNrm(&ThrMsh->tri);
+
+      // Set triangle edge tangents only on request
+      if(flg & TngFlg)
+         for(i=0;i<3;i++)
+            SetEdgTng(&ThrMsh->tri.edg[i]);
+
+      // Compute the aspect ratio on demand
+      if(flg & AniFlg)
+         ThrMsh->tri.ani = GetTriAni(&ThrMsh->tri);
+   }
+   else if(typ == LolTypQad)
+   {
+      // Setup the temporary triangle structure with this triangle's ID
+      ThrMsh->qad.idx = idx;
+      IdxTab = (itg *)GetPtrItm(msh, typ, idx);
+
+      for(i=0;i<4;i++)
+         CpyVec((fpn *)GetPtrItm(msh, LolTypVer, IdxTab[i]), ThrMsh->qad.ver[i]->crd);
+
+      // Set quad edge tangents only on request
+      if(flg & TngFlg)
+         for(i=0;i<4;i++)
+            SetEdgTng(&ThrMsh->qad.edg[i]);
+
+      for(i=0;i<2;i++)
+      {
+         SetTriNrm(&ThrMsh->qad.tri[i]);
+
+         // Set triangle edge tangents only on request
+         if(flg & TngFlg)
+            for(j=0;j<3;j++)
+               SetEdgTng(&ThrMsh->qad.tri[i].edg[j]);
+
+         // Compute the aspect ratio on demand
+         if(flg & AniFlg)
+            ThrMsh->tri.ani = GetTriAni(&ThrMsh->qad.tri[i]);
+      }
+   }
+   else if(typ == LolTypTet)
+   {
+      // Setup the temporary tetrahedron structure with this tet ID
+      ThrMsh->tet.idx = idx;
+      IdxTab = (itg *)GetPtrItm(msh, typ, idx);
+
+      for(i=0;i<4;i++)
+         CpyVec((fpn *)GetPtrItm(msh, LolTypVer, IdxTab[i]), ThrMsh->tet.ver[i]->crd);
+
+      for(i=0;i<4;i++)
+         SetTriNrm(&ThrMsh->tet.tri[i]);
+
+      // Set tet edge tangents only on request
+      if(flg & TngFlg)
+         for(i=0;i<6;i++)
+         {
+            SetEdgTng(&ThrMsh->tet.edg[i]);
+            CpyVec(ThrMsh->tet.edg[i].tng, ThrMsh->tet.tri[ TetEdgFac[i][0] ].edg[0].tng);
+            CpyVec(ThrMsh->tet.edg[i].tng, ThrMsh->tet.tri[ TetEdgFac[i][1] ].edg[1].tng);
+         }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Save the local mesh entities into their backup position                    */
+/*----------------------------------------------------------------------------*/
+
+static void BakMshItm(MshSct *msh)
+{
+   memcpy(&msh->thr[0].BakEdg, &msh->thr[0].edg, sizeof(EdgSct));
+   memcpy(&msh->thr[0].BakTri, &msh->thr[0].tri, sizeof(TriSct));
+   memcpy(&msh->thr[0].BakQad, &msh->thr[0].qad, sizeof(QadSct));
+   memcpy(&msh->thr[0].BakTet, &msh->thr[0].tet, sizeof(TetSct));
+   memcpy( msh->thr[0].BakVer,  msh->thr[0].ver, 4 * sizeof(VerSct));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Restore the local entities from the backup to the current position         */
+/*----------------------------------------------------------------------------*/
+
+static void RstMshItm(MshSct *msh)
+{
+   memcpy(&msh->thr[0].edg, &msh->thr[0].BakEdg, sizeof(EdgSct));
+   memcpy(&msh->thr[0].tri, &msh->thr[0].BakTri, sizeof(TriSct));
+   memcpy(&msh->thr[0].qad, &msh->thr[0].BakQad, sizeof(QadSct));
+   memcpy(&msh->thr[0].tet, &msh->thr[0].BakTet, sizeof(TetSct));
+   memcpy( msh->thr[0].ver,  msh->thr[0].BakVer, 4 * sizeof(VerSct));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Get a geometric item adress in the user's table                            */
+/*----------------------------------------------------------------------------*/
+
+static char *GetPtrItm(MshSct *msh, itg typ, itg idx)
+{
+   return(msh->UsrPtr[ typ ] + (idx - msh->BasIdx) * msh->UsrSiz[ typ ]);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Create a mesh with one hexa enclosing the whole surface                    */
+/*----------------------------------------------------------------------------*/
+
+static void SetMshBox(TreSct *box, MshSct *msh)
+{
+   itg i, j;
+   fpn MinCrd[3], MaxCrd[3], MidCrd[3], *CrdTab, siz;
+
+   // Compute the bounding box (rectangular)
+   CpyVec((fpn *)GetPtrItm(msh, LolTypVer, msh->BasIdx), MinCrd);
+   CpyVec((fpn *)GetPtrItm(msh, LolTypVer, msh->BasIdx), MaxCrd);
+
+   for(i=1;i<msh->NmbItm[ LolTypVer ];i++)
+   {
+      CrdTab = (fpn *)GetPtrItm(msh, LolTypVer, i + msh->BasIdx);
+
+      for(j=0;j<3;j++)
+      {
+         MinCrd[j] = MIN(MinCrd[j], CrdTab[j]);
+         MaxCrd[j] = MAX(MaxCrd[j], CrdTab[j]);
+      }
+   }
+
+   // Compute the bounding box
+   siz = MAX(MaxCrd[0] - MinCrd[0], MaxCrd[1] - MinCrd[1]);
+   siz = MAX(siz, MaxCrd[2] - MinCrd[2]);
+   box->eps = siz * FLT_EPSILON;
+   box->MinSiz = box->MaxSiz = siz;
+
+   // Move the center 1/1000th away
+   LinCmbVec3(.5, MinCrd, .5, MaxCrd, MidCrd);
+   AddScaVec1(siz * FLT_EPSILON, MidCrd);
+   AddScaVec2(-1.02 * siz / 2., MidCrd, box->bnd[0]);
+   AddScaVec2( 1.02 * siz / 2., MidCrd, box->bnd[1]);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add a vertex to leaf octants                                               */
+/*----------------------------------------------------------------------------*/
+
+static void AddVer(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+   fpn SonMin[3], SonMax[3];
+
+   if(oct->sub)
+   {
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+
+         if(VerInsOct(msh->thr[0].ver[0].crd, SonMin, SonMax))
+            AddVer(msh, tre, oct->son+i, SonMin, SonMax);
+      }
+   }
+   else
+   {
+      LnkItm(tre, oct, LolTypVer, msh->thr[0].ver[0].idx, 0);
+
+      if((oct->lvl < tre->GrdLvl)
+      || ((oct->NmbVer >= oct->MaxItm) && (oct->lvl < MaxOctLvl)) )
+      {
+         SubOct(msh, tre, oct, MinCrd, MaxCrd);
+      }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add an edge to leaf octants                                                */
+/*----------------------------------------------------------------------------*/
+
+static void AddEdg(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+   fpn SonMin[3], SonMax[3];
+
+   if(oct->sub)
+   {
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+         SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+         if(EdgIntHex(&msh->thr[0].edg, &tre->thr[0].hex, tre->eps))
+            AddEdg(msh, tre, oct->son+i, SonMin, SonMax);
+      }
+   }
+   else
+   {
+      LnkItm(tre, oct, LolTypEdg, msh->thr[0].edg.idx, 0);
+
+      if( (oct->lvl < tre->GrdLvl)
+      || ((oct->NmbEdg >= oct->MaxItm) && (oct->lvl < MaxOctLvl)) )
+      {
+         SubOct(msh, tre, oct, MinCrd, MaxCrd);
+      }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add a triangle to leaf octants                                             */
+/*----------------------------------------------------------------------------*/
+
+static void AddTri(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+   fpn SonMin[3], SonMax[3];
+
+   if(oct->sub)
+   {
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+         SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+         if(TriIntHex(&msh->thr[0].tri, &tre->thr[0].hex, tre->eps))
+            AddTri(msh, tre, oct->son+i, SonMin, SonMax);
+      }
+   }
+   else
+   {
+      LnkItm(tre, oct, LolTypTri, msh->thr[0].tri.idx, msh->thr[0].tri.ani);
+
+      if( (oct->lvl < tre->GrdLvl)
+      || ((oct->NmbFac >= oct->MaxItm) && (oct->lvl < MaxOctLvl)) )
+      {
+         SubOct(msh, tre, oct, MinCrd, MaxCrd);
+      }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add a quad to leaf octants                                                 */
+/*----------------------------------------------------------------------------*/
+
+static void AddQad(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+   fpn SonMin[3], SonMax[3];
+
+   if(oct->sub)
+   {
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+         SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+         if(QadIntHex(&msh->thr[0].qad, &tre->thr[0].hex, tre->eps))
+            AddQad(msh, tre, oct->son+i, SonMin, SonMax);
+      }
+   }
+   else
+   {
+      LnkItm(tre, oct, LolTypQad, msh->thr[0].qad.idx, 0);
+
+      if( (oct->lvl < tre->GrdLvl)
+      || ((oct->NmbFac >= oct->MaxItm) && (oct->lvl < MaxOctLvl)) )
+      {
+         SubOct(msh, tre, oct, MinCrd, MaxCrd);
+      }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add a tetrahedron to leaf octants                                          */
+/*----------------------------------------------------------------------------*/
+
+static void AddTet(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i;
+   fpn SonMin[3], SonMax[3];
+
+   if(oct->sub)
+   {
+      for(i=0;i<8;i++)
+      {
+         SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+         SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+         if(TetIntHex(&msh->thr[0].tet, &tre->thr[0].hex, tre->eps))
+            AddTet(msh, tre, oct->son+i, SonMin, SonMax);
+      }
+   }
+   else
+   {
+      LnkItm(tre, oct, LolTypTet, msh->thr[0].tet.idx, msh->thr[0].tet.ani);
+
+      if( (oct->lvl < tre->GrdLvl)
+      || ((oct->NmbFac >= oct->MaxItm) && (oct->lvl < MaxOctLvl)) )
+      {
+         SubOct(msh, tre, oct, MinCrd, MaxCrd);
+      }
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Subdivide an octant and its content to its sons                            */
+/*----------------------------------------------------------------------------*/
+
+static void SubOct(  MshSct *msh, TreSct *tre, OctSct *oct,
+                     fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   itg i, j, *IdxTab;
+   fpn SonMin[3], SonMax[3];
+   LnkSct *lnk , *OctLnk = oct->lnk;
+   OctSct *son;
+
+   // If there is no more free octants, allocate a new bloc
+   if(!tre->NmbFreOct)
+   {
+      tre->CurOctBlk = NewMem(tre, MemBlkSiz * 8 * sizeof(OctSct));
+      tre->NmbFreOct = MemBlkSiz;
+   }
+
+   // The octant points on its first son, the other are consectutive in memory
+   oct->son = &tre->CurOctBlk[ (MemBlkSiz - tre->NmbFreOct--) * 8 ];
+   oct->sub = 1;
+   tre->NmbOct+=8;
+
+   // Initialize each sons
+   for(i=0;i<8;i++)
+   {
+      son = oct->son+i;
+      son->lnk = NULL;
+      son->son = NULL;
+      son->NmbVer = son->NmbEdg = son->NmbFac = son->NmbVol = 0;
+      son->ani = 1;
+      son->MaxItm = MaxItmOct;
+      son->sub = 0;
+      son->lvl = oct->lvl + 1;
+   }
+
+   // Update octree min octant size and max level
+   tre->MinSiz = MIN(tre->MinSiz, (MaxCrd[0] - MinCrd[0])/2.);
+   tre->MaxLvl = MAX(tre->MaxLvl, oct->lvl+1);
+
+   // Backup the curent mesh local entities that are being tested
+   // as the propagation process will call SetItm an all linked items
+   BakMshItm(msh);
+
+   // Now unlink every items from the father and add them to its sons
+   while((lnk = OctLnk))
+   {
+      if(lnk->typ == LolTypVer)
+      {
+         // Check inclusion of vertices among the 8 sons
+         SetItm(msh, LolTypVer, lnk->idx, 0, 0);
+
+         for(i=0;i<8;i++)
+         {
+            SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+
+            if(VerInsOct(msh->thr[0].ver[0].crd, SonMin, SonMax))
+               LnkItm(tre, oct->son+i, LolTypVer, lnk->idx, 0);
+         }
+      }
+      else if(lnk->typ == LolTypEdg)
+      {
+         // Check the intersection between edge and the 8 sons
+         SetItm(msh, LolTypEdg, lnk->idx, 0, 0);
+
+         for(i=0;i<8;i++)
+         {
+            SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+            SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+            if(EdgIntHex(&msh->thr[0].edg, &tre->thr[0].hex, tre->eps))
+               LnkItm(tre, oct->son+i, LolTypEdg, lnk->idx, 0);
+         }
+      }
+      else if(lnk->typ == LolTypTri)
+      {
+         // Check the intersection between the triangle and the 8 sons
+         SetItm(msh, LolTypTri, lnk->idx, TngFlg | AniFlg, 0);
+
+         for(i=0;i<8;i++)
+         {
+            SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+            SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+            if(TriIntHex(&msh->thr[0].tri, &tre->thr[0].hex, tre->eps))
+               LnkItm(tre, oct->son+i, LolTypTri, lnk->idx, oct->ani);
+         }
+      }
+      else if(lnk->typ == LolTypQad)
+      {
+         // Check the intersection between the quad and the 8 sons
+         SetItm(msh, LolTypQad, lnk->idx, TngFlg | AniFlg, 0);
+
+         for(i=0;i<8;i++)
+         {
+            SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+            SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+            if(QadIntHex(&msh->thr[0].qad, &tre->thr[0].hex, tre->eps))
+               LnkItm(tre, oct->son+i, LolTypQad, lnk->idx, oct->ani);
+         }
+      }
+      else if(lnk->typ == LolTypTet)
+      {
+         // Check the intersection between the tet and the 8 sons
+         SetItm(msh, LolTypTet, lnk->idx, TngFlg, 0);
+
+         for(i=0;i<8;i++)
+         {
+            SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
+            SetTmpHex(&tre->thr[0].hex, SonMin, SonMax);
+
+            if(TetIntHex(&msh->thr[0].tet, &tre->thr[0].hex, tre->eps))
+               LnkItm(tre, oct->son+i, LolTypTet, lnk->idx, oct->ani);
+         }
+      }
+
+      OctLnk = lnk->nex;
+      lnk->nex = tre->NexFreLnk;
+      tre->NexFreLnk = lnk;
+   }
+
+   // Put back the current mesh enities that are being inserted
+   RstMshItm(msh);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Add an entity to an octant linked list                                     */
+/*----------------------------------------------------------------------------*/
+
+static void LnkItm(TreSct *tre, OctSct *oct, itg typ, itg idx, char ani)
+{
+   itg i;
+   LnkSct *lnk;
+
+
+   lnk = oct->lnk;
+   while(lnk)
+   {
+      if(lnk->typ == typ && lnk->idx == idx)
+         return;
+      lnk = lnk->nex;
+   }
+
+
+   // In case nore more link container are availbable, allocate a new bloc
+   if(!tre->NexFreLnk)
+   {
+      tre->NexFreLnk = NewMem(tre, MemBlkSiz * sizeof(LnkSct));
+
+      for(i=0;i<MemBlkSiz;i++)
+         tre->NexFreLnk[i].nex = &tre->NexFreLnk[ i+1 ];
+
+      tre->NexFreLnk[ MemBlkSiz - 1 ].nex = NULL;
+   }
+
+   // Get the next free link container and set it with the given item
+   lnk = tre->NexFreLnk;
+   tre->NexFreLnk = lnk->nex;
+   lnk->typ = typ;
+   lnk->idx = idx;
+   lnk->nex = oct->lnk;
+   oct->lnk = lnk;
+
+   // Update the octant local counters
+   if(typ == LolTypVer)
+      oct->NmbVer++;
+   else if(typ == LolTypEdg)
+      oct->NmbEdg++;
+   else if( (typ == LolTypTri) || (typ == LolTypQad) )
+   {
+      // Update the octant mean anisotropic factor
+      // and deduce a max number of item form it
+      if(typ == LolTypTri)
+      {
+         oct->ani = (oct->ani * oct->NmbFac + ani) / (oct->NmbFac + 1);
+         oct->MaxItm = MIN(MaxItmOct * ani, 255);
+      }
+
+      oct->NmbFac++;
+   }
+   else
+      oct->NmbVol++;
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Build an octant strucutre from the two corner points                       */
+/*----------------------------------------------------------------------------*/
+
+static void SetSonCrd(  itg SonIdx, fpn SonMin[3], fpn SonMax[3],
+                        fpn MinCrd[3], fpn MaxCrd[3] )
+{
+   fpn MidCrd[3];
+
+   LinCmbVec3(.5, MinCrd, .5, MaxCrd, MidCrd);
+
+   switch(SonIdx)
+   {
+      case 0 : {
+         SonMin[0] = MinCrd[0];
+         SonMin[1] = MinCrd[1];
+         SonMin[2] = MinCrd[2];
+         SonMax[0] = MidCrd[0];
+         SonMax[1] = MidCrd[1];
+         SonMax[2] = MidCrd[2];
+      }return;
+
+      case 1 : {
+         SonMin[0] = MidCrd[0];
+         SonMin[1] = MinCrd[1];
+         SonMin[2] = MinCrd[2];
+         SonMax[0] = MaxCrd[0];
+         SonMax[1] = MidCrd[1];
+         SonMax[2] = MidCrd[2];
+      }return;
+
+      case 2 : {
+         SonMin[0] = MinCrd[0];
+         SonMin[1] = MidCrd[1];
+         SonMin[2] = MinCrd[2];
+         SonMax[0] = MidCrd[0];
+         SonMax[1] = MaxCrd[1];
+         SonMax[2] = MidCrd[2];
+      }return;
+
+      case 3 : {
+         SonMin[0] = MidCrd[0];
+         SonMin[1] = MidCrd[1];
+         SonMin[2] = MinCrd[2];
+         SonMax[0] = MaxCrd[0];
+         SonMax[1] = MaxCrd[1];
+         SonMax[2] = MidCrd[2];
+      }return;
+
+      case 4 : {
+         SonMin[0] = MinCrd[0];
+         SonMin[1] = MinCrd[1];
+         SonMin[2] = MidCrd[2];
+         SonMax[0] = MidCrd[0];
+         SonMax[1] = MidCrd[1];
+         SonMax[2] = MaxCrd[2];
+      }return;
+
+      case 5 : {
+         SonMin[0] = MidCrd[0];
+         SonMin[1] = MinCrd[1];
+         SonMin[2] = MidCrd[2];
+         SonMax[0] = MaxCrd[0];
+         SonMax[1] = MidCrd[1];
+         SonMax[2] = MaxCrd[2];
+      }return;
+
+      case 6 : {
+         SonMin[0] = MinCrd[0];
+         SonMin[1] = MidCrd[1];
+         SonMin[2] = MidCrd[2];
+         SonMax[0] = MidCrd[0];
+         SonMax[1] = MaxCrd[1];
+         SonMax[2] = MaxCrd[2];
+      }return;
+
+      case 7 : {
+         SonMin[0] = MidCrd[0];
+         SonMin[1] = MidCrd[1];
+         SonMin[2] = MidCrd[2];
+         SonMax[0] = MaxCrd[0];
+         SonMax[1] = MaxCrd[1];
+         SonMax[2] = MaxCrd[2];
+      }return;
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex is inside an octant                                       */
+/*----------------------------------------------------------------------------*/
+
+static itg VerInsOct(fpn VerCrd[3], fpn MinCrd[3], fpn MaxCrd[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      if( (VerCrd[i] > MaxCrd[i]) || (VerCrd[i] < MinCrd[i]) )
+         return(0);
+
+   return(1);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Setup a temporary test hex from the bounding box limits                    */
+/*----------------------------------------------------------------------------*/
+
+static void SetTmpHex(HexSct *hex, fpn MinCrd[3], fpn MaxCrd[3])
+{
+   hex->ver[0]->crd[0] = MinCrd[0];
+   hex->ver[0]->crd[1] = MinCrd[1];
+   hex->ver[0]->crd[2] = MaxCrd[2];
+   hex->ver[1]->crd[0] = MaxCrd[0];
+   hex->ver[1]->crd[1] = MinCrd[1];
+   hex->ver[1]->crd[2] = MaxCrd[2];
+   hex->ver[2]->crd[0] = MaxCrd[0];
+   hex->ver[2]->crd[1] = MinCrd[1];
+   hex->ver[2]->crd[2] = MinCrd[2];
+   hex->ver[3]->crd[0] = MinCrd[0];
+   hex->ver[3]->crd[1] = MinCrd[1];
+   hex->ver[3]->crd[2] = MinCrd[2];
+   hex->ver[4]->crd[0] = MinCrd[0];
+   hex->ver[4]->crd[1] = MaxCrd[1];
+   hex->ver[4]->crd[2] = MaxCrd[2];
+   hex->ver[5]->crd[0] = MaxCrd[0];
+   hex->ver[5]->crd[1] = MaxCrd[1];
+   hex->ver[5]->crd[2] = MaxCrd[2];
+   hex->ver[6]->crd[0] = MaxCrd[0];
+   hex->ver[6]->crd[1] = MaxCrd[1];
+   hex->ver[6]->crd[2] = MinCrd[2];
+   hex->ver[7]->crd[0] = MinCrd[0];
+   hex->ver[7]->crd[1] = MaxCrd[1];
+   hex->ver[7]->crd[2] = MinCrd[2];
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute/test the intersection between a line and a cube                    */
+/*----------------------------------------------------------------------------*/
+
+static itg LinIntBox(fpn *LinCrd, fpn *LinTng,
+                     fpn *BoxMin, fpn *BoxMax, fpn eps)
+{
+   itg i;
+   fpn IntCrd[3], NrmTab[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} };
+
+   // Compute the intersections between the edge and the cube's faces
+   for(i=0;i<3;i++)
+   {
+      if(LinTng[i] == 0.)
+         continue;
+
+      LinIntPla(LinCrd, LinTng, BoxMin, NrmTab[i], IntCrd);
+
+      if(VerInsBox(IntCrd, BoxMin, BoxMax, eps))
+         return(1);
+
+      LinIntPla(LinCrd, LinTng, BoxMax, NrmTab[i], IntCrd);
+
+      if(VerInsBox(IntCrd, BoxMin, BoxMax, eps))
+         return(1);
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the intersection between a line and a plane                        */
+/*----------------------------------------------------------------------------*/
+
+static void LinIntPla(  fpn *LinCrd, fpn *LinTng,
+                        fpn *PlaCrd, fpn *PlaNrm, fpn *IntCrd)
+{
+   fpn u[3];
+
+   SubVec3(LinCrd, PlaCrd, u);
+   LinCmbVec3( 1., LinCrd, -DotPrd(PlaNrm, u) / DotPrd(PlaNrm, LinTng),
+               LinTng, IntCrd);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex stands inside a bounding box + epsilon                    */
+/*----------------------------------------------------------------------------*/
+
+static fpn VerInsBox(fpn *VerCrd, fpn *BoxMin, fpn *BoxMax, fpn eps)
+{
+   if((VerCrd[0] < BoxMin[0] - eps) || (VerCrd[1] < BoxMin[1] - eps)
+   || (VerCrd[2] < BoxMin[2] - eps) || (VerCrd[0] > BoxMax[0] + eps)
+   || (VerCrd[1] > BoxMax[1] + eps) || (VerCrd[2] > BoxMax[2] + eps) )
+   {
+      return(0);
+   }
+
+   return(1);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute/test the intersection between an edge and a hex                    */
+/*----------------------------------------------------------------------------*/
+
+static itg EdgIntHex(EdgSct *edg, HexSct *hex, fpn eps)
+{
+   itg i;
+   VerSct IntVer;
+
+   // Test if an edge's vertex is included in the octant
+   if(VerInsHex(edg->ver[0], hex) || VerInsHex(edg->ver[1], hex))
+      return(1);
+
+   // Compute the intersections between the edge and the hex's faces
+   for(i=0;i<6;i++)
+      if(EdgIntQad(hex, i, edg, &IntVer, eps))
+         return(1);
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if an octant is intersected by a triangle                             */
+/*----------------------------------------------------------------------------*/
+
+static itg TriIntHex(TriSct *tri, HexSct *hex, fpn eps)
+{
+   itg i, j, pos, neg;
+   fpn CurDis;
+   VerSct IntVer;
+
+   // If there is no intersection between the bounding box
+   // of the triangle and the octant it is no use to test,
+   // the triangle doesn't intersect the octant
+   if((  (tri->ver[0]->crd[0] < hex->ver[3]->crd[0])
+      && (tri->ver[1]->crd[0] < hex->ver[3]->crd[0])
+      && (tri->ver[2]->crd[0] < hex->ver[3]->crd[0]) )
+   || (  (tri->ver[0]->crd[0] > hex->ver[5]->crd[0])
+      && (tri->ver[1]->crd[0] > hex->ver[5]->crd[0])
+      && (tri->ver[2]->crd[0] > hex->ver[5]->crd[0]) )
+   || (  (tri->ver[0]->crd[1] < hex->ver[3]->crd[1])
+      && (tri->ver[1]->crd[1] < hex->ver[3]->crd[1])
+      && (tri->ver[2]->crd[1] < hex->ver[3]->crd[1]) )
+   || (  (tri->ver[0]->crd[1] > hex->ver[5]->crd[1])
+      && (tri->ver[1]->crd[1] > hex->ver[5]->crd[1])
+      && (tri->ver[2]->crd[1] > hex->ver[5]->crd[1]) )
+   || (  (tri->ver[0]->crd[2] < hex->ver[3]->crd[2])
+      && (tri->ver[1]->crd[2] < hex->ver[3]->crd[2])
+      && (tri->ver[2]->crd[2] < hex->ver[3]->crd[2]) )
+   || (  (tri->ver[0]->crd[2] > hex->ver[5]->crd[2])
+      && (tri->ver[1]->crd[2] > hex->ver[5]->crd[2])
+      && (tri->ver[2]->crd[2] > hex->ver[5]->crd[2]) ) )
+   {
+      return(0);
+   }
+
+   // Test if a triangle's vertex is included in the octant
+   for(i=0;i<3;i++)
+      if(VerInsHex(tri->ver[i], hex))
+         return(1);
+
+   // Check whether the triangle plane intersects the octant
+   pos = neg = 0;
+
+   for(i=0;i<8;i++)
+   {
+      CurDis = DisVerPla(hex->ver[i]->crd, tri->ver[0]->crd, tri->nrm);
+
+      if(CurDis < -eps)
+         neg = 1;
+      else if(CurDis > eps)
+         pos = 1;
+      else
+         pos = neg = 1;
+   }
+
+   if(!pos || !neg)
+      return(0);
+
+   // Compute the intersections between the triangle edges and the hex faces
+   for(i=0;i<6;i++)
+      for(j=0;j<3;j++)
+         if(EdgIntQad(hex, i, &tri->edg[j], &IntVer, eps))
+            return(1);
+
+   // Compute the intersections between the triangle and the hex edges
+   for(i=0;i<12;i++)
+      if(EdgIntTri(tri, &hex->edg[i], &IntVer, eps))
+         return(1);
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if an octant is intersected by a quad                                 */
+/*----------------------------------------------------------------------------*/
+
+static itg QadIntHex(QadSct *qad, HexSct *hex, fpn eps)
+{
+   if(TriIntHex(&qad->tri[0], hex, eps) || TriIntHex(&qad->tri[1], hex, eps))
+      return(1);
+   else
+      return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if an octant is intersected by a tetrahedron                          */
+/*----------------------------------------------------------------------------*/
+
+static itg TetIntHex(TetSct *tet, HexSct *hex, fpn eps)
+{
+   itg i, j, pos, neg;
+   fpn CurDis;
+   VerSct IntVer;
+
+   // If there is no intersection between the bounding box
+   // of the tet and the octant it is no use to test,
+   // the tet doesn't intersect the octant
+   if((  (tet->ver[0]->crd[0] < hex->ver[3]->crd[0])
+      && (tet->ver[1]->crd[0] < hex->ver[3]->crd[0])
+      && (tet->ver[2]->crd[0] < hex->ver[3]->crd[0])
+      && (tet->ver[3]->crd[0] < hex->ver[3]->crd[0]) )
+   || (  (tet->ver[0]->crd[0] > hex->ver[5]->crd[0])
+      && (tet->ver[1]->crd[0] > hex->ver[5]->crd[0])
+      && (tet->ver[2]->crd[0] > hex->ver[5]->crd[0])
+      && (tet->ver[3]->crd[0] > hex->ver[5]->crd[0]) )
+   || (  (tet->ver[0]->crd[1] < hex->ver[3]->crd[1])
+      && (tet->ver[1]->crd[1] < hex->ver[3]->crd[1])
+      && (tet->ver[2]->crd[1] < hex->ver[3]->crd[1])
+      && (tet->ver[3]->crd[1] < hex->ver[3]->crd[1]) )
+   || (  (tet->ver[0]->crd[1] > hex->ver[5]->crd[1])
+      && (tet->ver[1]->crd[1] > hex->ver[5]->crd[1])
+      && (tet->ver[2]->crd[1] > hex->ver[5]->crd[1])
+      && (tet->ver[3]->crd[1] > hex->ver[5]->crd[1]) )
+   || (  (tet->ver[0]->crd[2] < hex->ver[3]->crd[2])
+      && (tet->ver[1]->crd[2] < hex->ver[3]->crd[2])
+      && (tet->ver[2]->crd[2] < hex->ver[3]->crd[2])
+      && (tet->ver[3]->crd[2] < hex->ver[3]->crd[2]) )
+   || (  (tet->ver[0]->crd[2] > hex->ver[5]->crd[2])
+      && (tet->ver[1]->crd[2] > hex->ver[5]->crd[2])
+      && (tet->ver[2]->crd[2] > hex->ver[5]->crd[2])
+      && (tet->ver[3]->crd[2] > hex->ver[5]->crd[2]) ) )
+   {
+      return(0);
+   }
+
+   // Test if a tet's vertex is included in the octant
+   for(i=0;i<4;i++)
+      if(VerInsHex(tet->ver[i], hex))
+         return(1);
+
+   // Test if a oct's vertex is included in the octant
+   for(i=0;i<8;i++)
+      if(VerInsTet(hex->ver[i], tet, eps))
+         return(1);
+
+   // Compute the intersections between the tet edges and the hex faces
+   for(i=0;i<6;i++)
+      for(j=0;j<6;j++)
+         if(EdgIntQad(hex, i, &tet->edg[j], &IntVer, eps))
+            return(1);
+
+   // Compute the intersections between the tet's face and the hex's edges
+   for(i=0;i<12;i++)
+      for(j=0;j<4;j++)
+         if(EdgIntTri(&tet->tri[j], &hex->edg[i], &IntVer, eps))
+            return(1);
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex is included in an inflated tet                            */
+/*----------------------------------------------------------------------------*/
+
+itg VerInsTet(VerSct *ver, TetSct *tet, fpn eps)
+{
+   const itg TetEdg[6][2] = { {0,1}, {1,2}, {2,0}, {3,0}, {3,1}, {3,2} };
+   const itg TetFac[4][3] = { {3,2,1}, {0,2,3}, {3,1,0}, {0,1,2} };
+   itg i, j, ins = 1;
+   TetSct SubTet;
+
+   // Create 4 subtets from the vertex and a face of the tet.
+   // Compute the volume of each subtet, if all of them are positive,
+   // it means that the vertex is indide the tet
+   SubTet.ver[3] = ver;
+
+   for(i=0;i<4;i++)
+   {
+      for(j=0;j<3;j++)
+         SubTet.ver[j] = tet->ver[ TetFac[i][j] ];
+
+      if(GetVolTet(&SubTet) <= 0)
+      {
+         ins = 0;
+         break;
+      }
+   }
+
+   if(ins)
+      return(1);
+
+   // If the vertex is not inside the tet, it may be close to one of its faces
+   for(i=0;i<4;i++)
+      if(VerInsTri(&tet->tri[i], ver, eps))
+         return(1);
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex is inside a hex                                           */
+/*----------------------------------------------------------------------------*/
+
+static itg VerInsHex(VerSct *ver, HexSct *hex)
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      if( (ver->crd[i] > hex->ver[5]->crd[i])
+      ||  (ver->crd[i] < hex->ver[3]->crd[i]) )
+      {
+         return(0);
+      }
+
+   return(1);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if an edge intersects a quad                                          */
+/*----------------------------------------------------------------------------*/
+
+static itg EdgIntQad(HexSct *hex, itg FacIdx, EdgSct *edg,
+                     VerSct *IntVer, fpn eps)
+{
+   itg i, NmbVer = 0;
+   fpn sgn[2];
+   VerSct *ver=NULL;
+   EdgSct edg2;
+   QadSct *qad = &hex->qad[ FacIdx ];
+
+   // Compute the distance between the edge's vertices and the quad's plane
+   for(i=0;i<2;i++)
+   {
+      sgn[i] = DisVerPla(edg->ver[i]->crd, qad->ver[0]->crd, qad->nrm);
+
+      if(fabs(sgn[i]) < eps)
+      {
+         ver = edg->ver[i];
+         NmbVer++;
+      }
+   }
+
+   // This leads to 3 possible cases
+   switch(NmbVer)
+   {
+      // Both vertices are far from the plane : 
+      // if they stand in the same side of the plane, there is no intersection,
+      // otherwise we compute the intersection between the edge and the plane
+      // and test wether it falls inside the quad or not
+      case 0 :
+      {
+         // Test if both vertices stand on opposite sides of the plane
+         if(sgn[0] * sgn[1] < 0)
+         {
+            LinCmbVec3( fabs(sgn[0]) / (fabs(sgn[0])
+                     +  fabs(sgn[1])), edg->ver[1]->crd,
+                        fabs(sgn[1]) / (fabs(sgn[0])
+                     +  fabs(sgn[1])), edg->ver[0]->crd, IntVer->crd);
+
+            return(VerInsHex(IntVer, hex));
+         }
+      }break;
+
+      case 1 :
+      {
+         if(VerInsHex(ver, hex))
+         {
+            CpyVec(ver->crd, IntVer->crd);
+            return(1);
+         }
+      }break;
+
+      case 2 :
+      {
+         for(i=0;i<4;i++)
+         {
+            edg2.ver[0] = qad->ver[i];
+            edg2.ver[1] = qad->ver[ (i+1)%4 ];
+            SetEdgTng(&edg2);
+
+            if(EdgIntEdg(edg, &edg2, IntVer, eps))
+               return(1);
+         }
+      }break;
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if an edge intersects a triangle                                      */
+/*----------------------------------------------------------------------------*/
+
+static itg EdgIntTri(TriSct *tri, EdgSct *edg, VerSct *IntVer, fpn eps)
+{
+   itg i, NmbVer = 0;
+   fpn sgn[2];
+   VerSct *ver=NULL;
+   EdgSct edg2;
+
+   // Compute the distance between the edge's vertices and the triangle's plane
+   for(i=0;i<2;i++)
+   {
+      sgn[i] = DisVerPla(edg->ver[i]->crd, tri->ver[0]->crd, tri->nrm);
+
+      if(fabs(sgn[i]) < eps)
+      {
+         ver = edg->ver[i];
+         NmbVer++;
+      }
+   }
+
+   // This leads to 3 possible cases
+   switch(NmbVer)
+   {
+      // Both vertices are far from the plane : 
+      // if they stand in the same side of the plane, there is no intersection,
+      // otherwise we compute the intersection between the edge and the plane
+      // and test wether it falls inside the triangle or not
+      case 0 :
+      {
+         // Test if both vertices stand on opposite sides of the plane
+         if(sgn[0] * sgn[1] < 0)
+         {
+            LinCmbVec3( fabs(sgn[0]) / (fabs(sgn[0])
+                     +  fabs(sgn[1])), edg->ver[1]->crd,
+                        fabs(sgn[1]) / (fabs(sgn[0])
+                     +  fabs(sgn[1])), edg->ver[0]->crd, IntVer->crd);
+
+            return(VerInsTri(tri, IntVer, eps));
+         }
+      }break;
+
+      case 1 :
+      {
+         if(VerInsTri(tri, ver, eps))
+         {
+            CpyVec(ver->crd, IntVer->crd);
+            return(1);
+         }
+      }break;
+
+      case 2 :
+      {
+         for(i=0;i<3;i++)
+         {
+            edg2.ver[0] = tri->ver[i];
+            edg2.ver[1] = tri->ver[ (i+1)%3 ];
+            SetEdgTng(&edg2);
+
+            if(EdgIntEdg(edg, &edg2, IntVer, eps))
+               return(1);
+         }
+      }break;
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex is included in an inflated triangle                       */
+/*----------------------------------------------------------------------------*/
+
+static itg VerInsTri(TriSct *tri, VerSct *ver, fpn eps)
+{
+   itg i, ins = 1;
+   fpn vec[3][3], nrm[3];
+   VerSct img;
+   EdgSct edg;
+
+   // Project the vertex on the triangle's plane and check the distance
+   if(PrjVerPla(ver->crd, tri->ver[0]->crd, tri->nrm, img.crd) > eps)
+      return(0);
+
+   // Compare the normals of the three sub triangles against
+   // the original triangle's normal. If one of them is opposite,
+   // the vertex does not belong to the triangle
+   for(i=0;i<3;i++)
+      SubVec3(tri->ver[i]->crd, img.crd, vec[i]);
+
+   for(i=0;i<3;i++)
+   {
+      CrsPrd(vec[ (i+1)%3 ], vec[i], nrm);
+
+      if(DotPrd(nrm, tri->nrm) <= 0)
+      {
+         ins = 0;
+         break;
+      }
+   }
+
+   if(ins)
+      return(1);
+
+   // If the vertex is not inside the triangle,
+   // it may be close to one of its edges
+   for(i=0;i<3;i++)
+   {
+      edg.ver[0] = tri->ver[i];
+      edg.ver[1] = tri->ver[ (i+1)%3 ];
+      SetEdgTng(&edg);
+
+      if(VerInsEdg(&edg, &img, eps))
+         return(1);
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the intersection between coplanar edges                            */
+/*----------------------------------------------------------------------------*/
+
+static itg EdgIntEdg(EdgSct *edg1, EdgSct *edg2, VerSct *IntVer, fpn eps)
+{
+   itg i, NmbVer = 0;
+   fpn siz[2];
+   VerSct img, *ver=NULL;
+
+   // Compute the distance between the edge1's vertices
+   // and the edge2 support line
+   for(i=0;i<2;i++)
+   {
+      PrjVerLin(edg2->ver[i]->crd, edg1->ver[0]->crd, edg1->tng, img.crd);
+      siz[i] = dis(edg2->ver[i]->crd, img.crd);
+
+      if(siz[i] < eps)
+         NmbVer++;
+   }
+
+   // This leads to 3 possible cases
+   if(NmbVer < 2)
+   {
+      LinCmbVec3( siz[0]/(siz[0]+siz[1]), edg2->ver[1]->crd,
+                  siz[1]/(siz[0]+siz[1]), edg2->ver[0]->crd, IntVer->crd);
+
+      return(VerInsEdg(edg1, IntVer, eps));
+   }
+   else
+   {
+      ver = NULL;
+
+      if(VerInsEdg(edg2, edg1->ver[0], eps))
+         ver = edg1->ver[0];
+      else if(VerInsEdg(edg2, edg1->ver[1], eps))
+         ver = edg1->ver[1];
+      else if(VerInsEdg(edg1, edg2->ver[0], eps))
+         ver = edg2->ver[0];
+      else if(VerInsEdg(edg1, edg2->ver[1], eps))
+         ver = edg2->ver[1];
+
+      if(ver)
+      {
+         CpyVec(ver->crd, IntVer->crd);
+         return(1);
+      }
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test if a vertex belongs to an edge                                        */
+/*----------------------------------------------------------------------------*/
+
+static itg VerInsEdg(EdgSct *edg, VerSct *ver, fpn eps)
+{
+   itg i;
+   fpn u[3], v[3];
+   VerSct img;
+
+   // Project the vertex on the edge's support line
+   PrjVerLin(ver->crd, edg->ver[0]->crd, edg->tng, img.crd);
+
+   if(DisPow(ver->crd, img.crd) > POW(eps))
+      return(0);
+
+   // Check if the image belongs to the edge
+   SubVec3(img.crd, edg->ver[0]->crd, u);
+   SubVec3(img.crd, edg->ver[1]->crd, v);
+
+   if(DotPrd(u, v) < 0)
+      return(1);
+
+   // If the vertex does not belong to the edge,
+   // it may be close to one of its vertices
+   for(i=0;i<2;i++)
+      if(DisPow(img.crd, edg->ver[i]->crd) < POW(eps))
+         return(1);
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a vertex and a triangle                       */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerTri(MshSct *msh, fpn VerCrd[3], TriSct *tri)
+{
+   fpn ImgCrd[3], TmpCrd[3], u[3], v[3], w[3], nrm[3], SubVol[3], TotVol;
+
+   // Project the vertex on the triangle's plane
+   PrjVerPla(VerCrd, tri->ver[0]->crd, tri->nrm, ImgCrd);
+
+   // Compute the vectors stemming from the projection to the triangle's nodes
+   SubVec3(tri->ver[0]->crd, ImgCrd, u);
+   SubVec3(tri->ver[1]->crd, ImgCrd, v);
+   SubVec3(tri->ver[2]->crd, ImgCrd, w);
+
+   // Compute the three tets' volumes
+   CrsPrd(v, w, nrm);
+   SubVol[0] = -DotPrd(nrm, tri->nrm);
+   SubVol[0] = MAX(SubVol[0], 0.);
+
+   CrsPrd(w, u, nrm);
+   SubVol[1] = -DotPrd(nrm, tri->nrm);
+   SubVol[1] = MAX(SubVol[1], 0.);
+
+   CrsPrd(u, v, nrm);
+   SubVol[2] = -DotPrd(nrm, tri->nrm);
+   SubVol[2] = MAX(SubVol[2], 0.);
+
+   // Compute the closest position with the barycentric coordinates
+   TotVol = SubVol[0] + SubVol[1] + SubVol[2];
+   MulVec2(SubVol[0] / TotVol, tri->ver[0]->crd, ImgCrd);
+   MulVec2(SubVol[1] / TotVol, tri->ver[1]->crd, TmpCrd);
+   AddVec2(TmpCrd, ImgCrd);
+   MulVec2(SubVol[2] / TotVol, tri->ver[2]->crd, TmpCrd);
+   AddVec2(TmpCrd, ImgCrd);
+
+   // Return the square of the distance
+   return(DisPow(VerCrd, ImgCrd));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a vertex and a quad                           */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerQad(MshSct *msh, fpn VerCrd[3], QadSct *qad)
+{
+   return( MIN(DisVerTri(msh, VerCrd, &qad->tri[0]),
+               DisVerTri(msh, VerCrd, &qad->tri[1])) );
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a vertex and a tetrahedron                    */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerTet(MshSct *msh, fpn *VerCrd, TetSct *tet)
+{
+   itg i;
+   fpn CurDis, MinDis = DBL_MAX;
+   VerSct TmpVer;
+
+   CpyVec(VerCrd, TmpVer.crd);
+
+   if(VerInsTet(&TmpVer, tet, msh->eps))
+      return(0.);
+
+   for(i=0;i<4;i++)
+   {
+      CurDis = DisPow(VerCrd, tet->ver[i]->crd);
+
+      if(CurDis < MinDis)
+         MinDis = CurDis;
+   }
+
+   return(MinDis);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the triangle's surface                                             */
+/*----------------------------------------------------------------------------*/
+
+static fpn GetTriSrf(TriSct *tri)
+{
+   fpn nrm[3];
+
+   // Compute the cross-product vector and get its size
+   GetTriVec(tri, nrm);
+   return(GetNrmVec(nrm) / 2.);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* fpn precision computed volume on fpn coordinates                     */
+/*----------------------------------------------------------------------------*/
+
+static fpn GetVolTet(TetSct *tet)
+{
+   fpn c[9];
+
+   // Create the linear system, each column is filled with a vector
+   c[0] = tet->ver[1]->crd[0] - tet->ver[0]->crd[0];
+   c[1] = tet->ver[2]->crd[0] - tet->ver[0]->crd[0];
+   c[2] = tet->ver[3]->crd[0] - tet->ver[0]->crd[0];
+
+   c[3] = tet->ver[1]->crd[1] - tet->ver[0]->crd[1];
+   c[4] = tet->ver[2]->crd[1] - tet->ver[0]->crd[1];
+   c[5] = tet->ver[3]->crd[1] - tet->ver[0]->crd[1];
+
+   c[6] = tet->ver[1]->crd[2] - tet->ver[0]->crd[2];
+   c[7] = tet->ver[2]->crd[2] - tet->ver[0]->crd[2];
+   c[8] = tet->ver[3]->crd[2] - tet->ver[0]->crd[2];
+
+   // Return the "determinant" of the matrix
+   return(  c[0] * (c[4]*c[8] - c[5]*c[7])
+         +  c[1] * (c[5]*c[6] - c[3]*c[8])
+         +  c[2] * (c[3]*c[7] - c[4]*c[6]) );
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a vertex and an edge                          */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerEdg(fpn VerCrd[3], EdgSct *edg)
+{
+   fpn dis0, dis1, TotSiz = 0.;
+   VerSct img;
+
+   PrjVerLin(VerCrd, edg->ver[0]->crd, edg->tng, img.crd);
+   TotSiz = dis(edg->ver[0]->crd, img.crd) + dis(edg->ver[1]->crd, img.crd);
+
+   if( (TotSiz - edg->siz) < .00001 * (TotSiz + edg->siz))
+      return(DisPow(VerCrd, img.crd));
+
+   dis0 = DisPow(VerCrd, edg->ver[0]->crd);
+   dis1 = DisPow(VerCrd, edg->ver[1]->crd);
+
+   return(MIN(dis0, dis1));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the triangle's normal vector                                       */
+/*----------------------------------------------------------------------------*/
+
+static void GetTriVec(TriSct *tri, fpn w[3])
+{
+   fpn u[3], v[3];
+
+   // Compute the vector product
+   SubVec3(tri->ver[1]->crd, tri->ver[0]->crd, u);
+   SubVec3(tri->ver[2]->crd, tri->ver[0]->crd, v);
+   CrsPrd(v, u, w);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute and set the triangle normal vector                                 */
+/*----------------------------------------------------------------------------*/
+
+static void SetTriNrm(TriSct *tri)
+{
+   // Compute the cross-product vector and normalize it
+   GetTriVec(tri, tri->nrm);
+   NrmVec(tri->nrm);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute and store the edge's unit tangent                                  */
+/*----------------------------------------------------------------------------*/
+
+static void SetEdgTng(EdgSct *edg)
+{
+   SubVec3(edg->ver[1]->crd, edg->ver[0]->crd, edg->tng);
+   edg->siz = GetNrmVec(edg->tng);
+
+   if(edg->siz)
+      MulVec1(1./edg->siz, edg->tng);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the normal projection of a point on a line                         */
+/*----------------------------------------------------------------------------*/
+
+static void PrjVerLin(  fpn VerCrd[3], fpn LinCrd[3],
+                        fpn LinTng[3], fpn ImgCrd[3] )
+{
+   fpn dp, u[3];
+
+   // Compute the scalar product of the projected vector and the edge's vector
+   SubVec3(VerCrd, LinCrd, u);
+   dp = DotPrd(u, LinTng);
+   LinCmbVec3(1., LinCrd, dp, LinTng, ImgCrd);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the normal projection of a vertex on a plane                       */
+/*----------------------------------------------------------------------------*/
+
+static fpn PrjVerPla(fpn VerCrd[3], fpn PlaCrd[3],
+                     fpn PlaNrm[3], fpn ImgCrd[3] )
+{
+   fpn DisPla, u[3];
+
+   // Compute the scalar product between the unit normal N and a vector V 
+   // defined by the vertex to project and the base plane vertex
+   SubVec3(PlaCrd, VerCrd, u);
+   DisPla = DotPrd(u, PlaNrm);
+   MulVec2(DisPla, PlaNrm, ImgCrd);
+   AddVec2(VerCrd, ImgCrd);
+
+   // Return the absolute ditance on the fly
+   return(fabs(DisPla));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute the distance between a vertex and a plane                          */
+/*----------------------------------------------------------------------------*/
+
+static fpn DisVerPla(fpn VerCrd[3], fpn PlaCrd[3], fpn PlaNrm[3])
+{
+   fpn vec[3];
+
+   SubVec3(VerCrd, PlaCrd, vec);
+   return(DotPrd(vec, PlaNrm));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Test the intersection of two bounding boxex + epsilon                      */
+/*----------------------------------------------------------------------------*/
+
+static itg BoxIntBox(fpn box1[2][3], fpn box2[2][3], fpn eps)
+{
+   if((  ((box1[0][0] > box2[0][0] - eps) && (box1[0][0] < box2[1][0] + eps))
+      || ((box1[1][0] > box2[0][0] - eps) && (box1[1][0] < box2[1][0] + eps))
+      || ((box1[0][0] < box2[0][0]      ) && (box1[1][0] > box2[1][0]      )))
+   && (  ((box1[0][1] > box2[0][1] - eps) && (box1[0][1] < box2[1][1] + eps))
+      || ((box1[1][1] > box2[0][1] - eps) && (box1[1][1] < box2[1][1] + eps))
+      || ((box1[0][1] < box2[0][1]      ) && (box1[1][1] > box2[1][1]      )))
+   && (  ((box1[0][2] > box2[0][2] - eps) && (box1[0][2] < box2[1][2] + eps))
+      || ((box1[1][2] > box2[0][2] - eps) && (box1[1][2] < box2[1][2] + eps))
+      || ((box1[0][2] < box2[0][2]      ) && (box1[1][2] > box2[1][2]      ))) )
+   {
+      return(1);
+   }
+
+   return(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Compute a triangle aspect ration                                           */
+/*----------------------------------------------------------------------------*/
+
+static fpn GetTriAni(TriSct *tri)
+{
+   fpn srf, len, MaxLen;
+
+   srf = GetTriSrf(tri);
+   MaxLen = len = DisPow(tri->ver[0]->crd, tri->ver[1]->crd);
+   len = DisPow(tri->ver[1]->crd, tri->ver[2]->crd);
+   MaxLen = MAX(len, MaxLen);
+   len = DisPow(tri->ver[2]->crd, tri->ver[0]->crd);
+   MaxLen = MAX(len, MaxLen);
+
+   return(sqrt(MaxLen / srf));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Various basic operations on vectors                                        */
+/*----------------------------------------------------------------------------*/
+
+// Euclidian distance
+static fpn dis(fpn a[3], fpn b[3])
+{
+   itg i;
+   fpn siz = 0;
+
+   for(i=0;i<3;i++)
+      siz += POW(b[i] - a[i]);
+
+   return(sqrt(siz));
+}
+
+// Euclidian distance to the power of two
+static fpn DisPow(fpn a[3], fpn b[3])
+{
+   itg i;
+   fpn siz = 0;
+
+   for(i=0;i<3;i++)
+      siz += POW(b[i] - a[i]);
+
+   return(siz);
+}
+
+// V = V - U
+static void SubVec2(fpn u[3], fpn v[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v[i] -= u[i];
+}
+
+// W = U - V
+static void SubVec3(fpn u[3], fpn v[3], fpn w[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      w[i] = u[i] - v[i];
+}
+
+// Euclidian norm
+static void NrmVec(fpn u[3])
+{
+   itg i;
+   fpn dp = 0;
+
+   for(i=0;i<3;i++)
+      dp += u[i] * u[i];
+
+   if(dp < DBL_MIN)
+      return;
+
+   dp = 1. / sqrt(dp);
+
+   for(i=0;i<3;i++)
+      u[i] *= dp;
+}
+
+// Dot Product
+static fpn DotPrd(fpn u[3], fpn v[3])
+{
+   itg i;
+   fpn dp = 0;
+
+   for(i=0;i<3;i++)
+      dp += u[i] * v[i];
+
+   return(dp);
+}
+
+// Cross product
+static void CrsPrd(fpn u[3], fpn v[3], fpn w[3])
+{
+   w[0] = u[1] * v[2] - u[2] * v[1];
+   w[1] = u[2] * v[0] - u[0] * v[2];
+   w[2] = u[0] * v[1] - u[1] * v[0];
+}
+
+// Linear combinaison: W = a*U + b*V
+static void LinCmbVec3(fpn w1, fpn v1[3], fpn w2, fpn v2[3], fpn v3[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v3[i] = w1 * v1[i] + w2 * v2[i];
+}
+
+// U = 0
+static void ClrVec(fpn u[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      u[i] = 0.;
+}
+
+// V = U
+static void CpyVec(fpn u[3], fpn v[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v[i] = u[i];
+}
+
+// V = V + U
+static void AddVec2(fpn u[3], fpn v[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v[i] += u[i];
+}
+
+// U = U + [s;s;s]
+static void AddScaVec1(fpn s, fpn u[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      u[i] += s;
+}
+
+// V = U + [s;s;s]
+static void AddScaVec2(fpn s, fpn u[3], fpn v[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v[i] = u[i] + s;
+}
+
+// U = w*U
+static void MulVec1(const fpn w, fpn u[3])
+{
+   u[0] *= w;
+   u[1] *= w;
+   u[2] *= w;
+}
+
+// V = w*U
+static void MulVec2(fpn w, fpn u[3], fpn v[3])
+{
+   itg i;
+
+   for(i=0;i<3;i++)
+      v[i] = w * u[i];
+}
+
+// Return Euclidian norm
+static fpn GetNrmVec(fpn u[3])
+{
+   return(sqrt(POW(u[0]) + POW(u[1]) + POW(u[2])));
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Allocate a chunk of memory and link it to memory allocator's list          */
+/*----------------------------------------------------------------------------*/
+
+static void *NewMem(TreSct *tre, size_t siz)
+{
+   MemSct *mem;
+
+   mem = malloc(sizeof(MemSct));
+   assert(mem);
+   mem->adr = malloc(siz);
+   assert(mem->adr);
+   mem->siz = siz;
+   mem->nex = tre->NexMem;
+   tre->NexMem = mem;
+   tre->MemUse += siz;
+
+   return(mem->adr);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Cylct through the linked list of allocated block and free them all         */
+/*----------------------------------------------------------------------------*/
+
+static void FreAllMem(TreSct *tre)
+{
+   MemSct *mem = tre->NexMem, *nex;
+
+   while(mem)
+   {
+      tre->MemUse -= mem->siz;
+      nex = mem->nex;
+      free(mem->adr);
+      free(mem);
+      mem = nex;
+   }
+}
+
+
+/*----------------------------------------------------------------------------*/
+/* Fortran 77 API                                                             */
+/*----------------------------------------------------------------------------*/
+
+int64_t call(lolnewoctree)(itg *NmbVer, fpn *VerTab1, fpn *VerTab2,
+                           itg *NmbEdg, itg *EdgTab1, itg *EdgTab2,
+                           itg *NmbTri, itg *TriTab1, itg *TriTab2,
+                           itg *NmbQad, itg *QadTab1, itg *QadTab2,
+                           itg *NmbTet, itg *TetTab1, itg *TetTab2,
+                           itg *NmbPyr, itg *PyrTab1, itg *PyrTab2,
+                           itg *NmbPri, itg *PriTab1, itg *PriTab2,
+                           itg *NmbHex, itg *HexTab1, itg *HexTab2,
+                           itg *BasIdx, itg *NmbThr)
+{
+   return(LolNewOctree( *NmbVer, VerTab1, VerTab2, *NmbEdg, EdgTab1, EdgTab2,
+                        *NmbTri, TriTab1, TriTab2, *NmbQad, QadTab1, QadTab2,
+                        *NmbTet, TetTab1, TetTab2, *NmbPyr, PyrTab1, PyrTab2,
+                        *NmbPri, PriTab1, PriTab2, *NmbHex, HexTab1, HexTab2,
+                        *BasIdx, *NmbThr ));
+}
+
+int64_t call(lolfreeoctree)(int64_t *OctIdx)
+{
+   return(LolFreeOctree(*OctIdx));
+}   
+
+itg call(lolgetboundingbox)(  int64_t *OctIdx, itg *typ, itg *MaxItm,
+                              itg *ItmTab, fpn *MinCrd, fpn *MaxCrd, itg *ThrIdx )
+{
+   return(LolGetBoundingBox(*OctIdx, *typ, *MaxItm, ItmTab, MinCrd, MaxCrd, *ThrIdx));
+}
+
+itg call(lolgetnearest)(int64_t *OctIdx, itg *typ, fpn *MinCrd, fpn *MinDis,
+                        fpn *MaxDis, void *UsrPrc, void *UsrDat, itg *ThrIdx)
+{
+   return(LolGetNearest(*OctIdx, *typ, MinCrd, MinDis,
+                        *MaxDis, UsrPrc, UsrDat, *ThrIdx));
+}
diff --git a/Common/libol1.h b/Common/libol1.h
new file mode 100644
index 0000000000000000000000000000000000000000..1bcc2c9692ee1f77e56b71eeb25e48e404b1c74a
--- /dev/null
+++ b/Common/libol1.h
@@ -0,0 +1,105 @@
+// All libOL code is Copyright 2012-2018 - by Loïc Maréchal / INRIA.
+// This program is a free software.
+// You can redistribute it and/or modify it under the terms of the MIT License
+// as published by the Open Source Initiative.
+//  
+// 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 MIT License for more details.
+//  
+// You should have received a copy of the MIT License along with this program
+// as the file LICENSE.txt; if not, please see:
+// https://opensource.org/licenses/MIT
+//
+//
+// MIT License
+// 
+// Copyright (c) 2012-2018 Loïc Maréchal / INRIA
+// 
+// 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
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+/*----------------------------------------------------------------------------*/
+/*                                                                            */
+/*                      LIB OCTREE LOCALISATION V1.70                         */
+/*                                                                            */
+/*----------------------------------------------------------------------------*/
+/*                                                                            */
+/*    Description:         Octree for mesh localization                       */
+/*    Author:              Loic MARECHAL                                      */
+/*    Creation date:       mar 16 2012                                        */
+/*    Last modification:   feb 03 2021                                        */
+/*                                                                            */
+/*----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------*/
+/* Public defines : type of elements and 32/64 bits int and floating points   */
+/*----------------------------------------------------------------------------*/
+
+enum TypTag {  LolTypVer=1, LolTypEdg, LolTypTri, LolTypQad,
+               LolTypTet,   LolTypPyr, LolTypPri, LolTypHex, LolNmbTyp };
+
+
+/*----------------------------------------------------------------------------*/
+/* Set integer and floating point sizes:                                      */
+/* default values are 32-bit integers and 64-bit floating points              */
+/* define INT64 or REAL32 to override default settings                        */
+/*----------------------------------------------------------------------------*/
+
+#ifdef INT64
+#define itg int64_t
+#define utg uint64_t
+#else
+#define itg int32_t
+#define utg uint32_t
+#endif
+
+#ifdef REAL32
+#define fpn float
+#else
+#define fpn double
+#endif
+
+
+/*----------------------------------------------------------------------------*/
+/* Public procedures                                                          */
+/*----------------------------------------------------------------------------*/
+
+int64_t LolNewOctree       (itg, fpn *, fpn *, itg, itg *, itg *,
+                            itg, itg *, itg *, itg, itg *, itg *,
+                            itg, itg *, itg *, itg, itg *, itg *,
+                            itg, itg *, itg *, itg, itg *, itg *, itg, itg);
+size_t  LolFreeOctree      (int64_t);
+itg     LolGetBoundingBox  (int64_t , itg , itg, itg *, fpn [3], fpn [3], itg);
+itg     LolGetNearest      (int64_t, itg, fpn *, fpn *, fpn, itg (void *, itg),
+                            void * , itg);
+itg     LolIntersectSurface(int64_t, fpn *, fpn *, fpn *,
+                            fpn, itg (void *, itg), void *, itg );
+itg     LolProjectVertex   (int64_t, fpn *, itg, itg, fpn *, itg);
+
+
+/*----------------------------------------------------------------------------*/
+/* Fortran 77 API                                                             */
+/*----------------------------------------------------------------------------*/
+
+#if defined(F77_NO_UNDER_SCORE)
+#define call(x) x
+#else
+#define call(x) x ## _
+#endif
diff --git a/Common/robin_hood.h b/Common/robin_hood.h
new file mode 100644
index 0000000000000000000000000000000000000000..573607f18d056adfba936f0ccee7c14df62e8a3d
--- /dev/null
+++ b/Common/robin_hood.h
@@ -0,0 +1,2429 @@
+//                 ______  _____                 ______                _________
+//  ______________ ___  /_ ___(_)_______         ___  /_ ______ ______ ______  /
+//  __  ___/_  __ \__  __ \__  / __  __ \        __  __ \_  __ \_  __ \_  __  /
+//  _  /    / /_/ /_  /_/ /_  /  _  / / /        _  / / // /_/ // /_/ // /_/ /
+//  /_/     \____/ /_.___/ /_/   /_/ /_/ ________/_/ /_/ \____/ \____/ \__,_/
+//                                      _/_____/
+//
+// Fast & memory efficient hashtable based on robin hood hashing for C++11/14/17/20
+// https://github.com/martinus/robin-hood-hashing
+//
+// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
+// SPDX-License-Identifier: MIT
+// Copyright (c) 2018-2020 Martin Ankerl <http://martin.ankerl.com>
+//
+// 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
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#ifndef ROBIN_HOOD_H_INCLUDED
+#define ROBIN_HOOD_H_INCLUDED
+
+// see https://semver.org/
+#define ROBIN_HOOD_VERSION_MAJOR 3 // for incompatible API changes
+#define ROBIN_HOOD_VERSION_MINOR 9 // for adding functionality in a backwards-compatible manner
+#define ROBIN_HOOD_VERSION_PATCH 1 // for backwards-compatible bug fixes
+
+#include <algorithm>
+#include <cstdlib>
+#include <cstring>
+#include <functional>
+#include <memory> // only to support hash of smart pointers
+#include <stdexcept>
+#include <string>
+#include <type_traits>
+#include <utility>
+#if __cplusplus >= 201703L
+#    include <string_view>
+#endif
+
+// #define ROBIN_HOOD_LOG_ENABLED
+#ifdef ROBIN_HOOD_LOG_ENABLED
+#    include <iostream>
+#    define ROBIN_HOOD_LOG(...) \
+        std::cout << __FUNCTION__ << "@" << __LINE__ << ": " << __VA_ARGS__ << std::endl;
+#else
+#    define ROBIN_HOOD_LOG(x)
+#endif
+
+// #define ROBIN_HOOD_TRACE_ENABLED
+#ifdef ROBIN_HOOD_TRACE_ENABLED
+#    include <iostream>
+#    define ROBIN_HOOD_TRACE(...) \
+        std::cout << __FUNCTION__ << "@" << __LINE__ << ": " << __VA_ARGS__ << std::endl;
+#else
+#    define ROBIN_HOOD_TRACE(x)
+#endif
+
+// #define ROBIN_HOOD_COUNT_ENABLED
+#ifdef ROBIN_HOOD_COUNT_ENABLED
+#    include <iostream>
+#    define ROBIN_HOOD_COUNT(x) ++counts().x;
+namespace robin_hood {
+struct Counts {
+    uint64_t shiftUp{};
+    uint64_t shiftDown{};
+};
+inline std::ostream& operator<<(std::ostream& os, Counts const& c) {
+    return os << c.shiftUp << " shiftUp" << std::endl << c.shiftDown << " shiftDown" << std::endl;
+}
+
+static Counts& counts() {
+    static Counts counts{};
+    return counts;
+}
+} // namespace robin_hood
+#else
+#    define ROBIN_HOOD_COUNT(x)
+#endif
+
+// all non-argument macros should use this facility. See
+// https://www.fluentcpp.com/2019/05/28/better-macros-better-flags/
+#define ROBIN_HOOD(x) ROBIN_HOOD_PRIVATE_DEFINITION_##x()
+
+// mark unused members with this macro
+#define ROBIN_HOOD_UNUSED(identifier)
+
+// bitness
+#if SIZE_MAX == UINT32_MAX
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_BITNESS() 32
+#elif SIZE_MAX == UINT64_MAX
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_BITNESS() 64
+#else
+#    error Unsupported bitness
+#endif
+
+// endianess
+#ifdef _MSC_VER
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_LITTLE_ENDIAN() 1
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_BIG_ENDIAN() 0
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_LITTLE_ENDIAN() \
+        (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_BIG_ENDIAN() (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#endif
+
+// inline
+#ifdef _MSC_VER
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_NOINLINE() __declspec(noinline)
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_NOINLINE() __attribute__((noinline))
+#endif
+
+// exceptions
+#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND)
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_HAS_EXCEPTIONS() 0
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_HAS_EXCEPTIONS() 1
+#endif
+
+// count leading/trailing bits
+#if !defined(ROBIN_HOOD_DISABLE_INTRINSICS)
+#    ifdef _MSC_VER
+#        if ROBIN_HOOD(BITNESS) == 32
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_BITSCANFORWARD() _BitScanForward
+#        else
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_BITSCANFORWARD() _BitScanForward64
+#        endif
+#        include <intrin.h>
+#        pragma intrinsic(ROBIN_HOOD(BITSCANFORWARD))
+#        define ROBIN_HOOD_COUNT_TRAILING_ZEROES(x)                                       \
+            [](size_t mask) noexcept -> int {                                             \
+                unsigned long index;                                                      \
+                return ROBIN_HOOD(BITSCANFORWARD)(&index, mask) ? static_cast<int>(index) \
+                                                                : ROBIN_HOOD(BITNESS);    \
+            }(x)
+#    else
+#        if ROBIN_HOOD(BITNESS) == 32
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_CTZ() __builtin_ctzl
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_CLZ() __builtin_clzl
+#        else
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_CTZ() __builtin_ctzll
+#            define ROBIN_HOOD_PRIVATE_DEFINITION_CLZ() __builtin_clzll
+#        endif
+#        define ROBIN_HOOD_COUNT_LEADING_ZEROES(x) ((x) ? ROBIN_HOOD(CLZ)(x) : ROBIN_HOOD(BITNESS))
+#        define ROBIN_HOOD_COUNT_TRAILING_ZEROES(x) ((x) ? ROBIN_HOOD(CTZ)(x) : ROBIN_HOOD(BITNESS))
+#    endif
+#endif
+
+// fallthrough
+#ifndef __has_cpp_attribute // For backwards compatibility
+#    define __has_cpp_attribute(x) 0
+#endif
+#if __has_cpp_attribute(clang::fallthrough)
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_FALLTHROUGH() [[clang::fallthrough]]
+#elif __has_cpp_attribute(gnu::fallthrough)
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_FALLTHROUGH() [[gnu::fallthrough]]
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_FALLTHROUGH()
+#endif
+
+// likely/unlikely
+#ifdef _MSC_VER
+#    define ROBIN_HOOD_LIKELY(condition) condition
+#    define ROBIN_HOOD_UNLIKELY(condition) condition
+#else
+#    define ROBIN_HOOD_LIKELY(condition) __builtin_expect(condition, 1)
+#    define ROBIN_HOOD_UNLIKELY(condition) __builtin_expect(condition, 0)
+#endif
+
+// detect if native wchar_t type is availiable in MSVC
+#ifdef _MSC_VER
+#    ifdef _NATIVE_WCHAR_T_DEFINED
+#        define ROBIN_HOOD_PRIVATE_DEFINITION_HAS_NATIVE_WCHART() 1
+#    else
+#        define ROBIN_HOOD_PRIVATE_DEFINITION_HAS_NATIVE_WCHART() 0
+#    endif
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_HAS_NATIVE_WCHART() 1
+#endif
+
+// workaround missing "is_trivially_copyable" in g++ < 5.0
+// See https://stackoverflow.com/a/31798726/48181
+#if defined(__GNUC__) && __GNUC__ < 5
+#    define ROBIN_HOOD_IS_TRIVIALLY_COPYABLE(...) __has_trivial_copy(__VA_ARGS__)
+#else
+#    define ROBIN_HOOD_IS_TRIVIALLY_COPYABLE(...) std::is_trivially_copyable<__VA_ARGS__>::value
+#endif
+
+// helpers for C++ versions, see https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
+#define ROBIN_HOOD_PRIVATE_DEFINITION_CXX() __cplusplus
+#define ROBIN_HOOD_PRIVATE_DEFINITION_CXX98() 199711L
+#define ROBIN_HOOD_PRIVATE_DEFINITION_CXX11() 201103L
+#define ROBIN_HOOD_PRIVATE_DEFINITION_CXX14() 201402L
+#define ROBIN_HOOD_PRIVATE_DEFINITION_CXX17() 201703L
+
+#if ROBIN_HOOD(CXX) >= ROBIN_HOOD(CXX17)
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_NODISCARD() [[nodiscard]]
+#else
+#    define ROBIN_HOOD_PRIVATE_DEFINITION_NODISCARD()
+#endif
+
+namespace robin_hood {
+
+#if ROBIN_HOOD(CXX) >= ROBIN_HOOD(CXX14)
+#    define ROBIN_HOOD_STD std
+#else
+
+// c++11 compatibility layer
+namespace ROBIN_HOOD_STD {
+template <class T>
+struct alignment_of
+    : std::integral_constant<std::size_t, alignof(typename std::remove_all_extents<T>::type)> {};
+
+template <class T, T... Ints>
+class integer_sequence {
+public:
+    using value_type = T;
+    static_assert(std::is_integral<value_type>::value, "not integral type");
+    static constexpr std::size_t size() noexcept {
+        return sizeof...(Ints);
+    }
+};
+template <std::size_t... Inds>
+using index_sequence = integer_sequence<std::size_t, Inds...>;
+
+namespace detail_ {
+template <class T, T Begin, T End, bool>
+struct IntSeqImpl {
+    using TValue = T;
+    static_assert(std::is_integral<TValue>::value, "not integral type");
+    static_assert(Begin >= 0 && Begin < End, "unexpected argument (Begin<0 || Begin<=End)");
+
+    template <class, class>
+    struct IntSeqCombiner;
+
+    template <TValue... Inds0, TValue... Inds1>
+    struct IntSeqCombiner<integer_sequence<TValue, Inds0...>, integer_sequence<TValue, Inds1...>> {
+        using TResult = integer_sequence<TValue, Inds0..., Inds1...>;
+    };
+
+    using TResult =
+        typename IntSeqCombiner<typename IntSeqImpl<TValue, Begin, Begin + (End - Begin) / 2,
+                                                    (End - Begin) / 2 == 1>::TResult,
+                                typename IntSeqImpl<TValue, Begin + (End - Begin) / 2, End,
+                                                    (End - Begin + 1) / 2 == 1>::TResult>::TResult;
+};
+
+template <class T, T Begin>
+struct IntSeqImpl<T, Begin, Begin, false> {
+    using TValue = T;
+    static_assert(std::is_integral<TValue>::value, "not integral type");
+    static_assert(Begin >= 0, "unexpected argument (Begin<0)");
+    using TResult = integer_sequence<TValue>;
+};
+
+template <class T, T Begin, T End>
+struct IntSeqImpl<T, Begin, End, true> {
+    using TValue = T;
+    static_assert(std::is_integral<TValue>::value, "not integral type");
+    static_assert(Begin >= 0, "unexpected argument (Begin<0)");
+    using TResult = integer_sequence<TValue, Begin>;
+};
+} // namespace detail_
+
+template <class T, T N>
+using make_integer_sequence = typename detail_::IntSeqImpl<T, 0, N, (N - 0) == 1>::TResult;
+
+template <std::size_t N>
+using make_index_sequence = make_integer_sequence<std::size_t, N>;
+
+template <class... T>
+using index_sequence_for = make_index_sequence<sizeof...(T)>;
+
+} // namespace ROBIN_HOOD_STD
+
+#endif
+
+namespace detail {
+
+// make sure we static_cast to the correct type for hash_int
+#if ROBIN_HOOD(BITNESS) == 64
+using SizeT = uint64_t;
+#else
+using SizeT = uint32_t;
+#endif
+
+template <typename T>
+T rotr(T x, unsigned k) {
+    return (x >> k) | (x << (8U * sizeof(T) - k));
+}
+
+// This cast gets rid of warnings like "cast from 'uint8_t*' {aka 'unsigned char*'} to
+// 'uint64_t*' {aka 'long unsigned int*'} increases required alignment of target type". Use with
+// care!
+template <typename T>
+inline T reinterpret_cast_no_cast_align_warning(void* ptr) noexcept {
+    return reinterpret_cast<T>(ptr);
+}
+
+template <typename T>
+inline T reinterpret_cast_no_cast_align_warning(void const* ptr) noexcept {
+    return reinterpret_cast<T>(ptr);
+}
+
+// make sure this is not inlined as it is slow and dramatically enlarges code, thus making other
+// inlinings more difficult. Throws are also generally the slow path.
+template <typename E, typename... Args>
+[[noreturn]] ROBIN_HOOD(NOINLINE)
+#if ROBIN_HOOD(HAS_EXCEPTIONS)
+    void doThrow(Args&&... args) {
+    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-array-to-pointer-decay)
+    throw E(std::forward<Args>(args)...);
+}
+#else
+    void doThrow(Args&&... ROBIN_HOOD_UNUSED(args) /*unused*/) {
+    abort();
+}
+#endif
+
+template <typename E, typename T, typename... Args>
+T* assertNotNull(T* t, Args&&... args) {
+    if (ROBIN_HOOD_UNLIKELY(nullptr == t)) {
+        doThrow<E>(std::forward<Args>(args)...);
+    }
+    return t;
+}
+
+template <typename T>
+inline T unaligned_load(void const* ptr) noexcept {
+    // using memcpy so we don't get into unaligned load problems.
+    // compiler should optimize this very well anyways.
+    T t;
+    std::memcpy(&t, ptr, sizeof(T));
+    return t;
+}
+
+// Allocates bulks of memory for objects of type T. This deallocates the memory in the destructor,
+// and keeps a linked list of the allocated memory around. Overhead per allocation is the size of a
+// pointer.
+template <typename T, size_t MinNumAllocs = 4, size_t MaxNumAllocs = 256>
+class BulkPoolAllocator {
+public:
+    BulkPoolAllocator() noexcept = default;
+
+    // does not copy anything, just creates a new allocator.
+    BulkPoolAllocator(const BulkPoolAllocator& ROBIN_HOOD_UNUSED(o) /*unused*/) noexcept
+        : mHead(nullptr)
+        , mListForFree(nullptr) {}
+
+    BulkPoolAllocator(BulkPoolAllocator&& o) noexcept
+        : mHead(o.mHead)
+        , mListForFree(o.mListForFree) {
+        o.mListForFree = nullptr;
+        o.mHead = nullptr;
+    }
+
+    BulkPoolAllocator& operator=(BulkPoolAllocator&& o) noexcept {
+        reset();
+        mHead = o.mHead;
+        mListForFree = o.mListForFree;
+        o.mListForFree = nullptr;
+        o.mHead = nullptr;
+        return *this;
+    }
+
+    BulkPoolAllocator&
+    // NOLINTNEXTLINE(bugprone-unhandled-self-assignment,cert-oop54-cpp)
+    operator=(const BulkPoolAllocator& ROBIN_HOOD_UNUSED(o) /*unused*/) noexcept {
+        // does not do anything
+        return *this;
+    }
+
+    ~BulkPoolAllocator() noexcept {
+        reset();
+    }
+
+    // Deallocates all allocated memory.
+    void reset() noexcept {
+        while (mListForFree) {
+            T* tmp = *mListForFree;
+            ROBIN_HOOD_LOG("std::free")
+            std::free(mListForFree);
+            mListForFree = reinterpret_cast_no_cast_align_warning<T**>(tmp);
+        }
+        mHead = nullptr;
+    }
+
+    // allocates, but does NOT initialize. Use in-place new constructor, e.g.
+    //   T* obj = pool.allocate();
+    //   ::new (static_cast<void*>(obj)) T();
+    T* allocate() {
+        T* tmp = mHead;
+        if (!tmp) {
+            tmp = performAllocation();
+        }
+
+        mHead = *reinterpret_cast_no_cast_align_warning<T**>(tmp);
+        return tmp;
+    }
+
+    // does not actually deallocate but puts it in store.
+    // make sure you have already called the destructor! e.g. with
+    //  obj->~T();
+    //  pool.deallocate(obj);
+    void deallocate(T* obj) noexcept {
+        *reinterpret_cast_no_cast_align_warning<T**>(obj) = mHead;
+        mHead = obj;
+    }
+
+    // Adds an already allocated block of memory to the allocator. This allocator is from now on
+    // responsible for freeing the data (with free()). If the provided data is not large enough to
+    // make use of, it is immediately freed. Otherwise it is reused and freed in the destructor.
+    void addOrFree(void* ptr, const size_t numBytes) noexcept {
+        // calculate number of available elements in ptr
+        if (numBytes < ALIGNMENT + ALIGNED_SIZE) {
+            // not enough data for at least one element. Free and return.
+            ROBIN_HOOD_LOG("std::free")
+            std::free(ptr);
+        } else {
+            ROBIN_HOOD_LOG("add to buffer")
+            add(ptr, numBytes);
+        }
+    }
+
+    void swap(BulkPoolAllocator<T, MinNumAllocs, MaxNumAllocs>& other) noexcept {
+        using std::swap;
+        swap(mHead, other.mHead);
+        swap(mListForFree, other.mListForFree);
+    }
+
+private:
+    // iterates the list of allocated memory to calculate how many to alloc next.
+    // Recalculating this each time saves us a size_t member.
+    // This ignores the fact that memory blocks might have been added manually with addOrFree. In
+    // practice, this should not matter much.
+    ROBIN_HOOD(NODISCARD) size_t calcNumElementsToAlloc() const noexcept {
+        auto tmp = mListForFree;
+        size_t numAllocs = MinNumAllocs;
+
+        while (numAllocs * 2 <= MaxNumAllocs && tmp) {
+            auto x = reinterpret_cast<T***>(tmp);
+            tmp = *x;
+            numAllocs *= 2;
+        }
+
+        return numAllocs;
+    }
+
+    // WARNING: Underflow if numBytes < ALIGNMENT! This is guarded in addOrFree().
+    void add(void* ptr, const size_t numBytes) noexcept {
+        const size_t numElements = (numBytes - ALIGNMENT) / ALIGNED_SIZE;
+
+        auto data = reinterpret_cast<T**>(ptr);
+
+        // link free list
+        auto x = reinterpret_cast<T***>(data);
+        *x = mListForFree;
+        mListForFree = data;
+
+        // create linked list for newly allocated data
+        auto* const headT =
+            reinterpret_cast_no_cast_align_warning<T*>(reinterpret_cast<char*>(ptr) + ALIGNMENT);
+
+        auto* const head = reinterpret_cast<char*>(headT);
+
+        // Visual Studio compiler automatically unrolls this loop, which is pretty cool
+        for (size_t i = 0; i < numElements; ++i) {
+            *reinterpret_cast_no_cast_align_warning<char**>(head + i * ALIGNED_SIZE) =
+                head + (i + 1) * ALIGNED_SIZE;
+        }
+
+        // last one points to 0
+        *reinterpret_cast_no_cast_align_warning<T**>(head + (numElements - 1) * ALIGNED_SIZE) =
+            mHead;
+        mHead = headT;
+    }
+
+    // Called when no memory is available (mHead == 0).
+    // Don't inline this slow path.
+    ROBIN_HOOD(NOINLINE) T* performAllocation() {
+        size_t const numElementsToAlloc = calcNumElementsToAlloc();
+
+        // alloc new memory: [prev |T, T, ... T]
+        size_t const bytes = ALIGNMENT + ALIGNED_SIZE * numElementsToAlloc;
+        ROBIN_HOOD_LOG("std::malloc " << bytes << " = " << ALIGNMENT << " + " << ALIGNED_SIZE
+                                      << " * " << numElementsToAlloc)
+        add(assertNotNull<std::bad_alloc>(std::malloc(bytes)), bytes);
+        return mHead;
+    }
+
+    // enforce byte alignment of the T's
+#if ROBIN_HOOD(CXX) >= ROBIN_HOOD(CXX14)
+    static constexpr size_t ALIGNMENT =
+        (std::max)(std::alignment_of<T>::value, std::alignment_of<T*>::value);
+#else
+    static const size_t ALIGNMENT =
+        (ROBIN_HOOD_STD::alignment_of<T>::value > ROBIN_HOOD_STD::alignment_of<T*>::value)
+            ? ROBIN_HOOD_STD::alignment_of<T>::value
+            : +ROBIN_HOOD_STD::alignment_of<T*>::value; // the + is for walkarround
+#endif
+
+    static constexpr size_t ALIGNED_SIZE = ((sizeof(T) - 1) / ALIGNMENT + 1) * ALIGNMENT;
+
+    static_assert(MinNumAllocs >= 1, "MinNumAllocs");
+    static_assert(MaxNumAllocs >= MinNumAllocs, "MaxNumAllocs");
+    static_assert(ALIGNED_SIZE >= sizeof(T*), "ALIGNED_SIZE");
+    static_assert(0 == (ALIGNED_SIZE % sizeof(T*)), "ALIGNED_SIZE mod");
+    static_assert(ALIGNMENT >= sizeof(T*), "ALIGNMENT");
+
+    T* mHead{nullptr};
+    T** mListForFree{nullptr};
+};
+
+template <typename T, size_t MinSize, size_t MaxSize, bool IsFlat>
+struct NodeAllocator;
+
+// dummy allocator that does nothing
+template <typename T, size_t MinSize, size_t MaxSize>
+struct NodeAllocator<T, MinSize, MaxSize, true> {
+
+    // we are not using the data, so just free it.
+    void addOrFree(void* ptr, size_t ROBIN_HOOD_UNUSED(numBytes) /*unused*/) noexcept {
+        ROBIN_HOOD_LOG("std::free")
+        std::free(ptr);
+    }
+};
+
+template <typename T, size_t MinSize, size_t MaxSize>
+struct NodeAllocator<T, MinSize, MaxSize, false> : public BulkPoolAllocator<T, MinSize, MaxSize> {};
+
+// dummy hash, unsed as mixer when robin_hood::hash is already used
+template <typename T>
+struct identity_hash {
+    constexpr size_t operator()(T const& obj) const noexcept {
+        return static_cast<size_t>(obj);
+    }
+};
+
+// c++14 doesn't have is_nothrow_swappable, and clang++ 6.0.1 doesn't like it either, so I'm making
+// my own here.
+namespace swappable {
+#if ROBIN_HOOD(CXX) < ROBIN_HOOD(CXX17)
+using std::swap;
+template <typename T>
+struct nothrow {
+    static const bool value = noexcept(swap(std::declval<T&>(), std::declval<T&>()));
+};
+#else
+template <typename T>
+struct nothrow {
+    static const bool value = std::is_nothrow_swappable<T>::value;
+};
+#endif
+} // namespace swappable
+
+} // namespace detail
+
+struct is_transparent_tag {};
+
+// A custom pair implementation is used in the map because std::pair is not is_trivially_copyable,
+// which means it would  not be allowed to be used in std::memcpy. This struct is copyable, which is
+// also tested.
+template <typename T1, typename T2>
+struct pair {
+    using first_type = T1;
+    using second_type = T2;
+
+    template <typename U1 = T1, typename U2 = T2,
+              typename = typename std::enable_if<std::is_default_constructible<U1>::value &&
+                                                 std::is_default_constructible<U2>::value>::type>
+    constexpr pair() noexcept(noexcept(U1()) && noexcept(U2()))
+        : first()
+        , second() {}
+
+    // pair constructors are explicit so we don't accidentally call this ctor when we don't have to.
+    explicit constexpr pair(std::pair<T1, T2> const& o) noexcept(
+        noexcept(T1(std::declval<T1 const&>())) && noexcept(T2(std::declval<T2 const&>())))
+        : first(o.first)
+        , second(o.second) {}
+
+    // pair constructors are explicit so we don't accidentally call this ctor when we don't have to.
+    explicit constexpr pair(std::pair<T1, T2>&& o) noexcept(noexcept(
+        T1(std::move(std::declval<T1&&>()))) && noexcept(T2(std::move(std::declval<T2&&>()))))
+        : first(std::move(o.first))
+        , second(std::move(o.second)) {}
+
+    constexpr pair(T1&& a, T2&& b) noexcept(noexcept(
+        T1(std::move(std::declval<T1&&>()))) && noexcept(T2(std::move(std::declval<T2&&>()))))
+        : first(std::move(a))
+        , second(std::move(b)) {}
+
+    template <typename U1, typename U2>
+    constexpr pair(U1&& a, U2&& b) noexcept(noexcept(T1(std::forward<U1>(
+        std::declval<U1&&>()))) && noexcept(T2(std::forward<U2>(std::declval<U2&&>()))))
+        : first(std::forward<U1>(a))
+        , second(std::forward<U2>(b)) {}
+
+    template <typename... U1, typename... U2>
+    constexpr pair(
+        std::piecewise_construct_t /*unused*/, std::tuple<U1...> a,
+        std::tuple<U2...> b) noexcept(noexcept(pair(std::declval<std::tuple<U1...>&>(),
+                                                    std::declval<std::tuple<U2...>&>(),
+                                                    ROBIN_HOOD_STD::index_sequence_for<U1...>(),
+                                                    ROBIN_HOOD_STD::index_sequence_for<U2...>())))
+        : pair(a, b, ROBIN_HOOD_STD::index_sequence_for<U1...>(),
+               ROBIN_HOOD_STD::index_sequence_for<U2...>()) {}
+
+    // constructor called from the std::piecewise_construct_t ctor
+    template <typename... U1, size_t... I1, typename... U2, size_t... I2>
+    pair(std::tuple<U1...>& a, std::tuple<U2...>& b, ROBIN_HOOD_STD::index_sequence<I1...> /*unused*/, ROBIN_HOOD_STD::index_sequence<I2...> /*unused*/) noexcept(
+        noexcept(T1(std::forward<U1>(std::get<I1>(
+            std::declval<std::tuple<
+                U1...>&>()))...)) && noexcept(T2(std::
+                                                     forward<U2>(std::get<I2>(
+                                                         std::declval<std::tuple<U2...>&>()))...)))
+        : first(std::forward<U1>(std::get<I1>(a))...)
+        , second(std::forward<U2>(std::get<I2>(b))...) {
+        // make visual studio compiler happy about warning about unused a & b.
+        // Visual studio's pair implementation disables warning 4100.
+        (void)a;
+        (void)b;
+    }
+
+    void swap(pair<T1, T2>& o) noexcept((detail::swappable::nothrow<T1>::value) &&
+                                        (detail::swappable::nothrow<T2>::value)) {
+        using std::swap;
+        swap(first, o.first);
+        swap(second, o.second);
+    }
+
+    T1 first;  // NOLINT(misc-non-private-member-variables-in-classes)
+    T2 second; // NOLINT(misc-non-private-member-variables-in-classes)
+};
+
+template <typename A, typename B>
+inline void swap(pair<A, B>& a, pair<A, B>& b) noexcept(
+    noexcept(std::declval<pair<A, B>&>().swap(std::declval<pair<A, B>&>()))) {
+    a.swap(b);
+}
+
+template <typename A, typename B>
+inline constexpr bool operator==(pair<A, B> const& x, pair<A, B> const& y) {
+    return (x.first == y.first) && (x.second == y.second);
+}
+template <typename A, typename B>
+inline constexpr bool operator!=(pair<A, B> const& x, pair<A, B> const& y) {
+    return !(x == y);
+}
+template <typename A, typename B>
+inline constexpr bool operator<(pair<A, B> const& x, pair<A, B> const& y) noexcept(noexcept(
+    std::declval<A const&>() < std::declval<A const&>()) && noexcept(std::declval<B const&>() <
+                                                                     std::declval<B const&>())) {
+    return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
+}
+template <typename A, typename B>
+inline constexpr bool operator>(pair<A, B> const& x, pair<A, B> const& y) {
+    return y < x;
+}
+template <typename A, typename B>
+inline constexpr bool operator<=(pair<A, B> const& x, pair<A, B> const& y) {
+    return !(x > y);
+}
+template <typename A, typename B>
+inline constexpr bool operator>=(pair<A, B> const& x, pair<A, B> const& y) {
+    return !(x < y);
+}
+
+inline size_t hash_bytes(void const* ptr, size_t len) noexcept {
+    static constexpr uint64_t m = UINT64_C(0xc6a4a7935bd1e995);
+    static constexpr uint64_t seed = UINT64_C(0xe17a1465);
+    static constexpr unsigned int r = 47;
+
+    auto const* const data64 = static_cast<uint64_t const*>(ptr);
+    uint64_t h = seed ^ (len * m);
+
+    size_t const n_blocks = len / 8;
+    for (size_t i = 0; i < n_blocks; ++i) {
+        auto k = detail::unaligned_load<uint64_t>(data64 + i);
+
+        k *= m;
+        k ^= k >> r;
+        k *= m;
+
+        h ^= k;
+        h *= m;
+    }
+
+    auto const* const data8 = reinterpret_cast<uint8_t const*>(data64 + n_blocks);
+    switch (len & 7U) {
+    case 7:
+        h ^= static_cast<uint64_t>(data8[6]) << 48U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 6:
+        h ^= static_cast<uint64_t>(data8[5]) << 40U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 5:
+        h ^= static_cast<uint64_t>(data8[4]) << 32U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 4:
+        h ^= static_cast<uint64_t>(data8[3]) << 24U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 3:
+        h ^= static_cast<uint64_t>(data8[2]) << 16U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 2:
+        h ^= static_cast<uint64_t>(data8[1]) << 8U;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    case 1:
+        h ^= static_cast<uint64_t>(data8[0]);
+        h *= m;
+        ROBIN_HOOD(FALLTHROUGH); // FALLTHROUGH
+    default:
+        break;
+    }
+
+    h ^= h >> r;
+    h *= m;
+    h ^= h >> r;
+    return static_cast<size_t>(h);
+}
+
+inline size_t hash_int(uint64_t x) noexcept {
+    // inspired by lemire's strongly universal hashing
+    // https://lemire.me/blog/2018/08/15/fast-strongly-universal-64-bit-hashing-everywhere/
+    //
+    // Instead of shifts, we use rotations so we don't lose any bits.
+    //
+    // Added a final multiplcation with a constant for more mixing. It is most important that
+    // the lower bits are well mixed.
+    auto h1 = x * UINT64_C(0xA24BAED4963EE407);
+    auto h2 = detail::rotr(x, 32U) * UINT64_C(0x9FB21C651E98DF25);
+    auto h = detail::rotr(h1 + h2, 32U);
+    return static_cast<size_t>(h);
+}
+
+// A thin wrapper around std::hash, performing an additional simple mixing step of the result.
+template <typename T, typename Enable = void>
+struct hash : public std::hash<T> {
+    size_t operator()(T const& obj) const
+        noexcept(noexcept(std::declval<std::hash<T>>().operator()(std::declval<T const&>()))) {
+        // call base hash
+        auto result = std::hash<T>::operator()(obj);
+        // return mixed of that, to be save against identity has
+        return hash_int(static_cast<detail::SizeT>(result));
+    }
+};
+
+template <typename CharT>
+struct hash<std::basic_string<CharT>> {
+    size_t operator()(std::basic_string<CharT> const& str) const noexcept {
+        return hash_bytes(str.data(), sizeof(CharT) * str.size());
+    }
+};
+
+#if ROBIN_HOOD(CXX) >= ROBIN_HOOD(CXX17)
+template <typename CharT>
+struct hash<std::basic_string_view<CharT>> {
+    size_t operator()(std::basic_string_view<CharT> const& sv) const noexcept {
+        return hash_bytes(sv.data(), sizeof(CharT) * sv.size());
+    }
+};
+#endif
+
+template <class T>
+struct hash<T*> {
+    size_t operator()(T* ptr) const noexcept {
+        return hash_int(reinterpret_cast<detail::SizeT>(ptr));
+    }
+};
+
+template <class T>
+struct hash<std::unique_ptr<T>> {
+    size_t operator()(std::unique_ptr<T> const& ptr) const noexcept {
+        return hash_int(reinterpret_cast<detail::SizeT>(ptr.get()));
+    }
+};
+
+template <class T>
+struct hash<std::shared_ptr<T>> {
+    size_t operator()(std::shared_ptr<T> const& ptr) const noexcept {
+        return hash_int(reinterpret_cast<detail::SizeT>(ptr.get()));
+    }
+};
+
+template <typename Enum>
+struct hash<Enum, typename std::enable_if<std::is_enum<Enum>::value>::type> {
+    size_t operator()(Enum e) const noexcept {
+        using Underlying = typename std::underlying_type<Enum>::type;
+        return hash<Underlying>{}(static_cast<Underlying>(e));
+    }
+};
+
+#define ROBIN_HOOD_HASH_INT(T)                           \
+    template <>                                          \
+    struct hash<T> {                                     \
+        size_t operator()(T const& obj) const noexcept { \
+            return hash_int(static_cast<uint64_t>(obj)); \
+        }                                                \
+    }
+
+#if defined(__GNUC__) && !defined(__clang__)
+#    pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wuseless-cast"
+#endif
+// see https://en.cppreference.com/w/cpp/utility/hash
+ROBIN_HOOD_HASH_INT(bool);
+ROBIN_HOOD_HASH_INT(char);
+ROBIN_HOOD_HASH_INT(signed char);
+ROBIN_HOOD_HASH_INT(unsigned char);
+ROBIN_HOOD_HASH_INT(char16_t);
+ROBIN_HOOD_HASH_INT(char32_t);
+#if ROBIN_HOOD(HAS_NATIVE_WCHART)
+ROBIN_HOOD_HASH_INT(wchar_t);
+#endif
+ROBIN_HOOD_HASH_INT(short);
+ROBIN_HOOD_HASH_INT(unsigned short);
+ROBIN_HOOD_HASH_INT(int);
+ROBIN_HOOD_HASH_INT(unsigned int);
+ROBIN_HOOD_HASH_INT(long);
+ROBIN_HOOD_HASH_INT(long long);
+ROBIN_HOOD_HASH_INT(unsigned long);
+ROBIN_HOOD_HASH_INT(unsigned long long);
+#if defined(__GNUC__) && !defined(__clang__)
+#    pragma GCC diagnostic pop
+#endif
+namespace detail {
+
+template <typename T>
+struct void_type {
+    using type = void;
+};
+
+template <typename T, typename = void>
+struct has_is_transparent : public std::false_type {};
+
+template <typename T>
+struct has_is_transparent<T, typename void_type<typename T::is_transparent>::type>
+    : public std::true_type {};
+
+// using wrapper classes for hash and key_equal prevents the diamond problem when the same type
+// is used. see https://stackoverflow.com/a/28771920/48181
+template <typename T>
+struct WrapHash : public T {
+    WrapHash() = default;
+    explicit WrapHash(T const& o) noexcept(noexcept(T(std::declval<T const&>())))
+        : T(o) {}
+};
+
+template <typename T>
+struct WrapKeyEqual : public T {
+    WrapKeyEqual() = default;
+    explicit WrapKeyEqual(T const& o) noexcept(noexcept(T(std::declval<T const&>())))
+        : T(o) {}
+};
+
+// A highly optimized hashmap implementation, using the Robin Hood algorithm.
+//
+// In most cases, this map should be usable as a drop-in replacement for std::unordered_map, but
+// be about 2x faster in most cases and require much less allocations.
+//
+// This implementation uses the following memory layout:
+//
+// [Node, Node, ... Node | info, info, ... infoSentinel ]
+//
+// * Node: either a DataNode that directly has the std::pair<key, val> as member,
+//   or a DataNode with a pointer to std::pair<key,val>. Which DataNode representation to use
+//   depends on how fast the swap() operation is. Heuristically, this is automatically choosen
+//   based on sizeof(). there are always 2^n Nodes.
+//
+// * info: Each Node in the map has a corresponding info byte, so there are 2^n info bytes.
+//   Each byte is initialized to 0, meaning the corresponding Node is empty. Set to 1 means the
+//   corresponding node contains data. Set to 2 means the corresponding Node is filled, but it
+//   actually belongs to the previous position and was pushed out because that place is already
+//   taken.
+//
+// * infoSentinel: Sentinel byte set to 1, so that iterator's ++ can stop at end() without the
+//   need for a idx variable.
+//
+// According to STL, order of templates has effect on throughput. That's why I've moved the
+// boolean to the front.
+// https://www.reddit.com/r/cpp/comments/ahp6iu/compile_time_binary_size_reductions_and_cs_future/eeguck4/
+template <bool IsFlat, size_t MaxLoadFactor100, typename Key, typename T, typename Hash,
+          typename KeyEqual>
+class Table
+    : public WrapHash<Hash>,
+      public WrapKeyEqual<KeyEqual>,
+      detail::NodeAllocator<
+          typename std::conditional<
+              std::is_void<T>::value, Key,
+              robin_hood::pair<typename std::conditional<IsFlat, Key, Key const>::type, T>>::type,
+          4, 16384, IsFlat> {
+public:
+    static constexpr bool is_flat = IsFlat;
+    static constexpr bool is_map = !std::is_void<T>::value;
+    static constexpr bool is_set = !is_map;
+    static constexpr bool is_transparent =
+        has_is_transparent<Hash>::value && has_is_transparent<KeyEqual>::value;
+
+    using key_type = Key;
+    using mapped_type = T;
+    using value_type = typename std::conditional<
+        is_set, Key,
+        robin_hood::pair<typename std::conditional<is_flat, Key, Key const>::type, T>>::type;
+    using size_type = size_t;
+    using hasher = Hash;
+    using key_equal = KeyEqual;
+    using Self = Table<IsFlat, MaxLoadFactor100, key_type, mapped_type, hasher, key_equal>;
+
+private:
+    static_assert(MaxLoadFactor100 > 10 && MaxLoadFactor100 < 100,
+                  "MaxLoadFactor100 needs to be >10 && < 100");
+
+    using WHash = WrapHash<Hash>;
+    using WKeyEqual = WrapKeyEqual<KeyEqual>;
+
+    // configuration defaults
+
+    // make sure we have 8 elements, needed to quickly rehash mInfo
+    static constexpr size_t InitialNumElements = sizeof(uint64_t);
+    static constexpr uint32_t InitialInfoNumBits = 5;
+    static constexpr uint8_t InitialInfoInc = 1U << InitialInfoNumBits;
+    static constexpr size_t InfoMask = InitialInfoInc - 1U;
+    static constexpr uint8_t InitialInfoHashShift = 0;
+    using DataPool = detail::NodeAllocator<value_type, 4, 16384, IsFlat>;
+
+    // type needs to be wider than uint8_t.
+    using InfoType = uint32_t;
+
+    // DataNode ////////////////////////////////////////////////////////
+
+    // Primary template for the data node. We have special implementations for small and big
+    // objects. For large objects it is assumed that swap() is fairly slow, so we allocate these
+    // on the heap so swap merely swaps a pointer.
+    template <typename M, bool>
+    class DataNode {};
+
+    // Small: just allocate on the stack.
+    template <typename M>
+    class DataNode<M, true> final {
+    public:
+        template <typename... Args>
+        explicit DataNode(M& ROBIN_HOOD_UNUSED(map) /*unused*/, Args&&... args) noexcept(
+            noexcept(value_type(std::forward<Args>(args)...)))
+            : mData(std::forward<Args>(args)...) {}
+
+        DataNode(M& ROBIN_HOOD_UNUSED(map) /*unused*/, DataNode<M, true>&& n) noexcept(
+            std::is_nothrow_move_constructible<value_type>::value)
+            : mData(std::move(n.mData)) {}
+
+        // doesn't do anything
+        void destroy(M& ROBIN_HOOD_UNUSED(map) /*unused*/) noexcept {}
+        void destroyDoNotDeallocate() noexcept {}
+
+        value_type const* operator->() const noexcept {
+            return &mData;
+        }
+        value_type* operator->() noexcept {
+            return &mData;
+        }
+
+        const value_type& operator*() const noexcept {
+            return mData;
+        }
+
+        value_type& operator*() noexcept {
+            return mData;
+        }
+
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, typename VT::first_type&>::type getFirst() noexcept {
+            return mData.first;
+        }
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_set, VT&>::type getFirst() noexcept {
+            return mData;
+        }
+
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, typename VT::first_type const&>::type
+            getFirst() const noexcept {
+            return mData.first;
+        }
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_set, VT const&>::type getFirst() const noexcept {
+            return mData;
+        }
+
+        template <typename MT = mapped_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, MT&>::type getSecond() noexcept {
+            return mData.second;
+        }
+
+        template <typename MT = mapped_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_set, MT const&>::type getSecond() const noexcept {
+            return mData.second;
+        }
+
+        void swap(DataNode<M, true>& o) noexcept(
+            noexcept(std::declval<value_type>().swap(std::declval<value_type>()))) {
+            mData.swap(o.mData);
+        }
+
+    private:
+        value_type mData;
+    };
+
+    // big object: allocate on heap.
+    template <typename M>
+    class DataNode<M, false> {
+    public:
+        template <typename... Args>
+        explicit DataNode(M& map, Args&&... args)
+            : mData(map.allocate()) {
+            ::new (static_cast<void*>(mData)) value_type(std::forward<Args>(args)...);
+        }
+
+        DataNode(M& ROBIN_HOOD_UNUSED(map) /*unused*/, DataNode<M, false>&& n) noexcept
+            : mData(std::move(n.mData)) {}
+
+        void destroy(M& map) noexcept {
+            // don't deallocate, just put it into list of datapool.
+            mData->~value_type();
+            map.deallocate(mData);
+        }
+
+        void destroyDoNotDeallocate() noexcept {
+            mData->~value_type();
+        }
+
+        value_type const* operator->() const noexcept {
+            return mData;
+        }
+
+        value_type* operator->() noexcept {
+            return mData;
+        }
+
+        const value_type& operator*() const {
+            return *mData;
+        }
+
+        value_type& operator*() {
+            return *mData;
+        }
+
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, typename VT::first_type&>::type getFirst() noexcept {
+            return mData->first;
+        }
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_set, VT&>::type getFirst() noexcept {
+            return *mData;
+        }
+
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, typename VT::first_type const&>::type
+            getFirst() const noexcept {
+            return mData->first;
+        }
+        template <typename VT = value_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_set, VT const&>::type getFirst() const noexcept {
+            return *mData;
+        }
+
+        template <typename MT = mapped_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, MT&>::type getSecond() noexcept {
+            return mData->second;
+        }
+
+        template <typename MT = mapped_type>
+        ROBIN_HOOD(NODISCARD)
+        typename std::enable_if<is_map, MT const&>::type getSecond() const noexcept {
+            return mData->second;
+        }
+
+        void swap(DataNode<M, false>& o) noexcept {
+            using std::swap;
+            swap(mData, o.mData);
+        }
+
+    private:
+        value_type* mData;
+    };
+
+    using Node = DataNode<Self, IsFlat>;
+
+    // helpers for doInsert: extract first entry (only const required)
+    ROBIN_HOOD(NODISCARD) key_type const& getFirstConst(Node const& n) const noexcept {
+        return n.getFirst();
+    }
+
+    // in case we have void mapped_type, we are not using a pair, thus we just route k through.
+    // No need to disable this because it's just not used if not applicable.
+    ROBIN_HOOD(NODISCARD) key_type const& getFirstConst(key_type const& k) const noexcept {
+        return k;
+    }
+
+    // in case we have non-void mapped_type, we have a standard robin_hood::pair
+    template <typename Q = mapped_type>
+    ROBIN_HOOD(NODISCARD)
+    typename std::enable_if<!std::is_void<Q>::value, key_type const&>::type
+        getFirstConst(value_type const& vt) const noexcept {
+        return vt.first;
+    }
+
+    // Cloner //////////////////////////////////////////////////////////
+
+    template <typename M, bool UseMemcpy>
+    struct Cloner;
+
+    // fast path: Just copy data, without allocating anything.
+    template <typename M>
+    struct Cloner<M, true> {
+        void operator()(M const& source, M& target) const {
+            auto const* const src = reinterpret_cast<char const*>(source.mKeyVals);
+            auto* tgt = reinterpret_cast<char*>(target.mKeyVals);
+            auto const numElementsWithBuffer = target.calcNumElementsWithBuffer(target.mMask + 1);
+            std::copy(src, src + target.calcNumBytesTotal(numElementsWithBuffer), tgt);
+        }
+    };
+
+    template <typename M>
+    struct Cloner<M, false> {
+        void operator()(M const& s, M& t) const {
+            auto const numElementsWithBuffer = t.calcNumElementsWithBuffer(t.mMask + 1);
+            std::copy(s.mInfo, s.mInfo + t.calcNumBytesInfo(numElementsWithBuffer), t.mInfo);
+
+            for (size_t i = 0; i < numElementsWithBuffer; ++i) {
+                if (t.mInfo[i]) {
+                    ::new (static_cast<void*>(t.mKeyVals + i)) Node(t, *s.mKeyVals[i]);
+                }
+            }
+        }
+    };
+
+    // Destroyer ///////////////////////////////////////////////////////
+
+    template <typename M, bool IsFlatAndTrivial>
+    struct Destroyer {};
+
+    template <typename M>
+    struct Destroyer<M, true> {
+        void nodes(M& m) const noexcept {
+            m.mNumElements = 0;
+        }
+
+        void nodesDoNotDeallocate(M& m) const noexcept {
+            m.mNumElements = 0;
+        }
+    };
+
+    template <typename M>
+    struct Destroyer<M, false> {
+        void nodes(M& m) const noexcept {
+            m.mNumElements = 0;
+            // clear also resets mInfo to 0, that's sometimes not necessary.
+            auto const numElementsWithBuffer = m.calcNumElementsWithBuffer(m.mMask + 1);
+
+            for (size_t idx = 0; idx < numElementsWithBuffer; ++idx) {
+                if (0 != m.mInfo[idx]) {
+                    Node& n = m.mKeyVals[idx];
+                    n.destroy(m);
+                    n.~Node();
+                }
+            }
+        }
+
+        void nodesDoNotDeallocate(M& m) const noexcept {
+            m.mNumElements = 0;
+            // clear also resets mInfo to 0, that's sometimes not necessary.
+            auto const numElementsWithBuffer = m.calcNumElementsWithBuffer(m.mMask + 1);
+            for (size_t idx = 0; idx < numElementsWithBuffer; ++idx) {
+                if (0 != m.mInfo[idx]) {
+                    Node& n = m.mKeyVals[idx];
+                    n.destroyDoNotDeallocate();
+                    n.~Node();
+                }
+            }
+        }
+    };
+
+    // Iter ////////////////////////////////////////////////////////////
+
+    struct fast_forward_tag {};
+
+    // generic iterator for both const_iterator and iterator.
+    template <bool IsConst>
+    // NOLINTNEXTLINE(hicpp-special-member-functions,cppcoreguidelines-special-member-functions)
+    class Iter {
+    private:
+        using NodePtr = typename std::conditional<IsConst, Node const*, Node*>::type;
+
+    public:
+        using difference_type = std::ptrdiff_t;
+        using value_type = typename Self::value_type;
+        using reference = typename std::conditional<IsConst, value_type const&, value_type&>::type;
+        using pointer = typename std::conditional<IsConst, value_type const*, value_type*>::type;
+        using iterator_category = std::forward_iterator_tag;
+
+        // default constructed iterator can be compared to itself, but WON'T return true when
+        // compared to end().
+        Iter() = default;
+
+        // Rule of zero: nothing specified. The conversion constructor is only enabled for
+        // iterator to const_iterator, so it doesn't accidentally work as a copy ctor.
+
+        // Conversion constructor from iterator to const_iterator.
+        template <bool OtherIsConst,
+                  typename = typename std::enable_if<IsConst && !OtherIsConst>::type>
+        // NOLINTNEXTLINE(hicpp-explicit-conversions)
+        Iter(Iter<OtherIsConst> const& other) noexcept
+            : mKeyVals(other.mKeyVals)
+            , mInfo(other.mInfo) {}
+
+        Iter(NodePtr valPtr, uint8_t const* infoPtr) noexcept
+            : mKeyVals(valPtr)
+            , mInfo(infoPtr) {}
+
+        Iter(NodePtr valPtr, uint8_t const* infoPtr,
+             fast_forward_tag ROBIN_HOOD_UNUSED(tag) /*unused*/) noexcept
+            : mKeyVals(valPtr)
+            , mInfo(infoPtr) {
+            fastForward();
+        }
+
+        template <bool OtherIsConst,
+                  typename = typename std::enable_if<IsConst && !OtherIsConst>::type>
+        Iter& operator=(Iter<OtherIsConst> const& other) noexcept {
+            mKeyVals = other.mKeyVals;
+            mInfo = other.mInfo;
+            return *this;
+        }
+
+        // prefix increment. Undefined behavior if we are at end()!
+        Iter& operator++() noexcept {
+            mInfo++;
+            mKeyVals++;
+            fastForward();
+            return *this;
+        }
+
+        Iter operator++(int) noexcept {
+            Iter tmp = *this;
+            ++(*this);
+            return tmp;
+        }
+
+        reference operator*() const {
+            return **mKeyVals;
+        }
+
+        pointer operator->() const {
+            return &**mKeyVals;
+        }
+
+        template <bool O>
+        bool operator==(Iter<O> const& o) const noexcept {
+            return mKeyVals == o.mKeyVals;
+        }
+
+        template <bool O>
+        bool operator!=(Iter<O> const& o) const noexcept {
+            return mKeyVals != o.mKeyVals;
+        }
+
+    private:
+        // fast forward to the next non-free info byte
+        // I've tried a few variants that don't depend on intrinsics, but unfortunately they are
+        // quite a bit slower than this one. So I've reverted that change again. See map_benchmark.
+        void fastForward() noexcept {
+            size_t n = 0;
+            while (0U == (n = detail::unaligned_load<size_t>(mInfo))) {
+                mInfo += sizeof(size_t);
+                mKeyVals += sizeof(size_t);
+            }
+#if defined(ROBIN_HOOD_DISABLE_INTRINSICS)
+            // we know for certain that within the next 8 bytes we'll find a non-zero one.
+            if (ROBIN_HOOD_UNLIKELY(0U == detail::unaligned_load<uint32_t>(mInfo))) {
+                mInfo += 4;
+                mKeyVals += 4;
+            }
+            if (ROBIN_HOOD_UNLIKELY(0U == detail::unaligned_load<uint16_t>(mInfo))) {
+                mInfo += 2;
+                mKeyVals += 2;
+            }
+            if (ROBIN_HOOD_UNLIKELY(0U == *mInfo)) {
+                mInfo += 1;
+                mKeyVals += 1;
+            }
+#else
+#    if ROBIN_HOOD(LITTLE_ENDIAN)
+            auto inc = ROBIN_HOOD_COUNT_TRAILING_ZEROES(n) / 8;
+#    else
+            auto inc = ROBIN_HOOD_COUNT_LEADING_ZEROES(n) / 8;
+#    endif
+            mInfo += inc;
+            mKeyVals += inc;
+#endif
+        }
+
+        friend class Table<IsFlat, MaxLoadFactor100, key_type, mapped_type, hasher, key_equal>;
+        NodePtr mKeyVals{nullptr};
+        uint8_t const* mInfo{nullptr};
+    };
+
+    ////////////////////////////////////////////////////////////////////
+
+    // highly performance relevant code.
+    // Lower bits are used for indexing into the array (2^n size)
+    // The upper 1-5 bits need to be a reasonable good hash, to save comparisons.
+    template <typename HashKey>
+    void keyToIdx(HashKey&& key, size_t* idx, InfoType* info) const {
+        // for a user-specified hash that is *not* robin_hood::hash, apply robin_hood::hash as
+        // an additional mixing step. This serves as a bad hash prevention, if the given data is
+        // badly mixed.
+        using Mix =
+            typename std::conditional<std::is_same<::robin_hood::hash<key_type>, hasher>::value,
+                                      ::robin_hood::detail::identity_hash<size_t>,
+                                      ::robin_hood::hash<size_t>>::type;
+
+        // the lower InitialInfoNumBits are reserved for info.
+        auto h = Mix{}(WHash::operator()(key));
+        *info = mInfoInc + static_cast<InfoType>((h & InfoMask) >> mInfoHashShift);
+        *idx = (h >> InitialInfoNumBits) & mMask;
+    }
+
+    // forwards the index by one, wrapping around at the end
+    void next(InfoType* info, size_t* idx) const noexcept {
+        *idx = *idx + 1;
+        *info += mInfoInc;
+    }
+
+    void nextWhileLess(InfoType* info, size_t* idx) const noexcept {
+        // unrolling this by hand did not bring any speedups.
+        while (*info < mInfo[*idx]) {
+            next(info, idx);
+        }
+    }
+
+    // Shift everything up by one element. Tries to move stuff around.
+    void
+    shiftUp(size_t startIdx,
+            size_t const insertion_idx) noexcept(std::is_nothrow_move_assignable<Node>::value) {
+        auto idx = startIdx;
+        ::new (static_cast<void*>(mKeyVals + idx)) Node(std::move(mKeyVals[idx - 1]));
+        while (--idx != insertion_idx) {
+            mKeyVals[idx] = std::move(mKeyVals[idx - 1]);
+        }
+
+        idx = startIdx;
+        while (idx != insertion_idx) {
+            ROBIN_HOOD_COUNT(shiftUp)
+            mInfo[idx] = static_cast<uint8_t>(mInfo[idx - 1] + mInfoInc);
+            if (ROBIN_HOOD_UNLIKELY(mInfo[idx] + mInfoInc > 0xFF)) {
+                mMaxNumElementsAllowed = 0;
+            }
+            --idx;
+        }
+    }
+
+    void shiftDown(size_t idx) noexcept(std::is_nothrow_move_assignable<Node>::value) {
+        // until we find one that is either empty or has zero offset.
+        // TODO(martinus) we don't need to move everything, just the last one for the same
+        // bucket.
+        mKeyVals[idx].destroy(*this);
+
+        // until we find one that is either empty or has zero offset.
+        while (mInfo[idx + 1] >= 2 * mInfoInc) {
+            ROBIN_HOOD_COUNT(shiftDown)
+            mInfo[idx] = static_cast<uint8_t>(mInfo[idx + 1] - mInfoInc);
+            mKeyVals[idx] = std::move(mKeyVals[idx + 1]);
+            ++idx;
+        }
+
+        mInfo[idx] = 0;
+        // don't destroy, we've moved it
+        // mKeyVals[idx].destroy(*this);
+        mKeyVals[idx].~Node();
+    }
+
+    // copy of find(), except that it returns iterator instead of const_iterator.
+    template <typename Other>
+    ROBIN_HOOD(NODISCARD)
+    size_t findIdx(Other const& key) const {
+        size_t idx{};
+        InfoType info{};
+        keyToIdx(key, &idx, &info);
+
+        do {
+            // unrolling this twice gives a bit of a speedup. More unrolling did not help.
+            if (info == mInfo[idx] &&
+                ROBIN_HOOD_LIKELY(WKeyEqual::operator()(key, mKeyVals[idx].getFirst()))) {
+                return idx;
+            }
+            next(&info, &idx);
+            if (info == mInfo[idx] &&
+                ROBIN_HOOD_LIKELY(WKeyEqual::operator()(key, mKeyVals[idx].getFirst()))) {
+                return idx;
+            }
+            next(&info, &idx);
+        } while (info <= mInfo[idx]);
+
+        // nothing found!
+        return mMask == 0 ? 0
+                          : static_cast<size_t>(std::distance(
+                                mKeyVals, reinterpret_cast_no_cast_align_warning<Node*>(mInfo)));
+    }
+
+    void cloneData(const Table& o) {
+        Cloner<Table, IsFlat && ROBIN_HOOD_IS_TRIVIALLY_COPYABLE(Node)>()(o, *this);
+    }
+
+    // inserts a keyval that is guaranteed to be new, e.g. when the hashmap is resized.
+    // @return index where the element was created
+    size_t insert_move(Node&& keyval) {
+        // we don't retry, fail if overflowing
+        // don't need to check max num elements
+        if (0 == mMaxNumElementsAllowed && !try_increase_info()) {
+            throwOverflowError(); // impossible to reach LCOV_EXCL_LINE
+        }
+
+        size_t idx{};
+        InfoType info{};
+        keyToIdx(keyval.getFirst(), &idx, &info);
+
+        // skip forward. Use <= because we are certain that the element is not there.
+        while (info <= mInfo[idx]) {
+            idx = idx + 1;
+            info += mInfoInc;
+        }
+
+        // key not found, so we are now exactly where we want to insert it.
+        auto const insertion_idx = idx;
+        auto const insertion_info = static_cast<uint8_t>(info);
+        if (ROBIN_HOOD_UNLIKELY(insertion_info + mInfoInc > 0xFF)) {
+            mMaxNumElementsAllowed = 0;
+        }
+
+        // find an empty spot
+        while (0 != mInfo[idx]) {
+            next(&info, &idx);
+        }
+
+        auto& l = mKeyVals[insertion_idx];
+        if (idx == insertion_idx) {
+            ::new (static_cast<void*>(&l)) Node(std::move(keyval));
+        } else {
+            shiftUp(idx, insertion_idx);
+            l = std::move(keyval);
+        }
+
+        // put at empty spot
+        mInfo[insertion_idx] = insertion_info;
+
+        ++mNumElements;
+        return insertion_idx;
+    }
+
+public:
+    using iterator = Iter<false>;
+    using const_iterator = Iter<true>;
+
+    Table() noexcept(noexcept(Hash()) && noexcept(KeyEqual()))
+        : WHash()
+        , WKeyEqual() {
+        ROBIN_HOOD_TRACE(this)
+    }
+
+    // Creates an empty hash map. Nothing is allocated yet, this happens at the first insert.
+    // This tremendously speeds up ctor & dtor of a map that never receives an element. The
+    // penalty is payed at the first insert, and not before. Lookup of this empty map works
+    // because everybody points to DummyInfoByte::b. parameter bucket_count is dictated by the
+    // standard, but we can ignore it.
+    explicit Table(
+        size_t ROBIN_HOOD_UNUSED(bucket_count) /*unused*/, const Hash& h = Hash{},
+        const KeyEqual& equal = KeyEqual{}) noexcept(noexcept(Hash(h)) && noexcept(KeyEqual(equal)))
+        : WHash(h)
+        , WKeyEqual(equal) {
+        ROBIN_HOOD_TRACE(this)
+    }
+
+    template <typename Iter>
+    Table(Iter first, Iter last, size_t ROBIN_HOOD_UNUSED(bucket_count) /*unused*/ = 0,
+          const Hash& h = Hash{}, const KeyEqual& equal = KeyEqual{})
+        : WHash(h)
+        , WKeyEqual(equal) {
+        ROBIN_HOOD_TRACE(this)
+        insert(first, last);
+    }
+
+    Table(std::initializer_list<value_type> initlist,
+          size_t ROBIN_HOOD_UNUSED(bucket_count) /*unused*/ = 0, const Hash& h = Hash{},
+          const KeyEqual& equal = KeyEqual{})
+        : WHash(h)
+        , WKeyEqual(equal) {
+        ROBIN_HOOD_TRACE(this)
+        insert(initlist.begin(), initlist.end());
+    }
+
+    Table(Table&& o) noexcept
+        : WHash(std::move(static_cast<WHash&>(o)))
+        , WKeyEqual(std::move(static_cast<WKeyEqual&>(o)))
+        , DataPool(std::move(static_cast<DataPool&>(o))) {
+        ROBIN_HOOD_TRACE(this)
+        if (o.mMask) {
+            mKeyVals = std::move(o.mKeyVals);
+            mInfo = std::move(o.mInfo);
+            mNumElements = std::move(o.mNumElements);
+            mMask = std::move(o.mMask);
+            mMaxNumElementsAllowed = std::move(o.mMaxNumElementsAllowed);
+            mInfoInc = std::move(o.mInfoInc);
+            mInfoHashShift = std::move(o.mInfoHashShift);
+            // set other's mask to 0 so its destructor won't do anything
+            o.init();
+        }
+    }
+
+    Table& operator=(Table&& o) noexcept {
+        ROBIN_HOOD_TRACE(this)
+        if (&o != this) {
+            if (o.mMask) {
+                // only move stuff if the other map actually has some data
+                destroy();
+                mKeyVals = std::move(o.mKeyVals);
+                mInfo = std::move(o.mInfo);
+                mNumElements = std::move(o.mNumElements);
+                mMask = std::move(o.mMask);
+                mMaxNumElementsAllowed = std::move(o.mMaxNumElementsAllowed);
+                mInfoInc = std::move(o.mInfoInc);
+                mInfoHashShift = std::move(o.mInfoHashShift);
+                WHash::operator=(std::move(static_cast<WHash&>(o)));
+                WKeyEqual::operator=(std::move(static_cast<WKeyEqual&>(o)));
+                DataPool::operator=(std::move(static_cast<DataPool&>(o)));
+
+                o.init();
+
+            } else {
+                // nothing in the other map => just clear us.
+                clear();
+            }
+        }
+        return *this;
+    }
+
+    Table(const Table& o)
+        : WHash(static_cast<const WHash&>(o))
+        , WKeyEqual(static_cast<const WKeyEqual&>(o))
+        , DataPool(static_cast<const DataPool&>(o)) {
+        ROBIN_HOOD_TRACE(this)
+        if (!o.empty()) {
+            // not empty: create an exact copy. it is also possible to just iterate through all
+            // elements and insert them, but copying is probably faster.
+
+            auto const numElementsWithBuffer = calcNumElementsWithBuffer(o.mMask + 1);
+            auto const numBytesTotal = calcNumBytesTotal(numElementsWithBuffer);
+
+            ROBIN_HOOD_LOG("std::malloc " << numBytesTotal << " = calcNumBytesTotal("
+                                          << numElementsWithBuffer << ")")
+            mKeyVals = static_cast<Node*>(
+                detail::assertNotNull<std::bad_alloc>(std::malloc(numBytesTotal)));
+            // no need for calloc because clonData does memcpy
+            mInfo = reinterpret_cast<uint8_t*>(mKeyVals + numElementsWithBuffer);
+            mNumElements = o.mNumElements;
+            mMask = o.mMask;
+            mMaxNumElementsAllowed = o.mMaxNumElementsAllowed;
+            mInfoInc = o.mInfoInc;
+            mInfoHashShift = o.mInfoHashShift;
+            cloneData(o);
+        }
+    }
+
+    // Creates a copy of the given map. Copy constructor of each entry is used.
+    // Not sure why clang-tidy thinks this doesn't handle self assignment, it does
+    // NOLINTNEXTLINE(bugprone-unhandled-self-assignment,cert-oop54-cpp)
+    Table& operator=(Table const& o) {
+        ROBIN_HOOD_TRACE(this)
+        if (&o == this) {
+            // prevent assigning of itself
+            return *this;
+        }
+
+        // we keep using the old allocator and not assign the new one, because we want to keep
+        // the memory available. when it is the same size.
+        if (o.empty()) {
+            if (0 == mMask) {
+                // nothing to do, we are empty too
+                return *this;
+            }
+
+            // not empty: destroy what we have there
+            // clear also resets mInfo to 0, that's sometimes not necessary.
+            destroy();
+            init();
+            WHash::operator=(static_cast<const WHash&>(o));
+            WKeyEqual::operator=(static_cast<const WKeyEqual&>(o));
+            DataPool::operator=(static_cast<DataPool const&>(o));
+
+            return *this;
+        }
+
+        // clean up old stuff
+        Destroyer<Self, IsFlat && std::is_trivially_destructible<Node>::value>{}.nodes(*this);
+
+        if (mMask != o.mMask) {
+            // no luck: we don't have the same array size allocated, so we need to realloc.
+            if (0 != mMask) {
+                // only deallocate if we actually have data!
+                ROBIN_HOOD_LOG("std::free")
+                std::free(mKeyVals);
+            }
+
+            auto const numElementsWithBuffer = calcNumElementsWithBuffer(o.mMask + 1);
+            auto const numBytesTotal = calcNumBytesTotal(numElementsWithBuffer);
+            ROBIN_HOOD_LOG("std::malloc " << numBytesTotal << " = calcNumBytesTotal("
+                                          << numElementsWithBuffer << ")")
+            mKeyVals = static_cast<Node*>(
+                detail::assertNotNull<std::bad_alloc>(std::malloc(numBytesTotal)));
+
+            // no need for calloc here because cloneData performs a memcpy.
+            mInfo = reinterpret_cast<uint8_t*>(mKeyVals + numElementsWithBuffer);
+            // sentinel is set in cloneData
+        }
+        WHash::operator=(static_cast<const WHash&>(o));
+        WKeyEqual::operator=(static_cast<const WKeyEqual&>(o));
+        DataPool::operator=(static_cast<DataPool const&>(o));
+        mNumElements = o.mNumElements;
+        mMask = o.mMask;
+        mMaxNumElementsAllowed = o.mMaxNumElementsAllowed;
+        mInfoInc = o.mInfoInc;
+        mInfoHashShift = o.mInfoHashShift;
+        cloneData(o);
+
+        return *this;
+    }
+
+    // Swaps everything between the two maps.
+    void swap(Table& o) {
+        ROBIN_HOOD_TRACE(this)
+        using std::swap;
+        swap(o, *this);
+    }
+
+    // Clears all data, without resizing.
+    void clear() {
+        ROBIN_HOOD_TRACE(this)
+        if (empty()) {
+            // don't do anything! also important because we don't want to write to
+            // DummyInfoByte::b, even though we would just write 0 to it.
+            return;
+        }
+
+        Destroyer<Self, IsFlat && std::is_trivially_destructible<Node>::value>{}.nodes(*this);
+
+        auto const numElementsWithBuffer = calcNumElementsWithBuffer(mMask + 1);
+        // clear everything, then set the sentinel again
+        uint8_t const z = 0;
+        std::fill(mInfo, mInfo + calcNumBytesInfo(numElementsWithBuffer), z);
+        mInfo[numElementsWithBuffer] = 1;
+
+        mInfoInc = InitialInfoInc;
+        mInfoHashShift = InitialInfoHashShift;
+    }
+
+    // Destroys the map and all it's contents.
+    ~Table() {
+        ROBIN_HOOD_TRACE(this)
+        destroy();
+    }
+
+    // Checks if both tables contain the same entries. Order is irrelevant.
+    bool operator==(const Table& other) const {
+        ROBIN_HOOD_TRACE(this)
+        if (other.size() != size()) {
+            return false;
+        }
+        for (auto const& otherEntry : other) {
+            if (!has(otherEntry)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    bool operator!=(const Table& other) const {
+        ROBIN_HOOD_TRACE(this)
+        return !operator==(other);
+    }
+
+    template <typename Q = mapped_type>
+    typename std::enable_if<!std::is_void<Q>::value, Q&>::type operator[](const key_type& key) {
+        ROBIN_HOOD_TRACE(this)
+        return doCreateByKey(key);
+    }
+
+    template <typename Q = mapped_type>
+    typename std::enable_if<!std::is_void<Q>::value, Q&>::type operator[](key_type&& key) {
+        ROBIN_HOOD_TRACE(this)
+        return doCreateByKey(std::move(key));
+    }
+
+    template <typename Iter>
+    void insert(Iter first, Iter last) {
+        for (; first != last; ++first) {
+            // value_type ctor needed because this might be called with std::pair's
+            insert(value_type(*first));
+        }
+    }
+
+    template <typename... Args>
+    std::pair<iterator, bool> emplace(Args&&... args) {
+        ROBIN_HOOD_TRACE(this)
+        Node n{*this, std::forward<Args>(args)...};
+        auto r = doInsert(std::move(n));
+        if (!r.second) {
+            // insertion not possible: destroy node
+            // NOLINTNEXTLINE(bugprone-use-after-move)
+            n.destroy(*this);
+        }
+        return r;
+    }
+
+    template <typename... Args>
+    std::pair<iterator, bool> try_emplace(const key_type& key, Args&&... args) {
+        return try_emplace_impl(key, std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    std::pair<iterator, bool> try_emplace(key_type&& key, Args&&... args) {
+        return try_emplace_impl(std::move(key), std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    std::pair<iterator, bool> try_emplace(const_iterator hint, const key_type& key,
+                                          Args&&... args) {
+        (void)hint;
+        return try_emplace_impl(key, std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    std::pair<iterator, bool> try_emplace(const_iterator hint, key_type&& key, Args&&... args) {
+        (void)hint;
+        return try_emplace_impl(std::move(key), std::forward<Args>(args)...);
+    }
+
+    template <typename Mapped>
+    std::pair<iterator, bool> insert_or_assign(const key_type& key, Mapped&& obj) {
+        return insert_or_assign_impl(key, std::forward<Mapped>(obj));
+    }
+
+    template <typename Mapped>
+    std::pair<iterator, bool> insert_or_assign(key_type&& key, Mapped&& obj) {
+        return insert_or_assign_impl(std::move(key), std::forward<Mapped>(obj));
+    }
+
+    template <typename Mapped>
+    std::pair<iterator, bool> insert_or_assign(const_iterator hint, const key_type& key,
+                                               Mapped&& obj) {
+        (void)hint;
+        return insert_or_assign_impl(key, std::forward<Mapped>(obj));
+    }
+
+    template <typename Mapped>
+    std::pair<iterator, bool> insert_or_assign(const_iterator hint, key_type&& key, Mapped&& obj) {
+        (void)hint;
+        return insert_or_assign_impl(std::move(key), std::forward<Mapped>(obj));
+    }
+
+    std::pair<iterator, bool> insert(const value_type& keyval) {
+        ROBIN_HOOD_TRACE(this)
+        return doInsert(keyval);
+    }
+
+    std::pair<iterator, bool> insert(value_type&& keyval) {
+        return doInsert(std::move(keyval));
+    }
+
+    // Returns 1 if key is found, 0 otherwise.
+    size_t count(const key_type& key) const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        auto kv = mKeyVals + findIdx(key);
+        if (kv != reinterpret_cast_no_cast_align_warning<Node*>(mInfo)) {
+            return 1;
+        }
+        return 0;
+    }
+
+    template <typename OtherKey, typename Self_ = Self>
+    // NOLINTNEXTLINE(modernize-use-nodiscard)
+    typename std::enable_if<Self_::is_transparent, size_t>::type count(const OtherKey& key) const {
+        ROBIN_HOOD_TRACE(this)
+        auto kv = mKeyVals + findIdx(key);
+        if (kv != reinterpret_cast_no_cast_align_warning<Node*>(mInfo)) {
+            return 1;
+        }
+        return 0;
+    }
+
+    bool contains(const key_type& key) const { // NOLINT(modernize-use-nodiscard)
+        return 1U == count(key);
+    }
+
+    template <typename OtherKey, typename Self_ = Self>
+    // NOLINTNEXTLINE(modernize-use-nodiscard)
+    typename std::enable_if<Self_::is_transparent, bool>::type contains(const OtherKey& key) const {
+        return 1U == count(key);
+    }
+
+    // Returns a reference to the value found for key.
+    // Throws std::out_of_range if element cannot be found
+    template <typename Q = mapped_type>
+    // NOLINTNEXTLINE(modernize-use-nodiscard)
+    typename std::enable_if<!std::is_void<Q>::value, Q&>::type at(key_type const& key) {
+        ROBIN_HOOD_TRACE(this)
+        auto kv = mKeyVals + findIdx(key);
+        if (kv == reinterpret_cast_no_cast_align_warning<Node*>(mInfo)) {
+            doThrow<std::out_of_range>("key not found");
+        }
+        return kv->getSecond();
+    }
+
+    // Returns a reference to the value found for key.
+    // Throws std::out_of_range if element cannot be found
+    template <typename Q = mapped_type>
+    // NOLINTNEXTLINE(modernize-use-nodiscard)
+    typename std::enable_if<!std::is_void<Q>::value, Q const&>::type at(key_type const& key) const {
+        ROBIN_HOOD_TRACE(this)
+        auto kv = mKeyVals + findIdx(key);
+        if (kv == reinterpret_cast_no_cast_align_warning<Node*>(mInfo)) {
+            doThrow<std::out_of_range>("key not found");
+        }
+        return kv->getSecond();
+    }
+
+    const_iterator find(const key_type& key) const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return const_iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    template <typename OtherKey>
+    const_iterator find(const OtherKey& key, is_transparent_tag /*unused*/) const {
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return const_iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    template <typename OtherKey, typename Self_ = Self>
+    typename std::enable_if<Self_::is_transparent, // NOLINT(modernize-use-nodiscard)
+                            const_iterator>::type  // NOLINT(modernize-use-nodiscard)
+    find(const OtherKey& key) const {              // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return const_iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    iterator find(const key_type& key) {
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    template <typename OtherKey>
+    iterator find(const OtherKey& key, is_transparent_tag /*unused*/) {
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    template <typename OtherKey, typename Self_ = Self>
+    typename std::enable_if<Self_::is_transparent, iterator>::type find(const OtherKey& key) {
+        ROBIN_HOOD_TRACE(this)
+        const size_t idx = findIdx(key);
+        return iterator{mKeyVals + idx, mInfo + idx};
+    }
+
+    iterator begin() {
+        ROBIN_HOOD_TRACE(this)
+        if (empty()) {
+            return end();
+        }
+        return iterator(mKeyVals, mInfo, fast_forward_tag{});
+    }
+    const_iterator begin() const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return cbegin();
+    }
+    const_iterator cbegin() const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        if (empty()) {
+            return cend();
+        }
+        return const_iterator(mKeyVals, mInfo, fast_forward_tag{});
+    }
+
+    iterator end() {
+        ROBIN_HOOD_TRACE(this)
+        // no need to supply valid info pointer: end() must not be dereferenced, and only node
+        // pointer is compared.
+        return iterator{reinterpret_cast_no_cast_align_warning<Node*>(mInfo), nullptr};
+    }
+    const_iterator end() const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return cend();
+    }
+    const_iterator cend() const { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return const_iterator{reinterpret_cast_no_cast_align_warning<Node*>(mInfo), nullptr};
+    }
+
+    iterator erase(const_iterator pos) {
+        ROBIN_HOOD_TRACE(this)
+        // its safe to perform const cast here
+        // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
+        return erase(iterator{const_cast<Node*>(pos.mKeyVals), const_cast<uint8_t*>(pos.mInfo)});
+    }
+
+    // Erases element at pos, returns iterator to the next element.
+    iterator erase(iterator pos) {
+        ROBIN_HOOD_TRACE(this)
+        // we assume that pos always points to a valid entry, and not end().
+        auto const idx = static_cast<size_t>(pos.mKeyVals - mKeyVals);
+
+        shiftDown(idx);
+        --mNumElements;
+
+        if (*pos.mInfo) {
+            // we've backward shifted, return this again
+            return pos;
+        }
+
+        // no backward shift, return next element
+        return ++pos;
+    }
+
+    size_t erase(const key_type& key) {
+        ROBIN_HOOD_TRACE(this)
+        size_t idx{};
+        InfoType info{};
+        keyToIdx(key, &idx, &info);
+
+        // check while info matches with the source idx
+        do {
+            if (info == mInfo[idx] && WKeyEqual::operator()(key, mKeyVals[idx].getFirst())) {
+                shiftDown(idx);
+                --mNumElements;
+                return 1;
+            }
+            next(&info, &idx);
+        } while (info <= mInfo[idx]);
+
+        // nothing found to delete
+        return 0;
+    }
+
+    // reserves space for the specified number of elements. Makes sure the old data fits.
+    // exactly the same as reserve(c).
+    void rehash(size_t c) {
+        // forces a reserve
+        reserve(c, true);
+    }
+
+    // reserves space for the specified number of elements. Makes sure the old data fits.
+    // Exactly the same as rehash(c). Use rehash(0) to shrink to fit.
+    void reserve(size_t c) {
+        // reserve, but don't force rehash
+        reserve(c, false);
+    }
+
+    size_type size() const noexcept { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return mNumElements;
+    }
+
+    size_type max_size() const noexcept { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return static_cast<size_type>(-1);
+    }
+
+    ROBIN_HOOD(NODISCARD) bool empty() const noexcept {
+        ROBIN_HOOD_TRACE(this)
+        return 0 == mNumElements;
+    }
+
+    float max_load_factor() const noexcept { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return MaxLoadFactor100 / 100.0F;
+    }
+
+    // Average number of elements per bucket. Since we allow only 1 per bucket
+    float load_factor() const noexcept { // NOLINT(modernize-use-nodiscard)
+        ROBIN_HOOD_TRACE(this)
+        return static_cast<float>(size()) / static_cast<float>(mMask + 1);
+    }
+
+    ROBIN_HOOD(NODISCARD) size_t mask() const noexcept {
+        ROBIN_HOOD_TRACE(this)
+        return mMask;
+    }
+
+    ROBIN_HOOD(NODISCARD) size_t calcMaxNumElementsAllowed(size_t maxElements) const noexcept {
+        if (ROBIN_HOOD_LIKELY(maxElements <= (std::numeric_limits<size_t>::max)() / 100)) {
+            return maxElements * MaxLoadFactor100 / 100;
+        }
+
+        // we might be a bit inprecise, but since maxElements is quite large that doesn't matter
+        return (maxElements / 100) * MaxLoadFactor100;
+    }
+
+    ROBIN_HOOD(NODISCARD) size_t calcNumBytesInfo(size_t numElements) const noexcept {
+        // we add a uint64_t, which houses the sentinel (first byte) and padding so we can load
+        // 64bit types.
+        return numElements + sizeof(uint64_t);
+    }
+
+    ROBIN_HOOD(NODISCARD)
+    size_t calcNumElementsWithBuffer(size_t numElements) const noexcept {
+        auto maxNumElementsAllowed = calcMaxNumElementsAllowed(numElements);
+        return numElements + (std::min)(maxNumElementsAllowed, (static_cast<size_t>(0xFF)));
+    }
+
+    // calculation only allowed for 2^n values
+    ROBIN_HOOD(NODISCARD) size_t calcNumBytesTotal(size_t numElements) const {
+#if ROBIN_HOOD(BITNESS) == 64
+        return numElements * sizeof(Node) + calcNumBytesInfo(numElements);
+#else
+        // make sure we're doing 64bit operations, so we are at least safe against 32bit overflows.
+        auto const ne = static_cast<uint64_t>(numElements);
+        auto const s = static_cast<uint64_t>(sizeof(Node));
+        auto const infos = static_cast<uint64_t>(calcNumBytesInfo(numElements));
+
+        auto const total64 = ne * s + infos;
+        auto const total = static_cast<size_t>(total64);
+
+        if (ROBIN_HOOD_UNLIKELY(static_cast<uint64_t>(total) != total64)) {
+            throwOverflowError();
+        }
+        return total;
+#endif
+    }
+
+private:
+    template <typename Q = mapped_type>
+    ROBIN_HOOD(NODISCARD)
+    typename std::enable_if<!std::is_void<Q>::value, bool>::type has(const value_type& e) const {
+        ROBIN_HOOD_TRACE(this)
+        auto it = find(e.first);
+        return it != end() && it->second == e.second;
+    }
+
+    template <typename Q = mapped_type>
+    ROBIN_HOOD(NODISCARD)
+    typename std::enable_if<std::is_void<Q>::value, bool>::type has(const value_type& e) const {
+        ROBIN_HOOD_TRACE(this)
+        return find(e) != end();
+    }
+
+    void reserve(size_t c, bool forceRehash) {
+        ROBIN_HOOD_TRACE(this)
+        auto const minElementsAllowed = (std::max)(c, mNumElements);
+        auto newSize = InitialNumElements;
+        while (calcMaxNumElementsAllowed(newSize) < minElementsAllowed && newSize != 0) {
+            newSize *= 2;
+        }
+        if (ROBIN_HOOD_UNLIKELY(newSize == 0)) {
+            throwOverflowError();
+        }
+
+        ROBIN_HOOD_LOG("newSize > mMask + 1: " << newSize << " > " << mMask << " + 1")
+
+        // only actually do anything when the new size is bigger than the old one. This prevents to
+        // continuously allocate for each reserve() call.
+        if (forceRehash || newSize > mMask + 1) {
+            rehashPowerOfTwo(newSize);
+        }
+    }
+
+    // reserves space for at least the specified number of elements.
+    // only works if numBuckets if power of two
+    void rehashPowerOfTwo(size_t numBuckets) {
+        ROBIN_HOOD_TRACE(this)
+
+        Node* const oldKeyVals = mKeyVals;
+        uint8_t const* const oldInfo = mInfo;
+
+        const size_t oldMaxElementsWithBuffer = calcNumElementsWithBuffer(mMask + 1);
+
+        // resize operation: move stuff
+        init_data(numBuckets);
+        if (oldMaxElementsWithBuffer > 1) {
+            for (size_t i = 0; i < oldMaxElementsWithBuffer; ++i) {
+                if (oldInfo[i] != 0) {
+                    insert_move(std::move(oldKeyVals[i]));
+                    // destroy the node but DON'T destroy the data.
+                    oldKeyVals[i].~Node();
+                }
+            }
+
+            // this check is not necessary as it's guarded by the previous if, but it helps silence
+            // g++'s overeager "attempt to free a non-heap object 'map'
+            // [-Werror=free-nonheap-object]" warning.
+            if (oldKeyVals != reinterpret_cast_no_cast_align_warning<Node*>(&mMask)) {
+                // don't destroy old data: put it into the pool instead
+                DataPool::addOrFree(oldKeyVals, calcNumBytesTotal(oldMaxElementsWithBuffer));
+            }
+        }
+    }
+
+    ROBIN_HOOD(NOINLINE) void throwOverflowError() const {
+#if ROBIN_HOOD(HAS_EXCEPTIONS)
+        throw std::overflow_error("robin_hood::map overflow");
+#else
+        abort();
+#endif
+    }
+
+    template <typename OtherKey, typename... Args>
+    std::pair<iterator, bool> try_emplace_impl(OtherKey&& key, Args&&... args) {
+        ROBIN_HOOD_TRACE(this)
+        auto it = find(key);
+        if (it == end()) {
+            return emplace(std::piecewise_construct,
+                           std::forward_as_tuple(std::forward<OtherKey>(key)),
+                           std::forward_as_tuple(std::forward<Args>(args)...));
+        }
+        return {it, false};
+    }
+
+    template <typename OtherKey, typename Mapped>
+    std::pair<iterator, bool> insert_or_assign_impl(OtherKey&& key, Mapped&& obj) {
+        ROBIN_HOOD_TRACE(this)
+        auto it = find(key);
+        if (it == end()) {
+            return emplace(std::forward<OtherKey>(key), std::forward<Mapped>(obj));
+        }
+        it->second = std::forward<Mapped>(obj);
+        return {it, false};
+    }
+
+    void init_data(size_t max_elements) {
+        mNumElements = 0;
+        mMask = max_elements - 1;
+        mMaxNumElementsAllowed = calcMaxNumElementsAllowed(max_elements);
+
+        auto const numElementsWithBuffer = calcNumElementsWithBuffer(max_elements);
+
+        // calloc also zeroes everything
+        auto const numBytesTotal = calcNumBytesTotal(numElementsWithBuffer);
+        ROBIN_HOOD_LOG("std::calloc " << numBytesTotal << " = calcNumBytesTotal("
+                                      << numElementsWithBuffer << ")")
+        mKeyVals = reinterpret_cast<Node*>(
+            detail::assertNotNull<std::bad_alloc>(std::calloc(1, numBytesTotal)));
+        mInfo = reinterpret_cast<uint8_t*>(mKeyVals + numElementsWithBuffer);
+
+        // set sentinel
+        mInfo[numElementsWithBuffer] = 1;
+
+        mInfoInc = InitialInfoInc;
+        mInfoHashShift = InitialInfoHashShift;
+    }
+
+    template <typename Arg, typename Q = mapped_type>
+    typename std::enable_if<!std::is_void<Q>::value, Q&>::type doCreateByKey(Arg&& key) {
+        while (true) {
+            size_t idx{};
+            InfoType info{};
+            keyToIdx(key, &idx, &info);
+            nextWhileLess(&info, &idx);
+
+            // while we potentially have a match. Can't do a do-while here because when mInfo is
+            // 0 we don't want to skip forward
+            while (info == mInfo[idx]) {
+                if (WKeyEqual::operator()(key, mKeyVals[idx].getFirst())) {
+                    // key already exists, do not insert.
+                    return mKeyVals[idx].getSecond();
+                }
+                next(&info, &idx);
+            }
+
+            // unlikely that this evaluates to true
+            if (ROBIN_HOOD_UNLIKELY(mNumElements >= mMaxNumElementsAllowed)) {
+                increase_size();
+                continue;
+            }
+
+            // key not found, so we are now exactly where we want to insert it.
+            auto const insertion_idx = idx;
+            auto const insertion_info = info;
+            if (ROBIN_HOOD_UNLIKELY(insertion_info + mInfoInc > 0xFF)) {
+                mMaxNumElementsAllowed = 0;
+            }
+
+            // find an empty spot
+            while (0 != mInfo[idx]) {
+                next(&info, &idx);
+            }
+
+            auto& l = mKeyVals[insertion_idx];
+            if (idx == insertion_idx) {
+                // put at empty spot. This forwards all arguments into the node where the object
+                // is constructed exactly where it is needed.
+                ::new (static_cast<void*>(&l))
+                    Node(*this, std::piecewise_construct,
+                         std::forward_as_tuple(std::forward<Arg>(key)), std::forward_as_tuple());
+            } else {
+                shiftUp(idx, insertion_idx);
+                l = Node(*this, std::piecewise_construct,
+                         std::forward_as_tuple(std::forward<Arg>(key)), std::forward_as_tuple());
+            }
+
+            // mKeyVals[idx].getFirst() = std::move(key);
+            mInfo[insertion_idx] = static_cast<uint8_t>(insertion_info);
+
+            ++mNumElements;
+            return mKeyVals[insertion_idx].getSecond();
+        }
+    }
+
+    // This is exactly the same code as operator[], except for the return values
+    template <typename Arg>
+    std::pair<iterator, bool> doInsert(Arg&& keyval) {
+        while (true) {
+            size_t idx{};
+            InfoType info{};
+            keyToIdx(getFirstConst(keyval), &idx, &info);
+            nextWhileLess(&info, &idx);
+
+            // while we potentially have a match
+            while (info == mInfo[idx]) {
+                if (WKeyEqual::operator()(getFirstConst(keyval), mKeyVals[idx].getFirst())) {
+                    // key already exists, do NOT insert.
+                    // see http://en.cppreference.com/w/cpp/container/unordered_map/insert
+                    return std::make_pair<iterator, bool>(iterator(mKeyVals + idx, mInfo + idx),
+                                                          false);
+                }
+                next(&info, &idx);
+            }
+
+            // unlikely that this evaluates to true
+            if (ROBIN_HOOD_UNLIKELY(mNumElements >= mMaxNumElementsAllowed)) {
+                increase_size();
+                continue;
+            }
+
+            // key not found, so we are now exactly where we want to insert it.
+            auto const insertion_idx = idx;
+            auto const insertion_info = info;
+            if (ROBIN_HOOD_UNLIKELY(insertion_info + mInfoInc > 0xFF)) {
+                mMaxNumElementsAllowed = 0;
+            }
+
+            // find an empty spot
+            while (0 != mInfo[idx]) {
+                next(&info, &idx);
+            }
+
+            auto& l = mKeyVals[insertion_idx];
+            if (idx == insertion_idx) {
+                ::new (static_cast<void*>(&l)) Node(*this, std::forward<Arg>(keyval));
+            } else {
+                shiftUp(idx, insertion_idx);
+                l = Node(*this, std::forward<Arg>(keyval));
+            }
+
+            // put at empty spot
+            mInfo[insertion_idx] = static_cast<uint8_t>(insertion_info);
+
+            ++mNumElements;
+            return std::make_pair(iterator(mKeyVals + insertion_idx, mInfo + insertion_idx), true);
+        }
+    }
+
+    bool try_increase_info() {
+        ROBIN_HOOD_LOG("mInfoInc=" << mInfoInc << ", numElements=" << mNumElements
+                                   << ", maxNumElementsAllowed="
+                                   << calcMaxNumElementsAllowed(mMask + 1))
+        if (mInfoInc <= 2) {
+            // need to be > 2 so that shift works (otherwise undefined behavior!)
+            return false;
+        }
+        // we got space left, try to make info smaller
+        mInfoInc = static_cast<uint8_t>(mInfoInc >> 1U);
+
+        // remove one bit of the hash, leaving more space for the distance info.
+        // This is extremely fast because we can operate on 8 bytes at once.
+        ++mInfoHashShift;
+        auto const numElementsWithBuffer = calcNumElementsWithBuffer(mMask + 1);
+
+        for (size_t i = 0; i < numElementsWithBuffer; i += 8) {
+            auto val = unaligned_load<uint64_t>(mInfo + i);
+            val = (val >> 1U) & UINT64_C(0x7f7f7f7f7f7f7f7f);
+            std::memcpy(mInfo + i, &val, sizeof(val));
+        }
+        // update sentinel, which might have been cleared out!
+        mInfo[numElementsWithBuffer] = 1;
+
+        mMaxNumElementsAllowed = calcMaxNumElementsAllowed(mMask + 1);
+        return true;
+    }
+
+    void increase_size() {
+        // nothing allocated yet? just allocate InitialNumElements
+        if (0 == mMask) {
+            init_data(InitialNumElements);
+            return;
+        }
+
+        auto const maxNumElementsAllowed = calcMaxNumElementsAllowed(mMask + 1);
+        if (mNumElements < maxNumElementsAllowed && try_increase_info()) {
+            return;
+        }
+
+        ROBIN_HOOD_LOG("mNumElements=" << mNumElements << ", maxNumElementsAllowed="
+                                       << maxNumElementsAllowed << ", load="
+                                       << (static_cast<double>(mNumElements) * 100.0 /
+                                           (static_cast<double>(mMask) + 1)))
+        // it seems we have a really bad hash function! don't try to resize again
+        if (mNumElements * 2 < calcMaxNumElementsAllowed(mMask + 1)) {
+            throwOverflowError();
+        }
+
+        rehashPowerOfTwo((mMask + 1) * 2);
+    }
+
+    void destroy() {
+        if (0 == mMask) {
+            // don't deallocate!
+            return;
+        }
+
+        Destroyer<Self, IsFlat && std::is_trivially_destructible<Node>::value>{}
+            .nodesDoNotDeallocate(*this);
+
+        // This protection against not deleting mMask shouldn't be needed as it's sufficiently
+        // protected with the 0==mMask check, but I have this anyways because g++ 7 otherwise
+        // reports a compile error: attempt to free a non-heap object 'fm'
+        // [-Werror=free-nonheap-object]
+        if (mKeyVals != reinterpret_cast_no_cast_align_warning<Node*>(&mMask)) {
+            ROBIN_HOOD_LOG("std::free")
+            std::free(mKeyVals);
+        }
+    }
+
+    void init() noexcept {
+        mKeyVals = reinterpret_cast_no_cast_align_warning<Node*>(&mMask);
+        mInfo = reinterpret_cast<uint8_t*>(&mMask);
+        mNumElements = 0;
+        mMask = 0;
+        mMaxNumElementsAllowed = 0;
+        mInfoInc = InitialInfoInc;
+        mInfoHashShift = InitialInfoHashShift;
+    }
+
+    // members are sorted so no padding occurs
+    Node* mKeyVals = reinterpret_cast_no_cast_align_warning<Node*>(&mMask); // 8 byte  8
+    uint8_t* mInfo = reinterpret_cast<uint8_t*>(&mMask);                    // 8 byte 16
+    size_t mNumElements = 0;                                                // 8 byte 24
+    size_t mMask = 0;                                                       // 8 byte 32
+    size_t mMaxNumElementsAllowed = 0;                                      // 8 byte 40
+    InfoType mInfoInc = InitialInfoInc;                                     // 4 byte 44
+    InfoType mInfoHashShift = InitialInfoHashShift;                         // 4 byte 48
+                                                    // 16 byte 56 if NodeAllocator
+};
+
+} // namespace detail
+
+// map
+
+template <typename Key, typename T, typename Hash = hash<Key>,
+          typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+using unordered_flat_map = detail::Table<true, MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+template <typename Key, typename T, typename Hash = hash<Key>,
+          typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+using unordered_node_map = detail::Table<false, MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+template <typename Key, typename T, typename Hash = hash<Key>,
+          typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+using unordered_map =
+    detail::Table<sizeof(robin_hood::pair<Key, T>) <= sizeof(size_t) * 6 &&
+                      std::is_nothrow_move_constructible<robin_hood::pair<Key, T>>::value &&
+                      std::is_nothrow_move_assignable<robin_hood::pair<Key, T>>::value,
+                  MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+// set
+
+template <typename Key, typename Hash = hash<Key>, typename KeyEqual = std::equal_to<Key>,
+          size_t MaxLoadFactor100 = 80>
+using unordered_flat_set = detail::Table<true, MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+template <typename Key, typename Hash = hash<Key>, typename KeyEqual = std::equal_to<Key>,
+          size_t MaxLoadFactor100 = 80>
+using unordered_node_set = detail::Table<false, MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+template <typename Key, typename Hash = hash<Key>, typename KeyEqual = std::equal_to<Key>,
+          size_t MaxLoadFactor100 = 80>
+using unordered_set = detail::Table<sizeof(Key) <= sizeof(size_t) * 6 &&
+                                        std::is_nothrow_move_constructible<Key>::value &&
+                                        std::is_nothrow_move_assignable<Key>::value,
+                                    MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+} // namespace robin_hood
+
+#endif
diff --git a/Fltk/helpWindow.cpp b/Fltk/helpWindow.cpp
index 911ba489a4fc6aa1c97a78d738da7a9b6ee74e0a..fc6a8ca3f4c8fc327e6bbde0a94811ba7bdd31ac 100644
--- a/Fltk/helpWindow.cpp
+++ b/Fltk/helpWindow.cpp
@@ -462,7 +462,8 @@ helpWindow::helpWindow()
     browser->textsize(FL_NORMAL_SIZE - 2);
     browser->type(FL_MULTI_BROWSER);
     browser->callback(browser_cb);
-    browser->tooltip("Double-click to edit value");
+    browser->tooltip("Double-click to edit value; selected lines are copied "
+                     "to the clipboard");
 
     {
       Fl_Group *g = new Fl_Group(0, height - BH - WB, width, BH);
diff --git a/Fltk/messageBrowser.h b/Fltk/messageBrowser.h
index c5c21203b66da2edda5c314a784347ef6b456577..6bad75f06c25f9955791512cca50d5577e4c7667 100644
--- a/Fltk/messageBrowser.h
+++ b/Fltk/messageBrowser.h
@@ -68,6 +68,7 @@ public:
     _browser->textfont(FL_SCREEN);
 #endif
     _browser->type(FL_MULTI_BROWSER);
+    _browser->tooltip("Selected lines are copied to the clipboard");
     _browser->end();
     end();
     resizable(_browser);
diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp
index 318324064edd2bb64ae52a1f0fe370b0803315fe..353c56bc6ce635cc144cc2fbb43319b9f66c4985 100644
--- a/Fltk/optionWindow.cpp
+++ b/Fltk/optionWindow.cpp
@@ -581,9 +581,9 @@ static void mesh_options_ok_cb(Fl_Widget *w, void *data)
                   (o->mesh.choice[2]->value() == 3) ? ALGO_2D_FRONTAL :
                   (o->mesh.choice[2]->value() == 4) ? ALGO_2D_BAMG :
                   (o->mesh.choice[2]->value() == 5) ? ALGO_2D_FRONTAL_QUAD :
-                  (o->mesh.choice[2]->value() == 6) ? ALGO_2D_PACK_PRLGRMS :
+                  (o->mesh.choice[2]->value() == 6) ? ALGO_2D_QUAD_QUASI_STRUCT :
                   (o->mesh.choice[2]->value() == 7) ? ALGO_2D_INITIAL_ONLY :
-                                                      ALGO_2D_AUTO);
+                  ALGO_2D_AUTO);
   opt_mesh_algo3d(0, GMSH_SET,
                   (o->mesh.choice[3]->value() == 1) ? ALGO_3D_FRONTAL :
                   (o->mesh.choice[3]->value() == 2) ? ALGO_3D_HXT :
@@ -2415,8 +2415,7 @@ optionWindow::optionWindow(int deltaFontSize)
         {"Frontal-Delaunay", 0, nullptr, nullptr},
         {"BAMG (experimental)", 0, nullptr, nullptr},
         {"Frontal-Delaunay for Quads (experimental)", 0, nullptr, nullptr},
-        {"Packing of Parallelograms (experimental, planar only)", 0, nullptr,
-         nullptr},
+        {"Quasi-structured quad (experimental)", 0, nullptr, nullptr},
         {"Initial Mesh Only (no node insertion)", 0, nullptr, nullptr},
         {nullptr}};
       static Fl_Menu_Item menu_3d_algo[] = {
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index d5a617ef46427d9171b7f821eb39c6a2bf12f540..35c6f99caa397a1efdef944ae1166b9a560b86c4 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -345,6 +345,8 @@ std::string GEdge::getAdditionalInfoString(bool multline)
         sstream << ", bump " << meshAttributes.coeffTransfinite;
       else if(std::abs(type) == 3)
         sstream << ", beta " << meshAttributes.coeffTransfinite;
+      else if(std::abs(type) == 4)
+        sstream << ", sizemap " << meshAttributes.coeffTransfinite;
     }
     if(meshAttributes.extrude && meshAttributes.extrude->mesh.ExtrudeMesh)
       sstream << " extruded";
@@ -395,8 +397,12 @@ void GEdge::writeGEO(FILE *fp)
         fprintf(fp, " Using Progression ");
       else if(std::abs(meshAttributes.typeTransfinite) == 2)
         fprintf(fp, " Using Bump ");
-      else
+      else if(std::abs(meshAttributes.typeTransfinite) == 3)
         fprintf(fp, " Using Beta ");
+      else if(std::abs(meshAttributes.typeTransfinite) == 4)
+        fprintf(fp, " Using Sizemap ");
+      else
+        fprintf(fp, " Using Unknown ");
       fprintf(fp, "%g", meshAttributes.coeffTransfinite);
     }
     fprintf(fp, ";\n");
diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 621006ff7eeaee73e4381b43bae7d533b18c7e95..1efb5b5714ed2eda4ace32a096b1ca239f37c42b 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -26,6 +26,11 @@
 #include "meshGFace.h"
 #include "meshGFaceOptimize.h"
 #include "BackgroundMeshTools.h"
+#if 0
+// TEST
+#include "meshTriangulation.h"
+// TEST
+#endif
 #endif
 
 #if defined(HAVE_ALGLIB)
@@ -1080,7 +1085,7 @@ void GFace::XYZtoUV(double X, double Y, double Z, double &U, double &V,
   if(!onSurface) return;
 
   if(relax < 1.e-6)
-    Msg::Error("Could not converge: surface mesh will be wrong");
+    Msg::Error("Inverse surface mapping could not converge");
   else {
     Msg::Info("point %g %g %g : Relaxation factor = %g", X, Y, Z, 0.75 * relax);
     XYZtoUV(X, Y, Z, U, V, 0.75 * relax);
@@ -1636,6 +1641,11 @@ void GFace::mesh(bool verbose)
   if(compound.size())
     meshAttributes.meshSizeFactor = CTX::instance()->mesh.compoundLcFactor;
 
+    // FIXME TEST
+#if 0
+  GFaceInitialMesh (tag());
+#endif
+
   meshGFace mesher;
   mesher(this, verbose);
 
diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index fdda0dbffdd9270d09442c16e2b04de93c968d81..365f3adc0008f311afb8260860fbda33090c591a 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -2320,12 +2320,14 @@ void GModel::_storePhysicalTagsInEntities(
     }
 
     if(ge) {
-      auto it2 = it->second.begin();
-      for(; it2 != it->second.end(); ++it2) {
+      for(auto it2 = it->second.begin(); it2 != it->second.end(); ++it2) {
         if(std::find(ge->physicals.begin(), ge->physicals.end(), it2->first) ==
            ge->physicals.end()) {
           ge->physicals.push_back(it2->first);
         }
+        if(it2->second.size() && it2->second != "unnamed")
+          _physicalNames.insert
+            (std::make_pair(std::make_pair(dim, it2->first), it2->second));
       }
     }
   }
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 6171b976876eb7c36d6d23a9d688df6281a650ed..7367c0441a369b69617d97e7dfbcaca0129acbfd 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -769,9 +769,10 @@ public:
                 double scalingFactor = 1.0);
 
   // I-deas universal mesh format
-  int readUNV(const std::string &name);
+  int readUNV(const std::string &name, bool readGroupsOfElements = true);
   int writeUNV(const std::string &name, bool saveAll = false,
-               bool saveGroupsOfNodes = false, double scalingFactor = 1.0);
+               bool saveGroupsOfElements = true, bool saveGroupsOfNodes = false,
+               double scalingFactor = 1.0);
 
   // Medit (INRIA) mesh format
   int readMESH(const std::string &name);
diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 65674b73593119a03773a41ff978de314b75e91a..992e7cd4c3e1cfae36e432697da055f604a2ff22 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -371,7 +371,7 @@ void OCC_Internals::bind(const TopoDS_Solid &solid, int tag, bool recursive)
     for(exp0.Init(solid, TopAbs_FACE); exp0.More(); exp0.Next()) {
       TopoDS_Face face = TopoDS::Face(exp0.Current());
       if(!_faceTag.IsBound(face)) {
-        int t = getMaxTag(3) + 1;
+        int t = getMaxTag(2) + 1;
         bind(face, t, recursive);
       }
     }
@@ -574,6 +574,59 @@ void OCC_Internals::unbind(TopoDS_Shape shape, int dim, int tag, bool recursive)
   }
 }
 
+void OCC_Internals::unbindWithoutChecks(TopoDS_Shape shape)
+{
+  TopExp_Explorer exp0;
+  for(exp0.Init(shape, TopAbs_SOLID); exp0.More(); exp0.Next()) {
+    TopoDS_Solid solid = TopoDS::Solid(exp0.Current());
+    if(_solidTag.IsBound(solid)) {
+      int tag = _solidTag.Find(solid);
+      _solidTag.UnBind(solid);
+      _tagSolid.UnBind(tag);
+    }
+  }
+  for(exp0.Init(shape, TopAbs_SHELL); exp0.More(); exp0.Next()) {
+    TopoDS_Shell shell = TopoDS::Shell(exp0.Current());
+    if(_shellTag.IsBound(shell)) {
+      int tag = _shellTag.Find(shell);
+      _shellTag.UnBind(shell);
+      _tagShell.UnBind(tag);
+    }
+  }
+  for(exp0.Init(shape, TopAbs_FACE); exp0.More(); exp0.Next()) {
+    TopoDS_Face face = TopoDS::Face(exp0.Current());
+    if(_faceTag.IsBound(face)) {
+      int tag = _faceTag.Find(face);
+      _faceTag.UnBind(face);
+      _tagFace.UnBind(tag);
+    }
+  }
+  for(exp0.Init(shape, TopAbs_WIRE); exp0.More(); exp0.Next()) {
+    TopoDS_Wire wire = TopoDS::Wire(exp0.Current());
+    if(_wireTag.IsBound(wire)) {
+      int tag = _wireTag.Find(wire);
+      _wireTag.UnBind(wire);
+      _tagWire.UnBind(tag);
+    }
+  }
+  for(exp0.Init(shape, TopAbs_EDGE); exp0.More(); exp0.Next()) {
+    TopoDS_Edge edge = TopoDS::Edge(exp0.Current());
+    if(_edgeTag.IsBound(edge)) {
+      int tag = _edgeTag.Find(edge);
+      _edgeTag.UnBind(edge);
+      _tagEdge.UnBind(tag);
+    }
+  }
+  for(exp0.Init(shape, TopAbs_VERTEX); exp0.More(); exp0.Next()) {
+    TopoDS_Vertex vertex = TopoDS::Vertex(exp0.Current());
+    if(_vertexTag.IsBound(vertex)) {
+      int tag = _vertexTag.Find(vertex);
+      _vertexTag.UnBind(vertex);
+      _tagVertex.UnBind(tag);
+    }
+  }
+}
+
 void OCC_Internals::unbind()
 {
   for(int i = 0; i < 6; i++) _maxTag[i] = 0;
@@ -3440,7 +3493,7 @@ bool OCC_Internals::booleanOperator(
         Msg::Debug("BOOL (%d,%d) other", dim, tag);
       }
     }
-    for(int dim = -2; dim <= 3; dim++) _recomputeMaxTag(dim);
+    for(int d = -2; d <= 3; d++) _recomputeMaxTag(d);
     // bind all remaining entities and add the new ones to the returned list
     _multiBind(result, -1, outDimTags, false, true, true);
     _filterTags(outDimTags, minDim);
@@ -3672,11 +3725,26 @@ bool OCC_Internals::_transform(
     return false;
   }
   for(std::size_t i = 0; i < inDimTags.size(); i++) {
-    // FIXME we should implement rebind(object, result, dim) which would
-    // unbind/bind all subshapes to the same tags
     int dim = inDimTags[i].first;
     int tag = inDimTags[i].second;
+#if 0
+    // safe, but slow: unbind() has linear complexity with respect to the number
+    // of entities in the model (due to the dependency checking of upward
+    // adjencencies and the maximum tag update). Using this in a for loop to
+    // translate copies of entities leads to quadratic complexity.
     unbind(inShapes[i], dim, tag, true);
+#else
+    // bypass it by unbinding the shape and all its subshapes without checking
+    // dependencies: this is a bit dangerous, as one could translate e.g. the
+    // face of a cube (this is not allowed!) - which will unbind the face of the
+    // cube. But the original face will actually be re-bound (with a warning) at
+    // the next syncronization point, so it's not too bad...
+    unbindWithoutChecks(inShapes[i]);
+    for(int d = -2; d <= 3; d++) _recomputeMaxTag(d);
+
+    // FIXME: it would be even better to code a rebind() function to reuse the
+    // tags not only of the shape, but of all the sub-shapes as well
+#endif
     bind(outShapes[i], dim, tag, true);
   }
 
diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h
index 55b094d27a736ff2187cf4043c6e5aa4cf77ce8f..4680878619eb9a80cbda3e267a2774120ffc1651 100644
--- a/Geo/GModelIO_OCC.h
+++ b/Geo/GModelIO_OCC.h
@@ -189,6 +189,7 @@ public:
   void unbind(const TopoDS_Shell &shell, int tag, bool recursive = false);
   void unbind(const TopoDS_Solid &solid, int tag, bool recursive = false);
   void unbind(TopoDS_Shape shape, int dim, int tag, bool recursive = false);
+  void unbindWithoutChecks(TopoDS_Shape shape);
   void unbind();
 
   // set/get max tag of entity for each dimension (0, 1, 2, 3), as well as
diff --git a/Geo/GModelIO_UNV.cpp b/Geo/GModelIO_UNV.cpp
index f7cba2529d7f421cd0a9daff54ebb8319e35b062..b6f292f639c2b93f37984738c4776fba18efa481 100644
--- a/Geo/GModelIO_UNV.cpp
+++ b/Geo/GModelIO_UNV.cpp
@@ -33,7 +33,7 @@ typedef FILE *gmshFILE;
 #define gmsheof feof
 #endif
 
-int GModel::readUNV(const std::string &name)
+int GModel::readUNV(const std::string &name, bool readGroupsOfElements)
 {
   gmshFILE fp = gmshopen(name.c_str(), "r");
   if(!fp) {
@@ -44,7 +44,9 @@ int GModel::readUNV(const std::string &name)
   char buffer[256];
   std::map<int, std::vector<MElement *> > elements[7];
   std::map<int, std::map<int, std::string> > physicals[4];
-
+  std::map<int, MElement *> elementTags;
+  std::map<MElement *, std::vector<int>, MElementPtrLessThan> elementGroups;
+  std::map<int, std::string> groupNames;
   _vertexMapCache.clear();
 
   while(!gmsheof(fp)) {
@@ -74,7 +76,7 @@ int GModel::readUNV(const std::string &name)
         std::map<int, int> warn;
         while(gmshgets(buffer, sizeof(buffer), fp)) {
           if(strlen(buffer) < 3)
-            continue; // possible line ending after last fscanf
+            continue; // possible line ending after last fgets
           if(!strncmp(buffer, "    -1", 6)) break;
           int num, type, elementary, physical, color, numNodes;
           if(!CTX::instance()->mesh.switchElementTags) {
@@ -137,19 +139,21 @@ int GModel::readUNV(const std::string &name)
             }
           }
           int dim = -1;
+          MElement *e = nullptr;
           switch(type) {
           case 11:
           case 21:
           case 22:
           case 31:
-            elements[0][elementary].push_back(new MLine(vertices, num));
+            e = new MLine(vertices, num);
+            elements[0][elementary].push_back(e);
             dim = 1;
             break;
           case 23:
           case 24:
           case 32:
-            elements[0][elementary].push_back(
-              new MLine3(vertices[0], vertices[2], vertices[1], num));
+            e = new MLine3(vertices[0], vertices[2], vertices[1], num);
+            elements[0][elementary].push_back(e);
             dim = 1;
             break;
           case 41:
@@ -158,7 +162,8 @@ int GModel::readUNV(const std::string &name)
           case 74:
           case 81:
           case 91:
-            elements[1][elementary].push_back(new MTriangle(vertices, num));
+            e = new MTriangle(vertices, num);
+            elements[1][elementary].push_back(e);
             dim = 2;
             break;
           case 42:
@@ -167,9 +172,9 @@ int GModel::readUNV(const std::string &name)
           case 72:
           case 82:
           case 92:
-            elements[1][elementary].push_back(
-              new MTriangle6(vertices[0], vertices[2], vertices[4], vertices[1],
-                             vertices[3], vertices[5], num));
+            e = new MTriangle6(vertices[0], vertices[2], vertices[4],
+                               vertices[1], vertices[3], vertices[5], num);
+            elements[1][elementary].push_back(e);
             dim = 2;
             break;
           case 44:
@@ -178,7 +183,8 @@ int GModel::readUNV(const std::string &name)
           case 71:
           case 84:
           case 94:
-            elements[2][elementary].push_back(new MQuadrangle(vertices, num));
+            e = new MQuadrangle(vertices, num);
+            elements[2][elementary].push_back(e);
             dim = 2;
             break;
           case 45:
@@ -187,49 +193,58 @@ int GModel::readUNV(const std::string &name)
           case 75:
           case 85:
           case 95:
-            elements[2][elementary].push_back(new MQuadrangle8(
-              vertices[0], vertices[2], vertices[4], vertices[6], vertices[1],
-              vertices[3], vertices[5], vertices[7], num));
+            e = new MQuadrangle8(vertices[0], vertices[2], vertices[4],
+                                 vertices[6], vertices[1], vertices[3],
+                                 vertices[5], vertices[7], num);
+            elements[2][elementary].push_back(e);
             dim = 2;
             break;
           case 111:
-            elements[3][elementary].push_back(new MTetrahedron(vertices, num));
+            e = new MTetrahedron(vertices, num);
+            elements[3][elementary].push_back(e);
             dim = 3;
             break;
           case 118:
-            elements[3][elementary].push_back(new MTetrahedron10(
-              vertices[0], vertices[2], vertices[4], vertices[9], vertices[1],
-              vertices[3], vertices[5], vertices[6], vertices[8], vertices[7],
-              num));
+            e = new MTetrahedron10(vertices[0], vertices[2], vertices[4],
+                                   vertices[9], vertices[1], vertices[3],
+                                   vertices[5], vertices[6], vertices[8],
+                                   vertices[7], num);
+            elements[3][elementary].push_back(e);
             dim = 3;
             break;
           case 104:
           case 115:
-            elements[4][elementary].push_back(new MHexahedron(vertices, num));
+            e = new MHexahedron(vertices, num);
+            elements[4][elementary].push_back(e);
             dim = 3;
             break;
           case 105:
           case 116:
-            elements[4][elementary].push_back(new MHexahedron20(
-              vertices[0], vertices[2], vertices[4], vertices[6], vertices[12],
-              vertices[14], vertices[16], vertices[18], vertices[1],
-              vertices[7], vertices[8], vertices[3], vertices[9], vertices[5],
-              vertices[10], vertices[11], vertices[13], vertices[19],
-              vertices[15], vertices[17], num));
+            e = new MHexahedron20(vertices[0], vertices[2], vertices[4],
+                                  vertices[6], vertices[12], vertices[14],
+                                  vertices[16], vertices[18], vertices[1],
+                                  vertices[7], vertices[8], vertices[3],
+                                  vertices[9], vertices[5], vertices[10],
+                                  vertices[11], vertices[13], vertices[19],
+                                  vertices[15], vertices[17], num);
+            elements[4][elementary].push_back(e);
             dim = 3;
             break;
           case 101:
           case 112:
-            elements[5][elementary].push_back(new MPrism(vertices, num));
+            e = new MPrism(vertices, num);
+            elements[5][elementary].push_back(e);
             dim = 3;
             break;
           case 102:
           case 113:
-            elements[5][elementary].push_back(
-              new MPrism15(vertices[0], vertices[2], vertices[4], vertices[9],
-                           vertices[11], vertices[13], vertices[1], vertices[5],
-                           vertices[6], vertices[3], vertices[7], vertices[8],
-                           vertices[10], vertices[14], vertices[12], num));
+            e = new MPrism15(vertices[0], vertices[2], vertices[4],
+                             vertices[9], vertices[11], vertices[13],
+                             vertices[1], vertices[5], vertices[6],
+                             vertices[3], vertices[7], vertices[8],
+                             vertices[10], vertices[14], vertices[12],
+                             num);
+            elements[5][elementary].push_back(e);
             dim = 3;
             break;
           default:
@@ -242,14 +257,111 @@ int GModel::readUNV(const std::string &name)
              (!physicals[dim].count(elementary) ||
               !physicals[dim][elementary].count(physical)))
             physicals[dim][elementary][physical] = "unnamed";
+
+          if(e) {
+            elementTags[num] = e;
+            elementGroups[e].push_back(elementary);
+            elementGroups[e].push_back(physical);
+          }
+        }
+      }
+      else if(record == 2477 || record == 2452 || record == 2435) {
+        if(!readGroupsOfElements) {
+          Msg::Info("Ignoring groups (set Mesh.ReadGroupsOfElements to read "
+                    "groups of elements)");
+        }
+        else {
+          Msg::Info("Reading groups");
+          while(gmshgets(buffer, sizeof(buffer), fp)) {
+            if(strlen(buffer) < 3)
+              continue; // possible line ending after last fgets
+            if(!strncmp(buffer, "    -1", 6)) break;
+            int num, constraint, restraint, load, dof, temperature, contact, n;
+            if(sscanf(buffer, "%d %d %d %d %d %d %d %d", &num, &constraint,
+                      &restraint, &load, &dof, &temperature, &contact, &n) != 8)
+              break;
+            if(!gmshgets(buffer, sizeof(buffer), fp)) break;
+            char name[256];
+            if(!sscanf(buffer, "%s", name)) break;
+            groupNames[num] = name;
+            int e = 0;
+            while(e < n) {
+              if(!gmshgets(buffer, sizeof(buffer), fp)) break;
+              int type, tag, leaf, comp, type2, tag2, leaf2, comp2;
+              int r = sscanf(buffer, "%d %d %d %d %d %d %d %d", &type, &tag,
+                             &leaf, &comp, &type2, &tag2, &leaf2, &comp2);
+              if(r >= 4) {
+                e++;
+                if(type == 8) elementGroups[elementTags[tag]].push_back(num);
+              }
+              if(r == 8) {
+                e++;
+                if(type2 == 8) elementGroups[elementTags[tag2]].push_back(num);
+              }
+              if(r != 4 && r != 8) break;
+            }
+          }
         }
       }
-      else if(record == 2477) { // groups elements
-        Msg::Info(
-          "Discarding element/node groups: currently still reading physical "
-          "tags directly from elements");
+    }
+  }
+
+  if(groupNames.size()) {
+    // if element groups are given, create new elementary entity tags for each
+    // unique combination of (elementary, physical, group(s)), as (elementary,
+    // physical) has no garantee to be coherent with the element groups (and is
+    // usually not - see e.g. the UNV files created by ANSA, where e.g. all
+    // surface elements can be associated with the same (elementary, physical)
+    // pair but be split amongst (possibly overlapping) element groups)
+    std::map<std::vector<int>, int> entity;
+    std::map<int, std::vector<MElement *> > elementsNew[7];
+
+    int maxgroup = 0;
+    for(auto g : groupNames) maxgroup = std::max(g.first, maxgroup);
+
+    for(auto &it : elementGroups) {
+      MElement *e = it.first;
+      if(e) {
+        int elementaryNew = 0;
+        auto ent = entity.find(it.second);
+        if(ent == entity.end()) {
+          elementaryNew = entity.size() + 1;
+          entity[it.second] = elementaryNew;
+        }
+        else
+          elementaryNew = ent->second;
+        int t = e->getType();
+        int k = (t == TYPE_LIN) ? 0 : (t == TYPE_TRI) ? 1 : (t == TYPE_QUA) ? 2 :
+          (t == TYPE_TET) ? 3 : (t == TYPE_HEX) ? 4 : (t == TYPE_PRI) ? 5 : -1;
+        int dim = e->getDim();
+        if(k >= 0) {
+          elementsNew[k][elementaryNew].push_back(e);
+          if(it.second.size() > 2) {
+            // we have one or more element groups
+            for(std::size_t g = 2; g < it.second.size(); g++) {
+              int physicalNew = it.second[g];
+              if(!physicals[dim].count(elementaryNew) ||
+                 !physicals[dim][elementaryNew].count(physicalNew))
+                physicals[dim][elementaryNew][physicalNew] =
+                  groupNames[physicalNew];
+            }
+          }
+          else if(it.second.size() > 1){
+            int physicalNew = CTX::instance()->mesh.switchElementTags ?
+              it.second[0] : it.second[1];
+            // if the group num exists, add an offset (we could also simply not
+            // define physical groups other than those in the element
+            // groups... not sure what's best)
+            if(groupNames.count(physicalNew)) physicalNew += maxgroup;
+            if(!physicals[dim].count(elementaryNew) ||
+               !physicals[dim][elementaryNew].count(physicalNew))
+              physicals[dim][elementaryNew][physicalNew] = "unnamed";
+          }
+        }
       }
     }
+    for(int i = 0; i < (int)(sizeof(elements) / sizeof(elements[0])); i++)
+      elements[i] = elementsNew[i];
   }
 
   for(int i = 0; i < (int)(sizeof(elements) / sizeof(elements[0])); i++)
@@ -281,7 +393,8 @@ static std::string physicalName(GModel *m, int dim, int num)
 }
 
 int GModel::writeUNV(const std::string &name, bool saveAll,
-                     bool saveGroupsOfNodes, double scalingFactor)
+                     bool saveGroupsOfElements, bool saveGroupsOfNodes,
+                     double scalingFactor)
 {
   FILE *fp = Fopen(name.c_str(), "w");
   if(!fp) {
@@ -319,67 +432,71 @@ int GModel::writeUNV(const std::string &name, bool saveAll,
   }
   fprintf(fp, "%6d\n", -1);
 
-  std::map<int, std::vector<GEntity *> > groups[4];
-  getPhysicalGroups(groups);
+  // save groups of elements and/or groups of nodes, if requested, for each
+  // physical group
+  if(saveGroupsOfNodes || saveGroupsOfElements) {
 
-  // save groups of elements (and groups of nodes if requested) for each
-  // physical
-  fprintf(fp, "%6d\n", -1);
-  fprintf(fp, "%6d\n", 2477);
-  for(int dim = 0; dim <= 3; dim++) {
-    for(auto it = groups[dim].begin(); it != groups[dim].end(); it++) {
-      std::vector<GEntity *> &entities = it->second;
+    std::map<int, std::vector<GEntity *> > groups[4];
+    getPhysicalGroups(groups);
 
-      std::set<MVertex *, MVertexPtrLessThan> nodes;
-      if(saveGroupsOfNodes) {
-        for(std::size_t i = 0; i < entities.size(); i++) {
-          for(std::size_t j = 0; j < entities[i]->getNumMeshElements(); j++) {
-            MElement *e = entities[i]->getMeshElement(j);
-            for(std::size_t k = 0; k < e->getNumVertices(); k++)
-              nodes.insert(e->getVertex(k));
+    fprintf(fp, "%6d\n", -1);
+    fprintf(fp, "%6d\n", 2477);
+    for(int dim = 0; dim <= 3; dim++) {
+      for(auto it = groups[dim].begin(); it != groups[dim].end(); it++) {
+        std::vector<GEntity *> &entities = it->second;
+
+        std::set<MVertex *, MVertexPtrLessThan> nodes;
+        if(saveGroupsOfNodes) {
+          for(std::size_t i = 0; i < entities.size(); i++) {
+            for(std::size_t j = 0; j < entities[i]->getNumMeshElements(); j++) {
+              MElement *e = entities[i]->getMeshElement(j);
+              for(std::size_t k = 0; k < e->getNumVertices(); k++)
+                nodes.insert(e->getVertex(k));
+            }
           }
         }
-      }
-
-      int nele = 0;
-      for(std::size_t i = 0; i < entities.size(); i++)
-        nele += entities[i]->getNumMeshElements();
 
-      fprintf(fp, "%10d%10d%10d%10d%10d%10d%10d%10d\n", it->first, 0, 0, 0, 0,
-              0, 0, (int)nodes.size() + nele);
-      fprintf(fp, "%s\n", physicalName(this, dim, it->first).c_str());
-
-      if(saveGroupsOfNodes) {
-        int row = 0;
-        for(auto it2 = nodes.begin(); it2 != nodes.end(); it2++) {
-          if(row == 2) {
-            fprintf(fp, "\n");
-            row = 0;
-          }
-          fprintf(fp, "%10d%10ld%10d%10d", 7, (*it2)->getIndex(), 0, 0);
-          row++;
+        int nele = 0;
+        if(saveGroupsOfElements) {
+          for(std::size_t i = 0; i < entities.size(); i++)
+            nele += entities[i]->getNumMeshElements();
         }
-        fprintf(fp, "\n");
-      }
 
-      {
-        int row = 0;
-        for(std::size_t i = 0; i < entities.size(); i++) {
-          for(std::size_t j = 0; j < entities[i]->getNumMeshElements(); j++) {
-            MElement *e = entities[i]->getMeshElement(j);
+        fprintf(fp, "%10d%10d%10d%10d%10d%10d%10d%10d\n", it->first, 0, 0, 0, 0,
+                0, 0, (int)nodes.size() + nele);
+        fprintf(fp, "%s\n", physicalName(this, dim, it->first).c_str());
+
+        if(saveGroupsOfNodes) {
+          int row = 0;
+          for(auto it2 = nodes.begin(); it2 != nodes.end(); it2++) {
             if(row == 2) {
               fprintf(fp, "\n");
               row = 0;
             }
-            fprintf(fp, "%10d%10lu%10d%10d", 8, e->getNum(), 0, 0);
+            fprintf(fp, "%10d%10ld%10d%10d", 7, (*it2)->getIndex(), 0, 0);
             row++;
           }
+          fprintf(fp, "\n");
+        }
+        if(saveGroupsOfElements) {
+          int row = 0;
+          for(std::size_t i = 0; i < entities.size(); i++) {
+            for(std::size_t j = 0; j < entities[i]->getNumMeshElements(); j++) {
+              MElement *e = entities[i]->getMeshElement(j);
+              if(row == 2) {
+                fprintf(fp, "\n");
+                row = 0;
+              }
+              fprintf(fp, "%10d%10lu%10d%10d", 8, e->getNum(), 0, 0);
+              row++;
+            }
+          }
+          fprintf(fp, "\n");
         }
-        fprintf(fp, "\n");
       }
     }
+    fprintf(fp, "%6d\n", -1);
   }
-  fprintf(fp, "%6d\n", -1);
 
   fclose(fp);
   return 1;
diff --git a/Geo/GModelParametrize.cpp b/Geo/GModelParametrize.cpp
index b00bb8d6c9548410601a4fa61c531e9960e7f9f5..5f9df8831c98480aae48262c329ef392c925d56e 100644
--- a/Geo/GModelParametrize.cpp
+++ b/Geo/GModelParametrize.cpp
@@ -705,6 +705,20 @@ bool computeParametrization(const std::vector<MTriangle *> &triangles,
   return true;
 }
 
+#if 0
+static void debugTriangulation(const std::vector<MTriangle *> &triangles,
+                               const std::string &label)
+{
+  FILE *fp = Fopen("debug.pos", "w");
+  if(!fp) return;
+  fprintf(fp, "View\"%s\"{\n", label.c_str());
+  for(auto t : triangles) t->writePOS(fp, false, true, false, false, false, false);
+  fprintf(fp, "};\n");
+  fclose(fp);
+  exit(1);
+}
+#endif
+
 static int isTriangulationParametrizable(const std::vector<MTriangle *> &t,
                                          int Nmax, std::ostringstream &why)
 {
@@ -736,6 +750,7 @@ static int isTriangulationParametrizable(const std::vector<MTriangle *> &t,
   }
   if(bnd.empty()) {
     why << "poincare characteristic 2 is not 0";
+    //debugTriangulation(t, why.str());
     return 2;
   }
 
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index 936968d8a03bb90728e6cba30dd1bcb8df17313a..49750cf952540da6b2836923ad55700fc24943de 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1698,12 +1698,7 @@ void MElement::writeMATLAB(FILE *fp, int filetype, int elementary, int physical,
 void MElement::writeUNV(FILE *fp, int num, int elementary, int physical)
 {
   int type = getTypeForUNV();
-  if(!type) {
-    Msg::Warning("Unknown element type for UNV export (MSH type %d) - "
-                 "output file might be invalid",
-                 getTypeForMSH());
-    return;
-  }
+  if(!type) return;
 
   int n = getNumVertices();
   int physical_property = elementary;
diff --git a/Geo/MVertex.h b/Geo/MVertex.h
index 234b044820e128f131170761d702ef508980e36d..764320e09be6b4bf39e2c103369d690b8226218b 100644
--- a/Geo/MVertex.h
+++ b/Geo/MVertex.h
@@ -71,6 +71,12 @@ public:
     _y = y;
     _z = z;
   }
+  void setXYZ(const SPoint3& pt)
+  {
+    _x = pt.x();
+    _y = pt.y();
+    _z = pt.z();
+  }
 
   // get/set the parent entity
   GEntity *onWhat() const { return _ge; }
diff --git a/Geo/OCCEdge.cpp b/Geo/OCCEdge.cpp
index c8554380e75a760ec9f109996f426bd9cf678cfc..2758747dd279fb71bf9d8e9d53eb72ad8aa4588d 100644
--- a/Geo/OCCEdge.cpp
+++ b/Geo/OCCEdge.cpp
@@ -198,7 +198,7 @@ bool OCCEdge::_project(const double p[3], double &u, double xyz[3]) const
   GeomAPI_ProjectPointOnCurve proj(pnt, _curve, umin, umax);
 
   if(!proj.NbPoints()) {
-    Msg::Warning("Projection of point (%g, %g, %g) on curve %d failed", p[0],
+    Msg::Debug("Projection of point (%g, %g, %g) on curve %d failed", p[0],
                  p[1], p[2], tag());
     return false;
   }
diff --git a/Geo/OCCFace.cpp b/Geo/OCCFace.cpp
index cdc4b132511f47536f69c125ce21a64e7cfeef05..b138da8348d414fc304c628ad427abe81298c965 100644
--- a/Geo/OCCFace.cpp
+++ b/Geo/OCCFace.cpp
@@ -252,14 +252,14 @@ bool OCCFace::_project(const double p[3], double uv[2], double xyz[3]) const
   gp_Pnt pnt(p[0], p[1], p[2]);
   GeomAPI_ProjectPointOnSurf proj(pnt, _occface, umin, umax, vmin, vmax);
   if(!proj.NbPoints()) {
-    Msg::Warning("Projection of point (%g, %g, %g) on surface %d failed", p[0],
-                 p[1], p[2], tag());
+    Msg::Debug("Projection of point (%g, %g, %g) on surface %d failed", p[0],
+               p[1], p[2], tag());
     return false;
   }
   proj.LowerDistanceParameters(uv[0], uv[1]);
 
   if(uv[0] < umin || uv[0] > umax || uv[1] < vmin || uv[1] > vmax)
-    Msg::Warning("Point projection is out of surface parameter bounds");
+    Msg::Debug("Point projection is out of surface parameter bounds");
 
   if(xyz) {
     pnt = proj.NearestPoint();
@@ -294,7 +294,7 @@ SPoint2 OCCFace::parFromPoint(const SPoint3 &qp, bool onSurface) const
   if(_project(qp.data(), uv, nullptr))
     return SPoint2(uv[0], uv[1]);
   else
-    return GFace::parFromPoint(qp);
+    return GFace::parFromPoint(qp, onSurface);
 }
 
 GEntity::GeomType OCCFace::geomType() const
diff --git a/Geo/SOrientedBoundingBox.cpp b/Geo/SOrientedBoundingBox.cpp
index 48442dd833149b0a6abf99ee0400c14662e0e171..aec868992eae916c107ac61d1ed75b911b00ea4c 100644
--- a/Geo/SOrientedBoundingBox.cpp
+++ b/Geo/SOrientedBoundingBox.cpp
@@ -22,7 +22,8 @@
 #endif
 
 SOrientedBoundingRectangle::SOrientedBoundingRectangle()
-  : center({0.0, 0.0}), size({0.0, 0.0}), axisX({0.0, 0.0}), axisY({0.0, 0.0})
+  : center({{0.0, 0.0}}), size({{0.0, 0.0}}), axisX({{0.0, 0.0}}),
+    axisY({{0.0, 0.0}})
 {
 }
 
diff --git a/Geo/SPoint2.h b/Geo/SPoint2.h
index 3c06e087eb648ff45c9f0e01138399090f8088cd..d1ea0342200c553d5a562b4d1c0176ccfca726fa 100644
--- a/Geo/SPoint2.h
+++ b/Geo/SPoint2.h
@@ -51,6 +51,8 @@ public:
     if(other.P[1] < P[1]) return true;
     return false;
   }
+  const double *data() const { return P; }
+  double *data() { return P; }
 };
 
 inline SPoint2 operator+(const SPoint2 &a, const SPoint2 &b)
diff --git a/Geo/SPoint3.h b/Geo/SPoint3.h
index ddc14abc9788eb84f8a6f967fa9ae8abc0d46eac..4e85248a8417116e5f15bbc8e904548813fe7f0b 100644
--- a/Geo/SPoint3.h
+++ b/Geo/SPoint3.h
@@ -8,6 +8,7 @@
 
 #include <cmath>
 #include <vector>
+#include <array>
 
 // A point in 3-space
 class SPoint3 {
@@ -86,6 +87,8 @@ public:
     }
     return true;
   }
+  // implicit conversion to std::array<double, 3>
+  operator std::array<double, 3>() const { return {{P[0], P[1], P[2]}}; }
 };
 
 inline SPoint3 operator+(const SPoint3 &a, const SPoint3 &b)
diff --git a/Geo/SVector3.h b/Geo/SVector3.h
index 43f9caed733e51d3c5cfd10603e5e1f630830913..c803808766e9b0a9de419c9c5c0d1225cf3819cd 100644
--- a/Geo/SVector3.h
+++ b/Geo/SVector3.h
@@ -9,6 +9,7 @@
 #include "SPoint3.h"
 #include <string>
 #include <stdio.h>
+#include <array>
 #include "GmshMessage.h"
 
 // concrete class for vector of size 3
@@ -132,6 +133,8 @@ public:
   {
     for(int i = 0; i < 3; i++) { P[i] += (a * y[i]); }
   }
+  // implicit conversion to std::array<double,3>
+  operator std::array<double, 3>() const { return {{P[0], P[1], P[2]}}; }
 };
 
 inline double dot(const SVector3 &a, const SVector3 &b)
diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp
index d98c670b6ae4c17203e4cd0d24b577a141993c54..6769c306bc8bd01d1390ea362d2f80458540a636 100644
--- a/Geo/gmshEdge.cpp
+++ b/Geo/gmshEdge.cpp
@@ -426,6 +426,10 @@ void gmshEdge::writeGEO(FILE *fp)
         fprintf(fp, " Using Progression ");
       else if(std::abs(meshAttributes.typeTransfinite) == 2)
         fprintf(fp, " Using Bump ");
+      else if(std::abs(meshAttributes.typeTransfinite) == 3)
+        fprintf(fp, " Using Beta ");
+      else if(std::abs(meshAttributes.typeTransfinite) == 4)
+        fprintf(fp, " Using Sizemap ");
       fprintf(fp, "%g", meshAttributes.coeffTransfinite);
     }
     fprintf(fp, ";\n");
diff --git a/Mesh/BackgroundMesh.cpp b/Mesh/BackgroundMesh.cpp
index 8aebcb5f26a74529a9849791013c337a8623044e..c324bc3efd32b8998e1bcc295935373bf72d5f85 100644
--- a/Mesh/BackgroundMesh.cpp
+++ b/Mesh/BackgroundMesh.cpp
@@ -544,6 +544,13 @@ void backgroundMesh::updateSizes(GFace *_gf)
       MVertex *V1 = _2Dto3D[v1];
       auto s0 = _sizes.find(V0);
       auto s1 = _sizes.find(V1);
+      if(s0 == _sizes.end() || s1 == _sizes.end()) {
+        // Note: this Warning is disabled because it's too verbose in logs
+        //       is this behavior normal ? Was doing undefined behavior before
+        //       (detected by valgrind)
+        // Msg::Warning("in backgroundMesh::updateSizes(), vertex not found in maps");
+        continue;
+      }
       if(s0->second < s1->second)
         s1->second = std::min(s1->second, _beta * s0->second);
       else
@@ -728,3 +735,172 @@ MElement *backgroundMesh::getMeshElementByCoord(double u, double v, double w,
   }
   return _octree->find(u, v, w, 2, strict);
 }
+
+/* Global variable instanciation */
+std::vector<std::unique_ptr<GlobalBackgroundMesh> > global_bmeshes;
+
+bool backgroudMeshExists(const std::string &name)
+{
+  for(size_t i = 0; i < global_bmeshes.size(); ++i) {
+    if(global_bmeshes[i]->name == name) return true;
+  }
+  return false;
+}
+
+GlobalBackgroundMesh &getBackgroundMesh(const std::string &name)
+{
+  for(size_t i = 0; i < global_bmeshes.size(); ++i) {
+    if(global_bmeshes[i]->name == name) return *(global_bmeshes[i]);
+  }
+  global_bmeshes.push_back(
+    std::unique_ptr<GlobalBackgroundMesh>(new GlobalBackgroundMesh(name)));
+  return *(global_bmeshes.back());
+}
+
+GlobalBackgroundMesh::~GlobalBackgroundMesh()
+{
+  Msg::Debug("GlobalBackgroundMesh destructor call");
+  for(MVertex *v : mesh_vertices)
+    if(v) {
+      delete v;
+      v = nullptr;
+    }
+  mesh_vertices.clear();
+  edgeBackgroundMeshes.clear();
+  faceBackgroundMeshes.clear();
+}
+
+int GlobalBackgroundMesh::importGModelMeshes(GModel *_gm,
+                                             bool overwriteExisting)
+{
+  Msg::Debug("GlobalBackgroundMesh: import GModel mesh ...");
+  gm = _gm;
+
+  if(overwriteExisting && mesh_vertices.size() > 0) { /* Clear mesh */
+    Msg::Debug("- delete existing mesh (for overwrite)");
+    for(MVertex *v : mesh_vertices)
+      if(v) {
+        delete v;
+        v = nullptr;
+      }
+    mesh_vertices.clear();
+    edgeBackgroundMeshes.clear();
+    faceBackgroundMeshes.clear();
+    Msg::Debug("- import mesh from GModel");
+  }
+
+  std::unordered_map<MVertex *, MVertex *> old2new;
+
+  std::set<GVertex *, GEntityPtrLessThan> vertices = gm->getVertices();
+  std::set<GEdge *, GEntityPtrLessThan> edges = gm->getEdges();
+  for(GFace *gf : gm->getFaces()) {
+    for(GVertex *e : gf->embeddedVertices()) vertices.insert(e);
+    for(GEdge *e : gf->embeddedEdges()) edges.insert(e);
+  }
+
+  /* MVertex from GVertex */
+  mesh_vertices.reserve(mesh_vertices.size() + vertices.size());
+  for(GVertex *gv : vertices) {
+    for(size_t i = 0; i < gv->mesh_vertices.size(); ++i) {
+      MVertex *v = gv->mesh_vertices[i];
+      auto it = old2new.find(v);
+      if(it == old2new.end()) {
+        mesh_vertices.push_back(new MVertex(v->x(), v->y(), v->z(), gv));
+        old2new[v] = mesh_vertices.back();
+      }
+    }
+  }
+
+  /* MLine from GEdge */
+  size_t nlines = 0;
+  for(GEdge *ge : edges) {
+    edgeBackgroundMeshes[ge] = BackgroundMeshGEdge();
+    BackgroundMeshGEdge &bm = edgeBackgroundMeshes[ge];
+    bm.ge = ge;
+    for(size_t i = 0; i < ge->mesh_vertices.size(); ++i) {
+      MVertex *v = ge->mesh_vertices[i];
+      double t = 0.;
+      v->setParameter(0, t);
+      auto it = old2new.find(v);
+      if(it == old2new.end()) {
+        mesh_vertices.push_back(new MEdgeVertex(v->x(), v->y(), v->z(), ge, t));
+        old2new[v] = mesh_vertices.back();
+      }
+    }
+    bm.lines.reserve(ge->lines.size());
+    for(size_t i = 0; i < ge->lines.size(); ++i) {
+      MElement *elt = ge->lines[i];
+      MVertex *v0 = old2new[elt->getVertex(0)];
+      MVertex *v1 = old2new[elt->getVertex(1)];
+      if(v0 == NULL || v1 == NULL) {
+        Msg::Error("GlobalBackgroundMesh: failed to import mesh (1)");
+        // Note: some vertex are stored outside the GModel ?
+        return -1;
+      }
+      bm.lines.push_back(MLine(v0, v1));
+      nlines += 1;
+    }
+  }
+
+  /* MTriangle from GFace */
+  size_t ntris = 0;
+  for(GFace *gf : gm->getFaces()) {
+    faceBackgroundMeshes[gf] = BackgroundMeshGFace();
+    BackgroundMeshGFace &bm = faceBackgroundMeshes[gf];
+    bm.gf = gf;
+    /* Vertices */
+    for(size_t i = 0; i < gf->mesh_vertices.size(); ++i) {
+      MVertex *v = gf->mesh_vertices[i];
+      auto it = old2new.find(v);
+      if(it == old2new.end()) {
+        double uv0 = 0.;
+        double uv1 = 0.;
+        v->getParameter(0, uv0);
+        v->getParameter(1, uv1);
+        mesh_vertices.push_back(
+          new MFaceVertex(v->x(), v->y(), v->z(), gf, uv0, uv1));
+        old2new[v] = mesh_vertices.back();
+      }
+    }
+
+    bm.triangles.reserve(gf->triangles.size() + 2 * gf->quadrangles.size());
+    /* Triangles */
+    for(size_t i = 0; i < gf->triangles.size(); ++i) {
+      MElement *elt = gf->triangles[i];
+      MVertex *v0 = old2new[elt->getVertex(0)];
+      MVertex *v1 = old2new[elt->getVertex(1)];
+      MVertex *v2 = old2new[elt->getVertex(2)];
+      if(v0 == NULL || v1 == NULL || v2 == NULL) {
+        Msg::Error("GlobalBackgroundMesh: failed to import mesh (2)");
+        // Note: some vertex are stored outside the GModel ?
+        return -1;
+      }
+      bm.triangles.push_back(MTriangle(v0, v1, v2));
+      ntris += 1;
+    }
+
+    /* Quads */
+    if(gf->quadrangles.size() > 0) {
+      for(size_t i = 0; i < gf->quadrangles.size(); ++i) {
+        MElement *elt = gf->quadrangles[i];
+        MVertex *v0 = old2new[elt->getVertex(0)];
+        MVertex *v1 = old2new[elt->getVertex(1)];
+        MVertex *v2 = old2new[elt->getVertex(2)];
+        MVertex *v3 = old2new[elt->getVertex(3)];
+        if(v0 == NULL || v1 == NULL || v2 == NULL || v3 == NULL) {
+          Msg::Error("GlobalBackgroundMesh: failed to import mesh (3)");
+          // Note: some vertex are stored outside the GModel ?
+          return -1;
+        }
+        bm.triangles.push_back(MTriangle(v0, v1, v2));
+        bm.triangles.push_back(MTriangle(v0, v2, v3));
+        ntris += 2;
+      }
+    }
+  }
+
+  Msg::Debug("- imported: %li vertices, %li lines, %li triangles",
+             old2new.size(), nlines, ntris);
+
+  return 0;
+}
diff --git a/Mesh/BackgroundMesh.h b/Mesh/BackgroundMesh.h
index 4ae50cabe4dc820c16f7f9757af31488e377d28f..b535a0aa1ac2156b0f6deba8c6b749523d1814bb 100644
--- a/Mesh/BackgroundMesh.h
+++ b/Mesh/BackgroundMesh.h
@@ -8,15 +8,21 @@
 
 #include <cmath>
 #include <vector>
+#include <unordered_map>
 #include <list>
+#include <memory>
 #include "simpleFunction.h"
 #include "BackgroundMeshTools.h"
+#include "MLine.h"
+#include "MTriangle.h"
 
 #if defined(HAVE_ANN)
 #include "ANN/ANN.h"
 class ANNkd_tree;
 #endif
 
+class GEntity;
+class GModel;
 class MElementOctree;
 class GFace;
 class GEdge;
@@ -116,4 +122,63 @@ public:
   }
 };
 
+/************************************************************/
+/* Alternative datastructures for storing background meshes */
+/************************************************************/
+
+struct BackgroundMeshGEdge {
+  GEdge *ge = NULL;
+  std::vector<MLine> lines;
+};
+
+struct BackgroundMeshGFace {
+  GFace *gf = NULL;
+  std::vector<MTriangle> triangles;
+};
+
+/* @brief Store a collection of GEntity background meshes.
+ *        Deal with the mesh import (see importEntityMeshes())
+ *        New MVertex* instance are created by the import
+ *        and are deleted by the destructor.
+ */
+class GlobalBackgroundMesh {
+public:
+  const std::string &name;
+  GModel *gm;
+  std::unordered_map<GEdge *, BackgroundMeshGEdge> edgeBackgroundMeshes;
+  std::unordered_map<GFace *, BackgroundMeshGFace> faceBackgroundMeshes;
+  std::vector<MVertex *> mesh_vertices;
+
+public:
+  GlobalBackgroundMesh(const std::string &_name) : name(_name), gm(NULL) {}
+  GlobalBackgroundMesh(GlobalBackgroundMesh const &) = delete;
+  GlobalBackgroundMesh &operator=(GlobalBackgroundMesh const &) = delete;
+  ~GlobalBackgroundMesh(); /* delete the MVertex instances stored in
+                              mesh_vertices */
+
+  /**
+   * @brief Fill the entityMesh map by copying the meshes in the GModel.
+   *        New MVertex, MLine and MTriangle instances are created, the
+   * background meshes are totally independant from the ones in the GModel after
+   *        this function call.
+   *        Quadrangles in GFace are split into two triangles.
+   *
+   * @param gm the GModel containing the GEntity whose meshes are imported
+   * @param overwriteExisting Delete existing background meshes before importing
+   * new ones
+   *
+   * @warning Only import GVertex, GEdge, GFace for the moment, not GRegion
+   *
+   * @return 0 if successful import
+   */
+  int importGModelMeshes(GModel *gm, bool overwriteExisting = true);
+};
+
+/* Global storage for access deep in meshing algorithms without passing
+ * reference everywhere. Use getBackgroundMesh(name) instead of direcly
+ * accessing the global variable. */
+extern std::vector<std::unique_ptr<GlobalBackgroundMesh> > global_bmeshes;
+bool backgroudMeshExists(const std::string &name);
+GlobalBackgroundMesh &getBackgroundMesh(const std::string &name);
+
 #endif
diff --git a/Mesh/CMakeLists.txt b/Mesh/CMakeLists.txt
index 53241f650eccdf89367c00a2817c3adf28765b06..b9e7c34178322813cd47594a4fa996e63a05906c 100644
--- a/Mesh/CMakeLists.txt
+++ b/Mesh/CMakeLists.txt
@@ -19,6 +19,7 @@ set(SRC
     meshGRegionLocalMeshMod.cpp meshGRegionMMG.cpp
   meshGRegionBoundaryLayer.cpp
   meshRelocateVertex.cpp
+  meshTriangulation.cpp
   meshMetric.cpp
   BackgroundMesh.cpp BackgroundMeshTools.cpp
   qualityMeasures.cpp qualityMeasuresJacobian.cpp
@@ -33,6 +34,8 @@ set(SRC
   filterElements.cpp
   gmshCrossFields.cpp
   automaticMeshSizeField.cpp
+  meshQuadQuasiStructured.cpp
+  meshOctreeLibOL.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
diff --git a/Mesh/Field.cpp b/Mesh/Field.cpp
index 320f9e51a28c1d8fbf5c2cc153c82e4dd17cb138..252497dbb32b96092a9379e3f5448c98869d765f 100644
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@ -1535,12 +1535,22 @@ public:
     }
     return v;
   }
+
   virtual bool isotropic() const
   {
     PView *v = getView();
     if(v && v->getData()->getNumTensors()) return false;
     return true;
   }
+
+  virtual int numComponents() const
+  {
+    PView *v = getView();
+    if(v && v->getData()->getNumTensors()) return 9;
+    if(v && v->getData()->getNumVectors()) return 3;
+    return 1;
+  }
+
   double operator()(double x, double y, double z, GEntity *ge = nullptr)
   {
     PView *v = getView();
@@ -1550,14 +1560,79 @@ public:
       _octree = new OctreePost(v);
       updateNeeded = false;
     }
+
     double l = 0.;
     // use large tolerance (in element reference coordinates) to maximize chance
     // of finding an element
-    if(!_octree->searchScalarWithTol(x, y, z, &l, 0, nullptr, 0.05))
-      Msg::Info("No scalar element found containing point (%g,%g,%g)", x, y, z);
+    if(numComponents() == 3) { // scaled cross field
+      double values[3];
+      if(!_octree->searchVectorWithTol(x, y, z, values, 0, nullptr, 0.05)) {
+        if(!_octree->searchVectorWithTol(x, y, z, values, 0, nullptr, .1)) {
+          Msg::Debug("Field sampling: no vector element found containing point "
+                     "(%g,%g,%g) (for norm)",
+                     x, y, z);
+        }
+        else {
+          l = sqrt(values[0] * values[0] + values[1] * values[1] +
+                   values[2] * values[2]);
+        }
+      }
+      else {
+        l = sqrt(values[0] * values[0] + values[1] * values[1] +
+                 values[2] * values[2]);
+      }
+    }
+    else if(numComponents() == 1) {
+      if(!_octree->searchScalarWithTol(x, y, z, &l, 0, nullptr, 0.05)) {
+        Msg::Debug(
+          "Field sampling: no scalar element found containing point (%g,%g,%g)",
+          x, y, z);
+      }
+    }
+    else {
+      Msg::Error("Field sampling: no view with the right dimension", x, y, z);
+    }
+
     if(l <= 0 && _cropNegativeValues) return MAX_LC;
     return l;
   }
+
+  void operator()(double x, double y, double z, SVector3 &v, GEntity *ge = 0)
+  {
+    PView *vie = getView();
+    if(!vie) {
+      Msg::Error("PostViewField: no view");
+      v.data()[0] = MAX_LC;
+      v.data()[1] = MAX_LC;
+      v.data()[2] = MAX_LC;
+      return;
+    }
+    if(updateNeeded) {
+      if(_octree) delete _octree;
+      _octree = new OctreePost(vie);
+      updateNeeded = false;
+    }
+    if(numComponents() == 3) { // scaled cross field
+      double values[3];
+      if(!_octree->searchVectorWithTol(x, y, z, values, 0, nullptr, .05)) {
+        if(!_octree->searchVectorWithTol(x, y, z, values, 0, nullptr, .1)) {
+          Msg::Debug("Field sampling: no vector element found containing point "
+                     "(%g,%g,%g)",
+                     x, y, z);
+        }
+        else {
+          v = SVector3(values[0], values[1], values[2]);
+        }
+      }
+      else {
+        v = SVector3(values[0], values[1], values[2]);
+      }
+    }
+    else {
+      Msg::Error("Field sampling: no vector element");
+    }
+  }
+
   void operator()(double x, double y, double z, SMetric3 &metr,
                   GEntity *ge = nullptr)
   {
@@ -1572,7 +1647,9 @@ public:
     // use large tolerance (in element reference coordinates) to maximize chance
     // of finding an element
     if(!_octree->searchTensorWithTol(x, y, z, l, 0, nullptr, 0.05))
-      Msg::Info("No tensor element found containing point (%g,%g,%g)", x, y, z);
+      Msg::Debug(
+        "Field sampling: no tensor element found containing point (%g,%g,%g)",
+        x, y, z);
     if(0 && _cropNegativeValues) {
       if(l[0] <= 0 && l[1] <= 0 && l[2] <= 0 && l[3] <= 0 && l[4] <= 0 &&
          l[5] <= 0 && l[6] <= 0 && l[7] <= 0 && l[8] <= 0) {
@@ -2838,17 +2915,19 @@ void BoundaryLayerField::setupFor1d(int iE)
 
   if(!found) {
     GEdge *ge = GModel::current()->getEdgeByTag(iE);
-    GVertex *gv0 = ge->getBeginVertex();
-    if(gv0) {
-      found = std::find(_pointTagsSaved.begin(), _pointTagsSaved.end(),
-                        gv0->tag()) != _pointTagsSaved.end();
-      if(found) _pointTags.push_back(gv0->tag());
-    }
-    GVertex *gv1 = ge->getEndVertex();
-    if(gv1) {
-      found = std::find(_pointTagsSaved.begin(), _pointTagsSaved.end(),
-                        gv1->tag()) != _pointTagsSaved.end();
-      if(found) _pointTags.push_back(gv1->tag());
+    if(ge) {
+      GVertex *gv0 = ge->getBeginVertex();
+      if(gv0) {
+        found = std::find(_pointTagsSaved.begin(), _pointTagsSaved.end(),
+                          gv0->tag()) != _pointTagsSaved.end();
+        if(found) _pointTags.push_back(gv0->tag());
+      }
+      GVertex *gv1 = ge->getEndVertex();
+      if(gv1) {
+        found = std::find(_pointTagsSaved.begin(), _pointTagsSaved.end(),
+                          gv1->tag()) != _pointTagsSaved.end();
+        if(found) _pointTags.push_back(gv1->tag());
+      }
     }
   }
   removeAttractors();
@@ -2875,6 +2954,7 @@ bool BoundaryLayerField::setupFor2d(int iF)
   // OR (better) CHANGE THE PHILOSOPHY
 
   GFace *gf = GModel::current()->getFaceByTag(iF);
+  if(!gf) return false;
   std::vector<GEdge *> ed = gf->edges();
   std::vector<GEdge *> const &embedded_edges = gf->embeddedEdges();
   ed.insert(ed.begin(), embedded_edges.begin(), embedded_edges.end());
@@ -2961,16 +3041,18 @@ void BoundaryLayerField::computeFor1dMesh(double x, double y, double z,
   double distk = 1.e22;
   for(auto it = _pointTags.begin(); it != _pointTags.end(); ++it) {
     GVertex *v = GModel::current()->getVertexByTag(*it);
-    double xp = v->x();
-    double yp = v->y();
-    double zp = v->z();
-    const double dist =
-      sqrt((x - xp) * (x - xp) + (y - yp) * (y - yp) + (z - zp) * (z - zp));
-    if(dist < distk) {
-      distk = dist;
-      xpk = xp;
-      ypk = yp;
-      zpk = zp;
+    if(v) {
+      double xp = v->x();
+      double yp = v->y();
+      double zp = v->z();
+      const double dist =
+        sqrt((x - xp) * (x - xp) + (y - yp) * (y - yp) + (z - zp) * (z - zp));
+      if(dist < distk) {
+        distk = dist;
+        xpk = xp;
+        ypk = yp;
+        zpk = zp;
+      }
     }
   }
 
@@ -3012,6 +3094,7 @@ void BoundaryLayerField::operator()(DistanceField *cc, double dist, double x,
   double beta = CTX::instance()->mesh.smoothRatio;
   if(pp.first.dim == 0) {
     GVertex *v = GModel::current()->getVertexByTag(pp.first.ent);
+    if(!v) return;
     SVector3 t1;
     if(dist < thickness) { t1 = SVector3(1, 0, 0); }
     else {
@@ -3022,6 +3105,7 @@ void BoundaryLayerField::operator()(DistanceField *cc, double dist, double x,
   }
   else if(pp.first.dim == 1) {
     GEdge *e = GModel::current()->getEdgeByTag(pp.first.ent);
+    if(!e) return;
     if(dist < thickness) {
       SVector3 t1 = e->firstDer(pp.first.u);
       double crv = e->curvature(pp.first.u);
@@ -3043,6 +3127,7 @@ void BoundaryLayerField::operator()(DistanceField *cc, double dist, double x,
   }
   else {
     GFace *gf = GModel::current()->getFaceByTag(pp.first.ent);
+    if(!gf) return;
     if(dist < thickness) {
       double cmin, cmax;
       SVector3 dirMax, dirMin;
diff --git a/Mesh/Field.h b/Mesh/Field.h
index 98cd07e8182027cc5342272ceae8a658523ed627..8a56958cb1af932dc62e2685b9bc566271d96dab 100644
--- a/Mesh/Field.h
+++ b/Mesh/Field.h
@@ -108,10 +108,16 @@ public:
   int id;
   std::map<std::string, FieldOption *> options;
   std::map<std::string, FieldCallback *> callbacks;
+  virtual int numComponents() const { return 1; }
   virtual bool isotropic() const { return true; }
   // isotropic
   virtual double operator()(double x, double y, double z,
                             GEntity *ge = nullptr) = 0;
+  // vector value
+  virtual void operator()(double x, double y, double z, SVector3 &,
+                          GEntity *ge = 0)
+  {
+  }
   // anisotropic
   virtual void operator()(double x, double y, double z, SMetric3 &,
                           GEntity *ge = nullptr)
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 9aacfdd25925c198fe89e1b5136dd5b9da1145cf..79f2924447c558524db7a215c571c15c613751b8 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -34,6 +34,7 @@
 #include "Field.h"
 #include "Options.h"
 #include "Generator.h"
+#include "meshQuadQuasiStructured.h"
 
 #if defined(_OPENMP)
 #include <omp.h>
@@ -553,6 +554,18 @@ static void Mesh2D(GModel *m)
 
   Msg::SetNumThreads(prevNumThreads);
 
+  if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+    /* In the quasi-structured pipeline, the quad-dominant mesh
+     * is subdivided into a full quad mesh */
+    /* TODO: - a faster CAD projection approach (from uv)
+     *       - verify quality during projection */
+    // bool linear = false;
+    // RefineMesh(m, linear, true, false);
+    RefineMeshWithBackgroundMeshProjection(m);
+
+    OptimizeMesh(m, "QuadQuasiStructured");
+  }
+
   double t2 = Cpu(), w2 = TimeOfDay();
   CTX::instance()->meshTimer[1] = w2 - w1;
   Msg::StatusBar(true, "Done meshing 2D (Wall %gs, CPU %gs)",
@@ -983,7 +996,9 @@ void OptimizeMesh(GModel *m, const std::string &how, bool force, int niter)
   if(how != "" && how != "Gmsh" && how != "Optimize" && how != "Netgen" &&
      how != "HighOrder" && how != "HighOrderElastic" &&
      how != "HighOrderFastCurving" && how != "Laplace2D" &&
-     how != "Relocate2D" && how != "Relocate3D") {
+     how != "Relocate2D" && how != "Relocate3D" &&
+     how != "DiskQuadrangulation" && how != "QuadCavityRemeshing" &&
+     how != "QuadQuasiStructured") {
     Msg::Error("Unknown mesh optimization method '%s'", how.c_str());
     return;
   }
@@ -1065,6 +1080,51 @@ void OptimizeMesh(GModel *m, const std::string &how, bool force, int niter)
       RelocateVertices(gr, niter);
     }
   }
+  else if(how == "DiskQuadrangulation") {
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::DONE) {
+        gf->meshStatistics.status = GFace::PENDING;
+      }
+
+    transferSeamGEdgesVerticesToGFace(m);
+    optimizeTopologyWithDiskQuadrangulationRemeshing(m);
+
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::PENDING) {
+        gf->meshStatistics.status = GFace::DONE;
+      }
+  }
+  else if(how == "QuadCavityRemeshing") {
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::DONE) {
+        gf->meshStatistics.status = GFace::PENDING;
+      }
+
+    transferSeamGEdgesVerticesToGFace(m);
+    optimizeTopologyWithCavityRemeshing(m);
+
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::PENDING) {
+        gf->meshStatistics.status = GFace::DONE;
+      }
+  }
+  else if(how == "QuadQuasiStructured") {
+    /* The following methods only act on faces whose status is PENDING */
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::DONE) {
+        gf->meshStatistics.status = GFace::PENDING;
+      }
+
+    transferSeamGEdgesVerticesToGFace(m);
+    quadMeshingOfSimpleFacesWithPatterns(m);
+    optimizeTopologyWithDiskQuadrangulationRemeshing(m);
+    optimizeTopologyWithCavityRemeshing(m);
+
+    for(GFace *gf : m->getFaces())
+      if(gf->meshStatistics.status == GFace::PENDING) {
+        gf->meshStatistics.status = GFace::DONE;
+      }
+  }
 
   if(Msg::GetVerbosity() > 98)
     std::for_each(m->firstRegion(), m->lastRegion(),
@@ -1393,8 +1453,6 @@ void GenerateMesh(GModel *m, int ask)
   m->clearLastMeshEntityError();
   m->clearLastMeshVertexError();
 
-  int old = m->getMeshStatus(false);
-
   // Initialize pseudo random mesh generator with the same seed
   srand(CTX::instance()->mesh.randomSeed);
 
@@ -1403,6 +1461,51 @@ void GenerateMesh(GModel *m, int ask)
   SetOrder1(m, false, true);
   FixPeriodicMesh(m);
 
+  // Some meshing algorithms require a global background mesh
+  // and a guiding field (e.g. cross field + size map)
+  QuadqsContextUpdater *qqs = nullptr;
+  if(CTX::instance()->mesh.algo2d == ALGO_2D_PACK_PRLGRMS ||
+     CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+    int old = m->getMeshStatus(false);
+    bool doIt = (ask >= 1 && ask <= 3);
+    bool exists = backgroundMeshAndGuidingFieldExists(m);
+    if(old == 1 && ask == 1 && exists) doIt = true;
+    if(old == 1 && ask == 2 && exists) doIt = false;
+    if(old == 2 && ask == 2 && exists) doIt = true;
+    if(doIt) {
+      bool overwriteGModelMesh = false; /* use current mesh if available */
+      bool deleteGModelMeshAfter =
+        true; /* mesh saved in background, no longer needed */
+      BuildBackgroundMeshAndGuidingField(m, overwriteGModelMesh,
+                                         deleteGModelMeshAfter);
+    }
+
+    if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT 
+        && old == 2 && ask == 2 && exists) {
+      /* transferSeamGEdgesVerticesToGFace() called by quadqs remove the 1D
+       * meshes of the seam GEdge, so 2D initial meshing does not work without
+       * first remeshing the seam GEdge. We delete the whole mesh by security */
+      m->deleteMesh();
+    }
+
+    if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+      /* note: the creation of QuadqsContextUpdater modifies many
+       *       meshing parameters */
+      qqs = new QuadqsContextUpdater();
+    }
+
+    if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+      std::set<GFace *> faces;
+      for(GFace *gf : m->getFaces())
+        if(gf->edges().size() == 4) { faces.insert(gf); }
+      double maxDiffRel = 0.34; /* do not deviate more than 34% from size map */
+      MeshSetTransfiniteFacesAutomatic(faces, 2.35, true, maxDiffRel);
+    }
+  }
+
+  // dimension of previous/existing mesh
+  int old = m->getMeshStatus(false);
+
   // 1D mesh
   if(ask == 1 || (ask > 1 && old < 1)) {
     std::for_each(m->firstRegion(), m->lastRegion(), deMeshGRegion());
@@ -1475,6 +1578,8 @@ void GenerateMesh(GModel *m, int ask)
 
   Msg::PrintErrorCounter("Mesh generation error summary");
 
+  if(qqs != nullptr) delete qqs;
+
   CTX::instance()->lock = 0;
   // ProfilerStop();
 }
diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp
index 4671152241c283d99b5ca080410eabe44b29d263..bd1439d17722c4f98dcffdf7710b532a4fb02393 100644
--- a/Mesh/meshGEdge.cpp
+++ b/Mesh/meshGEdge.cpp
@@ -621,6 +621,14 @@ int meshGEdgeProcessing(GEdge *ge, const double t_begin, double t_end, int &N,
     a = 0.;
     N = 1;
   }
+  else if(ge->meshAttributes.method == MESH_TRANSFINITE &&
+          ge->meshAttributes.typeTransfinite == 4) {
+    // Transfinite (prescribed number of edges) but the points are positioned
+    // according to the standard size constraints (size map, etc)
+    a = Integration(ge, t_begin, t_end, F_Lc(), Points,
+                    CTX::instance()->mesh.lcIntegrationPrecision);
+    N = ge->meshAttributes.nbPointsTransfinite;
+  }
   else if(ge->meshAttributes.method == MESH_TRANSFINITE) {
     a = Integration(ge, t_begin, t_end, F_Transfinite(), Points,
                     CTX::instance()->mesh.lcIntegrationPrecision);
@@ -805,7 +813,9 @@ void meshGEdge::operator()(GEdge *ge)
     mesh_vertices = vv;
   }
 
-  if(CTX::instance()->mesh.algo2d != ALGO_2D_BAMG)
+  if(CTX::instance()->mesh.algo2d != ALGO_2D_BAMG &&
+     CTX::instance()->mesh.algo2d != ALGO_2D_QUAD_QUASI_STRUCT &&
+     CTX::instance()->mesh.algo2d != ALGO_2D_PACK_PRLGRMS)
     if(_addBegin.empty() && _addEnd.empty())
       filterPoints(ge, filterMinimumN - 2);
 
@@ -828,6 +838,10 @@ void meshGEdge::operator()(GEdge *ge)
     v0->y() = beg_p.y();
     v0->z() = beg_p.z();
   }
+
+  Msg::Debug("Meshing curve %d (%s): %li interior vertices", ge->tag(),
+             ge->getTypeString().c_str(), ge->mesh_vertices.size());
+
   ge->meshStatistics.status = GEdge::DONE;
 }
 
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index f945b2ec2ead1f059305830bbae6ac1b7875b3d8..ac77288cded92584241e62b57ba591bdce5cfe3a 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -41,6 +41,10 @@
 // define this to use the old initial delaunay
 #define OLD_CODE_DELAUNAY 1
 
+#ifndef OLD_CODE_DELAUNAY
+#include "meshTriangulation.h"
+#endif
+
 bool pointInsideParametricDomain(std::vector<SPoint2> &bnd, SPoint2 &p,
                                  SPoint2 &out, int &N)
 {
@@ -1368,44 +1372,52 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
   }
 #else
   {
-    std::vector<MVertex *> v;
-    std::vector<MTriangle *> result;
-    v.insert(v.end(), all_vertices.begin(), all_vertices.end());
+    // New Stuff comes here --> it actually does everything
+    // -- triangulate points
+    // -- recover edges
+    // -- color triangles
 
-    std::map<MVertex *, SPoint3> pos;
-    for(std::size_t i = 0; i < v.size(); i++) {
-      MVertex *v0 = v[i];
-      BDS_Point *p0 = recoverMapInv[v0];
-      pos[v0] = SPoint3(v0->x(), v0->y(), v0->z());
-      v0->setXYZ(p0->u, p0->v, 0.0);
+    std::vector<GEdge *> temp;
+    if(replacement_edges) {
+      temp = gf->edges();
+      gf->set(*replacement_edges);
     }
-    delaunayMeshIn2D(v, result, 0);
+    // TEST --> recover and color so most of the code below
+    // can go away. Works also for periodic faces
+    GFaceInitialMesh(gf->tag(), 1);
+
+    PolyMesh *pm = GFaceInitialMesh(gf->tag(), 1);
+
+    if(replacement_edges) { gf->set(temp); }
 
-    for(std::size_t i = 0; i < v.size() - 4; i++) {
-      MVertex *v0 = v[i];
-      SPoint3 pp = pos[v0];
-      v0->setXYZ(pp.x(), pp.y(), pp.z());
+    std::map<int, BDS_Point *> aaa;
+    for(auto it = all_vertices.begin(); it != all_vertices.end(); it++) {
+      MVertex *here = *it;
+      aaa[here->getNum()] = recoverMapInv[here];
     }
 
-    // add the four corners
     for(int ip = 0; ip < 4; ip++) {
-      MVertex *vv = v[v.size() - ip - 1];
-      BDS_Point *pp = m->add_point(-ip - 1, vv->x(), vv->y(), gf);
+      PolyMesh::Vertex *v = pm->vertices[ip];
+      v->data = -ip - 1;
+      BDS_Point *pp =
+        m->add_point(v->data, v->position.x(), v->position.y(), gf);
       m->add_geom(gf->tag(), 2);
-      recoverMapInv[vv] = pp;
       BDS_GeomEntity *g = m->get_geom(gf->tag(), 2);
       pp->g = g;
+      aaa[v->data] = pp;
     }
-    // add the triangles
-    for(std::size_t i = 0; i < result.size(); i++) {
-      MVertex *v0 = result[i]->getVertex(0);
-      MVertex *v1 = result[i]->getVertex(1);
-      MVertex *v2 = result[i]->getVertex(2);
-      BDS_Point *p0 = recoverMapInv[v0];
-      BDS_Point *p1 = recoverMapInv[v1];
-      BDS_Point *p2 = recoverMapInv[v2];
-      m->add_triangle(p0->iD, p1->iD, p2->iD);
+
+    for(size_t i = 0; i < pm->faces.size(); i++) {
+      PolyMesh::HalfEdge *he = pm->faces[i]->he;
+      int a = he->v->data;
+      int b = he->next->v->data;
+      int c = he->next->next->v->data;
+      BDS_Point *p1 = aaa[a];
+      BDS_Point *p2 = aaa[b];
+      BDS_Point *p3 = aaa[c];
+      m->add_triangle(p1->iD, p2->iD, p3->iD);
     }
+    delete pm;
   }
 #endif
 
@@ -1706,7 +1718,8 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
   else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS ||
           gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS_CSTR) {
     infty = true;
-    if(!onlyInitialMesh) buildBackgroundMesh(gf, false);
+    /* New version of PACK / QUADQS use a different background mesh */
+    // if(!onlyInitialMesh) buildBackgroundMesh(gf, false);
   }
 
   if(!onlyInitialMesh)
@@ -1723,7 +1736,8 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
       bowyerWatsonParallelograms(gf);
     }
     else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS_CSTR) {
-      bowyerWatsonParallelogramsConstrained(gf, gf->constr_vertices);
+      Msg::Error("ALGO_2D_PACK_PRLGRMS_CSTR deprecated");
+      // bowyerWatsonParallelogramsConstrained(gf, gf->constr_vertices);
     }
     else if(gf->getMeshingAlgo() == ALGO_2D_DELAUNAY ||
             gf->getMeshingAlgo() == ALGO_2D_AUTO) {
@@ -1733,6 +1747,7 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
       bowyerWatson(gf, 15000);
       meshGFaceBamg(gf);
     }
+
     if(!infty ||
        !(CTX::instance()->mesh.recombineAll || gf->meshAttributes.recombine))
       laplaceSmoothing(gf, CTX::instance()->mesh.nbSmoothing, infty);
@@ -1763,7 +1778,8 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
      !onlyInitialMesh && CTX::instance()->mesh.algoRecombine <= 1) {
     bool blossom = (CTX::instance()->mesh.algoRecombine == 1);
     int topo = CTX::instance()->mesh.recombineOptimizeTopology;
-    recombineIntoQuads(gf, blossom, topo, true, 0.1);
+    bool nodeRepositioning = false;
+    recombineIntoQuads(gf, blossom, topo, nodeRepositioning, 0.1);
   }
 
   computeElementShapes(gf, gf->meshStatistics.worst_element_shape,
@@ -2071,6 +2087,12 @@ static bool meshGeneratorPeriodic(GFace *gf, int RECUR_ITER,
   }
   if(CTX::instance()->debugSurface > 0) debug = true;
 
+    // TEST !!!
+#ifndef OLD_CODE_DELAUNAY
+    //  PolyMesh * pm = GFaceInitialMesh (gf->tag(), 1);
+#endif
+  // TEST !!!
+
   std::map<BDS_Point *, MVertex *, PointLessThan> recoverMap;
   std::multimap<MVertex *, BDS_Point *> recoverMultiMapInv;
 
@@ -2753,7 +2775,8 @@ static bool meshGeneratorPeriodic(GFace *gf, int RECUR_ITER,
   else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS ||
           gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS_CSTR) {
     infty = true;
-    buildBackgroundMesh(gf, false, &equivalence, &parametricCoordinates);
+    /* New version of PACK / QUADQS use a different background mesh */
+    // buildBackgroundMesh(gf, false, &equivalence, &parametricCoordinates);
   }
 
   bool onlyInitialMesh = (gf->getMeshingAlgo() == ALGO_2D_INITIAL_ONLY);
@@ -2779,9 +2802,11 @@ static bool meshGeneratorPeriodic(GFace *gf, int RECUR_ITER,
       bowyerWatsonFrontalLayers(gf, true, &equivalence, &parametricCoordinates);
     else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS)
       bowyerWatsonParallelograms(gf, &equivalence, &parametricCoordinates);
-    else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS_CSTR)
-      bowyerWatsonParallelogramsConstrained(
-        gf, gf->constr_vertices, &equivalence, &parametricCoordinates);
+    else if(gf->getMeshingAlgo() == ALGO_2D_PACK_PRLGRMS_CSTR) {
+      Msg::Error("ALGO_2D_PACK_PRLGRMS_CSTR deprecated");
+      // bowyerWatsonParallelogramsConstrained(
+      //   gf, gf->constr_vertices, &equivalence, &parametricCoordinates);
+    }
     else if(gf->getMeshingAlgo() == ALGO_2D_DELAUNAY ||
             gf->getMeshingAlgo() == ALGO_2D_AUTO)
       bowyerWatson(gf, 1000000000, &equivalence, &parametricCoordinates);
@@ -2807,7 +2832,12 @@ static bool meshGeneratorPeriodic(GFace *gf, int RECUR_ITER,
      CTX::instance()->mesh.algoRecombine <= 1) {
     bool blossom = (CTX::instance()->mesh.algoRecombine == 1);
     int topo = CTX::instance()->mesh.recombineOptimizeTopology;
-    recombineIntoQuads(gf, blossom, topo, false, 0.1); // no node repositioning
+    bool nodeRepositioning = true;
+    if(CTX::instance()->mesh.algo2d == ALGO_2D_PACK_PRLGRMS ||
+       CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+      nodeRepositioning = false;
+    }
+    recombineIntoQuads(gf, blossom, topo, nodeRepositioning, 0.1);
   }
 
   computeElementShapes(gf, gf->meshStatistics.worst_element_shape,
@@ -2899,6 +2929,14 @@ void meshGFace::operator()(GFace *gf, bool print)
                    gf->getMeshMaster()->tag());
   }
 
+  /* The ALGO_2D_QUAD_QUASI_STRUCT is using ALGO_2D_PACK_PRLGRMS
+   * to generate a initial quad-dominant mesh */
+  bool quadqs = false;
+  if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+    quadqs = true;
+    CTX::instance()->mesh.algo2d = ALGO_2D_PACK_PRLGRMS;
+  }
+
   const char *algo = "Unknown";
 
   switch(gf->getMeshingAlgo()) {
@@ -2970,6 +3008,8 @@ void meshGFace::operator()(GFace *gf, bool print)
     (*this)(gf, print);
     gf->unsetMeshingAlgo();
   }
+
+  if(quadqs) CTX::instance()->mesh.algo2d = ALGO_2D_QUAD_QUASI_STRUCT;
 }
 
 static bool getGFaceNormalFromVert(GFace *gf, MElement *el, SVector3 &nf)
diff --git a/Mesh/meshGFace.h b/Mesh/meshGFace.h
index 19817ef9604bb30a5e83bde5b0cc04642f2399bf..3d8bf65049e00c6a9d70ee289dec73a360359715 100644
--- a/Mesh/meshGFace.h
+++ b/Mesh/meshGFace.h
@@ -56,8 +56,27 @@ bool meshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfIntersecting1dMesh,
 bool pointInsideParametricDomain(std::vector<SPoint2> &bnd, SPoint2 &p,
                                  SPoint2 &out, int &N);
 
+/**
+ * @brief Automatically set transfinite constraints on curves and faces
+ *        in the candidate_faces if possible. Curves on opposide sides
+ *        of rectangular faces are constrained to reiceive the same number
+ *        of points.
+ *
+ * @param candidate_faces The faces which are candidate for transfinite
+ * @param cornerAngle Threshold on the angle (viewed from face) at corners
+ * @param setRecombine If true, quads will be built instead of triangles when
+ * meshing
+ * @param maxDiffRel Reject transfinite constraints if the relative difference
+ * on the initial number of lines (from sizing constraints) on opposite sides is
+ * larger than the maxDiffRel
+ * @param ignoreEmbedded If true, ignore embedded edges and vertices in faces
+ *
+ * @return true if success
+ */
 bool MeshSetTransfiniteFacesAutomatic(std::set<GFace *> &candidate_faces,
                                       double cornerAngle = 2.35,
-                                      bool setRecombine = true);
+                                      bool setRecombine = true,
+                                      double maxDiffRel = 1.,
+                                      bool ignoreEmbedded = false);
 
 #endif
diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp
index 407f0bf99bc7fa15047db059f984d0be8ad5c552..4064d81fc7f0baa97e2e1b02f1d4237697a59e3e 100644
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@ -25,6 +25,7 @@
 #include "intersectCurveSurface.h"
 #include "HilbertCurve.h"
 #include "fullMatrix.h"
+#include "gmsh.h" // for debug
 
 #if defined(HAVE_DOMHEX)
 #include "pointInsertion.h"
@@ -1436,6 +1437,7 @@ void buildBackgroundMesh(GFace *gf, bool crossFieldClosestPoint,
 #if defined(HAVE_DOMHEX)
   if(!old_algo_hexa()) return;
 #endif
+  Msg::Debug("build background mesh (Bowyer Watson, fixed size) ...");
 
   quadsToTriangles(gf, 100000);
 
@@ -1605,10 +1607,21 @@ void bowyerWatsonParallelograms(
   std::vector<MVertex *> packed;
   std::vector<SMetric3> metrics;
 
+  Msg::Debug("- Face %i: bowyerWatsonParallelograms ...", gf->tag());
+  if(!gf->haveParametrization()) {
+    Msg::Error(
+      "- Face %i: no CAD parametrization available, cannot mesh with algo PACK",
+      gf->tag());
+    return;
+  }
+
 #if defined(HAVE_DOMHEX)
-  if(old_algo_hexa())
+  if(old_algo_hexa()) {
+    Msg::Debug("bowyerWatsonParallelograms: call packingOfParallelograms()");
     packingOfParallelograms(gf, packed, metrics);
+  }
   else {
+    Msg::Debug("bowyerWatsonParallelograms: call Filler2D::pointInsertion2D()");
     Filler2D f;
     f.pointInsertion2D(gf, packed, metrics);
   }
@@ -1616,6 +1629,8 @@ void bowyerWatsonParallelograms(
   Msg::Error("Packing of parallelograms algorithm requires DOMHEX");
 #endif
 
+  Msg::Info("%lu Nodes created --> now staring insertion", packed.size());
+
   if(!buildMeshGenerationDataStructures(gf, AllTris, DATA)) {
     Msg::Error("Invalid meshing data structure");
     return;
@@ -1623,6 +1638,9 @@ void bowyerWatsonParallelograms(
 
   // std::sort(packed.begin(), packed.end(), MVertexPtrLessThanLexicographic());
   SortHilbert(packed);
+  Msg::Debug("bowyerWatsonParallelograms: %li candidate points to insert in "
+             "the triangulation",
+             packed.size());
 
   MTri3 *oneNewTriangle = nullptr;
   for(std::size_t i = 0; i < packed.size();) {
@@ -1663,6 +1681,10 @@ void bowyerWatsonParallelograms(
   transferDataStructure(gf, AllTris, DATA);
   backgroundMesh::unset();
 
+  Msg::Debug(
+    "bowyerWatsonParallelograms: %li candidate points -> %li inserted vertices",
+    packed.size(), gf->mesh_vertices.size());
+
   splitElementsInBoundaryLayerIfNeeded(gf);
 }
 
@@ -1671,13 +1693,17 @@ void bowyerWatsonParallelogramsConstrained(
   std::map<MVertex *, MVertex *> *equivalence,
   std::map<MVertex *, SPoint2> *parametricCoordinates)
 {
+  Msg::Error("bowyerWatsonParallelogramsConstrained deprecated");
+  return;
+
   std::set<MTri3 *, compareTri3Ptr> AllTris;
   bidimMeshData DATA(equivalence, parametricCoordinates);
   std::vector<MVertex *> packed;
   std::vector<SMetric3> metrics;
 
 #if defined(HAVE_DOMHEX)
-  packingOfParallelogramsConstrained(gf, constr_vertices, packed, metrics);
+  // packingOfParallelogramsConstrained no longer exists
+  // packingOfParallelogramsConstrained(gf, constr_vertices, packed, metrics);
 #else
   Msg::Error("Packing of parallelograms algorithm requires DOMHEX");
 #endif
diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp
index 5d0611f9b00c3902b4e969cb9a4819ac172ad7ee..e80a98f1f16914e627b7be6f027c810e71580e83 100644
--- a/Mesh/meshGFaceOptimize.cpp
+++ b/Mesh/meshGFaceOptimize.cpp
@@ -34,6 +34,63 @@ extern "C" int perfect_match(int ncount, CCdatagroup *dat, int ecount,
                              int partialprice, double *totalzeit);
 #endif
 
+RecombineTriangle::RecombineTriangle(const MEdge &me, MElement *_t1,
+                                     MElement *_t2, Field *cross_field)
+  : t1(_t1), t2(_t2)
+{
+  n1 = me.getVertex(0);
+  n2 = me.getVertex(1);
+  n3 = 0;
+  n4 = 0;
+
+  if(t1->getVertex(0) != n1 && t1->getVertex(0) != n2)
+    n3 = t1->getVertex(0);
+  else if(t1->getVertex(1) != n1 && t1->getVertex(1) != n2)
+    n3 = t1->getVertex(1);
+  else if(t1->getVertex(2) != n1 && t1->getVertex(2) != n2)
+    n3 = t1->getVertex(2);
+
+  if(t2->getVertex(0) != n1 && t2->getVertex(0) != n2)
+    n4 = t2->getVertex(0);
+  else if(t2->getVertex(1) != n1 && t2->getVertex(1) != n2)
+    n4 = t2->getVertex(1);
+  else if(t2->getVertex(2) != n1 && t2->getVertex(2) != n2)
+    n4 = t2->getVertex(2);
+
+  MQuadrangle q(n1, n3, n2, n4);
+  angle = q.etaShapeMeasure();
+
+  double const a1 = 180 * angle3Vertices(n1, n4, n2) / M_PI;
+  double const a2 = 180 * angle3Vertices(n4, n2, n3) / M_PI;
+  double const a3 = 180 * angle3Vertices(n2, n3, n1) / M_PI;
+  double const a4 = 180 * angle3Vertices(n3, n1, n4) / M_PI;
+  quality = std::abs(90. - a1);
+  quality = std::max(std::abs(90. - a2), quality);
+  quality = std::max(std::abs(90. - a3), quality);
+  quality = std::max(std::abs(90. - a4), quality);
+
+  if(cross_field) {
+    SVector3 t1;
+    SVector3 t2(me.getVertex(1)->x() - me.getVertex(0)->x(),
+                me.getVertex(1)->y() - me.getVertex(0)->y(),
+                me.getVertex(1)->z() - me.getVertex(0)->z());
+    (*cross_field)(0.5 * (me.getVertex(0)->x() + me.getVertex(1)->x()),
+                   0.5 * (me.getVertex(0)->y() + me.getVertex(1)->y()),
+                   0.5 * (me.getVertex(0)->z() + me.getVertex(1)->z()), t1,
+                   NULL);
+    //    double L1 = t1.norm();
+    t1.normalize();
+    //    double L2 = t2.norm();
+    t2.normalize();
+    SVector3 n = crossprod(t1, t2);
+    double ErrDir = std::min(fabs(dot(t1, t2)), n.norm());
+    //    double ErrL = fabs(L1-L2)/(L1);
+    //    printf("quality %g err %g L %g %g\n",quality,ErrL,L1,L2);
+    quality /= ErrDir;
+    if(n1->onWhat()->dim() < 2 || n2->onWhat()->dim() < 2) quality /= 10;
+  }
+}
+
 edge_angle::edge_angle(MVertex *_v1, MVertex *_v2, MElement *t1, MElement *t2)
   : v1(_v1), v2(_v2)
 {
@@ -921,6 +978,9 @@ void laplaceSmoothing(GFace *gf, int niter, bool infinity_norm)
   }
 
   if(!niter) return;
+
+  Msg::Debug("laplacian smoothing ...");
+
   std::set<MVertex *> vs;
   getAllBoundaryLayerVertices(gf, vs);
   v2t_cont adj;
@@ -995,6 +1055,17 @@ static void _recombineIntoQuads(GFace *gf, bool blossom, bool cubicGraph = 1)
   e2t_cont adj;
   buildEdgeToElement(gf->triangles, adj);
 
+  FieldManager *fields = gf->model()->getFields();
+  Field *cross_field = NULL;
+  SVector3 t1;
+  // double L; /* unused ? */
+  if(fields->getBackgroundField() > 0) {
+    cross_field = fields->get(fields->getBackgroundField());
+    if(cross_field->numComponents() != 3) { // we hae a true scaled cross fiel
+      cross_field = NULL;
+    }
+  }
+
   std::vector<RecombineTriangle> pairs;
 
   std::map<MVertex *, std::pair<MElement *, MElement *> > makeGraphPeriodic;
@@ -1006,8 +1077,8 @@ static void _recombineIntoQuads(GFace *gf, bool blossom, bool cubicGraph = 1)
                             it->first.getVertex(0)) ||
         !std::binary_search(emb_edgeverts.begin(), emb_edgeverts.end(),
                             it->first.getVertex(1)))) {
-      pairs.push_back(
-        RecombineTriangle(it->first, it->second.first, it->second.second));
+      pairs.push_back(RecombineTriangle(it->first, it->second.first,
+                                        it->second.second, cross_field));
     }
     else if(!it->second.second && it->second.first->getNumVertices() == 3) {
       for(int i = 0; i < 2; i++) {
@@ -1340,8 +1411,8 @@ void quadsToTriangles(GFace *gf, double minqual)
   //  std::map<MElement*,MElement*> _toFirst;
   std::map<MElement *, std::vector<MElement *> > newElemColumns;
 
-  for(auto it = _columns->_elemColumns.begin(); it != _columns->_elemColumns.end();
-      it++) {
+  for(auto it = _columns->_elemColumns.begin();
+      it != _columns->_elemColumns.end(); it++) {
     MElement *firstEl = it->first;
     auto it2 = change.find(firstEl);
     if(it2 != change.end()) firstEl = it2->second.first;
diff --git a/Mesh/meshGFaceOptimize.h b/Mesh/meshGFaceOptimize.h
index 90e1922e5802dd761d78baf145b103c43e151f8b..d887b95ddce41c58d5135fbc29f1c2ae4e3cdd31 100644
--- a/Mesh/meshGFaceOptimize.h
+++ b/Mesh/meshGFaceOptimize.h
@@ -17,6 +17,7 @@
 class GFace;
 class GVertex;
 class MVertex;
+class Field;
 
 struct edge_angle {
   MVertex *v1, *v2;
@@ -110,40 +111,7 @@ struct RecombineTriangle {
   double quality;
   MVertex *n1, *n2, *n3, *n4;
 
-  RecombineTriangle(const MEdge &me, MElement *_t1, MElement *_t2)
-    : t1(_t1), t2(_t2)
-  {
-    n1 = me.getVertex(0);
-    n2 = me.getVertex(1);
-    n3 = nullptr;
-    n4 = nullptr;
-
-    if(t1->getVertex(0) != n1 && t1->getVertex(0) != n2)
-      n3 = t1->getVertex(0);
-    else if(t1->getVertex(1) != n1 && t1->getVertex(1) != n2)
-      n3 = t1->getVertex(1);
-    else if(t1->getVertex(2) != n1 && t1->getVertex(2) != n2)
-      n3 = t1->getVertex(2);
-
-    if(t2->getVertex(0) != n1 && t2->getVertex(0) != n2)
-      n4 = t2->getVertex(0);
-    else if(t2->getVertex(1) != n1 && t2->getVertex(1) != n2)
-      n4 = t2->getVertex(1);
-    else if(t2->getVertex(2) != n1 && t2->getVertex(2) != n2)
-      n4 = t2->getVertex(2);
-
-    MQuadrangle q(n1, n3, n2, n4);
-    angle = q.etaShapeMeasure();
-
-    double const a1 = 180 * angle3Vertices(n1, n4, n2) / M_PI;
-    double const a2 = 180 * angle3Vertices(n4, n2, n3) / M_PI;
-    double const a3 = 180 * angle3Vertices(n2, n3, n1) / M_PI;
-    double const a4 = 180 * angle3Vertices(n3, n1, n4) / M_PI;
-    quality = std::abs(90. - a1);
-    quality = std::max(std::abs(90. - a2), quality);
-    quality = std::max(std::abs(90. - a3), quality);
-    quality = std::max(std::abs(90. - a4), quality);
-  }
+  RecombineTriangle(const MEdge &me, MElement *_t1, MElement *_t2, Field *f);
 
   bool operator<(const RecombineTriangle &other) const
   {
diff --git a/Mesh/meshGFaceTransfinite.cpp b/Mesh/meshGFaceTransfinite.cpp
index 0b1cc8661a35c99945b3353f17f45a81bf867b31..74cdeb379fdaee3dc4fcb11154d358dd0f88b811 100644
--- a/Mesh/meshGFaceTransfinite.cpp
+++ b/Mesh/meshGFaceTransfinite.cpp
@@ -582,7 +582,8 @@ bool faceIsValidQuad(GFace *gf, double angle_threshold_rad)
 
   std::vector<std::array<int, 2> > vpairs;
   for(GEdge *ge : gf->edges()) {
-    vpairs.push_back({ge->getBeginVertex()->tag(), ge->getEndVertex()->tag()});
+    vpairs.push_back(
+      {{ge->getBeginVertex()->tag(), ge->getEndVertex()->tag()}});
   }
   std::vector<int> loop;
   bool ok = id_loop_from_closed_pairs(vpairs, loop);
@@ -663,12 +664,17 @@ GEdge *quad_face_opposite_edge(GFace *face, GEdge *edge)
 }
 
 void build_chords(const std::set<GFace *> &faces,
-                  std::vector<std::set<GEdge *> > &chords)
+                  std::vector<std::set<GEdge *> > &chords, double maxDiffRel,
+                  bool ignoreEmbedded = false)
 {
   /* Connectivity */
   std::map<GEdge *, std::vector<GFace *> > edge2faces;
-  for(GFace *gf : faces)
+  for(GFace *gf : faces) {
+    if(!ignoreEmbedded &&
+       (gf->embeddedEdges().size() > 0 || gf->embeddedVertices().size() > 0))
+      continue;
     for(GEdge *ge : gf->edges()) { edge2faces[ge].push_back(gf); }
+  }
 
   Msg::Debug("build chords: %li faces, %li edges", faces.size(),
              edge2faces.size());
@@ -687,10 +693,15 @@ void build_chords(const std::set<GFace *> &faces,
     while(Q.size() > 0) {
       GEdge *ge = Q.front();
       Q.pop();
+      int n = meshGEdgeTargetNumberOfPoints(ge);
       chord.insert(ge);
       for(GFace *gf : edge2faces[ge]) {
         GEdge *ge2 = quad_face_opposite_edge(gf, ge);
         if(ge2 && done.find(ge2) == done.end()) {
+          int n2 = meshGEdgeTargetNumberOfPoints(ge2);
+          if(double(std::abs(n2 - n)) / double(std::max(n, n2)) > maxDiffRel) {
+            continue;
+          }
           Q.push(ge2);
           done[ge2] = true;
         }
@@ -702,19 +713,24 @@ void build_chords(const std::set<GFace *> &faces,
 }
 
 bool MeshSetTransfiniteFacesAutomatic(std::set<GFace *> &candidate_faces,
-                                      double cornerAngle, bool setRecombine)
+                                      double cornerAngle, bool setRecombine,
+                                      double maxDiffRel, bool ignoreEmbedded)
 {
   /* Filter with topology and geometry */
   std::set<GFace *> faces;
-  for(GFace *gf : candidate_faces)
+  for(GFace *gf : candidate_faces) {
+    if(!ignoreEmbedded &&
+       (gf->embeddedEdges().size() > 0 || gf->embeddedVertices().size() > 0))
+      continue;
     if(faceIsValidQuad(gf, cornerAngle)) { faces.insert(gf); }
+  }
 
   /* Build the topological chords in quad structure */
   Msg::Debug(
     "transfinite automatic: building chords from %li quadrangular faces ...",
     faces.size());
   std::vector<std::set<GEdge *> > chords;
-  build_chords(faces, chords);
+  build_chords(faces, chords, maxDiffRel);
   Msg::Debug("... found %li chords", chords.size());
 
   /* Determine the number of points, set the transfinite curves */
@@ -739,6 +755,9 @@ bool MeshSetTransfiniteFacesAutomatic(std::set<GFace *> &candidate_faces,
       ge->meshAttributes.nbPointsTransfinite = N;
       ge->meshAttributes.typeTransfinite = 1; /* Progression */
       ge->meshAttributes.coeffTransfinite = 1.;
+      if(CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+        ge->meshAttributes.typeTransfinite = 4; /* Use size map */
+      }
       ne += 1;
     }
   }
@@ -747,10 +766,17 @@ bool MeshSetTransfiniteFacesAutomatic(std::set<GFace *> &candidate_faces,
   std::size_t nf = 0;
   for(GFace *gf : faces) {
     bool transfinite = true;
+    std::vector<int> nPoints(4, 0);
+    std::size_t count = 0;
     for(GEdge *ge : gf->edges()) {
-      if(ge->meshAttributes.method != MESH_TRANSFINITE) transfinite = false;
+      if(ge->meshAttributes.method != MESH_TRANSFINITE) {
+        transfinite = false;
+        break;
+      }
+      nPoints[count] = ge->meshAttributes.nbPointsTransfinite;
+      count += 1;
     }
-    if(transfinite) {
+    if(transfinite && nPoints[0] == nPoints[2] && nPoints[1] == nPoints[3]) {
       nf += 1;
       gf->meshAttributes.method = MESH_TRANSFINITE;
       gf->meshAttributes.transfiniteArrangement = 1; /* Right */
diff --git a/Mesh/meshOctreeLibOL.cpp b/Mesh/meshOctreeLibOL.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..deb72c865a405f736ec89614a6df7b1f642d0f83
--- /dev/null
+++ b/Mesh/meshOctreeLibOL.cpp
@@ -0,0 +1,614 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "meshOctreeLibOL.h"
+#include "GFace.h"
+#include "discreteFace.h"
+#include "MVertex.h"
+#include "MTriangle.h"
+
+extern "C" {
+#include "libol1.h"
+}
+
+#include "robin_hood.h"
+
+// Debug vizu
+// #include "geolog.h"
+
+namespace SurfaceProjectorUtils {
+  /* Copy useful functions from contrib/QuadMeshingTools/arrayGeometry.h
+   * because this functions should work without QUADMESHINGTOOLS module */
+  using vec2 = std::array<double, 2>;
+  using vec3 = std::array<double, 3>;
+  inline vec3 operator-(const vec3 &a, const vec3 &b)
+  {
+    return {{a[0] - b[0], a[1] - b[1], a[2] - b[2]}};
+  }
+  inline vec3 operator+(const vec3 &a, const vec3 &b)
+  {
+    return {{a[0] + b[0], a[1] + b[1], a[2] + b[2]}};
+  }
+  inline vec3 operator*(const double &a, const vec3 &b)
+  {
+    return {{a * b[0], a * b[1], a * b[2]}};
+  }
+  inline vec3 operator*(const vec3 &a, const double &b)
+  {
+    return {{a[0] * b, a[1] * b, a[2] * b}};
+  }
+  inline double dot(const vec3 &a, const vec3 &b)
+  {
+    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+  }
+  inline double length2(const vec3 &a) { return dot(a, a); }
+  inline double maxAbs(double x, double y, double z)
+  {
+    return std::max(std::abs(x), std::max(std::abs(y), std::abs(z)));
+  }
+  inline double maxAbs(const vec3 &a) { return maxAbs(a[0], a[1], a[2]); }
+  inline void normalizeFast(vec3 &a)
+  {
+    a = 1. / std::sqrt(length2(a)) * a;
+  } /* no check, not safe, not accurate */
+  inline void normalize(vec3 &a)
+  {
+    double amp = maxAbs(a);
+    if(amp == 0.) { return; }
+    a = amp * a;
+    normalizeFast(a);
+  }
+
+  inline double project_point_segment_l2(const vec3 &query, const vec3 &a,
+                                         const vec3 &b, vec3 &proj,
+                                         double &lambda)
+  {
+    double l2 = length2(a - b);
+    double t = dot(query - a, b - a);
+    if(t <= 0. || l2 == 0.) {
+      proj = a;
+      lambda = 1.;
+      return length2(query - a);
+    }
+    else if(t > l2) {
+      proj = b;
+      lambda = 0.;
+      return length2(query - b);
+    }
+    lambda = 1. - t / l2;
+    proj = lambda * a + (1. - lambda) * b;
+    return length2(query - proj);
+  }
+
+  /* This function is adapted from a equivalent function in the Geogram library,
+   * which is based on https://www.geometrictools.com/Source/Distance3D.html */
+  inline double project_point_triangle_l2(const vec3 &query, const vec3 &p1,
+                                          const vec3 &p2, const vec3 &p3,
+                                          vec3 &proj, double lambda[3])
+  {
+    vec3 diff = p1 - query;
+    vec3 edge0 = p2 - p1;
+    vec3 edge1 = p3 - p1;
+    double a00 = length2(edge0);
+    double a01 = dot(edge0, edge1);
+    double a11 = length2(edge1);
+    double b0 = dot(diff, edge0);
+    double b1 = dot(diff, edge1);
+    double c = length2(diff);
+    double det = ::fabs(a00 * a11 - a01 * a01);
+    double s = a01 * b1 - a11 * b0;
+    double t = a01 * b0 - a00 * b1;
+    double sqrDistance;
+
+    // If the triangle is degenerate
+    if(det < 1e-30) {
+      double cur_l1;
+      vec3 cur_closest;
+      double result;
+      double cur_dist =
+        project_point_segment_l2(query, p1, p2, cur_closest, cur_l1);
+      result = cur_dist;
+      proj = cur_closest;
+      lambda[0] = cur_l1;
+      lambda[1] = 1. - cur_l1;
+      lambda[2] = 0.0;
+      cur_dist = project_point_segment_l2(query, p1, p3, cur_closest, cur_l1);
+      if(cur_dist < result) {
+        result = cur_dist;
+        proj = cur_closest;
+        lambda[0] = cur_l1;
+        lambda[2] = 1. - cur_l1;
+        lambda[1] = 0.0;
+      }
+      cur_dist = project_point_segment_l2(query, p2, p3, cur_closest, cur_l1);
+      if(cur_dist < result) {
+        result = cur_dist;
+        proj = cur_closest;
+        lambda[1] = cur_l1;
+        lambda[2] = 1. - cur_l1;
+        lambda[0] = 0.0;
+      }
+      return result;
+    }
+
+    if(s + t <= det) {
+      if(s < 0.0) {
+        if(t < 0.0) { // region 4
+          if(b0 < 0.0) {
+            t = 0.0;
+            if(-b0 >= a00) {
+              s = 1.0;
+              sqrDistance = a00 + 2.0 * b0 + c;
+            }
+            else {
+              s = -b0 / a00;
+              sqrDistance = b0 * s + c;
+            }
+          }
+          else {
+            s = 0.0;
+            if(b1 >= 0.0) {
+              t = 0.0;
+              sqrDistance = c;
+            }
+            else if(-b1 >= a11) {
+              t = 1.0;
+              sqrDistance = a11 + 2.0 * b1 + c;
+            }
+            else {
+              t = -b1 / a11;
+              sqrDistance = b1 * t + c;
+            }
+          }
+        }
+        else { // region 3
+          s = 0.0;
+          if(b1 >= 0.0) {
+            t = 0.0;
+            sqrDistance = c;
+          }
+          else if(-b1 >= a11) {
+            t = 1.0;
+            sqrDistance = a11 + 2.0 * b1 + c;
+          }
+          else {
+            t = -b1 / a11;
+            sqrDistance = b1 * t + c;
+          }
+        }
+      }
+      else if(t < 0.0) { // region 5
+        t = 0.0;
+        if(b0 >= 0.0) {
+          s = 0.0;
+          sqrDistance = c;
+        }
+        else if(-b0 >= a00) {
+          s = 1.0;
+          sqrDistance = a00 + 2.0 * b0 + c;
+        }
+        else {
+          s = -b0 / a00;
+          sqrDistance = b0 * s + c;
+        }
+      }
+      else { // region 0
+        // minimum at interior query
+        double invDet = double(1.0) / det;
+        s *= invDet;
+        t *= invDet;
+        sqrDistance = s * (a00 * s + a01 * t + 2.0 * b0) +
+                      t * (a01 * s + a11 * t + 2.0 * b1) + c;
+      }
+    }
+    else {
+      double tmp0, tmp1, numer, denom;
+
+      if(s < 0.0) { // region 2
+        tmp0 = a01 + b0;
+        tmp1 = a11 + b1;
+        if(tmp1 > tmp0) {
+          numer = tmp1 - tmp0;
+          denom = a00 - 2.0 * a01 + a11;
+          if(numer >= denom) {
+            s = 1.0;
+            t = 0.0;
+            sqrDistance = a00 + 2.0 * b0 + c;
+          }
+          else {
+            s = numer / denom;
+            t = 1.0 - s;
+            sqrDistance = s * (a00 * s + a01 * t + 2.0 * b0) +
+                          t * (a01 * s + a11 * t + 2.0 * b1) + c;
+          }
+        }
+        else {
+          s = 0.0;
+          if(tmp1 <= 0.0) {
+            t = 1.0;
+            sqrDistance = a11 + 2.0 * b1 + c;
+          }
+          else if(b1 >= 0.0) {
+            t = 0.0;
+            sqrDistance = c;
+          }
+          else {
+            t = -b1 / a11;
+            sqrDistance = b1 * t + c;
+          }
+        }
+      }
+      else if(t < 0.0) { // region 6
+        tmp0 = a01 + b1;
+        tmp1 = a00 + b0;
+        if(tmp1 > tmp0) {
+          numer = tmp1 - tmp0;
+          denom = a00 - 2.0 * a01 + a11;
+          if(numer >= denom) {
+            t = 1.0;
+            s = 0.0;
+            sqrDistance = a11 + 2.0 * b1 + c;
+          }
+          else {
+            t = numer / denom;
+            s = 1.0 - t;
+            sqrDistance = s * (a00 * s + a01 * t + 2.0 * b0) +
+                          t * (a01 * s + a11 * t + 2.0 * b1) + c;
+          }
+        }
+        else {
+          t = 0.0;
+          if(tmp1 <= 0.0) {
+            s = 1.0;
+            sqrDistance = a00 + 2.0 * b0 + c;
+          }
+          else if(b0 >= 0.0) {
+            s = 0.0;
+            sqrDistance = c;
+          }
+          else {
+            s = -b0 / a00;
+            sqrDistance = b0 * s + c;
+          }
+        }
+      }
+      else { // region 1
+        numer = a11 + b1 - a01 - b0;
+        if(numer <= 0.0) {
+          s = 0.0;
+          t = 1.0;
+          sqrDistance = a11 + 2.0 * b1 + c;
+        }
+        else {
+          denom = a00 - 2.0 * a01 + a11;
+          if(numer >= denom) {
+            s = 1.0;
+            t = 0.0;
+            sqrDistance = a00 + 2.0 * b0 + c;
+          }
+          else {
+            s = numer / denom;
+            t = 1.0 - s;
+            sqrDistance = s * (a00 * s + a01 * t + 2.0 * b0) +
+                          t * (a01 * s + a11 * t + 2.0 * b1) + c;
+          }
+        }
+      }
+    }
+
+    // Account for numerical round-off error.
+    if(sqrDistance < 0.0) { sqrDistance = 0.0; }
+
+    proj = p1 + s * edge0 + t * edge1;
+    lambda[0] = 1.0 - s - t;
+    lambda[1] = s;
+    lambda[2] = t;
+    return sqrDistance;
+  }
+} // namespace SurfaceProjectorUtils
+
+using namespace SurfaceProjectorUtils;
+
+SurfaceProjector::SurfaceProjector(GFace *gf_) : gf(NULL), OctIdx(0)
+{
+  std::vector<MTriangle *> triangles = gf->triangles;
+  if(gf->quadrangles.size() > 0) {
+    Msg::Error("SurfaceProjector: quads not implemented yet, should create "
+               "fake MTriangle* just for initialize()");
+    abort();
+  }
+  bool ok = initialize(gf_, triangles);
+  if(!ok) { Msg::Error("failed to initialize SurfaceProjector"); }
+}
+
+void SurfaceProjector::clear()
+{
+  if(OctIdx != 0) {
+    Msg::Debug("free libOL octree (OctIdx: %li)", OctIdx);
+    LolFreeOctree(OctIdx);
+    OctIdx = 0;
+  }
+  points.clear();
+  triangles.clear();
+  triangle_uvs.clear();
+}
+
+SurfaceProjector::~SurfaceProjector() { clear(); }
+
+bool SurfaceProjector::setAnalyticalProjection(GFace *gf)
+{
+  if(gf->geomType() == GFace::GeomType::Sphere) {
+    double radius = 0.;
+    SPoint3 center;
+    if(gf->isSphere(radius, center)) {
+      analyticalShape = GFace::GeomType::Sphere;
+      useAnalyticalFormula = true;
+      analyticalParameters[0] = center.x();
+      analyticalParameters[1] = center.y();
+      analyticalParameters[2] = center.z();
+      analyticalParameters[3] = radius;
+      return true;
+    }
+  }
+
+  Msg::Error(
+    "Surface projecor: analytical formula for given shape not supported");
+  return false;
+}
+
+bool SurfaceProjector::initialize(GFace *gf_,
+                                  const std::vector<MTriangle *> &gfTriangles)
+{
+  clear();
+  gf = gf_;
+  bool paramAvailable = gf->haveParametrization();
+
+  const int BasIdx = 1; /* indices start at one in libOL */
+
+  /* If periodic parametrization, get periods */
+  bool disableParamPer = false;
+  if(paramAvailable && (gf->periodic(0) || gf->periodic(1))) {
+    disableParamPer = true;
+  }
+
+  /* Collect coordinates and triangle-continuous uv param */
+  robin_hood::unordered_map<MVertex *, int32_t> old2new;
+  int32_t count = 0;
+  triangles.reserve(gfTriangles.size());
+  points.reserve(gfTriangles.size());
+  if(paramAvailable) {
+    triangle_uvs.reserve(gfTriangles.size());
+    if(disableParamPer) triangle_no_uv_eval.reserve(gfTriangles.size());
+  }
+  for(MTriangle *f : gfTriangles) {
+    std::array<int32_t, 3> tri_pts;
+    std::array<vec2, 3> tri_uvs;
+    bool check_periodicity = false;
+    bool no_eval = false;
+    for(size_t lv = 0; lv < f->getNumVertices(); ++lv) {
+      MVertex *v = f->getVertex(lv);
+      auto it = old2new.find(v);
+      if(it == old2new.end()) {
+        old2new[v] = count;
+        tri_pts[lv] = count + BasIdx;
+        points.push_back(v->point());
+        count += 1;
+      }
+      else {
+        tri_pts[lv] = it->second + BasIdx;
+      }
+
+      if(paramAvailable) { /* Get the uv in GFace */
+        bool onGf = (dynamic_cast<GFace *>(v->onWhat()) == gf);
+        if(onGf) {
+          v->getParameter(0, tri_uvs[lv][0]);
+          v->getParameter(1, tri_uvs[lv][1]);
+        }
+        else {
+          check_periodicity = true;
+        }
+      }
+    }
+
+    if(check_periodicity) {
+      bool found = false;
+      for(size_t lv = 0; lv < 3; ++lv) {
+        MVertex *v1 = f->getVertex(lv);
+        bool onGf = (dynamic_cast<GFace *>(v1->onWhat()) == gf);
+        if(onGf) { /* If neither of the 3 are on surface, takes random ... */
+          MVertex *v2 = f->getVertex((lv + 1) % 3);
+          MVertex *v3 = f->getVertex((lv + 2) % 3);
+          SPoint2 param1;
+          SPoint2 param2;
+          SPoint2 param3;
+          reparamMeshEdgeOnFace(v1, v2, gf, param1, param2);
+          reparamMeshEdgeOnFace(v1, v3, gf, param1, param3);
+          tri_uvs[(lv + 0) % 3] = {{param1.x(), param1.y()}};
+          tri_uvs[(lv + 1) % 3] = {{param2.x(), param2.y()}};
+          tri_uvs[(lv + 2) % 3] = {{param3.x(), param3.y()}};
+          found = true;
+          break;
+        }
+      }
+      if(!found) {
+        /* Triangle with no vertex inside the GFace, difficult to get
+         * good UV parametrization, we use center projection to get
+         * a initial guess */
+        SPoint3 center = f->barycenter();
+        double initialGuess[2] = {0., 0.};
+        GPoint proj = gf->closestPoint(center, initialGuess);
+        if(proj.succeeded()) {
+          MFaceVertex cv(proj.x(), proj.y(), proj.z(), gf, proj.u(), proj.v());
+          MVertex *v1 = f->getVertex(0);
+          MVertex *v2 = f->getVertex(1);
+          MVertex *v3 = f->getVertex(2);
+          SPoint2 paramc;
+          SPoint2 param1;
+          SPoint2 param2;
+          SPoint2 param3;
+          reparamMeshEdgeOnFace(&cv, v1, gf, paramc, param1);
+          reparamMeshEdgeOnFace(&cv, v2, gf, paramc, param2);
+          reparamMeshEdgeOnFace(&cv, v3, gf, paramc, param3);
+          tri_uvs[0] = {{param1.x(), param1.y()}};
+          tri_uvs[1] = {{param2.x(), param2.y()}};
+          tri_uvs[2] = {{param3.x(), param3.y()}};
+        }
+        else {
+          no_eval = true;
+          tri_uvs[0] = {{0., 0.}};
+          tri_uvs[1] = {{0., 0.}};
+          tri_uvs[2] = {{0., 0.}};
+        }
+      }
+    }
+
+    triangles.push_back(tri_pts);
+    if(paramAvailable) triangle_uvs.push_back(tri_uvs);
+    if(paramAvailable && disableParamPer)
+      triangle_no_uv_eval.push_back(no_eval);
+    // Debug to visualize param
+    // {
+    //   GeoLog::add({points[tri_pts[0]-1], points[tri_pts[1]-1],
+    //   points[tri_pts[2]-1]},
+    //       std::vector<double>{tri_uvs[0][0],tri_uvs[1][0],tri_uvs[2][0]},
+    //       "sp_u");
+    //   GeoLog::add({points[tri_pts[0]-1], points[tri_pts[1]-1],
+    //   points[tri_pts[2]-1]},
+    //       std::vector<double>{tri_uvs[0][1],tri_uvs[1][1],tri_uvs[2][1]},
+    //       "sp_v");
+    // }
+  }
+
+  points.shrink_to_fit();
+  triangles.shrink_to_fit();
+  triangle_uvs.shrink_to_fit();
+
+  // Build an octree from a surface mesh
+  int32_t NmbVer = (int32_t)points.size();
+  double *VerTab1 = points[0].data();
+  double *VerTab2 = points[1].data();
+  // double* VerTab2  = VerTab1[3];
+  int32_t NmbTri = (int32_t)triangles.size();
+  int32_t *TriTab1 = triangles[0].data();
+  // int32_t* TriTab2  = TriTab1[3];
+  int32_t *TriTab2 = triangles[1].data();
+  Msg::Debug("create libOL octree (%i vertices and %i triangles)", NmbVer,
+             NmbTri);
+  OctIdx = LolNewOctree(NmbVer, VerTab1, VerTab2, 0, NULL, NULL, NmbTri,
+                        TriTab1, TriTab2, 0, NULL, NULL, 0, NULL, NULL, 0, NULL,
+                        NULL, 0, NULL, NULL, 0, NULL, NULL, BasIdx, 1);
+
+  return true;
+}
+
+GPoint failedProjection()
+{
+  GPoint fail(DBL_MAX, DBL_MAX, DBL_MAX, NULL);
+  fail.setNoSuccess();
+  return fail;
+}
+
+GPoint sphereProjection(GFace *gf, const double query[3],
+                        const std::array<double, 10> &analyticalParameters)
+{
+  vec3 dir = {{query[0] - analyticalParameters[0],
+               query[1] - analyticalParameters[1],
+               query[2] - analyticalParameters[2]}};
+  if(length2(dir) == 0.) { return failedProjection(); }
+  normalize(dir);
+  const vec3 newPos = {{
+    analyticalParameters[0] + analyticalParameters[3] * dir[0],
+    analyticalParameters[1] + analyticalParameters[3] * dir[1],
+    analyticalParameters[2] + analyticalParameters[3] * dir[2]}};
+  return GPoint(newPos[0], newPos[1], newPos[2], gf);
+}
+
+GPoint SurfaceProjector::closestPoint(const double query[3], bool evalOnCAD,
+                                      bool projectOnCAD) const
+{
+  if(useAnalyticalFormula) {
+    if(analyticalShape == GFace::GeomType::Sphere) {
+      return sphereProjection(gf, query, analyticalParameters);
+    }
+    else {
+      Msg::Error(
+        "SurfaceProjector::closestPoint(): no analytical formula for shape");
+      return failedProjection();
+    }
+  }
+
+  if(OctIdx == 0) {
+    Msg::Error("SurfaceProjector::closestPoint(): no octree (face %i, %li "
+               "points, %li triangles)",
+               gf->tag(), points.size(), triangles.size());
+    return failedProjection();
+  }
+
+  const int BasIdx = 1; /* indices start at one in libOL */
+
+  /* Octree query */
+  double crd[3] = {query[0], query[1], query[2]};
+  double dis;
+  int idx = LolGetNearest(OctIdx, LolTypTri, crd, &dis, 0, NULL, NULL, 0);
+  if(idx <= 0) {
+    Msg::Warning("SurfaceProjector::closestPoint(): no closest triangle found "
+                 "(face %i, %li triangles)",
+                 gf->tag(), triangles.size());
+    return failedProjection();
+  }
+  size_t tri = idx - 1;
+
+  /* Projection to get the barycentric coordinates */
+  const vec3 queryv3 = {{query[0], query[1], query[2]}};
+  const vec3 &p1 = points[triangles[tri][0] - BasIdx];
+  const vec3 &p2 = points[triangles[tri][1] - BasIdx];
+  const vec3 &p3 = points[triangles[tri][2] - BasIdx];
+
+  // {
+  //   int rdi = rand();
+  //   GeoLog::add({p1,p2,p3},0.,"proj_"+std::to_string(rdi));
+  //   GeoLog::add(queryv3,double(dis),"proj_"+std::to_string(rdi));
+  // }
+
+  double lambda[3];
+  vec3 cproj;
+  project_point_triangle_l2(queryv3, p1, p2, p3, cproj, lambda);
+  GPoint proj;
+  if(triangle_uvs.size() > 0) {
+    double uv[2] = {0., 0.};
+    uv[0] = lambda[0] * triangle_uvs[tri][0][0] +
+            lambda[1] * triangle_uvs[tri][1][0] +
+            lambda[2] * triangle_uvs[tri][2][0];
+    uv[1] = lambda[0] * triangle_uvs[tri][0][1] +
+            lambda[1] * triangle_uvs[tri][1][1] +
+            lambda[2] * triangle_uvs[tri][2][1];
+    if(projectOnCAD) {
+      SPoint3 queryp3(query[0], query[1], query[2]);
+      GPoint cadProj = gf->closestPoint(queryp3, uv);
+      if(cadProj.succeeded()) { proj = cadProj; }
+    }
+    else if(evalOnCAD) {
+      if(triangle_no_uv_eval.size() > 0 && triangle_no_uv_eval[tri]) {
+        /* 3D projection */
+        SPoint3 queryp3(query[0], query[1], query[2]);
+        GPoint cadProj = gf->closestPoint(queryp3, uv);
+        if(cadProj.succeeded()) { proj = cadProj; }
+      }
+      else {
+        proj = gf->point(uv[0], uv[1]);
+      }
+    }
+    else {
+      proj = GPoint(cproj[0], cproj[1], cproj[2], gf, uv[0], uv[1]);
+    }
+  }
+  else {
+    proj = GPoint(cproj[0], cproj[1], cproj[2], gf);
+  }
+
+  return proj;
+}
diff --git a/Mesh/meshOctreeLibOL.h b/Mesh/meshOctreeLibOL.h
new file mode 100644
index 0000000000000000000000000000000000000000..838edf016ec396f7c2e51cd47e335e4b4992125a
--- /dev/null
+++ b/Mesh/meshOctreeLibOL.h
@@ -0,0 +1,90 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#ifndef MESH_OCTREE_LIB_OL
+#define MESH_OCTREE_LIB_OL
+
+#include <vector>
+#include <array>
+#include <string>
+#include "GPoint.h"
+#include "GFace.h"
+
+class MTriangle;
+
+/**
+ * @brief Class to project 3D points on a triangulated surface.
+ *        If a parametrization is available, the UV are interpolated
+ *        at the triangle projection.
+ *        Not associated to the mesh elements of a GEntity, so it can be
+ *        used on mesh sub-patches or on background mesh.
+ */
+class SurfaceProjector {
+public:
+  SurfaceProjector() : gf(NULL), OctIdx(0) {}
+  SurfaceProjector(GFace *gf); /* read triangles and quads from GFace */
+  SurfaceProjector(SurfaceProjector const &) = delete;
+  SurfaceProjector &operator=(SurfaceProjector const &) = delete;
+  ~SurfaceProjector();
+
+  /**
+   * @brief Fill the triangles and uvs from the triangles, then build the
+   * octree. Overwrite existing triangulation/octree if there is one.
+   *
+   * @param gf The CAD face containing the triangles
+   * @param triangles The triangles used to build the triangulated geometry
+   * support
+   *
+   * @return true if success
+   */
+  bool initialize(GFace *gf, const std::vector<MTriangle *> &triangles);
+
+  /**
+   * @brief Clear the triangulation and delete the octree
+   */
+  void clear();
+
+  /**
+   * @brief The SurfaceProjector can project with an analytical formula instead
+   * of a triangulation and a octree Supported shapes: Sphere
+   *
+   * @param gf The face containing the analytical parameters
+   *
+   * @return true if success
+   */
+  bool setAnalyticalProjection(GFace *gf);
+
+  /**
+   * @brief Get the query closest point on the triangulated surface.
+   *
+   * @param query[3] 3D coordinates of the query point
+   * @param evalOnCAD If param available, evaluate the face CAD mapping at the
+   * interpolated UV
+   * @param projectOnCAD If param available, call closestPoint from the CAD
+   * geometry engine, with the interpolated UV as initial guess
+   *
+   * @return the projection, check GPoint::succeeded() for projection success /
+   * failure
+   */
+  GPoint closestPoint(const double query[3], bool evalOnCAD = false,
+                      bool projectOnCAD = false) const;
+
+public:
+  GFace *gf;
+
+protected:
+  std::vector<std::array<double, 3> > points;
+  std::vector<std::array<int32_t, 3> > triangles;
+  std::vector<std::array<std::array<double, 2>, 3> > triangle_uvs;
+  std::vector<bool> triangle_no_uv_eval; /* no eval. at param. singularity */
+  int64_t OctIdx; /* pointer to libOL octree (C structure) */
+
+  /* For simple CAD shapes, we have analytical formula for projection */
+  bool useAnalyticalFormula = false;
+  GFace::GeomType analyticalShape = GFace::GeomType::Unknown;
+  std::array<double, 10> analyticalParameters;
+};
+
+#endif
diff --git a/Mesh/meshPolyMesh.h b/Mesh/meshPolyMesh.h
new file mode 100644
index 0000000000000000000000000000000000000000..47a245f8999df0de3ae9666ff37bb420dcbc8084
--- /dev/null
+++ b/Mesh/meshPolyMesh.h
@@ -0,0 +1,331 @@
+// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#ifndef MESH_POLYMESH_H
+#define MESH_POLYMESH_H
+
+#include <vector>
+#include <stack>
+#include <stdio.h>
+#include "SVector3.h"
+
+class PolyMesh {
+public:
+  class HalfEdge;
+  class Face;
+  class Vertex;
+
+  class Vertex {
+  public:
+    Vertex(double x, double y, double z, int _d = -1)
+      : position(x, y, z), he(NULL), data(_d)
+    {
+    }
+    SVector3 position;
+    PolyMesh::HalfEdge *he; // one incident half edge
+    int data;
+  };
+
+  class HalfEdge {
+  public:
+    HalfEdge(Vertex *vv)
+      : v(vv), f(NULL), prev(NULL), next(NULL), opposite(NULL), data(-1)
+    {
+    }
+    Vertex *v; // origin
+    Face *f; // incident face
+    HalfEdge *prev; // previous half edge on the face
+    HalfEdge *next; // next half edge on the face
+    HalfEdge *opposite; // opposite half edge (twin)
+    int data;
+  };
+
+  class Face {
+  public:
+    Face(HalfEdge *e) : he(e), data(-1) {}
+    HalfEdge *he; // one half edge of the face
+    int data;
+  };
+
+  std::vector<Vertex *> vertices;
+  std::vector<HalfEdge *> hedges;
+  std::vector<Face *> faces;
+
+  void reset()
+  {
+    for(auto it : vertices) delete it;
+    for(auto it : hedges) delete it;
+    for(auto it : faces) delete it;
+  }
+
+  ~PolyMesh() { reset(); }
+
+  void print4debug(const int debugTag)
+  {
+    char name[256];
+    sprintf(name, "polyMesh%d.pos", debugTag);
+    FILE *f = fopen(name, "w");
+    fprintf(f, "View \" %s \"{\n", name);
+    for(auto it : faces) {
+      HalfEdge *he0 = it->he;
+      HalfEdge *he1 = it->he->next;
+      HalfEdge *he2 = it->he->next->next;
+      fprintf(f, "ST(%g,%g,0,%g,%g,0,%g,%g,0){%d,%d,%d};\n",
+              he0->v->position.x(), he0->v->position.y(), he1->v->position.x(),
+              he1->v->position.y(), he2->v->position.x(), he2->v->position.y(),
+              it->data, it->data, it->data);
+    }
+    for(auto it : hedges) {
+      HalfEdge *he = it;
+      if(he->data >= 0) {
+        fprintf(f, "SL(%g,%g,0,%g,%g,0){%d,%d};\n", he->v->position.x(),
+                he->v->position.y(), he->opposite->v->position.x(),
+                he->opposite->v->position.y(), he->data, he->data);
+      }
+    }
+
+    fprintf(f, "};\n");
+    fclose(f);
+  }
+
+  // compute the degree of a given vertex v
+  inline int degree(const Vertex *v) const
+  {
+    HalfEdge *he = v->he;
+    size_t count = 0;
+    do {
+      he = he->opposite;
+      if(he == NULL) return -1;
+      he = he->next;
+      count++;
+    } while(he != v->he);
+    return count;
+  }
+
+  inline HalfEdge *getEdge(Vertex *v0, Vertex *v1)
+  {
+    HalfEdge *he = v0->he;
+    do {
+      if(he->next->v == v1) return he;
+      he = he->opposite;
+      if(he == NULL) return NULL;
+      he = he->next;
+    } while(he != v0->he);
+    return NULL;
+  }
+
+  inline void createFace(Face *f, Vertex *v0, Vertex *v1, Vertex *v2,
+                         HalfEdge *he0, HalfEdge *he1, HalfEdge *he2)
+  {
+    he0->v = v0;
+    he1->v = v1;
+    he2->v = v2;
+    v0->he = he0;
+    v1->he = he1;
+    v2->he = he2;
+
+    he0->next = he1;
+    he1->prev = he0;
+    he1->next = he2;
+    he2->prev = he1;
+    he2->next = he0;
+    he0->prev = he2;
+    he0->f = he1->f = he2->f = f;
+    f->he = he0;
+  }
+
+  // swap without asking questions
+  //
+  //         he1
+  // v2 ------->------ v3
+  //    | \          |
+  //    |   \ he0    | he2
+  // heo2|     \      |
+  //    |  heo0 \    |
+  //    |         \  |
+  // v1 -----<------- v0
+  //          heo1
+  //
+  //          he1
+  //    --------------
+  //    |         /  |
+  //    |   he0 /    | he2
+  // heo2|    /       |
+  //    |  /heo0     |
+  //    |/           |
+  //    --------------
+  //          heo1
+  //
+
+  inline int swap_edge(HalfEdge *he0)
+  {
+    HalfEdge *heo0 = he0->opposite;
+    if(heo0 == NULL) return -1;
+
+    HalfEdge *he1 = he0->next;
+    HalfEdge *he2 = he1->next;
+    HalfEdge *heo1 = heo0->next;
+    HalfEdge *heo2 = heo1->next;
+
+    Vertex *v0 = heo1->v;
+    Vertex *v1 = heo2->v;
+    Vertex *v2 = heo0->v;
+    Vertex *v3 = he2->v;
+
+    createFace(he0->f, v0, v1, v3, heo1, heo0, he2);
+    createFace(heo2->f, v1, v2, v3, heo2, he1, he0);
+    return 0;
+  }
+
+  //
+  // v0   he0
+  // ------------------>------ v1
+  // |                      /
+  // |                   /
+  // |      v         /
+  // |he2          /
+  // |          /  he1
+  // |       /
+  // |    /
+  // |/
+  // v2
+
+  inline void initialize_rectangle(double xmin, double xmax, double ymin,
+                                   double ymax)
+  {
+    reset();
+    Vertex *v_mm = new PolyMesh::Vertex(xmin, ymin, 0);
+    vertices.push_back(v_mm);
+    Vertex *v_mM = new PolyMesh::Vertex(xmin, ymax, 0);
+    vertices.push_back(v_mM);
+    Vertex *v_MM = new PolyMesh::Vertex(xmax, ymax, 0);
+    vertices.push_back(v_MM);
+    Vertex *v_Mm = new PolyMesh::Vertex(xmax, ymin, 0);
+    vertices.push_back(v_Mm);
+    HalfEdge *mm_MM = new HalfEdge(v_mm);
+    HalfEdge *MM_Mm = new HalfEdge(v_MM);
+    HalfEdge *Mm_mm = new HalfEdge(v_Mm);
+    hedges.push_back(mm_MM);
+    hedges.push_back(MM_Mm);
+    hedges.push_back(Mm_mm);
+    Face *f0 = new Face(mm_MM);
+    faces.push_back(f0);
+    createFace(f0, v_mm, v_MM, v_Mm, mm_MM, MM_Mm, Mm_mm);
+
+    HalfEdge *MM_mm = new HalfEdge(v_MM);
+    HalfEdge *mm_mM = new HalfEdge(v_mm);
+    HalfEdge *mM_MM = new HalfEdge(v_mM);
+    hedges.push_back(MM_mm);
+    hedges.push_back(mm_mM);
+    hedges.push_back(mM_MM);
+    Face *f1 = new Face(MM_mm);
+    faces.push_back(f1);
+    createFace(f1, v_MM, v_mm, v_mM, MM_mm, mm_mM, mM_MM);
+
+    MM_mm->opposite = mm_MM;
+    mm_MM->opposite = MM_mm;
+  }
+
+  inline int split_triangle(double x, double y, double z, Face *f,
+                            int (*doSwap)(PolyMesh::HalfEdge *, void *) = NULL,
+                            void *data = NULL,
+                            std::vector<HalfEdge *> *_t = NULL)
+  {
+    Vertex *v = new PolyMesh::Vertex(x, y, z); // one more vertex
+
+    vertices.push_back(v);
+
+    HalfEdge *he0 = f->he;
+    HalfEdge *he1 = he0->next;
+    HalfEdge *he2 = he1->next;
+
+    Vertex *v0 = he0->v;
+    Vertex *v1 = he1->v;
+    Vertex *v2 = he2->v;
+    HalfEdge *hev0 = new PolyMesh::HalfEdge(v);
+    HalfEdge *hev1 = new PolyMesh::HalfEdge(v);
+    HalfEdge *hev2 = new PolyMesh::HalfEdge(v);
+
+    HalfEdge *he0v = new PolyMesh::HalfEdge(v0);
+    HalfEdge *he1v = new PolyMesh::HalfEdge(v1);
+    HalfEdge *he2v = new PolyMesh::HalfEdge(v2);
+
+    hedges.push_back(hev0);
+    hedges.push_back(hev1);
+    hedges.push_back(hev2);
+    hedges.push_back(he0v);
+    hedges.push_back(he1v);
+    hedges.push_back(he2v);
+
+    hev0->opposite = he0v;
+    he0v->opposite = hev0;
+    hev1->opposite = he1v;
+    he1v->opposite = hev1;
+    hev2->opposite = he2v;
+    he2v->opposite = hev2;
+
+    Face *f0 = f;
+    f->he = hev0;
+    Face *f1 = new Face(hev1);
+    Face *f2 = new Face(hev2);
+    f1->data = f2->data = f0->data;
+
+    faces.push_back(f1);
+    faces.push_back(f2);
+
+    createFace(f0, v0, v1, v, he0, he1v, hev0);
+    createFace(f1, v1, v2, v, he1, he2v, hev1);
+    createFace(f2, v2, v0, v, he2, he0v, hev2);
+
+    if(doSwap) {
+      std::stack<HalfEdge *> _stack;
+      _stack.push(he0);
+      _stack.push(he1);
+      _stack.push(he2);
+      std::vector<HalfEdge *> _touched;
+      while(!_stack.empty()) {
+        HalfEdge *he = _stack.top();
+        _touched.push_back(he);
+        _stack.pop();
+        //	printf("do we swap %g %g --> %g %g ?\n",
+        //		       he->v->position.x(),he->v->position.y(),
+        //	he->next->v->position.x(),he->next->v->position.y());
+        if(doSwap(he, data) == 1) {
+          //	  printf("YES\n");
+          swap_edge(he);
+
+          HalfEdge *H[2] = {he, he->opposite};
+
+          for(int k = 0; k < 2; k++) {
+            if(H[k] == NULL) continue;
+            HalfEdge *heb = H[k]->next;
+            HalfEdge *hebo = heb->opposite;
+
+            if(std::find(_touched.begin(), _touched.end(), heb) ==
+                 _touched.end() &&
+               std::find(_touched.begin(), _touched.end(), hebo) ==
+                 _touched.end()) {
+              _stack.push(heb);
+            }
+
+            HalfEdge *hec = heb->next;
+            HalfEdge *heco = hec->opposite;
+
+            if(std::find(_touched.begin(), _touched.end(), hec) ==
+                 _touched.end() &&
+               std::find(_touched.begin(), _touched.end(), heco) ==
+                 _touched.end()) {
+              _stack.push(hec);
+            }
+          }
+        }
+      }
+      if(_t) *_t = _touched;
+    }
+    return 0;
+  }
+};
+
+#endif
diff --git a/Mesh/meshQuadQuasiStructured.cpp b/Mesh/meshQuadQuasiStructured.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..761290bb8f5f1db841da968b6b5afe7290457555
--- /dev/null
+++ b/Mesh/meshQuadQuasiStructured.cpp
@@ -0,0 +1,2366 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "meshQuadQuasiStructured.h"
+
+#include <array>
+#include <queue>
+
+#include "GmshConfig.h"
+#include "GmshMessage.h"
+#include "Numeric.h"
+#include "Context.h"
+#include "OS.h"
+#include "GModel.h"
+#include "meshGEdge.h"
+#include "meshGFace.h"
+#include "meshGRegion.h"
+#include "BackgroundMesh.h"
+#include "Generator.h"
+#include "Field.h"
+#include "MElement.h"
+#include "MTriangle.h"
+#include "MQuadrangle.h"
+#include "MLine.h"
+#include "gmsh.h"
+#include "meshRefine.h"
+#include "meshOctreeLibOL.h"
+#include "robin_hood.h"
+
+#if defined(HAVE_POST)
+#include "PView.h"
+#include "PViewData.h"
+#include "PViewDataList.h"
+#include "PViewDataGModel.h"
+#include "PViewOptions.h"
+#endif
+#if defined(HAVE_FLTK)
+#include "FlGui.h"
+#endif
+
+#if defined(HAVE_QUADMESHINGTOOLS)
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "qmtCrossField.h"
+#include "qmtSizeMap.h"
+#include "qmtCurveQuantization.h"
+#include "qmtDiskQuadrangulationRemeshing.h"
+#include "qmtQuadCavityRemeshing.h"
+#include "qmtMeshGeometryOptimization.h"
+#include "arrayGeometry.h"
+#include "geolog.h"
+
+using namespace CppUtils;
+using namespace ArrayGeometry;
+
+template <typename Key, typename T, typename Hash = robin_hood::hash<Key>,
+          typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+using unordered_map =
+  robin_hood::detail::Table<true, MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+template <typename Key, typename Hash = robin_hood::hash<Key>,
+          typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+using unordered_set =
+  robin_hood::detail::Table<true, MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+const std::string BMESH_NAME = "bmesh_quadqs";
+
+constexpr bool PARANO_QUALITY = false;
+constexpr bool PARANO_VALIDITY = false;
+
+
+/* scaling applied on integer values stored in view (background field),
+ * so the visualization is not broken by the integers */
+constexpr double VIEW_INT_SCALING = 1.e-8;
+
+int buildBackgroundField(
+  GModel *gm, const std::vector<MTriangle *> &global_triangles,
+  const std::vector<std::array<double, 9> > &global_triangle_directions,
+  const std::unordered_map<MVertex *, double> &global_size_map,
+  const std::vector<std::array<double, 5> >& global_singularity_list,
+  const std::string &viewName = "guiding_field")
+{
+  Msg::Debug("build background guiding field ...");
+  if(global_triangles.size() != global_triangle_directions.size()) {
+    Msg::Error("build background field: incoherent sizes in input");
+    return -1;
+  }
+
+  std::vector<double> datalist;
+  datalist.reserve(global_triangles.size() * 18);
+  for(size_t i = 0; i < global_triangles.size(); ++i) {
+    MTriangle *t = global_triangles[i];
+    /* Triangle coordinates */
+    for(size_t d = 0; d < 3; ++d) {
+      for(size_t lv = 0; lv < 3; ++lv) {
+        datalist.push_back(t->getVertex(lv)->point().data()[d]);
+      }
+    }
+    /* Vector field */
+    for(size_t lv = 0; lv < 3; ++lv) {
+      MVertex *v = t->getVertex(lv);
+      auto it = global_size_map.find(v);
+      if(it == global_size_map.end()) {
+        Msg::Error("Building background field, triangle vertex not found in "
+                   "global size map");
+        return -1;
+      }
+      double siz = it->second;
+      for(size_t d = 0; d < 3; ++d) {
+        double val = siz * global_triangle_directions[i][3 * lv + d];
+        datalist.push_back(val);
+      }
+    }
+  }
+
+#if defined(HAVE_POST)
+  PView *view = PView::getViewByName(viewName);
+  if(view == NULL) {
+    view = new PView();
+    view->getData()->setName(viewName);
+  }
+  PViewDataList *d = dynamic_cast<PViewDataList *>(view->getData());
+  if(!d) { // change the view type
+    std::string name = view->getData()->getName();
+    delete view->getData();
+    d = new PViewDataList();
+    d->setName(name);
+    d->setFileName(name + ".pos");
+    view->setData(d);
+  }
+
+  size_t numElements = datalist.size() / (9 + 9);
+  int idxtypeVT = 7; /* Post type: VT */
+  d->importList(idxtypeVT, numElements, datalist, false);
+
+#if defined(HAVE_FLTK)
+  view->getOptions()->visible = 0;
+  if(FlGui::available()) FlGui::instance()->updateViews(true, true);
+#endif
+
+  /* singularities */
+  if (global_singularity_list.size() > 0){
+    int idxtypeVP = 1; /* Post type: VP */
+    std::vector<double> datalistSING;
+    datalistSING.reserve(global_singularity_list.size()*6);
+    for (size_t i = 0; i < global_singularity_list.size(); ++i) {
+      datalistSING.push_back(global_singularity_list[i][2]); /* x */
+      datalistSING.push_back(global_singularity_list[i][3]); /* y */
+      datalistSING.push_back(global_singularity_list[i][4]); /* z */
+      datalistSING.push_back(VIEW_INT_SCALING*double(global_singularity_list[i][0])); /* gf->tag() */
+      datalistSING.push_back(VIEW_INT_SCALING*double(global_singularity_list[i][1])); /* index */
+      datalistSING.push_back(0.); /* empty */
+    }
+    d->importList(idxtypeVP, datalistSING.size()/6, datalistSING, false);
+  }
+
+
+  d->finalize();
+
+  gm->getFields()->setBackgroundMesh(view->getTag());
+
+  if(Msg::GetVerbosity() >= 99) {
+    std::string name = gm->getName() + "_bgm.pos";
+    Msg::Warning("export background field to '%s' ", name.c_str());
+    view->write(name, 0);
+  }
+
+  return 0;
+#else
+  Msg::Error(
+    "Module POST (post-processing) required to create background field view");
+  return -1;
+#endif
+}
+
+void showCrossFieldInView(
+  const std::vector<MTriangle *> &global_triangles,
+  const std::vector<std::array<double, 9> > &global_triangle_directions,
+  const std::string &viewName = "cross_field")
+{
+  for(size_t i = 0; i < global_triangles.size(); ++i) {
+    for(size_t lv = 0; lv < 3; ++lv) {
+      MVertex *v = global_triangles[i]->getVertex(lv);
+      vec3 dir = {{global_triangle_directions[i][3 * lv + 0],
+                   global_triangle_directions[i][3 * lv + 1],
+                   global_triangle_directions[i][3 * lv + 2]}};
+      std::array<double, 3> pt = v->point();
+      GeoLog::add(pt, dir, viewName);
+    }
+  }
+  GeoLog::flush();
+}
+
+void showUVParametrization(GFace *gf, const std::vector<MElement *> &elts,
+                           const std::string &viewName = "uv")
+{
+  std::vector<std::vector<double> > values_u;
+  std::vector<std::vector<double> > values_v;
+  for(MElement *t : elts) {
+    std::vector<SPoint2> tris_uvs = paramOnElement(gf, t);
+    std::vector<double> us(tris_uvs.size());
+    std::vector<double> vs(tris_uvs.size());
+    for(size_t k = 0; k < us.size(); ++k) {
+      us[k] = tris_uvs[k][0];
+      vs[k] = tris_uvs[k][1];
+    }
+    values_u.push_back(us);
+    values_v.push_back(vs);
+  }
+  GeoLog::add(elts, values_u, viewName + "_u");
+  GeoLog::add(elts, values_v, viewName + "_v");
+}
+
+void showUVParametrization(GlobalBackgroundMesh &bgm,
+                           const std::string &viewName = "uv")
+{
+  for(auto &kv : bgm.faceBackgroundMeshes) {
+    GFace *gf = kv.first;
+    if(!gf->haveParametrization()) continue;
+    std::vector<MElement *> tris;
+    for(MTriangle &t : kv.second.triangles) { tris.push_back(&t); }
+    showUVParametrization(gf, tris, viewName);
+  }
+  GeoLog::flush();
+}
+
+void printSizeMapStats(const std::vector<MTriangle *> &triangles,
+                       std::unordered_map<MVertex *, double> &sizemap)
+{
+  double vmin = DBL_MAX;
+  double vmax = -DBL_MAX;
+  for(auto &kv : sizemap) {
+    vmin = std::min(vmin, kv.second);
+    vmax = std::max(vmax, kv.second);
+  }
+  double integral = 0.;
+  for(MTriangle *t : triangles) {
+    double values[3] = {0, 0, 0};
+    for(size_t lv = 0; lv < 3; ++lv) {
+      MVertex *v = t->getVertex(lv);
+      auto it = sizemap.find(v);
+      values[lv] = it->second;
+      ;
+    }
+    double a = std::abs(t->getVolume());
+    integral +=
+      a * 1. / std::pow(1. / 3. * (values[0] + values[1] + values[2]), 2);
+  }
+  Msg::Info("Size map statistics: min=%.3f, max=%.3f, target #elements: %.3f",
+            vmin, vmax, integral);
+}
+
+int fillSizemapFromTriangleSizes(const std::vector<MTriangle *> &triangles,
+                                 std::unordered_map<MVertex *, double> &sizeMap)
+{
+  std::unordered_map<MVertex *, std::vector<MVertex *> > v2v;
+  buildVertexToVertexMap(triangles, v2v);
+  for(auto &kv : v2v) {
+    MVertex *v = kv.first;
+    double sum = 0.;
+    double avg = 0.;
+    for(MVertex *v2 : kv.second) {
+      avg += v->distance(v2);
+      sum += 1.;
+    }
+    if(sum == 0.) continue;
+    sizeMap[v] = avg / sum;
+  }
+  return 0;
+}
+
+int fillSizemapFromScalarBackgroundField(
+  GModel *gm, const std::vector<MTriangle *> &triangles,
+  std::unordered_map<MVertex *, double> &sizeMap)
+{
+  Field *field = nullptr;
+  FieldManager *fields = gm->getFields();
+  if(fields->getBackgroundField() > 0) {
+    field = fields->get(fields->getBackgroundField());
+    if(field && field->numComponents() != 1) { field = nullptr; }
+  }
+  if(field == nullptr) {
+    Msg::Error("Scalar background field not found");
+    return -1;
+  }
+  for(MTriangle *t : triangles)
+    for(size_t lv = 0; lv < 3; ++lv) {
+      MVertex *v = t->getVertex(lv);
+      auto it = sizeMap.find(v);
+      if(it == sizeMap.end()) {
+        double value = (*field)(v->point().x(), v->point().y(), v->point().z());
+        if(std::isnan(value) || value == -DBL_MAX || value == DBL_MAX) continue;
+        sizeMap[v] = value;
+      }
+    }
+  return 0;
+}
+
+std::string nameOfSizeMapMethod(int method) {
+  if (method == 0) {
+    return "default (cross-field conformal scaling and CAD adaptation)";
+  } else if (method == 1) {
+    return "cross-field conformal scaling";
+  } else if (method == 2) {
+    return "cross-field conformal scaling and CAD adaptation";
+  } else if (method == 3) {
+    return "background mesh sizes";
+  }
+  return "unknown";
+}
+
+bool generateMeshWithSpecialParameters(GModel *gm,
+                                       double &scalingOnTriangulation)
+{
+  Msg::Debug("build background triangulation ...");
+
+  /* Unlock if called from GenerateMesh() */
+  bool shouldLock = false;
+  if(CTX::instance()->lock) {
+    CTX::instance()->lock = 0;
+    shouldLock = true;
+  }
+
+  /* Change meshing parameters to build a good triangulation
+   * for cross field */
+  /* - the triangulation must be a bit more refined than the quad mesh */
+  scalingOnTriangulation = 0.75;
+  int minCurveNodes = CTX::instance()->mesh.minCurveNodes;
+  int minCircleNodes = CTX::instance()->mesh.minCircleNodes;
+  double lcFactor = CTX::instance()->mesh.lcFactor;
+  int recombineAll = CTX::instance()->mesh.recombineAll;
+  int algoRecombine = CTX::instance()->mesh.algoRecombine;
+  int algo = CTX::instance()->mesh.algo2d;
+  CTX::instance()->mesh.minCurveNodes = std::min(minCurveNodes, 5);
+  CTX::instance()->mesh.minCircleNodes = std::min(minCircleNodes, 30);
+  CTX::instance()->mesh.lcFactor = lcFactor * scalingOnTriangulation;
+  CTX::instance()->mesh.recombineAll = 0;
+  CTX::instance()->mesh.algoRecombine = 0;
+  CTX::instance()->mesh.algo2d =
+    ALGO_2D_MESHADAPT; /* slow but frontal does not always work */
+
+  /* Generate the triangulation with standard gmsh pipeline */
+  GenerateMesh(gm, 2);
+
+  /* Restore parameters */
+  CTX::instance()->mesh.minCurveNodes = minCurveNodes;
+  CTX::instance()->mesh.minCircleNodes = minCircleNodes;
+  CTX::instance()->mesh.lcFactor = lcFactor;
+  CTX::instance()->mesh.recombineAll = recombineAll;
+  CTX::instance()->mesh.algoRecombine = algoRecombine;
+  CTX::instance()->mesh.algo2d = algo;
+
+  /* Lock again before going back to GenerateMesh() */
+  if(shouldLock) CTX::instance()->lock = 1;
+
+  return true;
+}
+
+int BuildBackgroundMeshAndGuidingField(GModel *gm, bool overwriteGModelMesh,
+                                       bool deleteGModelMesh, int N)
+{
+  if(CTX::instance()->abortOnError && Msg::GetErrorCount()) return 0;
+  if(CTX::instance()->mesh.algo2d != ALGO_2D_PACK_PRLGRMS &&
+     CTX::instance()->mesh.algo2d != ALGO_2D_QUAD_QUASI_STRUCT)
+    return 0;
+  if(N != 4 && N != 6) {
+    Msg::Error("guiding field: %i-symmetry field not supported", N);
+    return -1;
+  }
+
+  const bool SHOW_INTERMEDIATE_VIEWS = (Msg::GetVerbosity() >= 99);
+
+  Msg::Info("Build background mesh and guiding field ...");
+  bool externalSizemap = false;
+  const int qqsSizemapMethod = CTX::instance()->mesh.quadqsSizemapMethod;
+
+  {
+    FieldManager *fields = gm->getFields();
+    if(fields->getBackgroundField() > 0) {
+      Field *field = fields->get(fields->getBackgroundField());
+      if(field && field->numComponents() == 3) {
+        Msg::Info(
+          "vector background field exists, using it as a guiding field");
+        return 0;
+      }
+      else if(field && field->numComponents() == 1) {
+        if(qqsSizemapMethod == 0) {
+          Msg::Info("scalar background field exists, using it as size map");
+          externalSizemap = true;
+        }
+        else {
+          Msg::Warning("scalar background field exists, but ignored because "
+                       "QuadqsSizemapMethod is %i",
+                       CTX::instance()->mesh.quadqsSizemapMethod);
+        }
+      }
+    }
+  }
+
+  if(overwriteGModelMesh) {
+    Msg::Debug("delete GModel mesh");
+    std::for_each(gm->firstRegion(), gm->lastRegion(), deMeshGRegion());
+    std::for_each(gm->firstFace(), gm->lastFace(), deMeshGFace());
+    std::for_each(gm->firstRegion(), gm->lastRegion(), deMeshGRegion());
+  }
+
+  /* Check if triangulation available */
+  bool surfaceMeshed = true;
+  {
+    bool onlyVisible = CTX::instance()->mesh.meshOnlyVisible;
+    for(GFace *gf : gm->getFaces())
+      if(gf->getNumMeshElements() == 0) {
+        if(onlyVisible && !gf->getVisibility()) continue;
+        surfaceMeshed = false;
+      }
+  }
+
+  /* Generate triangulation */
+  /* - scalingOnTriangulation: updated by generateMeshWithSpecialParameters
+   *   this factor is used to get a triangulation a bit more finer than the
+   *   target quadrangulation, to get a more accurate cross field */
+  double scalingOnTriangulation = 1;
+  if(!surfaceMeshed) {
+    generateMeshWithSpecialParameters(gm, scalingOnTriangulation);
+  }
+
+  // {
+  //   setQuadqsTransfiniteConstraints(gm, 0.34);
+  //   gm->deleteMesh();
+  //   generateMeshWithSpecialParameters(gm, scalingOnTriangulation);
+  //   gmsh::initialize();
+  //   gmsh::fltk::run();
+  //   abort();
+  // }
+
+  GlobalBackgroundMesh &bmesh = getBackgroundMesh(BMESH_NAME);
+  bool overwrite = true;
+  int status = bmesh.importGModelMeshes(gm, overwrite);
+  if(status != 0) {
+    Msg::Error("failed to import model mesh in background mesh");
+    return -1;
+  }
+
+  if(deleteGModelMesh) {
+    Msg::Debug("delete GModel mesh");
+    gm->deleteMesh();
+  }
+
+  /* Build guiding field on background mesh:
+   * - per GFace:
+   *   - cross field (unit vectors, one value per edge)
+   *   - conformal scaling (scalar, one value per vertex)
+   *   - offset conformal scaling by target number of quads
+   *   -> one vector (scaled direction) per triangle corner
+   * - global:
+   *   - compute/extract size map
+   *   - apply size map to triangle vectors (take minimum)
+   *   - one-way smoothing with Dijkstra + gradient max
+   */
+  std::vector<MTriangle *> global_triangles;
+  std::vector<std::array<double, 9> > global_triangle_directions;
+  std::vector<std::pair<MVertex *, double> > global_size_map;
+  std::vector<std::array<double, 5> > global_singularity_list; /* format: gf->tag(), index, x, y, z */
+  /* Per GFace computations, in parallel */
+  {
+    Msg::Info("- quadqs sizemap method: %s", nameOfSizeMapMethod(CTX::instance()->mesh.quadqsSizemapMethod).c_str());
+
+    std::vector<GFace *> faces = model_faces(gm);
+    size_t ntris = 0;
+    for(size_t f = 0; f < faces.size(); ++f) {
+      GFace *gf = faces[f];
+      auto it = bmesh.faceBackgroundMeshes.find(gf);
+      if(it != bmesh.faceBackgroundMeshes.end()) {
+        ntris += it->second.triangles.size();
+      }
+    }
+    global_triangles.reserve(ntris);
+    global_size_map.reserve(3 * ntris);
+
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+    for(size_t f = 0; f < faces.size(); ++f) {
+      GFace *gf = faces[f];
+
+      if(CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility())
+        continue;
+      if(CTX::instance()->debugSurface > 0 &&
+         gf->tag() != CTX::instance()->debugSurface)
+        continue;
+
+      /* Compute a cross field on each face */
+      std::vector<MLine *> lines;
+      std::vector<MTriangle *> triangles;
+
+      /* Collect pointers to background mesh elements */
+      std::vector<GEdge *> edges = face_edges(gf);
+      for(GEdge *ge : edges) {
+        auto it = bmesh.edgeBackgroundMeshes.find(ge);
+        if(it == bmesh.edgeBackgroundMeshes.end()) {
+          Msg::Warning("BuildBackgroundMeshAndGuidingField: GEdge %i not found "
+                       "in background mesh",
+                       ge->tag());
+          continue;
+        }
+        lines.reserve(lines.size() + it->second.lines.size());
+        for(size_t i = 0; i < it->second.lines.size(); ++i) {
+          lines.push_back(&(it->second.lines[i]));
+        }
+      }
+      auto it = bmesh.faceBackgroundMeshes.find(gf);
+      if(it == bmesh.faceBackgroundMeshes.end()) {
+        Msg::Warning("BuildBackgroundMeshAndGuidingField: GFace %i not found "
+                     "in background mesh",
+                     gf->tag());
+        continue;
+      }
+      triangles.reserve(triangles.size() + it->second.triangles.size());
+      for(size_t i = 0; i < it->second.triangles.size(); ++i) {
+        triangles.push_back(&(it->second.triangles[i]));
+      }
+
+      if(triangles.size() == 0) {
+        Msg::Error("- Face %i: no triangles in background mesh", gf->tag());
+        continue;
+      }
+
+      /* Cross field */
+      std::vector<std::array<double, 3> > triEdgeTheta;
+      int nbDiffusionLevels = 4;
+      double thresholdNormConvergence = 1.e-2;
+      int nbBoundaryExtensionLayer = 1;
+      int verbosity = 0;
+      Msg::Info("- Face %i/%li: compute cross field (%li triangles, %li B.C. "
+                "edges, %i diffusion levels) ...",
+                gf->tag(), faces.size(), triangles.size(), lines.size(),
+                nbDiffusionLevels);
+      int scf = computeCrossFieldWithHeatEquation(
+        N, triangles, lines, triEdgeTheta, nbDiffusionLevels,
+        thresholdNormConvergence, nbBoundaryExtensionLayer, verbosity);
+      if(scf != 0) {
+        Msg::Warning("- Face %i: failed to compute cross field", gf->tag());
+      }
+
+      /* Cross field singularities */
+      bool addSingularitiesAtAcuteCorners = true;
+      double thresholdInDeg = 30.;
+      std::vector<std::pair<SPoint3, int> > singularities;
+      int scsi = detectCrossFieldSingularities(N, triangles, triEdgeTheta,
+                                               addSingularitiesAtAcuteCorners,
+                                               thresholdInDeg, singularities);
+      if(scsi != 0) {
+        Msg::Warning("- Face %i: failed to compute cross field singularities",
+                     gf->tag());
+      }
+      std::vector<std::array<double,5> > singularity_list(singularities.size());
+      for (size_t k = 0; k < singularities.size(); ++k) {
+        singularity_list[k] = {double(gf->tag()), double(singularities[k].second),
+          singularities[k].first.x(), singularities[k].first.y(), singularities[k].first.z()};
+      }
+
+      if(SHOW_INTERMEDIATE_VIEWS) {
+        for(auto &kv : singularities) {
+          GeoLog::add(kv.first, double(kv.second), "singularities");
+        }
+      }
+
+      std::vector<std::array<double, 9> > triangleDirections;
+      int sc = convertToPerTriangleCrossFieldDirections(
+        N, triangles, triEdgeTheta, triangleDirections);
+      if(sc != 0) {
+        Msg::Warning(
+          "- Face %i: failed to resample cross field at triangle corners",
+          gf->tag());
+      }
+
+      /* Build the size map of the guiding field */
+      std::unordered_map<MVertex *, double> localSizemap;
+      if(externalSizemap) { /* Size map from background field */
+        int sts =
+          fillSizemapFromScalarBackgroundField(gm, triangles, localSizemap);
+        if(sts != 0) {
+          Msg::Warning(
+            "- Face %i: failed to fill size map from scalar background field",
+            gf->tag());
+        }
+      }
+      else if(qqsSizemapMethod ==
+              3) { /* Size map from background triangulation */
+        int sts = fillSizemapFromTriangleSizes(triangles, localSizemap);
+        if(sts != 0) {
+          Msg::Warning("- Face %i: failed to fill size map from triangle sizes",
+                       gf->tag());
+        } else if (sts == 0 && scalingOnTriangulation > 0.) {
+          /* re-adjust the target edge size as if the triangulation was
+           * not finer for more accurate cross field */
+          for (auto& kv: localSizemap) {
+            kv.second /= scalingOnTriangulation;
+          }
+        }
+      }
+      else {
+        /* Conformal scaling associated to cross field */
+        Msg::Info("- Face %i/%li: compute cross field conformal scaling ...",
+                  gf->tag(), faces.size());
+        int scs = computeCrossFieldConformalScaling(N, triangles, triEdgeTheta,
+                                                    localSizemap);
+        if(scs != 0) {
+          Msg::Warning(
+            "- Face %i: failed to compute conformal scaling, use uniform size",
+            gf->tag());
+          for(MTriangle *t : triangles)
+            for(size_t lv = 0; lv < 3; ++lv) {
+              localSizemap[t->getVertex(lv)] = 1.;
+            }
+        }
+
+        /* Quantile filtering on the conformal scaling histogram */
+        Msg::Debug("- Face %i/%li: conformal scaling quantile filtering ...",
+                   gf->tag(), faces.size());
+        double filteringRange = 0.05;
+        quantileFiltering(localSizemap, filteringRange);
+
+        size_t targetNumberOfQuads = gf->triangles.size() / 2.;
+        if(targetNumberOfQuads == 0) { /* Check in background mesh */
+          auto it = bmesh.faceBackgroundMeshes.find(gf);
+          if(it == bmesh.faceBackgroundMeshes.end()) {
+            Msg::Error("- Face %i: background mesh not found", gf->tag());
+            targetNumberOfQuads = 1000;
+          }
+          else {
+            targetNumberOfQuads = 0.5 * it->second.triangles.size();
+            targetNumberOfQuads *= std::pow(scalingOnTriangulation, 2);
+          }
+        }
+
+        /* Midpoint subdivision => 4 times more quads */
+        targetNumberOfQuads /= 4;
+
+        if(targetNumberOfQuads == 0) targetNumberOfQuads = 1;
+
+        int scso = computeQuadSizeMapFromCrossFieldConformalFactor(
+          triangles, targetNumberOfQuads, localSizemap);
+        if(scso != 0) {
+          Msg::Warning(
+            "- Face %i: failed to compute size map from conformal scaling",
+            gf->tag());
+        }
+      }
+
+#if defined(_OPENMP)
+#pragma omp critical
+#endif
+      {
+        append(global_triangles, triangles);
+        append(global_triangle_directions, triangleDirections);
+        append(global_singularity_list, singularity_list);
+        for(auto &kv : localSizemap) {
+          global_size_map.push_back({kv.first, kv.second});
+        }
+      }
+    }
+  }
+  sort_unique(global_size_map);
+
+  /* Warning: from now on, code is not optimized in terms of data structures
+   *          (slow unordered_map instead of contiguous vectors, etc)
+   *          should be improved if this step is time-consuming in the
+   *          global pipeline. */
+
+  if(SHOW_INTERMEDIATE_VIEWS) {
+    showCrossFieldInView(global_triangles, global_triangle_directions,
+                         "cross_field");
+  }
+
+  /* Global operations */
+
+  /* Compute minimum / maximum of "natural" size map.
+   * Use this to avoid cases when minimal size on curves
+   * tends to 0 */
+  double smMin = DBL_MAX;
+  for(auto &kv : global_size_map) { smMin = std::min(smMin, kv.second); }
+  double factor = 0.1; /* size map can be reduced up to factor */
+  double minSizeClampMin = factor * smMin;
+
+  /* Minimal size on curves */
+  std::unordered_map<MVertex *, double> cadMinimalSizeOnCurves;
+  if((qqsSizemapMethod == 0 && !externalSizemap) || qqsSizemapMethod == 2) {
+    int scad = computeMinimalSizeOnCurves(bmesh, cadMinimalSizeOnCurves);
+    if(scad != 0) {
+      Msg::Warning("failed to compute minimal size on CAD curves");
+    }
+  }
+
+  /* Initialize global size map defined on the background mesh */
+  std::unordered_map<MVertex *, double> sizeMap = cadMinimalSizeOnCurves;
+  for(auto &kv : global_size_map) {
+    MVertex *v = kv.first;
+    auto it = sizeMap.find(v);
+    if(it == sizeMap.end()) {
+      sizeMap[kv.first] = kv.second; /* "natural" size */
+    }
+    else {
+      double sizeFromAdaptation = std::max(it->second, minSizeClampMin);
+      it->second = std::min(sizeFromAdaptation, kv.second);
+    }
+  }
+
+  /* One-way propagation of values */
+  const double gradientMax =
+    1.2; /* this param should be a global gmsh option */
+  int sop = sizeMapOneWaySmoothing(global_triangles, sizeMap, gradientMax);
+  if(sop != 0) { Msg::Warning("failed to compute one-way size map smoothing"); }
+
+  if(SHOW_INTERMEDIATE_VIEWS) {
+    std::vector<MElement *> elements =
+      dynamic_cast_vector<MTriangle *, MElement *>(global_triangles);
+    GeoLog::add(elements, sizeMap, "size_map");
+    GeoLog::flush();
+    showUVParametrization(bmesh);
+  }
+
+  /* Clamp with global minimum/maximum mesh size */
+  // {
+  // // TODO: apply on sizeMap instead
+  //   // TODO: should be multiplied by lcFactor or not ?
+  //   for (auto& kv: global_size_map) {
+  //     if (kv.second < CTX::instance()->mesh.lcMin) {
+  //       kv.second = CTX::instance()->mesh.lcMin;
+  //     } else if (kv.second > CTX::instance()->mesh.lcMax) {
+  //       kv.second = CTX::instance()->mesh.lcMax;
+  //     }
+  //   }
+  // }
+
+  printSizeMapStats(global_triangles, sizeMap);
+
+  /* Build the background field */
+  int sbf = buildBackgroundField(
+    gm, global_triangles, global_triangle_directions, sizeMap, global_singularity_list, "guiding_field");
+  if(sbf != 0) {
+    Msg::Warning("failed to build background guiding field");
+    return -1;
+  }
+
+  return 0;
+}
+
+bool backgroundMeshAndGuidingFieldExists(GModel *gm)
+{
+  bool bgmOk = backgroudMeshExists(BMESH_NAME);
+  bool bfOk = false;
+  FieldManager *fields = gm->getFields();
+  if(fields->getBackgroundField() > 0) {
+    Field *guiding_field = fields->get(fields->getBackgroundField());
+    if(guiding_field && guiding_field->numComponents() == 3) { bfOk = true; }
+  }
+  return bgmOk && bfOk;
+}
+
+bool getSingularitiesFromBackgroundField(GFace* gf,
+    std::vector<std::pair<SPoint3, int> >& singularities) {
+  singularities.clear();
+
+  Field* field = nullptr;
+  FieldManager *fields = gf->model()->getFields();
+  if(fields->getBackgroundField() > 0) {
+    Field *guiding_field = fields->get(fields->getBackgroundField());
+    if(guiding_field && guiding_field->numComponents() == 3) { field = guiding_field; }
+  }
+  if (field == nullptr) {
+    Msg::Error("get singularities: face %i, failed to get background field", gf->tag());
+    return false;
+  }
+
+  int viewTag = int(field->options["IView"]->numericalValue());
+  PView* view = PView::getViewByTag(viewTag);
+  if (view == nullptr) {
+    Msg::Error("failed to get view for tag = %i", viewTag);
+    return false;
+  }
+  PViewDataList *d = dynamic_cast<PViewDataList *>(view->getData());
+  if (d == nullptr) {
+    Msg::Error("view type is wrong");
+    return false;
+  }
+
+  size_t nVP = d->VP.size()/6;
+  for (size_t i = 0; i < nVP; ++i) {
+    int gfTag = int(std::round(d->VP[6*i+3] / VIEW_INT_SCALING));
+    if (gfTag != gf->tag()) continue;
+    int index = int(std::round(d->VP[6*i+4] / VIEW_INT_SCALING));
+    double x = d->VP[6*i+0];
+    double y = d->VP[6*i+1];
+    double z = d->VP[6*i+2];
+    singularities.push_back(std::make_pair(SPoint3(x,y,z),index));
+  }
+
+  return true;
+}
+
+void computeBdrVertexIdealValence(const std::vector<MQuadrangle *> &quads,
+                                  unordered_map<MVertex *, double> &qValIdeal)
+{
+  qValIdeal.clear();
+  for(MQuadrangle *f : quads) {
+    for(size_t lv = 0; lv < 4; ++lv) {
+      MVertex *v = f->getVertex(lv);
+      GFace *gf = dynamic_cast<GFace *>(v->onWhat());
+      if(gf == nullptr) { /* On boundary */
+        MVertex *vPrev = f->getVertex((4 + lv - 1) % 4);
+        MVertex *vNext = f->getVertex((lv + 1) % 4);
+        SVector3 pNext = vNext->point();
+        SVector3 pPrev = vPrev->point();
+        SVector3 pCurr = v->point();
+        double agl = angleVectors(pNext - pCurr, pPrev - pCurr);
+        qValIdeal[v] += agl * 2. / M_PI;
+      }
+    }
+  }
+}
+
+inline int clamp(int val, int lower, int upper)
+{
+  return std::min(upper, std::max(val, lower));
+}
+
+bool getBoundaryIdealAndAllowedValences(
+  int fixingDim, /* 0 when fixing corners, 1 when fixing curves, 2 when fixing
+                    surfaces */
+  GFaceMeshPatch &patch,
+  const unordered_map<MVertex *, std::vector<MElement *> > &adj,
+  const unordered_map<MVertex *, double> &qValIdeal,
+  std::vector<int> &bndIdealValence,
+  std::vector<std::pair<int, int> > &bndAllowedValenceRange)
+{
+  if(fixingDim < 0 || fixingDim > 2) return false;
+  size_t N = patch.bdrVertices.front().size();
+  bndIdealValence.resize(N);
+  bndAllowedValenceRange.resize(N);
+  for(size_t i = 0; i < N; ++i) {
+    MVertex *bv = patch.bdrVertices.front()[i];
+    GVertex *gv = dynamic_cast<GVertex *>(bv->onWhat());
+    GEdge *ge = dynamic_cast<GEdge *>(bv->onWhat());
+    GFace *gf = dynamic_cast<GFace *>(bv->onWhat());
+    int idealTot = 4;
+    if(gf == nullptr) {
+      auto it = qValIdeal.find(bv);
+      if(it == qValIdeal.end()) {
+        Msg::Error("getBoundaryIdealAndAllowedValences: bdr vertex %i not "
+                   "found in qValIdeal",
+                   bv->getNum());
+        return false;
+      }
+      idealTot = (int)clamp(std::round(it->second), 1., 4.);
+    }
+    auto it = adj.find(bv);
+    if(it == adj.end()) {
+      Msg::Error(
+        "getBoundaryIdealAndAllowedValences: bdr vertex not found in adj");
+      return false;
+    }
+    std::vector<MElement *> exterior = difference(it->second, patch.elements);
+    int valExterior = (int)exterior.size();
+    int valInterior = (int)it->second.size() - exterior.size();
+    int idealIn = idealTot - valExterior;
+    if(idealIn <= 0) {
+      idealIn = 1;
+      // DBG(bv->getNum(), idealIn, idealTot, valExterior);
+      // Msg::Error("getBoundaryIdealAndAllowedValences: ideal valence inside is
+      // <= 0, weird"); return false;
+    }
+    bndIdealValence[i] = idealIn;
+    if(exterior.size() == 0) { /* boundary vertex "inside" the cavity, probably
+                                  the one to remesh */
+      bndAllowedValenceRange[i] = {idealIn, idealIn};
+    }
+    else if(gv != nullptr) { /* Current bdr vertex is corner */
+      bndAllowedValenceRange[i] = {idealIn, idealIn};
+    }
+    else if(ge != nullptr) { /* Current bdr vertex is on curve */
+      if(fixingDim == 0) { /* When fixing corners, can degrade curves */
+        bndAllowedValenceRange[i] = {1, 2};
+      }
+      else {
+        bndAllowedValenceRange[i] = {idealIn, idealIn};
+      }
+    }
+    else if(gf != nullptr) {
+      if(valExterior <= 0) {
+        Msg::Error("getBoundaryIdealAndAllowedValences: surface bdr vertex but "
+                   "exterior valence is: %i",
+                   valExterior);
+        return false;
+      }
+      if(fixingDim == 0 && idealTot >= 3 && it->second.size() == 4) {
+        /* When fixing concave corner, do not degrade close regular interior
+         * vertices */
+        bndAllowedValenceRange[i] = {valInterior, valInterior};
+      }
+      else if(fixingDim == 0 ||
+              fixingDim ==
+                1) { /* When fixing corner/curve, can degrade surface */
+        /* Allowed total range: [3,6], minimize if valExterior higher to this */
+        int lower = 3 - valExterior;
+        int upper = 6 - valExterior;
+        lower = clamp(lower, 1, 5);
+        upper = clamp(upper, 1, 5);
+        bndAllowedValenceRange[i] = {lower, upper};
+      }
+      else {
+        /* Allowed total range: [3,5], minimize if valExterior higher to this */
+        int lower = 3 - valExterior;
+        int upper = 5 - valExterior;
+        lower = clamp(lower, 1, 4);
+        upper = clamp(upper, 1, 4);
+        bndAllowedValenceRange[i] = {lower, upper};
+      }
+    }
+    else {
+      Msg::Error("getBoundaryIdealAndAllowedValences: vertex on no CAD entity, "
+                 "should not happen");
+      return false;
+    }
+
+    // if (fixingDim == 2) {
+    //   std::string name = "[" +
+    //   std::to_string(bndAllowedValenceRange[i].first)
+    //     + "," + std::to_string(int(bndAllowedValenceRange[i].second)) + "]";
+    //   GeoLog::add({bv->point()},double(bndIdealValence[i]), name);
+    // }
+  }
+
+  return true;
+}
+
+bool meshOrientationIsOppositeOfCadOrientation(GFace *gf)
+{
+  size_t nOk = 0;
+  size_t nInv = 0;
+  for(std::size_t iEl = 0; iEl < gf->getNumMeshElements(); iEl++) {
+    MElement *e = gf->getMeshElement(iEl);
+    SVector3 ne = e->getFace(0).normal();
+    MVertex *v = e->getVertex(0);
+    SPoint2 param;
+    if(v->onWhat() == gf && v->getParameter(0, param[0]) &&
+       v->getParameter(1, param[1])) {
+      SVector3 nf = gf->normal(param);
+      if(dot(nf, ne) < 0.) { nInv += 1; }
+      else {
+        nOk += 1;
+      }
+    }
+  }
+  return (nInv > nOk);
+}
+
+void updateAdjacencies(const GFaceMeshPatch &before,
+                       const GFaceMeshPatch &after,
+                       unordered_map<MVertex *, std::vector<MElement *> > &adj)
+{
+  /* Remove old vertices from adjacency keys */
+  for(MVertex *v : before.intVertices) {
+    auto it = adj.find(v);
+    if(it != adj.end()) { adj.erase(it); }
+  }
+  /* Remove old elements from adjacency values */
+  for(MVertex *bv : before.bdrVertices.front()) {
+    auto it = adj.find(bv);
+    if(it != adj.end()) {
+      it->second = difference(it->second, before.elements);
+    }
+  }
+  /* Add new keys and values */
+  for(MElement *e : after.elements) {
+    for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+      MVertex *v = e->getVertex(lv);
+      adj[v].push_back(e);
+    }
+  }
+}
+
+std::vector<MElement *>
+getNeighbors(const std::vector<MElement *> &elements,
+             const unordered_map<MVertex *, std::vector<MElement *> > &adj)
+{
+  std::vector<MElement *> neighbors;
+  for(MElement *e : elements) {
+    for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+      MVertex *v = e->getVertex(lv);
+      auto it = adj.find(v);
+      if(it != adj.end()) {
+        for(MElement *e : it->second) { neighbors.push_back(e); }
+      }
+    }
+  }
+  neighbors = difference(neighbors, elements);
+  return neighbors;
+}
+
+bool smoothThePool(
+  GFace *gf, const std::vector<MVertex *> &smoothingPool,
+  const unordered_map<MVertex *, std::vector<MElement *> > &adj,
+  bool invertNormalsForQuality, SurfaceProjector *sp = nullptr)
+{
+  /* Get all quads used for smoothing */
+  std::vector<MElement *> elements;
+  {
+    std::vector<MVertex *> unq = smoothingPool;
+    sort_unique(unq);
+    elements.reserve(unq.size());
+    for(MVertex *v : unq) {
+      auto it = adj.find(v);
+      if(it != adj.end()) { append(elements, it->second); }
+    }
+  }
+
+  /* Build the disconnected patches and smooth them independently */
+  std::vector<std::vector<MElement *> > components;
+  bool okc = getConnectedComponents(elements, components);
+  if(!okc) return false;
+  Msg::Debug("smooth %li connected components from %li initial elements ...",
+             components.size(), elements.size());
+  for(size_t i = 0; i < components.size(); ++i) {
+    GFaceMeshPatch patch;
+    bool okp = patchFromElements(gf, components[i], patch);
+    if(!okp) continue;
+
+    PatchGeometryBackup backup(patch);
+
+    GeomOptimStats stats;
+    double sicnBefore = 0.;
+    if(haveNiceParametrization(gf)) {
+      if(patch.bdrVertices.size() == 1) { /* disk topology */
+        /* Global UV smoothing */
+        patchOptimizeGeometryGlobal(patch, stats);
+        sicnBefore = stats.sicnMinBefore;
+
+        if(stats.sicnMinAfter < 0.5) {
+          /* Kernel smoothing */
+          GeomOptimOptions opt;
+          opt.invertCADNormals = invertNormalsForQuality;
+          patchOptimizeGeometryWithKernel(patch, opt, stats);
+        }
+      }
+      else {
+        double sicnAvg;
+        computeSICN(patch.elements, sicnBefore, sicnAvg);
+        if(sicnBefore < 0.5) {
+          /* Kernel smoothing */
+          GeomOptimOptions opt;
+          opt.invertCADNormals = invertNormalsForQuality;
+          patchOptimizeGeometryWithKernel(patch, opt, stats);
+        }
+      }
+    }
+    else {
+      GeomOptimOptions opt;
+      opt.sp = sp;
+      opt.outerLoopIterMax = 20.;
+      opt.timeMax = 10.;
+      opt.withBackup = true;
+      opt.invertCADNormals = invertNormalsForQuality;
+      // opt.smartMinThreshold = 0.1;
+      // opt.localLocking = true;
+      opt.dxLocalMax = 1.e-4;
+      patchOptimizeGeometryWithKernel(patch, opt, stats);
+    }
+
+    /* Check after smoothing */
+    if(stats.sicnMinAfter < sicnBefore) {
+      Msg::Debug(
+        "quality (SICN) decreased (%.3f -> %.3f), restore previous geometry",
+        sicnBefore, stats.sicnMinAfter);
+      backup.restore();
+    }
+  }
+
+  return true;
+}
+
+struct DQOptions {
+  bool invertNormalsForQuality = false;
+  SurfaceProjector *sp = nullptr;
+};
+
+struct DQStats {
+  size_t nCornerValFixed = 0;
+  size_t nCurveValFixed = 0;
+  size_t nSurfaceValFixed = 0;
+  size_t nCornerValRemaining = 0;
+  size_t nCurveValRemaining = 0;
+  size_t nSurfaceValRemaining = 0;
+};
+
+int improveCornerValences(
+  GFace *gf,
+  const unordered_map<MVertex *, double>
+    &qValIdeal, /* valence on bdr vertices */
+  unordered_map<MVertex *, std::vector<MElement *> > &adj, DQOptions &opt,
+  DQStats &stats)
+{
+  Msg::Debug("- Face %i: improve corner valences", gf->tag());
+  std::vector<MVertex *>
+    smoothingPool; /* for smoothing after topological changes */
+  smoothingPool.reserve(gf->mesh_vertices.size());
+
+  /* qValIdeal is unordered_map and its ordering is random, we replace
+   * it with a deterministic ordering, containing only the corners */
+  std::vector<std::pair<MVertex *, double> > cornerAndIdeal;
+  for(auto &kv : qValIdeal) {
+    GVertex *gv = dynamic_cast<GVertex *>(kv.first->onWhat());
+    if(gv != nullptr) { cornerAndIdeal.push_back({kv.first, kv.second}); }
+  }
+  std::sort(cornerAndIdeal.begin(), cornerAndIdeal.end(),
+            [](const std::pair<MVertex *, double> &lhs,
+               const std::pair<MVertex *, double> &rhs) {
+              return lhs.second < rhs.second ||
+                     (lhs.second == rhs.second &&
+                      lhs.first->getNum() < rhs.first->getNum());
+            });
+
+  int SMALL_PATCH = 0; /* just the quads adjacent to corner */
+  int LARGER_PATCH = 1; /* add the neighbors */
+  /* We try larger cavities first because the result is usually better
+   * when it works (less new defects on adjacent curves). But it does
+   * not work when the larger cavity is too constrained by CAD curves,
+   * so we try the small cavity after */
+  for(int pass : {LARGER_PATCH, SMALL_PATCH}) {
+    for(const auto &kv : cornerAndIdeal) {
+      MVertex *v = kv.first;
+      GVertex *gv = dynamic_cast<GVertex *>(v->onWhat());
+      if(gv == nullptr) continue;
+
+      auto it = adj.find(v);
+      if(it == adj.end()) continue;
+      const std::vector<MElement *> &quads = it->second;
+      double ideal = kv.second;
+      size_t ival = (size_t)clamp(std::round(ideal), 1., 4.);
+      if(ival == quads.size()) continue;
+      size_t num = v->getNum();
+
+      /* From here, we try to change the local configuration */
+      Msg::Debug(
+        "- Face %i: try to fix corner %i (vertex %li), val %li instead of %li",
+        gf->tag(), gv->tag(), num, it->second.size(), ival);
+
+      /* Init patch with quads adjacent to corner */
+      GFaceMeshPatch patch;
+      if(pass == LARGER_PATCH) {
+        /* and the neighbors */
+        std::vector<MElement *> quadsPlus = quads;
+        append(quadsPlus, getNeighbors(quads, adj));
+        bool okp = patchFromElements(gf, quadsPlus, patch);
+        if(!okp) continue;
+      }
+      else {
+        bool okp = patchFromElements(gf, quads, patch);
+        if(!okp) continue;
+      }
+      if(patch.bdrVertices.size() != 1) {
+        Msg::Debug("patch has %li bdr loops, weird", patch.bdrVertices.size());
+        continue;
+      }
+      if (patch.embVertices.size() > 0) {
+        Msg::Debug("patch has %li embedded vertices loops, avoid", patch.embVertices.size());
+        continue;
+      }
+
+      std::vector<int> bndIdealValence;
+      std::vector<std::pair<int, int> > bndAllowedValenceRange;
+      const int dimCorner = 0;
+      bool okb = getBoundaryIdealAndAllowedValences(dimCorner, patch, adj,
+                                                    qValIdeal, bndIdealValence,
+                                                    bndAllowedValenceRange);
+      if(!okb) continue;
+
+      GFaceMeshDiff diff;
+      std::vector<MElement *> neighborsForGeometry =
+        getNeighbors(patch.elements, adj);
+      double minSICNafer = 0.1;
+      int sdq = remeshLocalWithDiskQuadrangulation(
+        gf, patch.elements, patch.intVertices, patch.bdrVertices.front(),
+        bndIdealValence, bndAllowedValenceRange, neighborsForGeometry,
+        minSICNafer, opt.invertNormalsForQuality, opt.sp, diff);
+      if(sdq == 0) {
+        /* Copy the pointers to update the adjacencies in case success */
+        GFaceMeshPatch patchBefore = diff.before;
+        GFaceMeshPatch patchAfter = diff.after;
+
+        /* Execute the diff on the mesh */
+        bool ok = diff.execute(true); /* warning: GFace mesh changes here */
+        if(ok) {
+          updateAdjacencies(patchBefore, patchAfter, adj);
+          append(smoothingPool, patchBefore.intVertices);
+          append(smoothingPool, patchBefore.bdrVertices.front());
+          stats.nCornerValFixed += 1;
+        }
+        else {
+          Msg::Error("failed to apply diff, abort");
+          abort();
+        }
+        Msg::Debug("-- corner %li fixed", num);
+      }
+      else {
+        Msg::Debug("-- failed to fix corner %li", num);
+      }
+    }
+  }
+
+  if(smoothingPool.size() > 0)
+    smoothThePool(gf, smoothingPool, adj, opt.invertNormalsForQuality, opt.sp);
+
+  /* Remaining cases, just for stats */
+  for(const auto &kv : cornerAndIdeal) {
+    MVertex *v = kv.first;
+    GVertex *gv = dynamic_cast<GVertex *>(v->onWhat());
+    if(gv == nullptr) continue;
+    auto it = adj.find(v);
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    double ideal = kv.second;
+    size_t ival = (size_t)clamp(std::round(ideal), 1., 4.);
+    if(ival == quads.size()) continue;
+    stats.nCornerValRemaining += 1;
+  }
+
+  return 0;
+}
+
+int improveCurveValences(
+  GFace *gf,
+  const unordered_map<MVertex *, double>
+    &qValIdeal, /* valence on bdr vertices */
+  unordered_map<MVertex *, std::vector<MElement *> > &adj, DQOptions &opt,
+  DQStats &stats)
+{
+  Msg::Debug("- Face %i: improve curve valences", gf->tag());
+  std::vector<MVertex *>
+    smoothingPool; /* for smoothing after topological changes */
+  smoothingPool.reserve(gf->mesh_vertices.size());
+
+  /* qValIdeal is unordered_map and its ordering is random, we replace
+   * it with a deterministic ordering, containing only the corners */
+  std::vector<std::pair<MVertex *, double> > curveVertexAndIdeal;
+  curveVertexAndIdeal.reserve(qValIdeal.size());
+  for(auto &kv : qValIdeal) {
+    MVertex *v = kv.first;
+    GEdge *ge = dynamic_cast<GEdge *>(v->onWhat());
+    if(ge != nullptr) { curveVertexAndIdeal.push_back({kv.first, kv.second}); }
+  }
+  std::sort(curveVertexAndIdeal.begin(), curveVertexAndIdeal.end(),
+            [](const std::pair<MVertex *, double> &lhs,
+               const std::pair<MVertex *, double> &rhs) {
+              return lhs.second < rhs.second ||
+                     (lhs.second == rhs.second &&
+                      lhs.first->getNum() < rhs.first->getNum());
+            });
+
+  for(const auto &kv : curveVertexAndIdeal) {
+    MVertex *v = kv.first;
+    GEdge *ge = dynamic_cast<GEdge *>(v->onWhat());
+    if(ge == nullptr) continue;
+    auto it = adj.find(v);
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    double ideal = kv.second;
+    size_t ival = (size_t)clamp(std::round(ideal), 1., 4.);
+    if(ival == quads.size()) continue;
+    size_t num = v->getNum();
+
+    /* From here, we try to change the local configuration */
+    Msg::Debug("- Face %i: try to fix curve vertex %li, val %li instead of %li",
+               gf->tag(), v->getNum(), it->second.size(), ival);
+
+    /* Init patch with quads adjacent to corner */
+    GFaceMeshPatch patch;
+    bool okp = patchFromElements(gf, quads, patch);
+    if(!okp) continue;
+    if(patch.bdrVertices.size() != 1) {
+      Msg::Debug("patch has %li bdr loops, weird", patch.bdrVertices.size());
+      continue;
+    }
+    if (patch.embVertices.size() > 0) {
+      Msg::Debug("patch has %li embedded vertices loops, avoid", patch.embVertices.size());
+      continue;
+    }
+
+    std::vector<int> bndIdealValence;
+    std::vector<std::pair<int, int> > bndAllowedValenceRange;
+    const int dimCurve = 1;
+    bool okb = getBoundaryIdealAndAllowedValences(
+      dimCurve, patch, adj, qValIdeal, bndIdealValence, bndAllowedValenceRange);
+    if(!okb) continue;
+
+    GFaceMeshDiff diff;
+    std::vector<MElement *> neighborsForGeometry =
+      getNeighbors(patch.elements, adj);
+    double minSICNafer = 0.1;
+    int sdq = remeshLocalWithDiskQuadrangulation(
+      gf, patch.elements, patch.intVertices, patch.bdrVertices.front(),
+      bndIdealValence, bndAllowedValenceRange, neighborsForGeometry,
+      minSICNafer, opt.invertNormalsForQuality, opt.sp, diff);
+    if(sdq == 0) {
+      /* Copy the pointers to update the adjacencies in case success */
+      GFaceMeshPatch patchBefore = diff.before;
+      GFaceMeshPatch patchAfter = diff.after;
+
+      /* Execute the diff on the mesh */
+      bool ok = diff.execute(true); /* warning: GFace mesh changes here */
+      if(ok) {
+        updateAdjacencies(patchBefore, patchAfter, adj);
+        append(smoothingPool, patchBefore.intVertices);
+        append(smoothingPool, patchBefore.bdrVertices.front());
+        stats.nCurveValFixed += 1;
+
+        if(PARANO_QUALITY) {
+          errorAndAbortIfNegativeElement(
+            gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+            "after execute");
+        }
+      }
+      else {
+        Msg::Error("failed to apply diff, abort");
+        abort();
+      }
+      Msg::Debug("-- curve vertex %li fixed", num);
+    }
+    else {
+      Msg::Debug("-- failed to fix curve vertex %li", num);
+
+      if(PARANO_QUALITY) {
+        errorAndAbortIfNegativeElement(
+          gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+          "after failed to fix, baaad");
+      }
+    }
+  }
+
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "before pool");
+  }
+
+  if(smoothingPool.size() > 0)
+    smoothThePool(gf, smoothingPool, adj, opt.invertNormalsForQuality, opt.sp);
+
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "after pool");
+  }
+
+  /* Remaining cases, just for stats */
+  for(const auto &kv : curveVertexAndIdeal) {
+    MVertex *v = kv.first;
+    GEdge *ge = dynamic_cast<GEdge *>(v->onWhat());
+    if(ge == nullptr) continue;
+    auto it = adj.find(v);
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    double ideal = kv.second;
+    size_t ival = (size_t)clamp(std::round(ideal), 1., 4.);
+    if(ival == quads.size()) continue;
+    stats.nCurveValRemaining += 1;
+  }
+
+  return 0;
+}
+
+double irregularityEnergy(
+  const GFaceMeshPatch &patch,
+  const unordered_map<MVertex *, double> &qValIdeal,
+  const unordered_map<MVertex *, std::vector<MElement *> > &adj)
+{
+  double Ir = 0.;
+  /* Boundary vertices */
+  for(MVertex *v : patch.bdrVertices.front()) {
+    double valIdeal = 4.;
+    auto it = qValIdeal.find(v);
+    if(it != qValIdeal.end()) { valIdeal = it->second; }
+    auto it2 = adj.find(v);
+    if(it2 == adj.end()) { continue; }
+    valIdeal = clamp(std::round(valIdeal), 1., 4.);
+
+    double val = (double)it2->second.size();
+    Ir += std::pow(valIdeal - val, 2);
+  }
+  /* Interior vertices */
+  for(MVertex *v : patch.intVertices) {
+    double valIdeal = 4.;
+    auto it2 = adj.find(v);
+    if(it2 == adj.end()) { continue; }
+    valIdeal = clamp(std::round(valIdeal), 1., 4.);
+    double val = (double)it2->second.size();
+    Ir += std::pow(valIdeal - val, 2);
+  }
+  return Ir;
+}
+
+double irregularityEnergy(
+  GFace *gf, const std::vector<MElement *> &quads,
+  const unordered_map<MVertex *, double> &qValIdeal,
+  const unordered_map<MVertex *, std::vector<MElement *> > &adj)
+{
+  GFaceMeshPatch patch;
+  bool okp = patchFromElements(gf, quads, patch);
+  if(!okp) return 0.;
+  return irregularityEnergy(patch, qValIdeal, adj);
+}
+
+int improveInteriorValences(
+  GFace *gf,
+  const unordered_map<MVertex *, double>
+    &qValIdeal, /* valence on bdr vertices */
+  unordered_map<MVertex *, std::vector<MElement *> > &adj, DQOptions &opt,
+  DQStats &stats)
+{
+  Msg::Debug("- Face %i: improve interior valences", gf->tag());
+
+  std::vector<MVertex *>
+    smoothingPool; /* for smoothing after topological changes */
+  smoothingPool.reserve(gf->mesh_vertices.size());
+
+  /* Priority queue */
+  std::priority_queue<std::pair<double, MVertex *>,
+                      std::vector<std::pair<double, MVertex *> > >
+    Q;
+
+  /* Initialize with all very irregular vertices of the face */
+  for(const auto &kv : adj) {
+    MVertex *v = kv.first;
+    GFace *gf = dynamic_cast<GFace *>(v->onWhat());
+    if(gf == nullptr) continue;
+    auto it = adj.find(v);
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    const size_t val = quads.size();
+    if(3 <= val && val <= 5) continue;
+
+    /* Build patch with quads adjacent to very irregular vertex */
+    GFaceMeshPatch patch;
+    bool okp = patchFromElements(gf, quads, patch);
+    if(!okp || patch.bdrVertices.size() != 1) continue;
+
+    if (patch.embVertices.size() > 0) {
+      Msg::Debug("patch has %li embedded vertices loops, avoid", patch.embVertices.size());
+      continue;
+    }
+
+    double Ir = irregularityEnergy(gf, quads, qValIdeal, adj);
+    if(Ir > 0.) Q.push({Ir, v});
+  }
+
+  /* Topological replacement loop */
+  while(Q.size() > 0) {
+    MVertex *v = Q.top().second;
+    Q.pop();
+
+    auto it = adj.find(v);
+    /* Check if vertex still exists, may have been removed */
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    size_t num = v->getNum();
+
+    /* Build patch with quads adjacent to very irregular vertex */
+    GFaceMeshPatch patch;
+    bool okp = patchFromElements(gf, quads, patch);
+    if(!okp || patch.bdrVertices.size() != 1) continue;
+
+    /* Get ideal and allowed ranges on the patch boundary */
+    std::vector<int> bndIdealValence;
+    std::vector<std::pair<int, int> > bndAllowedValenceRange;
+    const int dimCurve = 2;
+    bool okb = getBoundaryIdealAndAllowedValences(
+      dimCurve, patch, adj, qValIdeal, bndIdealValence, bndAllowedValenceRange);
+    if(!okb) continue;
+
+    /* Check if there is a valid disk remeshing */
+    GFaceMeshDiff diff;
+    std::vector<MElement *> neighborsForGeometry =
+      getNeighbors(patch.elements, adj);
+    double minSICNafer = 0.1;
+    int sdq = remeshLocalWithDiskQuadrangulation(
+      gf, patch.elements, patch.intVertices, patch.bdrVertices.front(),
+      bndIdealValence, bndAllowedValenceRange, neighborsForGeometry,
+      minSICNafer, opt.invertNormalsForQuality, opt.sp, diff);
+    if(sdq == 0) {
+      /* Copy the pointers to update the adjacencies in case success */
+      GFaceMeshPatch patchBefore = diff.before;
+      GFaceMeshPatch patchAfter = diff.after;
+
+      // GeoLog::add(patchBefore.elements, "-I_v"+std::to_string(v->getNum()));
+      // GeoLog::add(patchAfter.elements, "+I_v"+std::to_string(v->getNum()));
+
+      /* Execute the diff on the mesh */
+      bool ok = diff.execute(true); /* warning: GFace mesh changes here */
+      if(ok) {
+        updateAdjacencies(patchBefore, patchAfter, adj);
+        append(smoothingPool, patchBefore.intVertices);
+        append(smoothingPool, patchBefore.bdrVertices.front());
+        stats.nSurfaceValFixed += 1;
+
+        /* If new very irregular vertices have been created,
+         * add them to the queue */
+        for(MVertex *bv : patchAfter.bdrVertices.front()) {
+          auto it2 = adj.find(bv);
+          if(it2 == adj.end()) continue;
+          const std::vector<MElement *> &quads2 = it2->second;
+          if(quads2.size() > 5) {
+            double Ir2 = irregularityEnergy(gf, quads2, qValIdeal, adj);
+            if(Ir2 > 0) Q.push({Ir2, bv});
+          }
+        }
+      }
+      else {
+        Msg::Error("failed to apply diff, abort");
+        abort();
+      }
+      Msg::Debug("-- interior vertex %li fixed", num);
+    }
+    else {
+      Msg::Debug("-- failed to fix interior vertex %li", num);
+      // GeoLog::add(quads, "!I_v"+std::to_string(v->getNum()));
+    }
+  }
+  // GeoLog::flush();
+
+  if(smoothingPool.size() > 0)
+    smoothThePool(gf, smoothingPool, adj, opt.invertNormalsForQuality, opt.sp);
+
+  /* Remaining cases, just for stats */
+  for(const auto &kv : adj) {
+    MVertex *v = kv.first;
+    GFace *gf = dynamic_cast<GFace *>(v->onWhat());
+    if(gf == nullptr) continue;
+    auto it = adj.find(v);
+    if(it == adj.end()) continue;
+    const std::vector<MElement *> &quads = it->second;
+    const size_t val = quads.size();
+    if(3 <= val && val <= 5) continue;
+    stats.nSurfaceValRemaining += 1;
+  }
+
+  return 0;
+}
+
+int RefineMeshWithBackgroundMeshProjection(GModel *gm)
+{
+  const bool SHOW_INTERMEDIATE_VIEWS = (Msg::GetVerbosity() >= 99);
+
+  const bool SHOW_QUADTRI = SHOW_INTERMEDIATE_VIEWS;
+  if(SHOW_QUADTRI) {
+    std::vector<MElement *> elements;
+    for(GFace *gf : model_faces(gm)) {
+      append(elements,
+             dynamic_cast_vector<MTriangle *, MElement *>(gf->triangles));
+      append(elements,
+             dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles));
+      // showUVParametrization(gf,dynamic_cast_vector<MTriangle*,MElement*>(gf->triangles),"quadtri_uvs");
+      // showUVParametrization(gf,dynamic_cast_vector<MQuadrangle*,MElement*>(gf->quadrangles),"quadtri_uvs");
+    }
+    GeoLog::add(elements, "qqs_quadtri");
+    GeoLog::flush();
+  }
+
+  Msg::Info(
+    "Refine mesh (midpoint subdivision, with background projection) ...");
+
+  bool linear = true;
+  RefineMesh(gm, linear, true, false);
+
+  if(Msg::GetVerbosity() >= 99) {
+    std::unordered_map<std::string, double> stats;
+    appendQuadMeshStatistics(gm, stats, "MPS_");
+    printStatistics(stats, "Quad mesh after subdivision, before projection:");
+  }
+
+  GlobalBackgroundMesh *bmesh = nullptr;
+  if(backgroudMeshExists(BMESH_NAME)) {
+    bmesh = &(getBackgroundMesh(BMESH_NAME));
+  }
+  else {
+    Msg::Warning("refine mesh with background projection: no background mesh, "
+                 "using CAD projection (slow)");
+  }
+
+  std::vector<GEdge *> edges = model_edges(gm);
+
+  /* Build custom edgeToFaces because ge->faces() does not work
+   * for embedded edges */
+  std::unordered_map<GEdge*,std::unordered_set<GFace*> > edgeToFaces;
+  for (GFace* gf: model_faces(gm)) {
+    std::vector<GEdge*> fedges = face_edges(gf);
+    for (GEdge* ge: fedges) edgeToFaces[ge].insert(gf);
+  }
+
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+  for(size_t e = 0; e < edges.size(); ++e) {
+    GEdge *ge = edges[e];
+    if(CTX::instance()->mesh.meshOnlyVisible && !ge->getVisibility()) continue;
+    if(ge->lines.size() == 0 || ge->mesh_vertices.size() == 0) continue;
+
+    Msg::Debug("- Curve %i: project midpoints on curve", ge->tag());
+    unordered_map<MVertex *, MVertex *> old2new_ge;
+    unordered_map<MVertex *, SPoint3> backupPositionLinear;
+    double tPrev = 0;
+    for(size_t i = 0; i < ge->mesh_vertices.size(); ++i) {
+      MVertex *v = ge->mesh_vertices[i];
+      MEdgeVertex *mev = dynamic_cast<MEdgeVertex *>(v);
+      if(mev == nullptr) {
+        double t = tPrev;
+        GPoint proj = ge->closestPoint(v->point(), t);
+        if(proj.succeeded()) {
+          /* Need to change the type of the MVertex */
+          MVertex *v2 =
+            new MEdgeVertex(proj.x(), proj.y(), proj.z(), ge, proj.u());
+          tPrev = proj.u();
+          ge->mesh_vertices[i] = v2;
+          old2new_ge[v] = v2;
+          backupPositionLinear[v2] = v->point();
+          delete v;
+        }
+        else {
+          Msg::Warning("- Edge %i, vertex %li: curve projection failed",
+                       ge->tag(), v->getNum());
+          MVertex *v2 = new MEdgeVertex(v->point().x(), v->point().y(),
+                                        v->point().z(), ge, tPrev);
+          ge->mesh_vertices[i] = v2;
+          old2new_ge[v] = v2;
+          backupPositionLinear[v2] = v->point();
+          delete v;
+        }
+        tPrev = t;
+      }
+    }
+
+    bool qualityOk = true;
+
+    /* Update Lines */
+    for(MLine *l : ge->lines)
+      for(size_t lv = 0; lv < 2; ++lv) {
+        MVertex *v = l->getVertex(lv);
+        auto it = old2new_ge.find(v);
+        if(it != old2new_ge.end()) { l->setVertex(lv, it->second); }
+      }
+
+    /* Update adjacent faces */
+    for(GFace *gf : edgeToFaces[ge]) {
+      for(size_t i = 0; i < gf->getNumMeshElements(); ++i) {
+        MElement *e = gf->getMeshElement(i);
+        for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+          MVertex *v = e->getVertex(lv);
+          auto it = old2new_ge.find(v);
+          if(it != old2new_ge.end()) { e->setVertex(lv, it->second); }
+        }
+      }
+
+      /* Check quality of quads */
+      if(gf->quadrangles.size() > 0) {
+        double sicnMin, sicnAvg;
+        computeSICN(
+          dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+          sicnMin, sicnAvg);
+        if(sicnMin < 0.) {
+          Msg::Warning("- refine with projection: quality negative (%.3f) on "
+                       "face %i after curve %i projection, rollback",
+                       sicnMin, gf->tag(), ge->tag());
+          qualityOk = false;
+        }
+      }
+    }
+
+    if(!qualityOk) { /* restore positions on the curve */
+      for(auto &kv : backupPositionLinear) { kv.first->setXYZ(kv.second); }
+    }
+    if(PARANO_VALIDITY) {
+      errorAndAbortIfInvalidVertexInElements(
+        dynamic_cast_vector<MLine *, MElement *>(ge->lines),
+        "after curve proj");
+    }
+  }
+
+  std::vector<GFace *> faces = model_faces(gm);
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+  for(size_t f = 0; f < faces.size(); ++f) {
+    GFace *gf = faces[f];
+    if(CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility()) continue;
+    if(CTX::instance()->debugSurface > 0 &&
+       gf->tag() != CTX::instance()->debugSurface)
+      continue;
+    if(gf->triangles.size() == 0 && gf->quadrangles.size() == 0) continue;
+
+    SurfaceProjector *sp = nullptr;
+    if(bmesh) {
+      auto it = bmesh->faceBackgroundMeshes.find(gf);
+      if(it == bmesh->faceBackgroundMeshes.end()) {
+        Msg::Error("background mesh not found for face %i", gf->tag());
+        continue;
+      }
+
+      /* Get pointers to triangles in the background mesh */
+      std::vector<MTriangle *> triangles(it->second.triangles.size());
+      for(size_t i = 0; i < it->second.triangles.size(); ++i) {
+        triangles[i] = &(it->second.triangles[i]);
+      }
+
+      sp = new SurfaceProjector();
+      bool oki = sp->initialize(gf, triangles);
+      if(!oki) {
+        Msg::Warning("failed to initialize surface projector");
+        delete sp;
+        sp = nullptr;
+      }
+    }
+
+    /* Project the vertices which have been introduced by the RefineMesh */
+    Msg::Debug("- Face %i: project midpoints on surface", gf->tag());
+    bool evalOnCAD = gf->haveParametrization();
+    bool projOnCad = false;
+    if(evalOnCAD && !haveNiceParametrization(gf)) {
+      /* Strong disortion in parametrization, use projection */
+      evalOnCAD = false;
+      projOnCad = true;
+    }
+
+    if(Msg::GetVerbosity() >= 999) {
+      /* In some models (S9 from MAMBO) and with some resolution (clscale 0.1),
+       * there is this issue of vertex on wrong face ...
+       * I guess this is because the CAD is garbage (duplicated corners,
+       * degenerate edges) */
+      Msg::Debug("- Face %i, verify vertices before ...", gf->tag());
+      for(size_t i = 0; i < gf->getNumMeshElements(); ++i) {
+        MElement *e = gf->getMeshElement(i);
+        for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+          MVertex *v = e->getVertex(lv);
+          if(v->onWhat()->cast2Face() && v->onWhat() != gf) {
+            Msg::Error(
+              "- Face %i: element vertex %li is associated to entity (%i,%i)",
+              gf->tag(), v->getNum(), v->onWhat()->dim(), v->onWhat()->tag());
+            abort();
+          }
+        }
+      }
+    }
+
+    unordered_map<MVertex *, MVertex *> old2new_gf;
+    unordered_map<MVertex *, SPoint3> backupPositionLinear;
+
+    for(size_t i = 0; i < gf->mesh_vertices.size(); ++i) {
+      MVertex *v = gf->mesh_vertices[i];
+      if(v->onWhat() != gf) {
+        Msg::Error("- Face %i: vertex %li is associated to entity (%i,%i)",
+                   gf->tag(), v->getNum(), v->onWhat()->dim(),
+                   v->onWhat()->tag());
+        abort();
+      }
+      MFaceVertex *mfv = dynamic_cast<MFaceVertex *>(v);
+      if(mfv == nullptr) {
+        GPoint proj;
+        if(sp != nullptr) {
+          proj = sp->closestPoint(v->point().data(), evalOnCAD, projOnCad);
+
+          if(!proj.succeeded() && gf->haveParametrization()) {
+            double uvg[2] = {0., 0.};
+            proj = gf->closestPoint(v->point(), uvg);
+          }
+        }
+        else {
+          double uvg[2] = {0., 0.};
+          proj = gf->closestPoint(v->point(), uvg);
+        }
+        if(proj.succeeded()) {
+          /* Need to change the type of the MVertex */
+          MVertex *v2 = new MFaceVertex(proj.x(), proj.y(), proj.z(), gf,
+                                        proj.u(), proj.v());
+          gf->mesh_vertices[i] = v2;
+          backupPositionLinear[v2] = v->point();
+          old2new_gf[v] = v2;
+          delete v;
+        }
+        else {
+          MVertex *v2 = new MFaceVertex(v->point().x(), v->point().y(),
+                                        v->point().z(), gf, 0., 0.);
+          gf->mesh_vertices[i] = v2;
+          backupPositionLinear[v2] = v->point();
+          old2new_gf[v] = v2;
+          delete v;
+          Msg::Warning("- Face %i, vertex %li: surface projection failed",
+                       gf->tag(), v->getNum());
+        }
+      }
+    }
+
+    /* Update elements */
+    for(size_t i = 0; i < gf->getNumMeshElements(); ++i) {
+      MElement *e = gf->getMeshElement(i);
+      for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+        MVertex *v = e->getVertex(lv);
+        auto it2 = old2new_gf.find(v);
+        if(it2 != old2new_gf.end()) { e->setVertex(lv, it2->second); }
+      }
+    }
+
+    if(Msg::GetVerbosity() >= 99) {
+      Msg::Debug("- Face %i, verify vertices ...", gf->tag());
+      for(size_t i = 0; i < gf->getNumMeshElements(); ++i) {
+        MElement *e = gf->getMeshElement(i);
+        for(size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+          MVertex *v = e->getVertex(lv);
+          if(v->onWhat()->cast2Edge()) {
+            MEdgeVertex *mev = dynamic_cast<MEdgeVertex *>(v);
+            if(mev == nullptr) {
+              Msg::Error("vertex attached to curve %i but not MEdgeVertex",
+                         v->onWhat()->cast2Edge()->tag());
+              abort();
+            }
+          }
+          else if(v->onWhat()->cast2Face()) {
+            MFaceVertex *mfv = dynamic_cast<MFaceVertex *>(v);
+            if(mfv == nullptr) {
+              Msg::Error("vertex attached to face %i but not MFaceVertex",
+                         v->onWhat()->cast2Face()->tag());
+              abort();
+            }
+          }
+          else if(v->onWhat()->cast2Vertex()) {
+          }
+          else {
+            Msg::Error("vertex not attach to a CAD entity");
+          }
+        }
+      }
+    }
+
+    /* Check quality of quads */
+    if(gf->quadrangles.size() > 0) {
+      bool qualityOk = true;
+      double sicnMin, sicnAvg;
+      computeSICN(
+        dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+        sicnMin, sicnAvg);
+      if(sicnMin < 0.) {
+        Msg::Warning("- refine with projection: quality negative (%.3f) on "
+                     "face %i after projection, rollback",
+                     sicnMin, gf->tag());
+        qualityOk = false;
+      }
+      if(!qualityOk) {
+        for(auto &kv : backupPositionLinear) { kv.first->setXYZ(kv.second); }
+      }
+    }
+
+    /* Smooth geometry (quick) */
+    if(sp != nullptr) {
+      double timeMax = 0.3;
+      optimizeGeometryQuadMesh(gf, sp, timeMax);
+    }
+
+    if(sp != nullptr) delete sp;
+
+    if(PARANO_VALIDITY) {
+      errorAndAbortIfInvalidVertexInElements(
+        dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+        "after surf proj");
+    }
+  }
+
+  const bool SHOW_QUADINIT = SHOW_INTERMEDIATE_VIEWS;
+  if(SHOW_QUADINIT) {
+    std::vector<MElement *> elements;
+    for(GFace *gf : model_faces(gm)) {
+      append(elements,
+             dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles));
+      // showUVParametrization(gf,dynamic_cast_vector<MQuadrangle*,MElement*>(gf->quadrangles),"quad_uvs");
+    }
+    GeoLog::add(elements, "qqs_quadinit");
+    GeoLog::flush();
+  }
+
+  if(true || Msg::GetVerbosity() >= 99) {
+    std::unordered_map<std::string, double> stats;
+    appendQuadMeshStatistics(gm, stats, "Mesh_");
+    printStatistics(
+      stats, "Quad mesh after subdivision, projection and small smoothing:");
+  }
+
+  if(PARANO_VALIDITY) {
+    errorAndAbortIfInvalidVertexInModel(gm, "after refine + proj");
+  }
+
+  return 0;
+}
+
+int optimizeQuadMeshWithDiskQuadrangulationRemeshing(GFace *gf)
+{
+  if(gf->triangles.size() > 0 || gf->quadrangles.size() == 0) return -1;
+
+  // Disk quadrangulation remeshing use the CAD normals to compute the signed
+  // quality, so the orientation is important.
+  bool invertNormals = meshOrientationIsOppositeOfCadOrientation(gf);
+
+  /* For each bdr vertex, compute the ideal valence (based on angle viewed from
+   * the face) */
+  unordered_map<MVertex *, double> qValIdeal;
+  computeBdrVertexIdealValence(gf->quadrangles, qValIdeal);
+
+  /* Vertex to quads */
+  unordered_map<MVertex *, std::vector<MElement *> > adj;
+  for(MQuadrangle *f : gf->quadrangles)
+    for(size_t lv = 0; lv < 4; ++lv) {
+      MVertex *v = f->getVertex(lv);
+      adj[v].push_back(f);
+    }
+
+  DQStats stats;
+  DQOptions opt;
+  opt.invertNormalsForQuality = invertNormals;
+  bool alwaysBuildSurfaceProjector = true;
+  if(alwaysBuildSurfaceProjector || !haveNiceParametrization(gf) ||
+     (gf->periodic(0) || gf->periodic(1))) {
+    opt.sp = new SurfaceProjector();
+    bool okf = fillSurfaceProjector(gf, opt.sp);
+    if(!okf) {
+      Msg::Error("- Face %i: failed to get a surface projector", gf->tag());
+      return false;
+    }
+  }
+
+  double t1 = Cpu();
+
+  int sc = improveCornerValences(gf, qValIdeal, adj, opt, stats);
+  if(sc != 0) {
+    Msg::Warning("optimize quad topology: failed to improve corner valences");
+  }
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "after corner");
+  }
+
+  int scu = improveCurveValences(gf, qValIdeal, adj, opt, stats);
+  if(scu != 0) {
+    Msg::Warning("optimize quad topology: failed to improve curve valences");
+  }
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "after curve");
+  }
+
+  int sci = improveInteriorValences(gf, qValIdeal, adj, opt, stats);
+  if(sci != 0) {
+    Msg::Warning("optimize quad topology: failed to improve interior valences");
+  }
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "after interior");
+  }
+
+  /* Smooth geometry (quick) */
+  double timeMax = 0.3;
+  optimizeGeometryQuadMesh(gf, opt.sp, timeMax);
+
+  if(opt.sp) {
+    delete opt.sp;
+    opt.sp = nullptr;
+  }
+
+  double t2 = Cpu();
+
+  Msg::Info("- Face %i: disk quadrangulation remeshing, improved valence on "
+            "%li/%li/%li corner/curve/surface vertices (in %.3f sec), "
+            "remaining non-ideal: %li/%li/%li",
+            gf->tag(), stats.nCornerValFixed, stats.nCurveValFixed,
+            stats.nSurfaceValFixed, t2 - t1, stats.nCornerValRemaining,
+            stats.nCurveValRemaining, stats.nSurfaceValRemaining);
+
+  if(PARANO_QUALITY) {
+    errorAndAbortIfNegativeElement(
+      gf, dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+      "after geom optim");
+  }
+
+  return 0;
+}
+
+int quadMeshingOfSimpleFacesWithPatterns(GModel *gm,
+                                         double minimumQualityRequired)
+{
+  if (CTX::instance()->mesh.quadqsTopoOptimMethods != 0
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 100
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 101
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 110
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 111
+     ) {
+    Msg::Debug("optimize topology of simple CAD faces with patterns: avoided because quadqsTopoOptimMethods = %i",
+        CTX::instance()->mesh.quadqsTopoOptimMethods);
+    return 0;
+  }
+
+
+  std::vector<GFace *> faces = model_faces(gm);
+  Msg::Info("Pattern-based quad meshing of simple CAD faces ...", faces.size());
+
+  initQuadPatterns();
+
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+  for(size_t f = 0; f < faces.size(); ++f) {
+    GFace *gf = faces[f];
+    if(gf->meshStatistics.status != GFace::PENDING) continue;
+    if(CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility()) continue;
+    if(CTX::instance()->debugSurface > 0 &&
+       gf->tag() != CTX::instance()->debugSurface)
+      continue;
+    if(gf->triangles.size() > 0 || gf->quadrangles.size() == 0) continue;
+    if(gf->embeddedEdges().size() > 0 || gf->embeddedVertices().size() > 0) continue;
+
+    bool invertNormals = meshOrientationIsOppositeOfCadOrientation(gf);
+    meshFaceWithGlobalPattern(gf, invertNormals, minimumQualityRequired);
+
+    if(PARANO_VALIDITY) {
+      errorAndAbortIfInvalidVertexInElements(
+        dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+        "after face pattern meshing");
+    }
+  }
+
+  std::unordered_map<std::string, double> stats;
+  appendQuadMeshStatistics(gm, stats, "Mesh_");
+  printStatistics(stats,
+                  "Quad mesh after simple face pattern-based remeshing:");
+
+  if(PARANO_VALIDITY) {
+    errorAndAbortIfInvalidVertexInModel(
+      gm, "global check after face pattern meshing");
+  }
+
+  return 0;
+}
+
+int optimizeTopologyWithDiskQuadrangulationRemeshing(GModel *gm)
+{
+  if (CTX::instance()->mesh.quadqsTopoOptimMethods != 0
+      && CTX::instance()->mesh.quadqsTopoOptimMethods !=  10
+      && CTX::instance()->mesh.quadqsTopoOptimMethods !=  11
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 110
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 111
+     ) {
+    Msg::Debug("optimize topology with disk quadrangulation remeshing: avoided because quadqsTopoOptimMethods = %i",
+        CTX::instance()->mesh.quadqsTopoOptimMethods);
+    return 0;
+  }
+
+  Msg::Info(
+    "Optimize topology of quad meshes with disk quadrangulation remeshing ...");
+
+  initDiskQuadrangulations();
+
+  std::vector<GFace *> faces = model_faces(gm);
+
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+  for(size_t f = 0; f < faces.size(); ++f) {
+    GFace *gf = faces[f];
+    if(gf->meshStatistics.status != GFace::PENDING) continue;
+    if(CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility()) continue;
+    if(CTX::instance()->debugSurface > 0 &&
+       gf->tag() != CTX::instance()->debugSurface)
+      continue;
+    if(gf->triangles.size() > 0 || gf->quadrangles.size() == 0) continue;
+
+    optimizeQuadMeshWithDiskQuadrangulationRemeshing(gf);
+
+    if(PARANO_VALIDITY) {
+      errorAndAbortIfInvalidVertexInElements(
+        dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+        "after disk quadrangulation remeshing");
+    }
+  }
+
+  std::unordered_map<std::string, double> stats;
+  appendQuadMeshStatistics(gm, stats, "Mesh_");
+  printStatistics(stats, "Quad mesh after disk quadrangulation remeshing:");
+
+  if(stats["Mesh_SICN_min"] < 0.) {
+    Msg::Warning("negative quality on some quads");
+  }
+
+  if(PARANO_VALIDITY) {
+    errorAndAbortIfInvalidVertexInModel(
+      gm, "global check after disk quadrangulation remeshing");
+  }
+
+  return 0;
+}
+
+int optimizeTopologyWithCavityRemeshing(GModel *gm)
+{
+  if (CTX::instance()->mesh.quadqsTopoOptimMethods != 0
+      && CTX::instance()->mesh.quadqsTopoOptimMethods !=   1
+      && CTX::instance()->mesh.quadqsTopoOptimMethods !=  11
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 101
+      && CTX::instance()->mesh.quadqsTopoOptimMethods != 111
+     ) {
+    Msg::Debug("optimize topology with cavity remeshing: avoided because quadqsTopoOptimMethods = %i",
+        CTX::instance()->mesh.quadqsTopoOptimMethods);
+    return 0;
+  }
+
+  std::vector<GFace *> faces = model_faces(gm);
+  Msg::Info(
+    "Optimize topology of quad meshes with cavity remeshing (%li faces) ...",
+    faces.size());
+
+  initQuadPatterns();
+
+  if (!backgroudMeshExists(BMESH_NAME)) {
+    Msg::Info("no background mesh, creating one with the current quad mesh");
+    GlobalBackgroundMesh &bmesh = getBackgroundMesh(BMESH_NAME);
+    int status = bmesh.importGModelMeshes(gm, true);
+    if(status != 0) {
+      Msg::Error("failed to import model mesh in background mesh");
+      return -1;
+    }
+  }
+
+#if defined(_OPENMP)
+#pragma omp parallel for schedule(dynamic)
+#endif
+  for(size_t f = 0; f < faces.size(); ++f) {
+    GFace *gf = faces[f];
+    if(gf->meshStatistics.status != GFace::PENDING) continue;
+    if(CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility()) continue;
+    if(CTX::instance()->debugSurface > 0 &&
+       gf->tag() != CTX::instance()->debugSurface)
+      continue;
+    if(gf->triangles.size() > 0 || gf->quadrangles.size() == 0) continue;
+    gf->meshStatistics.status = GFace::DONE;
+
+    /* Get singularities from global storage */
+    std::vector<std::pair<SPoint3, int> > singularities;
+    bool okg = getSingularitiesFromBackgroundField(gf, singularities);
+    if (!okg) {
+      Msg::Warning("- Face %i: failed to get singularities from background field", gf->tag());
+    }
+
+    bool invertNormals = meshOrientationIsOppositeOfCadOrientation(gf);
+    improveQuadMeshTopologyWithCavityRemeshing(gf, singularities,
+                                               invertNormals);
+
+    if(PARANO_VALIDITY) {
+      errorAndAbortIfInvalidVertexInElements(
+        dynamic_cast_vector<MQuadrangle *, MElement *>(gf->quadrangles),
+        "after cavity remeshing");
+    }
+  }
+
+  std::unordered_map<std::string, double> stats;
+  appendQuadMeshStatistics(gm, stats, "Mesh_");
+  printStatistics(stats, "Quad mesh after cavity remeshing:");
+
+  writeStatistics(stats, "quadqs_statistics.json");
+
+  if(PARANO_VALIDITY) {
+    errorAndAbortIfInvalidVertexInModel(gm,
+                                        "global check after cavity remeshing");
+  }
+
+  GeoLog::flush();
+
+  return 0;
+}
+
+#else
+/* else: without QUADMESHINGTOOLS module*/
+
+int BuildBackgroundMeshAndGuidingField(GModel *gm, bool overwriteGModelMesh,
+                                       bool deleteGModelMeshAfter, int N)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "BuildBackgroundMeshAndGuidingField");
+  return -10;
+}
+bool backgroundMeshAndGuidingFieldExists(GModel *gm)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "backgroundMeshAndGuidingFieldExists");
+  return -10;
+}
+int optimizeTopologyWithDiskQuadrangulationRemeshing(GModel *gm)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "optimizeTopologyWithCavityRemeshing");
+  return -10;
+}
+int optimizeTopologyWithCavityRemeshing(GModel *gm)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "optimizeTopologyWithCavityRemeshing");
+  return -10;
+}
+int quadMeshingOfSimpleFacesWithPatterns(GModel *gm,
+                                         double minimumQualityRequired)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "quadMeshingOfSimpleFacesWithPatterns");
+  return -10;
+}
+int RefineMeshWithBackgroundMeshProjection(GModel *gm)
+{
+  Msg::Error("Module QUADMESHINGTOOLS required for function "
+             "RefineMeshWithBackgroundMeshProjection");
+  return -10;
+}
+
+#endif
+/* endif: QUADMESHINGTOOLS*/
+
+int transferSeamGEdgesVerticesToGFace(GModel *gm)
+{
+  for(GFace *gf : gm->getFaces()) {
+    /* Transfer the vertices from seam GEdge to associated GFace */
+    std::unordered_map<MVertex *, MVertex *> old2new;
+    for(GEdge *ge : gf->edges()) {
+      if(ge->isSeam(gf) && ge->faces().size() == 1 && ge->faces()[0] == gf) {
+        /* GEdge interior vertices */
+        for(MVertex *ov : ge->mesh_vertices) {
+          auto it = old2new.find(ov);
+          if(it != old2new.end()) continue; /* already changed */
+          SPoint3 p = ov->point();
+          double t;
+          ov->getParameter(0, t);
+          SPoint2 uv = ge->reparamOnFace(gf, t, -1);
+          MVertex *nv = new MFaceVertex(p.x(), p.y(), p.z(), gf, uv[0], uv[1]);
+          nv->setParameter(0, uv[0]);
+          nv->setParameter(1, uv[1]);
+          gf->mesh_vertices.push_back(nv);
+          old2new[ov] = nv;
+          delete ov;
+        }
+        ge->mesh_vertices.clear();
+        for(size_t i = 0; i < ge->lines.size(); ++i) { delete ge->lines[i]; }
+        ge->lines.clear();
+
+        /* GEdge boundary vertices */
+        for(GVertex *gv : ge->vertices())
+          if(gv->mesh_vertices.size() == 1) {
+            std::vector<GEdge *> otherCurves;
+            for(GEdge *ge2 : gv->edges())
+              if(ge2 != ge) {
+                if(ge2->vertices().front() == ge2->vertices().back() &&
+                   ge2->length() <
+                     CTX::instance()->geom.tolerance) { /* Empty curve */
+                  continue;
+                }
+                otherCurves.push_back(ge2);
+              }
+            std::sort(otherCurves.begin(), otherCurves.end());
+            otherCurves.erase(
+              std::unique(otherCurves.begin(), otherCurves.end()),
+              otherCurves.end());
+
+            if(otherCurves.size() > 0) continue;
+            MVertex *ov = gv->mesh_vertices[0];
+            auto it = old2new.find(ov);
+            if(it != old2new.end()) continue; /* already changed */
+            Msg::Debug(
+              "transfer: mesh vertex at CAD corner %i moved to face %i",
+              gv->tag(), gf->tag());
+            SPoint3 p = ov->point();
+            SPoint2 uv = gv->reparamOnFace(gf, 0);
+            MVertex *nv =
+              new MFaceVertex(p.x(), p.y(), p.z(), gf, uv[0], uv[1]);
+            nv->setParameter(0, uv[0]);
+            nv->setParameter(1, uv[1]);
+            gf->mesh_vertices.push_back(nv);
+            old2new[ov] = nv;
+
+            /* Note/warning: let the MVertex on the GVertex live. If the MVertex
+             * is deleted, I/O is broken.
+             * FIXME: support for GVertex without MVertex in mesh I/O */
+            // delete ov;
+            // gv->mesh_vertices.clear();
+          }
+      }
+    }
+    if(old2new.size() > 0) {
+      for(MElement *f : gf->triangles)
+        for(size_t lv = 0; lv < 3; ++lv) {
+          MVertex *v = f->getVertex(lv);
+          auto it = old2new.find(v);
+          if(it != old2new.end()) { f->setVertex(lv, it->second); }
+        }
+      for(MElement *f : gf->quadrangles)
+        for(size_t lv = 0; lv < 4; ++lv) {
+          MVertex *v = f->getVertex(lv);
+          auto it = old2new.find(v);
+          if(it != old2new.end()) { f->setVertex(lv, it->second); }
+        }
+    }
+  }
+  return 0;
+}
+
+QuadqsContextUpdater::QuadqsContextUpdater()
+{
+  algo2d = CTX::instance()->mesh.algo2d;
+  recombineAll = CTX::instance()->mesh.recombineAll;
+  algoRecombine = CTX::instance()->mesh.algoRecombine;
+  recombineOptimizeTopology = CTX::instance()->mesh.recombineOptimizeTopology;
+  lcFactor = CTX::instance()->mesh.lcFactor;
+  lcMin = CTX::instance()->mesh.lcMin;
+  lcMax = CTX::instance()->mesh.lcMax;
+  lcFromPoints = CTX::instance()->mesh.lcFromPoints;
+  minCurveNodes = CTX::instance()->mesh.minCurveNodes;
+  minCircleNodes = CTX::instance()->mesh.minCircleNodes;
+
+  setQuadqsOptions();
+}
+
+QuadqsContextUpdater::~QuadqsContextUpdater() { restoreInitialOption(); }
+
+void QuadqsContextUpdater::setQuadqsOptions()
+{
+  Msg::Debug("set special quadqs options in the global context");
+  CTX::instance()->mesh.algo2d = ALGO_2D_QUAD_QUASI_STRUCT;
+  CTX::instance()->mesh.recombineAll = 1;
+  CTX::instance()->mesh.algoRecombine = 0;
+  CTX::instance()->mesh.recombineOptimizeTopology = 0;
+  CTX::instance()->mesh.lcFactor = 1.;
+  CTX::instance()->mesh.lcMin = 0.;
+  CTX::instance()->mesh.lcMax = 1.e22;
+  CTX::instance()->mesh.lcFromPoints = 0;
+  CTX::instance()->mesh.minCurveNodes = 0;
+  CTX::instance()->mesh.minCircleNodes = 0;
+}
+
+void QuadqsContextUpdater::restoreInitialOption()
+{
+  Msg::Debug("restore options in the global context");
+  CTX::instance()->mesh.algo2d = algo2d;
+  CTX::instance()->mesh.recombineAll = recombineAll;
+  CTX::instance()->mesh.algoRecombine = algoRecombine;
+  CTX::instance()->mesh.recombineOptimizeTopology = recombineOptimizeTopology;
+  CTX::instance()->mesh.lcFactor = lcFactor;
+  CTX::instance()->mesh.lcMin = lcMin;
+  CTX::instance()->mesh.lcMax = lcMax;
+  CTX::instance()->mesh.lcFromPoints = lcFromPoints;
+  CTX::instance()->mesh.minCurveNodes = minCurveNodes;
+  CTX::instance()->mesh.minCircleNodes = minCircleNodes;
+}
diff --git a/Mesh/meshQuadQuasiStructured.h b/Mesh/meshQuadQuasiStructured.h
new file mode 100644
index 0000000000000000000000000000000000000000..dd2c38d9f2aa9af5505c1cabca9ff7eb01a8dcdd
--- /dev/null
+++ b/Mesh/meshQuadQuasiStructured.h
@@ -0,0 +1,132 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#ifndef MESH_QUAD_QUASI_STRUCTURED_H
+#define MESH_QUAD_QUASI_STRUCTURED_H
+
+class GModel;
+
+/**
+ * @brief The QuadQuasiStructured meshing mode requires control
+ *        over various meshing parameters which are stored in the
+ *        global context. To deal with this without adding conditions
+ *        everywhere in the other meshing parts, we use this updater
+ *        which must be created at the beginning of the meshing cycle,
+ *        and deleted at the end to restore the initial values.
+ */
+class QuadqsContextUpdater {
+public:
+  QuadqsContextUpdater();
+  ~QuadqsContextUpdater();
+
+protected:
+  void setQuadqsOptions();
+  void restoreInitialOption();
+
+protected:
+  int algo2d;
+  int recombineAll;
+  int algoRecombine;
+  int recombineOptimizeTopology;
+  double lcFactor;
+  double lcMin;
+  double lcMax;
+  int lcFromPoints;
+  int minCurveNodes;
+  int minCircleNodes;
+};
+
+/**
+ * @brief
+ *
+ * @param[in] gm GModel containing the CAD and/or meshes
+ * @param[in] overwriteGModelMesh delete existing mesh, rebuild from CAD
+ * @param[in] deleteGModelMeshAfter after background mesh creation, delete the
+ * GModel mesh
+ * @param[in] N the N-symmetry field invariance. N=4 for cross and N=6 for
+ * asterisk fields
+ *
+ * @return 0 if success
+ */
+int BuildBackgroundMeshAndGuidingField(GModel *gm,
+                                       bool overwriteGModelMesh = false,
+                                       bool deleteGModelMeshAfter = false,
+                                       int N = 4);
+
+/**
+ * @brief To check if a compatible background mesh and
+ *        guiding field already exists
+ *
+ * @return true if exists
+ */
+bool backgroundMeshAndGuidingFieldExists(GModel *gm);
+
+/**
+ * @brief Look for non-ideal vertex valences in quad mesh and find a better
+ *        local remeshing by looking into all disk quadrangulations.
+ *        Quad quality (SICN) is monitored and the minimum will not decrease.
+ *        Executes over CAD faces in parallel if multiple threads available.
+ *        Only faces whose meshing status is GFace::PENDING are processed
+ *
+ * @param gm The model containing the face quad meshes.
+ *
+ * @return 0 if success
+ */
+int optimizeTopologyWithDiskQuadrangulationRemeshing(GModel *gm);
+
+/**
+ * @brief Mesh vertices on seam curves (and isolated corners) are
+ *        reparametrized on the associated GFace and transfered.
+ *        The seam curves have empty meshes in the end.
+ *
+ * @param gm The model containing the meshes
+ *
+ * @return 0 if success
+ */
+int transferSeamGEdgesVerticesToGFace(GModel *gm);
+
+/**
+ * @brief Look for patches of quads with >=3 irregular vertices which
+ *        can be remeshed with more regular quad meshes. The replacement
+ *        meshes are subdivisions of a list of predefined patterns.
+ *        Irregular vertices matching cross field singularities are
+ *        preserved.
+ *        Executes over CAD faces in parallel if multiple threads available.
+ *        Only faces whose meshing status is GFace::PENDING are processed
+ *
+ * @param gm The model containing the face quad meshes.
+ *
+ * @return 0 if success
+ */
+int optimizeTopologyWithCavityRemeshing(GModel *gm);
+
+/**
+ * @brief Look for simple CAD faces (topological disk, a few corners)
+ *        which can be remeshed with simple quad patterns.
+ *        The patterns are the same that are used in cavity remeshing.
+ *        Executes over CAD faces in parallel if multiple threads available.
+ *        Only faces whose meshing status is GFace::PENDING are processed
+ *
+ * @param gm The model containing the face quad meshes.
+ * @param minimumQualityRequired Minimum quality (SICN) required to accept a new
+ * quad mesh
+ *
+ * @return 0 if success
+ */
+int quadMeshingOfSimpleFacesWithPatterns(GModel *gm,
+                                         double minimumQualityRequired = 0.5);
+
+/**
+ * @brief Midpoint subdivision of the surface mesh with projections
+ *        on the CAD surfaces, using the background mesh for
+ *        faster projections.
+ *
+ * @param gm The model containg the surface meshes
+ *
+ * @return 0 if success
+ */
+int RefineMeshWithBackgroundMeshProjection(GModel *gm);
+
+#endif
diff --git a/Mesh/meshRelocateVertex.cpp b/Mesh/meshRelocateVertex.cpp
index 616845d417e21100b3352864ada99c0a00ce8a71..fcde60011abda7167e0a03f92c283481a0acb1c5 100644
--- a/Mesh/meshRelocateVertex.cpp
+++ b/Mesh/meshRelocateVertex.cpp
@@ -410,6 +410,7 @@ void getAllBoundaryLayerVertices(GFace *gf, std::set<MVertex *> &vs);
 void RelocateVertices(GFace *gf, int niter, double tol)
 {
   if(!niter) return;
+  Msg::Debug("relocate vertices (face %i)", gf->tag());
 
   std::set<MVertex *> vs;
   getAllBoundaryLayerVertices(gf, vs);
diff --git a/Mesh/meshTriangulation.cpp b/Mesh/meshTriangulation.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c712e2dd469fed483f4320ea3855557d38a01321
--- /dev/null
+++ b/Mesh/meshTriangulation.cpp
@@ -0,0 +1,735 @@
+// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#include <utility>
+#include <list>
+#include <map>
+#include <unordered_map>
+#include "gmsh.h"
+#include "GModel.h"
+#include "GFace.h"
+#include "GEdge.h"
+#include "MLine.h"
+#include "MVertex.h"
+#include "MTriangle.h"
+#include "meshTriangulation.h"
+#include "SBoundingBox3d.h"
+#include "robustPredicates.h"
+#include "meshGFaceDelaunayInsertion.h"
+#include "qualityMeasures.h"
+#include "Numeric.h"
+
+void swap(double &a, double &b)
+{
+  double temp = a;
+  a = b;
+  b = temp;
+}
+
+size_t HilbertCoordinates(double x, double y, double x0, double y0, double xRed,
+                          double yRed, double xBlue, double yBlue)
+{
+  size_t BIG = 1073741824;
+  size_t RESULT = 0;
+  for(int i = 0; i < 16; i++) {
+    double coordRed = (x - x0) * xRed + (y - y0) * yRed;
+    double coordBlue = (x - x0) * xBlue + (y - y0) * yBlue;
+    xRed /= 2;
+    yRed /= 2;
+    xBlue /= 2;
+    yBlue /= 2;
+    if(coordRed <= 0 && coordBlue <= 0) { // quadrant 0
+      x0 -= (xBlue + xRed);
+      y0 -= (yBlue + yRed);
+      swap(xRed, xBlue);
+      swap(yRed, yBlue);
+    }
+    else if(coordRed <= 0 && coordBlue >= 0) { // quadrant 1
+      RESULT += BIG;
+      x0 += (xBlue - xRed);
+      y0 += (yBlue - yRed);
+    }
+    else if(coordRed >= 0 && coordBlue >= 0) { // quadrant 2
+      RESULT += 2 * BIG;
+      x0 += (xBlue + xRed);
+      y0 += (yBlue + yRed);
+    }
+    else if(coordRed >= 0 && coordBlue <= 0) { // quadrant 3
+      x0 += (-xBlue + xRed);
+      y0 += (-yBlue + yRed);
+      swap(xRed, xBlue);
+      swap(yRed, yBlue);
+      xBlue = -xBlue;
+      yBlue = -yBlue;
+      xRed = -xRed;
+      yRed = -yRed;
+      RESULT += 3 * BIG;
+    }
+    else
+      Msg::Warning("Hilbert failed %d %d", coordRed, coordBlue);
+    BIG /= 4;
+  }
+  return RESULT;
+}
+
+struct pair_hash {
+  template <class T1, class T2>
+  std::size_t operator()(const std::pair<T1, T2> &pair) const
+  {
+    return std::hash<T1>()(pair.first) ^ std::hash<T2>()(pair.second);
+  }
+};
+
+int GFace2PolyMesh(int faceTag, PolyMesh **pm)
+{
+  *pm = new PolyMesh;
+
+  std::unordered_map<size_t, size_t> nodeLabels;
+
+  {
+    std::vector<std::size_t> nodeTags;
+    std::vector<double> coord;
+    std::vector<double> parametricCoord;
+    gmsh::model::mesh::getNodes(nodeTags, coord, parametricCoord, 2, faceTag,
+                                true, true);
+
+    size_t j = 0;
+    for(size_t i = 0; i < nodeTags.size(); i++, j += 2) {
+      (*pm)->vertices.push_back(new PolyMesh::Vertex(
+        parametricCoord[j], parametricCoord[j + 1], 0.0, nodeTags[i]));
+      nodeLabels[nodeTags[i]] = i;
+    }
+  }
+
+  {
+    std::vector<int> elementTypes = {3};
+    std::vector<std::vector<std::size_t> > elementTags;
+    std::vector<std::vector<std::size_t> > nodeTags;
+    gmsh::model::mesh::getElements(elementTypes, elementTags, nodeTags, 2,
+                                   faceTag);
+    std::unordered_map<std::pair<size_t, size_t>, PolyMesh::HalfEdge *,
+                       pair_hash>
+      opposites;
+
+    for(size_t i = 0; i < nodeTags.size(); i += 3) {
+      size_t currentHE = (*pm)->hedges.size();
+      size_t currentF = (*pm)->faces.size();
+      for(int j = 0; j < 3; j++)
+        (*pm)->hedges.push_back(
+          new PolyMesh::HalfEdge((*pm)->vertices[nodeTags[0][i + j]]));
+      PolyMesh::HalfEdge *he0 = (*pm)->hedges[currentHE + 0];
+      PolyMesh::HalfEdge *he1 = (*pm)->hedges[currentHE + 1];
+      PolyMesh::HalfEdge *he2 = (*pm)->hedges[currentHE + 2];
+      (*pm)->faces.push_back(new PolyMesh::Face(he0));
+      he0->prev = he2;
+      he0->next = he1;
+      he1->prev = he0;
+      he1->next = he2;
+      he2->prev = he1;
+      he2->next = he0;
+      he0->v->he = he0;
+      he1->v->he = he1;
+      he2->v->he = he2;
+      he0->f = (*pm)->faces[currentF];
+      he1->f = (*pm)->faces[currentF];
+      he2->f = (*pm)->faces[currentF];
+      std::pair<size_t, size_t> p0 =
+        std::make_pair(nodeTags[0][i + 1], nodeTags[0][i]);
+      std::pair<size_t, size_t> p1 =
+        std::make_pair(nodeTags[0][i + 2], nodeTags[0][i + 1]);
+      std::pair<size_t, size_t> p2 =
+        std::make_pair(nodeTags[0][i], nodeTags[0][i + 2]);
+      auto it0 = opposites.find(p0);
+      auto it1 = opposites.find(p1);
+      auto it2 = opposites.find(p2);
+      if(it0 == opposites.end()) {
+        p0 = std::make_pair(nodeTags[0][i + 0], nodeTags[0][i + 1]);
+        opposites[p0] = he0;
+      }
+      else {
+        he0->opposite = it0->second;
+        it0->second->opposite = he0;
+      }
+
+      if(it1 == opposites.end()) {
+        p1 = std::make_pair(nodeTags[0][i + 1], nodeTags[0][i + 2]);
+        opposites[p1] = he1;
+      }
+      else {
+        he1->opposite = it1->second;
+        it1->second->opposite = he1;
+      }
+
+      if(it2 == opposites.end()) {
+        p2 = std::make_pair(nodeTags[0][i + 2], nodeTags[0][i]);
+        opposites[p2] = he2;
+      }
+      else {
+        he2->opposite = it2->second;
+        it2->second->opposite = he2;
+      }
+    }
+  }
+  return 0;
+}
+
+static int delaunayEdgeCriterionPlaneIsotropic(PolyMesh::HalfEdge *he, void *)
+{
+  if(he->opposite == NULL) return -1;
+  PolyMesh::Vertex *v0 = he->v;
+  PolyMesh::Vertex *v1 = he->next->v;
+  PolyMesh::Vertex *v2 = he->next->next->v;
+  PolyMesh::Vertex *v = he->opposite->next->next->v;
+
+  // FIXME : should be oriented anyway !
+  double result = -robustPredicates::incircle(v0->position, v1->position,
+                                              v2->position, v->position);
+
+  return (result > 0) ? 1 : 0;
+}
+
+static void faceCircumCenter(PolyMesh::HalfEdge *he, GFace *gf, double *res,
+                             double *uv)
+{
+  PolyMesh::Vertex *v0 = he->v;
+  PolyMesh::Vertex *v1 = he->next->v;
+  PolyMesh::Vertex *v2 = he->next->next->v;
+  GPoint p0 = gf->point(v0->position.x(), v0->position.y());
+  GPoint p1 = gf->point(v1->position.x(), v1->position.y());
+  GPoint p2 = gf->point(v2->position.x(), v2->position.y());
+  double q0[3] = {p0.x(), p0.y(), p0.z()};
+  double q1[3] = {p1.x(), p1.y(), p1.z()};
+  double q2[3] = {p2.x(), p2.y(), p2.z()};
+  circumCenterXYZ(q0, q1, q2, res, uv);
+}
+
+static double faceQuality(PolyMesh::HalfEdge *he, GFace *gf)
+{
+  PolyMesh::Vertex *v0 = he->v;
+  PolyMesh::Vertex *v1 = he->next->v;
+  PolyMesh::Vertex *v2 = he->next->next->v;
+  GPoint p0 = gf->point(v0->position.x(), v0->position.y());
+  GPoint p1 = gf->point(v1->position.x(), v1->position.y());
+  GPoint p2 = gf->point(v2->position.x(), v2->position.y());
+  return qmTriangle::gamma(p0.x(), p0.y(), p0.z(), p1.x(), p1.y(), p1.z(),
+                           p2.x(), p2.y(), p2.z());
+}
+
+/*
+static int qualityCriterion3D(PolyMesh::HalfEdge *he, void *p){
+  if (he->data > 0) return -1;
+  if (he->opposite == nullptr) return -1;
+  if (p == nullptr) return -1;
+
+  GFace *gf = (GFace*)p;
+
+  PolyMesh::Vertex *v0 = he->v;
+  PolyMesh::Vertex *v1 = he->next->v;
+  PolyMesh::Vertex *v2 = he->next->next->v;
+  PolyMesh::Vertex *v3 = he->opposite->next->next->v;
+
+  GPoint p0 = gf->point (v0->position.x(),v0->position.y());
+  GPoint p1 = gf->point (v1->position.x(),v1->position.y());
+  GPoint p2 = gf->point (v2->position.x(),v2->position.y());
+  GPoint p3 = gf->point (v3->position.x(),v3->position.y());
+
+  double q1 = qmTriangle::gamma
+(p0.x(),p0.y(),p0.z(),p1.x(),p1.y(),p1.z(),p2.x(),p2.y(),p2.z()); double q2 =
+qmTriangle::gamma
+(p2.x(),p2.y(),p2.z(),p3.x(),p3.y(),p3.z(),p0.x(),p0.y(),p0.z());
+
+  double o1 = qmTriangle::gamma
+(p1.x(),p1.y(),p1.z(),p2.x(),p2.y(),p2.z(),p3.x(),p3.y(),p3.z()); double o2 =
+qmTriangle::gamma
+(p3.x(),p3.y(),p3.z(),p0.x(),p0.y(),p0.z(),p1.x(),p1.y(),p1.z());
+
+  return std::max(fabs(q1),fabs(q2)) > std::max(fabs(o1),fabs(o2)) ? 0 : 1;
+}
+*/
+
+static PolyMesh::Face *Walk(PolyMesh::Face *f, double x, double y)
+{
+  double POS[2] = {x, y};
+  PolyMesh::HalfEdge *he = f->he;
+
+  while(1) {
+    PolyMesh::Vertex *v0 = he->v;
+    PolyMesh::Vertex *v1 = he->next->v;
+    PolyMesh::Vertex *v2 = he->next->next->v;
+
+    double s0 = -robustPredicates::orient2d(v0->position, v1->position, POS);
+    double s1 = -robustPredicates::orient2d(v1->position, v2->position, POS);
+    double s2 = -robustPredicates::orient2d(v2->position, v0->position, POS);
+
+    if(s0 >= 0 && s1 >= 0 && s2 >= 0) {
+      /*      printf("Face %g %g %g / %g %g %g / %g %g %g \n",
+         v0->position.x(), v0->position.y(), v0->position.z(),
+         v1->position.x(), v1->position.y(), v1->position.z(),
+         v2->position.x(), v2->position.y(), v2->position.z());
+         printf("point %g %g CURRENT FACE %p %g %g %g\n", x,y,he->f,
+         s0,s1,s2);*/
+      //      getchar();
+      return he->f;
+    }
+    else if(s0 <= 0 && s1 >= 0 && s2 >= 0)
+      he = he->opposite;
+    else if(s1 <= 0 && s0 >= 0 && s2 >= 0)
+      he = he->next->opposite;
+    else if(s2 <= 0 && s0 >= 0 && s1 >= 0)
+      he = he->next->next->opposite;
+    else if(s0 <= 0 && s1 <= 0)
+      he = s0 > s1 ? he->opposite : he->next->opposite;
+    else if(s0 <= 0 && s2 <= 0)
+      he = s0 > s2 ? he->opposite : he->next->next->opposite;
+    else if(s1 <= 0 && s2 <= 0)
+      he = s1 > s2 ? he->next->opposite : he->next->next->opposite;
+    else {
+      printf("Face %g %g %g / %g %g %g / %g %g %g \n", v0->position.x(),
+             v0->position.y(), v0->position.z(), v1->position.x(),
+             v1->position.y(), v1->position.z(), v2->position.x(),
+             v2->position.y(), v2->position.z());
+      printf("ERROR point %g %g CURRENT FACE %p %g %g %g\n", x, y, he->f, s0,
+             s1, s2);
+    }
+    if(he == NULL) break;
+  }
+  // should only come here wether the triangulated domain is not convex
+  //  printf("NO FACE FOUND\n");
+  return NULL;
+}
+
+// recover an edge that goes from v_start --> v_end
+// ----------------------------------- assume it's internal !!!
+
+static int intersect(PolyMesh::Vertex *v0, PolyMesh::Vertex *v1,
+                     PolyMesh::Vertex *b0, PolyMesh::Vertex *b1)
+{
+  double s0 =
+    robustPredicates::orient2d(v0->position, v1->position, b0->position);
+  double s1 =
+    robustPredicates::orient2d(v0->position, v1->position, b1->position);
+  if(s0 * s1 >= 0) return 0;
+  double t0 =
+    robustPredicates::orient2d(b0->position, b1->position, v0->position);
+  double t1 =
+    robustPredicates::orient2d(b0->position, b1->position, v1->position);
+  if(t0 * t1 >= 0) return 0;
+  return 1;
+}
+
+int recover_edge(PolyMesh *pm, PolyMesh::Vertex *v_start,
+                 PolyMesh::Vertex *v_end)
+{
+  PolyMesh::HalfEdge *he = v_start->he;
+  std::list<PolyMesh::HalfEdge *> _list;
+
+  //  printf("recovering edge %d %d\n",v_start->data,v_end->data);
+
+  do {
+    PolyMesh::Vertex *v1 = he->next->v;
+    if(v1 == v_end) {
+      return 0; // edge exists
+    }
+    PolyMesh::Vertex *v2 = he->next->next->v;
+    if(v2 == v_end) {
+      return 0; // edge exists
+    }
+
+    if(intersect(v_start, v_end, v1, v2)) {
+      //      printf("INTERSECTION WITH %d %d\n",v1->data,v2->data);
+      _list.push_back(he->next);
+      break;
+    }
+    he = he->next->next->opposite;
+  } while(he != v_start->he);
+
+  if(_list.empty()) { return -1; }
+
+  // -)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)-)
+  // find all intersections
+  while(1) {
+    he = _list.back();
+    he = he->opposite;
+    if(!he) return -2;
+    he = he->next;
+    PolyMesh::Vertex *v1 = he->v;
+    PolyMesh::Vertex *v2 = he->next->v;
+    if(v2 == v_end) {
+      //  printf("END FOUND %d\n",v2->data);
+      break;
+    }
+    if(intersect(v_start, v_end, v1, v2)) {
+      //      printf("INTESECTION %d %d\n",v1->data,v2->data);
+      _list.push_back(he);
+    }
+    else {
+      he = he->next;
+      v1 = he->v;
+      v2 = he->next->v;
+      if(v2 == v_end) {
+        //	printf("END FOUND %d\n",v2->data);
+        break;
+      }
+      if(intersect(v_start, v_end, v1, v2)) {
+        //	printf("INTESECTION %d %d\n",v1->data,v2->data);
+        _list.push_back(he);
+      }
+      else {
+        return -3;
+      }
+    }
+  }
+
+  int nbIntersection = _list.size();
+  //  printf("%d intersections\n",nbIntersection);
+  //  int K = 100;
+  while(!_list.empty()) {
+    he = *_list.begin();
+    _list.erase(_list.begin());
+    // ensure that swap is allowed (convex quad)
+    if(intersect(he->v, he->next->v, he->next->next->v,
+                 he->opposite->next->next->v)) {
+      // ensure that swap removes one intersection
+      int still_intersect = intersect(v_start, v_end, he->next->next->v,
+                                      he->opposite->next->next->v);
+      //      printf("swapping %d %d\n",he->v->data,he->next->v->data);
+      pm->swap_edge(he);
+      //      pm->print4debug(K++);
+      if(still_intersect) _list.push_back(he);
+    }
+    else
+      _list.push_back(he);
+  }
+  return nbIntersection;
+}
+//-------------------------------------------------------------------------------------
+
+static PolyMesh::HalfEdge *Color(PolyMesh::HalfEdge *he, int color)
+{
+  std::stack<PolyMesh::Face *> _stack;
+  _stack.push(he->f);
+
+  PolyMesh::HalfEdge *other_side = nullptr;
+
+  while(!_stack.empty()) {
+    PolyMesh::Face *f = _stack.top();
+    _stack.pop();
+    f->data = color;
+    he = f->he;
+    for(int i = 0; i < 3; i++) {
+      if(he->data == -1 && he->opposite != NULL &&
+         he->opposite->f->data == -1) {
+        _stack.push(he->opposite->f);
+      }
+      else if(he->data != -1 && he->opposite != NULL) {
+        other_side = he->opposite;
+      }
+      he = he->next;
+    }
+  }
+  return other_side;
+}
+
+void GFaceDelaunayRefinement(size_t faceTag)
+{
+  GFace *gf = GModel::current()->getFaceByTag(faceTag);
+
+  PolyMesh *pm = GFaceInitialMesh(faceTag, 1);
+
+  std::list<PolyMesh::HalfEdge *> _list;
+  double _limit = 0.7;
+  for(auto f : pm->faces) {
+    double q = faceQuality(f->he, gf);
+    if(q < _limit && f->data == gf->tag()) _list.push_back(f->he);
+  }
+  //  int I = 1;
+  while(!_list.empty()) {
+    PolyMesh::HalfEdge *he = *_list.begin();
+    _list.erase(_list.begin());
+    double q = faceQuality(he, gf);
+    if(q < _limit) {
+      double uv[2];
+      SPoint3 cc;
+      faceCircumCenter(he, gf, cc, uv);
+      GPoint gp = gf->closestPoint(cc, uv);
+      if(gp.succeeded()) {
+        PolyMesh::Face *f = he->f;
+        f = Walk(f, gp.u(), gp.v());
+        if(f && f->data == (int)faceTag) {
+          std::vector<PolyMesh::HalfEdge *> _touched;
+          pm->split_triangle(gp.u(), gp.v(), 0, f,
+                             delaunayEdgeCriterionPlaneIsotropic, gf,
+                             &_touched);
+          if(_touched.size() == 3) {
+            // we should unsplit ...
+            // pm->undo_split(_touched);
+          }
+          else {
+            std::vector<PolyMesh::Face *> _f;
+            for(auto h : _touched)
+              if(std::find(_f.begin(), _f.end(), h->f) == _f.end())
+                _f.push_back(h->f);
+
+            //	    printf("step %d %lu touched : ",I,_f.size());
+            for(auto pf : _f) {
+              q = faceQuality(pf->he, gf);
+              //	      printf("%12.5E ",q);
+              if(q < _limit && pf->data == gf->tag()) _list.push_back(pf->he);
+            }
+            //	    printf("\n");
+          }
+          //	  pm->print4debug(100000+I++);
+        }
+      }
+    }
+  }
+}
+
+void GFaceDelaunayRefinementOldMesher(int faceTag)
+{
+  PolyMesh *pm = GFaceInitialMesh(faceTag);
+
+  GFace *gf = GModel::current()->getFaceByTag(faceTag);
+
+  // use old code ---
+
+  for(auto f : pm->faces) {
+    if(f->data == faceTag) {
+      size_t n0 = f->he->v->data;
+      size_t n1 = f->he->next->v->data;
+      size_t n2 = f->he->next->next->v->data;
+      MVertex *v0 = GModel::current()->getMeshVertexByTag(n0);
+      MVertex *v1 = GModel::current()->getMeshVertexByTag(n1);
+      MVertex *v2 = GModel::current()->getMeshVertexByTag(n2);
+      gf->triangles.push_back(new MTriangle(v0, v1, v2));
+    }
+  }
+  delete pm;
+  //  bowyerWatsonFrontal(gf);
+}
+
+struct nodeCopies {
+  MVertex *mv;
+  size_t nbCopies;
+  double u[8], v[8]; // max 8 copies -- reduced to 4
+  size_t id[8];
+  nodeCopies(MVertex *_mv, double _u, double _v) : mv(_mv), nbCopies(1)
+  {
+    u[0] = _u;
+    v[0] = _v;
+  }
+  void addCopy(double _u, double _v)
+  {
+    for(size_t i = 0; i < nbCopies; i++) {
+      if(fabs(u[i] - _u) < 1.e-9 && fabs(v[i] - _v) < 1.e-9) return;
+    }
+    u[nbCopies] = _u;
+    v[nbCopies] = _v;
+    nbCopies++;
+  }
+  size_t closest(double _u, double _v)
+  {
+    double minD = 1.e22;
+    size_t I = 0;
+    for(size_t i = 0; i < nbCopies; i++) {
+      double dist = sqrt((_u - u[i]) * (_u - u[i]) + (_v - v[i]) * (_v - v[i]));
+      if(dist < minD) {
+        minD = dist;
+        I = i;
+      }
+    }
+    return id[I];
+  }
+};
+
+//// INITIAL MESH --------- colored
+
+static void getNodeCopies(GFace *gf, std::map<size_t, nodeCopies> &copies)
+{
+  std::vector<GEdge *> edges = gf->edges();
+  std::vector<GEdge *> emb_edges = gf->getEmbeddedEdges();
+  edges.insert(edges.end(), emb_edges.begin(), emb_edges.end());
+  std::set<GEdge *> touched;
+
+  for(auto e : edges) {
+    if(!e->isMeshDegenerated()) {
+      std::set<MVertex *, MVertexPtrLessThan> e_vertices;
+      for(std::size_t i = 0; i < e->lines.size(); i++) {
+        MVertex *v1 = e->lines[i]->getVertex(0);
+        MVertex *v2 = e->lines[i]->getVertex(1);
+        e_vertices.insert(v1);
+        e_vertices.insert(v2);
+      }
+      int direction = -1;
+      if(e->isSeam(gf)) {
+        direction = 0;
+        if(touched.find(e) == touched.end())
+          touched.insert(e);
+        else
+          direction = 1;
+      }
+      //      printf("model edge %lu %lu
+      //      vertices\n",e->tag(),e_vertices.size());
+      for(auto v : e_vertices) {
+        SPoint2 param;
+        if(direction != -1) {
+          double t = 0;
+          if(v->onWhat()->dim() == 0)
+            reparamMeshVertexOnEdge(v, e, t);
+          else if(v->onWhat()->dim() == 1)
+            v->getParameter(0, t);
+          else
+            Msg::Error("a seam edge without CAD ?");
+          param = e->reparamOnFace(gf, t, direction);
+        }
+        else {
+          reparamMeshVertexOnFace(v, gf, param);
+        }
+        std::map<size_t, nodeCopies>::iterator it = copies.find(v->getNum());
+        if(it == copies.end()) {
+          nodeCopies c(v, param.x(), param.y());
+          copies.insert(std::make_pair(v->getNum(), c));
+        }
+        else {
+          it->second.addCopy(param.x(), param.y());
+        }
+      }
+    }
+  }
+
+  std::vector<GVertex *> emb_vertx = gf->getEmbeddedVertices();
+  for(auto v : emb_vertx) {
+    SPoint2 param;
+    reparamMeshVertexOnFace(v->mesh_vertices[0], gf, param);
+    nodeCopies c(v->mesh_vertices[0], param.x(), param.y());
+    copies.insert(std::make_pair(v->mesh_vertices[0]->getNum(), c));
+  }
+}
+
+PolyMesh *GFaceInitialMesh(int faceTag, int recover)
+{
+  GFace *gf = GModel::current()->getFaceByTag(faceTag);
+
+  PolyMesh *pm = new PolyMesh;
+
+  std::map<size_t, nodeCopies> copies;
+  getNodeCopies(gf, copies);
+
+  SBoundingBox3d bb;
+  for(auto c : copies) {
+    for(size_t i = 0; i < c.second.nbCopies; i++)
+      bb += SPoint3(c.second.u[i], c.second.v[i], 0);
+  }
+  bb *= 1.1;
+  pm->initialize_rectangle(bb.min().x(), bb.max().x(), bb.min().y(),
+                           bb.max().y());
+  PolyMesh::Face *f = pm->faces[0];
+  for(std::map<size_t, nodeCopies>::iterator it = copies.begin();
+      it != copies.end(); ++it) {
+    for(size_t i = 0; i < it->second.nbCopies; i++) {
+      double x = it->second.u[i];
+      double y = it->second.v[i];
+      // find face in which lies x,y
+      f = Walk(f, x, y);
+      // split f and then swap edges to recover delaunayness
+      pm->split_triangle(x, y, 0, f, delaunayEdgeCriterionPlaneIsotropic, NULL);
+      // remember node tags
+      it->second.id[i] = pm->vertices.size() - 1;
+      pm->vertices[pm->vertices.size() - 1]->data = it->first;
+    }
+  }
+
+  if(!recover) return pm;
+
+  // recover edges ...
+
+  //  pm->print4debug(100000);
+
+  std::vector<GEdge *> edges = gf->edges();
+  std::vector<GEdge *> emb_edges = gf->getEmbeddedEdges();
+  edges.insert(edges.end(), emb_edges.begin(), emb_edges.end());
+
+  for(auto e : edges) {
+    if(!e->isMeshDegenerated()) {
+      for(auto l : e->lines) {
+        auto c0 = copies.find(l->getVertex(0)->getNum());
+        auto c1 = copies.find(l->getVertex(1)->getNum());
+        if(c0 == copies.end() || c1 == copies.end())
+          Msg::Error("unable to find %lu %lu %d %d", l->getVertex(0)->getNum(),
+                     l->getVertex(1)->getNum(), c0 == copies.end(),
+                     c1 == copies.end());
+        if(c0->second.nbCopies > c1->second.nbCopies) {
+          auto cc = c0;
+          c0 = c1;
+          c1 = cc;
+        }
+        for(size_t j = 0; j < c0->second.nbCopies; j++) {
+          PolyMesh::Vertex *v0 = pm->vertices[c0->second.id[j]];
+          PolyMesh::Vertex *v1 =
+            pm->vertices[c1->second.closest(c0->second.u[j], c0->second.v[j])];
+          int result = recover_edge(pm, v0, v1);
+          if(result < 0) {
+            Msg::Warning("Impossible to recover edge %lu %lu (error tag %d)",
+                         l->getVertex(0)->getNum(), l->getVertex(0)->getNum(),
+                         result);
+          }
+          else {
+            PolyMesh::HalfEdge *he = pm->getEdge(v0, v1);
+            if(he) {
+              if(he->opposite) he->opposite->data = e->tag();
+              he->data = e->tag();
+            }
+          }
+        }
+      }
+    }
+  }
+
+  // color all PolyMesh::Faces
+  // the first 4 vertices are "infinite vertices" --> color them with tag -2
+  // meaning exterior
+  PolyMesh::HalfEdge *other_side = Color(pm->vertices[0]->he, -2);
+  // other_side is inthernal to the face --> color them with tag faceTag
+  other_side = Color(other_side, faceTag);
+  // holes will be tagged -1
+
+  //  pm->print4debug(200000);
+
+  return pm;
+}
+//------------------------------------------------
+
+#if 0
+  bb *= 1./1.1;
+  const size_t N = 100000;
+  std::vector<double> X(N),Y(N);
+  std::vector<size_t> HC(N), IND(N);
+  for (size_t i = 0; i< N ; i++){
+    double R = drand48();
+    X[i] = bb.min().x() + R * (bb.max().x()-bb.min().x());
+    R = drand48();
+    Y[i] = bb.min().y() + R * (bb.max().y()-bb.min().y());
+    HC[i] = HilbertCoordinates(X[i], Y[i], bb.center().x(), bb.center().y(),
+			       bb.max().x() - bb.center().x(),0,
+			       0, bb.max().y() - bb.center().y());
+    IND[i] = i;
+  }
+  std::sort( IND.begin(),IND.end(), [&](size_t i,size_t j){return HC[i]<HC[j];} );
+    double t1 = gmsh::logger::getCpuTime();
+    for (size_t i = 0; i< N ; i++){
+      size_t I = IND[i];
+      f = Walk (f,X[I],Y[I]);
+      pm->split_triangle(X[I],Y[I],0,f,delaunayEdgeCriterionPlaneIsotropic,NULL);
+    }
+    double t2 = gmsh::logger::getCpuTime();
+    //    printf("%12.5E Seconds\n",t2-t1);
+    pm->print4debug( nodeTags.size() );
+}
+#endif
+#if 0
+    PolyMesh::Vertex *v0 = pm->vertices[nodeLabels[1]];
+    PolyMesh::Vertex *v1 = pm->vertices[nodeLabels[3]];
+    int result = recover_edge (pm, v0, v1);
+#endif
diff --git a/Mesh/meshTriangulation.h b/Mesh/meshTriangulation.h
new file mode 100644
index 0000000000000000000000000000000000000000..0f3116d6682e6120b002bc4d7c9e9ce271f02db4
--- /dev/null
+++ b/Mesh/meshTriangulation.h
@@ -0,0 +1,24 @@
+// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#ifndef MESH_TRIANGULATION_H
+#define MESH_TRIANGULATION_H
+
+#include "meshPolyMesh.h"
+
+// returns a PolyMesh i.e. a half edge data structure that
+// is actually the triangulation face boundary
+// if recover = 1 --> edges are recovered and
+// the triangulation is colored : triangles belonging
+// to the model face are colored faceTag, other have negative colors.
+PolyMesh *GFaceInitialMesh(int faceTag, int recover = 0);
+// apply Delaunay refinement using old algorithms
+// FIXME -- not working yet
+void GFaceDelaunayRefinementOldMesher(int faceTag);
+void GFaceDelaunayRefinement(int faceTag);
+int GFace2PolyMesh(int faceTag, PolyMesh **pm);
+// int PolyMesh2GFace (const PolyMesh *pm, size_t faceTag);
+
+#endif
diff --git a/Numeric/HierarchicalBasisH1Brick.cpp b/Numeric/HierarchicalBasisH1Brick.cpp
index 7a9696ce0dd2b53fe34b1558505dd5b3418c4efe..8cb83177a39a8f99e0082cc59361b1d63556ef94 100644
--- a/Numeric/HierarchicalBasisH1Brick.cpp
+++ b/Numeric/HierarchicalBasisH1Brick.cpp
@@ -349,7 +349,7 @@ void HierarchicalBasisH1Brick::generateGradientBasis(
   std::vector<double> *vectorTarget2(nullptr);
   std::vector<std::vector<double> > *dvectorTarget2(nullptr);
   for(int iFace = 0; iFace < _nfaceQuad; iFace++) {
-    int indexLambda;
+    int indexLambda = 0;
     switch(iFace) {
     case(0):
       indexLambda = 5;
diff --git a/Numeric/HilbertCurve.cpp b/Numeric/HilbertCurve.cpp
index c6d80cc4555f66595ae339c87980dbd8e925091c..1503a1376aaa86fd394f9028f9c718cdc3b75c68 100644
--- a/Numeric/HilbertCurve.cpp
+++ b/Numeric/HilbertCurve.cpp
@@ -50,7 +50,7 @@ struct HilbertSort {
     }
     bbox *= 1.01;
     MVertex **pv = &v[0];
-    int depth;
+    int depth = 0; 
     MultiscaleSortHilbert(pv, (int)v.size(), 10, 0.125, &depth);
   }
 };
diff --git a/Numeric/fullMatrix.h b/Numeric/fullMatrix.h
index 2024956c4a163eac7d977fd76372caa64ab0342f..c58ff21d779b7aa20f5afe7a7ef7d46ae654362f 100644
--- a/Numeric/fullMatrix.h
+++ b/Numeric/fullMatrix.h
@@ -17,6 +17,7 @@
 #ifdef Success // in X11 header X.h
 #undef Success
 #endif
+#include <sstream>
 #include <Eigen/Dense>
 #endif
 
diff --git a/Post/OctreePost.cpp b/Post/OctreePost.cpp
index 9d9f9a16cd657c08d2afbac63df4a0dcdf516397..783fb2a9b7ab80c4b1b6761399a771862411f216 100644
--- a/Post/OctreePost.cpp
+++ b/Post/OctreePost.cpp
@@ -38,7 +38,18 @@ static void minmax(int n, double *X, double *Y, double *Z, double *min,
   }
 
   SBoundingBox3d bb(min[0], min[1], min[2], max[0], max[1], max[2]);
-  bb.thicken(0.01); // make 1% thicker
+
+  if(CTX::instance()->mesh.algo2d == ALGO_2D_PACK_PRLGRMS ||
+     CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+    /* TODO FIXME: ugly temporary fix, but we need larger bbox for the
+     * guiding field sampling on curved surfaces, thicken is not sufficient */
+    bb *= 1.1;
+    bb.makeCube();
+  }
+  else {
+    bb.thicken(0.01); // make 1% thicker
+  }
+
   max[0] = bb.max().x();
   max[1] = bb.max().y();
   max[2] = bb.max().z();
@@ -284,7 +295,17 @@ void OctreePost::_create(PViewData *data)
     }
 
     SBoundingBox3d bb = l->getBoundingBox();
-    bb.thicken(0.01); // make 1% thicker
+
+    if(CTX::instance()->mesh.algo2d == ALGO_2D_PACK_PRLGRMS ||
+       CTX::instance()->mesh.algo2d == ALGO_2D_QUAD_QUASI_STRUCT) {
+      /* TODO FIXME: ugly temporary fix, but we need larger bbox for the
+       * guiding field sampling on curved surfaces, thicken is not sufficient */
+      bb *= 1.1;
+    }
+    else {
+      bb.thicken(0.01); // make 1% thicker
+    }
+
     SPoint3 bbmin = bb.min(), bbmax = bb.max();
     double min[3] = {bbmin.x(), bbmin.y(), bbmin.z()};
     double size[3] = {bbmax.x() - bbmin.x(), bbmax.y() - bbmin.y(),
diff --git a/Solver/CMakeLists.txt b/Solver/CMakeLists.txt
index d8962a92403d25e8d77fe9f159892e35bde47066..6e465d5b10492a5dae8dcfd55bf72684d8a4d405 100644
--- a/Solver/CMakeLists.txt
+++ b/Solver/CMakeLists.txt
@@ -8,6 +8,7 @@ set(SRC
   linearSystemCSR.cpp
   linearSystemPETSc.cpp
   linearSystemMUMPS.cpp
+  linearSystemEigen.cpp
   dofManager.cpp
   groupOfElements.cpp
   elasticityTerm.cpp
diff --git a/Solver/linearSystemEigen.cpp b/Solver/linearSystemEigen.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..42a8877b87672e9ec298bafc54366614664ca975
--- /dev/null
+++ b/Solver/linearSystemEigen.cpp
@@ -0,0 +1,217 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#include <stdio.h>
+#include <math.h>
+#include "linearSystemEigen.h"
+
+#if defined(HAVE_EIGEN)
+
+linearSystemEigen<double>::linearSystemEigen() { solverType = EigenSparseLU; }
+
+bool linearSystemEigen<double>::isAllocated() const
+{
+  if(A.rows() > 0)
+    return true;
+  else
+    return false;
+}
+
+void linearSystemEigen<double>::allocate(int nbRows)
+{
+  A.resize(nbRows, nbRows);
+  B.resize(nbRows);
+  X.resize(nbRows);
+  B.fill(0.);
+  X.fill(0.);
+}
+
+void linearSystemEigen<double>::clear()
+{
+  A.setZero();
+  B.setZero();
+  X.setZero();
+}
+
+void linearSystemEigen<double>::zeroMatrix()
+{
+  A.setZero();
+  B.setZero();
+  X.setZero();
+}
+
+void linearSystemEigen<double>::zeroRightHandSide() { B.fill(0.); }
+
+void linearSystemEigen<double>::zeroSolution() { X.fill(0.); }
+
+void linearSystemEigen<double>::setSolverType(
+  linearSystemEigenSolver solverName)
+{
+  solverType = solverName;
+}
+
+int linearSystemEigen<double>::systemSolve()
+{
+  if(solverType == EigenCholeskyLLT) {
+    Eigen::SimplicialLLT<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with CholeskyLLT");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with CholeskyLLT");
+      return -1;
+    }
+  }
+  else if(solverType == EigenCholeskyLDLT) {
+    Eigen::SimplicialLDLT<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with CholeskyLDLT");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with CholeskyLDLT");
+      return -1;
+    }
+  }
+  else if(solverType == EigenSparseLU) {
+    Eigen::SparseLU<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with SparseLU");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with SparseLU");
+      return -1;
+    }
+  }
+  else if(solverType == EigenSparseQR) {
+    /* Note: maybe another ordering method is better, see Eigen documentation */
+    Eigen::SparseQR<Eigen::SparseMatrix<double>, Eigen::NaturalOrdering<int> >
+      solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with SparseQR");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with SparseQR");
+      return -1;
+    }
+  }
+  else if(solverType == EigenCG) {
+    Eigen::ConjugateGradient<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning(
+        "Eigen: failed to solve linear system with Conjugate Gradient");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning(
+        "Eigen: failed to solve linear system with Conjugate Gradient");
+      return -1;
+    }
+  }
+  else if(solverType == EigenCGLeastSquare) {
+    Eigen::LeastSquaresConjugateGradient<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with Least Square "
+                   "Conjugate Gradient");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with Least Square "
+                   "Conjugate Gradient");
+      return -1;
+    }
+  }
+  else if(solverType == EigenBiCGSTAB) {
+    Eigen::BiCGSTAB<Eigen::SparseMatrix<double> > solver;
+    solver.compute(A);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with BiCGSTAB");
+      return -1;
+    }
+    X = solver.solve(B);
+    if(solver.info() != Eigen::ComputationInfo::Success) {
+      Msg::Warning("Eigen: failed to solve linear system with BiCGSTAB");
+      return -1;
+    }
+  }
+  return 1;
+}
+
+void linearSystemEigen<double>::insertInSparsityPattern(int row, int col) {}
+
+double linearSystemEigen<double>::normInfRightHandSide() const
+{
+  return B.maxCoeff();
+}
+
+double linearSystemEigen<double>::normInfSolution() const
+{
+  return X.maxCoeff();
+}
+
+void linearSystemEigen<double>::addToMatrix(int row, int col, const double &val)
+{
+  A.coeffRef(row, col) += val; /* slow ! */
+}
+
+void linearSystemEigen<double>::getFromMatrix(int row, int col,
+                                              double &val) const
+{
+  val = A.coeff(row, col);
+}
+
+void linearSystemEigen<double>::addToRightHandSide(int row, const double &val,
+                                                   int ith)
+{
+  if((int)B.size() <= row) {
+    B.resize(row + 1);
+    B[row] = val;
+  }
+  else {
+    B[row] += val;
+  }
+}
+
+void linearSystemEigen<double>::getFromRightHandSide(int row, double &val) const
+{
+  if((int)B.size() <= row) val = 0.;
+  val = B[row];
+}
+
+void linearSystemEigen<double>::getFromSolution(int row, double &val) const
+{
+  if((int)X.size() <= row)
+    val = 0.;
+  else
+    val = X[row];
+}
+
+void linearSystemEigen<double>::addToSolution(int row, const double &val)
+{
+  if((int)X.size() <= row) {
+    X.resize(row + 1);
+    X[row] = val;
+  }
+  else {
+    X[row] += val;
+  }
+}
+
+#endif
diff --git a/Solver/linearSystemEigen.h b/Solver/linearSystemEigen.h
new file mode 100644
index 0000000000000000000000000000000000000000..8bd55e0ca0fd872601db819a7df3f80ef16b1b14
--- /dev/null
+++ b/Solver/linearSystemEigen.h
@@ -0,0 +1,91 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+
+#ifndef LINEAR_SYSTEM_EIGEN_H
+#define LINEAR_SYSTEM_EIGEN_H
+
+// Interface to solve a linear system with Eigen
+
+#include "GmshConfig.h"
+#include "GmshMessage.h"
+#include "linearSystem.h"
+
+#if defined(HAVE_EIGEN)
+
+#include <Eigen/Sparse>
+
+template <class scalar> class linearSystemEigen : public linearSystem<scalar> {
+public:
+  linearSystemEigen()
+  {
+    Msg::Info("linearSystemEigen not implemented for this element type");
+  }
+
+  virtual bool isAllocated() const { return false; }
+  virtual void allocate(int nbRows) {}
+  virtual void clear() {}
+  virtual void zeroMatrix() {}
+  virtual void zeroRightHandSide() {}
+  virtual void zeroSolution() {}
+  virtual int systemSolve() { return 1; }
+  virtual void insertInSparsityPattern(int row, int col) {}
+  virtual double normInfRightHandSide() const { return 0.; }
+  virtual double normInfSolution() const { return 0.; }
+
+  virtual void addToMatrix(int row, int col, const double &val) {}
+  virtual void getFromMatrix(int row, int col, double &val) const {}
+  virtual void addToRightHandSide(int row, const scalar &val, int ith = 0) {}
+  virtual void getFromRightHandSide(int row, scalar &val) const {}
+  virtual void getFromSolution(int row, scalar &val) const {}
+  virtual void addToSolution(int row, const scalar &val) {}
+};
+
+enum linearSystemEigenSolver {
+  EigenCholeskyLLT,
+  EigenCholeskyLDLT,
+  EigenSparseLU,
+  EigenSparseQR,
+  /* warning: no preconditionner for iterative solver by default, should be
+     changed */
+  EigenCG,
+  EigenCGLeastSquare,
+  EigenBiCGSTAB
+};
+
+template <> class linearSystemEigen<double> : public linearSystem<double> {
+private:
+  Eigen::VectorXd X;
+  Eigen::VectorXd B;
+  Eigen::SparseMatrix<double> A;
+  linearSystemEigenSolver solverType;
+
+public:
+  linearSystemEigen();
+
+  void setSolverType(linearSystemEigenSolver solverName);
+
+  virtual bool isAllocated() const;
+  virtual void allocate(int nbRows);
+  virtual void clear();
+  virtual void zeroMatrix();
+
+  virtual void zeroRightHandSide();
+  virtual void zeroSolution();
+  virtual int systemSolve();
+  virtual void insertInSparsityPattern(int row, int col);
+  virtual double normInfRightHandSide() const;
+  virtual double normInfSolution() const;
+
+  virtual void addToMatrix(int row, int col, const double &val);
+  virtual void getFromMatrix(int row, int col, double &val) const;
+  virtual void addToRightHandSide(int row, const double &val, int ith = 0);
+  virtual void getFromRightHandSide(int row, double &val) const;
+  virtual void getFromSolution(int row, double &val) const;
+  virtual void addToSolution(int row, const double &val);
+};
+
+#endif
+
+#endif
diff --git a/benchmarks/2d/BL0.geo b/benchmarks/2d/BL0.geo
index eaef96bb6b4929dde0cad577b15df736d672c407..cb561b88ff1993d9e3434f82271df80798fe4d56 100755
--- a/benchmarks/2d/BL0.geo
+++ b/benchmarks/2d/BL0.geo
@@ -1,37 +1,20 @@
 l = .2;
 Point(7) = {-1.4, 0.5, 0, l};
-//+
 Point(8) = {-1.4, -1.1, 0, l};
-//+
 Point(9) = {1.4, -1.1, 0, l};
-//+
 Point(10) = {1.4, 0.5, 0, l};
-//+
 Line(2) = {7, 10};
-//+
 Line(3) = {9, 10};
-//+
 Line(4) = {9, 8};
-//+
 Line(5) = {8, 7};
-//+
 Line Loop(7) = {2,-3,4,5};
-//+
 Plane Surface(8) = {7};
-//+
 Field[1] = BoundaryLayer;
-//+
-Field[1].EdgesList = {4};
-//+
-Field[1].hfar = 0.1;
-//+
-Field[1].hwall_n = 0.005;
-//+
-Field[1].thickness = 0.1;
-//+
-BoundaryLayer Field = 1;
-
-//+
-Field[1].ratio = 1.4;
-//+
+Field[1].CurvesList = {4};
+Field[1].SizeFar = 0.1;
+Field[1].Size = 0.005;
+Field[1].Thickness = 0.1;
+Field[1].Ratio = 1.4;
 Field[1].NodesList = {8, 9};
+
+BoundaryLayer Field = 1;
diff --git a/benchmarks/2d/BL1.geo b/benchmarks/2d/BL1.geo
index 7bbb4e0b7ac5035ae40371c84d6297e0aa983434..36a93886904141897b0c399d3f49defd391310e9 100755
--- a/benchmarks/2d/BL1.geo
+++ b/benchmarks/2d/BL1.geo
@@ -1,52 +1,26 @@
 l = .2;
-//+
 Point(1) = {-1.1, -0.3, 0, l};
-//+
 Point(2) = {-0.3, -0, 0, l};
-//+
 Point(3) = {1, -0.3, 0, l};
-//+
 Point(4) = {-0.3, -0.6, 0, l};
-//+
 Point(5) = {0.7, -0.2, 0, l};
-//+
 Point(6) = {0.7, -0.4, 0, l};
-//+
 Spline(1) = {3, 5, 2, 1, 4, 6, 3};
-//+
 Point(7) = {-1.4, 0.5, 0, l};
-//+
 Point(8) = {-1.4, -1.1, 0, l};
-//+
 Point(9) = {1.4, -1.1, 0, l};
-//+
 Point(10) = {1.4, 0.5, 0, l};
-//+
 Line(2) = {7, 10};
-//+
 Line(3) = {9, 10};
-//+
 Line(4) = {9, 8};
-//+
 Line(5) = {8, 7};
-//+
 Line Loop(6) = {2, -3, 4, 5};
-//+
 Line Loop(7) = {1};
-//+
 Plane Surface(8) = {6, 7};
-//+
 Field[1] = BoundaryLayer;
-//+
-Field[1].EdgesList = {1};
-//+
-Field[1].hfar = 0.1;
-//+
-Field[1].hwall_n = 0.01;
-//+
-Field[1].thickness = 0.1;
-//+
+Field[1].CurvesList = {1};
+Field[1].SizeFar = 0.1;
+Field[1].Size = 0.01;
+Field[1].Thickness = 0.1;
+Field[1].Ratio = 1.4;
 BoundaryLayer Field = 1;
-
-//+
-Field[1].ratio = 1.4;
diff --git a/benchmarks/2d/BL2.geo b/benchmarks/2d/BL2.geo
index a0dc3051db69bdf8d84c27ba52a1b807689105fd..d8c1475207028dcafc81b293530e9025340a48d5 100644
--- a/benchmarks/2d/BL2.geo
+++ b/benchmarks/2d/BL2.geo
@@ -24,12 +24,12 @@ Line(9) = {3, 11};
 Line {9} In Surface {8};
 
 Field[1] = BoundaryLayer;
-Field[1].EdgesList = {1, 11, 9};
-Field[1].hfar = 0.1;
-Field[1].hwall_n = 0.01;
-Field[1].thickness = 0.1;
-Field[1].ratio = 1.4;
-Field[1].FanNodesList = {1, 11}; // try e.g. removing 11
+Field[1].CurvesList = {1, 11, 9};
+Field[1].SizeFar = 0.1;
+Field[1].Size = 0.01;
+Field[1].Thickness = 0.1;
+Field[1].Ratio = 1.4;
+Field[1].FanPointsList = {1, 11}; // try e.g. removing 11
 Field[1].FanPointsSizesList = {5, 4}; // 5 elements for node 1 and 4 for node 11
 Field[1].Quads = 1;
 BoundaryLayer Field = 1;
diff --git a/benchmarks/2d/BL3.geo b/benchmarks/2d/BL3.geo
index 55ef6c323a83b125f3cc49426a3b6948504fe9d3..8b6e86195a472a03e853cf51fe23d068a1272263 100644
--- a/benchmarks/2d/BL3.geo
+++ b/benchmarks/2d/BL3.geo
@@ -1,84 +1,40 @@
-//Mesh.CharacteristicLengthExtendFromBoundary = 0;
-//Mesh.CharacteristicLengthMin = 0.1;
-//Mesh.CharacteristicLengthMax = 0.1;
-//+
 Point(1) = {-1.7, -0.3, 0, .1};
-//+
 Point(2) = {-1.2, -0, 0, .1};
-//+
 Point(3) = {-0.5, -0.3, 0, .1};
-//+
 Point(4) = {-0.4, -0.7, 0, .1};
-//+
 Point(5) = {-0.8, -0.8, 0, .1};
-//+
 Point(6) = {-1.2, -0.5, 0, .1};
-//+
 Point(7) = {-1.8, -0.5, 0, .1};
-//+
 Point(8) = {-1.1, 0.6, 0, .1};
-//+
 Point(9) = {-0.5, 0.7, 0, .1};
-//+
 Point(10) = {-0.1, 0.2, 0, .1};
-//+
 Point(11) = {-0.3, -0.1, 0, .1};
-//+
 Point(12) = {-0.7, 0.2, 0, .1};
-//+
 Point(13) = {-1.1, 0.4, 0, 1.0};
-//+
 Point(14) = {-1.5, 0.5, 0, .1};
-//+
 Point(15) = {-2.3, 1.1, 0, .1};
-//+
 Point(16) = {-2.3, -1, 0, .1};
-//+
 Point(17) = {0.7, -1, 0, .1};
-//+
 Point(18) = {0.5, 1.1, 0, .1};
-//+
 Line(1) = {15, 16};
-//+
 Line(2) = {16, 17};
-//+
 Line(3) = {17, 18};
-//+
 Line(4) = {18, 15};
-//+
 Spline(5) = {14, 8, 9, 10, 11, 12, 13, 14};
-//+
 Spline(6) = {2, 3, 4, 5, 6, 7, 1, 2};
-//+
-Field[1] = BoundaryLayer;
-//+
-Field[1].EdgesList = {5, 6, 1};
-//+
-Field[1].hfar = 0.1;
-//+
-Field[1].hwall_n = 0.001;
-//+
-Field[1].ratio = 1.4;
-//+
-Field[1].thickness = .35;
-BoundaryLayer Field = 1;
-//+
 Line Loop(7) = {1, 2, 3, 4};
-//+
 Line Loop(8) = {5};
-//+
 Line Loop(9) = {6};
-//+
 Plane Surface(10) = {7, 8, 9};
-//+
-Characteristic Length {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} = 0.1;
-//+
-Field[1].FanNodesList = {14};
-//+
-Characteristic Length {17, 16, 5, 4, 6, 7, 3, 1, 11, 2, 10, 12, 13, 14, 8, 9, 15, 18} = 0.1;
-//+
-//Field[1].Quads = 1;
-//+
-//Field[1].thickness = 1;
-//+
-Field[1].NodesList = {15, 16};
+
+Field[1] = BoundaryLayer;
+Field[1].CurvesList = {5, 6, 1};
+Field[1].SizeFar = 0.1;
+Field[1].Size = 0.001;
+Field[1].Ratio = 1.4;
+Field[1].Thickness = .35;
+Field[1].FanPointsList = {14};
+Field[1].PointsList = {15, 16};
+BoundaryLayer Field = 1;
+
+MeshSize{:} = 0.1;
diff --git a/benchmarks/2d/BL4.geo b/benchmarks/2d/BL4.geo
index 0129e368b3b454ef19cd07a15f8d72efa6ab9b92..c2cc47cd9b66b78982992b5ab31b10ddf0a1bdb3 100755
--- a/benchmarks/2d/BL4.geo
+++ b/benchmarks/2d/BL4.geo
@@ -1,39 +1,21 @@
 l = .2;
 Point(7) = {-1.4, 0.5, 0, l};
-//+
 Point(8) = {-1.4, -1.1, 0, l};
-//+
 Point(9) = {1.4, -1.1, 0, l};
-//+
 Point(10) = {1.4, 0.5, 0, l};
-//+
 Line(2) = {7, 10};
-//+
 Line(3) = {9, 10};
-//+
 Line(4) = {9, 8};
-//+
 Line(5) = {8, 7};
-//+
 Line Loop(7) = {2,-3,4,5};
-//+
 Plane Surface(8) = {7};
-//+
-Field[1] = BoundaryLayer;
-//+
-Field[1].EdgesList = {4};
-//+
-Field[1].hfar = 0.1;
-//+
-Field[1].hwall_n = 0.005;
-//+
-Field[1].thickness = 0.1;
-//+
-BoundaryLayer Field = 1;
 
-//+
-Field[1].ratio = 1.4;
-//+
-Field[1].NodesList = {8, 9};
-//+
+Field[1] = BoundaryLayer;
+Field[1].CurvesList = {4};
+Field[1].SizeFar = 0.1;
+Field[1].Size = 0.005;
+Field[1].Thickness = 0.1;
+Field[1].Ratio = 1.4;
+Field[1].PointsList = {8, 9};
 Field[1].BetaLaw = 1;
+BoundaryLayer Field = 1;
diff --git a/benchmarks/2d/naca12BL.geo b/benchmarks/2d/naca12BL.geo
index 0a83772a45eae24c81358d05abf3bd41e7704897..de8609dbbe4bfc753257c05c6faa381f591cc5a6 100644
--- a/benchmarks/2d/naca12BL.geo
+++ b/benchmarks/2d/naca12BL.geo
@@ -225,17 +225,14 @@ Line(8) = {1003,1000};
 Line Loop(9) = {6,7,8,5};
 Line Loop(10) = {2,1};
 Plane Surface(11) = {9,10};
-//Plane Surface(12) = {10};
-//Plane Surface(11) = {9};
 
 Field[1] = BoundaryLayer;
-Field[1].EdgesList = {1, 2};
-Field[1].hwall_n = 0.0001*SC;
-Field[1].ratio = 2.4;
-Field[1].thickness = 0.02*SC;
-//Field[1].fan_angle = 80;
-//Background Field = 1;
-//Field[1].NodesList = {1};
-Field[1].FanNodesList = {1};
+Field[1].CurvesList = {1, 2};
+Field[1].Size = 0.0001*SC;
+Field[1].Ratio = 2.4;
+Field[1].Thickness = 0.02*SC;
+Field[1].PointsList = {1};
 Field[1].Quads = 1;
+Field[1].FanPointsList = {1};
+
 BoundaryLayer Field = 1;
diff --git a/benchmarks/2d/naca12_2d.geo b/benchmarks/2d/naca12_2d.geo
index ef06796cbf1f4e06848d378271fc0a8ac2925959..f348e0e2ca4f7dd4f4ce677b5c39c1688b756174 100644
--- a/benchmarks/2d/naca12_2d.geo
+++ b/benchmarks/2d/naca12_2d.geo
@@ -224,30 +224,29 @@ Line(8) = {1003,1000};
 Line Loop(9) = {6,7,8,5};
 Line Loop(10) = {2,3,4,1};
 Plane Surface(11) = {9,10};
-//Recombine Surface {11};
 
 Field[2] = BoundaryLayer;
-//Field[2].NodesList = {1};
-//Field[2].EdgesList = {1,2,3,4};
-Field[2].EdgesList = {1,2,3,4};
-Field[2].hfar = 1.5;
-Field[2].hwall_n = 0.0008;
-Field[2].ratio = 1.2;
-Field[2].thickness = .03;
+Field[2].FanPointsList = {1};
+Field[2].CurvesList = {1,2,3,4};
+Field[2].SizeFar = 1.5;
+Field[2].Size = 0.0008;
+Field[2].Ratio = 1.2;
+Field[2].Thickness = .03;
 Field[2].IntersectMetrics = 1;
-Background Field = 2;
+Field[2].Quads = 1;
 
 Field[1] = Box;
-Field[1].VIn = 0.01;
+Field[1].VIn = 0.0025;
 Field[1].VOut = 1;
-Field[1].XMax = 0.6;
 Field[1].XMin = 0.4;
+Field[1].XMax = 0.8;
 Field[1].YMax = 0.1;
 Field[1].YMin = -0.1;
-Field[1].ZMax = 1;
-Field[1].ZMin = -1;
+Field[1].Thickness = 2;
 
 Field[3] = MinAniso;
 Field[3].FieldsList = {1, 2};
-//Background Field = 2;
+Background Field = 3;
 BoundaryLayer Field = 2;
+
+Mesh.BoundaryLayerFanElements = 30;
diff --git a/benchmarks/2d/naca12_2d_trailing.geo b/benchmarks/2d/naca12_2d_trailing.geo
index 4c26cb06b1537e6d6fce650d9707002f64b8ea94..3b8a1ca084e310305fdbd9b36665dba379eb5530 100755
--- a/benchmarks/2d/naca12_2d_trailing.geo
+++ b/benchmarks/2d/naca12_2d_trailing.geo
@@ -224,17 +224,17 @@ Line Loop(9) = {6,7,8,5};
 Line Loop(10) = {2,3,4,1};
 Plane Surface(11) = {9,10};
 
-//Physical Surface(11)={11};
-//Point(9999) = {0.6,0,0,1};
-
 Point(1004) = {1.5, 0, 0, lc};
 Line(12) = {1, 1004};
 Line {12} In Surface {11};
 
 Field[2] = BoundaryLayer;
-Field[2].EdgesList = {12, 1,2,3,4,12};
-Field[2].hfar = 1.5;
-Field[2].hwall_n = 0.0001;
-Field[2].ratio = 1.3;
-Field[2].thickness = .05;
+Field[2].CurvesList = {12, 1,2,3,4,12};
+Field[2].SizeFar = 1.5;
+Field[2].Size = 0.0001;
+Field[2].Ratio = 1.3;
+Field[2].Thickness = .05;
+Field[2].FanPointsList = {1004};
+Field[2].Quads = 1;
+
 BoundaryLayer Field = 2;
diff --git a/benchmarks/2d/transf_complex.geo b/benchmarks/2d/transf_complex.geo
index d47fef2930525db0b4e800c0098f2138a5b9a2bc..78fdc618d14761a059d82d9bdf8a362a71f9bce9 100644
--- a/benchmarks/2d/transf_complex.geo
+++ b/benchmarks/2d/transf_complex.geo
@@ -44,3 +44,7 @@ Transfinite Line {14,10} = 50 Using Bump 0.3;
 Transfinite Line {11,8,7,12,6,5,13,15,3,4,16,1,2,9} = 30 Using Progression 1;
 Transfinite Surface {18} = {9,13,11,10};
 Recombine Surface {18};
+
+// use this to get a smoother mesh:
+
+//Mesh.Smoothing = 100;
diff --git a/benchmarks/3d/percolation.geo b/benchmarks/3d/percolation.geo
index 98373058f96c674a391e4ceda50d72c4398000b4..351d5d2c4f74c4e46f3bb5493b191b9f2ee217c0 100644
--- a/benchmarks/3d/percolation.geo
+++ b/benchmarks/3d/percolation.geo
@@ -27,12 +27,12 @@ Delete{ Volume{aa[1]}; } // this volume is wrong: we will be carving holes in it
 
 Function newsphere
   rr = 0.5-sphere_dist;
-  a = newp; 
+  a = newp;
   b = newl;
-  c = newll; 
-  d = news; 
-  e = newsl; 
-  f = newv; 
+  c = newll;
+  d = news;
+  e = newsl;
+  f = newv;
   Point(a) = {i,j,k,lc};
   Point(a+1) = {i,j+rr,k,lc};
   Point(a+2) = {i,j-rr,k,lc};
@@ -60,9 +60,9 @@ Function newsphere
   Line Loop(c+5) = {b+4,-(b+1),-(b+8)}; Surface(d+5) = {c+5};
   Line Loop(c+6) = {b+8,-b,b+7}; Surface(d+6) = {c+6};
   Line Loop(c+7) = {b+7,-(b+11),b+3}; Surface(d+7) = {c+7};
-  Surface Loop(e) = {d+1,-(d+4),-(d+3),d+2,d,(d+6),-(d+5),-(d+7)}; 
+  Surface Loop(e) = {d+1,-(d+4),-(d+3),d+2,d,(d+6),-(d+5),-(d+7)};
   Volume(f) = e;
-  holes[] += e; 
+  holes[] += e;
 Return
 
 //random distribution
@@ -90,7 +90,7 @@ For i In {1:xdim-2:1}
 	    array[(i-1)*ydim*zdim + (j-1)*zdim + k] == 0 &&
 	    array[(i)*ydim*zdim + (j+1)*zdim + k] == 0 &&
 	    array[(i)*ydim*zdim + (j-1)*zdim + k] == 0 &&
-	    
+
 	    array[(i+1)*ydim*zdim + j*zdim + (k-1)] == 0 &&
 	    array[(i+1)*ydim*zdim + (j+1)*zdim + (k-1)] == 0 &&
 	    array[(i+1)*ydim*zdim + (j-1)*zdim + (k-1)] == 0 &&
@@ -100,7 +100,7 @@ For i In {1:xdim-2:1}
 	    array[(i)*ydim*zdim + (j+1)*zdim + (k-1)] == 0 &&
 	    array[(i)*ydim*zdim + (j-1)*zdim + (k-1)] == 0 &&
 	    array[i*ydim*zdim + j*zdim + (k-1)]  == 0 &&
-	    
+
 	    array[(i+1)*ydim*zdim + j*zdim + (k+1)] == 0 &&
 	    array[(i+1)*ydim*zdim + (j+1)*zdim + (k+1)] == 0 &&
 	    array[(i+1)*ydim*zdim + (j-1)*zdim + (k+1)] == 0 &&
@@ -121,7 +121,7 @@ For i In {0:xdim-1:1}
   For j In {0:ydim-1:1}
     For k In {0:zdim-1:1}
       //Printf("array[%g][%g][%g] = %g", i, j, k,array[i*ydim*zdim + j*zdim + k]);
-      If (array[i*ydim*zdim + j*zdim + k] == 1) 
+      If (array[i*ydim*zdim + j*zdim + k] == 1)
 	Call newsphere;
       EndIf
     EndFor
@@ -132,5 +132,4 @@ EndFor
 c = newsl; Surface Loop(c) = {43,-1,35,39,48,47};
 v = newv; Volume(v) = {c, holes[]};
 
-Coherence; // make sure duplicate nodes are removed when sphere_dist=0
-Field[1] = BoundaryLayer;
+Coherence; // make sure duplicate points are removed when sphere_dist=0
diff --git a/contrib/QuadMeshingTools/CMakeLists.txt b/contrib/QuadMeshingTools/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c03c8d04d88ab2cb5e87aa300026a006b86e4472
--- /dev/null
+++ b/contrib/QuadMeshingTools/CMakeLists.txt
@@ -0,0 +1,16 @@
+set(QMT_SRC
+  qmtMeshGeometryOptimization.cpp
+  qmtDiskQuadrangulationRemeshing.cpp
+  qmtQuadCavityRemeshing.cpp
+  qmtCrossField.cpp
+  qmtCurveQuantization.cpp
+  qmtSizeMap.cpp
+  qmtMeshUtils.cpp
+  arrayGeometry.cpp
+  cppUtils.cpp
+  geolog.cpp
+  row_echelon_integer.cpp
+  )
+
+file(GLOB_RECURSE HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
+append_gmsh_src(contrib/QuadMeshingTools "${QMT_SRC};${HDR}")
diff --git a/contrib/QuadMeshingTools/README.md b/contrib/QuadMeshingTools/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..212de7fa1a09ce5ff569411aa58fe574b6facba2
--- /dev/null
+++ b/contrib/QuadMeshingTools/README.md
@@ -0,0 +1,75 @@
+# Quadqs behavior
+
+### Usage:
+
+- in GUI:
+
+select "Quasi-structured quad (experimental)" in Mesh > 2D algorithm
+
+- in command line:
+
+gmsh -algo quadqs -2 <other options>
+
+The mesh size is mainly controlled by the -clscale option.
+
+### General pipeline:
+
+1. generate initial triangulation
+2. compute cross field
+3. compute size map 
+4. save as background mesh, background field, delete mesh
+5. apply curve quantization constraints (using automatic transfinite for the moment)
+6. generate curve meshes
+7. generate transfinite quad meshes
+8. generate unstructured quad-dominant meshes with algo pack
+9. midpoint subdivision
+10. mesh simple CAD faces with patterns
+11. improve quad mesh topology with disk quadrangulation remeshing
+12. improve quad mesh topology with cavity remeshing
+13. geometry smoothing (also applied during the previous steps)
+
+### Shortcuts:
+
+- If triangulation available: start at step 2
+- If scaled cross field available: start at step 5
+- If scalar size map available: import it in step 3
+- If quad mesh available: start at step 10
+
+# Content of contrib/QuadMeshingTools
+
+- Heat-based cross/asterisk field solver in qmtCrossField.h/cpp
+- Conformal scaling solver (least-square, based on angle gradients) in qmtCrossField.h/cpp
+- Size map tools (dist to curves, one-way smoothing) in qmtSizeMap.h/cpp
+- Disk quadrangulation remeshing, qmtDiskQuadrangulationRemeshing.h/cpp
+- Pattern-based cavity remeshing, qmtQuadCavityRemeshing.h/cpp
+- Various geometry smoothers (global UV Laplacian, Winslow/Angled-based local kernel, DMO UV kernel), in qmtMeshGeometryOptimization.h/cpp
+- Curve quantization simple CAD faces to get regular meshes, in progress, not usable yet, in qmtCurveQuantization.h/cpp
+- GeoLog: convenient wrapper around gmsh views for debugging, geolog.h/cpp
+
+
+# Changes to gmsh
+
+- Main files at Mesh/meshQuadQuasiStructured.h/cpp, to call the QuadMeshingTools functions
+- Add Eigen-based sparse solver in Solver/linearSystemEigen.h/cpp
+- Add robin_hood fast unordered_set/map hash maps, at Common/robin_hood.h, MIT license
+- Add libOL octree for meshing library at Common/libol1.h/c, MIT license
+- Add SurfaceProjector based on libOL octree, in Mesh/meshOctreeLibOL.h/cpp
+- Add background mesh datastructures, in Mesh/BackgroundMesh.h/cpp
+- contrib/domhex replaced by the version from quadMeshingTools branch (contains JF changes to algo pack)
+- Post/OctreePost.cpp: use larger bounding boxes. Required for the background field sampling
+- ALGO_2D_PACK_PRLGRMS_CSTR deprecated
+- Add implicit conversion from SPoint3/SVector3 to std::array<double,3>
+- Many Msg::Warning switch to Msg::Debug in CAD/Post projections
+- Special case for quadqs in bbox sizing in Post/OctreePost.cpp, should find something better
+- Add an option quadqsSizemapMethod in global context CTX::instance()->mesh
+- Add a curve transfinite method (ge->meshAttributes.typeTransfinite = 4) to get vertex positioning via size map
+
+# Todo
+
+- Support for user-prescribed size map (requires quality metric taking size map into account)
+- Add options in global context for better control
+- Add MUMPS solver (with analysis / factorize)
+- Better cavity initialization strategies (e.g. pathes between irregular vertices)
+- Better CAD quantization (support for T-junctions, rings, etc)
+- Filter anisotropy after cavity remeshing to avoid some distorted patches
+
diff --git a/contrib/QuadMeshingTools/arrayGeometry.cpp b/contrib/QuadMeshingTools/arrayGeometry.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a2c7c6c082e63b4864561dd44e18c3c028b809ea
--- /dev/null
+++ b/contrib/QuadMeshingTools/arrayGeometry.cpp
@@ -0,0 +1,30 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "arrayGeometry.h"
+
+/* System includes */
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <cstdint>
+#include <cmath>
+#include <algorithm>
+
+namespace ArrayGeometry {
+
+  double bboxDiag(const std::vector<vec3>& points) {
+    vec3 mi = {DBL_MAX,DBL_MAX,DBL_MAX};
+    vec3 ma = {-DBL_MAX,-DBL_MAX,-DBL_MAX};
+    for (size_t i = 0; i < points.size(); ++i) for (size_t d = 0; d < 3; ++d) {
+      mi[d] = std::min(points[i][d],mi[d]);
+      ma[d] = std::max(points[i][d],ma[d]);
+    }
+    return length(ma-mi);
+  }
+
+}
diff --git a/contrib/QuadMeshingTools/arrayGeometry.h b/contrib/QuadMeshingTools/arrayGeometry.h
new file mode 100644
index 0000000000000000000000000000000000000000..92eaae266469f1a5a0463cacfc3e36753607f31e
--- /dev/null
+++ b/contrib/QuadMeshingTools/arrayGeometry.h
@@ -0,0 +1,84 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <array>
+#include <vector>
+#include <cstdint>
+#include <cfloat>
+#include <cmath>
+
+namespace ArrayGeometry {
+  using vec2 = std::array<double,2>;
+  using vec3 = std::array<double,3>;
+
+  /* scalar utils */
+  inline double clamp(double x, double lower, double upper) { return std::min(upper, std::max(x, lower)); }
+  inline double maxAbs(double x, double y, double z) { return std::max(std::abs(x),std::max(std::abs(y),std::abs(z))); }
+
+  /* vec3 math */
+  inline vec3 operator-(const vec3& a, const vec3& b) { return {{a[0]-b[0], a[1]-b[1], a[2]-b[2]}}; }
+  inline vec3 operator+(const vec3& a, const vec3& b) { return {{a[0]+b[0], a[1]+b[1], a[2]+b[2]}}; }
+  inline vec3 operator*(const double& a, const vec3& b) { return {{a*b[0], a*b[1], a*b[2]}}; }
+  inline vec3 operator*(const vec3& a, const double& b) { return {{a[0]*b, a[1]*b, a[2]*b}}; }
+  inline double dot      (const vec3& a, const vec3& b) { return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; }
+  inline double length2  (const vec3& a) { return dot(a,a); }
+  inline double length   (const vec3& a) { return sqrt(length2(a)); }
+  inline double maxAbs   (const vec3& a) { return maxAbs(a[0],a[1],a[2]); }
+  inline vec3 cross(const vec3& a, const vec3& b) { return {{a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]}};}
+  inline void normalizeFast(vec3& a) { a = 1./sqrt(length2(a)) * a; } /* no check, not safe, not accurate */
+  inline void normalize(vec3& a) { double amp = maxAbs(a); if (amp == 0.) { return; } a = amp * a; normalizeFast(a); }
+  inline double angleVectorsAlreadyNormalized(const vec3& a, const vec3& b) { return acos(clamp(dot(a,b),-1.,1.)); }
+  inline double angleVectors(vec3 a, vec3 b);
+
+  /* vec2 math */
+  inline vec2 operator-(const vec2& a, const vec2& b) { return {{a[0]-b[0], a[1]-b[1]}}; }
+  inline vec2 operator+(const vec2& a, const vec2& b) { return {{a[0]+b[0], a[1]+b[1]}}; }
+  inline vec2 operator*(const double& a, const vec2& b) { return {{a*b[0], a*b[1]}}; }
+  inline vec2 operator*(const vec2& a, const double& b) { return {{a[0]*b, a[1]*b}}; }
+  inline double dot      (const vec2& a, const vec2& b) { return a[0]*b[0]+a[1]*b[1]; }
+  inline double length2  (const vec2& a) { return dot(a,a); }
+  inline double length   (const vec2& a) { return sqrt(length2(a)); }
+
+
+  /* functions */
+
+  double bboxDiag(const std::vector<vec3>& points);
+  inline vec3 triangleNormal(const vec3& p0, const vec3& p1, const vec3& p2); /* normalized */
+  inline double triangleArea(const vec3& p0, const vec3& p1, const vec3& p2);
+
+
+
+  /**********************/
+  /* inline definitions */
+  /**********************/
+
+  double angleVectors(vec3 a, vec3 b) {
+    double ma = maxAbs(a);
+    double mb = maxAbs(b);
+    if (ma == 0. || mb == 0.) return DBL_MAX;
+    a = ma*a;
+    b = mb*b;
+    normalizeFast(a);
+    normalizeFast(b);
+    return angleVectorsAlreadyNormalized(a,b);
+  }
+
+  vec3 triangleNormal(const vec3& p0, const vec3& p1, const vec3& p2) {
+    vec3 N = cross(p2-p0,p1-p0);
+    if (maxAbs(N) == 0.) return {{0.,0.,0.}};
+    normalize(N);
+    return N;
+  }
+
+  double triangleArea(const vec3& p0, const vec3& p1, const vec3& p2) {
+    vec3 N = cross(p2-p0,p1-p0);
+    return length(N)/2.;
+  }
+
+}
diff --git a/contrib/QuadMeshingTools/cppUtils.cpp b/contrib/QuadMeshingTools/cppUtils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b4dab4c8dcc0998abc5ad0d23f61bad169414df5
--- /dev/null
+++ b/contrib/QuadMeshingTools/cppUtils.cpp
@@ -0,0 +1,16 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "cppUtils.h"
+
+
+namespace CppUtils {
+  /* Useless function, necessary for legacy compilers ? */
+  void dummy() {
+    return;
+  }
+}
diff --git a/contrib/QuadMeshingTools/cppUtils.h b/contrib/QuadMeshingTools/cppUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..a12399fa282243d3252de12de54a08bfea04f018
--- /dev/null
+++ b/contrib/QuadMeshingTools/cppUtils.h
@@ -0,0 +1,231 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <array>
+#include <vector>
+#include <algorithm>
+#include <unordered_map>
+#include <unordered_set>
+
+#include <ostream>
+#include <stdio.h>
+#include <string.h>
+
+/* Debugging macro to print variable name and value in the terminal, usage: DBG(x); DBG(x,..,z); */
+#define DBG(...) fprintf(stdout, "(DBG) %s:%i: ", __FILE__,__LINE__); CppUtils::show(std::cout, #__VA_ARGS__, __VA_ARGS__); fflush(stdout)
+
+namespace CppUtils {
+  using std::size_t;
+
+  template<class T> 
+    inline std::array<T,2> sorted(T v1, T v2) { 
+      if (v1 < v2) { return {v1,v2}; } else { return {v2,v1}; } 
+    }
+
+  template<class T> 
+    inline std::array<T,3> sorted(T v1, T v2, T v3) { 
+      if (v1 > v3) std::swap(v1,v3);
+      if (v1 > v2) std::swap(v1,v2);
+      if (v2 > v3) std::swap(v2,v3);
+      return std::array<T,3>{v1,v2,v3};
+    }
+
+  template<class T> 
+  void sort_unique(std::vector<T>& vec) {
+      std::sort( vec.begin(), vec.end() );
+      vec.erase( std::unique( vec.begin(), vec.end() ), vec.end() );
+  }
+
+  template<class T1, class T2> 
+  T2 sort_unique_with_perm(
+        const std::vector<T1>& in, 
+        std::vector<T1>& uniques,
+        std::vector<T2>& old2new) {
+
+      std::vector<T2> ids(in.size());
+      for(T2 k = 0; k != in.size(); ++k) ids[k]=k;
+
+      std::sort(ids.begin(), ids.end(), 
+          [&in](const T2& a, const T2&b){ return (in[a] < in[b]); }
+          );
+
+      uniques.resize(in.size());
+      old2new.resize(in.size());
+      for(T2 k = 0; k != in.size(); ++k) uniques[k]=in[k];
+
+      std::sort(uniques.begin(), uniques.end());
+      uniques.erase( std::unique(uniques.begin(), uniques.end()), 
+          uniques.end());
+      T2 ic = 0; // indice current
+      T2 ir = 0; // indice representant
+      T2 cur_rep = 0; // indice of current representant
+      while(ic < in.size()){
+        ic = ir;
+        while(ic < in.size() && in[ids[ic]]==in[ids[ir]]){
+          old2new[ids[ic]] = cur_rep;
+          ++ic;
+        }
+        ir = ic;
+        ++cur_rep;
+      }
+      return (T2) uniques.size();
+  }
+
+  template<class T> 
+    void compress(const std::vector<std::vector<T> >& vov,
+        std::vector<size_t>& first, std::vector<T>& values) {
+      first.resize(vov.size()+1);
+      size_t count = 0;
+      for (size_t i = 0; i < vov.size(); ++i) {
+        first[i] = count;
+        count += vov[i].size();
+      }
+      first[vov.size()] = count;
+      values.resize(count);
+      for (size_t i = 0; i < vov.size(); ++i) {
+        for (size_t j = 0; j < vov[i].size(); ++j) {
+          values[first[i]+j] = vov[i][j];
+        }
+      }
+      first.shrink_to_fit();
+      values.shrink_to_fit();
+    }
+
+  template<class T> 
+    std::vector<T> intersection(const std::vector<T>& v1, const std::vector<T>& v2) {
+      std::vector<T> s1 = v1;
+      std::vector<T> s2 = v2;
+      sort_unique(s1);
+      sort_unique(s2);
+      std::vector<T> s3;
+      set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(), std::back_inserter(s3));
+      return s3;
+    }
+
+  template<class T> 
+    std::vector<T> merge(const std::vector<T>& v1, const std::vector<T>& v2) {
+      std::vector<T> s1 = v1;
+      std::vector<T> s2 = v2;
+      sort_unique(s1);
+      sort_unique(s2);
+      std::vector<T> s3;
+      set_union(s1.begin(),s1.end(),s2.begin(),s2.end(), std::back_inserter(s3));
+      sort_unique(s3);
+      return s3;
+    }
+
+  template<class T> 
+    std::vector<T> difference(const std::vector<T>& v1, const std::vector<T>& v2) {
+      std::vector<T> s1 = v1;
+      std::vector<T> s2 = v2;
+      sort_unique(s1);
+      sort_unique(s2);
+      std::vector<T> s3;
+      set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(), std::inserter(s3,s3.begin()));
+      return s3;
+    }
+
+  template<class T1, class T2> 
+    inline std::vector<T2> dynamic_cast_vector(const std::vector<T1>& pointers) { 
+      std::vector<T2> output(pointers.size(),NULL);
+      for (size_t i = 0; i < pointers.size(); ++i) {
+        output[i] = dynamic_cast<T2>(pointers[i]);
+      }
+      return output;
+    }
+
+  template<class T> 
+    void append(std::vector<T>& v1, const std::vector<T>& v2) {
+      v1.insert(v1.end(),v2.begin(),v2.end());
+    }
+
+  template <typename T>
+    bool inVector(const T& value, const std::vector<T> &vec) {
+      if (vec.size() == 0) return false;
+      auto it = std::find(vec.begin(), vec.end(), value);
+      return (it != vec.end()) ? true : false;
+    }
+
+  template <typename T, size_t N>
+    bool inArray(const T& value, const std::array<T,N> &vec) {
+      if (vec.size() == 0) return false;
+      auto it = std::find(vec.begin(), vec.end(), value);
+      return (it != vec.end()) ? true : false;
+    }
+
+  template<class T1,class T2>
+    std::ostream& operator<<(std::ostream& os, const std::pair<T1,T2>& val) { 
+      return os << "(" << val.first << "," << val.second << ")";
+    }
+
+  template<class T,size_t N>
+    std::ostream& operator<<(std::ostream& os, const std::array<T,N>& values) { 
+      os << "(";
+      for (size_t i = 0; i < values.size(); ++i) {
+        os << values[i];
+        if (i != values.size() - 1) {
+          os << ", ";
+        }
+      }
+      os << ")";
+      return os;
+    }
+
+  template<class T>
+    std::ostream& operator<<(std::ostream& os, const std::vector<T>& values) { 
+      os << "[";
+      for (size_t i = 0; i < values.size(); ++i) {
+        const  T & x = values[i];
+        os << x;
+        if (i != values.size() - 1) {
+          os << ", ";
+        }
+      }
+      os << "]";
+      return os;
+    }
+
+  template<class T>
+    std::ostream& operator<<(std::ostream& os, const std::unordered_set<T>& values) { 
+      os << "{";
+      for (const T& v: values) {
+        os << v << ", ";
+      }
+      os << "}";
+      return os;
+    }
+
+  template<class T1,class T2>
+    std::ostream& operator<<(std::ostream& os, const std::unordered_map<T1,T2>& values) { 
+      os << "{";
+      for (const auto& kv: values) {
+        os << kv.first << ": " << kv.second << ", ";
+      }
+      os << "}";
+      return os;
+    }
+
+  /* For debug prints, see the DBG() macro */
+  template<typename H1>
+    std::ostream& show(std::ostream& out, const char* label, H1&& value) {
+      return out << label << "=" << std::forward<H1>(value) << '\n';
+    }
+
+  template<typename H1, typename ...T>
+    std::ostream& show(std::ostream& out, const char* label, H1&& value, T&&... rest) {
+      const char* pcomma = strchr(label, ',');
+      return show(out.write(label, pcomma - label) << "="
+          << std::forward<H1>(value)
+          << ',',
+          pcomma + 1,
+          std::forward<T>(rest)...);
+    }
+
+  void dummy();
+}
diff --git a/contrib/QuadMeshingTools/dataDiskQuadrangulationsSplit.hpp b/contrib/QuadMeshingTools/dataDiskQuadrangulationsSplit.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..faf864ec76b5c5db6d2fc4dca3a6e8e8f65177d3
--- /dev/null
+++ b/contrib/QuadMeshingTools/dataDiskQuadrangulationsSplit.hpp
@@ -0,0 +1,16017 @@
+#pragma once
+#include <string>
+
+// #v_boundary #v_interior #quads q1v1 q1v2 q1v3 q1v4 q2v1 q2v2 q2v3 q2v4 ... qNv1 qNv2 qNv3 qNv4
+const char* data_dqrgl_block0 = 
+  "4 0 1 0 1 2 3\n"
+  "4 4 5 4 5 2 3 4 7 6 5 4 3 0 7 6 7 0 1 5 6 1 2\n"
+  "6 0 2 0 3 4 5 0 1 2 3\n"
+  "6 1 3 6 3 4 5 6 1 2 3 6 5 0 1\n"
+  "6 2 4 6 3 4 5 6 7 2 3 6 5 0 7 2 7 0 1\n"
+  "6 3 5 0 6 4 5 0 8 7 6 0 1 2 8 7 8 2 3 6 7 3 4\n"
+  "6 4 6 6 3 4 5 6 7 2 3 6 9 8 7 6 5 0 9 8 9 0 1 2 7 8 1\n"
+  "6 4 6 0 3 4 5 0 7 6 3 0 1 8 7 8 1 2 9 6 7 8 9 3 6 9 2\n"
+  "6 4 6 0 6 4 5 0 8 7 6 0 1 9 8 9 1 2 3 7 8 9 3 6 7 3 4\n"
+  "6 4 6 0 6 4 5 0 8 7 6 0 1 2 8 7 8 2 9 6 7 9 4 4 9 2 3\n"
+  "8 0 3 0 5 6 7 0 3 4 5 0 1 2 3\n"
+  "8 0 3 0 5 6 7 0 1 4 5 4 1 2 3\n"
+  "8 1 4 8 5 6 7 8 3 4 5 8 1 2 3 8 7 0 1\n"
+  "8 1 4 0 5 6 7 0 8 4 5 0 1 2 8 4 8 2 3\n"
+  "8 2 5 8 5 6 7 8 3 4 5 8 9 2 3 8 7 0 9 2 9 0 1\n"
+  "8 2 5 0 5 6 7 0 8 4 5 0 1 9 8 9 1 2 3 4 8 9 3\n"
+  "8 2 5 0 8 6 7 0 3 9 8 0 1 2 3 9 3 4 5 8 9 5 6\n"
+  "8 2 5 0 8 6 7 0 9 4 8 0 1 2 9 4 9 2 3 8 4 5 6\n"
+  "8 3 6 8 6 7 9 8 4 5 6 8 2 3 4 8 9 10 2 2 10 0 1 7 0 10 9\n"
+  "8 3 6 8 5 6 7 8 9 4 5 8 10 2 9 8 7 0 10 2 10 0 1 4 9 2 3\n"
+  "8 3 6 8 9 6 7 8 3 4 9 8 10 2 3 8 7 0 10 2 10 0 1 9 4 5 6\n"
+  "8 3 6 0 5 6 7 0 8 4 5 0 1 9 8 9 1 2 10 4 8 9 10 4 10 2 3\n"
+  "8 3 6 0 5 6 7 0 9 8 5 0 1 10 9 10 1 2 3 8 9 10 3 5 8 3 4\n"
+  "8 3 6 0 8 6 7 0 9 4 8 0 1 10 9 10 1 2 3 4 9 10 3 8 4 5 6\n"
+  "8 4 7 8 5 6 7 8 3 4 5 8 9 2 3 8 11 10 9 8 7 0 11 10 11 0 1 2 9 10 1\n"
+  "8 4 7 8 5 6 7 8 9 4 5 8 11 10 9 8 7 0 11 11 0 1 2 10 11 2 3 4 9 10 3\n"
+  "8 4 7 8 9 6 7 8 11 10 9 8 3 4 11 8 7 0 3 3 0 1 2 10 11 4 5 9 10 5 6\n"
+  "8 4 7 8 6 7 9 8 10 5 6 8 2 3 10 8 9 11 2 2 11 0 1 5 10 3 4 7 0 11 9\n"
+  "8 4 7 8 9 10 11 8 5 6 9 8 3 4 5 8 11 0 3 3 0 1 2 9 6 7 10 10 7 0 11\n"
+  "8 4 7 8 9 7 10 8 4 5 9 8 2 3 4 8 10 11 2 2 11 0 1 9 5 6 7 7 0 11 10\n"
+  "8 4 7 8 6 7 9 8 4 5 6 8 2 3 4 8 9 10 2 2 10 11 1 7 11 10 9 7 0 1 11\n"
+  "8 4 7 8 6 9 10 8 4 5 6 8 2 3 4 8 10 11 2 2 11 0 1 9 0 11 10 6 7 0 9\n"
+  "8 4 7 8 5 6 7 8 9 4 5 8 11 10 9 8 7 0 11 10 11 0 3 0 1 2 3 4 9 10 3\n"
+  "8 4 7 8 6 7 9 8 4 5 6 8 10 3 4 8 9 11 10 3 10 11 2 11 0 1 2 7 0 11 9\n"
+  "8 4 7 8 9 6 7 8 10 4 9 8 11 2 10 8 7 0 11 2 11 0 1 4 10 2 3 9 4 5 6\n"
+  "8 4 7 0 5 6 7 0 8 4 5 0 1 9 8 9 1 11 10 1 2 3 11 4 8 9 10 4 10 11 3\n"
+  "8 4 7 0 5 6 7 0 9 8 5 0 1 10 9 10 1 4 11 1 2 3 4 8 9 10 11 5 8 11 4\n"
+  "8 4 7 0 3 4 7 0 9 8 3 0 1 10 9 10 1 2 11 8 9 10 11 3 8 11 2 4 5 6 7\n"
+  "8 4 7 0 8 9 7 0 10 4 8 0 1 11 10 11 1 2 3 4 10 11 3 8 4 5 9 9 5 6 7\n"
+  "10 0 4 0 7 8 9 0 5 6 7 0 1 4 5 4 1 2 3\n"
+  "10 0 4 0 7 8 9 0 5 6 7 0 1 2 5 5 2 3 4\n"
+  "10 0 4 0 7 8 9 0 3 6 7 0 1 2 3 6 3 4 5\n"
+  "10 0 4 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "10 1 5 10 7 8 9 10 5 6 7 10 3 4 5 10 1 2 3 10 9 0 1\n"
+  "10 1 5 10 7 8 9 10 5 6 7 10 3 4 5 10 9 0 3 3 0 1 2\n"
+  "10 1 5 0 7 8 9 0 5 6 7 0 1 10 5 10 1 2 3 5 10 3 4\n"
+  "10 1 5 0 7 8 9 0 10 6 7 0 1 4 10 4 1 2 3 6 10 4 5\n"
+  "10 1 5 0 10 8 9 0 5 6 10 0 1 4 5 4 1 2 3 10 6 7 8\n"
+  "10 1 5 0 7 8 9 0 3 10 7 0 1 2 3 10 3 4 5 7 10 5 6\n"
+  "10 1 5 0 7 8 9 0 10 6 7 0 1 2 10 6 10 2 5 2 3 4 5\n"
+  "10 2 6 10 7 8 9 10 5 6 7 10 3 4 5 10 11 2 3 10 9 0 11 2 11 0 1\n"
+  "10 2 6 10 7 8 9 10 5 6 7 10 3 4 5 10 9 11 3 3 11 1 2 9 0 1 11\n"
+  "10 2 6 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 11 0 1 2 4 11 2 3\n"
+  "10 2 6 10 7 8 9 10 11 6 7 10 3 4 11 10 9 0 3 3 0 1 2 6 11 4 5\n"
+  "10 2 6 10 11 8 9 10 5 6 11 10 3 4 5 10 9 0 3 3 0 1 2 11 6 7 8\n"
+  "10 2 6 10 7 8 11 10 5 6 7 10 3 4 5 10 11 0 3 3 0 1 2 8 9 0 11\n"
+  "10 2 6 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 4 11 0 3 0 1 2 3\n"
+  "10 2 6 0 7 8 9 0 10 6 7 0 1 11 10 11 1 4 5 1 2 3 4 6 10 11 5\n"
+  "10 2 6 0 7 8 9 0 5 6 7 0 1 10 5 10 1 2 11 11 2 3 4 5 10 11 4\n"
+  "10 2 6 0 7 8 9 0 10 6 7 0 1 11 10 11 1 2 5 5 2 3 4 6 10 11 5\n"
+  "10 2 6 0 10 8 9 0 5 6 10 0 1 11 5 11 1 2 3 5 11 3 4 10 6 7 8\n"
+  "10 2 6 0 7 8 9 0 10 6 7 0 1 11 10 11 1 2 3 6 10 11 3 6 3 4 5\n"
+  "10 2 6 0 7 8 9 0 10 4 7 0 1 11 10 11 1 2 3 4 10 11 3 7 4 5 6\n"
+  "10 2 6 0 5 6 9 0 10 4 5 0 1 11 10 11 1 2 3 4 10 11 3 6 7 8 9\n"
+  "10 2 6 0 10 8 9 0 5 11 10 0 1 4 5 4 1 2 3 11 5 6 7 10 11 7 8\n"
+  "10 2 6 0 10 8 9 0 11 6 10 0 1 4 11 4 1 2 3 6 11 4 5 10 6 7 8\n"
+  "10 2 6 0 10 8 9 0 3 11 10 0 1 2 3 11 3 4 5 10 11 5 8 8 5 6 7\n"
+  "10 3 7 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 2 3 12 0 1 2 9 0 12 11\n"
+  "10 3 7 10 7 8 9 10 5 6 7 10 3 4 5 10 9 11 3 3 11 12 2 9 0 12 11 2 12 0 1\n"
+  "10 3 7 10 7 8 9 10 5 6 7 10 11 4 5 10 9 12 11 11 12 1 2 9 0 1 12 4 11 2 3\n"
+  "10 3 7 10 7 8 9 10 11 6 7 10 3 4 11 10 9 12 3 3 12 1 2 9 0 1 12 6 11 4 5\n"
+  "10 3 7 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 11 0 1 12 12 1 2 3 4 11 12 3\n"
+  "10 3 7 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 0 3 3 0 1 2 9 0 12 11\n"
+  "10 3 7 10 8 9 11 10 6 7 8 10 2 3 6 10 11 12 2 2 12 0 1 6 3 4 5 9 0 12 11\n"
+  "10 3 7 10 11 8 9 10 5 12 11 10 3 4 5 10 9 0 3 3 0 1 2 12 5 6 7 11 12 7 8\n"
+  "10 3 7 10 7 8 9 10 12 11 7 10 3 4 12 10 9 0 3 3 0 1 2 11 12 4 5 7 11 5 6\n"
+  "10 3 7 10 11 8 9 10 12 6 11 10 3 4 12 10 9 0 3 3 0 1 2 6 12 4 5 11 6 7 8\n"
+  "10 3 7 10 7 8 11 10 12 6 7 10 3 4 12 10 11 0 3 3 0 1 2 6 12 4 5 8 9 0 11\n"
+  "10 3 7 10 7 11 12 10 5 6 7 10 3 4 5 10 12 0 3 3 0 1 2 7 8 9 11 11 9 0 12\n"
+  "10 3 7 10 11 8 12 10 5 6 11 10 3 4 5 10 12 0 3 3 0 1 2 11 6 7 8 8 9 0 12\n"
+  "10 3 7 10 6 7 11 10 4 5 6 10 2 3 4 10 11 12 2 2 12 0 1 7 0 12 11 7 8 9 0\n"
+  "10 3 7 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 4 11 0 12 0 1 2 12 4 12 2 3\n"
+  "10 3 7 10 7 8 9 10 11 6 7 10 12 4 11 10 9 0 12 4 12 0 3 0 1 2 3 6 11 4 5\n"
+  "10 3 7 10 11 8 9 10 5 6 11 10 12 4 5 10 9 0 12 4 12 0 3 0 1 2 3 11 6 7 8\n"
+  "10 4 8 10 7 8 9 10 5 6 7 10 11 4 5 10 13 12 11 10 9 0 13 13 0 1 2 12 13 2 3 4 11 12 3\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 4 5 6 10 12 3 4 10 11 13 12 3 12 13 2 13 0 1 2 9 0 13 11\n"
+  "10 4 8 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 11 0 13 12 0 1 2 13 12 13 2 3 4 11 12 3\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 13 3 12 0 1 13 3 13 1 2 9 0 12 11\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 13 12 11 10 9 0 13 13 0 3 4 0 1 2 3 12 13 4 5 6 11 12 5\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 12 5 6 10 11 13 12 12 13 2 3 13 0 1 2 5 12 3 4 9 0 13 11\n"
+  "10 4 8 10 11 8 9 10 13 12 11 10 5 6 13 10 9 0 5 5 0 3 4 0 1 2 3 12 13 6 7 11 12 7 8\n"
+  "10 4 8 10 11 9 12 10 6 7 11 10 4 5 6 10 12 13 4 4 13 2 3 13 0 1 2 11 7 8 9 9 0 13 12\n"
+  "10 4 8 10 8 11 12 10 6 7 8 10 4 5 6 10 12 13 4 4 13 2 3 13 0 1 2 11 0 13 12 8 9 0 11\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 2 3 11 13 2 12 2 13 0 1 9 0 13 11\n"
+  "10 4 8 10 7 8 9 10 5 6 7 10 11 4 5 10 9 12 11 11 12 13 2 9 0 13 12 2 13 0 1 4 11 2 3\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 3 4 11 10 9 12 3 3 12 13 2 9 0 13 12 2 13 0 1 6 11 4 5\n"
+  "10 4 8 10 7 8 9 10 5 6 7 10 12 11 5 10 9 13 12 12 13 1 2 9 0 1 13 11 12 2 3 5 11 3 4\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 12 4 11 10 9 13 12 12 13 1 2 9 0 1 13 4 12 2 3 6 11 4 5\n"
+  "10 4 8 10 11 8 9 10 5 6 11 10 12 4 5 10 9 13 12 12 13 1 2 9 0 1 13 4 12 2 3 11 6 7 8\n"
+  "10 4 8 10 11 8 9 10 5 12 11 10 3 4 5 10 9 13 3 3 13 1 2 9 0 1 13 12 5 6 7 11 12 7 8\n"
+  "10 4 8 10 11 8 9 10 12 6 11 10 3 4 12 10 9 13 3 3 13 1 2 9 0 1 13 6 12 4 5 11 6 7 8\n"
+  "10 4 8 10 11 8 9 10 5 6 11 10 12 4 5 10 9 0 12 12 0 1 13 13 1 2 3 4 12 13 3 11 6 7 8\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 13 12 11 10 9 0 13 13 0 1 4 4 1 2 3 12 13 4 5 6 11 12 5\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 12 5 6 10 11 13 12 12 13 0 3 3 0 1 2 5 12 3 4 9 0 13 11\n"
+  "10 4 8 10 11 8 9 10 13 12 11 10 5 6 13 10 9 0 5 5 0 1 4 4 1 2 3 12 13 6 7 11 12 7 8\n"
+  "10 4 8 10 8 9 11 10 12 7 8 10 4 5 12 10 11 13 4 4 13 0 3 3 0 1 2 7 12 5 6 9 0 13 11\n"
+  "10 4 8 10 11 12 13 10 7 8 11 10 5 6 7 10 13 0 5 5 0 1 4 4 1 2 3 11 8 9 12 12 9 0 13\n"
+  "10 4 8 10 11 9 12 10 6 7 11 10 4 5 6 10 12 13 4 4 13 0 3 3 0 1 2 11 7 8 9 9 0 13 12\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 13 3 3 13 1 2 9 13 12 11 9 0 1 13\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 12 3 6 10 11 13 12 12 13 0 1 3 12 1 2 6 3 4 5 9 0 13 11\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 13 12 11 10 9 0 13 13 0 1 2 12 13 2 3 6 11 12 3 6 3 4 5\n"
+  "10 4 8 10 11 12 13 10 7 8 11 10 3 4 7 10 13 0 3 3 0 1 2 7 4 5 6 11 8 9 12 12 9 0 13\n"
+  "10 4 8 10 11 9 12 10 6 7 11 10 2 3 6 10 12 13 2 2 13 0 1 6 3 4 5 11 7 8 9 9 0 13 12\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 2 3 6 10 11 12 2 2 12 13 1 6 3 4 5 9 13 12 11 9 0 1 13\n"
+  "10 4 8 10 8 11 12 10 6 7 8 10 2 3 6 10 12 13 2 2 13 0 1 6 3 4 5 11 0 13 12 8 9 0 11\n"
+  "10 4 8 10 11 8 9 10 5 12 11 10 3 4 5 10 9 0 3 3 0 1 2 12 5 6 13 11 12 13 8 8 13 6 7\n"
+  "10 4 8 10 11 8 12 10 5 13 11 10 3 4 5 10 12 0 3 3 0 1 2 13 5 6 7 11 13 7 8 8 9 0 12\n"
+  "10 4 8 10 11 12 13 10 5 8 11 10 3 4 5 10 13 0 3 3 0 1 2 8 5 6 7 11 8 9 12 12 9 0 13\n"
+  "10 4 8 10 7 8 9 10 12 11 7 10 3 4 12 10 9 0 3 3 0 1 2 11 12 4 13 4 5 6 13 7 11 13 6\n"
+  "10 4 8 10 11 8 9 10 13 12 11 10 3 4 13 10 9 0 3 3 0 1 2 12 13 4 7 4 5 6 7 11 12 7 8\n"
+  "10 4 8 10 8 9 11 10 12 7 8 10 2 3 12 10 11 13 2 2 13 0 1 7 12 3 6 3 4 5 6 9 0 13 11\n"
+  "10 4 8 10 11 8 9 10 13 12 11 10 3 4 13 10 9 0 3 3 0 1 2 12 13 4 5 12 5 6 7 11 12 7 8\n"
+  "10 4 8 10 8 9 11 10 12 7 8 10 2 3 12 10 11 13 2 2 13 0 1 7 12 3 4 7 4 5 6 9 0 13 11\n"
+  "10 4 8 10 8 9 11 10 12 5 8 10 2 3 12 10 11 13 2 2 13 0 1 5 12 3 4 8 5 6 7 9 0 13 11\n"
+  "10 4 8 10 11 8 9 10 13 12 11 10 3 4 13 10 9 0 3 3 0 1 2 12 13 4 5 11 12 5 8 8 5 6 7\n"
+  "10 4 8 10 11 6 7 10 13 12 11 10 3 4 13 10 7 0 3 3 0 1 2 12 13 4 5 11 12 5 6 7 8 9 0\n"
+  "10 4 8 10 7 11 12 10 13 6 7 10 3 4 13 10 12 0 3 3 0 1 2 6 13 4 5 7 8 9 11 11 9 0 12\n"
+  "10 4 8 10 11 8 12 10 13 6 11 10 3 4 13 10 12 0 3 3 0 1 2 6 13 4 5 11 6 7 8 8 9 0 12\n"
+  "10 4 8 10 6 7 11 10 12 5 6 10 2 3 12 10 11 13 2 2 13 0 1 5 12 3 4 7 0 13 11 7 8 9 0\n"
+  "10 4 8 10 11 12 13 10 5 6 11 10 3 4 5 10 13 0 3 3 0 1 2 11 6 9 12 6 7 8 9 12 9 0 13\n"
+  "10 4 8 10 11 9 12 10 4 5 11 10 2 3 4 10 12 13 2 2 13 0 1 11 5 8 9 5 6 7 8 9 0 13 12\n"
+  "10 4 8 10 11 12 13 10 5 6 11 10 3 4 5 10 13 0 3 3 0 1 2 11 6 7 12 12 7 8 9 12 9 0 13\n"
+  "10 4 8 10 8 9 11 10 6 7 8 10 4 5 6 10 11 12 4 4 12 13 3 9 13 12 11 9 0 3 13 3 0 1 2\n"
+  "10 4 8 10 7 8 9 10 5 6 7 10 11 4 5 10 9 0 11 4 11 0 12 0 1 13 12 13 1 2 3 4 12 13 3\n"
+  "10 4 8 10 7 8 9 10 11 6 7 10 13 12 11 10 9 0 13 12 13 0 5 0 1 4 5 4 1 2 3 6 11 12 5\n"
+  "10 4 8 10 11 8 9 10 5 6 11 10 12 4 5 10 9 0 12 4 12 0 13 0 1 2 13 4 13 2 3 11 6 7 8\n"
+  "10 4 8 10 11 8 9 10 12 6 11 10 13 4 12 10 9 0 13 4 13 0 3 0 1 2 3 6 12 4 5 11 6 7 8\n"
+  "12 0 5 0 9 10 11 0 7 8 9 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "12 0 5 0 9 10 11 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "12 0 5 0 9 10 11 0 7 8 9 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "12 0 5 0 9 10 11 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "12 0 5 0 9 10 11 0 5 8 9 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "12 0 5 0 9 10 11 0 5 6 9 0 1 4 5 4 1 2 3 9 6 7 8\n"
+  "12 0 5 0 7 10 11 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 10\n"
+  "12 0 5 0 7 8 11 0 5 6 7 0 1 4 5 4 1 2 3 8 9 10 11\n"
+  "12 0 5 0 9 10 11 0 7 8 9 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "12 0 5 0 9 10 11 0 3 6 9 0 1 2 3 6 3 4 5 9 6 7 8\n"
+  "12 0 5 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "12 1 6 12 9 10 11 12 7 8 9 12 5 6 7 12 3 4 5 12 11 0 3 3 0 1 2\n"
+  "12 1 6 12 9 10 11 12 7 8 9 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3\n"
+  "12 1 6 12 9 10 11 12 7 8 9 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3\n"
+  "12 1 6 12 9 10 11 12 7 8 9 12 3 4 7 12 11 0 3 3 0 1 2 7 4 5 6\n"
+  "12 1 6 12 9 10 11 12 5 8 9 12 3 4 5 12 11 0 3 3 0 1 2 8 5 6 7\n"
+  "12 1 6 12 9 10 11 12 5 6 9 12 3 4 5 12 11 0 3 3 0 1 2 9 6 7 8\n"
+  "12 1 6 12 7 10 11 12 5 6 7 12 3 4 5 12 11 0 3 3 0 1 2 7 8 9 10\n"
+  "12 1 6 12 7 8 9 12 5 6 7 12 3 4 5 12 9 0 3 3 0 1 2 9 10 11 0\n"
+  "12 1 6 0 9 10 11 0 7 8 9 0 1 6 7 6 1 12 5 1 2 3 12 5 12 3 4\n"
+  "12 1 6 0 9 10 11 0 7 8 9 0 1 12 7 12 1 4 5 1 2 3 4 7 12 5 6\n"
+  "12 1 6 0 9 10 11 0 7 8 9 0 1 6 7 6 1 2 12 12 2 3 4 6 12 4 5\n"
+  "12 1 6 0 9 10 11 0 7 8 9 0 1 12 7 12 1 2 5 5 2 3 4 7 12 5 6\n"
+  "12 1 6 0 9 10 11 0 12 8 9 0 1 6 12 6 1 2 5 5 2 3 4 8 12 6 7\n"
+  "12 1 6 0 12 10 11 0 7 8 12 0 1 6 7 6 1 2 5 5 2 3 4 12 8 9 10\n"
+  "12 1 6 0 12 10 11 0 7 8 12 0 1 4 7 4 1 2 3 7 4 5 6 12 8 9 10\n"
+  "12 1 6 0 9 10 11 0 7 8 9 0 1 12 7 12 1 2 3 7 12 3 6 3 4 5 6\n"
+  "12 1 6 0 7 10 11 0 5 6 7 0 1 12 5 12 1 2 3 5 12 3 4 7 8 9 10\n"
+  "12 1 6 0 7 8 11 0 5 6 7 0 1 12 5 12 1 2 3 5 12 3 4 8 9 10 11\n"
+  "12 1 6 0 9 10 11 0 5 12 9 0 1 4 5 4 1 2 3 12 5 6 7 9 12 7 8\n"
+  "12 1 6 0 9 10 11 0 12 8 9 0 1 4 12 4 1 2 3 8 12 4 5 8 5 6 7\n"
+  "12 1 6 0 9 10 11 0 12 6 9 0 1 4 12 4 1 2 3 6 12 4 5 9 6 7 8\n"
+  "12 1 6 0 7 8 11 0 12 6 7 0 1 4 12 4 1 2 3 6 12 4 5 8 9 10 11\n"
+  "12 1 6 0 12 10 11 0 5 6 12 0 1 4 5 4 1 2 3 12 6 7 10 10 7 8 9\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 3 4 5 12 11 13 3 3 13 1 2 11 0 1 13\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 0 13 13 0 1 2 4 13 2 3\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 3 4 13 12 11 0 3 3 0 1 2 6 13 4 5\n"
+  "12 2 7 12 9 10 11 12 13 8 9 12 5 6 13 12 3 4 5 12 11 0 3 3 0 1 2 8 13 6 7\n"
+  "12 2 7 12 13 10 11 12 7 8 13 12 5 6 7 12 3 4 5 12 11 0 3 3 0 1 2 13 8 9 10\n"
+  "12 2 7 12 9 10 13 12 7 8 9 12 5 6 7 12 3 4 5 12 13 0 3 3 0 1 2 10 11 0 13\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 0 13 4 13 0 3 0 1 2 3\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 3 4 13 1 2 3 11 0 1 13\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 11 0 5 5 0 13 4 0 1 2 13 4 13 2 3\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 3 4 0 1 2 3 6 13 4 5\n"
+  "12 2 7 12 9 10 11 12 13 8 9 12 5 6 13 12 11 0 5 5 0 3 4 0 1 2 3 8 13 6 7\n"
+  "12 2 7 12 13 10 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 13 8 9 10\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 3 4 11 0 3 13 3 0 1 2\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 3 4 7 12 11 13 3 3 13 1 2 11 0 1 13 7 4 5 6\n"
+  "12 2 7 12 9 10 11 12 5 8 9 12 3 4 5 12 11 13 3 3 13 1 2 11 0 1 13 8 5 6 7\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 1 4 4 1 2 3 6 13 4 5\n"
+  "12 2 7 12 9 10 11 12 13 8 9 12 5 6 13 12 11 0 5 5 0 1 4 4 1 2 3 8 13 6 7\n"
+  "12 2 7 12 13 10 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 13 8 9 10\n"
+  "12 2 7 12 9 10 13 12 7 8 9 12 5 6 7 12 13 0 5 5 0 1 4 4 1 2 3 10 11 0 13\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 4 7 12 11 0 13 13 0 1 2 4 13 2 3 7 4 5 6\n"
+  "12 2 7 12 13 10 11 12 7 8 13 12 3 4 7 12 11 0 3 3 0 1 2 7 4 5 6 13 8 9 10\n"
+  "12 2 7 12 9 10 13 12 7 8 9 12 3 4 7 12 13 0 3 3 0 1 2 7 4 5 6 10 11 0 13\n"
+  "12 2 7 12 13 10 11 12 5 8 13 12 3 4 5 12 11 0 3 3 0 1 2 8 5 6 7 13 8 9 10\n"
+  "12 2 7 12 9 10 11 12 13 8 9 12 3 4 13 12 11 0 3 3 0 1 2 8 13 4 7 4 5 6 7\n"
+  "12 2 7 12 9 10 11 12 13 8 9 12 3 4 13 12 11 0 3 3 0 1 2 8 13 4 5 8 5 6 7\n"
+  "12 2 7 12 9 10 11 12 13 6 9 12 3 4 13 12 11 0 3 3 0 1 2 6 13 4 5 9 6 7 8\n"
+  "12 2 7 12 7 10 11 12 13 6 7 12 3 4 13 12 11 0 3 3 0 1 2 6 13 4 5 7 8 9 10\n"
+  "12 2 7 12 7 8 9 12 13 6 7 12 3 4 13 12 9 0 3 3 0 1 2 6 13 4 5 9 10 11 0\n"
+  "12 2 7 12 7 10 13 12 5 6 7 12 3 4 5 12 13 0 3 3 0 1 2 7 8 9 10 10 11 0 13\n"
+  "12 2 7 12 13 10 11 12 5 6 13 12 3 4 5 12 11 0 3 3 0 1 2 13 6 9 10 6 7 8 9\n"
+  "12 2 7 12 13 10 11 12 5 6 13 12 3 4 5 12 11 0 3 3 0 1 2 13 6 7 10 10 7 8 9\n"
+  "12 2 7 12 7 8 13 12 5 6 7 12 3 4 5 12 13 0 3 3 0 1 2 8 11 0 13 8 9 10 11\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 5 0 1 4 5 4 1 2 3\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 5 0 1 2 5 5 2 3 4\n"
+  "12 2 7 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 3 0 1 2 3 6 3 4 5\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 6 7 6 1 12 5 1 2 13 12 13 2 3 4 5 12 13 4\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 6 7 1 2 5 6 5 2 3 4 8 12 13 7\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 6 7 1 2 3 6 6 3 4 5 8 12 13 7\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 12 7 12 1 4 13 1 2 3 4 13 4 5 6 7 12 13 6\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 4 7 1 2 3 4 7 4 5 6 8 12 13 7\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 6 7 6 1 13 12 1 2 3 13 12 13 3 4 6 12 4 5\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 12 7 12 1 13 5 1 2 3 13 5 13 3 4 7 12 5 6\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 6 12 6 1 13 5 1 2 3 13 5 13 3 4 8 12 6 7\n"
+  "12 2 7 0 12 10 11 0 7 8 12 0 1 6 7 6 1 13 5 1 2 3 13 5 13 3 4 12 8 9 10\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 4 5 1 2 3 4 8 12 13 5 8 5 6 7\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 12 7 12 1 2 13 13 2 5 6 2 3 4 5 7 12 13 6\n"
+  "12 2 7 0 9 10 11 0 7 8 9 0 1 6 7 6 1 2 12 12 2 3 13 13 3 4 5 6 12 13 5\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 2 7 7 2 3 6 6 3 4 5 8 12 13 7\n"
+  "12 2 7 0 12 10 11 0 7 8 12 0 1 6 7 6 1 2 13 13 2 3 4 6 13 4 5 12 8 9 10\n"
+  "12 2 7 0 9 10 11 0 5 6 9 0 1 12 5 12 1 2 13 13 2 3 4 5 12 13 4 9 6 7 8\n"
+  "12 2 7 0 7 10 11 0 5 6 7 0 1 12 5 12 1 2 13 13 2 3 4 5 12 13 4 7 8 9 10\n"
+  "12 2 7 0 7 8 11 0 5 6 7 0 1 12 5 12 1 2 13 13 2 3 4 5 12 13 4 8 9 10 11\n"
+  "12 2 7 0 12 10 11 0 7 8 12 0 1 13 7 13 1 2 5 5 2 3 4 7 13 5 6 12 8 9 10\n"
+  "12 2 7 0 12 10 11 0 7 13 12 0 1 6 7 6 1 2 5 5 2 3 4 13 7 8 9 12 13 9 10\n"
+  "12 2 7 0 9 10 11 0 13 12 9 0 1 6 13 6 1 2 5 5 2 3 4 12 13 6 7 9 12 7 8\n"
+  "12 2 7 0 12 10 11 0 13 8 12 0 1 6 13 6 1 2 5 5 2 3 4 8 13 6 7 12 8 9 10\n"
+  "12 2 7 0 12 13 11 0 7 8 12 0 1 6 7 6 1 2 5 5 2 3 4 12 8 9 13 13 9 10 11\n"
+  "12 2 7 0 12 10 11 0 7 8 12 0 1 13 7 13 1 2 3 7 13 3 6 3 4 5 6 12 8 9 10\n"
+  "12 2 7 0 7 12 11 0 5 6 7 0 1 13 5 13 1 2 3 5 13 3 4 7 8 9 12 12 9 10 11\n"
+  "12 2 7 0 9 10 11 0 12 8 9 0 1 13 12 13 1 2 3 8 12 13 3 8 3 4 7 7 4 5 6\n"
+  "12 2 7 0 9 10 11 0 12 4 9 0 1 13 12 13 1 2 3 4 12 13 3 9 4 5 8 8 5 6 7\n"
+  "12 2 7 0 12 10 11 0 5 13 12 0 1 4 5 4 1 2 3 13 5 6 7 12 13 7 10 10 7 8 9\n"
+  "12 2 7 0 12 10 11 0 13 6 12 0 1 4 13 4 1 2 3 6 13 4 5 12 6 7 10 10 7 8 9\n"
+  "12 2 7 0 12 8 11 0 13 6 12 0 1 4 13 4 1 2 3 6 13 4 5 12 6 7 8 8 9 10 11\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 4 5 6 12 13 14 4 4 14 2 3 14 0 1 2 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 14 13 13 14 1 2 11 0 1 14 4 13 2 3\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 0 13 13 0 1 14 14 1 2 3 4 13 14 3\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 14 4 13 12 11 0 14 14 0 1 2 4 14 2 3 6 13 4 5\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 5 6 13 12 14 4 5 12 11 0 14 14 0 1 2 4 14 2 3 8 13 6 7\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 3 4 13 14 2 3 11 0 14 13 2 14 0 1\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 14 13 13 14 3 4 14 1 2 3 11 0 1 14 6 13 4 5\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 11 0 5 5 0 13 4 0 1 14 13 14 1 2 3 4 13 14 3\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 0 3 4 3 0 1 2 11 0 14 13\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 0 1 4 4 1 2 3 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 3 14 0 1 2 3 14 3 4 5 6 13 14 5\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 2 5 14 0 1 2 5 2 3 4 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 14 4 0 1 2 14 4 14 2 3 6 13 4 5\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 5 6 13 12 11 0 5 5 0 14 4 0 1 2 14 4 14 2 3 8 13 6 7\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 14 4 0 1 2 14 4 14 2 3 13 8 9 10\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 14 13 7 12 11 0 14 14 0 3 4 0 1 2 3 13 14 4 5 7 13 5 6\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 14 0 3 4 0 1 2 3 6 14 4 5 8 13 6 7\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 14 0 3 4 0 1 2 3 6 14 4 5 13 8 9 10\n"
+  "12 3 8 12 13 10 11 12 7 14 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 14 7 8 9 13 14 9 10\n"
+  "12 3 8 12 9 10 11 12 14 13 9 12 5 6 14 12 11 0 5 5 0 3 4 0 1 2 3 13 14 6 7 9 13 7 8\n"
+  "12 3 8 12 13 10 11 12 14 8 13 12 5 6 14 12 11 0 5 5 0 3 4 0 1 2 3 8 14 6 7 13 8 9 10\n"
+  "12 3 8 12 8 11 13 12 6 7 8 12 4 5 6 12 13 14 4 4 14 2 3 14 0 1 2 8 9 10 11 11 0 14 13\n"
+  "12 3 8 12 13 14 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 13 8 9 14 14 9 10 11\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 11 0 14 13 14 0 1 2 4 14 2 3\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 14 13 13 14 3 4 11 0 3 14 3 0 1 2 6 13 4 5\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 5 6 13 12 11 14 5 5 14 3 4 11 0 3 14 3 0 1 2 8 13 6 7\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 5 6 7 12 11 14 5 5 14 3 4 11 0 3 14 3 0 1 2 13 8 9 10\n"
+  "12 3 8 12 9 10 13 12 7 8 9 12 5 6 7 12 13 14 5 5 14 3 4 13 0 3 14 3 0 1 2 10 11 0 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 11 0 14 13 4 14 0 3 0 1 2 3\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 3 4 7 12 11 13 3 3 13 14 2 11 0 14 13 2 14 0 1 7 4 5 6\n"
+  "12 3 8 12 9 10 11 12 5 8 9 12 3 4 5 12 11 13 3 3 13 14 2 11 0 14 13 2 14 0 1 8 5 6 7\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 14 13 13 14 1 2 11 0 1 14 6 13 2 5 2 3 4 5\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 4 7 12 11 14 13 13 14 1 2 11 0 1 14 4 13 2 3 7 4 5 6\n"
+  "12 3 8 12 9 10 11 12 5 6 9 12 13 4 5 12 11 14 13 13 14 1 2 11 0 1 14 4 13 2 3 9 6 7 8\n"
+  "12 3 8 12 7 10 11 12 5 6 7 12 13 4 5 12 11 14 13 13 14 1 2 11 0 1 14 4 13 2 3 7 8 9 10\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 3 4 7 12 11 14 3 3 14 1 2 11 0 1 14 7 4 5 6 13 8 9 10\n"
+  "12 3 8 12 9 10 11 12 5 13 9 12 3 4 5 12 11 14 3 3 14 1 2 11 0 1 14 13 5 6 7 9 13 7 8\n"
+  "12 3 8 12 13 10 11 12 5 8 13 12 3 4 5 12 11 14 3 3 14 1 2 11 0 1 14 8 5 6 7 13 8 9 10\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 3 4 13 12 11 14 3 3 14 1 2 11 0 1 14 8 13 4 7 4 5 6 7\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 3 4 13 12 11 14 3 3 14 1 2 11 0 1 14 8 13 4 5 8 5 6 7\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 1 14 14 1 4 5 1 2 3 4 6 13 14 5\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 0 5 5 0 1 4 4 1 2 3 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 1 14 14 1 2 3 14 3 4 5 6 13 14 5\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 0 5 5 0 1 2 5 2 3 4 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 4 7 12 11 0 13 13 0 1 14 14 1 2 3 4 13 14 3 7 4 5 6\n"
+  "12 3 8 12 9 10 11 12 5 6 9 12 13 4 5 12 11 0 13 13 0 1 14 14 1 2 3 4 13 14 3 9 6 7 8\n"
+  "12 3 8 12 10 11 13 12 8 9 10 12 4 5 8 12 13 14 4 4 14 0 3 3 0 1 2 8 5 6 7 11 0 14 13\n"
+  "12 3 8 12 13 10 11 12 7 14 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 14 7 8 9 13 14 9 10\n"
+  "12 3 8 12 10 11 13 12 6 9 10 12 4 5 6 12 13 14 4 4 14 0 3 3 0 1 2 9 6 7 8 11 0 14 13\n"
+  "12 3 8 12 9 10 11 12 14 13 9 12 5 6 14 12 11 0 5 5 0 1 4 4 1 2 3 13 14 6 7 9 13 7 8\n"
+  "12 3 8 12 13 10 11 12 14 8 13 12 5 6 14 12 11 0 5 5 0 1 4 4 1 2 3 8 14 6 7 13 8 9 10\n"
+  "12 3 8 12 9 10 13 12 14 8 9 12 5 6 14 12 13 0 5 5 0 1 4 4 1 2 3 8 14 6 7 10 11 0 13\n"
+  "12 3 8 12 10 11 13 12 6 7 10 12 4 5 6 12 13 14 4 4 14 0 3 3 0 1 2 10 7 8 9 11 0 14 13\n"
+  "12 3 8 12 9 13 14 12 7 8 9 12 5 6 7 12 14 0 5 5 0 1 4 4 1 2 3 9 10 11 13 13 11 0 14\n"
+  "12 3 8 12 8 11 13 12 6 7 8 12 4 5 6 12 13 14 4 4 14 0 3 3 0 1 2 8 9 10 11 11 0 14 13\n"
+  "12 3 8 12 13 14 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 13 8 9 14 14 9 10 11\n"
+  "12 3 8 12 13 10 14 12 7 8 13 12 5 6 7 12 14 0 5 5 0 1 4 4 1 2 3 13 8 9 10 10 11 0 14\n"
+  "12 3 8 12 10 11 13 12 6 7 10 12 2 3 6 12 13 14 2 2 14 0 1 6 3 4 5 10 7 8 9 11 0 14 13\n"
+  "12 3 8 12 9 13 14 12 7 8 9 12 3 4 7 12 14 0 3 3 0 1 2 7 4 5 6 9 10 11 13 13 11 0 14\n"
+  "12 3 8 12 8 11 13 12 6 7 8 12 2 3 6 12 13 14 2 2 14 0 1 6 3 4 5 8 9 10 11 11 0 14 13\n"
+  "12 3 8 12 13 10 14 12 7 8 13 12 3 4 7 12 14 0 3 3 0 1 2 7 4 5 6 13 8 9 10 10 11 0 14\n"
+  "12 3 8 12 8 9 13 12 6 7 8 12 2 3 6 12 13 14 2 2 14 0 1 6 3 4 5 9 0 14 13 9 10 11 0\n"
+  "12 3 8 12 10 11 13 12 4 7 10 12 2 3 4 12 13 14 2 2 14 0 1 7 4 5 6 10 7 8 9 11 0 14 13\n"
+  "12 3 8 12 13 10 11 12 5 14 13 12 3 4 5 12 11 0 3 3 0 1 2 14 5 6 7 13 14 7 10 10 7 8 9\n"
+  "12 3 8 12 13 10 14 12 5 8 13 12 3 4 5 12 14 0 3 3 0 1 2 8 5 6 7 13 8 9 10 10 11 0 14\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 3 4 13 12 11 0 3 3 0 1 2 8 13 4 14 4 5 6 14 8 14 6 7\n"
+  "12 3 8 12 9 10 11 12 14 13 9 12 3 4 14 12 11 0 3 3 0 1 2 13 14 4 7 4 5 6 7 9 13 7 8\n"
+  "12 3 8 12 13 10 11 12 14 8 13 12 3 4 14 12 11 0 3 3 0 1 2 8 14 4 7 4 5 6 7 13 8 9 10\n"
+  "12 3 8 12 9 10 13 12 14 8 9 12 3 4 14 12 13 0 3 3 0 1 2 8 14 4 7 4 5 6 7 10 11 0 13\n"
+  "12 3 8 12 9 10 13 12 14 8 9 12 3 4 14 12 13 0 3 3 0 1 2 8 14 4 5 8 5 6 7 10 11 0 13\n"
+  "12 3 8 12 9 10 13 12 14 6 9 12 3 4 14 12 13 0 3 3 0 1 2 6 14 4 5 9 6 7 8 10 11 0 13\n"
+  "12 3 8 12 7 10 13 12 14 6 7 12 3 4 14 12 13 0 3 3 0 1 2 6 14 4 5 7 8 9 10 10 11 0 13\n"
+  "12 3 8 12 13 10 11 12 14 6 13 12 3 4 14 12 11 0 3 3 0 1 2 6 14 4 5 13 6 7 10 10 7 8 9\n"
+  "12 3 8 12 13 8 9 12 14 6 13 12 3 4 14 12 9 0 3 3 0 1 2 6 14 4 5 13 6 7 8 9 10 11 0\n"
+  "12 3 8 12 7 8 13 12 14 6 7 12 3 4 14 12 13 0 3 3 0 1 2 6 14 4 5 8 11 0 13 8 9 10 11\n"
+  "12 3 8 12 13 10 11 12 5 6 13 12 3 4 5 12 11 0 3 3 0 1 2 13 6 14 10 6 7 8 14 10 14 8 9\n"
+  "12 3 8 12 13 10 14 12 5 6 13 12 3 4 5 12 14 0 3 3 0 1 2 13 6 9 10 6 7 8 9 10 11 0 14\n"
+  "12 3 8 12 6 7 13 12 4 5 6 12 2 3 4 12 13 14 2 2 14 0 1 7 0 14 13 7 8 11 0 11 8 9 10\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 5 0 1 14 5 14 1 2 3 5 14 3 4\n"
+  "12 3 8 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 14 0 1 4 14 4 1 2 3 6 14 4 5\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 6 14 0 5 0 1 4 5 4 1 2 3 8 13 6 7\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 6 14 0 5 0 1 4 5 4 1 2 3 13 8 9 10\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 6 14 0 5 0 1 2 5 5 2 3 4 8 13 6 7\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 6 14 0 5 0 1 2 5 5 2 3 4 13 8 9 10\n"
+  "12 3 8 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 6 14 0 3 0 1 2 3 6 3 4 5 13 8 9 10\n"
+  "12 3 8 12 9 10 11 12 13 8 9 12 14 4 13 12 11 0 14 4 14 0 3 0 1 2 3 8 13 4 5 8 5 6 7\n"
+  "12 3 8 12 13 10 11 12 5 6 13 12 14 4 5 12 11 0 14 4 14 0 3 0 1 2 3 13 6 9 10 6 7 8 9\n"
+  "12 3 8 12 13 10 11 12 5 6 13 12 14 4 5 12 11 0 14 4 14 0 3 0 1 2 3 13 6 7 10 10 7 8 9\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 4 5 6 12 13 14 4 4 14 15 3 14 0 1 15 3 15 1 2 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 14 5 6 12 13 15 14 14 15 2 3 15 0 1 2 5 14 3 4 11 0 15 13\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 4 5 14 12 13 15 4 4 15 2 3 15 0 1 2 7 14 5 6 11 0 15 13\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 4 5 6 12 13 15 4 4 15 2 3 15 0 1 2 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 4 5 6 12 14 15 4 4 15 2 3 15 0 1 2 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 4 5 6 12 13 14 4 4 14 2 3 14 15 1 2 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 10 13 14 12 8 9 10 12 6 7 8 12 4 5 6 12 14 15 4 4 15 2 3 15 0 1 2 13 0 15 14 10 11 0 13\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 4 5 6 12 13 14 4 4 14 2 3 13 15 2 14 2 15 0 1 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 13 4 5 12 11 14 13 13 14 15 2 11 0 15 14 2 15 0 1 4 13 2 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 14 13 5 12 11 15 14 14 15 1 2 11 0 1 15 13 14 2 3 5 13 3 4\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 14 4 13 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 6 13 4 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 14 4 5 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 5 6 7 12 14 4 5 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 13 8 9 10\n"
+  "12 4 9 12 9 10 13 12 7 8 9 12 5 6 7 12 14 4 5 12 13 15 14 14 15 1 2 13 0 1 15 4 14 2 3 10 11 0 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 14 4 13 12 11 0 14 14 0 1 15 15 1 2 3 4 14 15 3 6 13 4 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 14 4 5 12 11 0 14 14 0 1 15 15 1 2 3 4 14 15 3 8 13 6 7\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 15 14 13 12 11 0 15 15 0 1 4 4 1 2 3 14 15 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 14 5 6 12 13 15 14 14 15 0 3 3 0 1 2 5 14 3 4 11 0 15 13\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 4 5 6 12 13 14 4 4 14 15 3 3 15 1 2 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 14 3 6 12 13 15 14 14 15 0 1 3 14 1 2 6 3 4 5 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 6 13 14 3 6 3 4 5\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 4 7 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 4 13 14 3 7 4 5 6\n"
+  "12 4 9 12 9 10 11 12 5 8 9 12 13 4 5 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 4 13 14 3 8 5 6 7\n"
+  "12 4 9 12 9 10 11 12 5 6 9 12 13 4 5 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 4 13 14 3 9 6 7 8\n"
+  "12 4 9 12 7 10 11 12 5 6 7 12 13 4 5 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 4 13 14 3 7 8 9 10\n"
+  "12 4 9 12 7 8 11 12 5 6 7 12 13 4 5 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 4 13 14 3 8 9 10 11\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 14 13 12 15 4 5 12 11 0 15 15 0 1 2 4 15 2 3 14 5 6 7 8 13 14 7\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 14 13 7 12 15 4 14 12 11 0 15 15 0 1 2 4 15 2 3 13 14 4 5 7 13 5 6\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 15 4 14 12 11 0 15 15 0 1 2 4 15 2 3 6 14 4 5 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 15 4 14 12 11 0 15 15 0 1 2 4 15 2 3 6 14 4 5 13 8 9 10\n"
+  "12 4 9 12 9 10 13 12 7 8 9 12 14 6 7 12 15 4 14 12 13 0 15 15 0 1 2 4 15 2 3 6 14 4 5 10 11 0 13\n"
+  "12 4 9 12 13 10 11 12 7 14 13 12 5 6 7 12 15 4 5 12 11 0 15 15 0 1 2 4 15 2 3 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 5 6 14 12 15 4 5 12 11 0 15 15 0 1 2 4 15 2 3 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 5 14 5 6 7 8 13 14 7\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 3 4 5 12 11 0 3 3 0 1 2 14 15 6 7 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 5 6 7 12 3 4 5 12 15 0 3 3 0 1 2 13 8 9 14 14 9 10 11 14 11 0 15\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 14 5 6 12 13 15 14 5 14 15 4 15 0 3 4 3 0 1 2 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 15 14 13 12 11 0 15 14 15 0 3 0 1 2 3 14 3 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 2 3 4 13 15 2 14 2 15 0 1 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 13 1 15 14 11 0 1 13 15 1 2 3 4 14 15 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 13 15 2 14 11 0 15 13 2 15 0 1 4 14 2 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 14 13 13 14 3 4 14 15 2 3 11 0 15 14 2 15 0 1 6 13 4 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 11 14 5 5 14 3 4 14 15 2 3 11 0 15 14 2 15 0 1 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 5 6 7 12 11 14 5 5 14 3 4 14 15 2 3 11 0 15 14 2 15 0 1 13 8 9 10\n"
+  "12 4 9 12 9 10 13 12 7 8 9 12 5 6 7 12 13 14 5 5 14 3 4 14 15 2 3 13 0 15 14 2 15 0 1 10 11 0 13\n"
+  "12 4 9 12 9 10 13 12 7 8 9 12 14 6 7 12 13 15 14 14 15 3 4 15 1 2 3 13 0 1 15 6 14 4 5 10 11 0 13\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 0 15 4 15 0 1 2 4 15 2 3 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 11 0 5 5 0 13 4 0 1 14 13 14 1 2 15 4 13 14 15 4 15 2 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 14 4 0 1 15 14 15 1 2 3 4 14 15 3 6 13 4 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 11 0 5 5 0 14 4 0 1 15 14 15 1 2 3 4 14 15 3 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 14 4 0 1 15 14 15 1 2 3 4 14 15 3 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 15 14 0 1 4 15 4 1 2 3 14 15 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 14 0 3 15 3 0 1 2 5 15 3 4 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 5 6 0 1 4 5 4 1 2 3 14 15 6 7 8 13 14 7\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 13 15 14 14 15 4 5 15 0 3 4 3 0 1 2 7 14 5 6 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 5 6 0 1 4 5 4 1 2 3 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 13 15 6 6 15 4 5 15 0 3 4 3 0 1 2 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 14 15 6 6 15 4 5 15 0 3 4 3 0 1 2 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 15 3 4 3 15 1 2 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 15 14 0 1 2 15 15 2 3 4 14 15 4 5 6 13 14 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 5 6 0 1 2 5 5 2 3 4 14 15 6 7 8 13 14 7\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 13 15 14 14 15 4 5 15 0 1 4 4 1 2 3 7 14 5 6 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 5 6 0 1 2 5 5 2 3 4 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 13 15 6 6 15 4 5 15 0 1 4 4 1 2 3 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 14 15 6 6 15 4 5 15 0 1 4 4 1 2 3 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 14 15 1 4 4 1 2 3 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 10 13 14 12 8 9 10 12 6 7 8 12 14 15 6 6 15 4 5 15 0 1 4 4 1 2 3 13 0 15 14 10 11 0 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 3 14 0 1 2 3 14 3 4 15 6 13 14 15 6 15 4 5\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 14 13 7 12 11 0 14 14 0 3 15 0 1 2 3 15 3 4 5 13 14 15 5 7 13 5 6\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 14 0 3 15 0 1 2 3 15 3 4 5 6 14 15 5 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 14 0 3 15 0 1 2 3 15 3 4 5 6 14 15 5 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 3 6 0 1 2 3 6 3 4 5 14 15 6 7 8 13 14 7\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 13 15 14 14 15 2 5 15 0 1 2 5 2 3 4 7 14 5 6 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 3 6 0 1 2 3 6 3 4 5 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 13 15 6 6 15 2 5 15 0 1 2 5 2 3 4 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 14 15 6 6 15 2 5 15 0 1 2 5 2 3 4 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 2 5 14 15 1 2 5 2 3 4 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 10 13 14 12 8 9 10 12 6 7 8 12 14 15 6 6 15 2 5 15 0 1 2 5 2 3 4 13 0 15 14 10 11 0 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 5 2 3 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 14 0 1 15 5 15 1 4 1 2 3 4 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 14 3 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 14 0 1 15 5 15 1 2 5 2 3 4 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 4 7 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3 7 4 5 6\n"
+  "12 4 9 12 9 10 11 12 5 8 9 12 13 4 5 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3 8 5 6 7\n"
+  "12 4 9 12 9 10 11 12 5 6 9 12 13 4 5 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3 9 6 7 8\n"
+  "12 4 9 12 7 10 11 12 5 6 7 12 13 4 5 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3 7 8 9 10\n"
+  "12 4 9 12 7 8 11 12 5 6 7 12 13 4 5 12 11 0 13 13 0 15 14 0 1 2 15 14 15 2 3 4 13 14 3 8 9 10 11\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 14 13 7 12 11 0 14 14 0 15 4 0 1 2 15 4 15 2 3 13 14 4 5 7 13 5 6\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 14 0 15 4 0 1 2 15 4 15 2 3 6 14 4 5 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 14 0 15 4 0 1 2 15 4 15 2 3 6 14 4 5 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 7 14 13 12 5 6 7 12 11 0 5 5 0 15 4 0 1 2 15 4 15 2 3 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 5 6 14 12 11 0 5 5 0 15 4 0 1 2 15 4 15 2 3 13 14 6 7 9 13 7 8\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 5 6 14 12 11 0 5 5 0 15 4 0 1 2 15 4 15 2 3 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 8 11 13 12 6 7 8 12 4 5 6 12 13 14 4 4 14 15 3 14 0 1 15 3 15 1 2 8 9 10 11 11 0 14 13\n"
+  "12 4 9 12 13 14 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 15 4 0 1 2 15 4 15 2 3 13 8 9 14 14 9 10 11\n"
+  "12 4 9 12 8 9 13 12 6 7 8 12 4 5 6 12 13 14 4 4 14 15 3 14 0 1 15 3 15 1 2 9 0 14 13 9 10 11 0\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 14 13 7 12 11 0 14 14 0 3 4 0 1 2 3 13 14 4 15 4 5 6 15 7 13 15 6\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 7 4 5 6 7 8 13 14 7\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 13 15 14 14 15 2 3 15 0 1 2 7 14 3 6 3 4 5 6 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 15 14 7 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 7 14 5 6 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 8 13 14 5 8 5 6 7\n"
+  "12 4 9 12 9 10 11 12 13 6 9 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 6 13 14 5 9 6 7 8\n"
+  "12 4 9 12 7 10 11 12 13 6 7 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 6 13 14 5 7 8 9 10\n"
+  "12 4 9 12 7 8 11 12 13 6 7 12 15 14 13 12 11 0 15 15 0 3 4 0 1 2 3 14 15 4 5 6 13 14 5 8 9 10 11\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 15 6 14 12 11 0 15 15 0 3 4 0 1 2 3 6 15 4 5 13 14 6 7 9 13 7 8\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 15 6 14 12 11 0 15 15 0 3 4 0 1 2 3 6 15 4 5 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 8 11 13 12 6 7 8 12 14 5 6 12 13 15 14 14 15 2 3 15 0 1 2 5 14 3 4 8 9 10 11 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 7 14 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 14 7 8 15 13 14 15 10 10 15 8 9\n"
+  "12 4 9 12 13 14 11 12 7 15 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 15 7 8 9 13 15 9 14 14 9 10 11\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 5 6 14 12 11 0 5 5 0 3 4 0 1 2 3 13 14 6 15 6 7 8 15 9 13 15 8\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 14 15 6 9 6 7 8 9 13 14 9 10\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 14 15 6 7 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 14 15 6 7 13 14 7 8 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 14 15 6 7 13 14 7 10 10 7 8 9\n"
+  "12 4 9 12 13 8 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 14 15 6 7 13 14 7 8 8 9 10 11\n"
+  "12 4 9 12 13 14 11 12 15 8 13 12 5 6 15 12 11 0 5 5 0 3 4 0 1 2 3 8 15 6 7 13 8 9 14 14 9 10 11\n"
+  "12 4 9 12 8 13 14 12 6 7 8 12 4 5 6 12 14 15 4 4 15 2 3 15 0 1 2 8 9 10 13 13 0 15 14 13 10 11 0\n"
+  "12 4 9 12 13 14 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 3 4 0 1 2 3 13 8 15 14 8 9 10 15 14 15 10 11\n"
+  "12 4 9 12 13 11 14 12 6 7 13 12 4 5 6 12 14 15 4 4 15 2 3 15 0 1 2 13 7 10 11 7 8 9 10 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 13 15 4 14 4 15 2 3 15 0 1 2 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 11 0 14 13 14 0 1 15 15 1 2 3 4 14 15 3\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 4 5 13 15 4 14 4 15 0 3 3 0 1 2 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 11 14 5 5 14 15 4 11 0 15 14 15 0 1 2 4 15 2 3 8 13 6 7\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 14 13 7 12 11 15 14 14 15 3 4 11 0 3 15 3 0 1 2 13 14 4 5 7 13 5 6\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 11 15 14 14 15 3 4 11 0 3 15 3 0 1 2 6 14 4 5 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 15 14 14 15 3 4 11 0 3 15 3 0 1 2 6 14 4 5 13 8 9 10\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 4 5 8 12 13 14 4 4 14 2 3 13 15 2 14 2 15 0 1 8 5 6 7 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 7 14 13 12 5 6 7 12 11 15 5 5 15 3 4 11 0 3 15 3 0 1 2 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 6 9 10 12 4 5 6 12 13 14 4 4 14 2 3 13 15 2 14 2 15 0 1 9 6 7 8 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 5 6 14 12 11 15 5 5 15 3 4 11 0 3 15 3 0 1 2 13 14 6 7 9 13 7 8\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 5 6 14 12 11 15 5 5 15 3 4 11 0 3 15 3 0 1 2 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 9 10 13 12 14 8 9 12 5 6 14 12 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2 8 14 6 7 10 11 0 13\n"
+  "12 4 9 12 9 13 14 12 7 8 9 12 5 6 7 12 14 15 5 5 15 3 4 14 0 3 15 3 0 1 2 9 10 11 13 13 11 0 14\n"
+  "12 4 9 12 8 11 13 12 6 7 8 12 4 5 6 12 13 14 4 4 14 2 3 13 15 2 14 2 15 0 1 8 9 10 11 11 0 15 13\n"
+  "12 4 9 12 13 10 14 12 7 8 13 12 5 6 7 12 14 15 5 5 15 3 4 14 0 3 15 3 0 1 2 13 8 9 10 10 11 0 14\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 5 6 7 12 11 13 5 5 13 14 4 11 0 14 13 4 14 0 15 0 1 2 15 4 15 2 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 14 13 13 14 15 4 11 0 15 14 4 15 0 3 0 1 2 3 6 13 4 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 5 6 13 12 11 14 5 5 14 15 4 11 0 15 14 4 15 0 3 0 1 2 3 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 5 6 7 12 11 14 5 5 14 15 4 11 0 15 14 4 15 0 3 0 1 2 3 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 4 7 12 11 14 13 13 14 15 2 11 0 15 14 2 15 0 1 4 13 2 3 7 4 5 6\n"
+  "12 4 9 12 9 10 11 12 5 6 9 12 13 4 5 12 11 14 13 13 14 15 2 11 0 15 14 2 15 0 1 4 13 2 3 9 6 7 8\n"
+  "12 4 9 12 7 10 11 12 5 6 7 12 13 4 5 12 11 14 13 13 14 15 2 11 0 15 14 2 15 0 1 4 13 2 3 7 8 9 10\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 3 4 7 12 11 14 3 3 14 15 2 11 0 15 14 2 15 0 1 7 4 5 6 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 5 13 9 12 3 4 5 12 11 14 3 3 14 15 2 11 0 15 14 2 15 0 1 13 5 6 7 9 13 7 8\n"
+  "12 4 9 12 13 10 11 12 5 8 13 12 3 4 5 12 11 14 3 3 14 15 2 11 0 15 14 2 15 0 1 8 5 6 7 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 3 4 13 12 11 14 3 3 14 15 2 11 0 15 14 2 15 0 1 8 13 4 7 4 5 6 7\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 3 4 13 12 11 14 3 3 14 15 2 11 0 15 14 2 15 0 1 8 13 4 5 8 5 6 7\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 11 15 14 14 15 1 2 11 0 1 15 6 14 2 5 2 3 4 5 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 15 14 14 15 1 2 11 0 1 15 6 14 2 5 2 3 4 5 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 4 7 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 7 4 5 6 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 5 6 9 12 14 13 5 12 11 15 14 14 15 1 2 11 0 1 15 13 14 2 3 5 13 3 4 9 6 7 8\n"
+  "12 4 9 12 13 10 11 12 5 6 13 12 14 4 5 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 13 6 9 10 6 7 8 9\n"
+  "12 4 9 12 13 10 11 12 5 6 13 12 14 4 5 12 11 15 14 14 15 1 2 11 0 1 15 4 14 2 3 13 6 7 10 10 7 8 9\n"
+  "12 4 9 12 13 10 11 12 5 14 13 12 3 4 5 12 11 15 3 3 15 1 2 11 0 1 15 14 5 6 9 9 6 7 8 13 14 9 10\n"
+  "12 4 9 12 13 10 11 12 5 14 13 12 3 4 5 12 11 15 3 3 15 1 2 11 0 1 15 14 5 6 7 13 14 7 10 10 7 8 9\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 3 4 13 12 11 14 3 3 14 1 2 11 0 1 14 8 13 4 15 4 5 6 15 8 15 6 7\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 3 4 14 12 11 15 3 3 15 1 2 11 0 1 15 8 14 4 7 4 5 6 7 13 8 9 10\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 1 14 14 1 15 5 1 2 3 15 5 15 3 4 6 13 14 5\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 14 0 1 15 15 1 4 5 1 2 3 4 6 14 15 5 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 13 14 15 12 9 10 13 12 7 8 9 12 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 14 14 11 0 15\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 13 0 1 14 14 1 2 15 15 2 3 4 14 15 4 5 6 13 14 5\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 0 5 5 0 1 15 15 1 2 3 5 15 3 4 11 0 14 13\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 1 6 6 1 2 5 5 2 3 4 14 15 6 7 8 13 14 7\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 7 8 12 13 15 14 14 15 0 5 5 0 1 4 4 1 2 3 7 14 5 6 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 13 15 6 6 15 0 5 5 0 1 4 4 1 2 3 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 14 15 12 9 10 13 12 7 8 9 12 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 14 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 14 15 6 6 15 0 5 5 0 1 4 4 1 2 3 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 5 15 1 4 4 1 2 3 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 7 8 15 12 11 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 15 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 6 7 14 12 13 15 6 6 15 0 5 5 0 1 2 5 2 3 4 9 14 7 8 11 0 15 13\n"
+  "12 4 9 12 13 14 15 12 9 10 13 12 7 8 9 12 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 14 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 6 7 8 12 14 15 6 6 15 0 5 5 0 1 2 5 2 3 4 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 5 15 1 2 5 2 3 4 11 15 14 13 11 0 1 15\n"
+;
+
+const char* data_dqrgl_block1 = 
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 4 7 12 11 0 14 14 0 1 15 15 1 2 3 4 14 15 3 7 4 5 6 13 8 9 10\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 14 5 8 12 13 15 14 14 15 0 3 3 0 1 2 5 14 3 4 8 5 6 7 11 0 15 13\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 1 4 4 1 2 3 14 15 4 5 8 13 14 5 8 5 6 7\n"
+  "12 4 9 12 9 10 11 12 13 6 9 12 15 14 13 12 11 0 15 15 0 1 4 4 1 2 3 14 15 4 5 6 13 14 5 9 6 7 8\n"
+  "12 4 9 12 7 10 11 12 13 6 7 12 15 14 13 12 11 0 15 15 0 1 4 4 1 2 3 14 15 4 5 6 13 14 5 7 8 9 10\n"
+  "12 4 9 12 7 8 9 12 13 6 7 12 15 14 13 12 9 0 15 15 0 1 4 4 1 2 3 14 15 4 5 6 13 14 5 9 10 11 0\n"
+  "12 4 9 12 8 11 13 12 6 7 8 12 14 5 6 12 13 15 14 14 15 0 3 3 0 1 2 5 14 3 4 8 9 10 11 11 0 15 13\n"
+  "12 4 9 12 13 14 15 12 9 10 13 12 5 6 9 12 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 14 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 8 9 13 12 4 5 8 12 14 15 4 4 15 0 3 3 0 1 2 8 5 6 7 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 4 5 8 12 13 14 4 4 14 15 3 3 15 1 2 8 5 6 7 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 13 10 11 12 7 14 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 14 7 8 15 13 14 15 10 10 15 8 9\n"
+  "12 4 9 12 13 14 11 12 7 15 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 15 7 8 9 13 15 9 14 14 9 10 11\n"
+  "12 4 9 12 13 10 14 12 7 15 13 12 5 6 7 12 14 0 5 5 0 1 4 4 1 2 3 15 7 8 9 13 15 9 10 10 11 0 14\n"
+  "12 4 9 12 13 14 15 12 7 10 13 12 5 6 7 12 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 14 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 6 9 13 12 4 5 6 12 14 15 4 4 15 0 3 3 0 1 2 9 6 7 8 13 9 10 11 11 0 15 14\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 5 6 14 12 11 0 5 5 0 1 4 4 1 2 3 13 14 6 15 6 7 8 15 9 13 15 8\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 1 4 4 1 2 3 14 15 6 9 6 7 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 4 5 14 12 13 15 4 4 15 0 3 3 0 1 2 9 14 5 8 5 6 7 8 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 1 4 4 1 2 3 14 15 6 7 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 4 5 14 12 13 15 4 4 15 0 3 3 0 1 2 9 14 5 6 9 6 7 8 11 0 15 13\n"
+  "12 4 9 12 10 11 13 12 14 7 10 12 4 5 14 12 13 15 4 4 15 0 3 3 0 1 2 7 14 5 6 10 7 8 9 11 0 15 13\n"
+  "12 4 9 12 9 10 13 12 15 14 9 12 5 6 15 12 13 0 5 5 0 1 4 4 1 2 3 14 15 6 7 9 14 7 8 10 11 0 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 1 4 4 1 2 3 14 15 6 7 13 14 7 10 10 7 8 9\n"
+  "12 4 9 12 13 8 11 12 15 14 13 12 5 6 15 12 11 0 5 5 0 1 4 4 1 2 3 14 15 6 7 13 14 7 8 8 9 10 11\n"
+  "12 4 9 12 13 8 9 12 15 14 13 12 5 6 15 12 9 0 5 5 0 1 4 4 1 2 3 14 15 6 7 13 14 7 8 9 10 11 0\n"
+  "12 4 9 12 9 13 14 12 15 8 9 12 5 6 15 12 14 0 5 5 0 1 4 4 1 2 3 8 15 6 7 9 10 11 13 13 11 0 14\n"
+  "12 4 9 12 8 11 13 12 14 7 8 12 4 5 14 12 13 15 4 4 15 0 3 3 0 1 2 7 14 5 6 8 9 10 11 11 0 15 13\n"
+  "12 4 9 12 13 14 11 12 15 8 13 12 5 6 15 12 11 0 5 5 0 1 4 4 1 2 3 8 15 6 7 13 8 9 14 14 9 10 11\n"
+  "12 4 9 12 13 10 14 12 15 8 13 12 5 6 15 12 14 0 5 5 0 1 4 4 1 2 3 8 15 6 7 13 8 9 10 10 11 0 14\n"
+  "12 4 9 12 13 14 11 12 7 8 13 12 5 6 7 12 11 0 5 5 0 1 4 4 1 2 3 13 8 15 14 8 9 10 15 14 15 10 11\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 5 6 7 12 15 0 5 5 0 1 4 4 1 2 3 13 8 11 14 8 9 10 11 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 6 7 13 12 4 5 6 12 14 15 4 4 15 0 3 3 0 1 2 13 7 10 11 7 8 9 10 11 0 15 14\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 5 6 7 12 15 0 5 5 0 1 4 4 1 2 3 13 8 9 14 14 9 10 11 14 11 0 15\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 5 6 7 12 15 0 5 5 0 1 4 4 1 2 3 13 8 9 14 14 9 10 15 15 10 11 0\n"
+  "12 4 9 12 8 9 13 12 6 7 8 12 14 3 6 12 13 15 14 14 15 0 1 3 14 1 2 6 3 4 5 9 0 15 13 9 10 11 0\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 15 0 1 2 14 15 2 3 8 13 14 3 8 3 4 7 7 4 5 6\n"
+  "12 4 9 12 10 11 13 12 6 7 10 12 2 3 6 12 13 14 2 2 14 15 1 6 3 4 5 10 7 8 9 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 3 4 7 12 15 0 3 3 0 1 2 7 4 5 6 13 8 11 14 8 9 10 11 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 6 7 13 12 2 3 6 12 14 15 2 2 15 0 1 6 3 4 5 13 7 10 11 7 8 9 10 11 0 15 14\n"
+  "12 4 9 12 13 14 15 12 7 8 13 12 3 4 7 12 15 0 3 3 0 1 2 7 4 5 6 13 8 9 14 14 9 10 11 14 11 0 15\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 4 5 8 12 13 14 4 4 14 15 3 8 5 6 7 11 15 14 13 11 0 3 15 3 0 1 2\n"
+  "12 4 9 12 10 11 13 12 4 7 10 12 2 3 4 12 13 14 2 2 14 15 1 7 4 5 6 10 7 8 9 11 15 14 13 11 0 1 15\n"
+  "12 4 9 12 13 10 11 12 5 14 13 12 3 4 5 12 11 0 3 3 0 1 2 14 5 6 15 13 14 15 10 10 15 6 9 6 7 8 9\n"
+  "12 4 9 12 13 14 15 12 5 8 13 12 3 4 5 12 15 0 3 3 0 1 2 8 5 6 7 13 8 9 14 14 9 10 11 14 11 0 15\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 3 4 13 12 11 0 3 3 0 1 2 8 13 4 14 4 5 15 14 15 5 6 7 8 14 15 7\n"
+  "12 4 9 12 9 10 11 12 14 13 9 12 3 4 14 12 11 0 3 3 0 1 2 13 14 4 15 4 5 8 15 8 5 6 7 9 13 15 8\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 9 4 5 8 9 8 5 6 7 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 2 3 14 12 13 15 2 2 15 0 1 9 14 3 8 3 4 7 8 7 4 5 6 11 0 15 13\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 2 3 14 12 13 15 2 2 15 0 1 9 14 3 8 3 4 5 8 8 5 6 7 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 7 4 5 6 7 14 7 8 9 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 2 3 14 12 13 15 2 2 15 0 1 9 14 3 6 3 4 5 6 9 6 7 8 11 0 15 13\n"
+  "12 4 9 12 9 10 13 12 14 8 9 12 3 4 14 12 13 0 3 3 0 1 2 8 14 4 15 4 5 6 15 8 15 6 7 10 11 0 13\n"
+  "12 4 9 12 10 11 13 12 14 7 10 12 2 3 14 12 13 15 2 2 15 0 1 7 14 3 6 3 4 5 6 10 7 8 9 11 0 15 13\n"
+  "12 4 9 12 9 10 13 12 15 14 9 12 3 4 15 12 13 0 3 3 0 1 2 14 15 4 7 4 5 6 7 9 14 7 8 10 11 0 13\n"
+  "12 4 9 12 13 8 9 12 15 14 13 12 3 4 15 12 9 0 3 3 0 1 2 14 15 4 7 4 5 6 7 13 14 7 8 9 10 11 0\n"
+  "12 4 9 12 9 13 14 12 15 8 9 12 3 4 15 12 14 0 3 3 0 1 2 8 15 4 7 4 5 6 7 9 10 11 13 13 11 0 14\n"
+  "12 4 9 12 8 11 13 12 14 7 8 12 2 3 14 12 13 15 2 2 15 0 1 7 14 3 6 3 4 5 6 8 9 10 11 11 0 15 13\n"
+  "12 4 9 12 13 10 14 12 15 8 13 12 3 4 15 12 14 0 3 3 0 1 2 8 15 4 7 4 5 6 7 13 8 9 10 10 11 0 14\n"
+  "12 4 9 12 8 9 13 12 14 7 8 12 2 3 14 12 13 15 2 2 15 0 1 7 14 3 6 3 4 5 6 9 0 15 13 9 10 11 0\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 5 14 5 8 9 5 6 7 8 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 2 3 14 12 13 15 2 2 15 0 1 9 14 3 4 9 4 7 8 4 5 6 7 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 5 14 5 6 9 9 6 7 8 13 14 9 10\n"
+  "12 4 9 12 10 11 13 12 14 9 10 12 2 3 14 12 13 15 2 2 15 0 1 9 14 3 4 9 4 5 8 8 5 6 7 11 0 15 13\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 5 14 5 6 7 13 14 7 10 10 7 8 9\n"
+  "12 4 9 12 13 8 9 12 15 14 13 12 3 4 15 12 9 0 3 3 0 1 2 14 15 4 5 14 5 6 7 13 14 7 8 9 10 11 0\n"
+  "12 4 9 12 8 9 13 12 14 7 8 12 2 3 14 12 13 15 2 2 15 0 1 7 14 3 4 7 4 5 6 9 0 15 13 9 10 11 0\n"
+  "12 4 9 12 13 10 11 12 15 14 13 12 3 4 15 12 11 0 3 3 0 1 2 14 15 4 5 13 14 5 10 10 5 6 9 9 6 7 8\n"
+  "12 4 9 12 6 7 13 12 14 5 6 12 2 3 14 12 13 15 2 2 15 0 1 5 14 3 4 7 0 15 13 7 8 11 0 11 8 9 10\n"
+  "12 4 9 12 13 10 11 12 5 6 13 12 3 4 5 12 11 0 3 3 0 1 2 13 6 14 10 6 7 15 14 15 7 8 9 10 14 15 9\n"
+  "12 4 9 12 13 14 15 12 5 6 13 12 3 4 5 12 15 0 3 3 0 1 2 13 6 11 14 6 7 10 11 10 7 8 9 14 11 0 15\n"
+  "12 4 9 12 13 11 14 12 4 5 13 12 2 3 4 12 14 15 2 2 15 0 1 13 5 10 11 5 6 9 10 9 6 7 8 11 0 15 14\n"
+  "12 4 9 12 13 11 14 12 4 5 13 12 2 3 4 12 14 15 2 2 15 0 1 13 5 10 11 5 6 7 10 10 7 8 9 11 0 15 14\n"
+  "12 4 9 12 13 14 15 12 5 6 13 12 3 4 5 12 15 0 3 3 0 1 2 13 6 9 14 6 7 8 9 14 9 10 11 14 11 0 15\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 11 15 14 13 11 0 5 15 5 0 3 4 0 1 2 3\n"
+  "12 4 9 12 10 11 13 12 8 9 10 12 6 7 8 12 13 14 6 6 14 15 5 11 15 14 13 11 0 5 15 5 0 1 4 4 1 2 3\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 14 0 1 15 14 15 1 4 5 1 2 3 4 6 14 15 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 14 15 0 7 0 1 6 7 6 1 4 5 1 2 3 4 8 13 14 7\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 5 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 14 15 0 7 0 1 6 7 6 1 2 5 5 2 3 4 8 13 14 7\n"
+  "12 4 9 12 9 10 11 12 7 8 9 12 13 6 7 12 11 0 13 6 13 0 14 0 1 15 14 15 1 2 3 15 3 4 5 6 14 15 5\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 15 14 13 12 11 0 15 14 15 0 7 0 1 6 7 6 1 2 3 6 3 4 5 8 13 14 7\n"
+  "12 4 9 12 9 10 11 12 13 8 9 12 14 6 13 12 11 0 14 6 14 0 5 0 1 15 5 15 1 2 3 5 15 3 4 8 13 6 7\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 6 14 0 5 0 1 15 5 15 1 2 3 5 15 3 4 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 7 8 13 12 14 6 7 12 11 0 14 6 14 0 15 0 1 4 15 4 1 2 3 6 15 4 5 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 15 6 14 12 11 0 15 6 15 0 5 0 1 4 5 4 1 2 3 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 14 8 13 12 15 6 14 12 11 0 15 6 15 0 5 0 1 2 5 5 2 3 4 8 14 6 7 13 8 9 10\n"
+  "12 4 9 12 13 10 11 12 5 6 13 12 14 4 5 12 11 0 14 4 14 0 15 0 1 2 15 4 15 2 3 13 6 9 10 6 7 8 9\n"
+  "12 4 9 12 13 10 11 12 14 6 13 12 15 4 14 12 11 0 15 4 15 0 3 0 1 2 3 6 14 4 5 13 6 7 10 10 7 8 9\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8\n"
+  "14 0 6 0 11 12 13 0 7 10 11 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9\n"
+  "14 0 6 0 11 12 13 0 7 8 11 0 1 6 7 6 1 2 5 5 2 3 4 11 8 9 10\n"
+  "14 0 6 0 9 12 13 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 12\n"
+  "14 0 6 0 9 10 13 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 11 12 13\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7\n"
+  "14 0 6 0 11 12 13 0 7 8 11 0 1 4 7 4 1 2 3 7 4 5 6 11 8 9 10\n"
+  "14 0 6 0 9 12 13 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 12\n"
+  "14 0 6 0 9 10 13 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 10 11 12 13\n"
+  "14 0 6 0 11 12 13 0 5 10 11 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8\n"
+  "14 0 6 0 11 12 13 0 5 8 11 0 1 4 5 4 1 2 3 8 5 6 7 11 8 9 10\n"
+  "14 0 6 0 11 12 13 0 5 6 11 0 1 4 5 4 1 2 3 11 6 7 10 10 7 8 9\n"
+  "14 0 6 0 7 12 13 0 5 6 7 0 1 4 5 4 1 2 3 7 8 11 12 11 8 9 10\n"
+  "14 0 6 0 7 12 13 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 12 12 9 10 11\n"
+  "14 0 6 0 11 12 13 0 9 10 11 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "14 0 6 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 5 8 9 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 5 6 9 14 3 4 5 14 13 0 3 3 0 1 2 9 6 7 8\n"
+  "14 1 7 14 11 12 13 14 7 10 11 14 5 6 7 14 3 4 5 14 13 0 3 3 0 1 2 10 7 8 9\n"
+  "14 1 7 14 9 12 13 14 7 8 9 14 5 6 7 14 3 4 5 14 13 0 3 3 0 1 2 9 10 11 12\n"
+  "14 1 7 14 9 10 11 14 7 8 9 14 5 6 7 14 3 4 5 14 11 0 3 3 0 1 2 11 12 13 0\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 5 6 9 14 13 0 5 5 0 3 4 0 1 2 3 9 6 7 8\n"
+  "14 1 7 14 11 12 13 14 7 10 11 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 10 7 8 9\n"
+  "14 1 7 14 11 12 13 14 7 8 11 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 11 8 9 10\n"
+  "14 1 7 14 9 12 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 9 10 11 12\n"
+  "14 1 7 14 9 10 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 10 11 12 13\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5\n"
+  "14 1 7 14 11 12 13 14 9 10 11 14 5 6 9 14 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8\n"
+  "14 1 7 14 11 12 13 14 7 10 11 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9\n"
+  "14 1 7 14 11 12 13 14 7 8 11 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 11 8 9 10\n"
+  "14 1 7 14 9 12 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 9 10 11 12\n"
+  "14 1 7 14 9 10 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 10 11 12 13\n"
+  "14 1 7 14 9 10 11 14 7 8 9 14 5 6 7 14 11 0 5 5 0 1 4 4 1 2 3 11 12 13 0\n"
+  "14 1 7 14 11 12 13 14 7 8 11 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 11 8 9 10\n"
+  "14 1 7 14 9 12 13 14 7 8 9 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 9 10 11 12\n"
+  "14 1 7 14 9 10 11 14 7 8 9 14 3 4 7 14 11 0 3 3 0 1 2 7 4 5 6 11 12 13 0\n"
+  "14 1 7 14 11 12 13 14 5 8 11 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7 11 8 9 10\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 6 7 1 2 14 6 14 2 3 4 6 14 4 5\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 5 14 5 2 3 4 7 14 5 6\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 6 7 1 2 5 6 5 2 3 4 9 14 7 8\n"
+  "14 1 7 0 11 12 13 0 14 10 11 0 1 8 14 8 1 6 7 1 2 5 6 5 2 3 4 10 14 8 9\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 6 7 1 2 3 6 6 3 4 5 9 14 7 8\n"
+  "14 1 7 0 11 12 13 0 14 10 11 0 1 8 14 8 1 6 7 1 2 3 6 6 3 4 5 10 14 8 9\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 4 14 1 2 3 4 14 4 5 6 8 14 6 7\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 4 7 1 2 3 4 7 4 5 6 9 14 7 8\n"
+  "14 1 7 0 11 12 13 0 14 10 11 0 1 8 14 8 1 4 7 1 2 3 4 7 4 5 6 10 14 8 9\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 3 14 7 14 3 6 3 4 5 6\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 3 14 7 14 3 4 7 4 5 6\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 5 1 2 3 14 5 14 3 4 8 5 6 7\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 6 9 6 1 14 5 1 2 3 14 5 14 3 4 9 6 7 8\n"
+  "14 1 7 0 11 12 13 0 7 10 11 0 1 6 7 6 1 14 5 1 2 3 14 5 14 3 4 10 7 8 9\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 4 5 1 2 3 4 9 14 5 8 5 6 7 8\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 14 6 2 3 4 14 6 14 4 5\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 5 6 2 3 4 5 8 14 6 7\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 2 7 7 2 5 6 2 3 4 5 9 14 7 8\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 14 14 3 4 5 7 14 5 6\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 3 6 6 3 4 5 8 14 6 7\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 14 9 14 1 2 7 7 2 3 6 6 3 4 5 9 14 7 8\n"
+  "14 1 7 0 11 12 13 0 14 10 11 0 1 8 14 8 1 2 7 7 2 3 6 6 3 4 5 10 14 8 9\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 10 11 12\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 3 4 8 14 4 7 4 5 6 7\n"
+  "14 1 7 0 9 12 13 0 7 8 9 0 1 6 7 6 1 2 14 14 2 3 4 6 14 4 5 9 10 11 12\n"
+  "14 1 7 0 9 10 13 0 7 8 9 0 1 6 7 6 1 2 14 14 2 3 4 6 14 4 5 10 11 12 13\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 7 8 11 0 1 14 7 14 1 2 5 5 2 3 4 7 14 5 6 11 8 9 10\n"
+  "14 1 7 0 9 12 13 0 7 8 9 0 1 14 7 14 1 2 5 5 2 3 4 7 14 5 6 9 10 11 12\n"
+  "14 1 7 0 9 10 13 0 7 8 9 0 1 14 7 14 1 2 5 5 2 3 4 7 14 5 6 10 11 12 13\n"
+  "14 1 7 0 11 12 13 0 7 14 11 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 9 11 14 9 10\n"
+  "14 1 7 0 11 12 13 0 14 10 11 0 1 6 14 6 1 2 5 5 2 3 4 10 14 6 7 10 7 8 9\n"
+  "14 1 7 0 11 12 13 0 14 8 11 0 1 6 14 6 1 2 5 5 2 3 4 8 14 6 7 11 8 9 10\n"
+  "14 1 7 0 9 12 13 0 14 8 9 0 1 6 14 6 1 2 5 5 2 3 4 8 14 6 7 9 10 11 12\n"
+  "14 1 7 0 9 10 13 0 14 8 9 0 1 6 14 6 1 2 5 5 2 3 4 8 14 6 7 10 11 12 13\n"
+  "14 1 7 0 9 14 13 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 14 14 11 12 13\n"
+  "14 1 7 0 14 12 13 0 7 8 14 0 1 6 7 6 1 2 5 5 2 3 4 14 8 9 12 12 9 10 11\n"
+  "14 1 7 0 14 10 13 0 7 8 14 0 1 6 7 6 1 2 5 5 2 3 4 14 8 9 10 10 11 12 13\n"
+  "14 1 7 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 3 8 3 14 7 3 4 5 14 7 14 5 6\n"
+  "14 1 7 0 14 12 13 0 9 10 14 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 14 10 11 12\n"
+  "14 1 7 0 9 14 13 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 14 14 11 12 13\n"
+  "14 1 7 0 14 10 13 0 7 8 14 0 1 4 7 4 1 2 3 7 4 5 6 14 8 9 10 10 11 12 13\n"
+  "14 1 7 0 9 12 13 0 7 8 9 0 1 14 7 14 1 2 3 7 14 3 6 3 4 5 6 9 10 11 12\n"
+  "14 1 7 0 9 10 13 0 7 8 9 0 1 14 7 14 1 2 3 7 14 3 6 3 4 5 6 10 11 12 13\n"
+  "14 1 7 0 7 12 13 0 5 6 7 0 1 14 5 14 1 2 3 5 14 3 4 7 8 11 12 11 8 9 10\n"
+  "14 1 7 0 7 12 13 0 5 6 7 0 1 14 5 14 1 2 3 5 14 3 4 7 8 9 12 12 9 10 11\n"
+  "14 1 7 0 11 12 13 0 5 14 11 0 1 4 5 4 1 2 3 14 5 6 9 9 6 7 8 11 14 9 10\n"
+  "14 1 7 0 14 12 13 0 5 10 14 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 14 10 11 12\n"
+  "14 1 7 0 11 12 13 0 5 14 11 0 1 4 5 4 1 2 3 14 5 6 7 11 14 7 10 7 8 9 10\n"
+  "14 1 7 0 14 12 13 0 5 6 14 0 1 4 5 4 1 2 3 14 6 7 12 12 7 8 11 11 8 9 10\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 3 4 15 1 2 3 13 0 1 15\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 3 4 7 14 13 15 3 3 15 1 2 13 0 1 15 7 4 5 6\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 8 9 14 3 4 5 14 13 15 3 3 15 1 2 13 0 1 15 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 6 9 14 3 4 5 14 13 15 3 3 15 1 2 13 0 1 15 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 4 4 1 2 3 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 7 8 9 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 2 15 2 3 4 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 4 7 14 13 0 15 15 0 1 2 4 15 2 3 7 4 5 6\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 8 9 14 15 4 5 14 13 0 15 15 0 1 2 4 15 2 3 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 6 9 14 15 4 5 14 13 0 15 15 0 1 2 4 15 2 3 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 10 11 14 5 6 7 14 15 4 5 14 13 0 15 15 0 1 2 4 15 2 3 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 7 8 9 14 3 4 7 14 15 0 3 3 0 1 2 7 4 5 6 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 8 15 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 5 8 9 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 7 4 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 5 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 6 9 14 3 4 15 14 13 0 3 3 0 1 2 6 15 4 5 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 10 11 14 15 6 7 14 3 4 15 14 13 0 3 3 0 1 2 6 15 4 5 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 15 6 7 14 3 4 15 14 13 0 3 3 0 1 2 6 15 4 5 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 15 6 7 14 3 4 15 14 13 0 3 3 0 1 2 6 15 4 5 9 10 11 12\n"
+  "14 2 8 14 9 10 11 14 7 8 9 14 15 6 7 14 3 4 15 14 11 0 3 3 0 1 2 6 15 4 5 11 12 13 0\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 5 6 9 14 3 4 5 14 15 0 3 3 0 1 2 9 6 7 8 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 7 10 15 14 5 6 7 14 3 4 5 14 13 0 3 3 0 1 2 10 7 8 9 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 10 15 6 9 6 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 10 15 6 7 10 7 8 9\n"
+  "14 2 8 14 9 10 11 14 15 8 9 14 5 6 15 14 3 4 5 14 11 0 3 3 0 1 2 8 15 6 7 11 12 13 0\n"
+  "14 2 8 14 9 12 15 14 7 8 9 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 9 10 11 12 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 3 4 5 14 13 0 3 3 0 1 2 15 8 11 12 8 9 10 11\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 3 4 5 14 13 0 3 3 0 1 2 15 8 9 12 12 9 10 11\n"
+  "14 2 8 14 9 10 15 14 7 8 9 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 10 13 0 15 10 11 12 13\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 5 0 1 4 5 4 1 2 3\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 5 0 1 2 5 5 2 3 4\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 3 0 1 2 3 6 3 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 3 4 5 13 0 3 15 3 0 1 2\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 1 4 5 13 0 1 15 4 1 2 3\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 5 6 0 1 15 5 15 1 2 3 5 15 3 4\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 4 15 4 1 2 3 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 6 0 1 4 5 4 1 2 3 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 15 2 3 4 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 6 0 1 2 5 5 2 3 4 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 6 0 1 2 3 6 3 4 5 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 6 15 2 5 2 3 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 6 15 2 3 6 3 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 6 9 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 10 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3 9 10 11 12\n"
+  "14 2 8 14 9 10 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 2 15 4 15 2 3 10 11 12 13\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 4 0 1 2 3 8 15 4 7 4 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 4 0 1 2 3 8 15 4 5 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5 9 10 11 12\n"
+  "14 2 8 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 4 0 1 2 3 6 15 4 5 10 11 12 13\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 7 15 11 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 7 8 9 11 15 9 10\n"
+  "14 2 8 14 15 12 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 10 7 8 9 15 10 11 12\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 10 15 6 9 6 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 10 15 6 7 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 8 11 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 8 15 6 7 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 8 15 6 7 9 10 11 12\n"
+  "14 2 8 14 9 10 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 8 15 6 7 10 11 12 13\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 10 15 10 11 12\n"
+  "14 2 8 14 9 15 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 9 10 11 15 15 11 12 13\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 11 12 8 9 10 11\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 12 12 9 10 11\n"
+  "14 2 8 14 15 10 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 10 10 11 12 13\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 13 0 5 15 5 0 3 4 0 1 2 3\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 13 0 5 15 5 0 1 4 4 1 2 3\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 5 6 9 14 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 5 6 7 14 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 5 6 7 14 13 15 5 5 15 3 4 13 0 3 15 3 0 1 2 9 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 3 4 9 14 13 15 3 3 15 1 2 13 0 1 15 9 4 5 8 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 3 4 7 14 13 15 3 3 15 1 2 13 0 1 15 7 4 5 6 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 3 4 7 14 13 15 3 3 15 1 2 13 0 1 15 7 4 5 6 9 10 11 12\n"
+  "14 2 8 14 11 12 13 14 5 10 11 14 3 4 5 14 13 15 3 3 15 1 2 13 0 1 15 10 5 6 9 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 5 8 11 14 3 4 5 14 13 15 3 3 15 1 2 13 0 1 15 8 5 6 7 11 8 9 10\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 15 5 1 2 3 15 5 15 3 4\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 15 15 2 3 4 6 15 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 6 6 1 2 5 5 2 3 4 8 15 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 15 8 9\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 1 4 4 1 2 3 6 15 4 5 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 1 4 4 1 2 3 6 15 4 5 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 4 4 1 2 3 6 15 4 5 9 10 11 12\n"
+  "14 2 8 14 9 10 11 14 7 8 9 14 15 6 7 14 11 0 15 15 0 1 4 4 1 2 3 6 15 4 5 11 12 13 0\n"
+  "14 2 8 14 15 12 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 9 10 11 14 5 6 9 14 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 10 11 12\n"
+  "14 2 8 14 11 12 15 14 7 10 11 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 12 13 0 15\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 10 15 6 9 6 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 10 15 6 7 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 8 11 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 8 15 6 7 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 8 15 6 7 9 10 11 12\n"
+  "14 2 8 14 9 10 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 8 15 6 7 10 11 12 13\n"
+  "14 2 8 14 9 10 11 14 15 8 9 14 5 6 15 14 11 0 5 5 0 1 4 4 1 2 3 8 15 6 7 11 12 13 0\n"
+  "14 2 8 14 11 12 15 14 7 8 11 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 11 8 9 10 12 13 0 15\n"
+  "14 2 8 14 9 12 15 14 7 8 9 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 9 10 11 12 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 11 12 8 9 10 11\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 9 12 12 9 10 11\n"
+  "14 2 8 14 15 10 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 9 10 10 11 12 13\n"
+  "14 2 8 14 15 10 11 14 7 8 15 14 5 6 7 14 11 0 5 5 0 1 4 4 1 2 3 15 8 9 10 11 12 13 0\n"
+  "14 2 8 14 9 10 15 14 7 8 9 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 10 11 12 15 15 12 13 0\n"
+  "14 2 8 14 9 10 15 14 7 8 9 14 5 6 7 14 15 0 5 5 0 1 4 4 1 2 3 10 13 0 15 10 11 12 13\n"
+  "14 2 8 14 9 10 11 14 7 8 9 14 15 4 7 14 11 0 15 15 0 1 2 4 15 2 3 7 4 5 6 11 12 13 0\n"
+  "14 2 8 14 11 12 15 14 7 8 11 14 3 4 7 14 15 0 3 3 0 1 2 7 4 5 6 11 8 9 10 12 13 0 15\n"
+  "14 2 8 14 9 12 15 14 7 8 9 14 3 4 7 14 15 0 3 3 0 1 2 7 4 5 6 9 10 11 12 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 15 8 11 12 8 9 10 11\n"
+  "14 2 8 14 15 12 13 14 7 8 15 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 15 8 9 12 12 9 10 11\n"
+  "14 2 8 14 15 10 11 14 7 8 15 14 3 4 7 14 11 0 3 3 0 1 2 7 4 5 6 15 8 9 10 11 12 13 0\n"
+  "14 2 8 14 9 10 15 14 7 8 9 14 3 4 7 14 15 0 3 3 0 1 2 7 4 5 6 10 13 0 15 10 11 12 13\n"
+  "14 2 8 14 11 12 15 14 5 8 11 14 3 4 5 14 15 0 3 3 0 1 2 8 5 6 7 11 8 9 10 12 13 0 15\n"
+  "14 2 8 14 15 12 13 14 5 8 15 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7 15 8 9 12 12 9 10 11\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 9 4 5 8 9 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 9 4 5 6 9 9 6 7 8\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 7 4 5 6 7 10 7 8 9\n"
+  "14 2 8 14 11 12 13 14 15 8 11 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 7 4 5 6 7 11 8 9 10\n"
+  "14 2 8 14 9 12 13 14 15 8 9 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 7 4 5 6 7 9 10 11 12\n"
+  "14 2 8 14 9 10 11 14 15 8 9 14 3 4 15 14 11 0 3 3 0 1 2 8 15 4 7 4 5 6 7 11 12 13 0\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 5 10 5 8 9 5 6 7 8\n"
+  "14 2 8 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 5 10 5 6 9 9 6 7 8\n"
+  "14 2 8 14 9 10 11 14 15 8 9 14 3 4 15 14 11 0 3 3 0 1 2 8 15 4 5 8 5 6 7 11 12 13 0\n"
+  "14 2 8 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 11 12 6 7 10 11 10 7 8 9\n"
+  "14 2 8 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 11 12 6 7 8 11 11 8 9 10\n"
+  "14 2 8 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 9 12 6 7 8 9 12 9 10 11\n"
+  "14 2 8 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 7 12 12 7 10 11 7 8 9 10\n"
+  "14 2 8 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 7 12 12 7 8 11 11 8 9 10\n"
+  "14 2 8 14 7 8 15 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 8 13 0 15 8 9 12 13 12 9 10 11\n"
+  "14 2 8 14 7 8 15 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 8 13 0 15 8 9 10 13 13 10 11 12\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 5 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "14 2 8 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 15 14 15 2 5 6 2 3 4 5 7 14 15 6\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 6 7 1 2 14 6 14 2 3 15 15 3 4 5 6 14 15 5\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 15 14 15 2 3 6 6 3 4 5 7 14 15 6\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 6 7 1 2 15 6 15 2 3 4 6 15 4 5 9 14 7 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 8 14 8 1 6 7 1 2 15 6 15 2 3 4 6 15 4 5 10 14 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 6 7 1 2 15 6 15 2 3 4 6 15 4 5 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 15 14 15 2 3 4 7 14 15 4 7 4 5 6\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 8 5 6 7\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 6 9 6 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 9 6 7 8\n"
+  "14 2 8 0 11 12 13 0 7 10 11 0 1 6 7 6 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 10 7 8 9\n"
+  "14 2 8 0 11 12 13 0 7 8 11 0 1 6 7 6 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 11 8 9 10\n"
+  "14 2 8 0 9 12 13 0 7 8 9 0 1 6 7 6 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 9 10 11 12\n"
+  "14 2 8 0 9 10 13 0 7 8 9 0 1 6 7 6 1 14 5 1 2 15 14 15 2 3 4 5 14 15 4 10 11 12 13\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 6 15 1 2 5 6 5 2 3 4 15 6 7 8 9 14 15 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 15 14 1 2 5 15 5 2 3 4 14 15 5 6 8 14 6 7\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 15 7 1 2 5 15 5 2 3 4 7 15 5 6 9 14 7 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 8 14 8 1 15 7 1 2 5 15 5 2 3 4 7 15 5 6 10 14 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 15 7 1 2 5 15 5 2 3 4 7 15 5 6 14 10 11 12\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 15 9 15 1 6 7 1 2 5 6 5 2 3 4 9 15 7 8 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 6 7 1 2 5 6 5 2 3 4 10 14 15 7 10 7 8 9\n"
+  "14 2 8 0 11 12 13 0 14 8 11 0 1 15 14 15 1 6 7 1 2 5 6 5 2 3 4 8 14 15 7 11 8 9 10\n"
+  "14 2 8 0 9 12 13 0 14 8 9 0 1 15 14 15 1 6 7 1 2 5 6 5 2 3 4 8 14 15 7 9 10 11 12\n"
+  "14 2 8 0 9 10 13 0 14 8 9 0 1 15 14 15 1 6 7 1 2 5 6 5 2 3 4 8 14 15 7 10 11 12 13\n"
+  "14 2 8 0 14 12 13 0 9 15 14 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 15 9 10 11 14 15 11 12\n"
+  "14 2 8 0 11 12 13 0 15 14 11 0 1 8 15 8 1 6 7 1 2 5 6 5 2 3 4 14 15 8 9 11 14 9 10\n"
+  "14 2 8 0 14 12 13 0 15 10 14 0 1 8 15 8 1 6 7 1 2 5 6 5 2 3 4 10 15 8 9 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 14 15 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 15 9 15 1 6 7 1 2 3 6 6 3 4 5 9 15 7 8 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 6 7 1 2 3 6 6 3 4 5 10 14 15 7 10 7 8 9\n"
+  "14 2 8 0 11 12 13 0 14 8 11 0 1 15 14 15 1 6 7 1 2 3 6 6 3 4 5 8 14 15 7 11 8 9 10\n"
+  "14 2 8 0 9 12 13 0 14 8 9 0 1 15 14 15 1 6 7 1 2 3 6 6 3 4 5 8 14 15 7 9 10 11 12\n"
+  "14 2 8 0 14 12 13 0 9 15 14 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 15 9 10 11 14 15 11 12\n"
+  "14 2 8 0 11 12 13 0 15 14 11 0 1 8 15 8 1 6 7 1 2 3 6 6 3 4 5 14 15 8 9 11 14 9 10\n"
+  "14 2 8 0 14 12 13 0 15 10 14 0 1 8 15 8 1 6 7 1 2 3 6 6 3 4 5 10 15 8 9 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 4 14 1 2 3 4 14 4 5 15 15 5 6 7 8 14 15 7\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 10 14 15 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 4 15 1 2 3 4 15 4 5 6 8 15 6 7 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 7 8 11 0 1 14 7 14 1 4 15 1 2 3 4 15 4 5 6 7 14 15 6 11 8 9 10\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 15 9 15 1 4 7 1 2 3 4 7 4 5 6 9 15 7 8 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 8 11 0 1 15 14 15 1 4 7 1 2 3 4 7 4 5 6 8 14 15 7 11 8 9 10\n"
+  "14 2 8 0 14 12 13 0 9 15 14 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 15 9 10 11 14 15 11 12\n"
+  "14 2 8 0 14 12 13 0 15 10 14 0 1 8 15 8 1 4 7 1 2 3 4 7 4 5 6 10 15 8 9 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 14 7 1 2 3 14 7 14 3 15 3 4 5 15 7 15 5 6\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 15 14 1 2 3 15 14 15 3 6 3 4 5 6 8 14 6 7\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 15 7 1 2 3 15 7 15 3 6 3 4 5 6 9 14 7 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 8 14 8 1 15 7 1 2 3 15 7 15 3 6 3 4 5 6 10 14 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 15 7 1 2 3 15 7 15 3 6 3 4 5 6 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 8 14 8 1 15 7 1 2 3 15 7 15 3 4 7 4 5 6 10 14 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 15 7 1 2 3 15 7 15 3 4 7 4 5 6 14 10 11 12\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 15 5 1 2 3 15 5 15 3 4 8 5 6 7 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 15 14 1 2 3 15 14 15 3 4 8 14 4 7 4 5 6 7\n"
+  "14 2 8 0 11 12 13 0 7 10 11 0 1 6 7 6 1 15 14 1 2 3 15 14 15 3 4 6 14 4 5 10 7 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 6 9 6 1 15 5 1 2 3 15 5 15 3 4 9 6 7 8 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 6 14 6 1 15 5 1 2 3 15 5 15 3 4 10 14 6 7 10 7 8 9\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 4 5 1 2 3 4 10 14 15 5 10 5 6 9 9 6 7 8\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 14 6 2 3 15 14 15 3 4 5 6 14 15 5\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 2 15 15 2 7 8 2 3 6 7 6 3 4 5 9 14 15 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 2 15 15 2 7 8 2 3 4 7 7 4 5 6 9 14 15 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 5 15 2 3 4 5 15 5 6 7 8 14 15 7\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 10 14 15 9\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 15 14 2 3 4 15 14 15 4 5 7 14 5 6\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 15 6 2 3 4 15 6 15 4 5 8 14 6 7\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 14 9 14 1 2 7 7 2 15 6 2 3 4 15 6 15 4 5 9 14 7 8\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 8 14 8 1 2 7 7 2 15 6 2 3 4 15 6 15 4 5 10 14 8 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 7 7 2 15 6 2 3 4 15 6 15 4 5 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 14 14 2 3 15 15 3 6 7 3 4 5 6 8 14 15 7\n"
+  "14 2 8 0 11 12 13 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 14 14 3 4 15 15 4 5 6 7 14 15 6\n"
+  "14 2 8 0 11 12 13 0 14 10 11 0 1 15 14 15 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 10 14 15 9\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 7 7 2 3 15 15 3 4 5 7 15 5 6 14 10 11 12\n"
+  "14 2 8 0 11 12 13 0 7 8 11 0 1 6 7 6 1 2 14 14 2 3 15 15 3 4 5 6 14 15 5 11 8 9 10\n"
+  "14 2 8 0 9 12 13 0 7 8 9 0 1 6 7 6 1 2 14 14 2 3 15 15 3 4 5 6 14 15 5 9 10 11 12\n"
+  "14 2 8 0 9 10 13 0 7 8 9 0 1 6 7 6 1 2 14 14 2 3 15 15 3 4 5 6 14 15 5 10 11 12 13\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 15 15 2 3 6 6 3 4 5 8 15 6 7 14 10 11 12\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 15 9 15 1 2 7 7 2 3 6 6 3 4 5 9 15 7 8 14 10 11 12\n"
+  "14 2 8 0 9 10 13 0 14 8 9 0 1 15 14 15 1 2 7 7 2 3 6 6 3 4 5 8 14 15 7 10 11 12 13\n"
+  "14 2 8 0 14 12 13 0 9 15 14 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 15 9 10 11 14 15 11 12\n"
+  "14 2 8 0 11 12 13 0 15 14 11 0 1 8 15 8 1 2 7 7 2 3 6 6 3 4 5 14 15 8 9 11 14 9 10\n"
+  "14 2 8 0 14 12 13 0 15 10 14 0 1 8 15 8 1 2 7 7 2 3 6 6 3 4 5 10 15 8 9 14 10 11 12\n"
+  "14 2 8 0 14 15 13 0 9 10 14 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 10 11 15 15 11 12 13\n"
+  "14 2 8 0 14 12 13 0 9 10 14 0 1 8 9 8 1 2 15 15 2 3 4 8 15 4 7 4 5 6 7 14 10 11 12\n"
+  "14 2 8 0 9 14 13 0 7 8 9 0 1 6 7 6 1 2 15 15 2 3 4 6 15 4 5 9 10 11 14 14 11 12 13\n"
+  "14 2 8 0 11 12 13 0 5 6 11 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 11 6 7 10 10 7 8 9\n"
+  "14 2 8 0 9 10 13 0 5 6 9 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 9 6 7 8 10 11 12 13\n"
+  "14 2 8 0 7 12 13 0 5 6 7 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 7 8 11 12 11 8 9 10\n"
+  "14 2 8 0 7 12 13 0 5 6 7 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 7 8 9 12 12 9 10 11\n"
+  "14 2 8 0 7 10 13 0 5 6 7 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 7 8 9 10 10 11 12 13\n"
+  "14 2 8 0 7 8 13 0 5 6 7 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 8 11 12 13 8 9 10 11\n"
+  "14 2 8 0 7 8 13 0 5 6 7 0 1 14 5 14 1 2 15 15 2 3 4 5 14 15 4 8 9 12 13 12 9 10 11\n"
+  "14 2 8 0 9 14 13 0 7 8 9 0 1 15 7 15 1 2 5 5 2 3 4 7 15 5 6 9 10 11 14 14 11 12 13\n"
+  "14 2 8 0 14 12 13 0 7 8 14 0 1 15 7 15 1 2 5 5 2 3 4 7 15 5 6 14 8 9 12 12 9 10 11\n"
+  "14 2 8 0 14 10 13 0 7 8 14 0 1 15 7 15 1 2 5 5 2 3 4 7 15 5 6 14 8 9 10 10 11 12 13\n"
+  "14 2 8 0 11 12 13 0 7 14 11 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 15 15 8 9 10 11 14 15 10\n"
+  "14 2 8 0 14 12 13 0 7 15 14 0 1 6 7 6 1 2 5 5 2 3 4 15 7 8 11 11 8 9 10 14 15 11 12\n"
+  "14 2 8 0 14 12 13 0 7 15 14 0 1 6 7 6 1 2 5 5 2 3 4 15 7 8 9 14 15 9 12 12 9 10 11\n"
+  "14 2 8 0 9 10 13 0 15 14 9 0 1 6 15 6 1 2 5 5 2 3 4 14 15 6 7 9 14 7 8 10 11 12 13\n"
+  "14 2 8 0 9 14 13 0 15 8 9 0 1 6 15 6 1 2 5 5 2 3 4 8 15 6 7 9 10 11 14 14 11 12 13\n"
+  "14 2 8 0 14 12 13 0 15 8 14 0 1 6 15 6 1 2 5 5 2 3 4 8 15 6 7 14 8 9 12 12 9 10 11\n"
+  "14 2 8 0 14 10 13 0 15 8 14 0 1 6 15 6 1 2 5 5 2 3 4 8 15 6 7 14 8 9 10 10 11 12 13\n"
+  "14 2 8 0 9 14 13 0 7 8 9 0 1 15 7 15 1 2 3 7 15 3 6 3 4 5 6 9 10 11 14 14 11 12 13\n"
+  "14 2 8 0 14 10 13 0 7 8 14 0 1 15 7 15 1 2 3 7 15 3 6 3 4 5 6 14 8 9 10 10 11 12 13\n"
+  "14 2 8 0 7 12 13 0 5 6 7 0 1 14 5 14 1 2 3 5 14 3 4 7 8 15 12 15 8 9 10 12 15 10 11\n"
+  "14 2 8 0 9 10 13 0 14 4 9 0 1 15 14 15 1 2 3 4 14 15 3 9 4 5 8 8 5 6 7 10 11 12 13\n"
+  "14 2 8 0 14 12 13 0 5 15 14 0 1 4 5 4 1 2 3 15 5 6 7 14 15 7 12 12 7 8 11 11 8 9 10\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 3 4 15 16 2 3 13 0 16 15 2 16 0 1\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 3 4 16 1 2 3 13 0 1 16 6 15 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 5 6 15 14 13 16 5 5 16 3 4 16 1 2 3 13 0 1 16 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 5 6 7 14 13 16 5 5 16 3 4 16 1 2 3 13 0 1 16 10 15 8 9\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 3 4 3 0 1 2 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 1 4 4 1 2 3 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 2 5 16 0 1 2 5 2 3 4 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 5 7 15 5 6\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 4 5 8 14 15 16 4 4 16 2 3 16 0 1 2 8 5 6 7 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 9 10 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 9 6 7 8 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 8 11 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 11 8 9 10 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 8 9 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 10 11 15 14 8 9 10 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 11 0 16 15 11 12 13 0\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 2 4 16 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 3 4 13 0 3 16 3 0 1 2 6 15 4 5\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 5 6 7 14 15 16 5 5 16 3 4 15 0 3 16 3 0 1 2 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 1 2 13 0 1 16 6 15 2 5 2 3 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 4 7 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 7 4 5 6\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 8 9 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 6 9 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 5 6 7 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 5 6 7 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 5 6 7 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 9 10 11 12\n"
+;
+
+const char* data_dqrgl_block2 = 
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 15 4 5 6 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 3 4 5 14 13 16 3 3 16 1 2 13 0 1 16 15 6 7 8 10 15 8 9\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 16 16 1 4 5 1 2 3 4 6 15 16 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 16 16 1 2 3 16 3 4 5 6 15 16 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 4 7 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 7 4 5 6\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 8 9 14 15 4 5 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 6 9 14 15 4 5 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 5 6 7 14 15 4 5 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 1 4 4 1 2 3 6 16 4 5 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 4 4 1 2 3 6 16 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 0 16 16 0 1 4 4 1 2 3 6 16 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 16 6 7 14 15 0 16 16 0 1 4 4 1 2 3 6 16 4 5 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 15 4 5 6 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 16 4 7 14 13 0 16 16 0 1 2 4 16 2 3 7 4 5 6 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 16 4 7 14 13 0 16 16 0 1 2 4 16 2 3 7 4 5 6 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 16 4 7 14 15 0 16 16 0 1 2 4 16 2 3 7 4 5 6 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 8 15 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 8 5 6 7 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 5 8 9 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 8 5 6 7 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 5 8 9 14 16 4 5 14 15 0 16 16 0 1 2 4 16 2 3 8 5 6 7 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 8 15 4 5 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 6 15 4 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 6 15 4 5 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 6 15 4 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 2 4 16 2 3 6 15 4 5 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 15 6 7 8 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 5 6 9 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 7 10 15 14 5 6 7 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 10 7 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 10 15 6 9 6 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 16 0 1 2 16 16 2 3 4 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 16 4 5 13 0 16 15 16 0 1 2 4 16 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 3 4 16 13 0 3 15 3 0 1 2 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 3 4 5 13 0 3 16 3 0 1 2 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 3 4 5 13 0 3 16 3 0 1 2 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 16 3 4 5 13 0 3 16 3 0 1 2 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 5 6 16 3 4 5 15 0 3 16 3 0 1 2 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 1 16 5 13 0 1 15 16 1 2 3 5 16 3 4\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 1 4 16 13 0 1 15 4 1 2 3 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 1 4 5 13 0 1 16 4 1 2 3 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 1 4 5 13 0 1 16 4 1 2 3 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 16 1 4 5 13 0 1 16 4 1 2 3 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 5 6 16 1 4 5 15 0 1 16 4 1 2 3 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 16 4 5 13 0 16 15 4 16 0 3 0 1 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 16 4 5 13 0 16 15 4 16 0 1 4 1 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 3 4 16 1 2 3 13 0 1 16 8 15 4 7 4 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 4 5 1 2 3 4 6 15 16 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 5 6 0 1 15 5 15 1 2 16 16 2 3 4 5 15 16 4\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 5 5 2 3 4 6 15 16 5\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 5 6 5 0 1 4 4 1 2 3 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 3 16 3 4 5 6 15 16 5\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 5 6 5 0 1 2 5 2 3 4 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 3 6 3 0 1 2 6 3 4 5 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 3 15 16 3 4 6 15 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 6 0 1 16 5 16 1 2 3 5 16 3 4 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 5 6 0 1 16 5 16 1 2 3 5 16 3 4 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 16 5 16 1 2 3 5 16 3 4 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 3 6 15 16 3 6 3 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 6 9 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 3 4 15 16 3 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 3 4 15 16 3 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 3 4 15 16 3 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 3 4 15 16 3 9 10 11 12\n"
+  "14 3 9 14 9 10 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 3 4 15 16 3 10 11 12 13\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 16 0 1 4 5 4 1 2 3 16 5 6 7 8 15 16 7\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 4 7 16 0 3 4 3 0 1 2 7 4 5 6 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 6 0 1 4 16 4 1 2 3 6 16 4 5 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 4 16 4 1 2 3 6 16 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 4 16 4 1 2 3 6 16 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 6 0 1 4 5 4 1 2 3 15 16 6 7 9 15 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 5 6 0 1 4 5 4 1 2 3 8 16 6 7 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 5 6 0 1 4 5 4 1 2 3 8 16 6 7 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 16 0 3 4 3 0 1 2 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 16 0 3 4 3 0 1 2 11 8 9 10 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 4 5 16 0 3 4 3 0 1 2 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 3 4 3 0 1 2 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 1 6 6 1 4 5 1 2 3 4 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 15 2 3 16 16 3 4 5 6 15 16 5\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 1 6 6 1 2 5 5 2 3 4 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 6 0 1 2 5 5 2 3 4 15 16 6 7 9 15 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 5 6 0 1 2 5 5 2 3 4 8 16 6 7 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 5 6 0 1 2 5 5 2 3 4 8 16 6 7 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 16 0 1 4 4 1 2 3 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 16 0 1 4 4 1 2 3 11 8 9 10 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 1 4 4 1 2 3 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 10 11 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 1 4 4 1 2 3 11 0 16 15 11 12 13 0\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 7 7 4 5 6 8 15 16 7\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 2 7 16 0 1 2 7 2 3 6 6 3 4 5 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 16 5 6 7 8 15 16 7\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 2 7 16 0 1 2 7 2 3 4 7 4 5 6 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 8 15 16 5 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5 9 10 11 12\n"
+  "14 3 9 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 6 15 16 5 10 11 12 13\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 3 6 0 1 2 3 6 3 4 5 15 16 6 7 9 15 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 3 6 0 1 2 3 6 3 4 5 8 16 6 7 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 6 0 1 2 3 6 3 4 5 8 16 6 7 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 2 5 16 0 1 2 5 2 3 4 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 2 5 16 0 1 2 5 2 3 4 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 10 11 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 2 5 16 0 1 2 5 2 3 4 11 0 16 15 11 12 13 0\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 6 15 2 16 2 3 4 16 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 6 0 1 2 16 6 16 2 5 2 3 4 5 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 5 2 3 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 5 2 3 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 3 6 3 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 3 6 3 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 8 15 4 5 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5 9 10 11 12\n"
+  "14 3 9 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 2 16 4 16 2 3 6 15 4 5 10 11 12 13\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 7 15 11 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 7 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 10 7 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 10 15 6 9 6 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 8 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 8 15 6 7 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 8 15 6 7 9 10 11 12\n"
+  "14 3 9 14 9 10 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 8 15 6 7 10 11 12 13\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 9 10 15 10 11 12\n"
+  "14 3 9 14 9 15 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 9 10 11 15 15 11 12 13\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 9 10 10 11 12 13\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 7 4 5 6 7 9 15 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 3 4 0 1 2 3 8 16 4 7 4 5 6 7 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 4 0 1 2 3 8 16 4 7 4 5 6 7 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 4 0 1 2 3 8 16 4 5 8 5 6 7 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 6 9 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 5 9 15 5 8 5 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 5 7 15 5 6 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 5 7 15 5 6 9 10 11 12\n"
+  "14 3 9 14 9 10 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 5 7 15 5 6 10 11 12 13\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 8 11 14 16 6 15 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 8 15 6 7 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 15 8 9 14 16 6 15 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 8 15 6 7 9 10 11 12\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 8 9 10 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 11 12 13 14 7 15 11 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 7 8 16 16 8 9 10 11 15 16 10\n"
+  "14 3 9 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 3 9 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 9 15 16 9 10 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 3 9 14 15 16 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 10 7 8 9 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 10 15 6 16 6 7 8 16 10 16 8 9\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 9 6 7 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 10 16 6 9 6 7 8 9 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 15 8 9 10 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 7 11 15 7 10 7 8 9 10\n"
+  "14 3 9 14 9 10 13 14 16 15 9 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 7 9 15 7 8 10 11 12 13\n"
+  "14 3 9 14 9 15 13 14 16 8 9 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 9 10 11 15 15 11 12 13\n"
+  "14 3 9 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 15 8 9 10 10 11 12 13\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 16 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 10 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 9 15 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 9 10 16 15 16 10 11 12 15 16 12 13\n"
+  "14 3 9 14 8 13 15 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 0 1 2 8 9 12 13 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 16 12 8 9 10 16 12 16 10 11\n"
+  "14 3 9 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 11 16 8 9 10 11 16 11 12 13\n"
+  "14 3 9 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 16 16 9 12 13 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 13 0 5 15 5 0 16 4 0 1 2 16 4 16 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 3 4 0 1 2 3 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 13 0 5 16 5 0 3 4 0 1 2 3 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 13 0 5 16 5 0 3 4 0 1 2 3 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 13 0 5 16 5 0 3 4 0 1 2 3 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 1 4 4 1 2 3 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 13 0 5 16 5 0 1 4 4 1 2 3 8 15 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 13 0 5 16 5 0 1 4 4 1 2 3 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 13 0 5 16 5 0 1 4 4 1 2 3 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 5 6 15 0 5 16 5 0 1 4 4 1 2 3 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 6 9 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 2 4 16 2 3 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 2 4 16 2 3 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 3 4 13 0 3 16 3 0 1 2 8 15 4 7 4 5 6 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 13 16 15 15 16 3 4 13 0 3 16 3 0 1 2 6 15 4 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 13 16 15 15 16 3 4 13 0 3 16 3 0 1 2 6 15 4 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 13 16 15 15 16 3 4 13 0 3 16 3 0 1 2 6 15 4 5 9 10 11 12\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 5 6 9 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 5 6 9 14 15 16 5 5 16 3 4 15 0 3 16 3 0 1 2 9 6 7 8 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 7 15 11 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 15 7 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 7 10 15 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 10 7 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 7 10 11 14 5 6 7 14 15 16 5 5 16 3 4 15 0 3 16 3 0 1 2 10 7 8 9 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 10 15 6 9 6 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 8 11 14 5 6 15 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 8 15 6 7 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 15 8 9 14 5 6 15 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 8 15 6 7 9 10 11 12\n"
+  "14 3 9 14 9 12 15 14 7 8 9 14 5 6 7 14 15 16 5 5 16 3 4 15 0 3 16 3 0 1 2 9 10 11 12 12 13 0 15\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 5 0 1 4 5 4 1 2 3\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 5 0 1 2 5 5 2 3 4\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 3 0 1 2 3 6 3 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 5 6 9 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 3 0 1 2 3 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 3 0 1 2 3 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 3 0 1 2 3 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 3 0 1 2 3 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 3 4 9 14 13 15 3 3 15 16 2 13 0 16 15 2 16 0 1 9 4 5 8 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 3 4 7 14 13 15 3 3 15 16 2 13 0 16 15 2 16 0 1 7 4 5 6 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 3 4 7 14 13 15 3 3 15 16 2 13 0 16 15 2 16 0 1 7 4 5 6 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 5 10 11 14 3 4 5 14 13 15 3 3 15 16 2 13 0 16 15 2 16 0 1 10 5 6 9 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 5 8 11 14 3 4 5 14 13 15 3 3 15 16 2 13 0 16 15 2 16 0 1 8 5 6 7 11 8 9 10\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 1 2 13 0 1 16 8 15 2 7 2 3 6 7 6 3 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 13 16 15 15 16 1 2 13 0 1 16 6 15 2 5 2 3 4 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 13 16 15 15 16 1 2 13 0 1 16 6 15 2 5 2 3 4 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 13 16 15 15 16 1 2 13 0 1 16 6 15 2 5 2 3 4 5 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 4 9 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 9 4 5 8 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 4 7 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 7 4 5 6 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 4 7 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 7 4 5 6 9 10 11 12\n"
+  "14 3 9 14 11 12 13 14 5 6 11 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 11 6 7 10 10 7 8 9\n"
+  "14 3 9 14 7 12 13 14 5 6 7 14 15 4 5 14 13 16 15 15 16 1 2 13 0 1 16 4 15 2 3 7 8 11 12 11 8 9 10\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 3 4 9 14 13 16 3 3 16 1 2 13 0 1 16 9 4 5 8 8 5 6 7 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 3 4 7 14 13 16 3 3 16 1 2 13 0 1 16 7 4 5 6 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 3 4 7 14 13 16 3 3 16 1 2 13 0 1 16 7 4 5 6 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 12 13 14 5 10 15 14 3 4 5 14 13 16 3 3 16 1 2 13 0 1 16 10 5 6 9 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 15 12 13 14 5 8 15 14 3 4 5 14 13 16 3 3 16 1 2 13 0 1 16 8 5 6 7 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 9 4 5 8 9 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 9 4 5 6 9 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 7 4 5 6 7 10 7 8 9\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 5 10 5 8 9 5 6 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 5 10 5 6 9 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 15 5 1 2 16 15 16 2 3 4 5 15 16 4\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 6 7 1 2 5 6 5 2 3 4 8 15 16 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 6 7 1 2 3 6 6 3 4 5 8 15 16 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 4 7 1 2 3 4 7 4 5 6 8 15 16 7\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 16 15 1 2 3 16 15 16 3 4 6 15 4 5\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 16 5 1 2 3 16 5 16 3 4 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 16 5 1 2 3 16 5 16 3 4 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 16 5 1 2 3 16 5 16 3 4 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 1 16 16 1 4 5 1 2 3 4 6 15 16 5 9 6 7 8\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 1 16 16 1 4 5 1 2 3 4 6 15 16 5 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 16 16 1 4 5 1 2 3 4 6 15 16 5 9 10 11 12\n"
+  "14 3 9 14 9 10 11 14 7 8 9 14 15 6 7 14 11 0 15 15 0 1 16 16 1 4 5 1 2 3 4 6 15 16 5 11 12 13 0\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 7 8 16 14 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 16 8 9 12 13 0 15\n"
+  "14 3 9 14 11 15 16 14 9 10 11 14 7 8 9 14 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 13 15 15 13 0 16\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 9 10 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 12 12 13 0 16\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 15 15 2 3 16 16 3 4 5 6 15 16 5\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 2 5 5 2 3 4 16 5 6 7 8 15 16 7\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 4 4 1 2 3 7 4 5 6 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 2 16 16 2 3 4 6 16 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 16 16 2 3 4 6 16 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 2 16 16 2 3 4 6 16 4 5 12 13 0 15\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 1 6 6 1 2 5 5 2 3 4 8 16 6 7 15 10 11 12\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 4 4 1 2 3 11 8 9 10 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 7 8 16 14 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 16 8 9 12 13 0 15\n"
+  "14 3 9 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 4 4 1 2 3 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 11 15 16 14 9 10 11 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 13 15 15 13 0 16\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 4 4 1 2 3 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 9 10 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 12 12 13 0 16\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 2 7 2 5 6 2 3 4 5 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 2 7 2 3 6 6 3 4 5 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 0 5 5 0 1 2 5 2 3 4 10 7 8 9 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 9 10 11 15 16 11 12\n"
+  "14 3 9 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 2 5 2 3 4 11 8 9 10 13 0 16 15\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 16 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 7 8 16 14 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 16 8 9 12 13 0 15\n"
+  "14 3 9 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 2 5 2 3 4 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 11 15 16 14 9 10 11 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 13 15 15 13 0 16\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 2 5 2 3 4 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 9 10 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 11 12 12 13 0 16\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 4 9 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 9 4 5 8 8 5 6 7\n"
+  "14 3 9 14 11 12 13 14 7 8 11 14 15 4 7 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 7 4 5 6 11 8 9 10\n"
+  "14 3 9 14 9 12 13 14 7 8 9 14 15 4 7 14 13 0 15 15 0 1 16 16 1 2 3 4 15 16 3 7 4 5 6 9 10 11 12\n"
+  "14 3 9 14 9 10 11 14 7 8 9 14 15 4 7 14 11 0 15 15 0 1 16 16 1 2 3 4 15 16 3 7 4 5 6 11 12 13 0\n"
+  "14 3 9 14 12 13 15 14 10 11 12 14 4 5 10 14 15 16 4 4 16 0 3 3 0 1 2 10 5 6 9 9 6 7 8 13 0 16 15\n"
+  "14 3 9 14 12 13 15 14 8 9 12 14 4 5 8 14 15 16 4 4 16 0 3 3 0 1 2 8 5 6 7 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 11 15 16 14 9 10 11 14 5 6 9 14 16 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 13 15 15 13 0 16\n"
+  "14 3 9 14 10 13 15 14 8 9 10 14 4 5 8 14 15 16 4 4 16 0 3 3 0 1 2 8 5 6 7 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 9 10 15 14 5 6 9 14 16 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 11 12 12 13 0 16\n"
+  "14 3 9 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 3 9 14 12 13 15 14 6 9 12 14 4 5 6 14 15 16 4 4 16 0 3 3 0 1 2 9 6 7 8 12 9 10 11 13 0 16 15\n"
+  "14 3 9 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 3 9 14 15 10 11 14 7 16 15 14 5 6 7 14 11 0 5 5 0 1 4 4 1 2 3 16 7 8 9 15 16 9 10 11 12 13 0\n"
+  "14 3 9 14 11 15 16 14 7 10 11 14 5 6 7 14 16 0 5 5 0 1 4 4 1 2 3 10 7 8 9 11 12 13 15 15 13 0 16\n"
+  "14 3 9 14 10 13 15 14 6 9 10 14 4 5 6 14 15 16 4 4 16 0 3 3 0 1 2 9 6 7 8 10 11 12 13 13 0 16 15\n"
+  "14 3 9 14 15 16 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 10 11 16 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 7 10 15 14 5 6 7 14 16 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 10 11 12 12 13 0 16\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 10 15 6 16 6 7 8 16 10 16 8 9\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 15 16 6 9 6 7 8 9 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 10 16 6 9 6 7 8 9 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 10 16 6 9 6 7 8 9 12 13 0 15\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 10 16 6 7 10 7 8 9 12 13 0 15\n"
+  "14 3 9 14 11 12 15 14 16 8 11 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 8 16 6 7 11 8 9 10 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 15 16 6 7 11 15 7 10 7 8 9 10\n"
+  "14 3 9 14 9 10 13 14 16 15 9 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 15 16 6 7 9 15 7 8 10 11 12 13\n"
+  "14 3 9 14 9 10 11 14 16 15 9 14 5 6 16 14 11 0 5 5 0 1 4 4 1 2 3 15 16 6 7 9 15 7 8 11 12 13 0\n"
+  "14 3 9 14 9 12 15 14 16 8 9 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 8 16 6 7 9 10 11 12 12 13 0 15\n"
+  "14 3 9 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 8 16 6 7 15 8 9 10 10 11 12 13\n"
+  "14 3 9 14 15 10 11 14 16 8 15 14 5 6 16 14 11 0 5 5 0 1 4 4 1 2 3 8 16 6 7 15 8 9 10 11 12 13 0\n"
+  "14 3 9 14 9 10 15 14 16 8 9 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 8 16 6 7 10 13 0 15 10 11 12 13\n"
+  "14 3 9 14 9 15 16 14 7 8 9 14 5 6 7 14 16 0 5 5 0 1 4 4 1 2 3 9 10 13 15 13 10 11 12 15 13 0 16\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 16 12 8 9 10 16 12 16 10 11\n"
+  "14 3 9 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 11 16 8 9 10 11 16 11 12 13\n"
+  "14 3 9 14 15 12 16 14 7 8 15 14 5 6 7 14 16 0 5 5 0 1 4 4 1 2 3 15 8 11 12 8 9 10 11 12 13 0 16\n"
+  "14 3 9 14 10 11 15 14 6 7 10 14 2 3 6 14 15 16 2 2 16 0 1 6 3 4 5 10 7 8 9 11 0 16 15 11 12 13 0\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 15 8 16 12 8 9 10 16 12 16 10 11\n"
+  "14 3 9 14 15 12 16 14 7 8 15 14 3 4 7 14 16 0 3 3 0 1 2 7 4 5 6 15 8 11 12 8 9 10 11 12 13 0 16\n"
+  "14 3 9 14 8 9 15 14 6 7 8 14 2 3 6 14 15 16 2 2 16 0 1 6 3 4 5 9 0 16 15 9 10 13 0 13 10 11 12\n"
+  "14 3 9 14 10 11 15 14 4 7 10 14 2 3 4 14 15 16 2 2 16 0 1 7 4 5 6 10 7 8 9 11 0 16 15 11 12 13 0\n"
+  "14 3 9 14 15 12 13 14 5 16 15 14 3 4 5 14 13 0 3 3 0 1 2 16 5 6 7 15 16 7 12 12 7 8 11 11 8 9 10\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 9 4 5 16 9 16 5 6 7 9 16 7 8\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 16 4 5 8 16 8 5 6 7 10 16 8 9\n"
+  "14 3 9 14 11 12 13 14 16 15 11 14 3 4 16 14 13 0 3 3 0 1 2 15 16 4 9 4 5 8 9 8 5 6 7 11 15 9 10\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 3 4 16 14 13 0 3 3 0 1 2 10 16 4 9 4 5 8 9 8 5 6 7 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 9 4 5 8 9 8 5 6 7 12 13 0 15\n"
+  "14 3 9 14 15 12 13 14 16 10 15 14 3 4 16 14 13 0 3 3 0 1 2 10 16 4 9 4 5 6 9 9 6 7 8 15 10 11 12\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 9 4 5 6 9 9 6 7 8 12 13 0 15\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 7 4 5 6 7 10 7 8 9 12 13 0 15\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 16 4 5 6 16 10 16 6 9 6 7 8 9\n"
+  "14 3 9 14 9 12 13 14 15 8 9 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 16 4 5 6 16 8 16 6 7 9 10 11 12\n"
+  "14 3 9 14 9 10 11 14 15 8 9 14 3 4 15 14 11 0 3 3 0 1 2 8 15 4 16 4 5 6 16 8 16 6 7 11 12 13 0\n"
+  "14 3 9 14 11 12 15 14 16 8 11 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 7 4 5 6 7 11 8 9 10 12 13 0 15\n"
+  "14 3 9 14 9 12 15 14 16 8 9 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 7 4 5 6 7 9 10 11 12 12 13 0 15\n"
+  "14 3 9 14 15 12 13 14 16 8 15 14 3 4 16 14 13 0 3 3 0 1 2 8 16 4 7 4 5 6 7 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 10 11 14 16 8 15 14 3 4 16 14 11 0 3 3 0 1 2 8 16 4 7 4 5 6 7 15 8 9 10 11 12 13 0\n"
+  "14 3 9 14 9 10 15 14 16 8 9 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 7 4 5 6 7 10 13 0 15 10 11 12 13\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 5 10 5 16 9 5 6 7 16 9 16 7 8\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 5 10 5 8 9 5 6 7 8 12 13 0 15\n"
+  "14 3 9 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 5 10 5 6 9 9 6 7 8 12 13 0 15\n"
+  "14 3 9 14 9 10 15 14 16 8 9 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 5 8 5 6 7 10 13 0 15 10 11 12 13\n"
+  "14 3 9 14 15 12 13 14 16 6 15 14 3 4 16 14 13 0 3 3 0 1 2 6 16 4 5 15 6 7 12 12 7 10 11 7 8 9 10\n"
+  "14 3 9 14 15 12 13 14 16 6 15 14 3 4 16 14 13 0 3 3 0 1 2 6 16 4 5 15 6 7 12 12 7 8 11 11 8 9 10\n"
+  "14 3 9 14 7 8 15 14 16 6 7 14 3 4 16 14 15 0 3 3 0 1 2 6 16 4 5 8 13 0 15 8 9 12 13 12 9 10 11\n"
+  "14 3 9 14 7 8 15 14 16 6 7 14 3 4 16 14 15 0 3 3 0 1 2 6 16 4 5 8 13 0 15 8 9 10 13 13 10 11 12\n"
+  "14 3 9 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 11 12 6 7 16 11 16 7 8 9 11 16 9 10\n"
+  "14 3 9 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 16 12 6 7 10 16 10 7 8 9 12 16 10 11\n"
+  "14 3 9 14 15 12 16 14 5 6 15 14 3 4 5 14 16 0 3 3 0 1 2 15 6 11 12 6 7 10 11 10 7 8 9 12 13 0 16\n"
+  "14 3 9 14 15 12 16 14 5 6 15 14 3 4 5 14 16 0 3 3 0 1 2 15 6 11 12 6 7 8 11 11 8 9 10 12 13 0 16\n"
+  "14 3 9 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 16 12 6 7 8 16 12 16 8 11 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 7 12 12 7 16 11 7 8 9 16 11 16 9 10\n"
+  "14 3 9 14 7 8 15 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 8 13 0 15 8 9 16 13 16 9 10 11 13 16 11 12\n"
+  "14 3 9 14 6 7 15 14 4 5 6 14 2 3 4 14 15 16 2 2 16 0 1 7 0 16 15 7 8 13 0 13 8 11 12 8 9 10 11\n"
+  "14 3 9 14 6 7 15 14 4 5 6 14 2 3 4 14 15 16 2 2 16 0 1 7 0 16 15 7 8 13 0 13 8 9 12 12 9 10 11\n"
+  "14 3 9 14 6 7 15 14 4 5 6 14 2 3 4 14 15 16 2 2 16 0 1 7 0 16 15 7 8 13 0 13 8 9 10 13 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 16 5 1 2 3 16 5 16 3 4\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 4 5 1 2 3 4 7 16 5 6\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 6 16 6 1 4 5 1 2 3 4 8 16 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 6 7 6 1 4 5 1 2 3 4 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 5 5 2 3 4 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 3 6 3 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 4 7 4 1 2 3 7 4 5 6 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 4 7 4 1 2 3 7 4 5 6 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 2 3 7 16 3 6 3 4 5 6\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 5 0 1 4 5 4 1 2 3 8 5 6 7 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 6 16 0 5 0 1 4 5 4 1 2 3 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 4 5 4 1 2 3 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 4 5 4 1 2 3 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 2 7 7 2 16 6 2 3 4 16 6 16 4 5\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 2 7 7 2 5 6 2 3 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 2 7 7 2 5 6 2 3 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 2 7 7 2 3 6 6 3 4 5 10 15 8 9\n"
+  "14 3 9 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 2 7 7 2 3 6 6 3 4 5 15 10 11 12\n"
+  "14 3 9 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 6 16 0 5 0 1 2 5 5 2 3 4 10 15 6 7 10 7 8 9\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 2 5 5 2 3 4 15 8 11 12 8 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 2 5 5 2 3 4 15 8 9 12 12 9 10 11\n"
+  "14 3 9 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 3 0 1 2 3 6 3 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 2 3 4 17 0 1 2 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 2 3 4 15 17 2 16 2 17 0 1 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 16 4 15 1 17 16 13 0 1 15 17 1 2 3 4 16 17 3\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 16 4 15 17 2 16 13 0 17 15 2 17 0 1 4 16 2 3\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 5 6 15 14 13 16 5 5 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 5 6 7 14 13 16 5 5 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 5 6 7 14 13 16 5 5 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 5 6 7 14 15 16 5 5 16 3 4 16 17 2 3 15 0 17 16 2 17 0 1 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 17 16 16 17 3 4 17 1 2 3 13 0 1 17 15 16 4 5 7 15 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 17 16 16 17 3 4 17 1 2 3 13 0 1 17 6 16 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 17 16 16 17 3 4 17 1 2 3 13 0 1 17 6 16 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 17 16 16 17 3 4 17 1 2 3 13 0 1 17 6 16 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 6 7 14 15 17 16 16 17 3 4 17 1 2 3 15 0 1 17 6 16 4 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 16 15 14 5 6 7 14 13 17 5 5 17 3 4 17 1 2 3 13 0 1 17 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 5 6 16 14 13 17 5 5 17 3 4 17 1 2 3 13 0 1 17 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 5 6 16 14 13 17 5 5 17 3 4 17 1 2 3 13 0 1 17 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 5 6 16 14 13 17 5 5 17 3 4 17 1 2 3 13 0 1 17 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 17 4 17 0 1 2 4 17 2 3 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 3 17 3 0 1 2 5 17 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 6 7 16 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 6 7 8 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 6 7 8 14 16 17 6 6 17 4 5 17 0 3 4 3 0 1 2 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 17 3 4 3 17 1 2 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 17 2 3 4 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 17 1 2 3 5 17 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 6 7 16 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 6 7 8 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 17 1 4 4 1 2 3 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 15 16 17 5 7 15 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 5 17 0 1 2 5 2 3 4 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 6 7 16 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 6 7 8 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 6 7 8 14 16 17 6 6 17 2 5 17 0 1 2 5 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 2 5 16 17 1 2 5 2 3 4 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 6 7 8 14 16 17 6 6 17 2 5 17 0 1 2 5 2 3 4 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 4 1 2 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 2 5 2 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 4 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 4 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 8 9 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 15 16 4 5 7 15 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 4 5 8 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 8 5 6 7 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 9 6 7 8 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 10 7 8 9 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 11 8 9 10 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 12 9 10 11 13 0 16 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 11 0 16 15 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 3 17 0 1 2 16 3 4 5 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 17 4 5 6 17 7 15 17 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 7 4 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 3 17 0 1 2 7 16 3 6 3 4 5 6 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 16 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 5 8 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 8 5 6 7 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 15 16 5 6 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 17 16 7 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 7 16 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 17 16 7 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 7 16 5 6 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 16 15 14 17 6 7 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 17 6 7 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 17 6 7 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 17 6 7 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 17 6 7 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 17 6 7 8 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 16 5 6 7 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 4 5 8 14 15 17 4 4 17 2 3 17 0 1 2 8 5 6 7 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 4 5 8 14 16 17 4 4 17 2 3 17 0 1 2 8 5 6 7 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 4 5 8 14 15 16 4 4 16 2 3 16 17 1 2 8 5 6 7 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 4 5 8 14 16 17 4 4 17 2 3 17 0 1 2 8 5 6 7 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 16 10 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 16 6 7 8 10 16 8 9 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 9 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 9 6 7 8 11 16 9 10 13 0 17 15\n"
+;
+
+const char* data_dqrgl_block3 = 
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 9 10 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 9 6 7 8 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 4 5 6 14 15 16 4 4 16 2 3 16 17 1 2 9 6 7 8 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 6 9 10 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 9 6 7 8 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 9 16 5 8 5 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 9 16 5 6 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 7 10 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 7 16 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 8 10 15 8 9\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 16 7 8 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 7 16 5 6 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 16 7 8 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 7 16 5 6 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 7 16 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 16 7 8 14 4 5 16 14 15 17 4 4 17 2 3 17 0 1 2 7 16 5 6 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 17 8 9 10 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 16 7 8 9 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 4 5 6 14 15 16 4 4 16 2 3 16 17 1 2 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 6 7 10 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 10 7 8 9 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 16 12 14 6 7 8 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 16 8 9 10 12 16 10 11 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 8 11 15 14 6 7 8 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 11 8 9 10 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 17 1 2 11 8 9 10 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 8 11 12 14 6 7 8 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 11 8 9 10 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 9 16 7 8 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 6 7 16 14 4 5 6 14 15 17 4 4 17 2 3 17 0 1 2 9 16 7 8 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 15 9 10 11 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 16 17 1 2 12 9 10 11 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 10 15 16 14 8 9 10 14 6 7 8 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 10 11 12 15 15 0 17 16 15 12 13 0\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 17 3 4 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 15 17 4 16 4 17 2 3 17 0 1 2 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 17 17 1 2 3 4 16 17 3\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 15 17 4 16 4 17 0 3 3 0 1 2 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 16 15 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 15 16 4 5 7 15 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 6 7 14 15 17 16 16 17 3 4 15 0 3 17 3 0 1 2 6 16 4 5 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 4 5 8 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 8 5 6 7 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 8 9 14 5 6 16 14 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 8 16 6 7 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 5 6 7 14 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 5 6 7 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 5 6 7 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 16 15 15 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 4 7 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 7 4 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 8 9 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 5 6 7 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 5 6 7 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 9 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 15 4 5 6 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 3 4 5 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 15 6 7 8 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 6 7 14 15 17 16 16 17 1 2 15 0 1 17 6 16 2 5 2 3 4 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 4 5 6 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 4 7 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 7 4 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 4 7 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 7 4 5 6 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 4 7 14 15 17 16 16 17 1 2 15 0 1 17 4 16 2 3 7 4 5 6 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 16 15 5 14 13 17 16 16 17 1 2 13 0 1 17 15 16 2 3 5 15 3 4 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 16 15 5 14 13 17 16 16 17 1 2 13 0 1 17 15 16 2 3 5 15 3 4 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 15 9 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 5 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 8 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 8 5 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 8 9 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 5 8 9 14 16 4 5 14 15 17 16 16 17 1 2 15 0 1 17 4 16 2 3 8 5 6 7 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 8 15 4 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 6 15 4 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 6 15 4 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 6 15 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 16 4 15 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 6 15 4 5 9 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 7 8 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 6 9 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 5 6 9 14 16 4 5 14 15 17 16 16 17 1 2 15 0 1 17 4 16 2 3 9 6 7 8 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 5 6 7 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 10 15 6 9 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 15 4 5 17 17 5 6 7 8 15 17 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 16 4 5 6 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 16 4 5 6 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 6 16 4 5 15 6 7 8 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 3 4 5 14 13 16 3 3 16 1 2 13 0 1 16 15 6 7 17 17 7 8 9 10 15 17 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 16 16 1 17 5 1 2 3 17 5 17 3 4 6 15 16 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 6 7 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 6 7 14 15 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 6 6 1 4 5 1 2 3 4 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 15 0 1 16 16 1 2 17 17 2 3 4 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 6 6 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 16 17 0 5 5 0 1 4 4 1 2 3 7 16 5 6 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 5 17 1 4 4 1 2 3 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 6 15 14 13 0 16 16 0 1 17 17 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 17 17 1 2 3 17 3 4 5 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 5 17 1 2 5 2 3 4 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 15 4 5 6 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 4 7 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 7 4 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 16 4 7 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 7 4 5 6 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 16 4 7 14 15 0 16 16 0 1 17 17 1 2 3 4 16 17 3 7 4 5 6 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 8 15 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 8 5 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 8 9 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 5 8 9 14 16 4 5 14 15 0 16 16 0 1 17 17 1 2 3 4 16 17 3 8 5 6 7 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 8 15 4 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 6 15 4 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 6 15 4 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 6 15 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 16 4 15 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 6 15 4 5 9 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 15 6 7 8 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 6 9 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 5 6 7 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 10 15 6 9 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 5 8 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 8 5 6 7 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 10 11 12 13\n"
+  "14 4 10 14 9 10 11 14 7 8 9 14 15 6 7 14 17 16 15 14 11 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 16 15 14 17 6 7 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 16 5 6 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 17 6 16 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 17 6 16 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 17 6 16 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 8 9 14 17 6 16 14 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 8 16 6 7 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 16 5 6 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 17 6 7 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 16 5 6 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 17 6 7 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 17 6 7 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 17 6 7 14 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 16 5 6 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 17 6 7 14 16 0 17 17 0 1 4 4 1 2 3 6 17 4 5 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 16 5 6 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 17 6 7 14 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 17 6 7 14 16 0 17 17 0 1 4 4 1 2 3 6 17 4 5 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 17 6 7 8 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 16 5 6 7 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 4 5 8 14 15 16 4 4 16 17 3 3 17 1 2 8 5 6 7 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 9 10 14 4 5 6 14 15 16 4 4 16 17 3 3 17 1 2 9 6 7 8 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 15 16 7 8 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 17 8 9 10 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 4 5 6 14 15 17 4 4 17 0 3 3 0 1 2 16 7 8 9 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 4 5 6 14 15 16 4 4 16 17 3 3 17 1 2 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 3 17 1 2 11 8 9 10 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 10 11 12 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 4 5 6 14 16 17 4 4 17 0 3 3 0 1 2 15 9 10 11 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 3 17 1 2 12 9 10 11 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 10 11 16 16 11 12 17 17 12 13 0\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 5 17 3 4 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 16 4 5 6 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 16 4 5 6 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 17 4 7 14 13 0 17 17 0 1 2 4 17 2 3 7 4 5 6 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 17 4 7 14 13 0 17 17 0 1 2 4 17 2 3 7 4 5 6 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 17 4 7 14 13 0 17 17 0 1 2 4 17 2 3 7 4 5 6 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 17 4 7 14 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 17 4 7 14 16 0 17 17 0 1 2 4 17 2 3 7 4 5 6 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 17 4 7 14 13 0 17 17 0 1 2 4 17 2 3 7 4 5 6 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 17 4 7 14 16 0 17 17 0 1 2 4 17 2 3 7 4 5 6 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 8 15 16 3 8 3 4 7 7 4 5 6\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 6 15 16 3 6 3 4 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 6 15 16 3 6 3 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 6 15 16 3 6 3 4 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 6 15 16 3 6 3 4 5 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 4 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 7 4 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 4 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 7 4 5 6 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 4 7 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 7 4 5 6 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 5 8 11 14 15 4 5 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 8 5 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 5 8 9 14 15 4 5 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 8 5 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 5 8 9 14 15 4 5 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 8 5 6 7 10 11 12 13\n"
+  "14 4 10 14 9 10 13 14 5 6 9 14 15 4 5 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 9 6 7 8 10 11 12 13\n"
+  "14 4 10 14 7 10 13 14 5 6 7 14 15 4 5 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 4 15 16 3 7 8 9 10 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 16 15 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 16 5 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 5 16 15 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 16 5 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 5 16 15 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 16 5 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 5 16 15 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 16 5 6 7 8 15 16 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 5 8 9 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 8 5 6 7 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 8 16 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 8 5 6 7 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 5 8 16 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 8 5 6 7 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 5 8 16 14 17 4 5 14 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 5 8 9 14 17 4 5 14 16 0 17 17 0 1 2 4 17 2 3 8 5 6 7 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 5 8 9 14 17 4 5 14 16 0 17 17 0 1 2 4 17 2 3 8 5 6 7 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 8 16 4 5 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 8 9 14 17 4 16 14 15 0 17 17 0 1 2 4 17 2 3 8 16 4 5 8 5 6 7 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 15 6 7 8 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 6 9 14 17 4 16 14 15 0 17 17 0 1 2 4 17 2 3 6 16 4 5 9 6 7 8 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 16 15 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 15 16 4 5 7 15 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 16 15 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 15 16 4 5 7 15 5 6 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 16 6 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 7 10 11 14 16 6 7 14 17 4 16 14 15 0 17 17 0 1 2 4 17 2 3 6 16 4 5 10 7 8 9 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 16 6 15 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 16 6 15 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 17 4 16 14 13 0 17 17 0 1 2 4 17 2 3 6 16 4 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 16 4 5 14 13 0 16 16 0 1 2 4 16 2 3 10 15 6 17 6 7 8 17 10 17 8 9\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 5 6 16 14 17 4 5 14 13 0 17 17 0 1 2 4 17 2 3 10 16 6 9 6 7 8 9 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 3 4 7 14 17 0 3 3 0 1 2 7 4 5 6 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 8 17 14 3 4 5 14 13 0 3 3 0 1 2 8 5 6 7 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 7 4 5 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 8 9 5 6 7 8 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 6 9 9 6 7 8 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 11 14 15 8 9 14 17 16 15 14 3 4 17 14 11 0 3 3 0 1 2 16 17 4 5 16 5 6 7 8 15 16 7 11 12 13 0\n"
+  "14 4 10 14 15 16 17 14 7 10 15 14 5 6 7 14 3 4 5 14 17 0 3 3 0 1 2 10 7 8 9 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 3 4 5 14 13 0 3 3 0 1 2 16 17 6 9 6 7 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 3 4 5 14 13 0 3 3 0 1 2 16 17 6 7 16 7 10 11 7 8 9 10 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 3 4 5 14 13 0 3 3 0 1 2 16 17 6 7 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 3 4 5 14 13 0 3 3 0 1 2 16 17 6 7 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 3 4 5 14 17 0 3 3 0 1 2 15 8 11 16 8 9 10 11 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 3 4 5 14 17 0 3 3 0 1 2 15 8 9 16 16 9 12 13 9 10 11 12 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 3 4 5 14 17 0 3 3 0 1 2 15 8 9 16 16 9 10 13 13 10 11 12 16 13 0 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 7 16 17 6 17 0 5 6 5 0 1 4 4 1 2 3 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 16 0 1 17 16 17 1 2 3 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 7 16 17 6 17 0 5 6 5 0 1 2 5 2 3 4 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 7 16 17 6 17 0 3 6 3 0 1 2 6 3 4 5 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 15 6 7 14 13 0 15 6 15 0 16 0 1 17 16 17 1 2 3 16 17 3 4 6 16 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 16 17 0 5 0 1 4 5 4 1 2 3 16 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 16 7 8 14 15 17 16 7 16 17 4 17 0 3 4 3 0 1 2 7 4 5 6 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 17 0 1 2 17 17 2 3 4 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 17 16 15 14 13 0 17 16 17 0 3 0 1 2 3 16 3 4 5 8 15 16 5 8 5 6 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 4 5 6 15 17 4 16 4 17 2 3 17 0 1 2 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 16 4 5 13 0 16 15 16 0 1 17 17 1 2 3 4 16 17 3\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 4 5 6 15 17 4 16 4 17 0 3 3 0 1 2 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 17 16 5 13 0 17 15 17 0 1 2 16 17 2 3 5 16 3 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 17 4 16 13 0 17 15 17 0 1 2 4 17 2 3 6 16 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 17 4 5 13 0 17 16 17 0 1 2 4 17 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 17 0 1 2 4 17 2 3 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 17 0 1 2 4 17 2 3 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 5 6 16 17 4 5 15 0 17 16 17 0 1 2 4 17 2 3 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 2 3 6 15 17 2 16 2 17 0 1 6 3 4 5 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 17 16 3 4 5 13 0 3 16 3 0 1 2 17 5 6 7 8 15 17 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 17 6 16 3 4 17 13 0 3 16 3 0 1 2 6 17 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 16 3 4 17 13 0 3 16 3 0 1 2 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 16 3 4 17 13 0 3 16 3 0 1 2 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 17 6 16 3 4 17 15 0 3 16 3 0 1 2 6 17 4 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 17 16 16 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 8 9 14 15 17 16 16 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 8 16 6 7 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 17 7 7 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 16 2 3 4 15 17 2 16 2 17 0 1 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 17 7 7 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 17 7 7 17 5 6 17 3 4 5 13 0 3 17 3 0 1 2 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 4 5 16 2 3 4 15 17 2 16 2 17 0 1 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 16 17 7 7 17 5 6 17 3 4 5 16 0 3 17 3 0 1 2 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 16 17 7 7 17 5 6 17 3 4 5 16 0 3 17 3 0 1 2 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 2 3 4 15 17 2 16 2 17 0 1 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 1 16 5 13 0 1 15 16 1 2 17 17 2 3 4 5 16 17 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 1 17 16 13 0 1 15 17 1 2 5 5 2 3 4 6 16 17 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 1 17 16 13 0 1 15 17 1 2 3 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 1 17 5 13 0 1 16 17 1 2 3 5 17 3 4 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 1 17 5 13 0 1 16 17 1 2 3 5 17 3 4 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 1 17 16 13 0 1 15 17 1 2 3 6 16 17 3 6 3 4 5\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 16 4 15 1 17 16 13 0 1 15 17 1 2 3 4 16 17 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 5 6 7 14 13 15 5 5 15 16 4 15 1 17 16 13 0 1 15 17 1 2 3 4 16 17 3 11 8 9 10\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 17 6 16 1 4 17 13 0 1 16 4 1 2 3 6 17 4 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 16 1 4 17 13 0 1 16 4 1 2 3 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 16 1 4 17 13 0 1 16 4 1 2 3 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 17 6 16 1 4 17 15 0 1 16 4 1 2 3 6 17 4 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 5 6 17 1 4 5 13 0 1 17 4 1 2 3 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 5 6 17 1 4 5 13 0 1 17 4 1 2 3 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 16 8 9 14 15 17 16 16 17 5 6 17 1 4 5 15 0 1 17 4 1 2 3 8 16 6 7 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 17 7 7 17 5 6 17 1 4 5 13 0 1 17 4 1 2 3 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 15 17 7 7 17 5 6 17 1 4 5 15 0 1 17 4 1 2 3 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 16 17 7 7 17 5 6 17 1 4 5 16 0 1 17 4 1 2 3 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 15 16 4 5 13 0 16 15 4 16 0 17 0 1 2 17 4 17 2 3\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 15 17 4 16 13 0 17 15 4 17 0 3 0 1 2 3 6 16 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 17 4 5 13 0 17 16 4 17 0 3 0 1 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 4 17 0 3 0 1 2 3 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 4 17 0 3 0 1 2 3 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 16 17 4 5 13 0 17 16 4 17 0 1 4 1 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 4 17 0 1 4 1 2 3 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 16 17 4 5 13 0 17 16 4 17 0 1 4 1 2 3 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 16 7 7 16 5 6 16 17 4 5 15 0 17 16 4 17 0 1 4 1 2 3 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 8 15 4 7 4 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 3 4 16 17 2 3 13 0 17 16 2 17 0 1 8 15 4 5 8 5 6 7\n"
+  "14 4 10 14 9 10 15 14 7 8 9 14 5 6 7 14 15 16 5 5 16 3 4 16 17 2 3 15 0 17 16 2 17 0 1 10 13 0 15 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 3 4 16 1 2 3 13 0 1 16 8 15 4 17 4 5 6 17 8 17 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 5 6 0 1 15 5 15 1 17 16 1 2 3 17 16 17 3 4 5 15 16 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 17 5 1 2 3 17 5 17 3 4 6 15 16 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 4 17 1 2 3 4 6 15 16 17 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 6 0 1 17 16 17 1 4 5 1 2 3 4 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 17 16 17 1 4 5 1 2 3 4 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 17 16 17 1 4 5 1 2 3 4 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 6 17 6 1 4 5 1 2 3 4 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 17 17 2 3 4 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 5 6 5 0 1 17 17 1 2 3 5 17 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 17 17 2 3 4 15 16 17 4 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 6 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 5 6 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 17 6 17 0 1 4 4 1 2 3 6 17 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 17 17 2 3 4 6 15 16 17 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 6 0 1 17 16 17 1 2 5 5 2 3 4 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 5 5 2 3 4 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 5 5 2 3 4 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 6 17 6 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 5 17 5 0 1 4 4 1 2 3 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 6 7 17 0 5 6 5 0 1 4 4 1 2 3 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 6 7 17 0 5 6 5 0 1 4 4 1 2 3 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 6 7 17 0 5 6 5 0 1 4 4 1 2 3 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 17 5 6 5 17 1 4 4 1 2 3 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 6 0 1 17 16 17 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 17 3 4 5 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 17 3 4 5 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 6 7 17 0 5 6 5 0 1 2 5 2 3 4 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 6 7 17 0 5 6 5 0 1 2 5 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 6 7 17 0 5 6 5 0 1 2 5 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 17 5 6 5 17 1 2 5 2 3 4 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 17 4 5 6 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 3 17 3 0 1 2 17 3 4 5 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 6 7 17 0 3 6 3 0 1 2 6 3 4 5 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 6 7 17 0 3 6 3 0 1 2 6 3 4 5 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 6 7 17 0 3 6 3 0 1 2 6 3 4 5 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 17 3 6 3 17 1 2 6 3 4 5 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 3 15 16 3 17 3 4 5 17 6 15 17 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 17 6 17 0 1 2 6 17 2 5 2 3 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 16 17 3 4 6 16 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 16 17 3 4 6 16 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 16 0 17 4 17 0 1 2 4 17 2 3 10 7 8 9 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 16 0 17 4 17 0 1 2 4 17 2 3 11 8 9 10 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 4 5 16 0 17 4 17 0 1 2 4 17 2 3 12 9 10 11 13 0 16 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 16 0 17 4 17 0 1 2 4 17 2 3 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 6 16 17 3 6 3 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 17 16 17 1 2 3 6 16 17 3 6 3 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 16 15 16 1 2 17 6 15 16 17 6 17 2 5 2 3 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 17 4 15 16 17 4 17 2 3 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 17 4 15 16 17 4 17 2 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 17 4 15 16 17 4 17 2 3 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 17 4 15 16 17 4 17 2 3 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 15 4 0 1 16 15 16 1 2 17 4 15 16 17 4 17 2 3 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 8 15 4 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 6 15 4 5 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 10 15 6 9 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 5 6 15 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 8 15 6 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 9 15 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 9 10 11 15 15 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3 15 8 9 10 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 5 16 0 1 4 5 4 1 2 3 16 5 6 17 8 15 16 17 8 17 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 17 0 1 4 5 4 1 2 3 17 5 6 7 15 16 17 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 5 17 0 1 4 5 4 1 2 3 17 5 6 7 8 16 17 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 5 17 0 1 4 5 4 1 2 3 17 5 6 7 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 4 7 17 0 3 4 3 0 1 2 7 4 5 6 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 4 7 17 0 3 4 3 0 1 2 7 4 5 6 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 4 7 17 0 3 4 3 0 1 2 7 4 5 6 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 4 7 16 17 3 4 3 17 1 2 7 4 5 6 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 16 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 3 17 3 0 1 2 7 17 3 4 7 4 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 4 17 4 1 2 3 16 17 4 5 6 15 16 5 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 16 0 3 17 3 0 1 2 5 17 3 4 10 7 8 9 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 17 5 16 0 3 17 3 0 1 2 5 17 3 4 11 8 9 10 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 17 5 16 0 3 17 3 0 1 2 5 17 3 4 12 9 10 11 13 0 16 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 3 17 3 0 1 2 5 17 3 4 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 6 0 1 4 5 4 1 2 3 15 16 6 17 6 7 8 17 9 15 17 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 9 6 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 9 16 5 8 5 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 9 16 5 6 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 7 10 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 7 16 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 15 16 7 8 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 17 16 9 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 9 16 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 16 17 6 7 8 15 16 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 17 8 9 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 16 7 8 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 7 16 5 6 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 17 8 16 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 16 7 8 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 7 16 5 6 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 0 3 4 3 0 1 2 7 16 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 17 8 9 14 13 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 8 9 10 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 16 7 8 9 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 16 17 6 6 17 4 5 17 0 3 4 3 0 1 2 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 16 17 3 4 3 17 1 2 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 13 16 14 8 11 15 14 6 7 8 14 16 17 6 6 17 4 5 17 0 3 4 3 0 1 2 11 8 9 10 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 16 17 3 4 3 17 1 2 11 8 9 10 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 4 5 17 0 3 4 3 0 1 2 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 4 5 17 0 3 4 3 0 1 2 15 9 10 11 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 4 5 17 0 3 4 3 0 1 2 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 17 5 6 5 17 3 4 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 15 2 17 16 2 3 4 17 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 17 2 5 6 2 3 4 5 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 17 1 4 5 1 2 3 4 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 6 7 17 0 1 6 6 1 4 5 1 2 3 4 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 6 7 17 0 1 6 6 1 4 5 1 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 6 7 17 0 1 6 6 1 4 5 1 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 16 17 8 8 17 6 7 17 0 1 6 6 1 4 5 1 2 3 4 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 15 2 3 16 16 3 4 17 6 15 16 17 6 17 4 5\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 17 1 2 5 5 2 3 4 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 6 7 17 0 1 6 6 1 2 5 5 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 6 7 17 0 1 6 6 1 2 5 5 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 16 17 1 6 6 1 2 5 5 2 3 4 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 16 17 8 8 17 6 7 17 0 1 6 6 1 2 5 5 2 3 4 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 17 2 3 4 16 17 4 7 4 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 17 1 2 3 7 17 3 6 3 4 5 6 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 17 1 2 3 7 17 3 4 7 4 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 17 2 3 4 16 17 4 5 8 15 16 5 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 5 6 0 1 2 5 5 2 3 4 15 16 6 17 6 7 8 17 9 15 17 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 9 6 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 9 16 5 8 5 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 9 16 5 6 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 7 10 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 7 16 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 17 16 9 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 9 16 7 8 15 10 11 12\n"
+;
+
+const char* data_dqrgl_block4 = 
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 17 8 9 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 16 7 8 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 7 16 5 6 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 17 8 16 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 7 16 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 17 8 9 14 13 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 4 5 17 0 1 4 4 1 2 3 7 16 5 6 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 16 17 1 4 4 1 2 3 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 6 7 10 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 10 7 8 9 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 13 16 14 8 11 15 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 11 8 9 10 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 15 16 14 8 11 12 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 11 8 9 10 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 4 5 17 0 1 4 4 1 2 3 9 16 7 8 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 10 15 16 14 8 9 10 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 10 11 12 15 15 0 17 16 15 12 13 0\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 4 5 17 0 1 4 4 1 2 3 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 17 4 5 6 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 2 7 16 0 1 2 7 2 3 17 17 3 4 5 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 7 7 4 5 6 8 16 17 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 7 7 4 5 6 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 2 7 17 0 1 2 7 2 3 6 6 3 4 5 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 2 7 17 0 1 2 7 2 3 6 6 3 4 5 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 2 7 17 0 1 2 7 2 3 6 6 3 4 5 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 2 7 16 17 1 2 7 2 3 6 6 3 4 5 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 16 17 8 8 17 2 7 17 0 1 2 7 2 3 6 6 3 4 5 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 5 16 5 6 17 8 15 16 17 8 17 6 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 17 5 6 7 15 16 17 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 17 5 6 7 8 16 17 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 17 5 6 7 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 2 7 17 0 1 2 7 2 3 4 7 4 5 6 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 2 7 17 0 1 2 7 2 3 4 7 4 5 6 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 2 7 16 17 1 2 7 2 3 4 7 4 5 6 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 8 9 10 14 16 17 8 8 17 2 7 17 0 1 2 7 2 3 4 7 4 5 6 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 8 16 17 5 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 3 16 0 1 2 3 16 3 4 17 6 15 16 17 6 17 4 5 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 16 15 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 15 16 17 5 7 15 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 15 16 17 5 7 15 5 6 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 15 16 17 5 7 15 5 6 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 16 6 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 16 6 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 16 6 15 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 8 15 6 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 9 15 13 14 7 8 9 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 9 10 11 15 15 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5 15 8 9 10 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 16 7 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 2 5 17 0 1 2 5 2 3 4 9 16 5 6 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 7 10 14 15 17 16 16 17 2 5 17 0 1 2 5 2 3 4 7 16 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 17 16 9 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 9 16 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 16 17 6 7 8 15 16 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 17 8 9 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 17 8 16 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 5 17 0 1 2 5 2 3 4 7 16 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 17 8 9 14 13 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 5 17 0 1 2 5 2 3 4 7 16 5 6 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 16 17 6 6 17 2 5 17 0 1 2 5 2 3 4 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 15 16 14 10 11 12 14 6 7 10 14 16 17 6 6 17 2 5 17 0 1 2 5 2 3 4 10 7 8 9 15 0 17 16 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 2 5 17 0 1 2 5 2 3 4 9 16 7 8 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 2 5 17 0 1 2 5 2 3 4 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 4 7 16 17 3 4 7 4 5 6 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 15 6 0 1 2 15 6 15 2 16 2 3 17 16 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 7 2 3 6 7 6 3 4 5 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 7 17 1 6 1 2 5 6 5 2 3 4 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 7 17 1 6 1 2 3 6 6 3 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 16 5 6 7 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 7 17 1 4 1 2 3 4 7 4 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 17 2 3 4 17 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 16 6 0 1 2 16 6 16 2 17 2 3 4 17 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 5 2 3 4 5 6 15 16 5 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 16 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 4 1 2 3 4 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 4 1 2 3 4 11 0 16 15 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 6 7 3 4 5 6 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 7 17 1 2 7 2 5 6 2 3 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 7 7 4 5 6 8 15 16 7\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 16 0 1 17 7 17 1 2 7 2 3 6 6 3 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 5 6 15 16 5 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 5 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 5 6 15 16 5 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 6 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 16 3 4 5 6 15 16 5 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 2 5 2 3 4 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 17 5 16 0 1 17 5 17 1 2 5 2 3 4 11 0 16 15 11 12 13 0\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 4 9 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 9 4 5 8 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 4 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 4 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 4 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 4 5 6 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 15 4 7 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 4 5 6 10 11 12 13\n"
+  "14 4 10 14 9 12 13 14 5 8 9 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 8 5 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 5 8 9 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 8 5 6 7 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 5 6 11 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 11 6 9 10 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 5 6 11 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 11 6 7 10 10 7 8 9\n"
+  "14 4 10 14 9 10 13 14 5 6 9 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 9 6 7 8 10 11 12 13\n"
+  "14 4 10 14 7 12 13 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 8 11 12 11 8 9 10\n"
+  "14 4 10 14 7 12 13 14 5 6 7 14 15 4 5 14 13 0 15 15 0 17 16 0 1 2 17 16 17 2 3 4 15 16 3 7 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 8 16 4 5 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 15 16 4 5 9 15 5 8 5 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 16 15 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 15 16 4 5 7 15 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 15 16 4 5 7 15 5 6 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 15 16 4 5 7 15 5 6 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 16 6 15 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 16 6 15 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 16 6 15 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 8 15 6 7 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 9 15 13 14 7 8 9 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 9 10 11 15 15 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 6 7 8 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 7 8 17 17 8 9 10 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 16 7 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 16 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 16 13 14 7 10 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 7 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 10 15 6 17 6 7 8 17 10 17 8 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 16 6 9 6 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 16 6 9 6 7 8 9 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 8 16 6 7 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 16 6 7 11 15 7 10 7 8 9 10\n"
+  "14 4 10 14 9 10 13 14 16 15 9 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 16 6 7 9 15 7 8 10 11 12 13\n"
+  "14 4 10 14 9 15 13 14 16 8 9 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 8 16 6 7 9 10 11 15 15 11 12 13\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 8 16 6 7 15 8 9 10 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 9 17 17 9 10 11 15 17 11 12\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 8 9 10 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 9 15 13 14 7 8 9 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 9 10 17 15 17 10 11 12 15 17 12 13\n"
+  "14 4 10 14 8 13 15 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 8 9 12 13 12 9 10 11 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 16 4 0 1 2 16 4 16 2 3 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 8 11 16 8 9 10 11 16 11 12 13\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 17 4 0 1 2 17 4 17 2 3 15 8 9 16 16 9 12 13 9 10 11 12\n"
+  "14 4 10 14 8 9 15 14 6 7 8 14 4 5 6 14 15 16 4 4 16 17 3 16 0 1 17 3 17 1 2 9 0 16 15 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 17 4 5 8 17 8 5 6 7 9 15 17 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 9 4 5 8 9 8 5 6 7 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 17 4 5 6 17 7 15 17 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 17 4 5 6 17 7 15 17 6 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 7 8 9 14 16 15 7 14 13 0 16 16 0 3 4 0 1 2 3 15 16 4 17 4 5 6 17 7 15 17 6 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 17 16 9 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 7 4 5 6 7 9 16 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 7 4 5 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 7 4 5 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 7 4 5 6 7 8 15 16 7 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 17 8 16 14 13 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 3 17 0 1 2 7 16 3 6 3 4 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 10 11 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 2 3 17 0 1 2 7 16 3 6 3 4 5 6 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 17 16 9 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 9 16 5 8 5 6 7 8 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 17 16 7 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 7 16 5 6 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 17 16 7 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 7 16 5 6 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 10 15 16 5 10 5 6 9 9 6 7 8\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7 10 11 12 13\n"
+  "14 4 10 14 11 12 13 14 15 6 11 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 11 6 7 10 10 7 8 9\n"
+  "14 4 10 14 7 12 13 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 7 8 11 12 11 8 9 10\n"
+  "14 4 10 14 7 12 13 14 15 6 7 14 17 16 15 14 13 0 17 17 0 3 4 0 1 2 3 16 17 4 5 6 15 16 5 7 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 8 16 6 7 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 15 16 6 7 11 15 7 10 7 8 9 10\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 17 6 16 14 13 0 17 17 0 3 4 0 1 2 3 6 17 4 5 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 8 9 17 17 9 10 11 15 17 11 12\n"
+  "14 4 10 14 8 13 15 14 6 7 8 14 16 5 6 14 15 17 16 16 17 2 3 17 0 1 2 5 16 3 4 8 9 12 13 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 3 4 0 1 2 3 6 16 4 5 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 17 17 8 9 10 15 16 17 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 17 17 8 9 10 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 9 15 16 9 17 9 10 11 17 15 17 11 12\n"
+  "14 4 10 14 15 16 13 14 7 17 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 17 7 8 9 15 17 9 10 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 16 7 8 17 15 16 17 12 12 17 8 11 8 9 10 11\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 3 4 0 1 2 3 10 15 6 16 6 7 17 16 17 7 8 9 10 16 17 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 17 6 7 10 17 10 7 8 9 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 11 6 7 10 11 10 7 8 9 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 17 6 7 8 17 17 8 9 10 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 9 6 7 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 9 10 13 14 16 15 9 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 15 16 6 17 6 7 8 17 9 15 17 8 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 9 6 7 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 9 6 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 16 7 10 11 7 8 9 10 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 16 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 15 8 9 17 17 9 10 11 15 17 11 12\n"
+  "14 4 10 14 15 16 13 14 17 8 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 8 17 6 7 15 8 9 10 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 10 7 8 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 8 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 8 15 8 9 10 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 12 12 7 8 11 11 8 9 10\n"
+  "14 4 10 14 15 8 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 16 17 6 7 15 16 7 8 8 9 12 13 12 9 10 11\n"
+  "14 4 10 14 9 15 13 14 16 8 9 14 5 6 16 14 13 0 5 5 0 3 4 0 1 2 3 8 16 6 7 9 10 17 15 17 10 11 12 15 17 12 13\n"
+  "14 4 10 14 15 16 13 14 17 8 15 14 5 6 17 14 13 0 5 5 0 3 4 0 1 2 3 8 17 6 7 15 8 9 16 16 9 12 13 9 10 11 12\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 17 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 9 10 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 16 12 8 9 17 16 17 9 10 11 12 16 17 11\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 17 16 8 9 12 17 12 9 10 11 16 17 12 13\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 15 7 12 13 7 8 11 12 11 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 3 4 0 1 2 3 15 8 17 16 8 9 10 17 17 10 11 12 16 17 12 13\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 4 5 6 14 16 17 4 4 17 2 3 17 0 1 2 15 7 12 13 7 8 9 12 12 9 10 11 13 0 17 16\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 5 6 13 0 5 15 5 0 16 4 0 1 17 16 17 1 2 3 4 16 17 3\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 15 17 6 16 6 17 4 5 17 0 1 4 4 1 2 3 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 3 17 0 1 2 3 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 15 17 6 16 6 17 2 5 17 0 1 2 5 2 3 4 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 17 4 0 1 2 17 4 17 2 3 6 16 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 5 6 13 0 5 16 5 0 17 4 0 1 2 17 4 17 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 5 6 13 0 5 16 5 0 17 4 0 1 2 17 4 17 2 3 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 5 6 13 0 5 16 5 0 17 4 0 1 2 17 4 17 2 3 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 13 0 17 16 17 0 3 4 0 1 2 3 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 13 0 17 16 17 0 3 4 0 1 2 3 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 17 16 16 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 17 7 7 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 17 7 7 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 17 7 7 17 5 6 13 0 5 17 5 0 3 4 0 1 2 3 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 15 17 6 16 6 17 0 5 5 0 1 4 4 1 2 3 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 16 0 1 17 17 1 2 3 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 6 7 15 17 6 16 6 17 0 5 5 0 1 2 5 2 3 4 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 17 17 1 2 3 4 16 17 3 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 16 0 1 17 17 1 2 3 4 16 17 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 13 0 17 16 17 0 1 4 4 1 2 3 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 13 0 17 16 17 0 1 4 4 1 2 3 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 17 16 16 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 15 16 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 8 16 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 8 16 6 7 15 10 11 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 4 5 15 17 4 16 4 17 0 3 3 0 1 2 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 17 7 7 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 4 5 15 17 4 16 4 17 0 3 3 0 1 2 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 17 7 7 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 17 7 7 17 5 6 13 0 5 17 5 0 1 4 4 1 2 3 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 16 17 7 7 17 5 6 16 0 5 17 5 0 1 4 4 1 2 3 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 4 5 15 17 4 16 4 17 0 3 3 0 1 2 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 16 17 7 7 17 5 6 16 0 5 17 5 0 1 4 4 1 2 3 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 6 9 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 10 15 6 9 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 17 0 1 2 4 17 2 3 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 15 16 4 7 4 5 6 7 9 15 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 8 16 4 7 4 5 6 7 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 8 16 4 7 4 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 16 15 9 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 15 16 4 5 9 15 5 8 5 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 16 15 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 15 16 4 5 7 15 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 16 15 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 15 16 4 5 7 15 5 6 9 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 16 6 15 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 16 6 15 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 17 16 16 17 3 4 13 0 3 17 3 0 1 2 6 16 4 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 4 5 10 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 10 5 6 9 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 5 6 9 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 9 6 7 8 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 4 5 8 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 8 5 6 7 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 5 6 9 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 9 6 7 8 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 15 7 8 17 17 8 9 10 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 6 11 12 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 11 6 7 10 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 11 15 16 14 7 10 11 14 5 6 7 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 10 7 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 6 9 10 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 9 6 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 7 10 15 14 5 6 7 14 16 17 5 5 17 3 4 16 0 3 17 3 0 1 2 10 7 8 9 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 10 15 6 17 6 7 8 17 10 17 8 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 15 16 6 9 6 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 5 6 16 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 10 16 6 9 6 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 5 6 16 14 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 16 6 9 6 7 8 9 12 13 0 15\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 5 6 16 14 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 16 6 7 10 7 8 9 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 15 16 6 7 11 15 7 10 7 8 9 10\n"
+  "14 4 10 14 9 12 15 14 16 8 9 14 5 6 16 14 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 8 16 6 7 9 10 11 12 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 5 6 16 14 13 17 5 5 17 3 4 13 0 3 17 3 0 1 2 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 8 13 15 14 6 7 8 14 4 5 6 14 15 16 4 4 16 2 3 15 17 2 16 2 17 0 1 8 9 12 13 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 16 5 5 16 3 4 13 0 3 16 3 0 1 2 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 5 0 1 17 5 17 1 2 3 5 17 3 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 17 0 1 4 17 4 1 2 3 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 17 6 13 0 17 16 6 17 0 5 0 1 4 5 4 1 2 3 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 13 0 17 16 6 17 0 5 0 1 4 5 4 1 2 3 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 13 0 17 16 6 17 0 5 0 1 4 5 4 1 2 3 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 15 7 7 15 16 6 13 0 16 15 6 16 0 17 0 1 2 17 17 2 3 4 6 17 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 16 15 15 16 17 6 13 0 17 16 6 17 0 5 0 1 2 5 5 2 3 4 8 15 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 13 0 17 16 6 17 0 5 0 1 2 5 5 2 3 4 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 16 7 7 16 17 6 13 0 17 16 6 17 0 5 0 1 2 5 5 2 3 4 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 16 7 7 16 17 6 13 0 17 16 6 17 0 3 0 1 2 3 6 3 4 5 10 15 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 5 6 9 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 17 0 1 2 17 4 17 2 3 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 10 11 14 5 6 7 14 13 15 5 5 15 16 4 13 0 16 15 4 16 0 17 0 1 2 17 4 17 2 3 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 13 16 15 15 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 6 15 4 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 16 15 15 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 6 15 4 5 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 6 7 14 13 16 15 15 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 6 15 4 5 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 5 6 9 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 7 15 11 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 15 7 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 7 10 15 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 10 7 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 10 15 6 9 6 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 8 15 6 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 5 6 15 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 16 5 5 16 17 4 13 0 17 16 4 17 0 3 0 1 2 3 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 4 9 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 9 4 5 8 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 4 7 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 7 4 5 6 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 7 8 9 14 15 4 7 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 7 4 5 6 9 10 11 12\n"
+  "14 4 10 14 11 12 13 14 5 6 11 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 11 6 7 10 10 7 8 9\n"
+  "14 4 10 14 7 12 13 14 5 6 7 14 15 4 5 14 13 16 15 15 16 17 2 13 0 17 16 2 17 0 1 4 15 2 3 7 8 11 12 11 8 9 10\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 3 4 9 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 9 4 5 8 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 3 4 7 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 7 4 5 6 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 3 4 7 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 7 4 5 6 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 5 10 15 14 3 4 5 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 5 6 9 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 5 8 15 14 3 4 5 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 8 5 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 15 4 9 4 5 8 9 8 5 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 15 4 9 4 5 6 9 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 15 4 7 4 5 6 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 15 4 5 10 5 8 9 5 6 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 17 2 13 0 17 16 2 17 0 1 10 15 4 5 10 5 6 9 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 17 16 16 17 1 2 13 0 1 17 8 16 2 7 2 3 6 7 6 3 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 17 16 16 17 1 2 13 0 1 17 8 16 2 7 2 3 6 7 6 3 4 5 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 16 6 15 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 8 15 6 7 9 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 17 16 16 17 1 2 13 0 1 17 6 16 2 5 2 3 4 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 4 9 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 9 4 5 8 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 4 7 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 7 4 5 6 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 4 7 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 7 4 5 6 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 5 6 11 14 16 15 5 14 13 17 16 16 17 1 2 13 0 1 17 15 16 2 3 5 15 3 4 11 6 7 10 10 7 8 9\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 11 12 6 7 10 11 10 7 8 9\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 11 12 6 7 8 11 11 8 9 10\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 9 12 6 7 8 9 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 7 12 12 7 10 11 7 8 9 10\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 16 4 5 14 13 17 16 16 17 1 2 13 0 1 17 4 16 2 3 15 6 7 12 12 7 8 11 11 8 9 10\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 3 4 7 14 13 16 3 3 16 1 2 13 0 1 16 7 4 5 6 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 15 12 13 14 5 16 15 14 3 4 5 14 13 17 3 3 17 1 2 13 0 1 17 16 5 6 11 11 6 9 10 6 7 8 9 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 5 16 15 14 3 4 5 14 13 17 3 3 17 1 2 13 0 1 17 16 5 6 11 11 6 7 10 10 7 8 9 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 5 16 15 14 3 4 5 14 13 17 3 3 17 1 2 13 0 1 17 16 5 6 7 15 16 7 12 12 7 8 11 11 8 9 10\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 9 4 5 17 9 17 5 6 7 9 17 7 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 17 4 5 8 17 8 5 6 7 10 17 8 9\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 10 16 4 9 4 5 8 9 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 10 16 4 9 4 5 6 9 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 17 4 5 6 17 10 17 6 9 6 7 8 9\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 3 4 16 14 13 17 3 3 17 1 2 13 0 1 17 8 16 4 7 4 5 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 16 3 3 16 1 2 13 0 1 16 10 15 4 5 10 5 17 9 5 6 7 17 9 17 7 8\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 8 15 16 7\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 15 5 1 2 16 15 16 2 3 17 5 15 16 17 5 17 3 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 16 15 1 2 17 16 17 2 3 4 15 16 17 4 6 15 4 5\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 8 15 16 7\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 1 17 17 1 6 7 1 2 5 6 5 2 3 4 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 1 17 17 1 6 7 1 2 3 6 6 3 4 5 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 1 17 17 1 4 7 1 2 3 4 7 4 5 6 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 16 15 1 2 3 16 15 16 3 17 3 4 5 17 6 15 17 5\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 17 16 1 2 3 17 16 17 3 4 6 16 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 17 16 1 2 3 17 16 17 3 4 6 16 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 17 16 1 2 3 17 16 17 3 4 6 16 4 5 12 13 0 15\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 6 9 14 13 0 15 15 0 1 16 16 1 17 5 1 2 3 17 5 17 3 4 6 15 16 5 9 6 7 8\n"
+  "14 4 10 14 11 12 13 14 7 8 11 14 15 6 7 14 13 0 15 15 0 1 16 16 1 17 5 1 2 3 17 5 17 3 4 6 15 16 5 11 8 9 10\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 16 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 6 9 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 9 6 7 8 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 15 8 9 10 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 11 14 7 8 15 14 16 6 7 14 11 0 16 16 0 1 17 17 1 4 5 1 2 3 4 6 16 17 5 15 8 9 10 11 12 13 0\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 7 8 11 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 17 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 9 10 11 15 17 11 12 12 13 0 16\n"
+  "14 4 10 14 15 16 17 14 9 12 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 15 16 9 10 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 17 16 11 14 7 8 17 14 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 11 16 9 10 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 7 8 17 14 11 0 7 7 0 1 6 6 1 4 5 1 2 3 4 16 17 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 7 8 17 14 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 7 8 17 14 16 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 12 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 13 16 10 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 16 16 11 12 17 17 12 13 0\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 15 15 2 17 16 2 3 4 17 16 17 4 5 6 15 16 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 17 17 1 4 5 1 2 3 4 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 7 8 15 14 13 0 7 7 0 1 6 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 9 10 11 14 7 8 9 14 15 0 7 7 0 1 6 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 17 17 1 2 5 5 2 3 4 7 17 5 6 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 7 17 1 6 6 1 2 5 5 2 3 4 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 15 0 1 16 16 1 2 17 17 2 3 4 17 4 5 6 16 17 6 7 8 15 16 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 16 17 8 9 10 15 16 9\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 9 10 14 15 17 16 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 9 16 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 16 0 1 17 17 1 2 5 5 2 3 4 17 5 6 7 8 16 17 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 4 4 1 2 3 7 4 5 6 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 4 4 1 2 3 7 4 5 6 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 7 17 1 4 4 1 2 3 7 4 5 6 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 17 17 1 2 3 7 17 3 6 3 4 5 6 13 0 16 15\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 0 5 5 0 1 17 17 1 2 3 5 17 3 4 10 7 8 9 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 17 17 1 2 3 5 17 3 4 11 8 9 10 13 0 16 15\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 15 16 8 9 11 15 9 10\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 7 8 16 14 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 10 16 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 17 17 1 2 3 5 17 3 4 12 9 10 11 13 0 16 15\n"
+  "14 4 10 14 11 15 16 14 9 10 11 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 6 7 8 14 15 16 6 6 16 0 5 5 0 1 17 17 1 2 3 5 17 3 4 10 11 12 13 13 0 16 15\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 10 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 7 10 14 15 17 16 16 17 0 5 5 0 1 4 4 1 2 3 7 16 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 6 6 1 2 5 5 2 3 4 16 17 6 7 10 15 16 7 10 7 8 9\n"
+  "14 4 10 14 11 12 13 14 15 8 11 14 17 16 15 14 13 0 17 17 0 1 6 6 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 11 8 9 10\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 6 6 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 9 10 11 12\n"
+  "14 4 10 14 9 10 11 14 15 8 9 14 17 16 15 14 11 0 17 17 0 1 6 6 1 2 5 5 2 3 4 16 17 6 7 8 15 16 7 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 16 7 8 14 15 17 16 16 17 0 5 5 0 1 4 4 1 2 3 7 16 5 6 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 7 8 14 15 17 16 16 17 0 5 5 0 1 4 4 1 2 3 7 16 5 6 10 11 12 13 13 0 17 15\n"
+;
+
+const char* data_dqrgl_block5 = 
+  "14 4 10 14 15 16 17 14 11 12 15 14 7 8 11 14 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 16 17 6 6 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 5 17 1 4 4 1 2 3 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 17 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 9 10 11 15 17 11 12 12 13 0 16\n"
+  "14 4 10 14 15 16 17 14 9 12 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 11 15 14 6 7 8 14 16 17 6 6 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 8 11 12 14 6 7 8 14 15 16 6 6 16 17 5 5 17 1 4 4 1 2 3 11 8 9 10 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 4 4 1 2 3 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 4 4 1 2 3 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 4 4 1 2 3 9 16 7 8 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 17 16 11 14 7 8 17 14 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 9 11 16 9 10 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 7 8 17 14 11 0 7 7 0 1 6 6 1 2 5 5 2 3 4 16 17 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 7 8 17 14 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 4 4 1 2 3 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 7 8 17 14 16 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 17 5 5 17 1 4 4 1 2 3 12 9 10 11 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 13 16 10 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 0 5 5 0 1 4 4 1 2 3 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 16 16 11 12 17 17 12 13 0\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 0 7 7 0 1 2 7 2 17 6 2 3 4 17 6 17 4 5 13 0 16 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 2 7 2 5 6 2 3 4 5 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 2 7 2 5 6 2 3 4 5 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 9 10 17 14 13 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 16 17 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 8 9 16 14 15 17 8 8 17 0 7 7 0 1 2 7 2 3 6 6 3 4 5 11 16 9 10 13 0 17 15\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 9 10 11 14 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 8 9 10 14 16 17 8 8 17 0 7 7 0 1 2 7 2 3 6 6 3 4 5 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 7 17 1 2 7 2 3 6 6 3 4 5 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 7 8 11 14 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 6 7 10 14 16 17 6 6 17 0 5 5 0 1 2 5 2 3 4 10 7 8 9 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 5 17 1 2 5 2 3 4 10 7 8 9 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 12 13 14 9 16 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 9 10 17 15 16 17 12 12 17 10 11\n"
+  "14 4 10 14 15 16 13 14 9 17 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 9 10 11 15 17 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 9 17 15 14 7 8 9 14 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 9 10 11 15 17 11 12 12 13 0 16\n"
+  "14 4 10 14 15 16 17 14 9 12 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 11 15 14 6 7 8 14 16 17 6 6 17 0 5 5 0 1 2 5 2 3 4 11 8 9 10 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 7 8 16 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 16 8 17 8 9 10 17 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 11 8 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 2 5 2 3 4 11 16 7 10 7 8 9 10 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 2 5 2 3 4 11 16 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 2 5 2 3 4 9 16 7 8 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 17 16 11 14 7 8 17 14 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 9 11 16 9 10 12 13 0 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 7 8 17 14 11 0 7 7 0 1 6 6 1 2 3 6 3 4 5 16 17 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 7 8 17 14 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 6 7 16 14 15 17 6 6 17 0 5 5 0 1 2 5 2 3 4 9 16 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 7 8 17 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 7 8 17 14 16 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 6 7 8 14 15 16 6 6 16 17 5 5 17 1 2 5 2 3 4 12 9 10 11 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 7 8 9 14 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 13 16 10 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 6 7 8 14 16 17 6 6 17 0 5 5 0 1 2 5 2 3 4 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 7 8 9 14 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 7 17 3 4 7 4 5 6 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 4 9 14 13 0 16 16 0 1 17 17 1 2 3 4 16 17 3 9 4 5 8 8 5 6 7 15 10 11 12\n"
+  "14 4 10 14 15 10 11 14 7 8 15 14 16 4 7 14 11 0 16 16 0 1 17 17 1 2 3 4 16 17 3 7 4 5 6 15 8 9 10 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 16 5 10 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 10 5 6 9 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 16 5 8 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 8 5 6 7 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 10 13 15 14 8 9 10 14 16 5 8 14 15 17 16 16 17 0 3 3 0 1 2 5 16 3 4 8 5 6 7 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 10 15 16 5 10 5 6 9 9 6 7 8\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 17 16 15 14 13 0 17 17 0 1 4 4 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7 9 10 11 12\n"
+  "14 4 10 14 9 10 11 14 15 8 9 14 17 16 15 14 11 0 17 17 0 1 4 4 1 2 3 16 17 4 5 8 15 16 5 8 5 6 7 11 12 13 0\n"
+  "14 4 10 14 7 10 11 14 15 6 7 14 17 16 15 14 11 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 7 8 9 10 11 12 13 0\n"
+  "14 4 10 14 7 8 9 14 15 6 7 14 17 16 15 14 9 0 17 17 0 1 4 4 1 2 3 16 17 4 5 6 15 16 5 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 15 16 17 14 11 12 15 14 5 6 11 14 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 10 11 15 14 4 5 10 14 16 17 4 4 17 0 3 3 0 1 2 10 5 6 9 9 6 7 8 15 11 12 13 13 0 17 16\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 4 5 10 14 15 16 4 4 16 17 3 3 17 1 2 10 5 6 9 9 6 7 8 13 17 16 15 13 0 1 17\n"
+  "14 4 10 14 15 16 13 14 9 10 15 14 5 6 9 14 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 17 16 10 11 12 17 16 17 12 13\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 5 6 9 14 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 13 16 10 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 8 9 15 14 4 5 8 14 16 17 4 4 17 0 3 3 0 1 2 8 5 6 7 15 9 12 13 9 10 11 12 13 0 17 16\n"
+  "14 4 10 14 15 16 17 14 9 10 15 14 5 6 9 14 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 5 17 3 4 10 7 8 9 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 15 12 16 14 7 17 15 14 5 6 7 14 16 0 5 5 0 1 4 4 1 2 3 17 7 8 11 11 8 9 10 15 17 11 12 12 13 0 16\n"
+  "14 4 10 14 15 16 17 14 7 12 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 12 13 16 16 13 0 17\n"
+  "14 4 10 14 15 12 13 14 7 16 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 16 7 8 17 15 16 17 12 12 17 8 11 8 9 10 11\n"
+  "14 4 10 14 15 10 11 14 7 16 15 14 5 6 7 14 11 0 5 5 0 1 4 4 1 2 3 16 7 8 17 15 16 17 10 10 17 8 9 11 12 13 0\n"
+  "14 4 10 14 15 16 17 14 7 10 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 10 11 16 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 5 6 15 14 13 0 5 5 0 1 4 4 1 2 3 10 15 6 16 6 7 17 16 17 7 8 9 10 16 17 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 15 16 6 17 6 7 10 17 10 7 8 9 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 11 6 7 10 11 10 7 8 9 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 11 16 5 10 5 6 9 10 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 11 16 5 10 5 6 7 10 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 9 6 7 8 9 16 9 10 11 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 11 16 5 8 5 6 7 8 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 5 6 16 14 15 0 5 5 0 1 4 4 1 2 3 10 16 6 17 6 7 8 17 10 17 8 9 12 13 0 15\n"
+  "14 4 10 14 9 10 13 14 16 15 9 14 5 6 16 14 13 0 5 5 0 1 4 4 1 2 3 15 16 6 17 6 7 8 17 9 15 17 8 10 11 12 13\n"
+  "14 4 10 14 9 10 11 14 16 15 9 14 5 6 16 14 11 0 5 5 0 1 4 4 1 2 3 15 16 6 17 6 7 8 17 9 15 17 8 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 9 16 5 8 5 6 7 8 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 17 16 11 14 5 6 17 14 15 0 5 5 0 1 4 4 1 2 3 16 17 6 9 6 7 8 9 11 16 9 10 12 13 0 15\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 9 6 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 5 6 17 14 11 0 5 5 0 1 4 4 1 2 3 16 17 6 9 6 7 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 5 6 17 14 16 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 9 16 5 8 5 6 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 16 13 14 17 10 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 15 10 11 16 16 11 12 13\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 5 6 17 14 16 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 10 11 7 8 9 10 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 11 16 5 6 11 6 9 10 6 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 8 11 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 11 16 5 6 11 6 7 10 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 8 9 15 16 9 12 12 9 10 11\n"
+  "14 4 10 14 15 10 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 8 9 15 16 9 10 10 11 12 13\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 5 6 17 14 11 0 5 5 0 1 4 4 1 2 3 16 17 6 7 16 7 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 5 6 17 14 16 0 5 5 0 1 4 4 1 2 3 10 17 6 7 10 7 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 9 16 5 6 9 6 7 8 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 7 12 14 4 5 16 14 15 17 4 4 17 0 3 3 0 1 2 7 16 5 6 12 7 8 11 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 9 10 15 14 17 16 9 14 5 6 17 14 15 0 5 5 0 1 4 4 1 2 3 16 17 6 7 9 16 7 8 10 13 0 15 10 11 12 13\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 5 6 17 14 13 0 5 5 0 1 4 4 1 2 3 16 17 6 7 15 16 7 12 12 7 8 11 11 8 9 10\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 5 6 17 14 11 0 5 5 0 1 4 4 1 2 3 16 17 6 7 15 16 7 10 10 7 8 9 11 12 13 0\n"
+  "14 4 10 14 15 8 9 14 17 16 15 14 5 6 17 14 9 0 5 5 0 1 4 4 1 2 3 16 17 6 7 15 16 7 8 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 9 15 16 14 17 8 9 14 5 6 17 14 16 0 5 5 0 1 4 4 1 2 3 8 17 6 7 9 10 13 15 13 10 11 12 15 13 0 16\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 16 12 8 9 17 16 17 9 10 11 12 16 17 11\n"
+  "14 4 10 14 15 16 13 14 7 8 15 14 5 6 7 14 13 0 5 5 0 1 4 4 1 2 3 15 8 17 16 8 9 12 17 12 9 10 11 16 17 12 13\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 8 13 16 8 9 12 13 12 9 10 11 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 4 5 6 14 16 17 4 4 17 0 3 3 0 1 2 15 7 12 13 7 8 11 12 11 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 4 5 6 14 16 17 4 4 17 0 3 3 0 1 2 15 7 12 13 7 8 9 12 12 9 10 11 13 0 17 16\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 8 11 16 8 9 10 11 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 8 11 16 8 9 10 11 16 11 12 17 17 12 13 0\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 8 9 16 16 9 12 13 9 10 11 12 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 5 6 7 14 17 0 5 5 0 1 4 4 1 2 3 15 8 9 16 16 9 10 13 13 10 11 12 16 13 0 17\n"
+  "14 4 10 14 8 9 15 14 6 7 8 14 16 3 6 14 15 17 16 16 17 0 1 3 16 1 2 6 3 4 5 9 0 17 15 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 10 15 16 3 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 17 0 1 2 16 17 2 3 10 15 16 3 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "14 4 10 14 12 13 15 14 8 9 12 14 4 5 8 14 15 16 4 4 16 17 3 8 5 6 7 12 9 10 11 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 3 4 7 14 13 0 3 3 0 1 2 7 4 5 6 15 8 16 12 8 9 17 16 17 9 10 11 12 16 17 11\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 3 4 7 14 17 0 3 3 0 1 2 7 4 5 6 15 8 13 16 8 9 12 13 12 9 10 11 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 2 3 6 14 16 17 2 2 17 0 1 6 3 4 5 15 7 12 13 7 8 11 12 11 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 13 16 14 6 7 15 14 2 3 6 14 16 17 2 2 17 0 1 6 3 4 5 15 7 12 13 7 8 9 12 12 9 10 11 13 0 17 16\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 3 4 7 14 17 0 3 3 0 1 2 7 4 5 6 15 8 11 16 8 9 10 11 16 11 12 13 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 3 4 7 14 17 0 3 3 0 1 2 7 4 5 6 15 8 9 16 16 9 12 13 9 10 11 12 16 13 0 17\n"
+  "14 4 10 14 15 16 17 14 7 8 15 14 3 4 7 14 17 0 3 3 0 1 2 7 4 5 6 15 8 9 16 16 9 10 13 13 10 11 12 16 13 0 17\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 10 7 8 9 13 17 16 15 13 0 5 17 5 0 3 4 0 1 2 3\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 6 7 10 14 15 16 6 6 16 17 5 10 7 8 9 13 17 16 15 13 0 5 17 5 0 1 4 4 1 2 3\n"
+  "14 4 10 14 12 13 15 14 6 9 12 14 4 5 6 14 15 16 4 4 16 17 3 9 6 7 8 12 9 10 11 13 17 16 15 13 0 3 17 3 0 1 2\n"
+  "14 4 10 14 15 12 13 14 5 16 15 14 3 4 5 14 13 0 3 3 0 1 2 16 5 6 17 15 16 17 12 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "14 4 10 14 15 12 13 14 5 16 15 14 3 4 5 14 13 0 3 3 0 1 2 16 5 6 17 15 16 17 12 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "14 4 10 14 15 16 17 14 5 8 15 14 3 4 5 14 17 0 3 3 0 1 2 8 5 6 7 15 8 9 16 16 9 12 13 9 10 11 12 16 13 0 17\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 16 4 5 17 16 17 5 8 9 5 6 7 8 10 16 17 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 3 4 16 14 13 0 3 3 0 1 2 15 16 4 17 4 5 10 17 10 5 8 9 5 6 7 8 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 11 4 5 10 11 10 5 8 9 5 6 7 8 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 9 10 9 4 7 8 4 5 6 7 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 9 4 5 16 9 16 5 6 17 17 6 7 8 9 16 17 8\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 16 4 5 17 16 17 5 6 9 9 6 7 8 10 16 17 9\n"
+  "14 4 10 14 11 12 13 14 16 15 11 14 3 4 16 14 13 0 3 3 0 1 2 15 16 4 17 4 5 10 17 10 5 6 9 9 6 7 8 11 15 17 10\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 11 4 5 10 11 10 5 6 9 9 6 7 8 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 9 10 9 4 5 8 8 5 6 7 13 0 17 15\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 16 4 5 17 16 17 5 6 7 17 7 8 9 10 16 17 9\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 11 4 5 10 11 10 5 6 7 10 7 8 9 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 9 10 9 4 5 6 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 7 10 7 4 5 6 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 3 4 16 14 13 0 3 3 0 1 2 10 16 4 9 4 5 17 9 17 5 6 7 9 17 7 8 15 10 11 12\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 9 4 5 17 9 17 5 6 7 9 17 7 8 12 13 0 15\n"
+  "14 4 10 14 9 12 13 14 15 8 9 14 3 4 15 14 13 0 3 3 0 1 2 8 15 4 16 4 5 17 16 17 5 6 7 8 16 17 7 9 10 11 12\n"
+  "14 4 10 14 9 10 11 14 15 8 9 14 3 4 15 14 11 0 3 3 0 1 2 8 15 4 16 4 5 17 16 17 5 6 7 8 16 17 7 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 8 3 4 7 8 7 4 5 6 11 8 9 10 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 17 4 5 8 17 8 5 6 7 10 17 8 9 12 13 0 15\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 7 8 7 4 5 6 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 17 16 11 14 3 4 17 14 15 0 3 3 0 1 2 16 17 4 9 4 5 8 9 8 5 6 7 11 16 9 10 12 13 0 15\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 3 4 17 14 11 0 3 3 0 1 2 16 17 4 9 4 5 8 9 8 5 6 7 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 3 4 17 14 16 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 7 8 7 4 5 6 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 3 4 17 14 16 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 7 8 7 4 5 6 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 5 10 10 5 8 9 5 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 10 3 4 5 10 10 5 6 9 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 9 12 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 5 8 8 5 6 7 12 9 10 11 13 0 17 15\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 3 4 17 14 16 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 13 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 5 8 8 5 6 7 10 11 12 13 13 0 17 15\n"
+  "14 4 10 14 15 12 16 14 17 10 15 14 3 4 17 14 16 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8 15 10 11 12 12 13 0 16\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 8 3 4 5 8 8 5 6 7 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 6 3 4 5 6 11 6 7 10 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 15 10 11 14 17 16 15 14 3 4 17 14 11 0 3 3 0 1 2 16 17 4 7 4 5 6 7 16 7 8 9 15 16 9 10 11 12 13 0\n"
+  "14 4 10 14 11 15 16 14 17 10 11 14 3 4 17 14 16 0 3 3 0 1 2 10 17 4 7 4 5 6 7 10 7 8 9 11 12 13 15 15 13 0 16\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 6 3 4 5 6 9 6 7 8 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 17 4 5 6 17 10 17 6 9 6 7 8 9 12 13 0 15\n"
+  "14 4 10 14 9 12 15 14 16 8 9 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 17 4 5 6 17 8 17 6 7 9 10 11 12 12 13 0 15\n"
+  "14 4 10 14 9 10 15 14 16 8 9 14 3 4 16 14 15 0 3 3 0 1 2 8 16 4 17 4 5 6 17 8 17 6 7 10 13 0 15 10 11 12 13\n"
+  "14 4 10 14 10 11 15 14 16 7 10 14 2 3 16 14 15 17 2 2 17 0 1 7 16 3 6 3 4 5 6 10 7 8 9 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 8 9 15 14 16 7 8 14 2 3 16 14 15 17 2 2 17 0 1 7 16 3 6 3 4 5 6 9 0 17 15 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 3 4 15 14 13 0 3 3 0 1 2 10 15 4 5 10 5 16 9 5 6 17 16 17 6 7 8 9 16 17 8\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 9 10 4 5 8 9 8 5 6 7 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 9 10 4 5 6 9 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 16 5 8 11 5 6 7 8 11 8 9 10 15 16 11 12\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 7 10 4 5 6 7 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 11 12 15 14 16 10 11 14 3 4 16 14 15 0 3 3 0 1 2 10 16 4 5 10 5 17 9 5 6 7 17 9 17 7 8 12 13 0 15\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 4 9 4 7 8 4 5 6 7 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 5 10 10 5 8 9 5 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 5 10 10 5 6 9 9 6 7 8 13 0 17 15\n"
+  "14 4 10 14 12 13 15 14 16 11 12 14 2 3 16 14 15 17 2 2 17 0 1 11 16 3 4 11 4 5 10 10 5 6 7 10 7 8 9 13 0 17 15\n"
+  "14 4 10 14 10 11 15 14 16 9 10 14 2 3 16 14 15 17 2 2 17 0 1 9 16 3 4 9 4 5 8 8 5 6 7 11 0 17 15 11 12 13 0\n"
+  "14 4 10 14 8 9 15 14 16 7 8 14 2 3 16 14 15 17 2 2 17 0 1 7 16 3 4 7 4 5 6 9 0 17 15 9 10 13 0 13 10 11 12\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 15 16 5 12 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 15 16 5 12 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "14 4 10 14 15 12 13 14 17 16 15 14 3 4 17 14 13 0 3 3 0 1 2 16 17 4 5 15 16 5 12 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "14 4 10 14 15 12 13 14 16 6 15 14 3 4 16 14 13 0 3 3 0 1 2 6 16 4 5 15 6 7 12 12 7 17 11 7 8 9 17 11 17 9 10\n"
+  "14 4 10 14 7 8 15 14 16 6 7 14 3 4 16 14 15 0 3 3 0 1 2 6 16 4 5 8 13 0 15 8 9 17 13 17 9 10 11 13 17 11 12\n"
+  "14 4 10 14 6 7 15 14 16 5 6 14 2 3 16 14 15 17 2 2 17 0 1 5 16 3 4 7 0 17 15 7 8 13 0 13 8 11 12 8 9 10 11\n"
+  "14 4 10 14 6 7 15 14 16 5 6 14 2 3 16 14 15 17 2 2 17 0 1 5 16 3 4 7 0 17 15 7 8 13 0 13 8 9 12 12 9 10 11\n"
+  "14 4 10 14 6 7 15 14 16 5 6 14 2 3 16 14 15 17 2 2 17 0 1 5 16 3 4 7 0 17 15 7 8 13 0 13 8 9 10 13 10 11 12\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 16 12 6 7 17 16 17 7 10 11 7 8 9 10 12 16 17 11\n"
+  "14 4 10 14 15 16 17 14 5 6 15 14 3 4 5 14 17 0 3 3 0 1 2 15 6 13 16 6 7 12 13 12 7 10 11 7 8 9 10 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 11 12 11 6 9 10 6 7 8 9 13 0 17 16\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 11 12 6 7 16 11 16 7 8 17 17 8 9 10 11 16 17 10\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 16 12 6 7 17 16 17 7 8 11 11 8 9 10 12 16 17 11\n"
+  "14 4 10 14 15 16 17 14 5 6 15 14 3 4 5 14 17 0 3 3 0 1 2 15 6 13 16 6 7 12 13 12 7 8 11 11 8 9 10 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 11 12 11 6 7 10 10 7 8 9 13 0 17 16\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 16 12 6 7 17 16 17 7 8 9 17 9 10 11 12 16 17 11\n"
+  "14 4 10 14 15 16 17 14 5 6 15 14 3 4 5 14 17 0 3 3 0 1 2 15 6 13 16 6 7 12 13 12 7 8 9 12 9 10 11 16 13 0 17\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 11 12 11 6 7 8 11 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 9 12 9 6 7 8 12 9 10 11 13 0 17 16\n"
+  "14 4 10 14 15 12 16 14 5 6 15 14 3 4 5 14 16 0 3 3 0 1 2 15 6 11 12 6 7 17 11 17 7 8 9 11 17 9 10 12 13 0 16\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 7 12 12 7 10 11 7 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 13 16 14 4 5 15 14 2 3 4 14 16 17 2 2 17 0 1 15 5 12 13 5 6 7 12 12 7 8 11 11 8 9 10 13 0 17 16\n"
+  "14 4 10 14 15 12 13 14 5 6 15 14 3 4 5 14 13 0 3 3 0 1 2 15 6 7 12 12 7 16 11 7 8 17 16 17 8 9 10 11 16 17 10\n"
+  "14 4 10 14 7 8 15 14 5 6 7 14 3 4 5 14 15 0 3 3 0 1 2 8 13 0 15 8 9 16 13 16 9 10 17 17 10 11 12 13 16 17 12\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 5 6 0 1 4 5 4 1 2 3\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 5 6 0 1 2 5 5 2 3 4\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 3 6 0 1 2 3 6 3 4 5\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 1 6 6 1 4 5 1 2 3 4\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 1 6 6 1 2 5 5 2 3 4\n"
+  "14 4 10 14 12 13 15 14 10 11 12 14 8 9 10 14 15 16 8 8 16 17 7 13 17 16 15 13 0 7 17 7 0 1 6 6 1 2 3 6 3 4 5\n"
+  "14 4 10 14 6 7 15 14 4 5 6 14 2 3 4 14 15 16 2 2 16 0 1 7 0 16 15 7 8 13 0 13 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 6 7 15 14 4 5 6 14 2 3 4 14 15 16 2 2 16 0 1 7 0 16 15 7 8 13 0 13 8 9 17 17 9 10 11 13 17 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 8 16 17 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 17 16 17 1 6 7 1 2 3 6 6 3 4 5 8 16 17 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 4 17 1 2 3 4 17 4 5 6 7 16 17 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 17 16 17 1 4 7 1 2 3 4 7 4 5 6 8 16 17 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 17 16 1 2 3 17 16 17 3 4 6 16 4 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 17 5 1 2 3 17 5 17 3 4 7 16 5 6\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 16 0 1 6 16 6 1 17 5 1 2 3 17 5 17 3 4 8 16 6 7\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 6 7 6 1 17 5 1 2 3 17 5 17 3 4 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 6 7 6 1 17 5 1 2 3 17 5 17 3 4 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 17 7 17 1 4 5 1 2 3 4 7 17 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 17 7 17 1 4 5 1 2 3 4 7 17 5 6 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 17 0 1 6 17 6 1 4 5 1 2 3 4 8 17 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 2 17 17 2 5 6 2 3 4 5 7 16 17 6\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 2 17 17 2 3 6 6 3 4 5 7 16 17 6\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 16 7 16 1 2 17 17 2 3 4 17 4 5 6 7 16 17 6\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 17 17 2 3 4 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 6 7 6 1 2 17 17 2 3 4 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 17 0 1 6 17 6 1 2 5 5 2 3 4 8 17 6 7 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 10 15 16 9\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 17 16 15 14 13 0 17 16 17 0 9 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 10 15 16 9\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 4 7 4 1 2 3 7 4 5 6 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 17 7 17 1 2 3 7 17 3 6 3 4 5 6 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 17 7 17 1 2 3 7 17 3 6 3 4 5 6 15 10 11 12\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 6 15 14 13 0 16 6 16 0 5 0 1 17 5 17 1 2 3 5 17 3 4 10 15 6 7 10 7 8 9\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 17 5 17 1 2 3 5 17 3 4 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 17 5 17 1 2 3 5 17 3 4 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 17 0 1 4 17 4 1 2 3 6 17 4 5 15 8 11 12 8 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 17 0 1 4 17 4 1 2 3 6 17 4 5 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 17 6 16 14 13 0 17 6 17 0 5 0 1 4 5 4 1 2 3 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 4 5 4 1 2 3 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 11 12 13 14 9 10 11 14 15 8 9 14 13 0 15 8 15 0 7 0 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5\n"
+  "14 4 10 14 11 12 13 14 15 10 11 14 16 8 15 14 13 0 16 8 16 0 7 0 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5 10 15 8 9\n"
+  "14 4 10 14 15 12 13 14 9 10 15 14 16 8 9 14 13 0 16 8 16 0 7 0 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 2 7 7 2 5 6 2 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 10 15 14 17 8 16 14 13 0 17 8 17 0 7 0 1 2 7 7 2 3 6 6 3 4 5 10 16 8 9 15 10 11 12\n"
+  "14 4 10 14 15 12 13 14 16 8 15 14 17 6 16 14 13 0 17 6 17 0 5 0 1 2 5 5 2 3 4 8 16 6 7 15 8 9 12 12 9 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 5 0 1 2 5 5 2 3 4 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "14 4 10 14 15 12 13 14 7 8 15 14 16 6 7 14 13 0 16 6 16 0 3 0 1 2 3 6 3 4 5 15 8 17 12 8 9 10 17 12 17 10 11\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10\n"
+  "16 0 7 0 13 14 15 0 9 12 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10\n"
+  "16 0 7 0 13 14 15 0 9 12 13 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 11 12 13 14\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 8 11 8 1 4 7 1 2 3 4 7 4 5 6 11 8 9 10\n"
+  "16 0 7 0 13 14 15 0 9 12 13 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 13 10 11 12\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 5 1 2 3 4 10 5 8 9 5 6 7 8\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 5 1 2 3 4 10 5 6 9 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 9 12 13 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 6 11 6 1 4 5 1 2 3 4 11 6 7 10 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 7 7 2 5 6 2 3 4 5 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10\n"
+  "16 0 7 0 13 14 15 0 9 12 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 7 12 13 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10\n"
+  "16 0 7 0 13 14 15 0 7 12 13 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 9 12 9 10 11\n"
+  "16 0 7 0 13 14 15 0 7 10 13 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 13 10 11 12\n"
+  "16 0 7 0 13 14 15 0 7 8 13 0 1 6 7 6 1 2 5 5 2 3 4 13 8 9 12 12 9 10 11\n"
+  "16 0 7 0 11 12 15 0 7 8 11 0 1 6 7 6 1 2 5 5 2 3 4 11 8 9 10 12 13 14 15\n"
+  "16 0 7 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 13 14 13 10 11 12\n"
+  "16 0 7 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 14 14 11 12 13\n"
+  "16 0 7 0 9 12 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 12 12 13 14 15\n"
+  "16 0 7 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 13 14 15 10 11 12 13\n"
+  "16 0 7 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 11 14 15 14 11 12 13\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 9 10 13 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 0 7 0 11 14 15 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 0 7 0 11 12 15 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 12 13 14 15\n"
+  "16 0 7 0 9 14 15 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 13 14 13 10 11 12\n"
+  "16 0 7 0 9 14 15 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 14 14 11 12 13\n"
+  "16 0 7 0 9 12 15 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 12 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 5 10 13 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 13 10 11 12\n"
+  "16 0 7 0 11 12 15 0 5 10 11 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 12 13 14 15\n"
+  "16 0 7 0 13 14 15 0 5 8 13 0 1 4 5 4 1 2 3 8 5 6 7 13 8 9 12 12 9 10 11\n"
+  "16 0 7 0 7 14 15 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 0 7 0 7 14 15 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 0 7 0 13 14 15 0 11 12 13 0 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7\n"
+  "16 0 7 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 7 8 9 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 11 12 13 14\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 7 8 9 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 5 8 11 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 5 8 9 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 13 10 11 12\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 5 6 9 16 3 4 5 16 13 0 3 3 0 1 2 9 6 7 8 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 7 8 9 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 7 10 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 12 13 14 15\n"
+  "16 1 8 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 13 8 11 12 8 9 10 11\n"
+  "16 1 8 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 13 8 9 12 12 9 10 11\n"
+  "16 1 8 16 11 12 15 16 7 8 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 11 8 9 10 12 13 14 15\n"
+  "16 1 8 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 13 14 13 10 11 12\n"
+  "16 1 8 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 11 14 14 11 12 13\n"
+  "16 1 8 16 9 12 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 11 12 12 13 14 15\n"
+  "16 1 8 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 11 14 15 14 11 12 13\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9\n"
+  "16 1 8 16 13 14 15 16 9 10 13 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 9 10 11 16 5 6 9 16 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10\n"
+  "16 1 8 16 13 14 15 16 7 10 13 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 12\n"
+  "16 1 8 16 11 14 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 11 12 13 14\n"
+  "16 1 8 16 11 12 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 7 10 11 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 14 15 0\n"
+  "16 1 8 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 13 8 9 12 12 9 10 11\n"
+  "16 1 8 16 11 12 15 16 7 8 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 11 8 9 10 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 7 8 11 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 11 8 9 10 13 14 15 0\n"
+  "16 1 8 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 9 10 13 14 13 10 11 12\n"
+  "16 1 8 16 9 12 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 9 10 11 12 12 13 14 15\n"
+  "16 1 8 16 9 12 13 16 7 8 9 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 9 10 11 12 13 14 15 0\n"
+  "16 1 8 16 9 10 11 16 7 8 9 16 5 6 7 16 11 0 5 5 0 1 4 4 1 2 3 11 12 15 0 15 12 13 14\n"
+  "16 1 8 16 11 12 15 16 7 8 11 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 11 8 9 10 12 13 14 15\n"
+  "16 1 8 16 11 12 13 16 7 8 11 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 11 8 9 10 13 14 15 0\n"
+  "16 1 8 16 9 12 13 16 7 8 9 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 9 10 11 12 13 14 15 0\n"
+  "16 1 8 16 11 12 13 16 5 8 11 16 3 4 5 16 13 0 3 3 0 1 2 8 5 6 7 11 8 9 10 13 14 15 0\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 16 6 2 3 4 16 6 16 4 5\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 5 6 2 3 4 5 8 16 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 7 16 7 2 5 6 2 3 4 5 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 16 16 3 4 5 7 16 5 6\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 3 6 6 3 4 5 8 16 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 7 16 7 2 3 6 6 3 4 5 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 11 16 9 10\n"
+;
+
+const char* data_dqrgl_block6 = 
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 3 4 8 16 4 7 4 5 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 10 7 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 8 11 8 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 4 6 16 4 5 12 13 14 15\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 16 1 2 5 6 5 2 3 4 16 6 7 8 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 5 16 5 2 3 4 9 16 5 6 9 6 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 10 7 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 8 11 8 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 8 9 8 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 5 16 5 2 3 4 7 16 5 6 12 13 14 15\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 16 12 13 14\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 6 7 1 2 5 6 5 2 3 4 11 16 7 10 7 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 16 9 16 1 6 7 1 2 5 6 5 2 3 4 9 16 7 8 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 16 9 16 1 6 7 1 2 5 6 5 2 3 4 9 16 7 8 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 16 9 16 1 6 7 1 2 5 6 5 2 3 4 9 16 7 8 12 13 14 15\n"
+  "16 1 8 0 13 14 15 0 9 16 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 11 13 16 11 12\n"
+  "16 1 8 0 16 14 15 0 9 12 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 8 16 8 1 6 7 1 2 5 6 5 2 3 4 12 16 8 9 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 16 10 13 0 1 8 16 8 1 6 7 1 2 5 6 5 2 3 4 10 16 8 9 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 16 10 11 0 1 8 16 8 1 6 7 1 2 5 6 5 2 3 4 10 16 8 9 11 12 13 14\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 10 13 14 10 11 12 13\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 10 11 14 14 11 12 13\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 16 7 3 4 5 16 7 16 5 6\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 16 12 13 14\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 16 12 13 14\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 6 7 1 2 3 6 6 3 4 5 11 16 7 10 7 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 16 9 16 1 6 7 1 2 3 6 6 3 4 5 9 16 7 8 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 16 9 16 1 6 7 1 2 3 6 6 3 4 5 9 16 7 8 11 12 13 14\n"
+  "16 1 8 0 13 14 15 0 9 16 13 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 11 13 16 11 12\n"
+  "16 1 8 0 16 14 15 0 9 12 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 9 10 11 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 8 16 8 1 6 7 1 2 3 6 6 3 4 5 12 16 8 9 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 16 10 13 0 1 8 16 8 1 6 7 1 2 3 6 6 3 4 5 10 16 8 9 13 10 11 12\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 10 13 14 10 11 12 13\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 10 11 14 14 11 12 13\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 16 16 5 6 7 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 16 1 2 3 4 16 4 5 8 8 5 6 7 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 16 12 13 14\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 16 1 2 3 4 16 4 5 6 10 16 6 9 6 7 8 9\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 4 16 1 2 3 4 16 4 5 6 8 16 6 7 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 8 9 8 1 4 16 1 2 3 4 16 4 5 6 8 16 6 7 13 10 11 12\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 8 11 8 1 4 7 1 2 3 4 7 4 5 6 11 8 9 10 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 16 9 16 1 4 7 1 2 3 4 7 4 5 6 9 16 7 8 13 10 11 12\n"
+  "16 1 8 0 16 14 15 0 9 12 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 12 9 10 11 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 8 16 8 1 4 7 1 2 3 4 7 4 5 6 12 16 8 9 12 9 10 11\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 10 13 14 10 11 12 13\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 10 11 14 14 11 12 13\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 8 3 4 7 8 7 4 5 6\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 8 3 4 5 8 8 5 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 6 3 4 5 6 9 6 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 7 1 2 3 16 7 16 3 6 3 4 5 6 10 7 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 8 11 8 1 16 7 1 2 3 16 7 16 3 6 3 4 5 6 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 3 16 7 16 3 6 3 4 5 6 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 4 9 4 7 8 4 5 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 4 9 4 5 8 8 5 6 7\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 3 16 7 16 3 4 7 4 5 6 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 5 1 2 3 16 5 16 3 4 10 5 6 9 9 6 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 6 11 6 1 16 5 1 2 3 16 5 16 3 4 11 6 7 10 10 7 8 9\n"
+  "16 1 8 0 13 14 15 0 7 12 13 0 1 6 7 6 1 16 5 1 2 3 16 5 16 3 4 12 7 8 11 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 7 12 13 0 1 6 7 6 1 16 5 1 2 3 16 5 16 3 4 12 7 8 9 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 5 1 2 3 4 10 5 16 9 5 6 7 16 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 4 5 1 2 3 4 11 16 5 10 5 6 9 10 9 6 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 16 7 16 3 4 5 7 16 5 6\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 6 16 6 3 4 5 8 16 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 7 8 2 3 6 7 6 3 4 5 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 7 8 2 3 4 7 7 4 5 6 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 5 16 2 3 4 5 16 5 6 7 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 5 8 2 3 4 5 8 5 6 7 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 4 16 8 16 4 7 4 5 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 4 16 8 16 4 5 8 5 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 6 2 3 4 16 6 16 4 5 9 6 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 7 7 2 16 6 2 3 4 16 6 16 4 5 10 7 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 8 11 8 1 2 7 7 2 16 6 2 3 4 16 6 16 4 5 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 9 12 13 0 1 8 9 8 1 2 7 7 2 16 6 2 3 4 16 6 16 4 5 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 5 6 2 3 4 5 10 16 6 9 6 7 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 16 7 3 4 5 16 7 16 5 6\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 6 7 3 4 5 6 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 3 8 8 3 6 7 3 4 5 6 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 16 16 4 5 6 8 16 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 4 7 7 4 5 6 9 16 7 8\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 3 8 8 3 4 7 7 4 5 6 10 16 8 9\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 11 16 9 10\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 16 10 11\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 16 12 13 14\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 4 5 9 16 5 8 5 6 7 8\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 16 16 3 4 5 7 16 5 6 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 16 16 3 4 5 7 16 5 6 12 13 14 15\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 16 16 2 3 6 6 3 4 5 8 16 6 7 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 16 16 2 3 6 6 3 4 5 8 16 6 7 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 16 16 2 3 6 6 3 4 5 8 16 6 7 12 13 14 15\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 9 10 13 0 1 16 9 16 1 2 7 7 2 3 6 6 3 4 5 9 16 7 8 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 16 9 16 1 2 7 7 2 3 6 6 3 4 5 9 16 7 8 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 16 9 16 1 2 7 7 2 3 6 6 3 4 5 9 16 7 8 12 13 14 15\n"
+  "16 1 8 0 13 14 15 0 9 16 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 11 13 16 11 12\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 8 16 8 1 2 7 7 2 3 6 6 3 4 5 12 16 8 9 12 9 10 11\n"
+  "16 1 8 0 13 14 15 0 16 10 13 0 1 8 16 8 1 2 7 7 2 3 6 6 3 4 5 10 16 8 9 13 10 11 12\n"
+  "16 1 8 0 11 14 15 0 16 10 11 0 1 8 16 8 1 2 7 7 2 3 6 6 3 4 5 10 16 8 9 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 16 10 11 0 1 8 16 8 1 2 7 7 2 3 6 6 3 4 5 10 16 8 9 12 13 14 15\n"
+  "16 1 8 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 16 16 13 14 15\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 10 11 14 14 11 12 13\n"
+  "16 1 8 0 16 12 15 0 9 10 16 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 10 11 12 12 13 14 15\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 16 8 4 5 6 16 8 16 6 7\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 16 12 13 14\n"
+  "16 1 8 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 16 16 13 14 15\n"
+  "16 1 8 0 16 12 15 0 9 10 16 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 16 10 11 12 12 13 14 15\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 3 4 10 16 4 9 4 5 8 9 8 5 6 7\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 16 16 2 3 4 8 16 4 7 4 5 6 7 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 16 16 2 3 4 8 16 4 7 4 5 6 7 12 13 14 15\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 9 10 13 14 13 10 11 12\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 9 10 11 14 14 11 12 13\n"
+  "16 1 8 0 9 12 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 9 10 11 12 12 13 14 15\n"
+  "16 1 8 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 10 13 14 15 10 11 12 13\n"
+  "16 1 8 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 10 11 14 15 14 11 12 13\n"
+  "16 1 8 0 16 14 15 0 11 12 16 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 16 12 13 14\n"
+  "16 1 8 0 11 16 15 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 16 16 13 14 15\n"
+  "16 1 8 0 16 14 15 0 9 10 16 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 16 10 11 14 14 11 12 13\n"
+  "16 1 8 0 16 12 15 0 9 10 16 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 16 10 11 12 12 13 14 15\n"
+  "16 1 8 0 11 12 15 0 7 8 11 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 11 8 9 10 12 13 14 15\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 9 10 13 14 13 10 11 12\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 9 10 11 14 14 11 12 13\n"
+  "16 1 8 0 9 12 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 9 10 11 12 12 13 14 15\n"
+  "16 1 8 0 9 10 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 10 13 14 15 10 11 12 13\n"
+  "16 1 8 0 9 10 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 10 11 14 15 14 11 12 13\n"
+  "16 1 8 0 13 14 15 0 7 12 13 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 16 16 8 9 10 12 16 10 11\n"
+  "16 1 8 0 13 14 15 0 7 16 13 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 11 11 8 9 10 13 16 11 12\n"
+  "16 1 8 0 16 14 15 0 7 12 16 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 16 12 13 14\n"
+  "16 1 8 0 13 14 15 0 7 16 13 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 13 16 9 12 9 10 11 12\n"
+  "16 1 8 0 13 14 15 0 16 12 13 0 1 6 16 6 1 2 5 5 2 3 4 12 16 6 7 12 7 8 11 11 8 9 10\n"
+  "16 1 8 0 13 14 15 0 16 8 13 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 13 8 9 12 12 9 10 11\n"
+  "16 1 8 0 11 12 15 0 16 8 11 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 11 8 9 10 12 13 14 15\n"
+  "16 1 8 0 9 14 15 0 16 8 9 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 9 10 13 14 13 10 11 12\n"
+  "16 1 8 0 9 14 15 0 16 8 9 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 9 10 11 14 14 11 12 13\n"
+  "16 1 8 0 9 12 15 0 16 8 9 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 9 10 11 12 12 13 14 15\n"
+  "16 1 8 0 9 10 15 0 16 8 9 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 10 11 14 15 14 11 12 13\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 16 14 16 10 11 12 14 16 12 13\n"
+  "16 1 8 0 9 16 15 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 1 8 0 16 14 15 0 7 8 16 0 1 6 7 6 1 2 5 5 2 3 4 16 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 16 8 16 4 5 6 8 16 6 7\n"
+  "16 1 8 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 3 10 3 16 9 3 4 7 16 7 4 5 6 9 16 7 8\n"
+  "16 1 8 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 16 7 3 4 5 16 7 16 5 6 11 12 13 14\n"
+  "16 1 8 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 16 7 3 4 5 16 7 16 5 6 12 13 14 15\n"
+  "16 1 8 0 11 16 15 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 16 16 13 14 15\n"
+  "16 1 8 0 16 12 15 0 9 10 16 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 16 10 11 12 12 13 14 15\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 16 14 16 10 11 12 14 16 12 13\n"
+  "16 1 8 0 9 16 15 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 3 7 16 3 6 3 4 5 6 9 10 13 14 13 10 11 12\n"
+  "16 1 8 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 3 7 16 3 6 3 4 5 6 9 10 11 14 14 11 12 13\n"
+  "16 1 8 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 3 5 16 3 4 7 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 1 8 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 3 5 16 3 4 7 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 1 8 0 11 12 15 0 5 16 11 0 1 4 5 4 1 2 3 16 5 6 9 9 6 7 8 11 16 9 10 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 3 4 5 17 1 2 3 15 0 1 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 1 4 5 15 0 1 17 4 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 3 4 17 1 2 3 15 0 1 17 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 3 4 17 1 2 3 15 0 1 17 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 3 4 17 1 2 3 15 0 1 17 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 4 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 5 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 17 6 7 8 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 17 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 9 11 17 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 9 17 13 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 9 10 11 13 17 11 12\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 11 17 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 3 4 0 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 3 4 9 16 15 17 3 3 17 1 2 15 0 1 17 9 4 5 8 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 3 4 7 16 15 17 3 3 17 1 2 15 0 1 17 7 4 5 6 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 3 4 7 16 15 17 3 3 17 1 2 15 0 1 17 7 4 5 6 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 3 4 7 16 15 17 3 3 17 1 2 15 0 1 17 7 4 5 6 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 3 4 7 16 15 17 3 3 17 1 2 15 0 1 17 7 4 5 6 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 10 11 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 10 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 8 11 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 8 5 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 5 8 9 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 8 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 5 8 9 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 6 11 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 6 6 1 4 5 1 2 3 4 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 6 6 1 2 5 5 2 3 4 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 4 4 1 2 3 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 7 8 9 16 17 6 7 16 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 17 6 7 8 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 5 6 9 16 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 10 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 10 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 10 11 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 8 9 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 8 17 6 7 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 9 10 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 8 11 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 12 13 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 12 9 10 11 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 7 8 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 10 17 8 9 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 7 8 9 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 12 13 14 17 17 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 2 17 2 5 6 2 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 2 17 2 3 4 6 17 4 5 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 17 4 7 16 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 2 4 17 2 3 7 4 5 6 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 7 8 9 16 17 4 7 16 13 0 17 17 0 1 2 4 17 2 3 7 4 5 6 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 8 11 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 8 5 6 7 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 5 6 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 7 10 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 1 2 4 17 2 3 10 7 8 9 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 8 11 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 12 13 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 12 9 10 11 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 7 8 17 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 10 17 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 7 8 9 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 5 8 11 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 5 8 11 16 3 4 5 16 17 0 3 3 0 1 2 8 5 6 7 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 5 8 9 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 7 4 5 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 7 4 5 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 7 4 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 7 4 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 7 4 5 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 8 9 16 3 4 17 16 13 0 3 3 0 1 2 8 17 4 7 4 5 6 7 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 3 4 17 16 15 0 3 3 0 1 2 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 8 9 16 3 4 17 16 13 0 3 3 0 1 2 8 17 4 5 8 5 6 7 13 14 15 0\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 6 9 16 3 4 17 16 13 0 3 3 0 1 2 6 17 4 5 9 6 7 8 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 7 10 13 16 17 6 7 16 3 4 17 16 15 0 3 3 0 1 2 6 17 4 5 10 7 8 9 13 10 11 12\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 5 6 9 16 3 4 5 16 17 0 3 3 0 1 2 9 6 7 8 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 7 10 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 5 6 17 16 3 4 5 16 13 0 3 3 0 1 2 10 17 6 9 6 7 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 5 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 5 6 7 15 0 5 17 5 0 3 4 0 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 5 6 7 15 0 5 17 5 0 1 4 4 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 3 4 7 15 0 3 17 3 0 1 2 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 5 8 17 3 4 5 15 0 3 17 3 0 1 2 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 3 4 5 15 0 3 17 3 0 1 2 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 6 7 15 0 1 17 6 1 2 5 5 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 6 7 15 0 1 17 6 1 2 3 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 4 7 15 0 1 17 4 1 2 3 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 1 4 5 15 0 1 17 4 1 2 3 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 17 1 4 5 15 0 1 17 4 1 2 3 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 17 5 1 2 3 17 5 17 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 4 5 1 2 3 4 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 6 17 6 1 4 5 1 2 3 4 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 17 17 2 3 4 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 6 17 6 1 2 5 5 2 3 4 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 3 17 3 4 5 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 4 17 4 1 2 3 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 3 7 17 3 6 3 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 3 5 17 3 4 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 4 17 4 1 2 3 8 17 4 5 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 4 17 4 1 2 3 6 17 4 5 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 8 17 6 7 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 8 9 10 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 9 10 11 13 17 11 12\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 5 6 2 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 6 6 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 4 8 17 4 7 4 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 4 8 17 4 5 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 10 17 6 9 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 10 17 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 8 17 6 7 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 9 10 11 13 17 11 12\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 12 17 12 13 14\n"
+;
+
+const char* data_dqrgl_block7 = 
+  "16 2 9 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 17 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 10 17 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 6 0 1 2 3 6 3 4 5 8 17 6 7 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 7 2 3 6 7 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 7 2 3 4 7 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 5 2 3 4 5 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 5 2 3 4 5 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 3 8 3 6 7 3 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 3 8 3 4 7 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 3 6 3 4 5 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 6 9 10 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 5 6 9 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 6 7 8 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 12 7 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 7 10 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 7 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 7 8 9 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 13 8 11 12 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 11 12 15 16 7 8 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 8 9 10 12 13 14 15\n"
+  "16 2 9 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 10 13 14 13 10 11 12\n"
+  "16 2 9 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 10 11 14 14 11 12 13\n"
+  "16 2 9 16 9 12 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 10 11 12 12 13 14 15\n"
+  "16 2 9 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 13 14 15 10 11 12 13\n"
+  "16 2 9 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 4 0 1 2 3 10 17 4 9 4 5 8 9 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 4 0 1 2 3 10 17 4 9 4 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 7 4 5 6 7 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 4 0 1 2 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 6 7 8 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 13 8 11 12 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 2 9 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 4 0 1 2 3 6 17 4 5 9 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 2 9 16 11 17 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 11 11 8 9 10 13 17 11 12\n"
+  "16 2 9 16 17 14 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 9 13 17 9 12 9 10 11 12\n"
+  "16 2 9 16 11 12 15 16 7 17 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 2 9 16 11 17 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 2 9 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 8 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 11 12 15 16 17 8 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 2 9 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 2 9 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 2 9 16 9 12 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 9 10 11 12 12 13 14 15\n"
+  "16 2 9 16 9 10 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 8 17 6 7 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 2 9 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 11 17 17 11 14 15 11 12 13 14\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 11 12 8 9 10 11 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 10 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 5 6 0 1 4 5 4 1 2 3\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 5 6 0 1 2 5 5 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 3 6 0 1 2 3 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 15 0 5 17 5 0 3 4 0 1 2 3 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 3 4 0 1 2 3 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 3 4 0 1 2 3 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 3 4 0 1 2 3 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 4 5 1 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 2 5 5 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 2 3 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 1 4 4 1 2 3 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 5 6 11 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 5 6 9 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 5 6 9 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 7 12 13 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 7 10 13 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 7 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 7 10 11 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 10 7 8 9 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 9 14 15 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 15 0 3 17 3 0 1 2 9 10 13 14 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 3 4 9 16 15 17 3 3 17 1 2 15 0 1 17 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 3 4 9 16 15 17 3 3 17 1 2 15 0 1 17 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 2 9 16 13 14 15 16 7 8 13 16 3 4 7 16 15 17 3 3 17 1 2 15 0 1 17 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 5 10 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 10 5 6 9 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 17 3 4 5 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 17 1 2 3 4 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 7 17 3 4 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 5 1 2 3 17 5 17 3 4 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 17 5 1 2 3 17 5 17 3 4 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 12 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 14 17 17 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 5 6 2 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 17 17 3 4 5 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 6 6 3 4 5 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 4 17 4 5 6 8 17 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 10 17 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 4 8 17 4 7 4 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 17 17 2 3 4 6 17 4 5 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 6 6 1 2 5 5 2 3 4 8 17 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 6 6 1 2 5 5 2 3 4 8 17 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 6 6 1 2 5 5 2 3 4 8 17 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 8 9 16 13 0 17 17 0 1 6 6 1 2 5 5 2 3 4 8 17 6 7 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 13 14 17 17 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 17 7 3 4 5 17 7 17 5 6\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 14 15 0 17\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 4 4 1 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 9 10 11 16 17 6 9 16 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 9 6 7 8 13 14 15 0\n"
+  "16 2 9 16 9 12 13 16 7 8 9 16 17 6 7 16 13 0 17 17 0 1 4 4 1 2 3 6 17 4 5 9 10 11 12 13 14 15 0\n"
+  "16 2 9 16 9 10 11 16 7 8 9 16 17 6 7 16 11 0 17 17 0 1 4 4 1 2 3 6 17 4 5 11 12 15 0 15 12 13 14\n"
+  "16 2 9 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 11 12 13 16 5 6 11 16 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 2 9 16 13 14 17 16 9 10 13 16 5 6 9 16 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 9 10 11 16 5 6 9 16 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 2 9 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 9 10 17 16 5 6 9 16 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 9 10 11 16 5 6 9 16 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 2 9 16 13 14 17 16 7 10 13 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 11 14 17 16 7 10 11 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 2 9 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 7 10 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 10 11 12 13 14 15 0\n"
+  "16 2 9 16 11 12 17 16 7 10 11 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 10 17 6 7 10 7 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 8 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 11 12 15 16 17 8 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 2 9 16 11 12 13 16 17 8 11 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 8 17 6 7 11 8 9 10 13 14 15 0\n"
+  "16 2 9 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 2 9 16 9 12 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 8 17 6 7 9 10 11 12 12 13 14 15\n"
+  "16 2 9 16 9 12 13 16 17 8 9 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 8 17 6 7 9 10 11 12 13 14 15 0\n"
+  "16 2 9 16 9 10 11 16 17 8 9 16 5 6 17 16 11 0 5 5 0 1 4 4 1 2 3 8 17 6 7 11 12 15 0 15 12 13 14\n"
+  "16 2 9 16 11 12 17 16 7 8 11 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 9 14 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 9 10 13 14 13 10 11 12 14 15 0 17\n"
+  "16 2 9 16 9 12 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 9 10 11 12 12 13 14 17 17 14 15 0\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 2 9 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 11 12 8 9 10 11 12 13 14 15\n"
+  "16 2 9 16 17 12 13 16 7 8 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 17 8 11 12 8 9 10 11 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 12 13 16 7 8 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 17 8 9 12 12 9 10 11 13 14 15 0\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 2 9 16 11 12 17 16 7 8 11 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 11 8 9 10 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 2 9 16 17 12 13 16 7 8 17 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 17 8 11 12 8 9 10 11 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 12 13 16 7 8 17 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 17 8 9 12 12 9 10 11 13 14 15 0\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 2 9 16 9 10 17 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 2 9 16 11 12 17 16 5 8 11 16 3 4 5 16 17 0 3 3 0 1 2 8 5 6 7 11 8 9 10 12 15 0 17 12 13 14 15\n"
+  "16 2 9 16 17 14 15 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 17 14 15 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 8 9 5 6 7 8\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 6 7 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 8 11 8 5 6 7 11 8 9 10\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 9 4 5 8 9 8 5 6 7 12 9 10 11\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 10 13 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8 13 10 11 12\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 9 4 5 6 9 9 6 7 8 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 7 4 5 6 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 7 4 5 6 7 10 7 8 9 11 12 13 14\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 7 4 5 6 7 10 7 8 9 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 5 10 5 8 9 5 6 7 8 13 14 15 0\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 2 9 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 5 10 5 6 9 9 6 7 8 13 14 15 0\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 10 11 7 8 9 10\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 11 11 8 9 10\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 9 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 10 13 10 7 8 9 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 11 14 6 7 10 11 10 7 8 9 14 11 12 13\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 9 14 6 7 8 9 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 12 13 7 8 11 12 11 8 9 10\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 12 13 7 8 9 12 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 10 13 7 8 9 10 13 10 11 12\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 2 9 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 12 13 9 10 11 12\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 10 13 13 10 11 12\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 10 11 14 11 12 13\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 12 15 12 9 10 11 15 12 13 14\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 10 15 15 10 13 14 10 11 12 13\n"
+  "16 2 9 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 10 15 15 10 11 14 14 11 12 13\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 7 8 9\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 5 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "16 2 9 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 7 8 2 3 6 7 6 3 4 5 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 7 8 2 3 4 7 7 4 5 6 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 5 17 2 3 4 5 17 5 6 7 8 16 17 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 5 8 2 3 4 5 8 5 6 7 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 17 16 2 3 4 17 16 17 4 5 7 16 5 6\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 17 6 2 3 4 17 6 17 4 5 8 16 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 7 16 7 2 17 6 2 3 4 17 6 17 4 5 9 16 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 7 8 7 2 17 6 2 3 4 17 6 17 4 5 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 7 8 7 2 17 6 2 3 4 17 6 17 4 5 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 17 6 2 3 4 17 6 17 4 5 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 17 8 17 2 5 6 2 3 4 5 8 17 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 17 8 17 2 5 6 2 3 4 5 8 17 6 7 12 16 10 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 5 6 2 3 4 5 9 16 17 6 9 6 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 7 1 2 17 16 17 2 5 6 2 3 4 5 7 16 17 6 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 17 1 2 7 8 7 2 5 6 2 3 4 5 17 8 9 10 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 17 9 1 2 7 17 7 2 5 6 2 3 4 5 9 17 7 8 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 3 17 17 3 6 7 3 4 5 6 8 16 17 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 3 8 8 3 6 7 3 4 5 6 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 16 16 3 4 17 17 4 5 6 7 16 17 6\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 16 8 16 2 3 17 17 3 4 7 7 4 5 6 8 16 17 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 3 8 8 3 4 7 7 4 5 6 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 7 8 7 2 3 17 17 3 4 5 7 17 5 6 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 7 8 7 2 3 17 17 3 4 5 7 17 5 6 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 17 17 3 4 5 7 17 5 6 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 8 11 8 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 16 6 16 2 3 17 17 3 4 5 6 16 17 5 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 17 8 17 2 3 6 6 3 4 5 8 17 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 17 8 17 2 3 6 6 3 4 5 8 17 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 17 8 17 2 3 6 6 3 4 5 8 17 6 7 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 8 11 8 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 6 6 3 4 5 7 16 17 6 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 17 1 2 7 8 7 2 3 6 6 3 4 5 17 8 9 10 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 17 16 1 2 7 17 7 2 3 6 6 3 4 5 16 17 7 8 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 17 9 1 2 7 17 7 2 3 6 6 3 4 5 9 17 7 8 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 17 9 1 2 7 17 7 2 3 6 6 3 4 5 9 17 7 8 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 7 17 7 2 3 6 6 3 4 5 9 17 7 8 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 16 17 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 16 17 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 17 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 16 12 13 17 17 13 14 15\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 17 1 2 7 8 7 2 3 4 7 4 5 6 17 8 9 10 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 16 17 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 16 17 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 17 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 16 12 13 17 17 13 14 15\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 16 17 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 16 17 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 17 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 16 12 13 17 17 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 17 8 17 2 3 4 8 17 4 7 4 5 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 17 8 17 2 3 4 8 17 4 7 4 5 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 17 8 17 2 3 4 8 17 4 7 4 5 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 10 7 8 9 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 8 11 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 11 8 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 11 16 7 10 7 8 9 10\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 16 9 16 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 9 16 7 8 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 16 9 16 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 9 16 7 8 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 16 9 16 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 9 16 7 8 12 13 14 15\n"
+;
+
+const char* data_dqrgl_block8 = 
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 16 9 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 9 12 16 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 12 9 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 8 16 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 12 16 8 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 8 16 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 10 16 8 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 8 16 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 10 16 8 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 8 16 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 10 16 8 9 12 13 14 15\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 12 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 17 6 17 2 3 4 6 17 4 5 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 17 16 17 2 3 4 9 16 17 4 9 4 5 8 8 5 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 8 11 8 1 16 7 1 2 17 16 17 2 3 4 7 16 17 4 7 4 5 6 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 4 7 16 17 4 7 4 5 6 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 4 7 16 17 4 7 4 5 6 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 4 7 16 17 4 7 4 5 6 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 16 7 1 2 17 16 17 2 3 4 7 16 17 4 7 4 5 6 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 10 5 6 9 9 6 7 8\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 8 5 6 7 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 8 5 6 7 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 8 5 6 7 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 8 5 6 7 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 6 11 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 11 6 7 10 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 6 9 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 9 6 7 8 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 6 9 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 9 6 7 8 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 6 9 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 9 6 7 8 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 7 12 13 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 12 7 8 11 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 7 12 13 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 12 7 8 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 7 10 13 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 10 7 8 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 7 10 11 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 10 7 8 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 7 10 11 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 10 7 8 9 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 7 8 13 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 13 8 11 12 8 9 10 11\n"
+  "16 2 9 0 13 14 15 0 7 8 13 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 13 8 9 12 12 9 10 11\n"
+  "16 2 9 0 11 12 15 0 7 8 11 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 11 8 9 10 12 13 14 15\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 9 10 13 14 13 10 11 12\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 6 7 6 1 16 5 1 2 17 16 17 2 3 4 5 16 17 4 9 10 11 14 14 11 12 13\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 6 16 1 2 5 6 5 2 3 4 16 6 7 17 17 7 8 9 10 16 17 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 6 17 1 2 5 6 5 2 3 4 17 6 7 10 10 7 8 9 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 6 17 1 2 5 6 5 2 3 4 17 6 7 8 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 16 9 16 1 6 17 1 2 5 6 5 2 3 4 17 6 7 8 9 16 17 8 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 16 9 16 1 6 17 1 2 5 6 5 2 3 4 17 6 7 8 9 16 17 8 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 16 9 16 1 6 17 1 2 5 6 5 2 3 4 17 6 7 8 9 16 17 8 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 16 17 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 17 9 1 2 5 17 5 2 3 4 9 17 5 6 9 6 7 8 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 5 17 5 2 3 4 9 17 5 6 9 6 7 8 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 10 7 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 17 16 1 2 5 17 5 2 3 4 16 17 5 6 10 16 6 9 6 7 8 9\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 17 16 1 2 5 17 5 2 3 4 16 17 5 6 8 16 6 7 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 17 16 1 2 5 17 5 2 3 4 16 17 5 6 8 16 6 7 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 17 16 1 2 5 17 5 2 3 4 16 17 5 6 8 16 6 7 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 17 16 1 2 5 17 5 2 3 4 16 17 5 6 8 16 6 7 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 8 11 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 11 8 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 16 9 16 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 9 16 7 8 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 16 9 16 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 9 16 7 8 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 16 9 16 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 9 16 7 8 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 16 9 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 9 12 16 0 1 8 9 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 12 9 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 8 16 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 12 16 8 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 8 16 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 10 16 8 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 8 16 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 10 16 8 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 8 16 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 10 16 8 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 12 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 5 17 5 2 3 4 7 17 5 6 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 6 7 1 2 5 6 5 2 3 4 11 17 7 10 7 8 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 6 7 1 2 5 6 5 2 3 4 9 17 7 8 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 6 7 1 2 5 6 5 2 3 4 9 17 7 8 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 12 16 17 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 10 16 17 7 10 7 8 9 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 10 16 17 7 10 7 8 9 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 16 8 13 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 8 16 17 7 13 8 9 12 12 9 10 11\n"
+  "16 2 9 0 9 14 15 0 16 8 9 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 8 16 17 7 9 10 13 14 13 10 11 12\n"
+  "16 2 9 0 9 14 15 0 16 8 9 0 1 17 16 17 1 6 7 1 2 5 6 5 2 3 4 8 16 17 7 9 10 11 14 14 11 12 13\n"
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 17 17 10 11 12 13 16 17 12\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 9 10 13 13 10 11 12 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 9 10 11 16 17 11 14 14 11 12 13\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 8 17 8 1 6 7 1 2 5 6 5 2 3 4 16 17 8 9 13 16 9 12 9 10 11 12\n"
+  "16 2 9 0 16 14 15 0 17 10 16 0 1 8 17 8 1 6 7 1 2 5 6 5 2 3 4 10 17 8 9 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 10 17 14 10 11 12 17 14 17 12 13\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 16 7 3 4 17 16 17 4 5 6 7 16 17 6\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 8 9 1 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 8 9 1 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 8 9 1 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 16 17 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 10 13 0 1 17 16 17 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 16 17 9 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 6 7 1 2 3 6 6 3 4 5 11 17 7 10 7 8 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 6 7 1 2 3 6 6 3 4 5 9 17 7 8 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 6 7 1 2 3 6 6 3 4 5 9 17 7 8 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 6 7 1 2 3 6 6 3 4 5 10 16 17 7 10 7 8 9 11 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 8 13 0 1 17 16 17 1 6 7 1 2 3 6 6 3 4 5 8 16 17 7 13 8 9 12 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 17 17 10 11 12 13 16 17 12\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 9 10 13 13 10 11 12 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 9 10 11 16 17 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 17 10 16 0 1 8 17 8 1 6 7 1 2 3 6 6 3 4 5 10 17 8 9 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 10 17 14 10 11 12 17 14 17 12 13\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 16 1 2 3 4 16 4 5 17 17 5 8 9 5 6 7 8 10 16 17 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 16 16 5 6 17 17 6 7 8 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 4 9 1 2 3 4 9 4 5 17 17 5 6 7 9 17 7 8 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 17 17 5 6 7 9 17 7 8 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 4 16 1 2 3 4 16 4 5 17 17 5 6 7 8 16 17 7 13 10 11 12\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 17 1 2 3 4 17 4 5 8 8 5 6 7 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 4 17 1 2 3 4 17 4 5 6 10 17 6 9 6 7 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 4 17 1 2 3 4 17 4 5 6 8 17 6 7 16 9 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 9 12 16 0 1 8 9 8 1 4 17 1 2 3 4 17 4 5 6 8 17 6 7 12 9 10 11 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 4 17 1 2 3 4 17 4 5 6 8 17 6 7 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 4 17 1 2 3 4 17 4 5 6 8 17 6 7 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 4 7 1 2 3 4 7 4 5 6 9 17 7 8 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 4 7 1 2 3 4 7 4 5 6 9 17 7 8 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 17 9 10 13 13 10 11 12 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 17 9 10 11 16 17 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 17 10 16 0 1 8 17 8 1 4 7 1 2 3 4 7 4 5 6 10 17 8 9 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 10 17 14 10 11 12 17 14 17 12 13\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 8 3 4 17 8 17 4 5 6 8 17 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 17 3 4 7 17 7 4 5 6 9 17 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 17 16 1 2 3 17 16 17 3 8 3 4 7 8 7 4 5 6 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 17 9 1 2 3 17 9 17 3 8 3 4 7 8 7 4 5 6 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 17 9 1 2 3 17 9 17 3 8 3 4 7 8 7 4 5 6 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 3 17 9 17 3 8 3 4 7 8 7 4 5 6 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 17 9 1 2 3 17 9 17 3 8 3 4 5 8 8 5 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 17 9 1 2 3 17 9 17 3 8 3 4 5 8 8 5 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 3 17 9 17 3 8 3 4 5 8 8 5 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 3 17 9 17 3 6 3 4 5 6 9 6 7 8 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 17 3 4 5 17 9 17 5 8 5 6 7 8\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 16 7 1 2 3 16 7 16 3 17 3 4 5 17 7 17 5 6 12 9 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 10 7 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 17 16 1 2 3 17 16 17 3 6 3 4 5 6 8 16 6 7 12 9 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 8 11 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 11 8 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 12 16 0 1 8 9 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 12 9 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 8 16 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 12 16 8 9 12 9 10 11\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 3 17 7 17 3 6 3 4 5 6 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 16 9 1 2 3 16 9 16 3 4 9 4 17 8 4 5 6 17 8 17 6 7\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 3 17 9 17 3 4 9 4 7 8 4 5 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 9 1 2 3 17 9 17 3 4 9 4 5 8 8 5 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 12 16 0 1 8 9 8 1 17 7 1 2 3 17 7 17 3 4 7 4 5 6 12 9 10 11 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 17 7 1 2 3 17 7 17 3 4 7 4 5 6 16 10 13 14 10 11 12 13\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 17 5 1 2 3 17 5 17 3 4 10 5 6 9 9 6 7 8 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 17 16 1 2 3 17 16 17 3 4 10 16 4 9 4 5 8 9 8 5 6 7\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 6 11 6 1 17 5 1 2 3 17 5 17 3 4 11 6 7 10 10 7 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 7 12 13 0 1 6 7 6 1 16 5 1 2 3 16 5 16 3 4 12 7 8 17 17 8 9 10 12 17 10 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 6 16 6 1 17 5 1 2 3 17 5 17 3 4 12 16 6 7 12 7 8 11 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 4 5 1 2 3 4 10 5 16 9 5 6 17 16 17 6 7 8 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 4 5 1 2 3 4 12 16 17 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 16 7 16 3 4 17 17 4 5 6 7 16 17 6\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 17 16 17 3 4 7 7 4 5 6 8 16 17 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 17 17 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 17 17 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 17 17 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 7 8 2 3 17 7 17 3 4 5 7 17 5 6 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 7 8 2 3 17 7 17 3 4 5 7 17 5 6 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 7 8 2 3 17 7 17 3 4 5 7 17 5 6 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 7 8 2 3 17 7 17 3 4 5 7 17 5 6 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 17 16 17 3 4 5 8 16 17 5 8 5 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 9 6 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 10 7 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 8 11 8 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 11 8 9 10\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 16 6 2 3 17 16 17 3 4 5 6 16 17 5 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 7 17 2 3 6 7 6 3 4 5 17 7 8 9 10 16 17 9\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 17 16 2 3 6 17 6 3 4 5 16 17 6 7 9 16 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 17 8 2 3 6 17 6 3 4 5 8 17 6 7 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 17 8 2 3 6 17 6 3 4 5 8 17 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 17 8 2 3 6 17 6 3 4 5 8 17 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 17 8 2 3 6 17 6 3 4 5 8 17 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 17 17 2 7 8 2 3 6 7 6 3 4 5 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 16 9 16 1 2 17 17 2 7 8 2 3 6 7 6 3 4 5 9 16 17 8 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 16 9 16 1 2 17 17 2 7 8 2 3 6 7 6 3 4 5 9 16 17 8 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 16 9 16 1 2 17 17 2 7 8 2 3 6 7 6 3 4 5 9 16 17 8 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 11 14 15 0 16 10 11 0 1 17 16 17 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 10 16 17 9 11 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 17 17 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 11 16 17 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 17 17 2 7 8 2 3 4 7 7 4 5 6 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 5 16 2 3 4 5 16 5 6 17 17 6 7 8 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 5 17 2 3 4 5 17 5 6 7 9 17 7 8 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 16 16 2 5 17 2 3 4 5 17 5 6 7 8 16 17 7 13 10 11 12\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 17 17 2 5 8 2 3 4 5 8 5 6 7 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 16 8 2 3 4 16 8 16 4 17 4 5 6 17 8 17 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 17 16 2 3 4 17 16 17 4 7 4 5 6 7 9 16 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 17 8 2 3 4 17 8 17 4 7 4 5 6 7 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 17 8 2 3 4 17 8 17 4 7 4 5 6 7 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 17 8 2 3 4 17 8 17 4 7 4 5 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 17 8 2 3 4 17 8 17 4 7 4 5 6 7 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 17 8 2 3 4 17 8 17 4 5 8 5 6 7 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 17 8 2 3 4 17 8 17 4 5 8 5 6 7 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 17 6 2 3 4 17 6 17 4 5 9 6 7 8 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 17 16 2 3 4 17 16 17 4 5 9 16 5 8 5 6 7 8\n"
+  "16 2 9 0 13 14 15 0 9 12 13 0 1 8 9 8 1 2 7 7 2 17 16 2 3 4 17 16 17 4 5 7 16 5 6 12 9 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5 10 7 8 9 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 8 16 8 1 2 7 7 2 17 6 2 3 4 17 6 17 4 5 12 16 8 9 12 9 10 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 16 7 3 4 17 16 17 4 5 6 7 16 17 6\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 3 17 17 3 8 9 3 4 7 8 7 4 5 6 10 16 17 9\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 6 17 3 4 5 6 17 6 7 8 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 12 16 17 11\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 17 16 3 4 5 17 16 17 5 6 8 16 6 7\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 17 7 3 4 5 17 7 17 5 6 9 16 7 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 16 16 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 10 16 8 9\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 16 11 16 1 2 9 9 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 11 16 9 10\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 10 16 10 1 2 9 9 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 12 16 10 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 8 8 3 17 7 3 4 5 17 7 17 5 6 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 16 16 3 4 17 17 4 7 8 4 5 6 7 9 16 17 8\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 16 16 4 5 17 17 5 6 7 8 16 17 7\n"
+  "16 2 9 0 13 14 15 0 16 12 13 0 1 17 16 17 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 12 16 17 11\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 17 17 4 5 6 8 17 6 7 16 12 13 14\n"
+  "16 2 9 0 13 14 15 0 9 10 13 0 1 8 9 8 1 2 7 7 2 3 16 16 3 4 17 17 4 5 6 7 16 17 6 13 10 11 12\n"
+  "16 2 9 0 11 14 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 16 16 3 4 17 17 4 5 6 7 16 17 6 11 12 13 14\n"
+  "16 2 9 0 11 12 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 16 16 3 4 17 17 4 5 6 7 16 17 6 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 17 17 3 4 7 7 4 5 6 9 17 7 8 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 17 17 2 3 8 8 3 4 7 7 4 5 6 10 17 8 9 16 12 13 14\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 17 11 17 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 11 17 9 10 16 12 13 14\n"
+  "16 2 9 0 11 12 15 0 16 10 11 0 1 17 16 17 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 10 16 17 9 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 17 16 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 17 11 12 13 16 17 13 14\n"
+  "16 2 9 0 13 14 15 0 17 16 13 0 1 10 17 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 16 17 10 11 13 16 11 12\n"
+  "16 2 9 0 16 14 15 0 17 12 16 0 1 10 17 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 17 10 11 16 12 13 14\n"
+  "16 2 9 0 16 17 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 16 12 13 17 17 13 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 9 9 2 3 17 17 3 4 5 9 17 5 8 5 6 7 8 16 12 13 14\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 17 17 3 4 5 7 17 5 6 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 13 14 15 0 7 8 13 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 13 8 9 12 12 9 10 11\n"
+  "16 2 9 0 11 12 15 0 7 8 11 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 11 8 9 10 12 13 14 15\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 9 10 13 14 13 10 11 12\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 9 10 11 14 14 11 12 13\n"
+  "16 2 9 0 9 12 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 9 10 11 12 12 13 14 15\n"
+  "16 2 9 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 10 13 14 15 10 11 12 13\n"
+  "16 2 9 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 17 17 3 4 5 6 16 17 5 10 11 14 15 14 11 12 13\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 17 17 2 3 6 6 3 4 5 8 17 6 7 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 8 9 8 1 2 17 17 2 3 6 6 3 4 5 8 17 6 7 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 12 15 0 9 10 16 0 1 8 9 8 1 2 17 17 2 3 6 6 3 4 5 8 17 6 7 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 16 17 15 0 11 12 16 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 16 12 13 17 17 13 14 15\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 17 9 17 1 2 7 7 2 3 6 6 3 4 5 9 17 7 8 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 16 14 15 0 9 10 16 0 1 17 9 17 1 2 7 7 2 3 6 6 3 4 5 9 17 7 8 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 12 15 0 9 10 16 0 1 17 9 17 1 2 7 7 2 3 6 6 3 4 5 9 17 7 8 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 13 14 15 0 9 16 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 17 17 10 11 12 13 16 17 12\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 17 9 10 13 13 10 11 12 16 17 13 14\n"
+  "16 2 9 0 16 14 15 0 9 17 16 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 17 9 10 11 16 17 11 14 14 11 12 13\n"
+  "16 2 9 0 11 12 15 0 17 16 11 0 1 8 17 8 1 2 7 7 2 3 6 6 3 4 5 16 17 8 9 11 16 9 10 12 13 14 15\n"
+  "16 2 9 0 11 16 15 0 17 10 11 0 1 8 17 8 1 2 7 7 2 3 6 6 3 4 5 10 17 8 9 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 16 14 15 0 17 10 16 0 1 8 17 8 1 2 7 7 2 3 6 6 3 4 5 10 17 8 9 16 10 11 14 14 11 12 13\n"
+  "16 2 9 0 16 12 15 0 17 10 16 0 1 8 17 8 1 2 7 7 2 3 6 6 3 4 5 10 17 8 9 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 17 16 17 12 13 14 16 17 14 15\n"
+  "16 2 9 0 13 14 15 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 16 8 4 5 17 16 17 5 6 7 8 16 17 7\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 17 16 17 12 13 14 16 17 14 15\n"
+  "16 2 9 0 16 14 15 0 11 12 16 0 1 10 11 10 1 2 17 17 2 3 4 10 17 4 9 4 5 8 9 8 5 6 7 16 12 13 14\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 17 17 2 3 4 8 17 4 7 4 5 6 7 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 16 12 15 0 9 10 16 0 1 8 9 8 1 2 17 17 2 3 4 8 17 4 7 4 5 6 7 16 10 11 12 12 13 14 15\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 9 10 17 14 17 10 11 12 14 17 12 13\n"
+  "16 2 9 0 9 16 15 0 7 8 9 0 1 6 7 6 1 2 17 17 2 3 4 6 17 4 5 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 2 9 0 9 16 15 0 7 8 9 0 1 6 7 6 1 2 17 17 2 3 4 6 17 4 5 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "16 2 9 0 9 10 15 0 7 8 9 0 1 6 7 6 1 2 16 16 2 3 4 6 16 4 5 10 17 14 15 10 11 12 17 14 17 12 13\n"
+  "16 2 9 0 11 12 15 0 5 6 11 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 11 6 7 10 10 7 8 9 12 13 14 15\n"
+  "16 2 9 0 9 10 15 0 5 6 9 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 9 6 7 8 10 11 14 15 14 11 12 13\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 13 14 13 8 9 12 12 9 10 11\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 13 14 13 8 9 10 13 10 11 12\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 11 14 11 8 9 10 14 11 12 13\n"
+  "16 2 9 0 7 12 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 11 12 11 8 9 10 12 13 14 15\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 0 7 10 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 7 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 2 9 0 7 8 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 8 13 14 15 8 9 12 13 12 9 10 11\n"
+  "16 2 9 0 7 8 15 0 5 6 7 0 1 16 5 16 1 2 17 17 2 3 4 5 16 17 4 8 13 14 15 8 9 10 13 13 10 11 12\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 5 5 2 3 4 7 16 5 6 9 10 17 14 17 10 11 12 14 17 12 13\n"
+  "16 2 9 0 9 16 15 0 7 8 9 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 2 9 0 9 16 15 0 7 8 9 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "16 2 9 0 16 10 15 0 7 8 16 0 1 17 7 17 1 2 5 5 2 3 4 7 17 5 6 16 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 2 9 0 16 14 15 0 7 17 16 0 1 6 7 6 1 2 5 5 2 3 4 17 7 8 13 13 8 9 12 12 9 10 11 16 17 13 14\n"
+  "16 2 9 0 11 12 15 0 7 16 11 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 17 17 8 9 10 11 16 17 10 12 13 14 15\n"
+  "16 2 9 0 16 14 15 0 7 17 16 0 1 6 7 6 1 2 5 5 2 3 4 17 7 8 9 16 17 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 0 9 14 15 0 16 8 9 0 1 6 16 6 1 2 5 5 2 3 4 8 16 6 7 9 10 17 14 17 10 11 12 14 17 12 13\n"
+  "16 2 9 0 9 16 15 0 17 8 9 0 1 6 17 6 1 2 5 5 2 3 4 8 17 6 7 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 2 9 0 16 14 15 0 17 8 16 0 1 6 17 6 1 2 5 5 2 3 4 8 17 6 7 16 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 2 9 0 16 10 15 0 17 8 16 0 1 6 17 6 1 2 5 5 2 3 4 8 17 6 7 16 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 2 9 0 11 16 15 0 9 10 11 0 1 8 9 8 1 2 3 8 3 17 7 3 4 5 17 7 17 5 6 11 12 13 16 16 13 14 15\n"
+  "16 2 9 0 9 14 15 0 7 8 9 0 1 16 7 16 1 2 3 7 16 3 6 3 4 5 6 9 10 17 14 17 10 11 12 14 17 12 13\n"
+  "16 2 9 0 9 16 15 0 7 8 9 0 1 17 7 17 1 2 3 7 17 3 6 3 4 5 6 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "16 2 9 0 7 14 15 0 5 6 7 0 1 16 5 16 1 2 3 5 16 3 4 7 8 9 14 14 9 17 13 9 10 11 17 13 17 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 18 1 2 3 15 0 1 18 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 3 4 18 15 0 3 17 3 0 1 2 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 0 3 18 3 0 1 2 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 1 18 5 15 0 1 17 18 1 2 3 5 18 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 1 4 18 15 0 1 17 4 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 1 4 5 17 0 1 18 4 1 2 3 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 4 18 0 3 0 1 2 3\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 4 18 0 1 4 1 2 3\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 17 5 5 17 3 4 17 18 2 3 15 0 18 17 2 18 0 1 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 17 4 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 8 17 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 8 17 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 6 17 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 6 7 8 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 5 6 9 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 5 6 9 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 17 11 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 7 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 10 17 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 10 7 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 10 11 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 4 4 1 2 3 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 2 5 2 3 4 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 3 6 3 0 1 2 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 4 6 17 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 4 7 18 0 3 4 3 0 1 2 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 7 9 17 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 10 7 8 9 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 4 5 1 2 3 4 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 2 5 5 2 3 4 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 18 2 3 4 6 18 4 5 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 4 6 18 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 4 6 18 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 7 9 17 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 10 7 8 9 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 8 17 18 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 17 18 6 7 9 17 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 10 7 8 9 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 8 17 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 6 7 8 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 7 4 5 6 7 9 17 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 6 7 8 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 9 17 5 8 5 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 7 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 7 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 18 0 1 2 10 5 8 9 5 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 17 6 7 18 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 18 0 1 2 10 5 6 9 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 8 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 4 5 8 16 17 18 4 4 18 2 3 18 0 1 2 8 5 6 7 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 0 1 2 8 5 6 7 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 0 1 2 8 5 6 7 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 0 1 2 8 5 6 7 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 0 1 2 8 5 6 7 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 11 12 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 11 6 7 10 10 7 8 9 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 9 12 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 9 6 7 8 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 9 6 7 8 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 9 6 7 8 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 9 6 7 8 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 9 6 7 8 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 17 7 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 10 12 17 10 11\n"
+;
+
+const char* data_dqrgl_block9 = 
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 10 11 12 17 18 11\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 10 7 8 9 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 14 15 17 16 8 13 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 11 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 11 8 9 10 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 8 11 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 12 13 17 16 8 11 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 11 8 9 10 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 9 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 8 9 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 12 9 10 11 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 10 11 17 16 8 9 10 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 8 17 6 7\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 17 0 5 18 5 0 1 4 4 1 2 3 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 8 17 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 6 7 8 10 17 8 9\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 5 6 9 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 9 6 7 8 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 10 11 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 6 7 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 4 7 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 4 9 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 4 5 8 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 10 11 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 8 11 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 8 5 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 5 8 9 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 8 9 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 6 9 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 8 8 5 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 6 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 6 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 6 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 6 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 6 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 8 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 8 5 6 7 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 17 6 7 10 10 7 8 9 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 4 7 1 2 3 4 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 7 8 9 16 17 6 7 16 13 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 6 6 1 4 5 1 2 3 4 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 6 6 1 4 5 1 2 3 4 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 6 6 1 4 5 1 2 3 4 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 6 6 1 4 5 1 2 3 4 8 18 6 7 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 5 5 2 3 4 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 6 17 18 5 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 6 17 18 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 4 9 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 4 5 8 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 17 4 7 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 7 8 9 16 17 4 7 16 13 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 10 11 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 8 11 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 8 5 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 8 5 6 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 6 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 6 7 8 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 9 6 7 8 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 7 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 17 8 9 16 18 6 17 16 13 0 18 18 0 1 4 4 1 2 3 6 18 4 5 8 17 6 7 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 7 8 17 16 18 6 7 16 13 0 18 18 0 1 4 4 1 2 3 6 18 4 5 10 17 8 9 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 10 17 16 7 8 9 16 18 6 7 16 13 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 18 6 7 8 10 18 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 18 8 9 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 18 8 9 10 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 17 14 18 16 9 10 17 16 7 8 9 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 17 12 18 16 9 10 17 16 7 8 9 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 17 10 11 12 12 13 14 18 18 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 17 4 5 6 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 17 4 5 6 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 17 4 5 6 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 18 4 7 16 17 0 18 18 0 1 2 4 18 2 3 7 4 5 6 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 7 8 17 16 18 4 7 16 13 0 18 18 0 1 2 4 18 2 3 7 4 5 6 10 17 8 9 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 2 4 18 2 3 7 4 5 6 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 2 4 18 2 3 7 4 5 6 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 5 8 11 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 5 8 11 16 18 4 5 16 17 0 18 18 0 1 2 4 18 2 3 8 5 6 7 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 2 4 18 2 3 8 5 6 7 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 2 4 18 2 3 8 5 6 7 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 2 4 18 2 3 8 5 6 7 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 2 4 18 2 3 8 5 6 7 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 6 17 4 5 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 6 17 4 5 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 10 17 16 5 6 7 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 6 18 18 6 7 8 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 18 6 7 8 18 18 8 9 10 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 18 14 8 9 10 18 18 10 11 12 14 18 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 18 7 18 1 2 3 18 3 4 5 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 4 18 4 1 2 3 18 4 5 6 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 5 6 7 15 0 5 17 5 0 18 4 0 1 2 18 4 18 2 3\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 5 6 18 15 0 5 17 5 0 3 4 0 1 2 3 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 5 6 7 15 0 5 18 5 0 3 4 0 1 2 3 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 3 4 0 1 2 3 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 3 4 0 1 2 3 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 5 6 18 15 0 5 17 5 0 1 4 4 1 2 3 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 5 6 7 15 0 5 18 5 0 1 4 4 1 2 3 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 1 4 4 1 2 3 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 1 4 4 1 2 3 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 5 6 7 17 0 5 18 5 0 1 4 4 1 2 3 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 2 6 18 2 5 2 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 2 6 18 2 3 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 4 7 15 0 18 17 18 0 1 2 4 18 2 3 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 5 8 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 2 4 18 2 3 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 3 4 7 15 0 3 18 3 0 1 2 7 4 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 3 4 7 15 0 3 18 3 0 1 2 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 3 4 7 15 0 3 18 3 0 1 2 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 3 4 7 17 0 3 18 3 0 1 2 7 4 5 6 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 8 18 3 4 5 15 0 3 18 3 0 1 2 8 5 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 5 8 18 3 4 5 15 0 3 18 3 0 1 2 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 3 4 18 15 0 3 17 3 0 1 2 8 18 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 3 4 18 15 0 3 17 3 0 1 2 8 18 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 17 3 4 18 15 0 3 17 3 0 1 2 6 18 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 3 4 18 15 0 3 17 3 0 1 2 6 18 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 3 4 18 15 0 3 17 3 0 1 2 6 18 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 3 4 18 15 0 3 17 3 0 1 2 6 18 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 0 3 18 3 0 1 2 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 0 3 18 3 0 1 2 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 0 3 18 3 0 1 2 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 0 3 18 3 0 1 2 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 6 7 15 0 1 17 6 1 2 18 18 2 3 4 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 18 7 15 0 1 17 18 1 2 5 5 2 3 4 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 6 18 15 0 1 17 6 1 2 5 5 2 3 4 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 1 6 7 15 0 1 18 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 1 6 7 17 0 1 18 6 1 2 5 5 2 3 4 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 18 7 15 0 1 17 18 1 2 3 18 3 4 5 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 1 6 7 15 0 1 18 6 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 1 6 7 17 0 1 18 6 1 2 3 6 3 4 5 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 1 4 7 15 0 1 18 4 1 2 3 7 4 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 1 4 7 15 0 1 18 4 1 2 3 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 1 18 5 15 0 1 17 18 1 2 3 5 18 3 4 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 4 18 15 0 1 17 4 1 2 3 8 18 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 4 18 15 0 1 17 4 1 2 3 6 18 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 4 18 15 0 1 17 4 1 2 3 6 18 4 5 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 17 18 7 7 18 5 6 18 1 4 5 17 0 1 18 4 1 2 3 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 1 4 5 17 0 1 18 4 1 2 3 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 1 4 5 17 0 1 18 4 1 2 3 12 13 0 17 0 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 5 0 1 4 5 4 1 2 3\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 5 0 1 2 5 5 2 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 3 0 1 2 3 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 1 6 1 4 5 1 2 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 1 6 1 2 5 5 2 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 10 17 4 9 4 5 8 9 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 10 17 4 9 4 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 10 17 4 7 4 5 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 4 18 1 2 3 4 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 7 1 2 3 4 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 18 5 1 2 3 18 5 18 3 4 7 17 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 6 17 6 1 18 5 1 2 3 18 5 18 3 4 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 5 1 2 3 4 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 5 1 2 3 4 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 4 5 1 2 3 4 7 18 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 4 5 1 2 3 4 7 18 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 4 5 1 2 3 4 7 18 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 5 1 2 3 4 8 17 18 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 5 1 2 3 4 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 5 1 2 3 4 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 5 1 2 3 4 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 5 1 2 3 4 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 5 1 2 3 4 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 4 5 1 2 3 4 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 6 18 6 1 4 5 1 2 3 4 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 6 18 6 1 4 5 1 2 3 4 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 6 18 6 1 4 5 1 2 3 4 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 5 6 2 3 4 5 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 7 7 2 5 6 2 3 4 5 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 6 6 1 4 5 1 2 3 4 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 6 6 3 4 5 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 7 7 2 3 6 6 3 4 5 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 6 6 1 2 5 5 2 3 4 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 4 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 6 6 1 2 3 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 5 5 2 3 4 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 4 4 1 2 3 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 4 17 18 4 5 7 17 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 18 18 2 3 4 5 17 18 4 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 18 18 2 3 4 5 17 18 4 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 18 18 2 3 4 5 17 18 4 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 18 18 2 3 4 5 17 18 4 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 2 18 18 2 3 4 5 17 18 4 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 5 8 5 0 1 4 4 1 2 3 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 5 5 2 3 4 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 5 5 2 3 4 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 5 5 2 3 4 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 5 5 2 3 4 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 5 5 2 3 4 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 5 5 2 3 4 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 0 5 6 5 0 1 4 4 1 2 3 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 4 4 1 2 3 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 4 4 1 2 3 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 4 4 1 2 3 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 4 4 1 2 3 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 6 7 3 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 2 7 2 5 6 2 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 3 17 3 4 18 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 2 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 5 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 5 8 17 18 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 2 3 6 3 4 5 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 0 5 6 5 0 1 2 5 2 3 4 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 2 5 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 2 5 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 2 5 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 2 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 4 17 4 1 2 3 17 4 5 18 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 3 8 3 0 1 2 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 18 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 18 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 3 6 3 0 1 2 6 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 3 6 3 0 1 2 6 3 4 5 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 3 6 3 0 1 2 6 3 4 5 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 3 6 3 0 1 2 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 6 3 4 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 3 7 18 3 6 3 4 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 3 7 18 3 6 3 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 3 7 18 3 6 3 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 4 8 17 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 4 8 17 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 4 6 17 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 4 6 17 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 4 6 17 4 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 4 6 17 4 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 8 17 6 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 8 9 10 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 8 17 18 3 8 3 4 7 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 6 17 18 3 6 3 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 6 17 18 3 6 3 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 6 17 18 3 6 3 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 6 17 18 3 6 3 4 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 6 17 18 3 6 3 4 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 11 6 9 10 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 6 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 12 7 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 7 8 9 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 15 16 7 8 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 11 8 9 10 12 13 14 15\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 9 12 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 10 11 12 12 13 14 15\n"
+  "16 3 10 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 13 14 15 10 11 12 13\n"
+  "16 3 10 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 9 9 6 7 8 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 0 3 4 3 0 1 2 9 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 0 3 4 3 0 1 2 9 4 5 6 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 10 17 18 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7 11 12 13 14\n"
+;
+
+const char* data_dqrgl_block10 = 
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 4 7 18 0 3 4 3 0 1 2 7 4 5 6 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 4 7 18 0 3 4 3 0 1 2 7 4 5 6 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 4 7 18 0 3 4 3 0 1 2 7 4 5 6 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 4 7 18 0 3 4 3 0 1 2 7 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 8 18 4 5 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 8 18 4 5 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 8 17 6 7 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 4 5 4 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 8 9 18 18 9 10 11 12 17 18 11\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 9 10 18 18 10 11 12 13 17 18 12\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 13 8 9 10 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 18 17 18 12 13 14 17 18 14 15\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 17 6 2 3 18 17 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 5 18 2 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 18 6 2 3 4 18 6 18 4 5 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 4 5 1 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 4 5 1 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 6 7 3 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 7 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 5 8 17 18 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 2 5 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 2 5 5 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 4 8 17 4 18 4 5 6 18 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 2 5 5 2 3 4 10 17 6 18 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 10 7 8 9 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 9 10 18 18 10 11 12 13 17 18 12\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 18 17 18 12 13 14 17 18 14 15\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 10 11 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 9 9 4 7 8 4 5 6 7 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 17 17 4 5 18 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 9 9 4 5 8 8 5 6 7 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 6 6 3 4 5 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 18 18 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 18 18 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 8 17 18 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 18 8 9 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 6 6 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 6 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 6 6 3 4 5 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 8 9 5 6 7 8 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 9 9 6 7 8 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 10 17 18 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 4 7 4 5 6 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 4 7 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 4 7 4 5 6 13 0 18 17 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 8 17 18 5 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 8 17 18 5 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 6 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 9 12 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 9 10 18 18 10 11 12 13 17 18 12\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 18 17 18 12 13 14 17 18 14 15\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 10 11 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 0 1 2 5 2 3 4 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 7 2 3 18 7 18 3 4 5 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 6 18 6 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 2 18 8 18 2 7 2 3 6 7 6 3 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 6 7 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 6 7 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 4 18 18 4 5 6 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 2 18 8 18 2 7 2 3 4 7 7 4 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 5 2 3 4 5 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 5 2 3 4 5 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 4 18 8 18 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 4 18 6 18 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 4 18 6 18 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 4 18 6 18 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 4 18 6 18 4 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 4 18 6 18 4 5 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 10 17 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 8 17 6 7 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 3 8 3 18 7 3 4 5 18 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 6 7 3 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 6 7 3 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 8 17 4 5 8 5 6 7 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 6 7 8 12 13 14 15\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 10 7 8 9 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 11 8 9 10 12 13 14 15\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 12 7 8 18 18 8 9 10 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 11 11 8 9 10 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 7 17 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 17 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 9 6 7 8 9 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 8 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 15 16 17 8 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 3 10 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 9 12 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 9 10 11 12 12 13 14 15\n"
+  "16 3 10 16 9 10 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 10 13 14 15 10 11 12 13\n"
+  "16 3 10 16 9 10 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 13 8 18 12 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 11 12 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 2 17 4 17 2 3 9 10 18 14 18 10 11 12 14 18 12 13\n"
+  "16 3 10 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 3 10 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 10 11 17 17 11 14 15 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 11 12 8 9 10 11 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 10 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 9 4 5 8 9 8 5 6 7 11 17 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 4 0 1 2 3 10 18 4 9 4 5 8 9 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 4 0 1 2 3 10 18 4 9 4 5 8 9 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 4 0 1 2 3 10 18 4 9 4 5 6 9 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 4 0 1 2 3 10 18 4 9 4 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 7 4 5 6 7 9 17 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 7 4 5 6 7 9 17 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 7 4 5 6 7 9 17 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 6 11 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 11 17 5 10 5 6 9 10 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 11 17 5 10 5 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 9 17 5 8 5 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 9 17 5 8 5 6 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 9 17 5 8 5 6 7 8 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 7 17 5 6 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 8 13 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 11 12 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 11 17 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 18 17 18 12 13 14 17 18 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 11 12 8 9 10 11 13 17 18 12\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 13 13 8 11 12 8 9 10 11 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 9 12 12 9 10 11 13 17 18 12\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 9 10 18 10 11 12 13 17 18 12\n"
+  "16 3 10 16 11 12 15 16 7 17 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 9 10 11 17 18 10 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 11 11 8 9 10 17 18 11 12 17 12 13 14\n"
+  "16 3 10 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 11 11 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 18 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 10 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 11 17 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 11 12 18 17 18 12 13 14 17 18 14 15\n"
+  "16 3 10 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 11 6 7 18 11 18 7 8 9 11 18 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 10 18 10 7 8 9 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 11 6 7 10 11 10 7 8 9 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 12 18 6 11 6 7 10 11 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 8 18 18 8 9 10 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 12 18 6 11 6 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 8 18 12 18 8 11 8 9 10 11\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 7 12 7 18 11 7 8 9 18 11 18 9 10\n"
+  "16 3 10 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 7 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 13 17 7 12 7 8 11 12 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 13 17 7 12 7 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 11 17 7 10 7 8 9 10 12 13 14 15\n"
+  "16 3 10 16 9 10 15 16 18 17 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 9 17 7 8 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 3 10 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 9 10 11 17 17 11 14 15 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 10 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 12 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 18 17 18 10 13 14 10 11 12 13 17 18 14 15\n"
+  "16 3 10 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 8 9 14 15 14 9 12 13 9 10 11 12 15 0 18 17\n"
+  "16 3 10 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 18 17 18 10 11 14 14 11 12 13 17 18 14 15\n"
+  "16 3 10 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 8 9 14 15 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 18 17 18 10 11 12 18 12 13 14 17 18 14 15\n"
+;
+
+const char* data_dqrgl_block11 = 
+  "16 3 10 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 8 9 14 15 14 9 10 11 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 13 14 8 9 18 13 18 9 10 11 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 12 18 12 9 10 11 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 15\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 10 18 18 10 11 12 14 18 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 10 18 14 18 10 13 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 14 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 14 15 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 14 15 9 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 5 6 0 1 4 5 4 1 2 3 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 4 5 4 1 2 3 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 4 5 4 1 2 3 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 5 6 0 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 3 6 0 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 3 6 0 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 3 6 0 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 2 18 4 18 2 3 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 2 18 4 18 2 3 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 2 18 4 18 2 3 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 2 18 4 18 2 3 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 4 0 1 2 3 6 18 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 1 6 6 1 4 5 1 2 3 4 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 4 5 1 2 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 17 0 7 18 7 0 1 6 6 1 4 5 1 2 3 4 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 1 6 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 17 0 7 18 7 0 1 6 6 1 2 5 5 2 3 4 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 1 6 6 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 17 0 7 18 7 0 1 6 6 1 2 3 6 3 4 5 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 4 4 1 2 3 6 18 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 17 18 7 7 18 5 6 17 0 5 18 5 0 1 4 4 1 2 3 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 17 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 17 18 7 7 18 5 6 17 0 5 18 5 0 1 4 4 1 2 3 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 17 0 5 18 5 0 1 4 4 1 2 3 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 2 4 18 2 3 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 10 17 4 9 4 5 8 9 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 8 17 4 7 4 5 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 8 17 4 7 4 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 8 17 4 7 4 5 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 6 11 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 15 0 3 18 3 0 1 2 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 5 6 11 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 5 6 11 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 11 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 5 6 9 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 9 6 7 8 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 7 8 11 11 8 9 10 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 7 12 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 7 12 13 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 12 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 7 17 13 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 7 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 14 17 16 7 10 11 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 10 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 7 10 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 8 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 17 8 9 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 14 17 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 17 0 3 18 3 0 1 2 9 10 13 14 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 5 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 4 5 4 1 2 3 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 4 5 4 1 2 3 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 4 5 4 1 2 3 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 4 5 4 1 2 3 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 2 5 5 2 3 4 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 2 5 5 2 3 4 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 2 5 5 2 3 4 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 2 5 5 2 3 4 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 3 0 1 2 3 6 3 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 3 0 1 2 3 6 3 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 5 6 11 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 12 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 7 10 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 10 7 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 7 10 11 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 10 7 8 9 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 3 0 1 2 3 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 3 4 9 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 3 4 9 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 3 4 7 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 5 10 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 10 5 6 9 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 1 2 15 0 1 18 10 17 2 9 2 3 8 9 8 3 6 7 3 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 1 2 15 0 1 18 10 17 2 9 2 3 8 9 8 3 4 7 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 1 2 15 0 1 18 10 17 2 9 2 3 8 9 8 3 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 6 7 6 3 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 6 7 6 3 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 6 7 6 3 4 5 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 6 11 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 18 17 17 18 1 2 15 0 1 18 6 17 2 5 2 3 4 5 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 4 9 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 4 9 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 4 7 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 4 5 6 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 3 10 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 8 13 14 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 8 13 14 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 8 13 14 13 8 9 10 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 1 2 15 0 1 18 11 4 5 10 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 6 18 18 6 7 8 10 18 8 9\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 1 2 15 0 1 18 11 4 5 10 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 1 2 15 0 1 18 11 4 5 10 10 5 6 7 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 3 4 9 16 15 18 3 3 18 1 2 15 0 1 18 9 4 5 8 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 3 4 9 16 15 18 3 3 18 1 2 15 0 1 18 9 4 5 8 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 5 6 11 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 7 18 18 7 8 9 11 18 9 10\n"
+  "16 3 10 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 5 6 11 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 5 6 11 11 6 7 8 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 5 10 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 10 5 6 9 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 5 8 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 8 5 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 8 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 8 5 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 10 11 10 5 8 9 5 6 7 8\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 10 11 10 5 6 9 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 10 11 10 5 6 7 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 8 11 8 5 6 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 9 4 5 8 9 8 5 6 7 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 7 4 5 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 5 6 2 3 4 5 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 17 6 17 2 3 18 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 6 6 3 4 5 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 4 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 4 17 18 4 5 7 17 5 6\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 4 7 17 18 4 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 4 5 17 18 4 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 5 18 5 2 3 4 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 18 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 17 8 9 16 13 0 17 17 0 1 18 18 1 6 7 1 2 5 6 5 2 3 4 8 17 18 7 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 17 3 4 18 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 17 18 9\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 18 3 4 5 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 18 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 17 8 9 16 13 0 17 17 0 1 18 18 1 6 7 1 2 3 6 6 3 4 5 8 17 18 7 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 17 1 2 3 4 17 4 5 18 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 6 8 18 6 7 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 18 18 1 4 7 1 2 3 4 7 4 5 6 8 17 18 7 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 4 7 1 2 3 4 7 4 5 6 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 7 17 3 18 3 4 5 18 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 6 3 4 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 4 17 4 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 5 1 2 3 18 5 18 3 4 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 5 1 2 3 18 5 18 3 4 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 5 1 2 3 18 5 18 3 4 8 5 6 7 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 4 8 17 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 4 6 17 4 5 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 10 17 8 9 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 11 12 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 17 6 9 16 13 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 6 7 8 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 11 12 13 16 7 8 11 16 17 6 7 16 13 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 11 8 9 10 13 14 15 0\n"
+  "16 3 10 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 3 10 16 9 12 13 16 7 8 9 16 17 6 7 16 13 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 9 10 11 12 13 14 15 0\n"
+  "16 3 10 16 9 10 11 16 7 8 9 16 17 6 7 16 11 0 17 17 0 1 18 18 1 4 5 1 2 3 4 6 17 18 5 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 7 8 11 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 7 8 11 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 3 10 16 13 17 18 16 9 12 13 16 7 8 9 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 12 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 10 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 7 8 18 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 11 17 18 16 9 10 11 16 7 8 9 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 10 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 18 17 18 13 14 15 17 18 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 17 6 2 3 18 17 18 3 4 5 6 17 18 5\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 5 18 2 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 17 2 3 4 18 17 18 4 5 7 17 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 18 6 2 3 4 18 6 18 4 5 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 6 6 1 4 5 1 2 3 4 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 6 7 3 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 17 17 3 4 18 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 7 7 4 5 6 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 5 17 18 5 6 8 17 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 8 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 10 17 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 3 10 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 17 17 2 3 18 18 3 4 5 6 17 18 5 13 14 15 0\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 2 7 7 2 3 6 6 3 4 5 18 7 8 9 10 17 18 9\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 6 6 1 2 5 5 2 3 4 9 6 7 8 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 4 17 4 5 18 18 5 6 7 8 17 18 7\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 4 4 1 2 3 9 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 5 5 2 3 4 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 5 5 2 3 4 18 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 4 4 1 2 3 7 4 5 6 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 4 4 1 2 3 7 4 5 6 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 4 4 1 2 3 7 4 5 6 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 4 4 1 2 3 7 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 10 17 8 9 13 14 15 0\n"
+  "16 3 10 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 17 12 13 16 9 10 17 16 18 8 9 16 13 0 18 18 0 1 6 6 1 2 5 5 2 3 4 8 18 6 7 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 11 8 9 10 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 3 10 16 13 17 18 16 9 12 13 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 12 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 18 8 9 12 9 10 11 14 15 0 17\n"
+;
+
+const char* data_dqrgl_block12 = 
+  "16 3 10 16 13 14 17 16 18 10 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 11 17 18 16 9 10 11 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 4 4 1 2 3 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 10 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 17 7 3 4 18 17 18 4 5 6 7 17 18 6\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 7 8 2 3 6 7 6 3 4 5 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 7 8 2 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 5 8 2 3 4 5 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 5 18 7 18 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 5 18 7 18 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 5 18 7 18 5 6 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 2 7 2 5 6 2 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 5 6 2 3 4 5 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 5 6 2 3 4 5 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 5 6 2 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 2 7 2 3 6 6 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 3 6 6 3 4 5 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 3 6 6 3 4 5 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 3 6 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 3 10 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 3 10 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 11 8 9 10 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 3 10 16 13 17 18 16 9 12 13 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 12 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 17 8 18 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 10 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 11 17 18 16 9 10 11 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 2 5 2 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 10 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 3 10 16 13 14 15 16 9 10 13 16 17 4 9 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 9 10 11 16 17 4 9 16 15 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 9 10 11 16 17 4 9 16 13 0 17 17 0 1 18 18 1 2 3 4 17 18 3 9 4 5 8 8 5 6 7 13 14 15 0\n"
+  "16 3 10 16 11 12 13 16 7 8 11 16 17 4 7 16 13 0 17 17 0 1 18 18 1 2 3 4 17 18 3 7 4 5 6 11 8 9 10 13 14 15 0\n"
+  "16 3 10 16 14 15 17 16 10 11 14 16 4 5 10 16 17 18 4 4 18 0 3 3 0 1 2 10 5 6 9 9 6 7 8 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 13 17 18 16 11 12 13 16 5 6 11 16 18 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 12 15 17 16 10 11 12 16 4 5 10 16 17 18 4 4 18 0 3 3 0 1 2 10 5 6 9 9 6 7 8 12 13 14 15 15 0 18 17\n"
+  "16 3 10 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 11 12 17 16 5 6 11 16 18 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 8 9 14 16 4 5 8 16 17 18 4 4 18 0 3 3 0 1 2 8 5 6 7 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 11 17 18 16 9 10 11 16 5 6 9 16 18 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 3 10 16 10 15 17 16 8 9 10 16 4 5 8 16 17 18 4 4 18 0 3 3 0 1 2 8 5 6 7 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 9 10 17 16 5 6 9 16 18 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 6 11 14 16 4 5 6 16 17 18 4 4 18 0 3 3 0 1 2 11 6 7 10 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 3 10 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 7 8 11 11 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 3 10 16 13 17 18 16 7 12 13 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 3 10 16 17 14 18 16 7 12 17 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 3 10 16 14 15 17 16 6 9 14 16 4 5 6 16 17 18 4 4 18 0 3 3 0 1 2 9 6 7 8 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 3 10 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 12 13 16 7 18 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 18 7 8 9 17 18 9 12 12 9 10 11 13 14 15 0\n"
+  "16 3 10 16 17 10 11 16 7 18 17 16 5 6 7 16 11 0 5 5 0 1 4 4 1 2 3 18 7 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 11 6 7 18 11 18 7 8 9 11 18 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 18 6 7 10 18 10 7 8 9 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 11 6 7 10 11 10 7 8 9 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 10 11 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 10 11 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 9 6 7 8 9 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 18 6 7 8 18 12 18 8 11 8 9 10 11\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 8 18 10 18 8 9 13 14 15 0\n"
+  "16 3 10 16 13 14 17 16 18 10 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 3 10 16 11 12 13 16 18 17 11 16 5 6 18 16 13 0 5 5 0 1 4 4 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10 13 14 15 0\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 5 6 18 16 13 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 7 12 7 18 11 7 8 9 18 11 18 9 10\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 7 12 7 10 11 7 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 7 12 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 7 10 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 7 10 7 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 17 16 18 8 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 13 8 9 12 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 11 12 17 16 18 8 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 11 8 9 10 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 9 14 17 16 18 8 9 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 9 10 13 14 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 12 13 16 18 8 17 16 5 6 18 16 13 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 12 12 9 10 11 13 14 15 0\n"
+  "16 3 10 16 17 10 11 16 18 8 17 16 5 6 18 16 11 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 10 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 18 13 18 9 10 11 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 18 14 8 9 12 18 12 9 10 11 14 18 12 13\n"
+  "16 3 10 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 15\n"
+  "16 3 10 16 17 14 18 16 7 8 17 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 12 13 12 9 10 11 14 15 0 18\n"
+  "16 3 10 16 17 14 18 16 7 8 17 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 10 13 13 10 11 12 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 18 14 8 9 10 18 14 18 10 13 10 11 12 13\n"
+  "16 3 10 16 17 12 13 16 7 8 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 17 8 18 12 8 9 10 18 12 18 10 11 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 9 14 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "16 3 10 16 9 10 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 15 0 17 10 11 18 15 18 11 12 13 15 18 13 14\n"
+  "16 3 10 16 10 11 17 16 6 7 10 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 10 7 8 9 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 18 13 18 9 10 11 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 18 14 8 9 12 18 12 9 10 11 14 18 12 13\n"
+  "16 3 10 16 17 14 18 16 7 8 17 16 3 4 7 16 18 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 12 13 12 9 10 11 14 15 0 18\n"
+  "16 3 10 16 17 14 18 16 7 8 17 16 3 4 7 16 18 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 10 13 13 10 11 12 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 18 14 8 9 10 18 14 18 10 13 10 11 12 13\n"
+  "16 3 10 16 17 12 13 16 7 8 17 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 17 8 18 12 8 9 10 18 12 18 10 11 13 14 15 0\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 9 14 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "16 3 10 16 9 10 17 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 10 15 0 17 10 11 18 15 18 11 12 13 15 18 13 14\n"
+  "16 3 10 16 8 9 17 16 6 7 8 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 9 0 18 17 9 10 15 0 15 10 13 14 10 11 12 13\n"
+  "16 3 10 16 8 9 17 16 6 7 8 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 9 0 18 17 9 10 15 0 15 10 11 14 14 11 12 13\n"
+  "16 3 10 16 8 9 17 16 6 7 8 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 9 0 18 17 9 10 15 0 15 10 11 12 15 12 13 14\n"
+  "16 3 10 16 10 11 17 16 4 7 10 16 2 3 4 16 17 18 2 2 18 0 1 7 4 5 6 10 7 8 9 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 3 10 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 7 17 18 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 7 17 18 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 7 17 18 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 17 8 9 14 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 8 9 5 6 7 8 11 18 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 10 18 10 5 8 9 5 6 7 8 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 11 4 5 10 11 10 5 8 9 5 6 7 8 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 8 9 5 6 7 8 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 6 18 18 6 7 8 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 6 9 9 6 7 8 11 18 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 10 18 10 5 6 9 9 6 7 8 12 18 10 11\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 11 4 5 10 11 10 5 6 9 9 6 7 8 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 9 9 6 7 8 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 11 4 5 10 11 10 5 6 7 10 7 8 9 13 17 11 12\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 7 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 7 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 8 11 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 8 11 8 5 6 7 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 6 7 11 18 7 10 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 10 13 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 7 9 18 7 8 13 10 11 12\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 7 9 18 7 8 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 7 9 18 7 8 13 14 15 0\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 9 4 5 8 9 8 5 6 7 12 9 10 11 14 15 0 17\n"
+  "16 3 10 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 8 18 8 5 6 7 10 18 8 9 11 12 13 14\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 18 4 5 8 18 8 5 6 7 10 18 8 9 13 14 15 0\n"
+  "16 3 10 16 13 14 17 16 18 10 13 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 3 4 18 16 15 0 3 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 3 4 18 16 13 0 3 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 6 11 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 9 10 6 7 8 9 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 10 13 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 6 9 9 6 7 8 13 10 11 12 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 6 9 9 6 7 8 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 17 14 15 16 18 10 17 16 3 4 18 16 15 0 3 3 0 1 2 10 18 4 9 4 5 6 9 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 12 13 16 18 10 17 16 3 4 18 16 13 0 3 3 0 1 2 10 18 4 9 4 5 6 9 9 6 7 8 17 10 11 12 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 6 9 9 6 7 8 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 7 4 5 6 7 12 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 11 14 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 7 4 5 6 7 10 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 7 4 5 6 7 10 7 8 9 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 6 18 12 18 6 11 6 7 10 11 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 6 18 12 18 6 11 6 7 8 11 11 8 9 10\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 18 4 5 6 18 10 18 6 9 6 7 8 9 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 8 11 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 7 4 5 6 7 11 8 9 10 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 3 4 18 16 15 0 3 3 0 1 2 8 18 4 7 4 5 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 18 8 17 16 3 4 18 16 15 0 3 3 0 1 2 8 18 4 7 4 5 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 12 13 16 18 8 17 16 3 4 18 16 13 0 3 3 0 1 2 8 18 4 7 4 5 6 7 17 8 9 12 12 9 10 11 13 14 15 0\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 7 4 5 6 7 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 7 4 5 6 7 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 10 11 5 6 18 10 18 6 7 8 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 9 18 9 6 7 8 11 18 9 10\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 10 11 5 6 9 10 9 6 7 8 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 10 11 5 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 8 11 5 6 7 8 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 7 18 11 18 7 10 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 7 18 11 18 7 8 11 8 9 10\n"
+  "16 3 10 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 5 10 5 18 9 5 6 7 18 9 18 7 8 13 14 15 0\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 5 10 5 8 9 5 6 7 8 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 6 11 11 6 9 10 6 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 7 18 18 7 8 9 11 18 9 10\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 6 11 11 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 3 10 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 6 11 11 6 7 8 11 8 9 10 14 15 0 17\n"
+  "16 3 10 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 5 10 5 6 9 9 6 7 8 12 15 0 17 12 13 14 15\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 5 8 5 6 7 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 3 10 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 5 8 5 6 7 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 12 13 7 8 11 12 11 8 9 10\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 12 13 7 8 9 12 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 10 13 7 8 9 10 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 14 15 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 14 15 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 14 15 14 9 10 11 14 11 12 13\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 12 15 12 9 10 11 15 12 13 14\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 10 15 15 10 13 14 10 11 12 13\n"
+  "16 3 10 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 10 15 15 10 11 14 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 18 11 7 8 9 18 11 18 9 10\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 10 11 7 8 9 10 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 12 18 12 7 10 11 7 8 9 10 14 18 12 13\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 10 11 7 8 9 10 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 18 18 8 9 10 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 8 11 11 8 9 10 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 12 18 12 7 8 11 11 8 9 10 14 18 12 13\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 11 11 8 9 10 14 15 0 18\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 9 12 9 10 11 14 15 0 18\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 10 13 10 7 8 9 13 10 11 12 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 8 9 13 18 9 12 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 18 12 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 11 12 8 9 10 11 14 15 0 18\n"
+  "16 3 10 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 9 12 12 9 10 11 14 15 0 18\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 8 18 14 18 8 13 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 8 18 14 18 8 13 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 12 13 7 8 18 12 18 8 9 10 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 11 18 11 8 9 10 13 18 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 9 18 13 18 9 12 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 9 18 13 18 9 10 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 18 12 8 9 10 18 12 18 10 11\n"
+  "16 3 10 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 9 18 18 9 10 11 13 18 11 12\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 12 13 9 10 11 12 15 18 13 14\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 10 18 18 10 11 12 14 18 12 13\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 10 13 13 10 11 12 15 18 13 14\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 10 11 15 18 11 14 11 12 13 14\n"
+  "16 3 10 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 10 15 15 10 18 14 10 11 12 18 14 18 12 13\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 11 12 8 9 10 11 15 12 13 14\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 14 14 9 10 11 14 11 12 13\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 12 12 9 10 11 15 12 13 14\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 10 15 10 13 14 10 11 12 13\n"
+  "16 3 10 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 10 15 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 6 7 1 2 5 6 5 2 3 4 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 6 7 1 2 3 6 6 3 4 5 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 6 7 1 2 3 6 6 3 4 5 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 4 18 1 2 3 4 18 4 5 6 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 4 7 1 2 3 4 7 4 5 6 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 4 7 1 2 3 4 7 4 5 6 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 5 1 2 3 18 5 18 3 4 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 6 9 6 1 18 5 1 2 3 18 5 18 3 4 9 6 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 4 5 1 2 3 4 9 18 5 8 5 6 7 8\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 5 6 2 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 7 7 2 5 6 2 3 4 5 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 2 7 7 2 5 6 2 3 4 5 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 2 7 7 2 3 4 7 4 5 6 10 18 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 10 7 8 9\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 3 8 3 18 7 3 4 5 18 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 7 8 9 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 4 7 4 1 2 3 7 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 4 7 4 1 2 3 7 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 4 7 4 1 2 3 7 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 3 9 18 3 8 3 4 7 8 7 4 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 3 9 18 3 8 3 4 5 8 8 5 6 7\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 5 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 5 0 1 4 5 4 1 2 3 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 5 0 1 4 5 4 1 2 3 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 4 5 4 1 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 4 18 8 18 4 5 8 5 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 2 7 7 2 5 6 2 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 5 6 2 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 5 6 2 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 4 18 18 4 5 6 8 18 6 7\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 12 17 10 11\n"
+  "16 3 10 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 17 12 13 14\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 2 7 7 2 3 6 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 3 6 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 3 10 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 3 6 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 3 10 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 6 18 0 5 0 1 2 5 5 2 3 4 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 2 5 5 2 3 4 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 2 5 5 2 3 4 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 2 5 5 2 3 4 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 3 10 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 3 0 1 2 3 6 3 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 18 2 3 4 17 19 2 18 2 19 0 1 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 3 4 5 18 19 2 3 15 0 19 18 2 19 0 1 8 17 6 7\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 18 19 2 3 17 0 19 18 2 19 0 1 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 18 1 2 19 15 0 1 18 4 19 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 5 6 19 3 4 5 19 1 2 3 17 0 1 19 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 4 5 6 19 0 3 4 3 0 1 2 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 18 19 3 4 3 19 1 2 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 18 0 1 19 19 1 2 3 5 19 3 4 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 4 5 6 19 0 1 4 4 1 2 3 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 2 5 6 19 0 1 2 5 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 2 3 19 18 0 1 2 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 2 3 6 19 0 1 2 6 3 4 5 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 7 19 2 3 4 19 0 1 2 7 4 5 6 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 2 3 4 19 0 1 2 9 18 5 8 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 2 3 4 19 0 1 2 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 2 3 4 19 0 1 2 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 2 3 19 0 1 2 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 3 4 5 17 19 3 18 3 19 1 2 17 0 1 19 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 19 18 5 15 0 19 17 19 0 1 2 18 19 2 3 5 18 3 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 6 18 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 19 4 5 17 0 19 18 19 0 1 2 4 19 2 3 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 7 8 9 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 19 3 4 5 18 0 3 19 3 0 1 2 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 19 3 4 5 18 0 3 19 3 0 1 2 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 1 18 5 15 0 1 17 18 1 2 19 19 2 3 4 5 18 19 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 5 5 2 3 4 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 6 18 19 3 6 3 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 5 6 7 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 5 6 7 16 15 17 5 5 17 18 4 17 1 19 18 15 0 1 17 19 1 2 3 4 18 19 3 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 1 4 19 17 0 1 18 4 1 2 3 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 7 8 18 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 7 8 18 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 7 8 9 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 7 8 9 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 7 8 9 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 7 8 9 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 19 1 4 5 18 0 1 19 4 1 2 3 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 19 1 4 5 18 0 1 19 4 1 2 3 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 4 19 0 3 0 1 2 3 6 18 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 19 4 5 17 0 19 18 4 19 0 1 4 1 2 3 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 17 19 2 18 15 0 19 17 2 19 0 1 4 18 2 3 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 18 4 17 19 2 18 15 0 19 17 2 19 0 1 4 18 2 3 10 7 8 9\n"
+;
+
+const char* data_dqrgl_block13 = 
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 18 4 17 19 2 18 15 0 19 17 2 19 0 1 4 18 2 3 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 4 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 4 7 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 5 6 9 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 5 6 9 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 5 6 9 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 5 6 17 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 17 4 5 19 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 18 4 5 6 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 18 4 5 6 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 18 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 18 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 18 4 5 6 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 8 17 4 19 4 5 6 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 7 4 5 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 8 18 4 7 4 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 8 18 4 7 4 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 17 5 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 8 18 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 8 18 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 8 18 4 5 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 6 18 4 5 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 9 17 5 8 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 7 17 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 7 17 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 7 17 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 17 18 4 5 7 17 5 6 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 6 18 4 5 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 6 7 16 17 19 18 18 19 3 4 19 1 2 3 17 0 1 19 6 18 4 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 19 1 2 3 15 0 1 19 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 6 7 19 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 6 7 8 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 5 6 9 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 9 6 7 8 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 5 6 9 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 9 6 7 8 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 5 6 9 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 7 8 19 19 8 9 10 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 18 11 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 7 10 11 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 10 18 16 5 6 7 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 10 7 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 10 17 6 19 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 17 18 6 7 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 19 5 5 19 3 4 19 1 2 3 15 0 1 19 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 18 1 2 3 15 0 1 18 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 3 4 19 1 2 3 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 4 4 1 2 3 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 5 19 5 0 1 4 4 1 2 3 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 4 4 1 2 3 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 19 2 3 4 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 2 5 2 3 4 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 3 6 3 19 1 2 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 6 17 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 6 19 2 5 2 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 17 18 19 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 4 7 18 19 3 4 3 19 1 2 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 7 19 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 18 5 6 7 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 19 6 7 8 19 9 17 19 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 8 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 6 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 8 9 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 6 7 10 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 10 7 8 9 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 6 7 10 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 10 7 8 9 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 18 12 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 8 9 10 12 18 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 11 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 11 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 3 4 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 19 6 17 18 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 6 6 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 1 6 6 1 2 5 5 2 3 4 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 7 4 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 3 7 19 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 8 17 18 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 19 2 3 4 6 19 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 19 1 2 3 5 19 3 4 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 18 5 6 7 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 19 6 7 8 19 9 17 19 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 8 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 6 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 17 18 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 18 7 8 9 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 6 7 10 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 7 8 9 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 6 7 10 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 7 8 9 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 6 7 10 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 7 8 9 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 18 12 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 18 8 9 10 12 18 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 11 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 11 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 11 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 8 9 10 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 6 7 8 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 19 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 19 1 2 7 2 3 6 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 17 18 19 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 8 9 10 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 19 1 2 7 2 3 4 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 18 5 6 7 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 9 18 5 6 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 17 18 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 18 7 8 9 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 6 7 10 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 10 7 8 9 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 6 7 10 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 10 7 8 9 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 2 5 18 19 1 2 5 2 3 4 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 6 7 10 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 10 7 8 9 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 18 12 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 18 8 9 10 12 18 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 11 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 11 12 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 2 5 18 19 1 2 5 2 3 4 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 11 12 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 8 9 10 17 0 19 18 14 15 0 17\n"
+;
+
+const char* data_dqrgl_block14 = 
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 2 5 18 19 1 2 5 2 3 4 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 19 1 2 5 2 3 4 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 8 9 10 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 6 7 8 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 2 5 18 19 1 2 5 2 3 4 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 4 7 18 19 3 4 7 4 5 6 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 5 6 5 2 3 4 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 4 1 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 6 7 3 4 5 6 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 5 6 2 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 7 7 4 5 6 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 4 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 4 5 8 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 10 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 10 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 8 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 9 17 5 8 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 5 8 9 5 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 6 7 19 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 5 6 9 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 6 7 8 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 4 5 8 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 5 6 7 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 5 6 7 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 5 6 7 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 5 6 7 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 5 6 7 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 6 7 10 10 7 8 9 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 6 7 8 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 6 7 8 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 6 7 8 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 6 7 8 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 6 7 8 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 6 7 8 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 7 10 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 7 8 9 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 13 8 9 10 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 8 9 10 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 8 11 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 8 9 10 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 8 9 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 14 9 12 13 9 10 11 12 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 8 9 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 12 9 10 11 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 3 19 0 1 2 18 3 6 7 3 4 5 6 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 7 7 4 5 6 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 9 18 5 8 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 19 4 5 6 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 19 4 5 6 18 19 6 7 17 18 7 8 10 17 8 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 18 3 4 5 7 18 5 6 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 8 19 8 5 6 7 9 17 19 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 9 4 5 8 9 8 5 6 7 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 3 19 0 1 2 9 18 3 8 3 4 7 8 7 4 5 6 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 19 6 7 8 9 17 19 8\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 3 19 0 1 2 9 18 3 8 3 4 5 8 8 5 6 7 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 17 18 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 9 18 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 9 18 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 5 8 5 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 5 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 6 7 19 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 5 10 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 10 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 6 7 8 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 5 8 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 6 9 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 9 6 7 8 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 5 8 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 5 6 7 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 6 9 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 9 6 7 8 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 6 9 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 5 8 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 5 6 7 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 5 8 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 5 6 7 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 6 9 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 9 6 7 8 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 18 5 8 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 5 6 7 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 8 5 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 9 18 5 8 5 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 9 18 5 8 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 17 18 5 6 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 6 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 7 8 19 19 8 9 10 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 9 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 18 11 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 18 17 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 7 10 11 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 10 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 7 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 10 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 7 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 9 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 10 11 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 9 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 7 10 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 13 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 8 11 12 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 8 9 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 14 9 12 13 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 8 9 12 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 4 5 10 16 17 19 4 4 19 2 3 19 0 1 2 10 5 8 9 5 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 4 5 10 16 18 19 4 4 19 2 3 19 0 1 2 10 5 8 9 5 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 18 19 1 2 10 5 8 9 5 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 4 5 10 16 18 19 4 4 19 2 3 19 0 1 2 10 5 8 9 5 6 7 8 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 19 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 19 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 19 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 10 10 7 8 9 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 9 9 6 7 8 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 4 5 10 16 17 19 4 4 19 2 3 19 0 1 2 10 5 6 9 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 4 5 10 16 18 19 4 4 19 2 3 19 0 1 2 10 5 6 9 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 18 19 1 2 10 5 6 9 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 4 5 10 16 18 19 4 4 19 2 3 19 0 1 2 10 5 6 9 9 6 7 8 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 18 6 7 8 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 19 6 7 8 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 18 5 6 7 9 18 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 4 5 8 16 17 18 4 4 18 2 3 18 19 1 2 8 5 6 7 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 19 1 2 8 5 6 7 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 8 9 10 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 4 5 8 16 17 19 4 4 19 2 3 19 0 1 2 8 5 6 7 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 18 19 1 2 8 5 6 7 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 4 5 8 16 18 19 4 4 19 2 3 19 0 1 2 8 5 6 7 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 19 3 4 10 7 8 9 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 9 10 17 18 19 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 18 12 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 6 7 10 10 7 8 9 12 18 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 9 10 12 17 18 19 12 19 10 11\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 11 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 6 7 10 10 7 8 9 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 11 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 11 6 7 10 10 7 8 9 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 11 6 7 10 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 6 11 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 11 6 7 10 10 7 8 9 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 18 9 10 19 12 17 18 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 19 9 10 11 17 18 19 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 19 9 10 11 12 18 19 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 9 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 9 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 9 6 7 8 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 6 9 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 19 9 10 11 19 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 18 12 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 6 7 8 12 18 8 11 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 18 19 9 10 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 18 19 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 18 10 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 6 7 8 10 18 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 18 10 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 6 7 8 10 18 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 18 10 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 6 7 8 10 18 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 17 18 19 9 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 19 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 10 18 19 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 6 9 10 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 6 9 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 9 6 7 8 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 6 9 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 9 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 9 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 9 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 9 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 6 7 8 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 9 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 9 6 7 8 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 6 9 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 9 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 9 6 7 8 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 11 8 9 10 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 11 18 5 10 5 6 9 10 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 19 8 9 10 11 17 19 10\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 11 18 5 10 5 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 11 18 5 8 5 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 17 19 8 9 11 17 9 10\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 8 5 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 8 5 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 8 5 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 8 5 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 8 5 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 11 18 5 6 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 11 18 5 6 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 6 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 6 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 6 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 9 18 5 6 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 7 12 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 18 8 9 10 17 18 10 11 13 17 11 12\n"
+;
+
+const char* data_dqrgl_block15 = 
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 8 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 7 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 7 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 7 10 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 10 7 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 9 18 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 8 11 12 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 18 8 9 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 8 9 12 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 18 7 8 16 4 5 18 16 17 19 4 4 19 2 3 19 0 1 2 7 18 5 6 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 12 7 10 11 7 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 8 9 19 19 9 10 11 17 18 19 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 8 9 19 19 9 10 11 12 18 19 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 12 12 9 10 11 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 11 11 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 12 7 8 11 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 6 7 12 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 12 7 8 11 11 8 9 10 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 9 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 8 9 10 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 10 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 9 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 9 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 10 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 9 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 8 9 10 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 7 8 9 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 10 7 8 9 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 10 7 8 9 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 12 9 10 11 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 19 19 10 11 12 17 18 19 12 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 8 18 14 16 6 7 8 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 8 9 12 12 9 10 11 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 15 18 16 8 13 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 13 8 9 12 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 13 8 9 12 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 8 13 14 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 13 8 9 12 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 11 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 9 10 11 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 8 11 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 11 8 9 10 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 11 8 9 10 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 9 10 11 17 18 11 19 11 12 13 19 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 18 14 16 6 7 8 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 8 9 10 14 18 10 13 10 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 9 10 11 17 19 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 8 18 12 16 6 7 8 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 18 8 9 10 12 18 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 13 10 11 12 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 18 7 10 7 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 18 7 10 7 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 11 18 7 8 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 18 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 18 9 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 18 7 8 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 19 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 9 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 18 7 8 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 6 7 18 16 4 5 6 16 17 19 4 4 19 2 3 19 0 1 2 9 18 7 8 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 19 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 9 10 13 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 19 1 2 14 9 10 13 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 9 10 11 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 11 12 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 9 10 11 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 14 11 12 13 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 4 5 19 2 3 4 19 0 1 2 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 17 19 5 18 5 19 3 4 19 1 2 3 17 0 1 19 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 4 5 19 0 3 4 3 0 1 2 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 4 5 19 0 1 4 4 1 2 3 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 2 5 19 0 1 2 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 2 3 19 0 1 2 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 4 4 1 2 3 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 2 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 17 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 7 8 9 16 17 19 7 7 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 7 4 5 6 7 9 17 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 9 17 5 8 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 6 7 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 18 6 7 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 18 6 7 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 19 18 18 19 3 4 17 0 3 19 3 0 1 2 6 18 4 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 6 7 19 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 10 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 6 7 8 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 18 6 7 8 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 4 5 8 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 5 6 7 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 5 6 9 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 9 6 7 8 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 5 6 7 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 5 6 9 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 9 6 7 8 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 5 6 7 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 5 6 9 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 9 6 7 8 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 9 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 18 11 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 18 7 8 9 11 18 9 10 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 10 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 7 8 9 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 10 11 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 10 11 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 6 7 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 8 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 8 18 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 18 8 9 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 8 18 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 18 8 9 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 8 18 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 18 8 9 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 8 18 6 7 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 18 8 9 10 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 18 13 16 7 8 9 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 18 9 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 5 6 7 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 19 0 1 2 19 19 2 3 4 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 4 9 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 4 5 8 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 10 11 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 8 11 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 8 5 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 5 8 9 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 8 9 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 8 9 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 8 8 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 6 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 6 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 6 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 6 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 4 5 6 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 8 5 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 17 6 7 10 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 17 2 3 19 19 3 4 5 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 18 2 3 4 6 18 4 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 18 2 3 4 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 18 17 17 18 1 2 15 0 1 18 8 17 2 7 2 3 19 7 19 3 4 5 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 1 2 17 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 4 7 7 4 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 19 18 18 19 1 2 17 0 1 19 8 18 2 7 2 3 4 7 7 4 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 17 11 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 19 18 18 19 1 2 17 0 1 19 6 18 2 5 2 3 4 5 12 13 0 17 0 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 8 8 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 4 9 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 4 5 8 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 4 9 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 4 5 8 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 4 9 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 9 4 5 8 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 6 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 6 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 6 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 6 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 4 5 6 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 4 7 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 7 4 5 6 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 18 4 7 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 7 4 5 6 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 18 4 7 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 7 4 5 6 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 18 4 7 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 7 4 5 6 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 10 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 5 6 9 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 10 11 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 5 10 11 16 18 4 5 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 10 5 6 9 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 8 11 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 5 8 11 16 18 4 5 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 8 5 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 17 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 5 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 17 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 5 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 5 8 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 5 8 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 5 8 9 16 18 4 5 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 8 5 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 8 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 8 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 5 8 9 16 18 4 5 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 8 5 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 18 4 17 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 10 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 5 6 11 16 18 4 5 16 17 19 18 18 19 1 2 17 0 1 19 4 18 2 3 11 6 7 10 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 8 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 8 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 8 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 8 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 6 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 12 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 8 9 5 6 7 8 10 17 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 9 9 6 7 8 10 17 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 7 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 7 8 17 19 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 7 8 17 19 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 7 8 17 19 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 17 4 5 19 19 5 6 7 8 17 19 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 8 8 5 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 8 8 5 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 18 4 5 6 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 3 4 7 16 15 19 3 3 19 1 2 15 0 1 19 7 4 5 6 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 8 5 6 7 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 8 18 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 8 5 6 7 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 10 17 4 19 4 5 6 19 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 8 18 4 7 4 5 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 6 18 4 5 17 6 7 10 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 6 18 4 5 17 6 7 8 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 17 6 7 19 19 7 10 11 7 8 9 10 12 17 19 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 17 6 7 19 19 7 8 9 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 17 6 19 6 7 8 19 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 19 7 1 2 3 19 19 3 4 5 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 4 19 1 2 3 4 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 7 8 9 12 17 10 11\n"
+;
+
+const char* data_dqrgl_block16 = 
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 18 6 17 16 13 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 8 17 16 18 6 7 16 13 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 7 8 9 16 18 6 7 16 13 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 18 6 7 16 17 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 19 18 17 16 13 0 19 19 0 1 6 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 8 18 16 17 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 19 8 9 16 17 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 19 8 9 16 18 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 19 8 9 16 18 0 19 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 6 6 1 2 5 5 2 3 4 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 3 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 9 18 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 6 6 1 2 3 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 18 0 1 19 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 19 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 8 9 16 17 0 18 18 0 1 19 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 4 4 1 2 3 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 10 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 17 6 7 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 7 10 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 19 18 17 16 13 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 18 17 16 19 8 9 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 8 18 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 8 18 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 8 18 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 8 18 16 17 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 8 9 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 8 9 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 19 8 9 16 17 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 19 8 9 16 18 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 8 9 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 19 8 9 16 18 0 19 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 18 7 8 9 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 2 7 2 5 6 2 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 2 7 2 3 6 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 2 3 18 3 4 5 17 18 5 19 5 6 7 19 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 18 19 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 18 19 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 17 6 7 8 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 6 9 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 6 9 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 6 9 16 17 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 10 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 10 11 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 10 11 16 18 6 7 16 17 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 6 17 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 19 8 9 10 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 18 7 8 9 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 10 7 8 9 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 6 7 8 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 3 4 7 4 5 6 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 8 8 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 4 9 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 4 5 8 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 4 9 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 4 5 8 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 18 4 9 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 4 5 8 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 18 4 17 16 13 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 4 5 6 8 17 6 7 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 18 4 7 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 8 17 16 18 4 7 16 13 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 18 4 7 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 10 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 5 6 9 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 10 11 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 5 10 11 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 5 6 9 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 8 11 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 5 8 11 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 8 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 5 8 9 16 18 4 5 16 17 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 18 4 17 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 6 7 10 10 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 6 7 8 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 6 7 8 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 17 6 7 8 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 12 17 16 5 6 7 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 19 19 1 2 3 4 18 19 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 5 10 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 6 7 8 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 6 7 8 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 6 7 8 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 18 5 8 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 8 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 19 6 9 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 18 5 8 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 8 5 6 7 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 19 6 9 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 19 6 9 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 19 6 9 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 18 5 8 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 8 5 6 7 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 19 6 9 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 18 5 8 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 8 5 6 7 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 19 6 9 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 19 6 9 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 9 6 7 8 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 6 9 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 6 9 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 7 10 11 16 17 6 7 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 7 8 11 16 17 6 7 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 11 8 9 10 13 14 15 0\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 12 13 16 7 8 9 16 17 6 7 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 9 10 11 12 13 14 15 0\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 10 11 16 7 8 9 16 17 6 7 16 19 18 17 16 11 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 11 12 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 9 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 18 17 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 18 17 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 18 17 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 18 17 16 19 6 7 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 7 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 7 10 11 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 10 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 10 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 10 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 10 11 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 9 10 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 10 11 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 10 11 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 6 7 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 8 11 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 18 17 9 16 19 6 18 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 18 8 9 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 18 8 17 16 19 6 18 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 18 8 9 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 18 8 9 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 19 6 18 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 18 8 9 16 19 6 18 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 18 8 9 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 18 8 9 16 19 6 18 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 8 9 10 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 19 6 7 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 19 6 7 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 18 10 17 16 7 8 18 16 19 6 7 16 13 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 19 6 7 16 17 0 19 19 0 1 4 4 1 2 3 6 19 4 5 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 11 17 18 16 9 10 11 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 18 5 6 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 6 7 16 15 0 18 18 0 1 4 4 1 2 3 6 18 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 17 12 18 16 9 10 17 16 7 8 9 16 19 6 7 16 18 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 10 11 12 12 13 14 18 18 14 15 0\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 6 7 16 15 0 19 19 0 1 4 4 1 2 3 6 19 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 4 5 10 16 17 18 4 4 18 19 3 3 19 1 2 10 5 6 9 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 18 5 6 7 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 19 6 7 8 18 19 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 18 5 6 7 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 19 10 18 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 18 5 6 7 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 19 10 11 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 18 5 6 7 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 19 10 11 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 19 6 7 8 10 19 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 4 5 8 16 17 19 4 4 19 0 3 3 0 1 2 8 5 6 7 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 4 5 8 16 17 18 4 4 18 19 3 3 19 1 2 8 5 6 7 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 3 19 1 2 8 5 6 7 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 4 5 8 16 18 19 4 4 19 0 3 3 0 1 2 8 5 6 7 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 4 5 8 16 17 18 4 4 18 19 3 3 19 1 2 8 5 6 7 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 5 19 3 4 10 7 8 9 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 18 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 7 8 19 19 8 9 10 12 17 18 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 9 18 16 4 5 6 16 17 19 4 4 19 0 3 3 0 1 2 9 6 7 8 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 9 12 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 9 6 7 8 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 19 18 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 19 7 8 9 10 18 19 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 19 18 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 19 7 8 9 10 18 19 9 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 9 6 7 8 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 10 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 10 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 9 10 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 9 6 7 8 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 9 10 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 9 6 7 8 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 10 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 10 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 3 4 11 8 9 10 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 19 6 7 8 19 19 8 9 10 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 8 18 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 8 19 6 7 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 19 8 18 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 8 19 6 7 18 8 9 10 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 9 18 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 19 18 9 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 18 19 6 7 9 18 7 8 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 8 19 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 19 8 18 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 8 19 6 7 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 19 8 9 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 8 19 6 7 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 12 18 16 9 10 17 16 19 8 9 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 8 19 6 7 17 10 11 12 12 13 14 18 18 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 7 18 16 4 5 6 16 17 19 4 4 19 0 3 3 0 1 2 18 7 8 9 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 19 8 9 10 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 4 5 6 16 17 19 4 4 19 0 3 3 0 1 2 18 7 8 9 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 19 8 9 10 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 7 8 19 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 19 8 9 10 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 10 7 8 9 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 10 7 8 9 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 6 7 8 16 17 18 6 6 18 19 5 5 19 3 4 12 9 10 11 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 11 17 16 6 7 8 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 11 8 9 10 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 3 19 1 2 11 8 9 10 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 12 18 16 9 19 17 16 7 8 9 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 19 9 10 11 17 19 11 12 12 13 14 18 18 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 3 4 13 10 11 12 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 18 19 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 17 14 18 16 19 10 17 16 7 8 19 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 10 19 8 9 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 18 19 8 9 17 18 9 10 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 7 8 19 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 18 19 8 9 11 18 9 10 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 17 12 18 16 19 10 17 16 7 8 19 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 10 19 8 9 17 10 11 12 12 13 14 18 18 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 5 19 3 4 14 11 12 13 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 10 13 18 10 11 12 13 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 5 6 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 7 19 5 6 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 8 11 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 18 8 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 18 8 9 10 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 6 7 10 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 19 4 7 16 13 0 19 19 0 1 2 4 19 2 3 7 4 5 6 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 8 11 12 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 18 8 11 8 9 10 11 14 15 0 17\n"
+;
+
+const char* data_dqrgl_block17 = 
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 18 10 17 16 7 8 18 16 19 4 7 16 13 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 19 4 7 16 17 0 19 19 0 1 2 4 19 2 3 7 4 5 6 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 8 9 12 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 18 4 7 16 15 0 18 18 0 1 2 4 18 2 3 7 4 5 6 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 19 4 7 16 15 0 19 19 0 1 2 4 19 2 3 7 4 5 6 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 19 4 7 16 18 0 19 19 0 1 2 4 19 2 3 7 4 5 6 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 10 17 18 3 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 10 17 18 3 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 10 17 18 3 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 8 17 18 3 8 3 4 7 7 4 5 6 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 8 17 18 3 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 8 17 18 3 8 3 4 7 7 4 5 6 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 8 17 18 3 8 3 4 7 7 4 5 6 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 6 17 18 3 6 3 4 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 6 17 18 3 6 3 4 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 6 17 18 3 6 3 4 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 6 17 18 3 6 3 4 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 6 17 18 3 6 3 4 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 4 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 4 17 18 3 7 4 5 6 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 4 7 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 4 17 18 3 7 4 5 6 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 11 12 15 16 5 8 11 16 17 4 5 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 4 17 18 3 8 5 6 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 12 15 16 5 8 9 16 17 4 5 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 4 17 18 3 8 5 6 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 5 8 11 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 8 11 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 5 8 11 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 18 17 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 18 5 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 18 17 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 18 5 6 7 10 17 18 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 18 17 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 18 5 6 7 10 17 18 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 5 18 17 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 18 5 6 7 8 17 18 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 5 8 9 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 5 8 9 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 5 8 9 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 5 8 9 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 8 18 16 19 4 5 16 17 0 19 19 0 1 2 4 19 2 3 8 5 6 7 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 8 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 5 8 18 16 19 4 5 16 17 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 5 8 18 16 19 4 5 16 17 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 8 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 5 8 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 5 8 18 16 19 4 5 16 17 0 19 19 0 1 2 4 19 2 3 8 5 6 7 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 5 8 9 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 17 10 11 12 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 8 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 8 5 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 5 8 9 16 19 4 5 16 18 0 19 19 0 1 2 4 19 2 3 8 5 6 7 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 4 17 16 15 0 18 18 0 1 2 4 18 2 3 10 17 4 5 10 5 19 9 5 6 7 19 9 19 7 8\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 10 18 4 5 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 10 18 4 5 10 5 8 9 5 6 7 8 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 10 18 4 5 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 10 18 4 5 10 5 6 9 9 6 7 8 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 18 8 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 18 8 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 18 8 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 18 8 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 18 6 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 6 18 4 5 9 6 7 8 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 18 6 9 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 6 18 4 5 9 6 7 8 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 17 16 7 10 13 16 18 6 7 16 19 4 18 16 17 0 19 19 0 1 2 4 19 2 3 6 18 4 5 10 7 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 6 17 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 19 4 18 16 15 0 19 19 0 1 2 4 19 2 3 6 18 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 9 6 7 8 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 11 6 7 19 11 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 19 6 7 10 19 10 7 8 9 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 12 18 6 11 6 7 10 11 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 19 6 7 8 19 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 12 18 6 11 6 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 19 6 7 8 19 12 19 8 11 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 6 18 16 19 4 5 16 15 0 19 19 0 1 2 4 19 2 3 10 18 6 9 6 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 18 4 5 16 15 0 18 18 0 1 2 4 18 2 3 12 17 6 7 12 7 19 11 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 12 9 10 11 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 18 19 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 5 8 11 16 3 4 5 16 19 0 3 3 0 1 2 8 5 6 7 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 8 19 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 8 19 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 8 19 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 6 7 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 6 7 18 19 7 8 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 9 4 5 8 9 8 5 6 7 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 6 18 18 6 7 19 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 3 4 18 16 15 0 3 3 0 1 2 10 18 4 19 4 5 6 19 19 6 7 8 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 19 4 5 6 19 19 6 7 8 10 19 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 7 4 5 6 7 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 7 4 5 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 7 4 5 6 7 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 7 4 5 6 7 18 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 7 4 5 6 7 18 7 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 10 11 5 6 9 10 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 10 11 5 6 7 10 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 8 11 5 6 7 8 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 8 9 5 6 7 8 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 8 9 5 6 7 8 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 8 9 5 6 7 8 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 5 18 5 8 9 5 6 7 8 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 6 11 11 6 9 10 6 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 6 11 11 6 7 10 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 6 9 9 6 7 8 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 5 18 5 6 9 9 6 7 8 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 18 5 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 5 18 5 6 7 10 17 18 7 10 7 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 8 19 14 8 9 10 19 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 17 18 19 16 7 10 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 10 7 8 9 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 18 6 7 19 18 19 7 8 9 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 18 6 7 19 18 19 7 8 9 18 19 9 10 12 18 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 11 6 7 10 11 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 12 17 6 18 6 7 8 18 18 8 9 19 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 3 4 5 16 17 0 3 3 0 1 2 12 18 6 19 6 7 8 19 19 8 9 10 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 9 6 7 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 12 13 7 8 11 12 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 12 13 7 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 10 13 7 8 9 10 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 8 13 13 8 11 12 8 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 3 4 5 16 15 0 3 3 0 1 2 18 19 6 7 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 18 14 8 9 19 18 19 9 10 11 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 18 14 8 9 19 18 19 9 10 11 18 19 11 12 14 18 12 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 3 4 5 16 15 0 3 3 0 1 2 17 8 18 14 8 9 10 18 18 10 11 19 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 11 18 8 9 10 11 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 9 18 18 9 14 15 9 10 13 14 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 9 18 18 9 14 15 9 10 11 14 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 9 18 18 9 12 15 9 10 11 12 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 9 18 18 9 10 15 15 10 13 14 10 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 3 4 5 16 19 0 3 3 0 1 2 17 8 9 18 18 9 10 15 15 10 11 14 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 4 5 1 2 3 4 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 18 19 0 7 0 1 6 7 6 1 4 5 1 2 3 4 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 6 6 1 4 5 1 2 3 4 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 6 6 1 2 5 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 18 7 18 1 2 19 19 2 3 4 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 6 6 1 2 3 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 4 4 1 2 3 7 4 5 6 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 18 7 18 1 2 19 19 2 3 4 18 19 4 5 7 18 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 5 8 5 0 1 4 4 1 2 3 8 5 6 7 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 2 5 5 2 3 4 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 18 19 0 7 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 6 19 0 5 6 5 0 1 4 4 1 2 3 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 2 7 2 5 6 2 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 7 0 1 18 7 18 1 2 3 18 3 4 19 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 8 19 0 7 8 7 0 1 2 7 2 3 6 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 2 3 19 3 4 5 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 18 8 17 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 19 3 4 5 7 19 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 19 3 4 5 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 19 3 4 5 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 18 19 0 7 0 1 6 7 6 1 2 3 6 3 4 5 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 18 9 10 16 17 19 18 9 18 19 6 19 0 5 6 5 0 1 2 5 2 3 4 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 4 18 4 1 2 3 18 4 5 19 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 8 18 0 19 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 19 18 19 1 2 3 18 19 3 6 3 4 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 18 19 0 5 0 1 4 5 4 1 2 3 18 5 6 9 9 6 7 8 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 19 18 17 16 15 0 19 18 19 0 5 0 1 4 5 4 1 2 3 18 5 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 17 8 9 16 15 0 17 8 17 0 18 0 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 18 8 9 16 15 0 18 8 18 0 19 0 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 2 19 19 2 3 4 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 2 19 19 2 3 4 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 5 6 7 15 0 5 17 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 6 7 8 17 19 6 18 6 19 4 5 19 0 3 4 3 0 1 2 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 6 7 8 17 19 6 18 6 19 4 5 19 0 1 4 4 1 2 3 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 6 7 8 17 19 6 18 6 19 2 5 19 0 1 2 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 5 6 18 15 0 5 17 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 5 6 7 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 5 6 7 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 19 18 7 15 0 19 17 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 6 18 15 0 19 17 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 4 5 8 17 19 4 18 4 19 2 3 19 0 1 2 8 5 6 7 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 19 18 5 6 7 15 0 5 18 5 0 3 4 0 1 2 3 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 18 5 6 19 15 0 5 18 5 0 3 4 0 1 2 3 8 19 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 5 6 19 15 0 5 18 5 0 3 4 0 1 2 3 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 5 6 19 15 0 5 18 5 0 3 4 0 1 2 3 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 3 4 0 1 2 3 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 2 3 19 0 1 2 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 19 19 1 2 5 5 2 3 4 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 6 7 8 17 19 6 18 6 19 0 5 5 0 1 4 4 1 2 3 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 6 7 8 17 19 6 18 6 19 0 5 5 0 1 2 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 19 19 1 2 3 6 18 19 3 6 3 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 4 7 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 7 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 5 8 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 18 4 5 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 19 18 7 15 0 19 17 19 0 1 4 4 1 2 3 18 19 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 6 18 15 0 19 17 19 0 1 4 4 1 2 3 6 19 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 6 7 17 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 4 5 8 17 19 4 18 4 19 0 3 3 0 1 2 8 5 6 7 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 19 18 5 6 7 15 0 5 18 5 0 1 4 4 1 2 3 19 7 8 9 10 17 19 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 18 5 6 19 15 0 5 18 5 0 1 4 4 1 2 3 8 19 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 5 6 19 15 0 5 18 5 0 1 4 4 1 2 3 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 5 6 19 15 0 5 18 5 0 1 4 4 1 2 3 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 19 8 18 5 6 19 17 0 5 18 5 0 1 4 4 1 2 3 8 19 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 7 8 19 5 6 7 17 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 5 6 7 15 0 5 19 5 0 1 4 4 1 2 3 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 19 5 6 7 17 0 5 19 5 0 1 4 4 1 2 3 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 19 9 9 19 7 8 19 5 6 7 18 0 5 19 5 0 1 4 4 1 2 3 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 4 5 6 17 19 4 18 4 19 0 3 3 0 1 2 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 19 5 6 7 18 0 5 19 5 0 1 4 4 1 2 3 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 18 0 1 2 6 18 2 19 2 3 4 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 19 18 7 15 0 19 17 19 0 1 2 18 19 2 5 2 3 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 6 18 15 0 19 17 19 0 1 2 6 19 2 5 2 3 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 5 2 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 5 2 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 5 2 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 6 7 17 0 19 18 19 0 1 2 6 19 2 5 2 3 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 19 18 7 15 0 19 17 19 0 1 2 18 19 2 3 18 3 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 3 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 3 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 19 0 1 2 6 19 2 3 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 6 7 17 0 19 18 19 0 1 2 6 19 2 3 6 3 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 18 4 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 4 7 15 0 19 18 19 0 1 2 4 19 2 3 7 4 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 4 7 15 0 19 18 19 0 1 2 4 19 2 3 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 4 7 15 0 19 18 19 0 1 2 4 19 2 3 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 4 7 17 0 19 18 19 0 1 2 4 19 2 3 7 4 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 19 18 7 15 0 19 17 19 0 1 2 18 19 2 3 7 18 3 6 3 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 17 19 18 5 15 0 19 17 19 0 1 2 18 19 2 3 5 18 3 4 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 19 18 5 15 0 19 17 19 0 1 2 18 19 2 3 5 18 3 4 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 17 19 18 5 15 0 19 17 19 0 1 2 18 19 2 3 5 18 3 4 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 17 19 18 5 15 0 19 17 19 0 1 2 18 19 2 3 5 18 3 4 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 8 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 5 8 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 5 8 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 5 8 18 19 4 5 17 0 19 18 19 0 1 2 4 19 2 3 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 8 18 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 6 18 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 6 18 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 6 18 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 17 19 4 18 15 0 19 17 19 0 1 2 4 19 2 3 6 18 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 19 0 1 2 4 19 2 3 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 2 3 8 17 19 2 18 2 19 0 1 8 3 6 7 3 4 5 6 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 2 3 8 17 19 2 18 2 19 0 1 8 3 4 7 7 4 5 6 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 7 8 19 3 4 7 17 0 3 19 3 0 1 2 7 4 5 6 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 3 4 7 15 0 3 19 3 0 1 2 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 19 3 4 7 17 0 3 19 3 0 1 2 7 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 19 9 9 19 7 8 19 3 4 7 18 0 3 19 3 0 1 2 7 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 19 3 4 7 18 0 3 19 3 0 1 2 7 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 2 3 6 17 19 2 18 2 19 0 1 6 3 4 5 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 10 17 19 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 8 17 19 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 8 17 19 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 8 17 19 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 19 18 3 4 5 15 0 3 18 3 0 1 2 19 5 6 7 8 17 19 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 8 19 3 4 5 15 0 3 19 3 0 1 2 8 5 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 5 8 19 3 4 5 15 0 3 19 3 0 1 2 8 5 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 8 19 3 4 5 15 0 3 19 3 0 1 2 8 5 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 5 8 19 3 4 5 17 0 3 19 3 0 1 2 8 5 6 7 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 5 8 19 3 4 5 15 0 3 19 3 0 1 2 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 5 8 19 3 4 5 15 0 3 19 3 0 1 2 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 3 4 18 15 0 3 17 3 0 1 2 8 18 4 19 4 5 6 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 18 3 4 19 15 0 3 18 3 0 1 2 8 19 4 7 4 5 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 3 4 19 15 0 3 18 3 0 1 2 8 19 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 3 4 19 15 0 3 18 3 0 1 2 8 19 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 19 8 18 3 4 19 17 0 3 18 3 0 1 2 8 19 4 7 4 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 3 4 19 15 0 3 18 3 0 1 2 8 19 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 3 4 19 15 0 3 18 3 0 1 2 8 19 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 19 8 18 3 4 19 17 0 3 18 3 0 1 2 8 19 4 5 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 3 4 19 15 0 3 18 3 0 1 2 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 3 4 19 17 0 3 18 3 0 1 2 6 19 4 5 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 10 17 6 19 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 10 18 6 7 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 8 11 16 17 19 18 18 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 8 18 6 7 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 13 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 11 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 9 18 13 16 7 8 9 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 18 9 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 18 19 7 7 19 5 6 19 3 4 5 18 0 3 19 3 0 1 2 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 8 9 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 19 3 4 5 15 0 3 19 3 0 1 2 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 19 3 4 5 17 0 3 19 3 0 1 2 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 14 9 12 13 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 8 9 12 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 3 4 5 15 0 3 18 3 0 1 2 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 18 19 7 7 19 5 6 19 3 4 5 18 0 3 19 3 0 1 2 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 2 3 4 17 19 2 18 2 19 0 1 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 18 7 15 0 1 17 18 1 2 19 19 2 5 6 2 3 4 5 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 7 7 2 5 6 2 3 4 5 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 6 7 15 0 1 17 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 7 7 2 3 6 6 3 4 5 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 18 7 15 0 1 17 18 1 2 19 19 2 3 4 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 1 18 7 15 0 1 17 18 1 2 19 19 2 3 4 18 19 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 1 6 7 15 0 1 18 6 1 2 19 19 2 3 4 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 19 19 2 3 4 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 1 6 7 15 0 1 18 6 1 2 19 19 2 3 4 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 1 6 7 17 0 1 18 6 1 2 19 19 2 3 4 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 17 1 18 5 15 0 1 17 18 1 2 19 19 2 3 4 5 18 19 4 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 1 19 7 15 0 1 18 19 1 2 5 5 2 3 4 7 19 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 1 19 7 15 0 1 18 19 1 2 5 5 2 3 4 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 1 19 7 15 0 1 18 19 1 2 5 5 2 3 4 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 1 19 7 17 0 1 18 19 1 2 5 5 2 3 4 7 19 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 5 5 2 3 4 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 5 5 2 3 4 6 18 19 5 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 18 1 6 19 15 0 1 18 6 1 2 5 5 2 3 4 8 19 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 1 6 19 15 0 1 18 6 1 2 5 5 2 3 4 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 1 6 19 15 0 1 18 6 1 2 5 5 2 3 4 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 19 8 18 1 6 19 17 0 1 18 6 1 2 5 5 2 3 4 8 19 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 1 6 7 15 0 1 19 6 1 2 5 5 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 1 6 7 15 0 1 19 6 1 2 5 5 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 7 8 19 1 6 7 17 0 1 19 6 1 2 5 5 2 3 4 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 5 5 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 5 5 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 5 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 19 1 6 7 17 0 1 19 6 1 2 5 5 2 3 4 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 19 1 6 7 18 0 1 19 6 1 2 5 5 2 3 4 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 3 19 3 6 7 3 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 19 3 4 5 6 18 19 5 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 1 6 7 15 0 1 19 6 1 2 3 6 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 1 6 7 15 0 1 19 6 1 2 3 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 7 8 19 1 6 7 17 0 1 19 6 1 2 3 6 3 4 5 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 3 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 3 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 1 6 7 15 0 1 19 6 1 2 3 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 19 1 6 7 17 0 1 19 6 1 2 3 6 3 4 5 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 19 1 6 7 18 0 1 19 6 1 2 3 6 3 4 5 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 19 1 4 7 15 0 1 19 4 1 2 3 7 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 19 1 4 7 15 0 1 19 4 1 2 3 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 7 8 19 1 4 7 17 0 1 19 4 1 2 3 7 4 5 6 10 18 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 19 1 4 7 15 0 1 19 4 1 2 3 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 19 1 4 7 15 0 1 19 4 1 2 3 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 1 19 5 15 0 1 18 19 1 2 3 5 19 3 4 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 1 19 18 15 0 1 17 19 1 2 3 8 18 19 3 8 3 4 7 7 4 5 6\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 6 18 19 3 6 3 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 17 1 19 18 15 0 1 17 19 1 2 3 6 18 19 3 6 3 4 5 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 18 1 4 19 15 0 1 18 4 1 2 3 8 19 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 18 1 4 19 15 0 1 18 4 1 2 3 8 19 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 19 8 18 1 4 19 17 0 1 18 4 1 2 3 8 19 4 5 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 18 17 17 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 17 18 7 7 18 19 6 18 1 4 19 17 0 1 18 4 1 2 3 6 19 4 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 17 18 7 7 18 19 6 18 1 4 19 17 0 1 18 4 1 2 3 6 19 4 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 18 1 4 19 15 0 1 18 4 1 2 3 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 1 4 19 17 0 1 18 4 1 2 3 6 19 4 5 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 19 6 18 1 4 19 17 0 1 18 4 1 2 3 6 19 4 5 12 13 0 17 0 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 10 17 6 19 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 10 18 6 9 6 7 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 18 10 11 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 10 18 6 7 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 18 8 9 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 8 18 6 7 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 18 8 9 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 8 18 6 7 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 18 8 9 16 17 19 18 18 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 8 18 6 7 12 13 0 17 0 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 19 1 4 5 15 0 1 19 4 1 2 3 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 19 1 4 5 17 0 1 19 4 1 2 3 10 18 8 9 12 13 0 17 0 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 1 4 5 15 0 1 18 4 1 2 3 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 18 19 7 7 19 5 6 19 1 4 5 18 0 1 19 4 1 2 3 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 17 12 18 16 9 10 17 16 7 8 9 16 18 19 7 7 19 5 6 19 1 4 5 18 0 1 19 4 1 2 3 17 10 11 12 12 13 0 18 0 13 14 15\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 1 4 5 17 0 1 18 4 1 2 3 12 19 0 17 12 13 14 19 0 19 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 6 18 15 0 19 17 6 19 0 5 0 1 4 5 4 1 2 3 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 17 12 13 14\n"
+;
+
+const char* data_dqrgl_block18 = 
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 19 0 1 2 19 19 2 3 4 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 6 18 15 0 19 17 6 19 0 5 0 1 2 5 5 2 3 4 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 19 0 1 2 19 6 19 2 5 2 3 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 17 19 4 18 15 0 19 17 4 19 0 3 0 1 2 3 8 18 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 3 0 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 17 18 6 7 15 0 18 17 6 18 0 1 6 1 19 5 1 2 3 19 5 19 3 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 4 5 1 2 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 4 5 1 2 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 4 5 1 2 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 6 7 17 0 19 18 6 19 0 1 6 1 4 5 1 2 3 4 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 18 19 6 7 15 0 19 18 6 19 0 1 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 18 19 6 7 17 0 19 18 6 19 0 1 6 1 2 5 5 2 3 4 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 18 19 4 5 15 0 19 18 4 19 0 1 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 18 7 7 18 5 6 18 19 4 5 17 0 19 18 4 19 0 1 4 1 2 3 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 4 9 4 5 8 9 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 4 9 4 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 4 7 4 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 19 2 3 15 0 19 18 2 19 0 1 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 9 10 17 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 10 17 16 7 8 9 16 5 6 7 16 17 18 5 5 18 3 4 18 19 2 3 17 0 19 18 2 19 0 1 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 10 17 4 9 4 5 19 9 19 5 6 7 9 19 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 3 4 18 1 2 3 15 0 1 18 10 17 4 19 4 5 8 19 8 5 6 7 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 7 17 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 6 17 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 19 18 1 2 5 19 5 2 3 4 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 6 19 1 2 5 6 5 2 3 4 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 6 7 1 2 5 6 5 2 3 4 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 19 18 1 2 3 19 19 3 4 5 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 19 7 1 2 3 19 19 3 4 5 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 6 7 1 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 19 1 2 3 4 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 19 1 2 3 4 19 4 5 6 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 4 19 1 2 3 4 19 4 5 6 7 18 19 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 4 19 1 2 3 4 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 4 19 1 2 3 4 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 19 1 2 3 4 19 4 5 6 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 4 7 1 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 19 18 1 2 3 19 18 19 3 6 3 4 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 19 18 1 2 3 19 18 19 3 4 18 4 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 19 18 1 2 3 19 18 19 3 4 17 18 4 5 7 17 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 5 6 0 1 17 5 17 1 19 18 1 2 3 19 18 19 3 4 5 17 18 4 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 19 18 1 2 3 19 18 19 3 4 5 17 18 4 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 19 18 1 2 3 19 18 19 3 4 5 17 18 4 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 19 18 1 2 3 19 18 19 3 4 5 17 18 4 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 17 5 17 1 19 18 1 2 3 19 18 19 3 4 5 17 18 4 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 19 5 1 2 3 19 5 19 3 4 7 18 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 19 5 1 2 3 19 5 19 3 4 7 18 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 19 5 1 2 3 19 5 19 3 4 7 18 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 6 18 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 6 18 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 6 18 6 1 19 5 1 2 3 19 5 19 3 4 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 5 1 2 3 4 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 19 6 7 8 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 4 5 1 2 3 4 17 18 5 19 5 6 7 19 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 18 19 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 18 19 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 8 18 19 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 4 5 1 2 3 4 8 18 19 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 19 1 2 3 4 6 17 18 19 6 19 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 19 1 2 3 4 6 17 18 19 6 19 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 19 1 2 3 4 6 17 18 19 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 19 1 2 3 4 6 17 18 19 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 4 19 1 2 3 4 6 17 18 19 6 19 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 4 5 1 2 3 4 18 7 8 19 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 4 5 1 2 3 4 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 19 0 1 6 7 6 1 4 5 1 2 3 4 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 4 5 1 2 3 4 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 10 0 1 6 7 6 1 4 5 1 2 3 4 10 7 8 9 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 7 10 0 1 6 7 6 1 4 5 1 2 3 4 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 4 5 1 2 3 4 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 5 6 2 3 4 5 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 19 19 2 5 6 2 3 4 5 7 18 19 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 5 6 2 3 4 5 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 5 6 2 3 4 5 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 19 8 19 0 1 6 6 1 4 5 1 2 3 4 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 5 6 2 3 4 5 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 2 7 7 2 5 6 2 3 4 5 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 7 7 2 5 6 2 3 4 5 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 7 7 2 5 6 2 3 4 5 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 4 5 1 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 4 5 1 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 19 19 3 4 5 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 19 19 3 4 5 17 18 19 5 7 17 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 6 7 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 6 6 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 6 6 3 4 5 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 6 6 3 4 5 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 19 8 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 6 6 3 4 5 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 2 7 7 2 3 6 6 3 4 5 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 7 7 2 3 6 6 3 4 5 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 7 7 2 3 6 6 3 4 5 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 2 5 5 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 2 5 5 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 1 6 6 1 2 5 5 2 3 4 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 19 19 1 2 3 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 19 4 5 6 7 18 19 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 8 19 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 6 6 1 2 3 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 2 3 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 6 6 1 2 3 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 1 6 6 1 2 3 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 5 5 2 3 4 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 4 4 1 2 3 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 4 4 1 2 3 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 4 4 1 2 3 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 1 4 4 1 2 3 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 18 18 2 3 4 17 18 4 19 4 5 6 19 7 17 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 7 4 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 18 19 4 5 7 18 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 18 19 4 5 7 18 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 19 19 2 3 4 18 19 4 5 7 18 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 8 17 18 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 18 19 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 5 6 5 0 1 19 19 1 2 3 5 19 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 8 17 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 17 18 19 4 6 17 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 19 6 7 8 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 5 19 5 0 1 4 4 1 2 3 19 5 6 7 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 5 8 5 0 1 4 4 1 2 3 8 5 6 7 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 5 8 5 0 1 4 4 1 2 3 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 5 8 5 0 1 4 4 1 2 3 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 5 8 5 19 1 4 4 1 2 3 8 5 6 7 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 5 5 2 3 4 18 19 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 5 5 2 3 4 18 19 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 4 4 1 2 3 6 19 4 5 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 4 4 1 2 3 6 19 4 5 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 4 4 1 2 3 6 19 4 5 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 4 4 1 2 3 6 19 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 19 2 3 4 8 17 18 19 8 19 4 7 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 19 2 3 4 6 17 18 19 6 19 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 19 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 5 5 2 3 4 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 5 5 2 3 4 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 5 5 2 3 4 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 10 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 9 19 0 5 6 5 0 1 4 4 1 2 3 9 6 7 8 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 7 10 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 6 9 19 0 5 6 5 0 1 4 4 1 2 3 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 6 9 19 0 5 6 5 0 1 4 4 1 2 3 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 19 5 6 5 19 1 4 4 1 2 3 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 5 19 5 0 1 4 4 1 2 3 9 19 5 6 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 6 19 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 18 0 5 19 5 0 1 4 4 1 2 3 7 19 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 5 19 5 0 1 4 4 1 2 3 7 19 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 5 19 5 0 1 4 4 1 2 3 7 19 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 5 19 5 0 1 4 4 1 2 3 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 4 4 1 2 3 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 4 4 1 2 3 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 4 4 1 2 3 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 4 4 1 2 3 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 17 7 17 1 2 3 17 3 19 18 3 4 5 19 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 19 7 3 4 5 19 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 7 8 7 0 1 2 7 2 19 6 2 3 4 19 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 6 19 3 4 5 6 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 2 3 19 3 6 7 3 4 5 6 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 6 7 3 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 6 7 3 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 2 7 2 5 6 2 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 2 7 2 5 6 2 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 2 7 2 5 6 2 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 1 2 7 2 5 6 2 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 19 19 4 5 6 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 8 0 1 18 7 18 1 2 3 18 3 4 19 19 4 5 6 7 18 19 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 18 7 18 1 2 3 18 3 4 19 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 19 19 4 5 6 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 19 18 19 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 7 8 7 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 7 8 7 0 1 2 7 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 7 8 7 0 1 2 7 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 1 2 7 2 3 6 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 5 17 18 5 19 5 6 7 19 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 18 3 4 19 8 17 18 19 8 19 4 7 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 10 17 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 7 18 0 1 6 7 6 1 2 3 6 3 4 5 18 7 8 19 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 3 6 3 4 5 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 3 6 3 4 5 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 19 0 1 6 7 6 1 2 3 6 3 4 5 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 10 0 1 6 7 6 1 2 3 6 3 4 5 10 7 8 9 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 9 19 0 5 6 5 0 1 2 5 2 3 4 9 6 7 8 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 7 10 0 1 6 7 6 1 2 3 6 3 4 5 10 7 8 9 18 19 12 13 17 18 13 14\n"
+;
+
+const char* data_dqrgl_block19 = 
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 6 9 19 0 5 6 5 0 1 2 5 2 3 4 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 6 9 19 0 5 6 5 0 1 2 5 2 3 4 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 19 5 6 5 19 1 2 5 2 3 4 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 2 5 2 3 4 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 2 5 2 3 4 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 1 2 5 2 3 4 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 5 6 5 0 1 2 5 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 3 4 7 4 5 6 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 4 17 4 1 2 3 17 4 5 18 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 18 4 5 19 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 4 18 4 1 2 3 18 4 5 19 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 8 8 5 6 7 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 3 19 3 0 1 2 19 3 4 7 7 4 5 6 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 3 8 3 0 1 2 8 3 4 7 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 3 8 3 0 1 2 8 3 4 7 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 3 8 3 0 1 2 8 3 4 7 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 3 8 3 19 1 2 8 3 4 7 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 9 6 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 3 19 3 0 1 2 19 3 4 5 9 19 5 8 5 6 7 8 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 3 19 3 0 1 2 19 3 4 5 9 19 5 6 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 19 4 5 6 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 19 3 4 5 7 19 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 19 3 4 5 7 19 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 19 3 4 5 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 18 9 10 11 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 19 3 6 3 19 1 2 6 3 4 5 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 18 14 16 8 9 10 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 18 10 11 12 14 18 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 3 6 3 19 1 2 6 3 4 5 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 3 6 3 19 1 2 6 3 4 5 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 3 6 3 0 1 2 6 3 4 5 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 5 8 5 19 3 4 8 5 6 7 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 19 3 4 7 19 7 4 5 6 8 17 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 19 8 19 0 1 2 8 19 2 7 2 3 6 7 6 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 19 8 19 0 1 2 8 19 2 7 2 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 8 17 19 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 6 17 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 6 17 19 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 6 17 19 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 3 17 18 3 19 3 4 5 19 6 17 19 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 6 3 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 6 3 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 6 19 2 5 2 3 4 5 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 6 19 2 5 2 3 4 5 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 6 19 2 5 2 3 4 5 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 19 6 19 0 1 2 6 19 2 5 2 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 3 17 18 3 4 8 17 4 19 4 5 6 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 4 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 4 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 4 8 18 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 18 19 3 4 8 18 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 18 19 3 4 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 10 17 6 19 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 8 9 19 19 9 10 11 12 17 19 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 8 9 10 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 8 9 10 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 13 8 9 10 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 18 0 19 4 19 0 1 2 4 19 2 3 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 18 5 18 1 2 3 5 18 3 4 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 8 18 19 3 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 19 18 19 1 2 3 8 18 19 3 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 8 17 18 19 8 19 2 7 2 3 6 7 6 3 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 18 17 18 1 2 19 8 17 18 19 8 19 2 7 2 3 4 7 7 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 6 17 18 19 6 19 2 5 2 3 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 6 17 18 19 6 19 2 5 2 3 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 6 17 18 19 6 19 2 5 2 3 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 6 17 18 19 6 19 2 5 2 3 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 18 17 18 1 2 19 6 17 18 19 6 19 2 5 2 3 4 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 19 4 17 18 19 4 19 2 3 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 4 5 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 4 5 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 4 5 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 6 17 4 5 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 11 6 19 10 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 6 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 6 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 6 7 8 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 12 7 8 19 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 7 8 11 11 8 9 10 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 7 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 7 17 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 6 9 6 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 8 17 6 7 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 11 12 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 9 10 19 14 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 9 10 11 17 17 11 14 15 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 11 12 8 9 10 11 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 17 4 0 1 18 17 18 1 2 3 4 17 18 3 10 19 14 15 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 19 6 7 8 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 0 3 4 3 0 1 2 9 4 5 19 19 5 6 7 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 19 6 7 8 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 9 9 6 7 8 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 9 9 6 7 8 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 10 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 9 19 0 3 4 3 0 1 2 9 4 5 8 8 5 6 7 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 5 10 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 4 9 19 0 3 4 3 0 1 2 9 4 5 8 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 4 9 19 0 3 4 3 0 1 2 9 4 5 8 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 19 3 4 3 19 1 2 9 4 5 8 8 5 6 7 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 7 18 7 8 19 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 5 10 0 1 4 5 4 1 2 3 10 5 6 7 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 4 9 19 0 3 4 3 0 1 2 9 4 5 6 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 4 9 19 0 3 4 3 0 1 2 9 4 5 6 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 19 3 4 3 19 1 2 9 4 5 6 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 10 18 19 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 10 17 18 19 10 19 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 8 17 18 19 8 19 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 8 17 18 19 8 19 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 8 17 18 19 8 19 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 5 18 0 1 4 5 4 1 2 3 18 5 6 19 8 17 18 19 8 19 6 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 17 18 19 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 17 18 19 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 17 18 19 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 4 7 18 19 3 4 3 19 1 2 7 4 5 6 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 4 7 18 19 3 4 3 19 1 2 7 4 5 6 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 17 11 12 13 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 4 7 18 19 3 4 3 19 1 2 7 4 5 6 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 4 7 19 0 3 4 3 0 1 2 7 4 5 6 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 19 5 6 5 19 3 4 9 6 7 8 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 8 9 5 6 7 8 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 3 19 3 0 1 2 9 19 3 4 9 4 7 8 4 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 9 9 6 7 8 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 3 19 3 0 1 2 9 19 3 4 9 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 18 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 7 19 3 4 7 4 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 8 19 4 5 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 7 19 3 4 7 4 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 8 19 4 5 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 8 19 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 7 19 3 4 7 4 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 3 19 3 0 1 2 7 19 3 4 7 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 4 19 4 1 2 3 8 19 4 5 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 4 19 4 1 2 3 18 19 4 5 6 17 18 5 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 12 7 10 11 7 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 13 8 9 10 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 3 19 3 0 1 2 5 19 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 4 18 4 1 2 3 6 18 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 19 6 7 10 19 10 7 8 9 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 11 18 5 10 5 6 9 10 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 11 18 5 10 5 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 11 18 5 8 5 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 10 18 6 19 6 7 8 19 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 19 6 7 8 19 9 17 19 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 19 6 7 8 19 9 17 19 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 17 18 6 19 6 7 8 19 9 17 19 8 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 8 5 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 10 17 18 9 11 12 13 14\n"
+;
+
+const char* data_dqrgl_block20 = 
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 9 6 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 9 6 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 8 5 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 9 6 7 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 9 6 7 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 8 5 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 8 5 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 9 6 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 11 18 5 6 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 18 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 7 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 6 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 9 18 5 6 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 10 19 6 7 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 7 12 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 7 10 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 8 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 10 7 8 9 10 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 11 18 7 10 7 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 17 18 7 8 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 9 18 7 8 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 10 17 18 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 10 17 18 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 18 19 6 7 8 17 18 7 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 13 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 3 4 3 0 1 2 7 18 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 4 5 4 1 2 3 8 18 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 8 19 18 8 9 10 19 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 12 7 19 11 7 8 9 19 11 19 9 10 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 11 12 8 9 10 11 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 10 11 7 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 12 7 10 11 7 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 12 7 10 11 7 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 8 9 18 18 9 10 19 12 17 18 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 8 9 19 19 9 10 11 17 18 19 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 8 9 19 19 9 10 11 12 18 19 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 12 12 9 10 11 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 8 11 11 8 9 10 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 12 7 8 11 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 8 9 10 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 8 9 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 8 9 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 18 7 8 9 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 8 9 10 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 19 5 6 5 19 3 4 12 9 10 11 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 19 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 0 3 4 3 0 1 2 13 8 9 19 19 9 10 11 13 19 11 12 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 19 19 10 11 12 17 18 19 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 15 18 16 8 13 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 8 9 12 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 13 8 9 12 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 9 10 11 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 18 19 3 4 3 19 1 2 13 8 9 10 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 11 17 18 11 19 11 12 13 19 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 9 10 11 17 19 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 19 9 10 11 17 19 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 5 6 5 19 3 4 13 10 11 12 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 19 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 3 4 3 0 1 2 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 19 8 9 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 19 18 10 11 12 19 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 18 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 19 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 12 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 17 9 10 11 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 3 4 3 0 1 2 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 19 18 10 11 12 19 18 19 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 4 5 4 1 2 3 17 10 11 18 18 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 5 6 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 7 8 7 19 5 6 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 17 6 2 3 18 17 18 3 4 19 6 17 18 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 7 8 0 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 19 18 2 3 6 19 6 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 19 2 7 8 2 3 6 7 6 3 4 5 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 19 18 2 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 19 2 7 8 2 3 4 7 7 4 5 6 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 9 10 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 8 9 19 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 5 18 2 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 5 19 2 3 4 5 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 7 4 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 8 17 18 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 18 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 9 6 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 4 5 1 2 3 4 9 19 5 8 5 6 7 8 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 4 5 1 2 3 4 9 19 5 6 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 5 6 2 3 4 5 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 18 8 19 8 9 10 19 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 11 8 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 11 18 7 10 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 9 18 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 4 5 1 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 19 7 3 4 5 19 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 6 19 3 4 5 6 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 3 19 19 3 6 7 3 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 7 7 2 5 6 2 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 19 19 4 5 6 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 3 19 19 3 4 7 7 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 7 7 2 3 6 6 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 3 19 19 3 4 5 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 18 19 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 8 9 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 18 2 3 19 19 3 4 5 8 18 19 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 18 18 3 4 19 8 17 18 19 8 19 4 7 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 19 6 17 18 19 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 19 6 17 18 19 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 17 2 3 18 18 3 4 19 6 17 18 19 6 19 4 5 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 5 5 2 3 4 9 19 5 6 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 18 19 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 18 19 1 6 6 1 2 5 5 2 3 4 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 10 13 14 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 17 2 3 4 8 17 4 18 4 5 19 18 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 9 4 5 8 9 8 5 6 7 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 3 9 19 3 8 3 4 7 8 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 3 9 19 3 8 3 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 3 9 19 3 6 3 4 5 6 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 7 4 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 19 2 3 4 18 19 4 7 4 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 19 1 2 3 9 19 3 4 9 4 7 8 4 5 6 7 15 0 18 17\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 19 1 2 3 7 19 3 4 7 4 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 19 6 7 10 19 10 7 8 9 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 11 6 7 10 11 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 11 18 5 10 5 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 18 9 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 11 18 5 8 5 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 10 18 6 19 6 7 8 19 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 19 6 7 8 19 9 17 19 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 19 6 7 8 19 9 17 19 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 17 18 6 19 6 7 8 19 9 17 19 8 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 8 5 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 9 6 7 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 9 6 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 8 5 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 9 6 7 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 9 6 7 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 8 5 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 9 6 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 8 5 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 18 7 10 11 7 8 9 10 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 18 7 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 7 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 6 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 10 19 6 7 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 9 18 5 6 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 7 12 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 7 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 8 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 7 10 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 11 18 7 10 7 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 9 18 7 8 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 5 6 0 1 2 5 5 2 3 4 8 18 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 5 6 0 1 2 5 5 2 3 4 8 19 6 7 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 4 5 19 0 1 4 4 1 2 3 7 18 5 6 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 0 1 4 4 1 2 3 12 7 19 11 7 8 9 19 11 19 9 10 15 0 18 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 7 10 11 7 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 12 7 10 11 7 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 6 7 12 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 7 10 11 7 8 9 10 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 18 19 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 6 7 12 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 12 17 18 16 10 11 12 16 6 7 10 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 7 8 9 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 19 19 10 11 12 17 18 19 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 11 17 18 11 19 11 12 13 19 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 19 9 10 11 17 19 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 19 9 10 11 17 19 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 12 17 18 16 8 11 12 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 8 9 10 12 13 14 17 17 0 19 18 17 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 11 18 7 8 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 19 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 19 8 9 17 10 11 18 18 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 4 5 19 0 1 4 4 1 2 3 9 18 7 8 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 19 18 10 11 12 19 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 18 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 19 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 12 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 10 17 18 16 8 9 10 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 10 11 12 17 17 0 19 18 17 12 15 0 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 4 5 19 0 1 4 4 1 2 3 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 19 18 10 11 12 19 18 19 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 5 6 0 1 2 5 5 2 3 4 17 10 11 18 18 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 17 17 4 19 18 4 5 6 19 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 9 9 4 19 8 4 5 6 19 8 19 6 7 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 8 8 3 19 7 3 4 5 19 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 7 8 4 5 6 7 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 19 19 3 6 7 3 4 5 6 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 9 9 4 7 8 4 5 6 7 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 9 9 4 7 8 4 5 6 7 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 10 0 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 2 9 19 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 19 1 2 9 2 3 8 8 3 6 7 3 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 8 8 3 4 19 19 4 5 6 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 18 18 4 5 19 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 18 18 4 5 19 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 8 8 5 6 7 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 0 1 2 9 2 3 19 19 3 4 7 7 4 5 6 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 9 9 4 5 8 8 5 6 7 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 9 9 4 5 8 8 5 6 7 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 10 0 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 2 9 19 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 19 1 2 9 2 3 8 8 3 4 7 7 4 5 6 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 19 6 7 8 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 10 0 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 2 9 19 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 19 1 2 9 2 3 8 8 3 4 5 8 5 6 7 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 7 7 4 5 6 18 7 8 19 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 19 7 8 9 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 19 7 8 9 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 7 7 4 5 6 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 2 9 19 0 1 2 9 2 3 6 6 3 4 5 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 6 6 3 4 5 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 2 9 18 19 1 2 9 2 3 6 6 3 4 5 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 10 11 12 16 18 19 10 10 19 2 9 19 0 1 2 9 2 3 6 6 3 4 5 9 6 7 8 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 9 6 7 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 10 17 18 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 19 19 3 4 5 7 19 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 19 19 4 5 6 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 19 19 4 5 6 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 19 19 4 5 6 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 19 19 3 4 5 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 19 19 4 5 6 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 2 7 18 0 1 2 7 2 3 19 19 3 4 5 7 19 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 10 17 8 9 11 12 13 14\n"
+;
+
+const char* data_dqrgl_block21 = 
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 11 18 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 8 9 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 19 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 19 8 9 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 19 8 9 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 10 19 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 9 18 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 2 7 18 19 1 2 7 2 3 6 6 3 4 5 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 19 3 4 9 4 5 8 8 5 6 7 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 19 9 5 6 7 19 9 19 7 8 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 8 19 5 6 7 8 10 17 18 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 8 9 5 6 7 8 17 18 19 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 8 9 5 6 7 8 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 8 9 5 6 7 8 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 5 10 5 8 9 5 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 9 9 6 7 8 10 18 19 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 9 9 6 7 8 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 3 10 0 1 2 3 10 3 4 5 10 5 6 9 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 10 18 19 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 18 5 6 19 8 17 18 19 8 19 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 17 18 19 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 17 18 19 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 17 18 19 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 2 7 18 19 1 2 7 2 3 4 7 4 5 6 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 17 18 16 12 13 14 16 8 9 12 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 12 9 10 11 17 0 19 18 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 11 18 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 2 7 19 0 1 2 7 2 3 4 7 4 5 6 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 4 9 18 19 3 4 9 4 5 6 9 6 7 8 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 19 6 17 18 19 6 19 4 5 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 6 11 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 6 7 8 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 17 18 19 5 7 17 5 6 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 7 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 7 17 11 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 7 10 11 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 8 17 6 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 11 12 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 3 18 0 1 2 3 18 3 4 5 6 17 18 5 9 10 19 14 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 18 7 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 19 10 11 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 10 19 6 7 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 9 18 5 6 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 10 11 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 10 19 6 7 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 9 18 5 6 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 7 10 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 19 8 11 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 11 18 7 10 7 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 9 18 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 10 17 18 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 10 17 18 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 12 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 18 19 6 7 8 17 18 7 9 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 6 0 1 2 3 6 3 4 5 8 18 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 19 8 9 16 15 0 19 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 5 19 0 1 2 5 2 3 4 7 18 5 6 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 19 19 10 11 12 17 18 19 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 11 17 18 11 19 11 12 13 19 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 19 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 19 9 10 11 17 19 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 11 18 7 8 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 19 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 2 5 19 0 1 2 5 2 3 4 9 18 7 8 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 19 18 10 11 12 19 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 18 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 19 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 11 12 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 3 6 0 1 2 3 6 3 4 5 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 2 5 19 0 1 2 5 2 3 4 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 19 5 6 9 6 7 8 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 6 9 18 19 5 6 9 6 7 8 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 19 18 19 3 6 7 3 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 9 2 3 8 9 8 3 6 7 3 4 5 6 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 7 8 7 2 5 6 2 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 7 2 3 18 7 18 3 4 19 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 19 18 19 3 4 7 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 9 2 3 8 9 8 3 4 7 7 4 5 6 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 7 8 7 2 3 6 6 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 19 18 19 3 4 5 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 9 2 3 8 9 8 3 4 5 8 5 6 7 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 7 8 7 2 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 5 8 5 2 3 4 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 19 18 19 3 4 5 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 18 8 0 1 2 18 8 18 2 7 2 3 19 7 19 3 4 5 7 19 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 19 7 19 3 4 5 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 7 2 3 19 7 19 3 4 5 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 19 18 19 3 4 5 6 18 19 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 19 18 19 3 4 5 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 19 18 19 3 4 5 6 18 19 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 19 18 19 3 4 5 6 18 19 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 17 6 0 1 2 17 6 17 2 18 2 3 19 18 19 3 4 5 6 18 19 5 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 18 7 8 9 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 6 1 2 5 6 5 2 3 4 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 6 19 6 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 6 19 6 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 7 2 3 6 7 6 3 4 5 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 5 6 5 2 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 6 7 6 3 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 5 6 5 2 3 4 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 3 8 8 3 6 7 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 18 2 3 4 18 18 4 5 19 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 8 1 2 3 8 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 4 19 19 4 5 6 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 4 19 19 4 5 6 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 3 6 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 7 2 3 4 7 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 6 1 2 3 6 6 3 4 5 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 9 9 6 7 8 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 4 1 2 3 4 9 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 7 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 7 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 7 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 18 5 6 7 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 5 2 3 4 5 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 5 2 3 4 5 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 5 2 3 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 4 1 2 3 4 7 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 5 2 3 4 5 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 4 1 2 3 4 7 4 5 6 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 4 19 8 19 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 19 2 3 4 19 8 19 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 5 2 3 4 5 6 17 18 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 18 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 6 7 9 17 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 8 17 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 5 2 3 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 4 1 2 3 4 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 17 8 0 1 2 17 8 17 2 3 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 8 9 3 4 7 8 7 4 5 6 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 7 8 2 3 6 7 6 3 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 8 9 3 4 5 8 8 5 6 7 10 17 18 9\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 7 8 2 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 5 8 2 3 4 5 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 19 7 3 4 5 19 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 18 8 0 1 2 18 8 18 2 3 8 3 19 7 3 4 5 19 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 6 7 3 4 5 6 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 6 7 3 4 5 6 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 6 7 3 4 5 6 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 6 7 3 4 5 6 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 6 7 3 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 6 7 3 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 6 7 3 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 5 6 2 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 6 7 3 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 5 6 2 3 4 5 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 3 8 8 3 6 7 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 3 8 8 3 4 7 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 18 0 1 19 9 19 1 2 9 2 3 8 8 3 4 5 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 7 7 4 5 6 8 17 18 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 7 7 4 5 6 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 7 7 4 5 6 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 7 7 4 5 6 8 17 18 7 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 4 7 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 4 7 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 3 6 6 3 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 19 8 0 1 2 19 8 19 2 3 8 3 4 7 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 12 13 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 19 7 18 0 1 19 7 19 1 2 7 2 3 6 6 3 4 5 13 0 18 17 13 14 15 0\n"
+  "16 4 11 16 11 14 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 7 10 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 18 3 4 5 6 17 18 5 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 18 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 10 18 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 18 6 0 1 2 18 6 18 2 3 6 3 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 19 5 18 0 1 19 5 19 1 2 5 2 3 4 11 0 18 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 4 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 4 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 17 4 9 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 9 4 5 8 8 5 6 7 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 4 7 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 4 5 6 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 14 15 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 5 8 9 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 8 5 6 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 12 15 16 5 6 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 6 9 10 6 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 5 6 11 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 11 6 7 10 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 8 13 14 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 8 13 14 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 0 17 17 0 19 18 0 1 2 19 18 19 2 3 4 17 18 3 7 8 13 14 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 6 11 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 18 6 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 9 6 7 8 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 11 17 5 10 5 6 9 10 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 11 17 5 10 5 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 9 17 5 8 5 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 9 17 5 8 5 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 9 17 5 8 5 6 7 8 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 17 18 4 5 7 17 5 6 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 10 17 6 7 10 7 8 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 18 6 17 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 8 17 6 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 11 12 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 0 17 17 0 18 4 0 1 2 18 4 18 2 3 6 17 4 5 9 10 19 14 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 11 6 19 10 6 7 8 19 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 11 6 9 10 6 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 11 6 7 10 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 9 6 7 8 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 11 17 15 16 9 10 11 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 6 7 8 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 9 6 7 8 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 9 6 7 8 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 19 19 8 11 12 8 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 13 13 8 11 12 8 9 10 11 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 19 19 8 9 12 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 19 19 8 9 10 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 11 12 15 16 7 17 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 7 8 19 19 8 9 10 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 11 11 8 9 10 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 11 11 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 12 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 12 7 8 11 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 7 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 18 7 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 7 10 11 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 7 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 7 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 11 6 7 19 11 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 19 6 7 10 19 10 7 8 9 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 11 6 7 10 11 10 7 8 9 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 12 18 6 11 6 7 10 11 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 19 6 7 8 19 19 8 9 10 12 19 10 11\n"
+;
+
+const char* data_dqrgl_block22 = 
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 12 18 6 11 6 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 19 6 7 8 19 12 19 8 11 8 9 10 11\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 19 6 7 8 19 10 19 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 10 17 6 19 6 7 8 19 10 19 8 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 6 9 6 7 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 9 6 7 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 6 9 6 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 6 9 6 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 6 9 6 7 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 12 17 6 7 12 7 19 11 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 10 18 6 7 10 7 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 13 17 7 12 7 8 11 12 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 13 17 7 12 7 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 11 17 7 10 7 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 10 15 16 18 17 9 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 9 17 7 8 10 13 14 15 10 11 12 13\n"
+  "16 4 11 16 9 10 15 16 18 17 9 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 18 6 7 9 17 7 8 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 5 6 17 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 8 17 6 7 9 10 19 14 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 9 10 13 17 13 10 11 12 17 13 14 15\n"
+  "16 4 11 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 9 10 11 17 17 11 14 15 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 8 18 6 7 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 11 12 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 19 19 9 12 13 9 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 19 19 9 10 13 13 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 19 19 9 10 11 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 12 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 19 19 9 10 11 17 19 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 9 12 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 9 10 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 9 10 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 10 19 17 19 10 13 14 10 11 12 13 17 19 14 15\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 9 14 15 14 9 12 13 9 10 11 12 15 0 18 17\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 10 19 17 19 10 11 14 14 11 12 13 17 19 14 15\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 9 14 15 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 9 10 19 17 19 10 11 12 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 8 9 14 15 14 9 10 11 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 19 14 8 9 12 19 12 9 10 11 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 19 14 8 9 10 19 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 19 14 8 9 10 19 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 18 4 0 1 2 18 4 18 2 3 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 9 18 18 9 14 15 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 19 4 0 1 2 19 4 19 2 3 17 8 9 18 18 9 14 15 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 0 18 17 9 10 15 0 15 10 13 14 10 11 12 13\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 0 18 17 9 10 15 0 15 10 11 14 14 11 12 13\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 19 3 18 0 1 19 3 19 1 2 9 0 18 17 9 10 15 0 15 10 11 12 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 10 19 10 5 8 9 5 6 7 8 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 11 4 5 10 11 10 5 8 9 5 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 10 19 10 5 6 9 9 6 7 8 11 17 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 11 4 5 10 11 10 5 6 9 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 11 4 5 10 11 10 5 6 7 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 8 19 8 5 6 7 9 17 19 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 8 19 8 5 6 7 9 17 19 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 18 17 9 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 8 19 8 5 6 7 9 17 19 8 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 9 4 5 8 9 8 5 6 7 11 18 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 9 4 5 8 9 8 5 6 7 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 9 4 5 8 9 8 5 6 7 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 9 4 5 8 9 8 5 6 7 10 17 18 9 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 3 4 0 1 2 3 10 19 4 9 4 5 8 9 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 3 4 0 1 2 3 10 19 4 9 4 5 8 9 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 10 18 16 15 0 19 19 0 3 4 0 1 2 3 10 19 4 9 4 5 6 9 9 6 7 8 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 19 0 3 4 0 1 2 3 10 19 4 9 4 5 6 9 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 7 8 11 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 19 4 5 6 19 7 17 19 6 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 9 18 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 9 18 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 15 16 17 8 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 11 8 9 10 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 7 4 5 6 7 8 17 18 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 10 18 8 9 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 7 4 5 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 10 11 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 2 3 19 0 1 2 7 18 3 6 3 4 5 6 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 3 4 0 1 2 3 8 18 4 5 8 5 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 9 6 7 8 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 0 18 18 0 3 4 0 1 2 3 17 18 4 5 11 17 5 10 5 6 19 10 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 11 18 5 10 5 6 9 10 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 19 18 11 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 11 18 5 10 5 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 9 18 5 8 5 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 19 18 9 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 9 18 5 8 5 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 19 18 7 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 7 18 5 6 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8 12 13 14 15\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 6 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 6 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 6 13 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 7 14 15 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 7 8 13 14 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 7 14 15 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 7 8 13 14 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 7 14 15 16 17 6 7 16 19 18 17 16 15 0 19 19 0 3 4 0 1 2 3 18 19 4 5 6 17 18 5 7 8 13 14 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 12 17 6 7 12 7 19 11 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 10 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 13 17 7 12 7 8 11 12 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 17 18 6 7 13 17 7 12 7 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 19 0 3 4 0 1 2 3 6 19 4 5 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 19 19 9 12 13 9 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 19 19 9 10 13 13 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 19 19 9 10 11 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 9 14 15 14 9 12 13 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 9 14 15 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 18 5 6 16 17 19 18 18 19 2 3 19 0 1 2 5 18 3 4 8 9 14 15 14 9 10 11 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 19 14 8 9 12 19 12 9 10 11 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 19 14 8 9 10 19 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 19 14 8 9 10 19 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 3 4 0 1 2 3 6 18 4 5 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 3 4 0 1 2 3 9 6 7 8 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 19 12 8 9 10 19 12 19 10 11 13 17 18 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 13 13 8 19 12 8 9 10 19 12 19 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 11 12 8 9 10 11 17 18 19 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 11 12 8 9 10 11 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 7 8 18 18 8 9 19 19 9 10 11 18 19 11 12 13 17 18 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 9 12 12 9 10 11 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 9 10 17 18 19 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 19 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 11 11 8 9 10 17 19 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 19 8 9 10 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 19 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 10 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 10 7 8 9 17 10 11 12 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 19 9 10 13 19 13 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 19 9 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 12 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 9 17 18 9 19 9 10 11 19 17 19 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 19 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 17 19 9 12 9 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 19 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 17 19 9 10 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 19 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 19 7 8 9 17 19 9 10 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 17 18 19 14 14 19 8 13 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 18 7 8 19 17 18 19 14 14 19 8 13 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 19 18 19 7 10 11 7 8 9 10 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 12 19 12 7 10 11 7 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 13 6 7 12 13 12 7 10 11 7 8 9 10 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 11 6 7 18 11 18 7 8 19 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 19 18 19 7 8 11 11 8 9 10 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 12 19 12 7 8 11 11 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 13 6 7 12 13 12 7 8 11 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 19 18 19 7 8 9 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 13 6 7 12 13 12 7 8 9 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 10 19 10 7 8 9 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 19 18 19 7 8 9 18 19 9 10 12 18 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 12 18 6 11 6 7 19 11 19 7 8 9 11 19 9 10 17 12 13 14\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 18 6 7 19 18 19 7 8 9 10 18 19 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 10 17 6 18 6 7 19 18 19 7 8 9 10 18 19 9 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 10 19 10 7 8 9 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 12 19 6 11 6 7 10 11 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 19 8 11 12 8 9 10 11 13 17 19 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 18 6 7 8 18 18 8 9 19 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 19 8 9 12 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 19 8 9 10 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 12 19 6 11 6 7 8 11 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 19 6 7 8 19 10 19 8 9 11 12 13 17 17 13 14 15\n"
+  "16 4 11 16 9 10 15 16 18 17 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 19 6 7 8 19 9 17 19 8 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 10 19 6 9 6 7 8 9 17 10 11 12 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 10 19 6 9 6 7 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 3 4 0 1 2 3 12 17 6 7 12 7 18 11 7 8 19 18 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 12 13 7 8 11 12 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 12 13 7 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 10 13 7 8 9 10 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 13 13 8 11 12 8 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 18 7 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 11 17 15 16 18 10 11 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 10 18 6 7 10 7 8 9 11 12 19 17 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 19 19 9 12 13 9 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 19 19 9 10 13 13 10 11 12 17 19 13 14\n"
+  "16 4 11 16 17 12 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 19 19 9 10 11 17 19 11 12 12 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 8 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 8 9 12 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 8 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 8 9 10 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 19 8 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 8 9 10 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 17 18 6 7 13 17 7 12 7 8 19 12 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 12 7 8 11 12 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 10 7 8 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 17 8 11 12 8 9 10 11 12 13 14 15\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 17 8 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 17 8 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 8 9 14 15 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 8 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 8 9 14 15 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 8 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 18 19 6 7 17 18 7 8 8 9 14 15 14 9 10 11 14 11 12 13\n"
+  "16 4 11 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 9 10 19 17 19 10 13 14 10 11 12 13 17 19 14 15\n"
+  "16 4 11 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 9 10 19 17 19 10 11 14 14 11 12 13 17 19 14 15\n"
+  "16 4 11 16 9 17 15 16 18 8 9 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 9 10 19 17 19 10 11 12 19 12 13 14 17 19 14 15\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 3 4 0 1 2 3 8 18 6 7 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 17 18 15 16 19 8 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 8 9 18 18 9 14 15 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 18 15 16 19 8 17 16 5 6 19 16 15 0 5 5 0 3 4 0 1 2 3 8 19 6 7 17 8 9 18 18 9 14 15 9 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 19 13 9 10 11 19 13 19 11 12 17 18 13 14\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 19 19 9 12 13 9 10 11 12 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 10 19 19 10 11 12 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 19 19 9 10 11 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 10 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 18 17 18 10 19 14 10 11 12 19 14 19 12 13 17 18 14 15\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 8 9 14 15 14 9 19 13 9 10 11 19 13 19 11 12 15 0 18 17\n"
+  "16 4 11 16 9 17 15 16 7 8 9 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 9 10 18 17 18 10 11 19 19 11 12 13 18 19 13 14 17 18 14 15\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 18 0 1 2 8 9 14 15 14 9 10 19 19 10 11 12 14 19 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 19 18 19 9 12 13 9 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 19 18 8 9 14 19 14 9 12 13 9 10 11 12 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 13 14 13 8 11 12 8 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 13 14 8 9 18 13 18 9 10 19 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 19 18 19 9 10 13 13 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 19 18 8 9 14 19 14 9 10 13 13 10 11 12 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 13 14 13 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 19 18 19 9 10 11 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 13 14 13 8 9 10 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 19 18 8 9 12 19 12 9 10 11 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 11 14 11 8 9 10 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 19 18 19 9 10 11 18 19 11 12 14 18 12 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 19 18 8 9 10 19 19 10 13 14 10 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 9 14 14 9 12 13 9 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 18 14 8 9 10 18 18 10 11 19 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 19 18 8 9 10 19 19 10 11 14 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 2 3 19 0 1 2 17 7 14 15 7 8 9 14 14 9 10 13 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 14 14 9 18 13 9 10 19 18 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 3 4 0 1 2 3 17 8 9 18 18 9 14 15 9 10 19 14 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 19 18 19 1 4 5 1 2 3 4 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 5 6 0 1 18 5 18 1 2 19 19 2 3 4 5 18 19 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 19 18 19 1 2 5 5 2 3 4 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 19 18 19 1 2 3 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 5 6 0 1 19 5 19 1 2 3 5 19 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 19 18 19 1 2 3 6 18 19 3 6 3 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 5 6 15 0 5 17 5 0 18 4 0 1 19 18 19 1 2 3 4 18 19 3 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 5 19 0 1 4 5 4 1 2 3 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 4 19 4 1 2 3 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 19 0 5 6 0 1 4 5 4 1 2 3 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 6 7 19 0 1 6 6 1 2 5 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 17 19 6 18 6 19 4 5 19 0 1 4 4 1 2 3 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 4 5 19 0 1 4 4 1 2 3 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 7 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 2 7 19 0 1 2 7 2 3 6 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 8 18 19 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 3 19 0 1 2 3 19 3 4 5 6 18 19 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 19 0 3 6 0 1 2 3 6 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 17 19 6 18 6 19 2 5 19 0 1 2 5 2 3 4 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 18 6 0 1 2 18 6 18 2 19 2 3 4 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 5 2 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 19 6 0 1 2 19 6 19 2 3 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 8 18 4 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 19 4 0 1 2 19 4 19 2 3 6 18 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 10 17 6 9 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 19 4 0 1 2 19 4 19 2 3 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 19 0 3 4 0 1 2 3 8 19 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 19 0 3 4 0 1 2 3 8 19 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 3 4 0 1 2 3 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 3 4 0 1 2 3 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 3 4 0 1 2 3 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 17 0 7 18 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 17 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 7 8 15 0 7 17 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 18 0 1 19 19 1 2 5 5 2 3 4 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 7 8 15 0 7 18 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 7 8 15 0 7 18 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 18 9 9 18 7 8 17 0 7 18 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 19 0 1 6 6 1 2 5 5 2 3 4 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 4 4 1 2 3 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 4 4 1 2 3 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 17 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 4 4 1 2 3 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 8 9 17 19 8 18 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 18 0 1 19 19 1 2 3 19 3 4 5 6 18 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 2 5 2 3 4 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 2 5 2 3 4 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 19 9 9 19 7 8 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 19 9 9 19 7 8 17 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 6 7 17 19 6 18 6 19 0 5 5 0 1 2 5 2 3 4 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 19 9 9 19 7 8 18 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 18 0 1 19 19 1 2 3 4 18 19 3 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 19 0 1 4 4 1 2 3 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 6 9 6 7 8 9 11 17 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 10 18 6 9 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 18 17 11 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 6 7 11 17 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 8 18 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 17 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 19 7 7 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 17 19 7 7 19 5 6 17 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 19 7 7 19 5 6 15 0 5 19 5 0 1 4 4 1 2 3 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 11 17 18 16 9 10 11 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 4 5 17 19 4 18 4 19 0 3 3 0 1 2 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 5 6 15 0 5 18 5 0 1 4 4 1 2 3 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 18 19 7 7 19 5 6 18 0 5 19 5 0 1 4 4 1 2 3 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 17 7 8 11 11 8 9 10 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 7 12 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 19 0 1 2 4 19 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 10 18 4 9 4 5 8 9 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 7 4 5 6 7 9 17 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 18 17 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 7 4 5 6 7 9 17 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 18 8 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 8 18 4 7 4 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 6 11 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+;
+
+const char* data_dqrgl_block23 = 
+  "16 4 11 16 13 14 15 16 9 10 13 16 18 17 9 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 9 17 5 8 5 6 7 8 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 18 17 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 17 18 4 5 7 17 5 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 18 6 17 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 3 4 15 0 3 19 3 0 1 2 6 18 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 4 5 12 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 12 5 6 11 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 4 5 12 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 12 5 6 11 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 4 5 12 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 12 5 6 11 11 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 5 6 11 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 11 6 7 10 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 4 5 10 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 10 5 6 9 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 5 6 11 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 11 6 7 10 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 4 5 8 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 5 6 7 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 9 6 7 8 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 7 8 19 19 8 11 12 8 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 7 8 13 13 8 11 12 8 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 6 13 14 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 13 6 7 12 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 7 17 13 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 7 8 19 19 8 9 12 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 6 13 14 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 13 6 7 12 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 6 13 14 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 13 6 7 12 12 7 8 9 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 7 12 13 16 5 6 7 16 18 19 5 5 19 3 4 18 0 3 19 3 0 1 2 12 7 8 11 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 6 11 12 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 11 6 7 10 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 10 15 17 16 6 9 10 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 9 6 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 11 6 7 19 11 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 19 6 7 10 19 10 7 8 9 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 17 18 6 11 6 7 10 11 10 7 8 9 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 12 18 6 11 6 7 10 11 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 6 11 6 7 10 11 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 12 18 6 11 6 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 6 11 6 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 6 9 6 7 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 19 6 7 8 19 12 19 8 11 8 9 10 11\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 10 17 6 19 6 7 8 19 10 19 8 9 11 12 13 14\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 10 18 6 9 6 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 12 17 6 7 12 7 19 11 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 6 7 12 7 10 11 7 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 12 18 6 7 12 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 10 18 6 7 10 7 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 17 18 6 7 13 17 7 12 7 8 11 12 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 17 18 6 7 13 17 7 12 7 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 17 16 18 8 9 16 5 6 18 16 17 19 5 5 19 3 4 17 0 3 19 3 0 1 2 8 18 6 7 9 10 13 14 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 19 5 5 19 3 4 15 0 3 19 3 0 1 2 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 9 14 15 14 9 12 13 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 9 14 15 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 8 15 17 16 6 7 8 16 4 5 6 16 17 18 4 4 18 2 3 17 19 2 18 2 19 0 1 8 9 14 15 14 9 10 11 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 19 14 8 9 12 19 12 9 10 11 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 19 14 8 9 10 19 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 3 4 15 0 3 18 3 0 1 2 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 19 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 4 5 1 2 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 4 5 1 2 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 19 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 5 5 2 3 4 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 5 5 2 3 4 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 3 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 6 7 6 1 2 3 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 19 0 1 4 19 4 1 2 3 19 4 5 6 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 4 7 4 1 2 3 7 4 5 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 4 7 4 1 2 3 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 4 7 4 1 2 3 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 5 0 1 4 5 4 1 2 3 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 5 0 1 4 5 4 1 2 3 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 17 7 7 17 18 6 15 0 18 17 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 4 5 4 1 2 3 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 7 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 17 9 9 17 18 8 15 0 18 17 8 18 0 19 0 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 5 6 2 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 5 6 2 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 3 6 6 3 4 5 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 3 6 6 3 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 18 9 9 18 19 8 15 0 19 18 8 19 0 7 0 1 2 7 7 2 3 6 6 3 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 8 17 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 8 17 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 18 17 17 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 8 17 6 7 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 5 0 1 2 5 5 2 3 4 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 9 17 13 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 17 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 18 7 7 18 19 6 15 0 19 18 6 19 0 3 0 1 2 3 6 3 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 5 6 11 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 5 6 9 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 12 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 7 10 13 16 5 6 7 16 15 17 5 5 17 18 4 15 0 18 17 4 18 0 19 0 1 2 19 4 19 2 3 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 6 7 16 15 18 17 17 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 6 17 4 5 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 5 6 11 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 12 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 7 8 11 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 10 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 10 7 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 17 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 17 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 17 6 9 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 10 17 6 9 6 7 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 10 17 6 9 6 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 10 17 6 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 8 17 6 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 5 6 17 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 8 17 6 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 18 5 5 18 19 4 15 0 19 18 4 19 0 3 0 1 2 3 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 4 9 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 4 9 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 9 4 5 8 8 5 6 7 11 12 13 14\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 9 14 15 16 7 8 9 16 17 4 7 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 4 5 6 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 8 13 14 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 8 13 14 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 19 2 15 0 19 18 2 19 0 1 4 17 2 3 7 8 13 14 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 11 4 5 10 10 5 19 9 5 6 7 19 9 19 7 8\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 11 4 5 10 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 11 4 5 10 10 5 6 19 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 11 4 5 10 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 11 4 5 10 10 5 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 3 4 9 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 9 4 5 8 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 3 4 9 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 9 4 5 8 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 7 4 5 6 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 12 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 5 6 11 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 18 2 15 0 18 17 2 18 0 1 12 5 6 11 11 6 7 19 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 5 6 11 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 5 6 11 11 6 7 8 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 5 10 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 10 5 6 9 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 5 8 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 8 5 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 8 17 16 3 4 5 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 8 5 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 10 11 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 10 11 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 10 11 10 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 8 11 8 5 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 9 4 5 8 9 8 5 6 7 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 11 4 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 7 4 5 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 19 2 15 0 19 18 2 19 0 1 12 17 4 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 1 2 15 0 1 18 10 17 2 9 2 3 8 9 8 3 19 7 3 4 5 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 6 7 3 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 6 7 3 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 18 17 17 18 1 2 15 0 1 18 10 17 2 9 2 3 8 9 8 3 4 19 19 4 5 6 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 4 7 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 4 7 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 19 18 18 19 1 2 15 0 1 19 10 18 2 9 2 3 8 9 8 3 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 18 8 17 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 19 18 18 19 1 2 15 0 1 19 8 18 2 7 2 3 6 7 6 3 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 6 11 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 19 18 18 19 1 2 15 0 1 19 6 18 2 5 2 3 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 4 5 10 10 5 19 9 5 6 7 19 9 19 7 8\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 4 11 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 11 4 5 10 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 4 11 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 11 4 5 10 10 5 6 19 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 4 11 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 11 4 5 10 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 4 11 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 11 4 5 10 10 5 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 4 9 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 4 5 8 8 5 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 4 9 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 9 4 5 8 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 4 7 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 7 4 5 6 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 18 17 5 16 15 19 18 18 19 1 2 15 0 1 19 17 18 2 3 5 17 3 4 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 6 7 12 12 7 19 11 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 5 6 13 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 13 6 7 12 12 7 8 19 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 8 13 14 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 7 14 15 16 5 6 7 16 17 4 5 16 15 18 17 17 18 1 2 15 0 1 18 4 17 2 3 7 8 13 14 13 8 9 19 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 12 13 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 12 13 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 12 13 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 10 13 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 11 14 6 7 10 11 10 7 8 9 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 13 14 6 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 9 14 6 7 8 9 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 12 13 7 8 11 12 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 12 13 7 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 10 13 7 8 9 10 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 18 4 5 16 15 19 18 18 19 1 2 15 0 1 19 4 18 2 3 17 6 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 18 9 5 6 19 18 19 6 7 8 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 19 18 5 6 7 19 18 19 7 8 10 18 8 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 1 2 15 0 1 18 11 4 5 10 10 5 19 9 5 6 7 19 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 3 4 11 16 15 17 3 3 17 1 2 15 0 1 17 11 4 5 10 10 5 6 18 18 6 7 19 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 3 4 11 16 15 18 3 3 18 1 2 15 0 1 18 11 4 5 10 10 5 6 19 19 6 7 8 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 3 4 9 16 15 18 3 3 18 1 2 15 0 1 18 9 4 5 8 8 5 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 19 14 8 9 12 19 12 9 10 11 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 19 14 8 9 10 19 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 18 3 3 18 1 2 15 0 1 18 7 4 5 6 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 18 10 6 7 19 18 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 11 12 6 7 10 11 10 7 8 9 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 11 12 6 7 8 11 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 9 12 6 7 8 9 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 19 18 6 7 8 19 18 19 8 9 11 18 9 10\n"
+  "16 4 11 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 7 12 12 7 10 11 7 8 9 10 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 5 12 13 16 3 4 5 16 15 17 3 3 17 1 2 15 0 1 17 12 5 6 11 11 6 7 18 18 7 8 19 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 7 12 12 7 8 11 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 13 13 6 7 12 12 7 8 9 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 5 12 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 12 5 6 11 11 6 7 19 19 7 8 9 11 19 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 7 17 18 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 7 17 18 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 19 3 3 19 1 2 15 0 1 19 18 5 6 7 17 18 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 8 17 16 3 4 5 16 15 18 3 3 18 1 2 15 0 1 18 8 5 6 7 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 10 11 10 5 19 9 5 6 7 19 9 19 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 19 11 19 5 8 9 5 6 7 8 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 19 4 5 10 19 10 5 8 9 5 6 7 8 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 10 11 10 5 8 9 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 10 11 10 5 6 19 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 19 11 19 5 6 9 9 6 7 8 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 19 4 5 10 19 10 5 6 9 9 6 7 8 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 10 11 10 5 6 9 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 10 11 10 5 6 7 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 8 11 8 5 6 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 19 11 19 5 6 7 11 19 7 10 7 8 9 10\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 10 18 4 9 4 5 8 9 8 5 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 11 4 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 6 11 11 6 9 10 6 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 12 18 4 11 4 5 6 11 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 3 4 18 16 15 19 3 3 19 1 2 15 0 1 19 10 18 4 9 4 5 6 9 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 19 4 5 6 19 12 19 6 11 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 19 4 5 6 19 12 19 6 11 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 10 11 5 6 19 10 19 6 7 8 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 19 11 5 6 9 19 9 6 7 8 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 19 11 5 6 7 19 11 19 7 10 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 19 11 5 6 7 19 11 19 7 8 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 18 3 3 18 1 2 15 0 1 18 12 17 4 5 12 5 6 11 11 6 7 19 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 17 6 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 19 6 2 3 4 19 6 19 4 5 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 7 8 7 2 19 6 2 3 4 19 6 19 4 5 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 19 8 19 2 5 6 2 3 4 5 8 19 6 7 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 5 19 2 3 4 5 7 17 18 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 19 18 19 2 5 6 2 3 4 5 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 5 6 2 3 4 5 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 5 6 2 3 4 5 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 5 6 2 3 4 5 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 19 9 1 2 7 19 7 2 5 6 2 3 4 5 9 19 7 8 10 17 18 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 19 19 3 4 5 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 7 8 7 2 3 19 19 3 4 5 7 19 5 6 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 19 19 3 4 5 17 18 19 5 7 17 5 6\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 19 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 19 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 6 7 1 2 18 6 18 2 3 19 19 3 4 5 6 18 19 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 19 8 19 2 3 6 6 3 4 5 8 19 6 7 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 19 19 3 4 5 7 17 18 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 6 6 3 4 5 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 6 6 3 4 5 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 6 6 3 4 5 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 19 9 1 2 7 19 7 2 3 6 6 3 4 5 9 19 7 8 10 17 18 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 4 18 4 5 19 7 17 18 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 19 18 19 2 3 4 19 4 5 6 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 19 4 5 6 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 4 17 18 4 19 4 5 6 19 7 17 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 19 8 19 2 3 4 8 19 4 7 4 5 6 7 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 19 18 19 2 3 4 18 19 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 18 19 4 5 7 18 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 18 19 4 5 7 18 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 18 19 4 5 7 18 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 18 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 13 0 17 17 0 1 18 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 8 17 18 7 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 17 4 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 7 18 19 4 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 7 18 19 4 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 19 18 19 2 3 4 7 18 19 4 7 4 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 18 17 18 2 3 19 7 17 18 19 7 19 3 6 3 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 17 5 1 2 18 17 18 2 3 19 5 17 18 19 5 19 3 4 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 5 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 18 17 1 2 19 18 19 2 3 4 17 18 19 4 6 17 4 5 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 19 18 1 2 5 19 5 2 3 4 18 19 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 18 1 2 5 19 5 2 3 4 18 19 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 19 18 1 2 5 19 5 2 3 4 18 19 5 6 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 8 11 16 15 0 17 17 0 1 18 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 8 9 16 15 0 17 17 0 1 18 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 8 9 16 15 0 17 17 0 1 18 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 8 9 16 13 0 17 17 0 1 18 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 8 17 18 7 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 18 8 9 16 13 0 18 18 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 8 18 19 7 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 17 3 19 18 3 4 5 19 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 8 9 1 2 3 8 8 3 19 7 3 4 5 19 7 19 5 6 10 17 18 9\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 17 3 4 18 18 4 5 19 7 17 18 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 18 3 4 19 19 4 5 6 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 18 3 4 5 17 18 5 19 5 6 7 19 8 17 19 7\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 19 18 1 2 3 19 19 3 4 5 18 19 5 6 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 18 8 9 16 13 0 18 18 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 8 18 19 7 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 19 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 19 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 4 18 1 2 3 4 18 4 5 19 19 5 6 7 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 17 12 13 14 14 15 0 18\n"
+;
+
+const char* data_dqrgl_block24 = 
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 8 11 16 15 0 18 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 18 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 8 18 19 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 17 7 1 2 3 17 7 17 3 18 3 4 19 18 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 19 3 4 7 19 7 4 5 6 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 17 19 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 19 3 4 5 19 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 19 3 4 5 19 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 18 7 1 2 3 18 7 18 3 19 3 4 5 19 7 19 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 18 17 1 2 3 18 17 18 3 19 3 4 5 19 6 17 19 5 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 6 3 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 6 3 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 6 3 4 5 6 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 18 17 1 2 3 18 17 18 3 4 17 4 5 19 19 5 6 7 8 17 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 18 4 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 18 4 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 18 4 5 6 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 8 18 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 8 18 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 19 18 1 2 3 19 18 19 3 4 8 18 4 7 4 5 6 7 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 6 11 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 17 6 9 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 9 6 7 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 17 6 9 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 17 6 9 16 13 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 9 6 7 8 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 7 8 13 16 17 6 7 16 15 0 17 17 0 1 18 18 1 19 5 1 2 3 19 5 19 3 4 6 17 18 5 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 18 10 17 16 7 8 18 16 13 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 12 13 14 17 17 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 11 19 19 11 12 13 17 19 13 14\n"
+  "16 4 11 16 11 17 18 16 9 10 11 16 7 8 9 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 18 5 1 2 3 18 5 18 3 4 12 13 19 17 19 13 14 15 17 19 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 8 9 5 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 8 9 5 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 6 9 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 6 9 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 6 11 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 11 6 7 10 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 6 9 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 18 6 9 16 13 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 9 6 7 8 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 12 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 12 13 16 7 8 17 16 18 6 7 16 13 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 12 12 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 11 16 7 8 17 16 18 6 7 16 11 0 18 18 0 1 19 19 1 4 5 1 2 3 4 6 18 19 5 17 8 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 7 8 13 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 8 9 12 12 9 10 11 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 19 19 10 11 12 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 14 18 16 9 19 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 19 9 10 13 13 10 11 12 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 9 14 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 9 10 13 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 9 10 19 17 18 19 12 12 19 10 11 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 18 8 19 8 9 10 19 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 19 8 11 8 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 7 8 19 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 19 8 11 8 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 19 8 9 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 12 9 10 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 13 18 9 12 9 10 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 7 8 19 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 11 18 9 10 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 12 12 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 10 11 16 19 18 17 16 7 8 19 16 11 0 7 7 0 1 6 6 1 4 5 1 2 3 4 18 19 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 11 17 18 16 19 10 11 16 7 8 19 16 18 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 19 8 9 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 10 18 8 9 12 13 19 17 19 13 14 15 17 19 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 14 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 12 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 15 18 10 11 14 15 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 13 18 10 11 12 13 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 14 19 11 12 13 14 19 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 10 11 18 18 11 12 19 19 12 15 0 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 17 6 2 3 18 17 18 3 4 19 6 17 18 19 6 19 4 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 17 2 3 19 18 19 3 4 5 17 18 19 5 7 17 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 19 18 2 3 6 19 6 3 4 5 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 6 7 1 2 5 6 5 2 3 4 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 19 18 2 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 6 7 1 2 3 6 6 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 5 19 2 3 4 5 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 5 19 2 3 4 5 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 5 19 2 3 4 5 19 5 6 7 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 4 7 1 2 3 4 7 4 5 6 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 18 17 2 3 4 18 17 18 4 19 4 5 6 19 7 17 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 19 18 2 3 4 19 18 19 4 7 4 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 18 5 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 17 18 5 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 18 2 3 4 19 18 19 4 5 7 18 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 18 2 3 4 19 18 19 4 5 7 18 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 19 18 2 3 4 19 18 19 4 5 7 18 5 6 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 9 12 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 9 10 13 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 9 10 11 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 9 10 11 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 17 17 2 19 18 2 3 4 19 18 19 4 5 6 17 18 5 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 9 6 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 19 5 1 2 3 19 5 19 3 4 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 7 7 2 5 6 2 3 4 5 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 6 6 1 4 5 1 2 3 4 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 7 7 2 5 6 2 3 4 5 10 7 8 9 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 6 6 1 4 5 1 2 3 4 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 4 5 1 2 3 4 9 19 5 8 5 6 7 8 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 4 5 1 2 3 4 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 12 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 14 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 4 5 1 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 17 17 3 19 18 3 4 5 19 18 19 5 6 7 17 18 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 19 7 3 4 5 19 7 19 5 6 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 6 7 3 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 6 7 3 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 6 7 3 4 5 6 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 2 7 7 2 5 6 2 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 19 19 4 5 6 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 19 19 4 5 6 17 18 19 6 8 17 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 8 8 1 2 7 7 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 10 17 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 7 7 4 5 6 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 7 7 4 5 6 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 7 7 4 5 6 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 2 7 7 2 3 6 6 3 4 5 9 19 7 8 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 10 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 5 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 5 19 5 6 7 8 18 19 7 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 5 19 5 6 7 8 18 19 7 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 10 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 17 0 1 18 18 1 2 19 19 2 3 6 6 3 4 5 19 6 7 8 18 19 8 9 10 17 18 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 10 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 18 18 3 4 5 17 18 5 19 5 6 7 19 8 17 19 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 5 18 19 5 6 8 18 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 19 19 3 4 5 18 19 5 6 8 18 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 10 18 8 9 17 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 11 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 7 8 11 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 9 12 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 17 8 11 8 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 7 8 17 16 13 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 17 8 9 13 14 15 0\n"
+  "16 4 11 16 13 14 17 16 9 10 13 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 9 10 11 16 7 8 9 16 17 0 7 7 0 1 6 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 18 0 1 19 19 1 2 7 7 2 3 6 6 3 4 5 19 7 8 9 10 18 19 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 6 6 1 2 5 5 2 3 4 9 6 7 8 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 6 6 1 2 5 5 2 3 4 9 6 7 8 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 1 6 6 1 2 5 5 2 3 4 9 6 7 8 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 5 5 2 3 4 7 19 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 13 0 19 19 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 7 19 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 6 6 1 2 5 5 2 3 4 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 6 6 1 2 5 5 2 3 4 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 17 17 2 3 4 17 4 19 18 4 5 6 19 18 19 6 7 8 17 18 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 10 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 18 18 2 3 4 18 4 5 19 19 5 6 7 8 18 19 7 12 17 10 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 10 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7 18 19 10 11 12 17 18 11\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 11 12 16 17 19 18 18 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 11 18 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 9 12 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 9 18 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 12 17 18 9 12 9 10 11\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 13 0 19 19 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 8 9 10 17 18 9 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 9 18 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 9 10 16 17 19 18 18 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 9 18 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 12 19 10 11 17 12 13 14 14 15 0 18\n"
+;
+
+const char* data_dqrgl_block25 = 
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 4 4 1 2 3 9 4 5 8 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 4 4 1 2 3 9 4 5 8 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 1 4 4 1 2 3 9 4 5 8 8 5 6 7 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 7 19 1 4 4 1 2 3 7 4 5 6 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 4 4 1 2 3 7 4 5 6 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 4 4 1 2 3 7 4 5 6 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 4 4 1 2 3 7 4 5 6 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 2 3 9 19 3 8 3 4 7 8 7 4 5 6 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 19 19 1 2 3 9 19 3 8 3 4 5 8 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 19 19 1 2 3 7 19 3 6 3 4 5 6 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 12 7 8 11 11 8 9 10 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 10 7 8 9 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 6 7 10 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 10 7 8 9 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 7 8 11 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 8 13 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 13 8 9 12 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 11 8 9 10 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 9 12 13 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 8 11 12 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 11 8 9 10 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 9 12 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 12 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 12 17 8 19 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 18 8 11 8 9 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 18 8 11 8 9 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 18 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 12 18 8 9 12 9 10 11 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 18 8 9 13 17 9 12 9 10 11 12\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 18 8 9 11 17 9 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 18 8 9 11 17 9 10 13 14 15 0\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 18 10 17 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 17 10 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 18 10 17 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 10 18 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 14 9 10 13 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 11 17 18 16 9 10 11 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 6 7 8 16 17 18 6 6 18 0 5 5 0 1 19 19 1 2 3 5 19 3 4 10 11 14 15 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 18 18 2 3 4 6 18 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 10 13 18 10 11 12 13 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 9 10 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 10 13 14 10 11 12 13 14 15 0 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 19 19 2 3 4 6 19 4 5 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 18 7 12 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 7 10 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 7 10 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 12 17 18 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 13 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 10 17 18 7 10 7 8 9 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 8 13 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 11 12 13 16 17 8 11 16 19 18 17 16 13 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 8 9 10 13 14 15 0\n"
+  "16 4 11 16 9 14 15 16 17 8 9 16 19 18 17 16 15 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 9 10 13 14 13 10 11 12\n"
+  "16 4 11 16 9 12 13 16 17 8 9 16 19 18 17 16 13 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 9 10 11 12 13 14 15 0\n"
+  "16 4 11 16 9 10 11 16 17 8 9 16 19 18 17 16 11 0 19 19 0 1 6 6 1 2 5 5 2 3 4 18 19 6 7 8 17 18 7 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 10 15 17 16 8 9 10 16 18 7 8 16 17 19 18 18 19 0 5 5 0 1 4 4 1 2 3 7 18 5 6 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 7 8 13 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 8 9 12 12 9 10 11 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 10 7 8 9 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 14 18 16 9 19 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 19 9 10 13 13 10 11 12 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 9 14 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 9 10 13 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 13 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 8 9 12 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 9 10 19 17 18 19 12 12 19 10 11 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 17 12 13 18 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 19 10 11 12 13 17 19 12\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 18 8 19 8 9 10 19 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 18 8 19 8 9 10 19 11 17 19 10 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 11 8 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 19 8 11 8 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 19 8 11 8 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 19 8 9 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 9 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 9 18 7 8 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 13 18 9 12 9 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 11 18 9 10 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 12 12 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 10 11 16 19 18 17 16 7 8 19 16 11 0 7 7 0 1 6 6 1 2 5 5 2 3 4 18 19 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 11 17 18 16 19 10 11 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 19 8 9 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 4 4 1 2 3 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 10 18 8 9 12 13 19 17 19 13 14 15 17 19 15 0\n"
+  "16 4 11 16 14 15 17 16 8 9 14 16 6 7 8 16 17 18 6 6 18 19 5 5 19 1 4 4 1 2 3 14 9 10 13 13 10 11 12 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 15 18 10 11 14 15 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 4 4 1 2 3 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 13 18 10 11 12 13 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 5 5 2 3 4 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 7 8 2 3 19 7 19 3 4 5 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 17 7 3 4 18 17 18 4 5 19 7 17 18 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 9 10 17 16 15 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 11 12 13 16 9 10 11 16 17 0 9 9 0 1 8 8 1 2 3 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 19 8 2 3 6 19 6 3 4 5 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 7 8 2 3 6 7 6 3 4 5 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 7 8 2 3 6 7 6 3 4 5 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 7 8 2 3 4 7 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 7 8 2 3 4 7 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 5 8 2 3 4 5 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 5 8 2 3 4 5 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 19 8 2 3 4 19 8 19 4 7 4 5 6 7 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 19 8 2 3 4 19 8 19 4 5 8 5 6 7 15 0 18 17\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 0 7 7 0 1 2 7 2 19 6 2 3 4 19 6 19 4 5 12 9 10 11 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 10 13 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 19 6 2 3 4 19 6 19 4 5 13 10 11 12 15 0 18 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 17 18 10 11 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 9 10 18 16 17 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 12 18 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 19 6 2 3 4 19 6 19 4 5 14 11 12 13 15 0 18 17\n"
+  "16 4 11 16 13 17 18 16 11 12 13 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 8 9 10 16 17 18 8 8 18 0 7 7 0 1 2 7 2 19 6 2 3 4 19 6 19 4 5 12 13 14 15 15 0 18 17\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 12 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 2 7 2 5 6 2 3 4 5 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 3 8 8 3 19 7 3 4 5 19 7 19 5 6 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 6 7 3 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 0 9 9 0 1 2 9 2 3 8 8 3 4 19 19 4 5 6 8 19 6 7 15 0 18 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 4 7 7 4 5 6 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 11 12 19 16 15 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8 18 19 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 10 11 18 16 17 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 13 18 11 12 15 0 19 17\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 11 12 13 16 19 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 10 11 12 16 18 19 10 10 19 0 9 9 0 1 2 9 2 3 8 8 3 4 5 8 5 6 7 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 1 2 9 2 3 8 8 3 4 5 8 5 6 7 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 9 10 13 16 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 8 9 12 16 18 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 7 19 1 2 7 2 3 6 6 3 4 5 12 9 10 11 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 14 15 16 11 18 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 11 12 19 17 18 19 14 14 19 12 13\n"
+  "16 4 11 16 17 18 15 16 11 19 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 19 11 12 13 17 19 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 11 19 17 16 9 10 11 16 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 19 11 12 13 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 11 14 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 14 11 12 13 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 13 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 13 10 11 12 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 9 10 18 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 18 10 19 10 11 12 19 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 13 10 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 13 18 9 12 9 10 11 12 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 13 18 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 9 10 19 16 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 9 10 19 16 13 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 18 19 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 19 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 8 9 18 16 17 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 11 18 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 9 10 19 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 19 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 9 10 19 16 18 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 12 19 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 8 9 10 16 17 18 8 8 18 19 7 7 19 1 2 7 2 3 6 6 3 4 5 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 9 10 11 16 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 8 9 10 16 18 19 8 8 19 0 7 7 0 1 2 7 2 3 6 6 3 4 5 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 9 10 11 16 19 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 3 4 9 4 5 8 8 5 6 7 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 18 19 16 13 14 17 16 7 8 13 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 8 9 12 12 9 10 11 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 12 13 17 16 6 7 12 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 12 7 8 11 11 8 9 10 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 12 7 8 11 11 8 9 10 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 19 5 5 19 1 2 5 2 3 4 10 7 8 9 14 11 12 13 15 19 18 17 15 0 1 19\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 7 8 11 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 6 7 10 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 10 7 8 9 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 7 8 11 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 7 19 3 4 7 4 5 6 12 9 10 11 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 18 16 9 19 17 16 7 8 9 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 19 9 10 13 13 10 11 12 17 19 13 14 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 9 14 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 9 10 13 13 10 11 12 17 14 15 18 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 13 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 8 9 12 12 9 10 11 17 13 14 15 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 9 18 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 19 17 18 19 14 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 17 12 13 16 9 18 17 16 7 8 9 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 9 10 19 17 18 19 12 12 19 10 11 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 9 12 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 7 8 17 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 17 8 18 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 19 8 9 12 19 12 9 10 11 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 13 8 9 12 13 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 18 7 12 7 8 11 12 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 18 7 12 7 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 18 7 10 7 8 9 10 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 7 8 18 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 18 8 19 8 9 10 19 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 7 8 18 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 19 8 9 10 19 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 7 8 18 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 18 8 19 8 9 10 19 11 17 19 10 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 11 8 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 19 8 11 8 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 11 18 7 10 7 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 19 8 11 8 9 10 11 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 19 8 11 8 9 10 11 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 12 13 9 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 18 7 8 13 8 11 12 8 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 13 18 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 19 8 9 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 11 18 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 9 14 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 9 18 7 8 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 13 18 9 12 9 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 7 8 19 16 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 11 18 9 10 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 7 8 19 16 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 12 12 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 15 16 19 18 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 17 10 11 16 19 18 17 16 7 8 19 16 11 0 7 7 0 1 6 6 1 2 3 6 3 4 5 18 19 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 11 17 18 16 19 10 11 16 7 8 19 16 18 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 19 8 9 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 6 7 18 16 17 19 6 6 19 0 5 5 0 1 2 5 2 3 4 9 18 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 10 17 16 7 8 19 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 10 19 8 9 17 10 11 18 18 11 14 15 11 12 13 14\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 15 18 10 11 14 15 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 7 8 9 16 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 19 18 10 11 12 19 19 12 13 14 18 19 14 15\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 6 7 8 16 18 19 6 6 19 0 5 5 0 1 2 5 2 3 4 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 7 8 9 16 19 0 7 7 0 1 6 6 1 2 3 6 3 4 5 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 9 19 5 6 9 6 7 8 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 17 12 13 16 9 10 17 16 18 4 9 16 13 0 18 18 0 1 19 19 1 2 3 4 18 19 3 9 4 5 8 8 5 6 7 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 18 5 10 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 5 6 9 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 12 15 17 16 10 11 12 16 18 5 10 16 17 19 18 18 19 0 3 3 0 1 2 5 18 3 4 10 5 6 9 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 12 17 18 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 19 18 17 16 15 0 19 19 0 1 4 4 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 10 17 18 5 10 5 6 9 9 6 7 8 13 14 15 0\n"
+  "16 4 11 16 9 12 13 16 17 8 9 16 19 18 17 16 13 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 9 10 11 12 13 14 15 0\n"
+  "16 4 11 16 9 10 11 16 17 8 9 16 19 18 17 16 11 0 19 19 0 1 4 4 1 2 3 18 19 4 5 8 17 18 5 8 5 6 7 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 7 10 11 16 17 6 7 16 19 18 17 16 11 0 19 19 0 1 4 4 1 2 3 18 19 4 5 6 17 18 5 7 8 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 18 15 16 11 12 17 16 5 6 11 16 15 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 19 18 12 13 14 19 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 5 6 11 16 19 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 15 18 12 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 10 11 17 16 4 5 10 16 18 19 4 4 19 0 3 3 0 1 2 10 5 6 9 9 6 7 8 17 11 14 15 11 12 13 14 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 11 12 17 16 5 6 11 16 19 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 6 7 12 16 17 18 6 6 18 19 5 5 19 3 4 12 7 8 11 11 8 9 10 15 19 18 17 15 0 3 19 3 0 1 2\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 9 10 17 16 5 6 9 16 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 19 18 10 11 14 19 14 11 12 13 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 15 18 10 11 14 15 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 4 5 8 16 18 19 4 4 19 0 3 3 0 1 2 8 5 6 7 17 9 14 15 9 10 13 14 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 8 9 17 16 4 5 8 16 18 19 4 4 19 0 3 3 0 1 2 8 5 6 7 17 9 14 15 9 10 11 14 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 13 18 10 11 12 13 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 9 10 17 16 5 6 9 16 19 0 5 5 0 1 4 4 1 2 3 9 6 7 8 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 12 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 17 12 13 18 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 7 8 19 17 18 19 14 14 19 8 13 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 18 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 18 7 8 19 17 18 19 14 14 19 8 13 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 7 18 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 18 7 8 19 17 18 19 12 12 19 8 11 8 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 11 16 7 18 17 16 5 6 7 16 11 0 5 5 0 1 4 4 1 2 3 18 7 8 19 17 18 19 10 10 19 8 9 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 17 18 19 16 7 10 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 10 11 18 18 11 14 15 11 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 10 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 10 7 8 9 17 10 11 18 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 18 6 7 19 18 19 7 10 11 7 8 9 10 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 19 6 7 12 19 12 7 10 11 7 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 13 6 7 12 13 12 7 10 11 7 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 11 12 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 11 6 7 18 11 18 7 8 19 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 18 6 7 19 18 19 7 8 11 11 8 9 10 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 19 6 7 12 19 12 7 8 11 11 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 13 6 7 12 13 12 7 8 11 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 11 12 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 18 6 7 19 18 19 7 8 9 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 13 6 7 12 13 12 7 8 9 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 11 12 11 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 9 12 9 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 19 11 19 7 8 9 11 19 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 11 6 7 19 11 19 7 8 9 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 19 18 19 7 8 9 10 18 19 9 11 12 13 14\n"
+  "16 4 11 16 11 12 15 16 17 10 11 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 19 18 19 7 8 9 10 18 19 9 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 5 6 17 16 13 0 5 5 0 1 4 4 1 2 3 10 17 6 18 6 7 19 18 19 7 8 9 10 18 19 9 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 18 11 12 13 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 10 5 6 9 10 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 19 6 7 10 19 10 7 8 9 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 11 12 15 16 18 17 11 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 17 18 6 19 6 7 10 19 10 7 8 9 11 17 19 10 12 13 14 15\n"
+  "16 4 11 16 11 12 13 16 18 17 11 16 5 6 18 16 13 0 5 5 0 1 4 4 1 2 3 17 18 6 19 6 7 10 19 10 7 8 9 11 17 19 10 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 10 5 6 9 10 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 11 6 7 10 11 10 7 8 9 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 10 11 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 10 5 6 9 10 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 10 11 10 7 8 9 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 10 11 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 7 12 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 12 5 6 7 12 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 10 5 6 7 10 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 8 11 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 10 5 6 7 10 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 18 15 16 19 12 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 8 11 11 8 9 10 17 12 13 18 18 13 14 15\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 11 6 7 8 11 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 13 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 8 5 6 7 8 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 18 9 10 11 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 9 6 7 8 9 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 8 5 6 7 8 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 19 6 7 8 19 12 19 8 11 8 9 10 11 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 19 6 7 8 19 10 19 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 10 18 6 19 6 7 8 19 10 19 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 18 9 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 9 18 5 8 5 6 7 8 14 9 10 13 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 11 18 9 10 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 17 10 11 16 19 18 17 16 5 6 19 16 11 0 5 5 0 1 4 4 1 2 3 18 19 6 9 6 7 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 11 17 18 16 19 10 11 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 10 19 6 9 6 7 8 9 11 12 15 17 15 12 13 14 17 15 0 18\n"
+  "16 4 11 16 10 15 17 16 18 9 10 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 9 18 5 8 5 6 7 8 10 11 14 15 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 5 6 17 16 15 0 5 5 0 1 4 4 1 2 3 12 17 6 7 12 7 18 11 7 8 19 18 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 12 13 7 8 11 12 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 11 12 6 7 10 11 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 11 12 6 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 10 13 7 8 9 10 13 10 11 12 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 9 12 6 7 8 9 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 12 18 6 7 12 7 19 11 7 8 9 19 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 10 11 7 8 9 10 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 7 12 7 10 11 7 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 6 11 6 9 10 6 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 7 12 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 13 13 8 9 12 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 7 12 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 13 18 5 6 13 6 7 12 12 7 8 9 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 12 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 17 18 11 12 12 13 14 15\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 11 11 8 9 10 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 5 6 19 16 18 0 5 5 0 1 4 4 1 2 3 12 19 6 7 12 7 8 11 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 4 5 18 16 17 19 4 4 19 0 3 3 0 1 2 11 18 5 6 11 6 7 10 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 17 18 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 17 18 9 12 12 9 10 11 13 14 15 0\n"
+  "16 4 11 16 17 10 11 16 19 18 17 16 5 6 19 16 11 0 5 5 0 1 4 4 1 2 3 18 19 6 7 18 7 8 9 17 18 9 10 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 9 10 17 16 19 18 9 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 18 19 6 7 9 18 7 8 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 10 17 16 19 18 9 16 5 6 19 16 17 0 5 5 0 1 4 4 1 2 3 18 19 6 7 9 18 7 8 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 5 6 19 16 15 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 14 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 5 6 19 16 13 0 5 5 0 1 4 4 1 2 3 18 19 6 7 17 18 7 12 12 7 8 11 11 8 9 10 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 5 6 18 16 15 0 5 5 0 1 4 4 1 2 3 8 18 6 7 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 9 10 17 16 18 8 9 16 5 6 18 16 17 0 5 5 0 1 4 4 1 2 3 8 18 6 7 10 15 0 17 10 11 19 15 19 11 12 13 15 19 13 14\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 18 14 8 9 19 18 19 9 12 13 9 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 19 18 8 9 14 19 14 9 12 13 9 10 11 12 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 15 18 8 9 14 15 14 9 12 13 9 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 13 14 13 8 11 12 8 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 18 13 18 9 10 19 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 18 14 8 9 19 18 19 9 10 13 13 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 19 18 8 9 14 19 14 9 10 13 13 10 11 12 18 19 14 15\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 15 18 8 9 14 15 14 9 10 13 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 13 14 13 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 18 14 8 9 19 18 19 9 10 11 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 15 18 8 9 14 15 14 9 10 11 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 13 14 13 8 9 10 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 11 14 11 8 9 10 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 7 8 17 16 5 6 7 16 18 0 5 5 0 1 4 4 1 2 3 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12 14 15 0 18\n"
+  "16 4 11 16 17 12 13 16 7 8 17 16 5 6 7 16 13 0 5 5 0 1 4 4 1 2 3 17 8 18 12 8 9 19 18 19 9 10 11 12 18 19 11 13 14 15 0\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 15 18 15 0 19\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 13 18 8 9 12 13 12 9 10 11 18 13 14 19 19 14 15 0\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 9 14 14 9 12 13 9 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 4 5 6 16 18 19 4 4 19 0 3 3 0 1 2 17 7 14 15 7 8 9 14 14 9 10 13 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 11 18 8 9 10 11 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 5 6 7 16 15 0 5 5 0 1 4 4 1 2 3 17 8 9 14 14 9 18 13 9 10 19 18 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 5 6 7 16 19 0 5 5 0 1 4 4 1 2 3 17 8 9 18 18 9 12 15 9 10 11 12 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 9 10 17 16 7 8 9 16 5 6 7 16 17 0 5 5 0 1 4 4 1 2 3 10 15 0 17 10 11 18 15 18 11 12 19 19 12 13 14 15 18 19 14\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 9 0 19 17 9 10 15 0 15 10 13 14 10 11 12 13\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 18 3 6 16 17 19 18 18 19 0 1 3 18 1 2 6 3 4 5 9 0 19 17 9 10 15 0 15 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 7 8 4 5 6 7 11 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 19 0 1 2 18 19 2 3 12 17 18 3 12 3 4 11 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 19 5 10 7 8 9 14 11 12 13 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 10 11 14 16 6 7 10 16 17 18 6 6 18 19 5 10 7 8 9 14 11 12 13 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 18 14 8 9 19 18 19 9 12 13 9 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 8 15 18 8 9 14 15 14 9 12 13 9 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 13 14 13 8 11 12 8 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 18 13 18 9 10 19 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 18 14 8 9 19 18 19 9 10 13 13 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 8 15 18 8 9 14 15 14 9 10 13 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 13 14 13 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 18 14 8 9 19 18 19 9 10 11 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 8 15 18 8 9 14 15 14 9 10 11 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 13 14 13 8 9 10 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 11 14 11 8 9 10 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 7 8 17 16 3 4 7 16 18 0 3 3 0 1 2 7 4 5 6 17 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12 14 15 0 18\n"
+  "16 4 11 16 17 12 13 16 7 8 17 16 3 4 7 16 13 0 3 3 0 1 2 7 4 5 6 17 8 18 12 8 9 19 18 19 9 10 11 12 18 19 11 13 14 15 0\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 9 14 14 9 12 13 9 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 6 7 17 16 2 3 6 16 18 19 2 2 19 0 1 6 3 4 5 17 7 14 15 7 8 9 14 14 9 10 13 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 8 11 18 8 9 10 11 18 11 12 15 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 3 4 7 16 15 0 3 3 0 1 2 7 4 5 6 17 8 9 14 14 9 18 13 9 10 19 18 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 18 19 16 7 8 17 16 3 4 7 16 19 0 3 3 0 1 2 7 4 5 6 17 8 9 18 18 9 12 15 9 10 11 12 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 9 10 17 16 7 8 9 16 3 4 7 16 17 0 3 3 0 1 2 7 4 5 6 10 15 0 17 10 11 18 15 18 11 12 19 19 12 13 14 15 18 19 14\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 5 6 0 1 4 5 4 1 2 3\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 5 6 0 1 2 5 5 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 3 6 0 1 2 3 6 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 1 6 6 1 4 5 1 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 1 6 6 1 2 5 5 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 8 9 12 16 17 18 8 8 18 19 7 12 9 10 11 15 19 18 17 15 0 7 19 7 0 1 6 6 1 2 3 6 3 4 5\n"
+  "16 4 11 16 8 9 17 16 6 7 8 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 9 0 18 17 9 10 15 0 15 10 19 14 10 11 12 19 14 19 12 13\n"
+;
+
+const char* data_dqrgl_block26 = 
+  "16 4 11 16 8 9 17 16 6 7 8 16 2 3 6 16 17 18 2 2 18 0 1 6 3 4 5 9 0 18 17 9 10 15 0 15 10 11 19 19 11 12 13 15 19 13 14\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 19 5 11 8 9 10 14 11 12 13 15 19 18 17 15 0 5 19 5 0 3 4 0 1 2 3\n"
+  "16 4 11 16 14 15 17 16 8 11 14 16 6 7 8 16 17 18 6 6 18 19 5 11 8 9 10 14 11 12 13 15 19 18 17 15 0 5 19 5 0 1 4 4 1 2 3\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 7 17 18 7 14 14 7 8 13 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 7 17 18 7 14 14 7 8 13 13 8 9 19 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 12 13 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 12 13 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 12 13 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 10 13 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 8 13 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 18 17 16 3 4 5 16 15 0 3 3 0 1 2 18 5 6 19 17 18 19 14 14 19 6 13 6 7 8 13 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 5 8 17 16 3 4 5 16 15 0 3 3 0 1 2 8 5 6 7 17 8 9 14 14 9 18 13 9 10 19 18 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 18 19 16 5 8 17 16 3 4 5 16 19 0 3 3 0 1 2 8 5 6 7 17 8 9 18 18 9 12 15 9 10 11 12 15 12 13 14 18 15 0 19\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 18 9 5 6 19 18 19 6 7 8 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 10 11 5 6 9 10 9 6 7 8 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 10 11 5 6 9 10 9 6 7 8 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 10 11 5 6 9 10 9 6 7 8 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 9 10 4 5 8 9 8 5 6 7 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 10 11 5 6 7 10 10 7 8 9 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 10 11 5 6 7 10 10 7 8 9 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 10 11 5 6 7 10 10 7 8 9 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 9 10 4 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 8 19 5 6 7 8 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 8 11 5 6 7 8 11 8 9 10 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 8 11 5 6 7 8 11 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 8 11 5 6 7 8 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 7 10 4 5 6 7 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 19 18 5 6 7 19 18 19 7 8 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 19 9 5 6 7 19 9 19 7 8 11 18 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 10 18 10 5 19 9 5 6 7 19 9 19 7 8 12 18 10 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 11 4 5 10 11 10 5 19 9 5 6 7 19 9 19 7 8 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 19 9 5 6 7 19 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 19 9 5 6 7 19 9 19 7 8 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 8 9 5 6 7 8 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 8 9 5 6 7 8 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 7 8 4 5 6 7 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 9 12 9 4 7 8 4 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 8 9 5 6 7 8 11 19 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 8 9 5 6 7 8 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 8 9 5 6 7 8 10 18 19 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 8 9 5 6 7 8 10 18 19 9 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 10 3 4 9 10 9 4 7 8 4 5 6 7 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 19 4 5 10 19 10 5 8 9 5 6 7 8 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 7 8 4 5 6 7 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 3 4 19 16 17 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 8 9 5 6 7 8 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 8 9 5 6 7 8 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 8 9 5 6 7 8 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 7 8 4 5 6 7 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 8 9 5 6 7 8 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 7 8 4 5 6 7 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 6 19 19 6 9 10 6 7 8 9 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 6 11 11 6 9 10 6 7 8 9 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 6 11 11 6 9 10 6 7 8 9 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 11 11 6 9 10 6 7 8 9 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 10 10 5 8 9 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 10 11 10 5 6 18 18 6 7 19 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 6 19 19 6 7 10 10 7 8 9 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 6 11 11 6 7 10 10 7 8 9 12 18 19 11\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 6 11 11 6 7 10 10 7 8 9 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 11 11 6 7 10 10 7 8 9 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 10 10 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 18 11 18 5 6 19 19 6 7 8 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 19 4 5 12 19 12 5 6 11 11 6 7 8 11 8 9 10 13 17 19 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 11 11 6 7 8 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 10 10 5 6 7 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 6 9 9 6 7 8 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 9 9 6 7 8 12 9 10 11 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 8 8 5 6 7 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 18 17 13 16 3 4 18 16 15 0 3 3 0 1 2 17 18 4 11 4 5 10 11 10 5 6 19 19 6 7 8 10 19 8 9 13 17 11 12\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 19 19 6 7 8 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 10 11 10 5 6 19 19 6 7 8 10 19 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 10 13 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 19 19 6 7 8 9 18 19 8 13 10 11 12\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 19 19 6 7 8 9 18 19 8 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 9 4 5 18 9 18 5 6 19 19 6 7 8 9 18 19 8 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 9 12 9 4 5 8 8 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 6 9 9 6 7 8 11 19 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 6 9 9 6 7 8 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 6 9 9 6 7 8 10 18 19 9 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 10 3 4 9 10 9 4 5 8 8 5 6 7 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 19 4 5 10 19 10 5 6 9 9 6 7 8 12 19 10 11 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 8 8 5 6 7 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 3 4 19 16 17 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 6 9 9 6 7 8 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 6 9 9 6 7 8 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 6 9 9 6 7 8 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 8 8 5 6 7 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 6 9 9 6 7 8 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 8 8 5 6 7 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 6 7 19 7 10 11 7 8 9 10 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 7 12 7 10 11 7 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 6 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 19 18 19 5 6 7 19 7 8 11 11 8 9 10 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 13 4 5 12 13 12 5 6 7 12 7 8 11 11 8 9 10 17 18 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 11 12 11 4 5 6 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 11 14 15 16 17 10 11 16 3 4 17 16 15 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 6 7 19 7 8 9 10 18 19 9 11 12 13 14\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 18 4 5 19 18 19 5 6 7 19 7 8 9 10 18 19 9 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 10 3 4 9 10 9 4 5 6 9 6 7 8 13 10 11 12 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 6 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 19 18 13 16 3 4 19 16 17 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 6 7 10 7 8 9 13 18 11 12 14 15 0 17\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 11 4 5 10 11 10 5 6 7 10 7 8 9 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 6 7 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 6 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 10 11 10 5 6 7 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 9 10 9 4 5 6 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 7 12 7 4 5 6 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 7 10 7 4 5 6 10 7 8 9 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 8 11 8 5 6 7 11 8 9 10 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 7 10 7 4 5 6 10 7 8 9 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 8 11 8 5 6 7 11 8 9 10 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 7 10 7 4 5 6 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 6 7 11 19 7 10 7 8 9 10 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 19 11 19 5 6 7 11 19 7 10 7 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 10 13 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 19 9 19 5 6 7 9 19 7 8 13 10 11 12 14 15 0 17\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 19 9 19 5 6 7 9 19 7 8 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 3 4 18 16 15 0 3 3 0 1 2 10 18 4 9 4 5 19 9 19 5 6 7 9 19 7 8 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 12 13 16 18 10 17 16 3 4 18 16 13 0 3 3 0 1 2 10 18 4 9 4 5 19 9 19 5 6 7 9 19 7 8 17 10 11 12 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 9 4 5 19 9 19 5 6 7 9 19 7 8 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 8 3 4 7 8 7 4 5 6 13 8 9 12 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 9 4 5 8 9 8 5 6 7 12 9 10 11 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 8 3 4 7 8 7 4 5 6 11 8 9 10 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 8 3 4 7 8 7 4 5 6 11 8 9 10 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 11 14 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 19 4 5 8 19 8 5 6 7 10 19 8 9 11 12 13 14 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 19 4 5 8 19 8 5 6 7 10 19 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 12 13 17 16 18 9 12 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 8 3 4 7 8 7 4 5 6 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 11 12 17 16 19 18 11 16 3 4 19 16 17 0 3 3 0 1 2 18 19 4 9 4 5 8 9 8 5 6 7 11 18 9 10 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 8 3 4 7 8 7 4 5 6 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 11 4 5 6 11 11 6 18 10 6 7 19 18 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 10 11 5 6 9 10 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 10 11 5 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 8 11 5 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 3 4 18 16 15 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 11 4 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 8 9 5 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 6 11 11 6 9 10 6 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 8 9 5 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 6 11 11 6 9 10 6 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 8 9 5 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 6 11 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 6 11 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 12 3 4 5 12 12 5 6 11 11 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 11 14 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 6 9 9 6 7 8 14 11 12 13 15 0 19 17\n"
+  "16 4 11 16 13 17 18 16 19 12 13 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 6 11 11 6 7 10 10 7 8 9 13 14 15 17 17 15 0 18\n"
+  "16 4 11 16 12 15 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 6 9 9 6 7 8 12 13 14 15 15 0 19 17\n"
+  "16 4 11 16 17 14 18 16 19 12 17 16 3 4 19 16 18 0 3 3 0 1 2 12 19 4 11 4 5 6 11 11 6 7 10 10 7 8 9 17 12 13 14 14 15 0 18\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 10 3 4 5 10 10 5 6 9 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 12 13 17 16 18 9 12 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 8 3 4 5 8 8 5 6 7 12 9 10 11 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 8 3 4 5 8 8 5 6 7 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 6 3 4 5 6 13 6 7 12 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 6 3 4 5 6 13 6 7 12 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 6 3 4 5 6 13 6 7 12 12 7 8 9 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 6 3 4 5 6 11 6 7 10 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 6 3 4 5 6 9 6 7 8 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 18 4 5 6 18 12 18 6 11 6 7 19 11 19 7 8 9 11 19 9 10\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 19 4 5 6 19 12 19 6 11 6 7 10 11 10 7 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 19 4 5 6 19 12 19 6 11 6 7 8 11 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 19 4 5 6 19 10 19 6 9 6 7 8 9 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 19 4 5 6 19 8 19 6 7 10 15 0 17 10 11 14 15 14 11 12 13\n"
+  "16 4 11 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 19 4 5 6 19 8 19 6 7 10 15 0 17 10 11 12 15 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 3 4 18 16 15 0 3 3 0 1 2 8 18 4 7 4 5 6 7 17 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 7 4 5 6 7 10 15 0 17 10 11 19 15 19 11 12 13 15 19 13 14\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 6 3 4 5 6 9 0 19 17 9 10 15 0 15 10 13 14 10 11 12 13\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 6 3 4 5 6 9 0 19 17 9 10 15 0 15 10 11 14 14 11 12 13\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 6 3 4 5 6 9 0 19 17 9 10 15 0 15 10 11 12 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 19 18 19 6 9 10 6 7 8 9 11 18 19 10\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 10 11 10 5 8 9 5 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 10 11 5 6 18 10 18 6 7 19 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 19 18 19 6 7 10 10 7 8 9 11 18 19 10\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 10 11 10 5 6 9 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 19 18 19 6 7 8 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 10 11 10 5 6 7 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 8 11 8 5 6 7 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 10 11 5 6 19 10 19 6 7 8 10 19 8 9 14 15 0 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 19 18 19 6 7 8 11 18 19 8 11 8 9 10\n"
+  "16 4 11 16 11 12 13 16 17 10 11 16 3 4 17 16 13 0 3 3 0 1 2 10 17 4 5 10 5 18 9 5 6 19 18 19 6 7 8 9 18 19 8 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 9 12 4 5 8 9 8 5 6 7 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 19 11 5 6 9 19 9 6 7 8 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 9 10 4 5 8 9 8 5 6 7 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 6 11 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 11 12 4 5 6 11 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 9 10 4 5 6 9 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 7 12 4 5 6 7 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 7 12 4 5 6 7 12 7 8 9 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 17 12 13 16 19 18 17 16 3 4 19 16 13 0 3 3 0 1 2 18 19 4 5 18 5 8 11 5 6 7 8 11 8 9 10 17 18 11 12 13 14 15 0\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 7 10 4 5 6 7 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 18 11 5 6 7 18 11 18 7 19 7 8 9 19 11 19 9 10\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 19 11 5 6 7 19 11 19 7 10 7 8 9 10 14 15 0 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 19 11 5 6 7 19 11 19 7 8 11 8 9 10 14 15 0 17\n"
+  "16 4 11 16 11 12 17 16 18 10 11 16 3 4 18 16 17 0 3 3 0 1 2 10 18 4 5 10 5 19 9 5 6 7 19 9 19 7 8 12 15 0 17 12 13 14 15\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 4 9 4 7 8 4 5 6 7 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 18 10 6 7 19 18 19 7 8 9 10 18 19 9\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 10 11 5 6 9 10 9 6 7 8 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 10 11 5 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 8 11 5 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 19 18 6 7 8 19 18 19 8 9 11 18 9 10\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 6 11 11 6 19 10 6 7 8 19 10 19 8 9 14 15 0 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 8 9 5 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 5 10 10 5 8 9 5 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 11 11 6 9 10 6 7 8 9 15 0 19 17\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 3 4 17 16 15 0 3 3 0 1 2 12 17 4 5 12 5 6 11 11 6 7 18 18 7 8 19 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 11 11 6 7 10 10 7 8 9 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 11 11 6 7 8 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 9 9 6 7 8 12 9 10 11 15 0 19 17\n"
+  "16 4 11 16 13 14 17 16 18 12 13 16 3 4 18 16 17 0 3 3 0 1 2 12 18 4 5 12 5 6 11 11 6 7 19 19 7 8 9 11 19 9 10 14 15 0 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 5 10 10 5 6 9 9 6 7 8 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 7 12 7 10 11 7 8 9 10 15 0 19 17\n"
+  "16 4 11 16 14 15 17 16 18 13 14 16 2 3 18 16 17 19 2 2 19 0 1 13 18 3 4 13 4 5 12 12 5 6 7 12 7 8 11 11 8 9 10 15 0 19 17\n"
+  "16 4 11 16 12 13 17 16 18 11 12 16 2 3 18 16 17 19 2 2 19 0 1 11 18 3 4 11 4 5 10 10 5 6 7 10 7 8 9 13 0 19 17 13 14 15 0\n"
+  "16 4 11 16 10 11 17 16 18 9 10 16 2 3 18 16 17 19 2 2 19 0 1 9 18 3 4 9 4 5 8 8 5 6 7 11 0 19 17 11 12 15 0 15 12 13 14\n"
+  "16 4 11 16 9 10 17 16 18 8 9 16 3 4 18 16 17 0 3 3 0 1 2 8 18 4 5 8 5 6 7 10 15 0 17 10 11 19 15 19 11 12 13 15 19 13 14\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 4 7 4 5 6 9 0 19 17 9 10 15 0 15 10 13 14 10 11 12 13\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 4 7 4 5 6 9 0 19 17 9 10 15 0 15 10 11 14 14 11 12 13\n"
+  "16 4 11 16 8 9 17 16 18 7 8 16 2 3 18 16 17 19 2 2 19 0 1 7 18 3 4 7 4 5 6 9 0 19 17 9 10 15 0 15 10 11 12 15 12 13 14\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 11 12 6 7 10 11 10 7 8 9\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 11 12 6 7 8 11 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 9 12 6 7 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 9 10 6 7 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 10 10 7 8 9 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 8 13 8 11 12 8 9 10 11\n"
+  "16 4 11 16 17 14 15 16 19 18 17 16 3 4 19 16 15 0 3 3 0 1 2 18 19 4 5 17 18 5 14 14 5 6 13 13 6 7 8 13 8 9 12 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 12 13 7 8 19 12 19 8 9 10 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 19 13 7 8 11 19 11 8 9 10 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 19 13 7 8 9 19 13 19 9 12 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 19 13 7 8 9 19 13 19 9 10 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 8 13 13 8 19 12 8 9 10 19 12 19 10 11\n"
+  "16 4 11 16 17 14 15 16 18 6 17 16 3 4 18 16 15 0 3 3 0 1 2 6 18 4 5 17 6 7 14 14 7 8 13 13 8 9 19 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 14 15 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 19 15 19 9 12 13 9 10 11 12 15 19 13 14\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 14 15 14 9 10 19 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 19 15 19 9 10 13 13 10 11 12 15 19 13 14\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 19 15 19 9 10 11 15 19 11 14 11 12 13 14\n"
+  "16 4 11 16 7 8 17 16 18 6 7 16 3 4 18 16 17 0 3 3 0 1 2 6 18 4 5 8 15 0 17 8 9 10 15 15 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 11 12 8 9 10 11 15 12 13 14\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 14 14 9 10 11 14 11 12 13\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 12 12 9 10 11 15 12 13 14\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 10 15 10 13 14 10 11 12 13\n"
+  "16 4 11 16 6 7 17 16 18 5 6 16 2 3 18 16 17 19 2 2 19 0 1 5 18 3 4 7 0 19 17 7 8 15 0 15 8 9 10 15 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 18 11 7 8 19 18 19 8 9 10 11 18 19 10\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 12 13 7 8 11 12 11 8 9 10 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 12 13 7 8 11 12 11 8 9 10 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 11 12 6 7 10 11 10 7 8 9 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 12 13 7 8 9 12 12 9 10 11 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 12 13 7 8 9 12 12 9 10 11 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 11 12 6 7 8 11 11 8 9 10 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 10 19 7 8 9 10 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 10 13 7 8 9 10 13 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 10 13 7 8 9 10 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 9 12 6 7 8 9 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 19 18 7 8 9 19 18 19 9 10 12 18 10 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 19 11 7 8 9 19 11 19 9 10 13 18 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 12 18 12 7 19 11 7 8 9 19 11 19 9 10 14 18 12 13\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 19 11 7 8 9 19 11 19 9 10 14 15 0 18\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 10 11 7 8 9 10 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 9 10 6 7 8 9 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 11 14 11 6 9 10 6 7 8 9 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 19 13 19 7 10 11 7 8 9 10 13 19 11 12 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 8 19 19 8 11 12 8 9 10 11 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 8 13 13 8 11 12 8 9 10 11 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 13 13 8 11 12 8 9 10 11 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 12 12 7 10 11 7 8 9 10 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 18 18 8 9 19 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 8 19 19 8 9 12 12 9 10 11 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 8 13 13 8 9 12 12 9 10 11 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 13 13 8 9 12 12 9 10 11 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 12 12 7 8 11 11 8 9 10 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 18 13 18 7 8 19 19 8 9 10 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 13 13 8 9 10 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 12 12 7 8 9 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 8 11 11 8 9 10 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 11 11 8 9 10 14 11 12 13 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 10 10 7 8 9 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 12 13 12 7 8 19 19 8 9 10 12 19 10 11 14 15 0 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 11 14 11 6 7 10 10 7 8 9 14 11 12 13 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 19 13 19 7 8 11 11 8 9 10 13 19 11 12 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 19 18 19 7 8 9 19 9 12 13 9 10 11 12 14 18 19 13\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 9 14 9 12 13 9 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 8 13 8 11 12 8 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 18 19 16 5 6 17 16 3 4 5 16 19 0 3 3 0 1 2 17 6 15 18 6 7 14 15 14 7 8 9 14 9 10 13 13 10 11 12 18 15 0 19\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 13 14 13 6 7 8 13 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 9 14 9 6 7 8 14 9 10 13 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 19 13 19 7 8 9 13 19 9 12 9 10 11 12 14 15 0 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 18 12 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 12 13 7 8 11 12 11 8 9 10 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 12 13 7 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 10 13 7 8 9 10 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 18 16 5 6 17 16 3 4 5 16 18 0 3 3 0 1 2 17 6 13 14 6 7 8 13 13 8 19 12 8 9 10 19 12 19 10 11 14 15 0 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 8 13 13 8 11 12 8 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 8 13 13 8 9 12 12 9 10 11 15 0 19 18\n"
+  "16 4 11 16 17 15 18 16 4 5 17 16 2 3 4 16 18 19 2 2 19 0 1 17 5 14 15 5 6 7 14 14 7 8 13 13 8 9 10 13 10 11 12 15 0 19 18\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 18 14 6 7 8 18 14 18 8 13 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 19 18 19 8 11 12 8 9 10 11 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 12 13 7 8 18 12 18 8 9 19 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 19 18 19 8 9 12 12 9 10 11 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 19 18 19 8 9 10 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 19 18 19 8 9 10 13 18 19 10 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 18 13 7 8 9 18 13 18 9 19 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 18 12 8 9 19 18 19 9 10 11 12 18 19 11\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 19 18 8 9 10 19 18 19 10 11 13 18 11 12\n"
+  "16 4 11 16 17 14 15 16 5 6 17 16 3 4 5 16 15 0 3 3 0 1 2 17 6 7 14 14 7 8 13 13 8 9 18 18 9 10 19 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 18 13 9 10 19 18 19 10 11 12 13 18 19 12\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 12 19 9 10 11 12 19 12 13 14 15 18 19 14\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 19 18 9 10 11 19 18 19 11 12 14 18 12 13\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 19 13 9 10 11 19 13 19 11 12 15 18 13 14\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 10 19 19 10 13 14 10 11 12 13 15 18 19 14\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 14 15 14 9 10 18 18 10 11 19 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 10 19 19 10 11 14 14 11 12 13 15 18 19 14\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 18 15 18 9 10 19 19 10 11 12 19 12 13 14 15 18 19 14\n"
+  "16 4 11 16 7 8 17 16 5 6 7 16 3 4 5 16 17 0 3 3 0 1 2 8 15 0 17 8 9 10 15 15 10 18 14 10 11 19 18 19 11 12 13 14 18 19 13\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "16 4 11 16 14 15 17 16 12 13 14 16 10 11 12 16 17 18 10 10 18 19 9 15 19 18 17 15 0 9 19 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 13 14 8 9 19 13 19 9 10 11 13 19 11 12\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 19 14 8 9 12 19 12 9 10 11 14 19 12 13\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 11 19 8 9 10 11 19 11 12 13 15 19 13 14\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 19 14 8 9 10 19 14 19 10 13 10 11 12 13\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 19 14 8 9 10 19 14 19 10 11 14 11 12 13\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 19 12 8 9 10 19 12 19 10 11 15 12 13 14\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 14 14 9 19 13 9 10 11 19 13 19 11 12\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 19 19 9 12 13 9 10 11 12 15 19 13 14\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 14 14 9 10 19 19 10 11 12 14 19 12 13\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 19 19 9 10 13 13 10 11 12 15 19 13 14\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 19 19 9 10 11 15 19 11 14 11 12 13 14\n"
+  "16 4 11 16 6 7 17 16 4 5 6 16 2 3 4 16 17 18 2 2 18 0 1 7 0 18 17 7 8 15 0 15 8 9 10 15 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 19 18 19 2 5 6 2 3 4 5 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 19 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 19 18 19 2 3 6 6 3 4 5 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 19 18 19 2 3 4 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 9 18 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 6 7 1 2 19 6 19 2 3 4 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 19 18 19 2 3 4 7 18 19 4 7 4 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 6 9 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 9 6 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 18 5 1 2 19 18 19 2 3 4 5 18 19 4 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 6 19 1 2 5 6 5 2 3 4 19 6 7 8 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 19 18 1 2 5 19 5 2 3 4 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 9 18 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 5 19 5 2 3 4 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 6 7 1 2 5 6 5 2 3 4 9 19 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 6 7 1 2 5 6 5 2 3 4 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 6 7 1 2 5 6 5 2 3 4 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 19 18 19 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 10 18 19 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 6 7 1 2 3 6 6 3 4 5 9 19 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 6 7 1 2 3 6 6 3 4 5 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 6 7 1 2 3 6 6 3 4 5 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 4 18 1 2 3 4 18 4 5 19 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 4 19 1 2 3 4 19 4 5 8 8 5 6 7 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 4 19 1 2 3 4 19 4 5 6 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 4 7 1 2 3 4 7 4 5 6 9 19 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 4 7 1 2 3 4 7 4 5 6 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 4 7 1 2 3 4 7 4 5 6 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 19 3 4 5 19 7 19 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 19 18 1 2 3 19 18 19 3 6 3 4 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 9 18 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 3 19 7 19 3 6 3 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 7 1 2 3 19 7 19 3 4 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 19 5 1 2 3 19 5 19 3 4 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 19 18 1 2 3 19 18 19 3 4 8 18 4 7 4 5 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 19 18 1 2 3 19 18 19 3 4 6 18 4 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 6 9 6 1 19 5 1 2 3 19 5 19 3 4 9 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 6 9 6 1 19 5 1 2 3 19 5 19 3 4 9 6 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 7 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 19 5 1 2 3 19 5 19 3 4 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 4 5 1 2 3 4 10 5 8 9 5 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 4 5 1 2 3 4 10 5 6 9 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 4 5 1 2 3 4 9 19 5 8 5 6 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 4 5 1 2 3 4 9 19 5 8 5 6 7 8 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 4 5 1 2 3 4 7 19 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 6 19 6 1 4 5 1 2 3 4 8 19 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 6 7 6 1 4 5 1 2 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 4 5 1 2 3 4 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 18 6 2 3 19 18 19 3 4 5 6 18 19 5\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 19 19 2 7 8 2 3 6 7 6 3 4 5 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 19 19 2 7 8 2 3 4 7 7 4 5 6 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 5 19 2 3 4 5 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 19 19 2 5 8 2 3 4 5 8 5 6 7 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 19 18 2 3 4 19 18 19 4 5 7 18 5 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 19 6 2 3 4 19 6 19 4 5 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 9 18 7 8\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 7 7 2 5 6 2 3 4 5 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 5 6 2 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 7 7 2 5 6 2 3 4 5 9 19 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 7 7 2 5 6 2 3 4 5 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 2 7 7 2 5 6 2 3 4 5 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 3 19 19 3 6 7 3 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 19 19 2 3 8 8 3 6 7 3 4 5 6 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 19 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 3 19 19 3 4 7 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 19 19 2 3 8 8 3 4 7 7 4 5 6 9 18 19 8\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 18 18 2 3 19 19 3 4 5 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 18 0 1 8 18 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 10 18 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 7 7 2 3 19 19 3 4 5 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 7 0 1 6 7 6 1 2 18 18 2 3 19 19 3 4 5 6 18 19 5 10 7 8 9\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 3 6 6 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 7 7 2 3 6 6 3 4 5 9 19 7 8 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 7 7 2 3 6 6 3 4 5 9 19 7 8 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 2 7 7 2 3 6 6 3 4 5 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 19 0 1 8 19 8 1 2 7 7 2 3 4 7 4 5 6 10 19 8 9 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 19 19 2 3 4 8 19 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 7 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 10 7 8 9 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 19 19 2 3 4 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 5 5 2 3 4 7 19 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 19 0 1 6 19 6 1 2 5 5 2 3 4 8 19 6 7 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 6 7 6 1 2 5 5 2 3 4 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 5 5 2 3 4 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 8 9 8 1 2 3 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 8 9 8 1 2 3 8 3 19 7 3 4 5 19 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 18 10 11 17 12 13 14\n"
+;
+
+const char* data_dqrgl_block27 = 
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7 12 17 18 11\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 19 18 17 16 15 0 19 18 19 0 11 0 1 10 11 10 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8 12 17 18 11\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 6 7 6 1 2 3 6 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 6 7 6 1 2 3 6 3 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 4 7 4 1 2 3 7 4 5 6 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 4 7 4 1 2 3 7 4 5 6 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 18 9 18 1 2 3 9 18 3 8 3 4 19 8 19 4 5 6 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 3 9 19 3 8 3 4 7 8 7 4 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 3 9 19 3 8 3 4 7 8 7 4 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 3 9 19 3 8 3 4 5 8 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 19 9 19 1 2 3 9 19 3 8 3 4 5 8 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 19 7 19 1 2 3 7 19 3 6 3 4 5 6 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 12 17 6 7 12 7 10 11 7 8 9 10\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 6 17 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 12 17 6 7 12 7 8 11 11 8 9 10\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 5 0 1 19 5 19 1 2 3 5 19 3 4 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 5 0 1 4 5 4 1 2 3 8 5 6 7 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 17 8 13 14 8 9 12 13 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 17 8 13 14 8 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 17 8 11 14 8 9 10 11 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 7 8 17 16 18 6 7 16 15 0 18 6 18 0 19 0 1 4 19 4 1 2 3 6 19 4 5 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 6 19 0 5 0 1 4 5 4 1 2 3 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 6 19 0 5 0 1 4 5 4 1 2 3 8 18 6 7 17 8 9 14 14 9 10 13 13 10 11 12\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 19 18 19 3 6 7 3 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 7 8 2 3 18 7 18 3 4 19 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 19 18 19 3 4 7 7 4 5 6 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 19 18 19 3 4 5 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 19 7 19 3 4 5 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 7 8 2 3 19 7 19 3 4 5 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 19 18 19 3 4 5 8 18 19 5 8 5 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 6 19 6 3 4 5 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 6 19 6 3 4 5 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 18 8 2 3 4 18 8 18 4 19 4 5 6 19 8 19 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 4 19 8 19 4 7 4 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 4 19 8 19 4 7 4 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 4 19 8 19 4 5 8 5 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 19 8 2 3 4 19 8 19 4 5 8 5 6 7 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 8 17 16 15 0 18 8 18 0 7 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 12 17 8 9 12 9 10 11\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 10 13 14 10 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 19 6 2 3 4 19 6 19 4 5 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 2 7 7 2 5 6 2 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 5 6 2 3 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 18 7 3 4 19 18 19 4 5 6 7 18 19 6\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 19 18 3 4 5 19 18 19 5 6 8 18 6 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 19 7 3 4 5 19 7 19 5 6 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 19 7 3 4 5 19 7 19 5 6 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 13 14 15 16 11 12 13 16 17 10 11 16 15 0 17 10 17 0 9 0 1 2 9 9 2 3 8 8 3 4 18 18 4 5 19 19 5 6 7 8 18 19 7\n"
+  "16 4 11 16 13 14 15 16 17 12 13 16 18 10 17 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 19 19 4 5 6 8 19 6 7 12 17 10 11\n"
+  "16 4 11 16 17 14 15 16 11 12 17 16 18 10 11 16 15 0 18 10 18 0 9 0 1 2 9 9 2 3 8 8 3 4 19 19 4 5 6 8 19 6 7 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 12 17 16 19 10 18 16 15 0 19 10 19 0 9 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7 12 18 10 11 17 12 13 14\n"
+  "16 4 11 16 17 14 15 16 18 10 17 16 19 8 18 16 15 0 19 8 19 0 7 0 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 17 10 11 14 14 11 12 13\n"
+  "16 4 11 16 17 14 15 16 9 10 17 16 18 8 9 16 15 0 18 8 18 0 7 0 1 2 7 7 2 3 6 6 3 4 5 17 10 19 14 10 11 12 19 14 19 12 13\n"
+  "16 4 11 16 17 14 15 16 18 8 17 16 19 6 18 16 15 0 19 6 19 0 5 0 1 2 5 5 2 3 4 8 18 6 7 17 8 9 14 14 9 12 13 9 10 11 12\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 5 6 2 3 4 5 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 8 13 8 1 6 7 1 2 5 6 5 2 3 4 13 8 9 12 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 11 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 9 12 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 9 12 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 15 10 13 14 10 11 12 13\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 15 16 15 12 13 14\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 13 16 16 13 14 15\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 10 11 7 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 8 13 8 1 6 7 1 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 9 10 11 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 9 12 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 9 10 11 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 15 10 13 14 10 11 12 13\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 9 10 6 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 7 1 2 3 4 7 4 5 6 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 8 13 8 1 4 7 1 2 3 4 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 8 11 8 1 4 7 1 2 3 4 7 4 5 6 11 8 9 10 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 14 9 10 11 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 6 13 6 1 4 5 1 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 13 14 15 16\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 8 2 3 4 5 8 5 6 7 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 6 2 3 4 5 11 6 9 10 6 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 6 2 3 4 5 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 7 7 2 5 6 2 3 4 5 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 7 3 4 5 6 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 8 8 3 6 7 3 4 5 6 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 8 9 5 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 7 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 8 13 8 1 2 7 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 9 14 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 11 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 9 12 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 9 10 11 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 13 14 17 0 9 10 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12 14 15 16 17\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 15 16 15 12 13 14\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 16 16 13 14 15\n"
+  "18 0 8 0 11 14 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 14 14 15 16 17\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 15 16 17 12 13 14 15\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 13 16 17 16 13 14 15\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 5 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 14 15 16 17\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 15 16 15 12 13 14\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 16 16 13 14 15\n"
+  "18 0 8 0 11 14 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 14 14 15 16 17\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 15 16 17 12 13 14 15\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 13 16 17 16 13 14 15\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 6 13 6 1 2 5 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "18 0 8 0 15 16 17 0 11 12 15 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 15 12 13 14\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 9 10 15 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 13 14 17 0 9 10 13 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 13 10 11 12 14 15 16 17\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 15 16 15 12 13 14\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 16 16 13 14 15\n"
+  "18 0 8 0 11 14 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 14 14 15 16 17\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 15 16 17 12 13 14 15\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 13 16 17 16 13 14 15\n"
+  "18 0 8 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "18 0 8 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 11 11 8 9 10 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 7 12 15 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 15 12 13 14\n"
+  "18 0 8 0 13 14 17 0 7 12 13 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 9 14 9 12 13 9 10 11 12\n"
+  "18 0 8 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 9 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 15 16 17 0 7 10 15 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 7 8 15 0 1 6 7 6 1 2 5 5 2 3 4 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "18 0 8 0 13 14 17 0 7 8 13 0 1 6 7 6 1 2 5 5 2 3 4 13 8 9 12 12 9 10 11 14 15 16 17\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 15 16 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 15 16 15 10 11 12 15 12 13 14\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "18 0 8 0 9 14 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 0 8 0 9 10 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 15 16 17 10 11 14 15 14 11 12 13\n"
+  "18 0 8 0 9 10 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 15 16 17 10 11 12 15 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 9 10 9 4 5 6 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 7 10 7 4 5 6 10 7 8 9\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 8 11 3 4 7 8 7 4 5 6 11 8 9 10\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 14 15 16 17\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 8 9 5 6 7 8\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 14 15 16 17\n"
+  "18 0 8 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 13 14 15 16\n"
+  "18 0 8 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 14 15 16 17\n"
+  "18 0 8 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 15 16 17 12 13 14 15\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "18 0 8 0 13 14 17 0 9 10 13 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 13 10 11 12 14 15 16 17\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 15 16 15 12 13 14\n"
+  "18 0 8 0 11 16 17 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 16 16 13 14 15\n"
+  "18 0 8 0 11 14 17 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 14 14 15 16 17\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 0 8 0 9 16 17 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 0 8 0 15 16 17 0 5 10 15 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 15 10 11 14 14 11 12 13\n"
+  "18 0 8 0 7 16 17 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 16 16 9 14 15 9 10 13 14 13 10 11 12\n"
+  "18 0 8 0 7 16 17 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 16 16 9 14 15 9 10 11 14 14 11 12 13\n"
+  "18 0 8 0 15 16 17 0 13 14 15 0 1 2 13 13 2 11 12 2 3 4 11 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "18 0 8 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 12 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 12 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 9 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 10 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 13 8 11 12 8 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 14 9 10 11 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 12 13 16 16 13 14 15\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 5 6 11 18 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 5 6 9 18 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 12 13 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 10 13 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 7 10 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 10 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 10 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 10 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 10 11 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 8 11 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 12 13 18 7 8 9 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 12 9 10 11 15 16 17 0\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 7 8 9 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 7 8 9 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 13 18 9 10 11 18 7 8 9 18 5 6 7 18 13 0 5 5 0 1 4 4 1 2 3 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 3 4 7 18 17 0 3 3 0 1 2 7 4 5 6 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 3 4 7 18 17 0 3 3 0 1 2 7 4 5 6 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 8 11 18 3 4 7 18 15 0 3 3 0 1 2 7 4 5 6 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 3 4 7 18 17 0 3 3 0 1 2 7 4 5 6 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 3 4 7 18 17 0 3 3 0 1 2 7 4 5 6 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 15 18 9 12 13 18 7 8 9 18 3 4 7 18 15 0 3 3 0 1 2 7 4 5 6 12 9 10 11 15 16 17 0\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 7 8 9 18 3 4 7 18 15 0 3 3 0 1 2 7 4 5 6 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 7 8 9 18 3 4 7 18 15 0 3 3 0 1 2 7 4 5 6 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 5 8 11 18 3 4 5 18 17 0 3 3 0 1 2 8 5 6 7 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 5 8 11 18 3 4 5 18 15 0 3 3 0 1 2 8 5 6 7 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 4 5 1 2 3 4 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 6 9 6 1 4 5 1 2 3 4 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 7 10 0 1 6 7 6 1 4 5 1 2 3 4 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 4 5 1 2 3 4 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 5 6 2 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 7 7 2 3 4 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 7 10 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 5 5 2 3 4 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 8 9 8 1 2 3 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 7 10 0 1 6 7 6 1 2 3 6 3 4 5 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 6 7 6 1 2 3 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 4 7 4 1 2 3 7 4 5 6 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 5 10 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 5 10 0 1 4 5 4 1 2 3 10 5 6 7 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 5 8 0 1 4 5 4 1 2 3 8 5 6 7 14 15 16 17\n"
+;
+
+const char* data_dqrgl_block28 = 
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 8 11 12 8 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 14 9 10 11 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 10 13 14 10 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 13 16 16 13 14 15\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 15 16 17 12 13 14 15\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 4 5 4 1 2 3 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 5 6 2 3 4 5 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 9 10 0 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 7 8 0 1 2 7 7 2 3 6 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 8 11 12 8 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 14 9 10 11 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 10 13 14 10 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 13 16 16 13 14 15\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 15 16 17 12 13 14 15\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 5 6 0 1 2 5 5 2 3 4 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 7 7 4 5 6 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 7 7 4 5 6 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 5 10 5 8 9 5 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 3 10 0 1 2 3 10 3 4 5 10 5 6 9 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 3 8 0 1 2 3 8 3 4 5 8 5 6 7 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 8 11 12 8 9 10 11\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 14 9 10 11 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 10 13 14 10 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 13 16 16 13 14 15\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 15 16 17 12 13 14 15\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 3 6 0 1 2 3 6 3 4 5 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 9 10 6 7 8 9 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 5 6 13 18 17 0 5 5 0 3 4 0 1 2 3 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 5 6 13 18 17 0 5 5 0 3 4 0 1 2 3 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 5 6 13 18 17 0 5 5 0 3 4 0 1 2 3 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 3 4 0 1 2 3 11 6 7 10 10 7 8 9 14 15 16 17\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 10 13 14 10 11 12 13\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 13 16 16 13 14 15\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 3 4 0 1 2 3 9 6 7 8 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 7 14 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "18 1 9 18 15 16 17 18 7 14 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 7 14 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 7 12 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 7 12 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 7 12 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 11 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 13 16 17 18 7 12 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 12 7 8 9 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 15 16 17 18 7 10 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 7 10 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 11 16 17 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 7 10 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 7 8 9 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 7 8 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 15 8 9 14 14 9 12 13 9 10 11 12\n"
+  "18 1 9 18 15 16 17 18 7 8 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 7 8 15 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 15 8 9 14 14 9 10 11 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 7 8 13 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 13 8 9 12 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 11 12 17 18 7 8 11 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 11 8 9 10 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 9 16 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 9 10 15 16 15 10 13 14 10 11 12 13\n"
+  "18 1 9 18 9 16 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 9 10 15 16 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 9 16 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 9 10 15 16 15 10 11 12 15 12 13 14\n"
+  "18 1 9 18 9 14 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 9 12 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 9 10 11 12 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 9 10 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 11 16 17 16 11 14 15 11 12 13 14\n"
+  "18 1 9 18 9 10 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 11 16 17 16 11 12 15 15 12 13 14\n"
+  "18 1 9 18 9 10 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 3 4 0 1 2 3 10 11 16 17 16 11 12 13 16 13 14 15\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 5 6 2 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 6 7 1 2 5 6 5 2 3 4 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 6 7 1 2 3 6 6 3 4 5 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 4 7 1 2 3 4 7 4 5 6 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 8 9 5 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 4 5 1 2 3 4 10 5 6 9 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 4 5 1 2 3 4 8 5 6 7 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 8 11 18 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 12 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 9 10 11 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 4 5 1 2 3 4 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 4 5 1 2 3 4 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 11 12 13 18 9 10 11 18 7 8 9 18 13 0 7 7 0 1 6 6 1 4 5 1 2 3 4 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 5 6 2 3 4 5 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 7 7 2 5 6 2 3 4 5 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 7 7 2 5 6 2 3 4 5 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 8 8 3 4 5 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 7 7 2 3 6 6 3 4 5 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 9 9 2 3 4 9 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 7 7 2 3 4 7 4 5 6 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 5 5 2 3 4 8 5 6 7 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 8 11 18 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 12 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 9 10 11 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 5 5 2 3 4 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 5 5 2 3 4 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 11 12 13 18 9 10 11 18 7 8 9 18 13 0 7 7 0 1 6 6 1 2 5 5 2 3 4 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 3 8 3 6 7 3 4 5 6 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 11 12 13 18 17 0 11 11 0 1 10 10 1 2 3 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 9 10 13 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 11 14 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 9 10 11 18 17 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 9 10 11 18 15 0 9 9 0 1 8 8 1 2 3 8 3 4 7 7 4 5 6 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 13 14 15 18 7 8 13 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 7 8 11 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 7 8 11 18 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 8 9 10 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 14 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "18 1 9 18 15 16 17 18 9 12 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 9 12 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 12 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 9 10 11 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 7 8 9 18 15 0 7 7 0 1 6 6 1 2 3 6 3 4 5 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 17 18 9 10 11 18 7 8 9 18 17 0 7 7 0 1 6 6 1 2 3 6 3 4 5 12 13 16 17 16 13 14 15\n"
+  "18 1 9 18 11 12 13 18 9 10 11 18 7 8 9 18 13 0 7 7 0 1 6 6 1 2 3 6 3 4 5 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 15 16 17 18 11 12 15 18 5 6 11 18 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 13 14 15 16\n"
+  "18 1 9 18 13 14 17 18 11 12 13 18 5 6 11 18 17 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 11 12 13 18 5 6 11 18 15 0 5 5 0 1 4 4 1 2 3 11 6 7 10 10 7 8 9 15 16 17 0\n"
+  "18 1 9 18 15 16 17 18 9 10 15 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 9 10 13 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 9 10 13 18 5 6 9 18 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 16 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 15 16 15 12 13 14\n"
+  "18 1 9 18 11 14 17 18 9 10 11 18 5 6 9 18 17 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 9 10 11 18 5 6 9 18 15 0 5 5 0 1 4 4 1 2 3 9 6 7 8 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 13 18 9 10 11 18 5 6 9 18 13 0 5 5 0 1 4 4 1 2 3 9 6 7 8 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 15 16 17 18 7 12 15 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 15 12 13 14\n"
+  "18 1 9 18 13 16 17 18 7 12 13 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 12 7 8 11 11 8 9 10 13 14 15 16\n"
+  "18 1 9 18 15 16 17 18 7 10 15 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 15 10 11 14 14 11 12 13\n"
+  "18 1 9 18 13 14 17 18 7 10 13 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 12 14 15 16 17\n"
+  "18 1 9 18 13 14 15 18 7 10 13 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 10 11 12 15 16 17 0\n"
+  "18 1 9 18 11 14 17 18 7 10 11 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 10 7 8 9 11 12 13 14 14 15 16 17\n"
+  "18 1 9 18 11 14 15 18 7 10 11 18 5 6 7 18 15 0 5 5 0 1 4 4 1 2 3 10 7 8 9 11 12 13 14 15 16 17 0\n"
+  "18 1 9 18 11 12 13 18 7 10 11 18 5 6 7 18 13 0 5 5 0 1 4 4 1 2 3 10 7 8 9 13 14 17 0 17 14 15 16\n"
+  "18 1 9 18 9 14 17 18 7 8 9 18 5 6 7 18 17 0 5 5 0 1 4 4 1 2 3 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 7 8 2 3 6 7 6 3 4 5 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 7 8 2 3 6 7 6 3 4 5 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 7 8 2 3 4 7 7 4 5 6 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 7 8 2 3 4 7 7 4 5 6 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 18 2 3 4 5 18 5 6 7 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 5 8 2 3 4 5 8 5 6 7 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 5 8 2 3 4 5 8 5 6 7 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 18 8 2 3 4 18 8 18 4 5 8 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 18 6 2 3 4 18 6 18 4 5 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 7 10 7 2 18 6 2 3 4 18 6 18 4 5 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 18 6 2 3 4 18 6 18 4 5 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 18 6 2 3 4 18 6 18 4 5 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 18 6 2 3 4 18 6 18 4 5 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 18 6 2 3 4 18 6 18 4 5 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 5 6 2 3 4 5 10 18 6 9 6 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 18 8 18 2 5 6 2 3 4 5 8 18 6 7 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 18 1 2 7 8 7 2 5 6 2 3 4 5 18 8 9 10 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 11 1 2 7 8 7 2 5 6 2 3 4 5 11 8 9 10 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 7 18 7 2 5 6 2 3 4 5 11 18 7 8 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 18 18 3 6 7 3 4 5 6 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 3 8 8 3 6 7 3 4 5 6 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 3 8 8 3 6 7 3 4 5 6 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 18 18 4 5 6 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 18 18 3 4 7 7 4 5 6 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 3 8 8 3 4 7 7 4 5 6 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 9 18 9 2 3 8 8 3 4 5 8 5 6 7 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 18 18 3 4 5 9 18 5 8 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 18 18 3 4 5 7 18 5 6 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 6 6 3 4 5 8 18 6 7 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 18 1 2 7 8 7 2 3 6 6 3 4 5 18 8 9 10 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 7 18 7 2 3 6 6 3 4 5 11 18 7 8 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 18 9 1 2 7 18 7 2 3 6 6 3 4 5 9 18 7 8 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 18 9 12 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 18 10 11 14 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 18 8 4 5 6 18 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 18 1 2 7 8 7 2 3 4 7 4 5 6 18 8 9 10 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 18 9 12 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 18 10 11 14 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 18 9 12 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 18 10 11 14 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 3 4 10 18 4 9 4 5 8 9 8 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 18 10 18 2 3 4 10 18 4 9 4 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 18 8 18 2 3 4 8 18 4 7 4 5 6 7 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 7 10 11 7 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 7 8 11 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 10 7 8 9 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 10 7 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 10 7 8 9 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 10 7 8 9 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 8 13 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 13 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 8 11 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 11 8 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 8 11 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 11 8 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 8 11 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 11 8 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 14 9 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 12 15 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 9 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 9 12 13 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 9 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 9 12 13 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 12 9 10 11 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 15 10 13 14 10 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 13 14 17 0 9 10 13 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 6 7 1 2 18 6 18 2 3 4 6 18 4 5 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 18 18 7 8 9 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 18 1 2 5 6 5 2 3 4 18 6 7 10 10 7 8 9 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 18 1 2 5 6 5 2 3 4 18 6 7 8 12 18 8 11 8 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 6 18 1 2 5 6 5 2 3 4 18 6 7 8 10 18 8 9 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 6 18 1 2 5 6 5 2 3 4 18 6 7 8 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 6 18 1 2 5 6 5 2 3 4 18 6 7 8 10 18 8 9 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 6 18 1 2 5 6 5 2 3 4 18 6 7 8 10 18 8 9 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 10 18 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 18 10 11 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 5 18 5 2 3 4 11 18 5 6 11 6 9 10 6 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 5 18 5 2 3 4 11 18 5 6 11 6 7 10 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 18 9 1 2 5 18 5 2 3 4 9 18 5 6 9 6 7 8 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 5 18 5 2 3 4 9 18 5 6 9 6 7 8 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 18 9 1 2 5 18 5 2 3 4 9 18 5 6 9 6 7 8 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 18 9 1 2 5 18 5 2 3 4 9 18 5 6 9 6 7 8 13 14 15 16\n"
+;
+
+const char* data_dqrgl_block29 = 
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 18 9 1 2 5 18 5 2 3 4 9 18 5 6 9 6 7 8 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 12 7 8 11 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 10 7 8 9 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 10 7 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 10 7 8 9 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 10 7 8 9 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 8 13 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 13 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 8 11 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 11 8 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 8 11 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 11 8 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 8 11 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 11 8 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 14 9 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 12 15 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 12 9 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 9 12 13 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 12 9 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 9 12 13 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 12 9 10 11 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 15 10 13 14 10 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 18 7 1 2 5 18 5 2 3 4 7 18 5 6 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 18 11 7 8 9 18 11 18 9 10\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 8 13 8 1 6 7 1 2 5 6 5 2 3 4 13 8 9 12 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 6 7 1 2 5 6 5 2 3 4 13 18 7 12 7 8 11 12 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 6 7 1 2 5 6 5 2 3 4 13 18 7 12 7 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 6 7 1 2 5 6 5 2 3 4 11 18 7 10 7 8 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 6 7 1 2 5 6 5 2 3 4 11 18 7 10 7 8 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 6 7 1 2 5 6 5 2 3 4 11 18 7 10 7 8 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 18 9 18 1 6 7 1 2 5 6 5 2 3 4 9 18 7 8 15 10 13 14 10 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 18 9 18 1 6 7 1 2 5 6 5 2 3 4 9 18 7 8 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 18 9 18 1 6 7 1 2 5 6 5 2 3 4 9 18 7 8 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 18 9 18 1 6 7 1 2 5 6 5 2 3 4 9 18 7 8 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 18 18 10 11 12 14 18 12 13\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 9 10 13 13 10 11 12 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 9 14 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 13 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 9 10 11 15 18 11 14 11 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 12 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 14 18 8 9 14 9 12 13 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 14 18 8 9 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 12 18 8 9 12 9 10 11 13 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 10 15 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 10 18 8 9 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 11 16 17 0 18 10 11 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 10 18 8 9 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 18 10 11 0 1 8 18 8 1 6 7 1 2 5 6 5 2 3 4 10 18 8 9 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 15 10 18 14 10 11 12 18 14 18 12 13\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 18 16 18 12 13 14 16 18 14 15\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 10 15 16 10 11 14 15 14 11 12 13\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 10 15 16 10 11 12 15 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 10 13 16 10 11 12 13 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 18 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 18 8 18 4 5 6 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 18 9 3 4 7 18 7 4 5 6 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 18 9 3 4 5 18 9 18 5 8 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 18 9 3 4 5 18 9 18 5 6 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 8 9 1 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 8 9 1 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 18 9 12 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 18 8 4 5 6 18 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 18 18 5 6 7 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 18 11 7 8 9 18 11 18 9 10\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 10 11 7 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 8 13 8 1 6 7 1 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 6 7 1 2 3 6 6 3 4 5 13 18 7 12 7 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 6 7 1 2 3 6 6 3 4 5 11 18 7 10 7 8 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 6 7 1 2 3 6 6 3 4 5 11 18 7 10 7 8 9 10 13 14 15 16\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 18 9 18 1 6 7 1 2 3 6 6 3 4 5 9 18 7 8 15 10 13 14 10 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 18 9 18 1 6 7 1 2 3 6 6 3 4 5 9 18 7 8 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 9 10 18 18 10 11 12 14 18 12 13\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 9 10 13 13 10 11 12 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 9 14 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 9 10 11 15 18 11 14 11 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 12 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 9 10 11 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 8 18 8 1 6 7 1 2 3 6 6 3 4 5 14 18 8 9 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 18 10 15 0 1 8 18 8 1 6 7 1 2 3 6 6 3 4 5 10 18 8 9 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 15 10 18 14 10 11 12 18 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 10 15 16 10 11 14 15 14 11 12 13\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 10 15 16 10 11 12 15 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 10 13 16 10 11 12 13 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 18 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 18 18 5 8 9 5 6 7 8 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 18 1 2 3 4 18 4 5 10 10 5 8 9 5 6 7 8 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 18 18 6 7 8 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 18 18 5 6 9 9 6 7 8 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 18 1 2 3 4 18 4 5 10 10 5 6 9 9 6 7 8 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 18 18 5 6 7 11 18 7 10 7 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 4 9 1 2 3 4 9 4 5 18 18 5 6 7 9 18 7 8 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 18 18 5 6 7 9 18 7 8 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 18 18 5 6 7 9 18 7 8 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 4 18 1 2 3 4 18 4 5 8 8 5 6 7 10 18 8 9 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 18 1 2 3 4 18 4 5 8 8 5 6 7 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 9 10 6 7 8 9 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 7 10 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 4 7 1 2 3 4 7 4 5 6 12 7 8 11 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 18 1 2 3 4 18 4 5 6 12 18 6 11 6 7 10 11 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 4 18 1 2 3 4 18 4 5 6 10 18 6 9 6 7 8 9 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 8 13 8 1 4 7 1 2 3 4 7 4 5 6 13 8 9 12 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 4 7 1 2 3 4 7 4 5 6 11 8 9 10 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 14 9 10 18 18 10 11 12 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 9 14 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 14 9 10 13 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 9 12 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 12 9 10 11 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 8 18 8 1 4 7 1 2 3 4 7 4 5 6 14 18 8 9 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 10 15 16 10 11 14 15 14 11 12 13\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 10 15 16 10 11 12 15 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 10 13 16 10 11 12 13 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 18 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 9 10 9 4 7 8 4 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 9 10 9 4 5 8 8 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 9 10 9 4 5 6 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 7 10 7 4 5 6 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 8 3 4 7 8 7 4 5 6 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 9 1 2 3 18 9 18 3 8 3 4 7 8 7 4 5 6 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 18 9 1 2 3 18 9 18 3 8 3 4 7 8 7 4 5 6 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 3 18 9 18 3 8 3 4 7 8 7 4 5 6 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 5 10 10 5 8 9 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 10 3 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 18 9 1 2 3 18 9 18 3 8 3 4 5 8 8 5 6 7 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 3 18 9 18 3 8 3 4 5 8 8 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 6 3 4 5 6 11 6 7 10 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 3 18 9 18 3 6 3 4 5 6 9 6 7 8 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 12 7 8 11 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 8 13 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 13 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 6 3 4 5 6 14 9 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 4 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 4 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 4 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 3 18 9 18 3 4 9 4 7 8 4 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 4 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 11 1 2 3 18 11 18 3 4 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 18 9 1 2 3 18 9 18 3 4 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 18 7 1 2 3 18 7 18 3 4 7 4 5 6 14 9 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 5 1 2 3 18 5 18 3 4 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 18 5 1 2 3 18 5 18 3 4 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 6 13 6 1 18 5 1 2 3 18 5 18 3 4 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 14 7 8 13 13 8 9 10 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 14 7 8 11 11 8 9 10 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 14 7 8 9 14 9 12 13 9 10 11 12\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 18 5 1 2 3 18 5 18 3 4 14 7 8 9 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 10 11 5 6 18 10 18 6 7 8 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 18 11 5 6 9 18 9 6 7 8 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 18 11 5 6 7 18 11 18 7 10 7 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 4 5 1 2 3 4 12 5 6 11 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 4 5 1 2 3 4 13 18 5 12 5 6 11 12 11 6 7 10 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 4 5 1 2 3 4 13 18 5 12 5 6 11 12 11 6 7 8 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 18 18 4 5 6 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 18 9 18 3 4 7 7 4 5 6 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 8 18 8 3 4 7 7 4 5 6 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 18 9 18 3 4 5 9 18 5 8 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 18 7 18 3 4 5 7 18 5 6 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 18 2 3 6 7 6 3 4 5 18 7 8 9 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 6 18 6 3 4 5 10 18 6 7 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 18 8 2 3 6 18 6 3 4 5 8 18 6 7 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 7 8 2 3 6 7 6 3 4 5 12 18 8 11 8 9 10 11\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 18 18 2 7 8 2 3 6 7 6 3 4 5 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 7 8 2 3 6 7 6 3 4 5 10 18 8 9 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 7 8 2 3 6 7 6 3 4 5 10 18 8 9 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 18 8 4 5 6 18 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 18 18 2 7 8 2 3 4 7 7 4 5 6 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 7 8 2 3 4 7 7 4 5 6 10 18 8 9 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 18 18 6 7 8 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 18 2 3 4 5 18 5 6 9 9 6 7 8 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 5 8 2 3 4 5 8 5 6 7 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 18 2 3 4 5 18 5 6 7 11 18 7 10 7 8 9 10\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 5 18 2 3 4 5 18 5 6 7 9 18 7 8 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 5 18 2 3 4 5 18 5 6 7 9 18 7 8 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 18 18 2 5 8 2 3 4 5 8 5 6 7 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 11 14 18 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 14 11 12 13 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 18 12 15 16 12 13 14 15\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 4 18 10 18 4 9 4 5 8 9 8 5 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 4 18 10 18 4 9 4 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 4 18 10 18 4 7 4 5 6 7 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 18 8 2 3 4 18 8 18 4 7 4 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 4 18 10 18 4 5 10 5 8 9 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 10 2 3 4 18 10 18 4 5 10 5 6 9 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 18 8 2 3 4 18 8 18 4 5 8 5 6 7 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 18 6 2 3 4 18 6 18 4 5 11 6 7 10 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 12 7 8 11 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 8 13 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 13 8 9 12 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 2 7 7 2 18 6 2 3 4 18 6 18 4 5 14 9 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 5 6 2 3 4 5 11 6 18 10 6 7 8 18 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 5 6 2 3 4 5 12 18 6 11 6 7 10 11 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 18 8 18 4 5 6 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 18 9 3 4 7 18 7 4 5 6 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 8 9 3 4 7 8 7 4 5 6 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 8 9 3 4 5 8 8 5 6 7 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 18 3 4 5 6 18 6 7 8 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 6 9 3 4 5 6 9 6 7 8 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 18 9 3 4 5 18 9 18 5 8 5 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 18 9 3 4 5 18 9 18 5 6 9 6 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 18 7 3 4 5 18 7 18 5 6 10 7 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 11 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 9 9 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 12 9 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 10 13 10 1 2 9 9 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 13 10 11 12\n"
+  "18 1 9 0 15 16 17 0 11 14 15 0 1 10 11 10 1 2 9 9 2 3 8 8 3 18 7 3 4 5 18 7 18 5 6 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 6 7 3 4 5 6 11 18 7 10 7 8 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 18 8 4 5 6 18 8 18 6 7\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 18 18 4 7 8 4 5 6 7 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 4 9 9 4 7 8 4 5 6 7 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 18 18 5 6 7 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 18 18 4 5 8 8 5 6 7 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 4 9 9 4 5 8 8 5 6 7 11 18 9 10\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 18 18 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 12 18 10 11\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 18 13 18 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 12 18 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 14 18 12 13\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 18 14 15 16\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 18 18 4 5 6 10 18 6 9 6 7 8 9\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 18 18 4 5 6 8 18 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 18 18 4 5 6 8 18 6 7 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 9 9 2 3 18 18 3 4 7 7 4 5 6 9 18 7 8 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 18 18 3 4 7 7 4 5 6 9 18 7 8 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 18 18 3 4 7 7 4 5 6 9 18 7 8 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 10 11 10 1 2 18 18 2 3 8 8 3 4 7 7 4 5 6 10 18 8 9 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 3 8 8 3 4 7 7 4 5 6 10 18 8 9 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 3 8 8 3 4 7 7 4 5 6 10 18 8 9 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 10 13 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 11 12 15 0 1 18 11 18 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 18 11 18 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 18 11 18 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 11 18 9 10 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 11 18 15 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 10 18 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 18 10 11 14 11 12 13\n"
+  "18 1 9 0 15 16 17 0 18 12 15 0 1 10 18 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 15 12 13 14\n"
+  "18 1 9 0 13 16 17 0 18 12 13 0 1 10 18 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 10 18 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 18 10 11 14 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 11 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 18 18 3 4 5 11 18 5 10 5 6 9 10 9 6 7 8\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 18 18 3 4 5 9 18 5 8 5 6 7 8 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 18 18 3 4 5 9 18 5 8 5 6 7 8 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 11 14 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 11 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 18 18 3 4 5 7 18 5 6 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 7 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 13 14 17 0 9 10 13 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 11 14 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 11 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 6 6 3 4 5 8 18 6 7 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 8 13 8 1 2 7 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 9 10 15 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 13 14 17 0 9 10 13 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 11 14 17 0 9 10 11 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 11 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 18 9 18 1 2 7 7 2 3 6 6 3 4 5 9 18 7 8 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 9 14 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 18 18 10 11 12 14 18 12 13\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 9 10 13 13 10 11 12 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 9 14 18 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 9 18 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 9 10 11 15 18 11 14 11 12 13 14\n"
+  "18 1 9 0 15 16 17 0 18 14 15 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 14 18 8 9 14 9 10 13 13 10 11 12\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 12 18 8 9 12 9 10 11 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 18 10 15 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 13 14 17 0 18 10 13 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 18 10 11 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 18 10 11 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 11 14 17 0 18 10 11 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 11 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 12 17 0 18 10 11 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 12 17 0 18 10 11 0 1 8 18 8 1 2 7 7 2 3 6 6 3 4 5 10 18 8 9 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 18 16 18 12 13 14 16 18 14 15\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "18 1 9 0 18 16 17 0 9 10 18 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 18 12 17 0 9 10 18 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 18 10 11 12 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 18 16 17 12 13 14 18 16 18 14 15\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 18 9 18 5 6 7 9 18 7 8\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 18 10 4 5 8 18 8 5 6 7 10 18 8 9\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 18 10 4 5 6 18 10 18 6 9 6 7 8 9\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 18 8 4 5 6 18 8 18 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 18 8 4 5 6 18 8 18 6 7 14 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 5 10 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 12 13 12 1 2 5 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9 18 14 15 16\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 18 16 18 12 13 14 16 18 14 15\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "18 1 9 0 18 12 17 0 9 10 18 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 18 10 11 12 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 18 16 17 12 13 14 18 16 18 14 15\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 3 4 10 18 4 9 4 5 8 9 8 5 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 18 18 2 3 4 10 18 4 9 4 5 8 9 8 5 6 7 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 11 12 15 16 15 12 13 14\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 11 12 13 16 16 13 14 15\n"
+  "18 1 9 0 11 14 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 11 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 18 18 2 3 4 8 18 4 7 4 5 6 7 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 15 16 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 15 16 15 10 11 12 15 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "18 1 9 0 9 14 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 9 12 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 9 10 11 12 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 9 10 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 10 15 16 17 10 11 14 15 14 11 12 13\n"
+  "18 1 9 0 9 10 17 0 7 8 9 0 1 6 7 6 1 2 18 18 2 3 4 6 18 4 5 10 15 16 17 10 11 12 15 15 12 13 14\n"
+  "18 1 9 0 18 16 17 0 13 14 18 0 1 6 13 6 1 2 5 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10 18 14 15 16\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 18 16 17 0 11 12 18 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 18 14 17 0 11 12 18 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 18 12 13 14 14 15 16 17\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 18 16 18 12 13 14 16 18 14 15\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "18 1 9 0 18 12 17 0 9 10 18 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 18 10 11 12 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 11 12 17 0 7 8 11 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 11 8 9 10 12 13 16 17 16 13 14 15\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 15 16 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 15 16 15 10 11 12 15 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "18 1 9 0 9 14 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 9 10 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 10 15 16 17 10 11 14 15 14 11 12 13\n"
+  "18 1 9 0 9 10 17 0 7 8 9 0 1 18 7 18 1 2 5 5 2 3 4 7 18 5 6 10 15 16 17 10 11 12 15 15 12 13 14\n"
+;
+
+const char* data_dqrgl_block30 = 
+  "18 1 9 0 15 16 17 0 7 18 15 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 13 13 8 9 12 12 9 10 11 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 7 14 18 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 13 13 8 9 12 12 9 10 11 18 14 15 16\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 18 18 8 9 10 14 18 10 13 10 11 12 13\n"
+  "18 1 9 0 13 14 17 0 7 18 13 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 11 11 8 9 10 13 18 11 12 14 15 16 17\n"
+  "18 1 9 0 18 16 17 0 7 12 18 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 18 12 13 16 16 13 14 15\n"
+  "18 1 9 0 15 16 17 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 9 14 9 18 13 9 10 11 18 13 18 11 12\n"
+  "18 1 9 0 15 16 17 0 7 18 15 0 1 6 7 6 1 2 5 5 2 3 4 18 7 8 9 15 18 9 14 9 10 13 14 13 10 11 12\n"
+  "18 1 9 0 13 14 17 0 18 12 13 0 1 6 18 6 1 2 5 5 2 3 4 12 18 6 7 12 7 8 11 11 8 9 10 14 15 16 17\n"
+  "18 1 9 0 13 14 17 0 18 8 13 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 13 8 9 12 12 9 10 11 14 15 16 17\n"
+  "18 1 9 0 9 16 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 15 16 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 9 16 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 15 16 15 10 11 12 15 12 13 14\n"
+  "18 1 9 0 9 16 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 13 16 13 10 11 12 16 13 14 15\n"
+  "18 1 9 0 9 14 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 13 14 13 10 11 12 14 15 16 17\n"
+  "18 1 9 0 9 16 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 9 16 17 0 18 8 9 0 1 6 18 6 1 2 5 5 2 3 4 8 18 6 7 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 18 16 18 10 11 12 16 18 12 15 12 13 14 15\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 16 16 11 18 15 11 12 13 18 15 18 13 14\n"
+  "18 1 9 0 18 16 17 0 7 8 18 0 1 6 7 6 1 2 5 5 2 3 4 18 8 9 16 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "18 1 9 0 9 10 17 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 15 16 17 10 11 18 15 18 11 12 13 15 18 13 14\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 18 10 18 4 5 6 10 18 6 9 6 7 8 9\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 18 8 18 4 5 6 8 18 6 7 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 18 8 18 4 5 6 8 18 6 7 14 15 16 17\n"
+  "18 1 9 0 13 16 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 18 9 3 4 7 18 7 4 5 6 9 18 7 8 13 14 15 16\n"
+  "18 1 9 0 13 14 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 18 9 3 4 7 18 7 4 5 6 9 18 7 8 14 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 15 16 17 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 18 9 5 6 7 18 9 18 7 8\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 13 18 17 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "18 1 9 0 11 12 17 0 9 10 11 0 1 8 9 8 1 2 3 8 3 18 7 3 4 5 18 7 18 5 6 12 15 16 17 12 13 14 15\n"
+  "18 1 9 0 11 16 17 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 18 16 18 12 13 14 16 18 14 15\n"
+  "18 1 9 0 11 18 17 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 18 16 18 10 11 12 16 18 12 15 12 13 14 15\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 16 16 11 18 15 11 12 13 18 15 18 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 3 7 18 3 6 3 4 5 6 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "18 1 9 0 9 16 17 0 7 8 9 0 1 18 7 18 1 2 3 7 18 3 6 3 4 5 6 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "18 1 9 0 7 16 17 0 5 6 7 0 1 18 5 18 1 2 3 5 18 3 4 7 8 9 16 16 9 14 15 9 10 13 14 13 10 11 12\n"
+  "18 1 9 0 7 16 17 0 5 6 7 0 1 18 5 18 1 2 3 5 18 3 4 7 8 9 16 16 9 14 15 9 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 8 9 8 3 6 7 3 4 5 6\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 6 7 6 3 4 5 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 7 8 2 3 4 7 7 4 5 6 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 7 8 2 3 4 7 7 4 5 6 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 5 8 2 3 4 5 8 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 5 8 2 3 4 5 8 5 6 7 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 8 2 3 4 5 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 5 6 2 3 4 5 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 5 6 2 3 4 5 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 5 6 2 3 4 5 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 7 12 7 2 5 6 2 3 4 5 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 7 10 7 2 5 6 2 3 4 5 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 5 6 2 3 4 5 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 5 6 2 3 4 5 13 8 9 10 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 11 1 2 7 8 7 2 5 6 2 3 4 5 11 8 9 10 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 6 7 3 4 5 6 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 8 8 3 6 7 3 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 6 7 3 4 5 6 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 7 7 4 5 6 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 5 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 10 10 3 4 5 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 9 12 9 2 3 8 8 3 4 5 8 5 6 7 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 8 8 3 4 5 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 6 6 3 4 5 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 7 12 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 7 10 7 2 3 6 6 3 4 5 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 3 6 6 3 4 5 13 8 9 10 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 6 6 3 4 5 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 9 12 13 9 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 6 6 3 4 5 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 7 8 4 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 11 12 11 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 13 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 9 10 9 2 3 4 9 4 5 8 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 3 4 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 13 1 2 7 8 7 2 3 4 7 4 5 6 13 8 9 10 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 8 11 1 2 7 8 7 2 3 4 7 4 5 6 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 9 12 13 9 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 7 8 7 2 3 4 7 4 5 6 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 5 12 5 2 3 4 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 5 12 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 5 12 5 2 3 4 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 5 10 5 2 3 4 10 5 6 9 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 9 12 13 9 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 5 8 5 2 3 4 8 5 6 7 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 10 10 7 8 9 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 10 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 8 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 13 1 2 5 6 5 2 3 4 13 6 7 8 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 6 11 1 2 5 6 5 2 3 4 11 6 7 8 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 10 13 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 11 14 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 6 9 1 2 5 6 5 2 3 4 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 5 6 5 2 3 4 14 7 12 13 7 8 11 12 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 5 6 5 2 3 4 14 7 12 13 7 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 5 6 5 2 3 4 14 7 10 13 7 8 9 10 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 10 11 7 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 5 6 5 2 3 4 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 5 6 5 2 3 4 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 5 6 5 2 3 4 12 7 8 11 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 11 14 15 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 6 7 1 2 5 6 5 2 3 4 10 7 8 9 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 6 7 1 2 5 6 5 2 3 4 15 8 9 14 14 9 12 13 9 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 6 7 1 2 5 6 5 2 3 4 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 6 7 1 2 5 6 5 2 3 4 15 8 9 14 14 9 10 11 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 8 13 8 1 6 7 1 2 5 6 5 2 3 4 13 8 9 12 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 8 13 8 1 6 7 1 2 5 6 5 2 3 4 13 8 9 12 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 8 13 8 1 6 7 1 2 5 6 5 2 3 4 13 8 9 12 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 8 11 8 1 6 7 1 2 5 6 5 2 3 4 11 8 9 10 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 15 15 10 11 12 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 13 13 10 11 12 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 14 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 13 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 9 14 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 13 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 11 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 16 9 10 11 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 15 18 19 0 9 14 15 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 14 9 10 11 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 9 12 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 9 12 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 9 12 13 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 12 9 10 11 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 15 16 10 11 14 15 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 15 16 10 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 13 16 10 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 11 16 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 11 16 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 17 10 11 16 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 17 18 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 17 18 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 17 18 17 12 13 14 17 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 6 7 1 2 5 6 5 2 3 4 11 12 13 18 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 9 10 9 4 7 8 4 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 9 10 9 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 9 10 9 4 5 6 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 7 10 7 4 5 6 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 8 11 3 4 7 8 7 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 10 11 3 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 6 11 3 4 5 6 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 6 11 3 4 5 6 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 9 12 13 9 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 6 7 3 4 5 6 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 7 8 4 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 5 8 8 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 10 11 1 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 12 13 1 2 3 12 12 3 4 11 11 4 5 6 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 8 9 1 2 3 8 8 3 4 7 7 4 5 6 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 3 6 6 3 4 5 14 7 12 13 7 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 3 6 6 3 4 5 14 7 10 13 7 8 9 10 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 10 11 7 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 10 11 7 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 10 11 7 8 9 10 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 3 6 6 3 4 5 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 6 7 1 2 3 6 6 3 4 5 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 6 7 1 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 6 7 1 2 3 6 6 3 4 5 10 7 8 9 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 6 7 1 2 3 6 6 3 4 5 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 8 13 8 1 6 7 1 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 8 13 8 1 6 7 1 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 8 11 8 1 6 7 1 2 3 6 6 3 4 5 11 8 9 10 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 15 15 10 11 12 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 13 13 10 11 12 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 14 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 11 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 16 9 10 11 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 12 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 12 9 10 11 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 15 16 10 11 14 15 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 15 16 10 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 13 16 10 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 11 16 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 11 16 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 6 7 1 2 3 6 6 3 4 5 17 10 11 16 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 8 9 5 6 7 8 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 10 10 5 8 9 5 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 11 1 2 3 4 11 4 5 10 10 5 8 9 5 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 9 9 6 7 8 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 10 10 5 6 9 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 7 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 12 12 5 6 7 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 10 10 5 6 7 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 8 8 5 6 7 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 8 8 5 6 7 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 9 10 11 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 8 8 5 6 7 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 6 13 6 11 12 6 7 10 11 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 6 13 6 11 12 6 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 6 13 6 9 12 6 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 9 10 6 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 9 10 6 7 8 9 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 6 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 13 1 2 3 4 13 4 5 6 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 7 10 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 11 1 2 3 4 11 4 5 6 11 6 7 10 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 4 9 1 2 3 4 9 4 5 6 9 6 7 8 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 7 1 2 3 4 7 4 5 6 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 7 1 2 3 4 7 4 5 6 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 4 7 1 2 3 4 7 4 5 6 12 7 8 11 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 4 7 1 2 3 4 7 4 5 6 10 7 8 9 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 4 7 1 2 3 4 7 4 5 6 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 8 13 8 1 4 7 1 2 3 4 7 4 5 6 13 8 9 12 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 9 10 15 15 10 11 12 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 9 10 13 13 10 11 12 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 9 10 11 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 4 7 1 2 3 4 7 4 5 6 16 9 10 11 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 12 13 5 6 11 12 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 12 13 5 6 11 12 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 12 13 5 6 9 12 9 6 7 8 12 9 10 11\n"
+;
+
+const char* data_dqrgl_block31 = 
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 10 13 5 6 9 10 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 12 13 5 6 7 12 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 12 13 5 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 8 13 5 6 7 8 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 11 12 6 7 10 11 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 11 12 6 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 9 12 6 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 4 5 1 2 3 4 14 5 6 13 13 6 7 12 12 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 6 15 6 1 4 5 1 2 3 4 15 6 7 14 14 7 8 13 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 6 15 6 1 4 5 1 2 3 4 15 6 7 14 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 9 9 4 7 8 4 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 9 9 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 9 9 4 5 6 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 7 7 4 5 6 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 8 11 8 3 4 7 7 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 12 2 3 8 9 8 3 4 7 7 4 5 6 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 7 7 4 5 6 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 5 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 10 11 10 3 4 5 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 8 9 8 3 4 5 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 6 11 6 3 4 5 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 6 9 6 3 4 5 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 12 2 3 6 7 6 3 4 5 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 12 2 3 6 7 6 3 4 5 12 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 10 2 3 6 7 6 3 4 5 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 8 2 3 6 7 6 3 4 5 13 8 11 12 8 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 8 2 3 6 7 6 3 4 5 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 6 7 6 3 4 5 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 11 14 15 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 14 11 12 13 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 7 8 2 3 6 7 6 3 4 5 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 4 11 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 4 11 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 7 8 4 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 4 11 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 11 12 2 3 4 11 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 9 10 2 3 4 9 9 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 7 8 2 3 4 7 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 7 8 2 3 4 7 7 4 5 6 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 9 9 2 7 8 2 3 4 7 7 4 5 6 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 12 2 3 4 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 12 2 3 4 5 12 5 6 11 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 12 2 3 4 5 12 5 6 9 9 6 7 8 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 9 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 12 2 3 4 5 12 5 6 7 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 12 2 3 4 5 12 5 6 7 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 5 10 2 3 4 5 10 5 6 7 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 8 2 3 4 5 8 5 6 7 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 5 8 2 3 4 5 8 5 6 7 11 8 9 10 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 5 8 2 3 4 5 8 5 6 7 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 5 8 2 3 4 5 8 5 6 7 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 6 2 3 4 5 13 6 11 12 6 7 10 11 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 6 2 3 4 5 13 6 11 12 6 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 6 2 3 4 5 13 6 9 12 6 7 8 9 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 6 2 3 4 5 13 6 7 12 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 5 6 2 3 4 5 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 7 7 2 5 6 2 3 4 5 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 10 11 3 4 9 10 9 4 5 8 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 10 11 3 4 9 10 9 4 5 6 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 10 11 3 4 7 10 7 4 5 6 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 8 11 3 4 7 8 7 4 5 6 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 8 9 3 4 7 8 7 4 5 6 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 7 8 7 4 5 6 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 10 11 3 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 10 11 3 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 8 9 3 4 5 8 8 5 6 7 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 8 9 3 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 6 11 3 4 5 6 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 6 11 3 4 5 6 11 6 7 8 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 6 9 3 4 5 6 9 6 7 8 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 9 3 4 5 6 9 6 7 8 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 6 7 3 4 5 6 12 7 10 11 7 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 6 7 3 4 5 6 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 6 7 3 4 5 6 10 7 8 9 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 8 8 3 6 7 3 4 5 6 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 9 9 2 3 8 8 3 6 7 3 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 9 10 4 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 7 10 4 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 7 8 4 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 9 9 4 7 8 4 5 6 7 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 10 10 3 4 9 9 4 7 8 4 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 10 10 5 8 9 5 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 10 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 10 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 8 8 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 9 9 4 5 8 8 5 6 7 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 12 15 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 13 16 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 9 9 4 5 8 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 6 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 11 11 4 5 6 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 7 7 4 5 6 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 7 7 4 5 6 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 8 8 3 4 7 7 4 5 6 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 8 8 3 4 7 7 4 5 6 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 10 15 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 10 13 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 10 13 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 10 13 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 11 16 17 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 11 14 17 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 8 8 3 4 7 7 4 5 6 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 5 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 5 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 5 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 8 9 5 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 8 9 5 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 5 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 12 12 3 4 5 12 5 6 11 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 10 10 3 4 5 10 5 6 9 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 6 6 3 4 5 13 6 7 12 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 11 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 6 6 3 4 5 11 6 7 10 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 6 6 3 4 5 9 6 7 8 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 7 7 2 3 6 6 3 4 5 14 7 8 13 13 8 9 12 12 9 10 11\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 7 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 7 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 7 7 2 3 6 6 3 4 5 12 7 8 11 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 7 7 2 3 6 6 3 4 5 10 7 8 9 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 8 15 8 1 2 7 7 2 3 6 6 3 4 5 15 8 9 14 14 9 10 13 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 8 13 8 1 2 7 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 8 13 8 1 2 7 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 8 13 8 1 2 7 7 2 3 6 6 3 4 5 13 8 9 12 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 8 11 8 1 2 7 7 2 3 6 6 3 4 5 11 8 9 10 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 15 15 10 11 12 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 13 13 10 11 12 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 14 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 9 14 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 9 14 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 14 9 10 13 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 11 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 16 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 16 9 10 11 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 9 12 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 9 10 11 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 9 10 17 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 17 10 11 16 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 15 16 19 0 9 10 15 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 15 10 11 14 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 9 10 13 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 13 10 11 12 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 17 18 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 17 18 17 12 13 14 17 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "20 0 9 0 11 16 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 15 16 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 18 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 11 14 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 11 12 13 14 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 17 18 19 12 13 16 17 16 13 14 15\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 17 18 19 12 13 14 17 17 14 15 16\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 15 18 19 12 13 14 15 18 15 16 17\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 13 18 19 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 7 7 2 3 6 6 3 4 5 12 13 18 19 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 11 12 4 5 10 11 10 5 6 9 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 11 12 4 5 10 11 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 11 12 4 5 8 11 8 5 6 7 11 8 9 10\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 9 12 4 5 8 9 8 5 6 7 12 9 10 11\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 8 9 8 5 6 7 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 8 9 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 11 12 4 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 11 12 4 5 6 11 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 6 9 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 9 10 4 5 6 9 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 7 12 4 5 6 7 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 7 10 4 5 6 7 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 7 10 4 5 6 7 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 9 9 2 3 4 9 4 7 8 4 5 6 7 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 5 12 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 5 12 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 5 12 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 5 10 10 5 8 9 5 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 13 13 2 3 4 13 4 5 12 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 11 11 2 3 4 11 4 5 10 10 5 6 9 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 12 13 12 1 2 5 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 5 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 5 5 2 3 4 12 5 6 11 11 6 7 10 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 5 5 2 3 4 10 5 6 9 9 6 7 8 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 17 18 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 17 18 17 12 13 14 17 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "20 0 9 0 11 16 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 15 16 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 18 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 11 14 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 11 12 13 14 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 17 18 19 12 13 16 17 16 13 14 15\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 17 18 19 12 13 14 17 17 14 15 16\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 5 5 2 3 4 8 5 6 7 12 15 18 19 12 13 14 15 18 15 16 17\n"
+  "20 0 9 0 17 18 19 0 13 14 17 0 1 6 13 6 1 2 5 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10 17 14 15 16\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 6 13 6 1 2 5 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 6 13 6 1 2 5 5 2 3 4 13 6 7 12 12 7 8 11 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 11 12 17 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 11 12 15 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 6 11 6 1 2 5 5 2 3 4 11 6 7 10 10 7 8 9 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 13 14 19 0 9 10 13 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 13 10 11 12 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 17 18 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 17 18 17 12 13 14 17 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "20 0 9 0 11 16 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 15 16 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 18 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 11 14 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 11 12 13 14 14 15 18 19 18 15 16 17\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 17 18 19 12 13 16 17 16 13 14 15\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 6 9 6 1 2 5 5 2 3 4 9 6 7 8 12 17 18 19 12 13 14 17 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 7 14 17 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 13 13 8 9 12 12 9 10 11 17 14 15 16\n"
+  "20 0 9 0 15 16 19 0 7 14 15 0 1 6 7 6 1 2 5 5 2 3 4 14 7 8 13 13 8 9 12 12 9 10 11 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 11 11 8 9 10 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 7 12 17 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 15 16 19 0 7 12 15 0 1 6 7 6 1 2 5 5 2 3 4 12 7 8 11 11 8 9 10 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 16 9 14 15 9 10 13 14 13 10 11 12\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 16 9 14 15 9 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 16 9 12 15 9 10 11 12 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 16 9 10 15 15 10 13 14 10 11 12 13\n"
+  "20 0 9 0 17 18 19 0 7 16 17 0 1 6 7 6 1 2 5 5 2 3 4 16 7 8 9 16 9 10 15 15 10 11 14 14 11 12 13\n"
+  "20 0 9 0 17 18 19 0 7 10 17 0 1 6 7 6 1 2 5 5 2 3 4 10 7 8 9 17 10 11 16 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 15 16 19 0 7 8 15 0 1 6 7 6 1 2 5 5 2 3 4 15 8 9 14 14 9 10 13 13 10 11 12 16 17 18 19\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 17 18 17 10 11 12 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 17 18 17 10 11 12 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 13 18 13 10 11 12 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 18 18 11 16 17 11 12 15 16 15 12 13 14\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 18 18 11 16 17 11 12 13 16 16 13 14 15\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 18 18 11 14 17 11 12 13 14 17 14 15 16\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 18 18 11 12 17 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 9 10 11 18 18 11 12 17 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 9 10 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 17 18 19 10 11 16 17 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 9 10 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 17 18 19 10 11 16 17 16 11 12 13 16 13 14 15\n"
+  "20 0 9 0 9 10 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 17 18 19 10 11 14 17 14 11 12 13 17 14 15 16\n"
+  "20 0 9 0 9 10 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 17 18 19 10 11 12 17 17 12 15 16 12 13 14 15\n"
+  "20 0 9 0 9 10 19 0 7 8 9 0 1 6 7 6 1 2 5 5 2 3 4 10 17 18 19 10 11 12 17 17 12 13 16 16 13 14 15\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 11 12 11 4 5 6 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 11 12 11 4 5 6 11 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 7 12 7 4 5 6 12 7 8 11 11 8 9 10\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 7 10 7 4 5 6 10 7 8 9 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 7 10 7 4 5 6 10 7 8 9 16 17 18 19\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 8 11 3 4 7 8 7 4 5 6 11 8 9 10 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 8 11 3 4 7 8 7 4 5 6 11 8 9 10 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 13 14 17 18 17 14 15 16\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 7 8 7 4 5 6 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 5 12 12 5 10 11 5 6 9 10 9 6 7 8\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 5 12 12 5 10 11 5 6 7 10 10 7 8 9\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 5 12 12 5 8 11 5 6 7 8 11 8 9 10\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 8 9 5 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 8 9 5 6 7 8 16 17 18 19\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 12 13 3 4 5 12 12 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 15 18 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 6 9 9 6 7 8 15 16 17 18\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 10 11 3 4 5 10 10 5 6 9 9 6 7 8 16 17 18 19\n"
+  "20 0 9 0 13 18 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 13 14 15 18 18 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 8 9 3 4 5 8 8 5 6 7 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 13 16 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 13 14 15 16 16 17 18 19\n"
+  "20 0 9 0 13 14 19 0 11 12 13 0 1 10 11 10 1 2 3 10 3 6 9 3 4 5 6 9 6 7 8 14 17 18 19 14 15 16 17\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 17 18 19 12 13 16 17 16 13 14 15\n"
+  "20 0 9 0 11 12 19 0 9 10 11 0 1 8 9 8 1 2 3 8 3 6 7 3 4 5 6 12 17 18 19 12 13 14 17 17 14 15 16\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 14 15 14 1 2 3 14 3 4 13 13 4 11 12 4 5 10 11 10 5 6 7 10 7 8 9\n"
+  "20 0 9 0 15 16 19 0 13 14 15 0 1 12 13 12 1 2 3 12 3 4 11 11 4 9 10 4 5 8 9 8 5 6 7 16 17 18 19\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 15 18 15 12 13 14 18 15 16 17\n"
+  "20 0 9 0 11 16 19 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 15 16 15 12 13 14 16 17 18 19\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 18 18 13 16 17 13 14 15 16\n"
+  "20 0 9 0 11 18 19 0 9 10 11 0 1 4 9 4 1 2 3 9 4 5 8 8 5 6 7 11 12 13 18 18 13 14 17 17 14 15 16\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 18 18 11 16 17 11 12 15 16 15 12 13 14\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 18 18 11 16 17 11 12 13 16 16 13 14 15\n"
+  "20 0 9 0 9 18 19 0 7 8 9 0 1 4 7 4 1 2 3 7 4 5 6 9 10 11 18 18 11 14 17 11 12 13 14 17 14 15 16\n"
+  "20 0 9 0 15 16 19 0 5 10 15 0 1 4 5 4 1 2 3 10 5 6 9 9 6 7 8 15 10 11 14 14 11 12 13 16 17 18 19\n"
+  "20 0 9 0 7 18 19 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 18 18 9 16 17 9 10 11 16 16 11 14 15 11 12 13 14\n"
+  "20 0 9 0 7 18 19 0 5 6 7 0 1 4 5 4 1 2 3 7 8 9 18 18 9 16 17 9 10 11 16 16 11 12 15 15 12 13 14\n"
+  "20 0 9 0 17 18 19 0 15 16 17 0 1 2 15 15 2 13 14 2 3 4 13 13 4 11 12 4 5 6 11 11 6 9 10 6 7 8 9\n"
+  "20 0 9 0 17 18 19 0 1 16 17 16 1 2 15 15 2 3 14 14 3 4 13 13 4 5 12 12 5 6 11 11 6 7 10 10 7 8 9\n"
+;
+
+void diskQuadrangulationConcat(std::string& data) {
+  data = data + std::string(data_dqrgl_block0) + std::string(data_dqrgl_block1)
+  + std::string(data_dqrgl_block2) + std::string(data_dqrgl_block3) +
+  std::string(data_dqrgl_block4) + std::string(data_dqrgl_block5) +
+  std::string(data_dqrgl_block6) + std::string(data_dqrgl_block7) +
+  std::string(data_dqrgl_block8) + std::string(data_dqrgl_block9) +
+  std::string(data_dqrgl_block10) + std::string(data_dqrgl_block11) +
+  std::string(data_dqrgl_block12) + std::string(data_dqrgl_block13) +
+  std::string(data_dqrgl_block14) + std::string(data_dqrgl_block15) +
+  std::string(data_dqrgl_block16) + std::string(data_dqrgl_block17) +
+  std::string(data_dqrgl_block18) + std::string(data_dqrgl_block19) +
+  std::string(data_dqrgl_block20) + std::string(data_dqrgl_block21) +
+  std::string(data_dqrgl_block22) + std::string(data_dqrgl_block23) +
+  std::string(data_dqrgl_block24) + std::string(data_dqrgl_block25) +
+  std::string(data_dqrgl_block26) + std::string(data_dqrgl_block27) +
+  std::string(data_dqrgl_block28) + std::string(data_dqrgl_block29) +
+  std::string(data_dqrgl_block30) + std::string(data_dqrgl_block31) ;
+};
+
diff --git a/contrib/QuadMeshingTools/geolog.cpp b/contrib/QuadMeshingTools/geolog.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ab3b77b62926366da11f270502f4e11459940b9c
--- /dev/null
+++ b/contrib/QuadMeshingTools/geolog.cpp
@@ -0,0 +1,353 @@
+#include "geolog.h"
+#include <iostream>
+#include <fstream>
+#include <unordered_map>
+
+#define GMSH_LINKED
+#if defined(GMSH_LINKED)
+  #include "gmsh.h"
+  #include "Context.h"
+  #include "MVertex.h"
+  #include "MElement.h"
+  #include "MTriangle.h"
+  #include "MQuadrangle.h"
+#endif
+
+
+
+namespace GeoLog {
+  std::vector<View> views; /* global variable instanciation */
+
+  vec3 geolog_points_center(const std::vector<vec3>& pts) {
+    if (pts.size() == 0) return {0.,0.,0.};
+    vec3 center = {0.,0.,0.};
+    for (size_t i = 0; i < pts.size(); ++i) {
+      for (size_t d = 0; d < 3; ++d) {
+        center[d] = center[d] + pts[i][d];
+      }
+    }
+    for (size_t d = 0; d < 3; ++d) {
+      center[d] = 1./double(pts.size()) * center[d];
+    }
+    return center;
+  }
+
+  View& get_global_view(const std::string& name) {
+    bool found = false;
+    for (size_t i = 0; i < views.size() && !found; ++i) {
+      if (views[i].name == name) {
+        return views[i];
+      } 
+    }
+    View nv;
+    nv.name = name;
+    views.push_back(nv);
+    return views.back();
+  }
+
+  bool add(const std::vector<vec3>& pts, const std::vector<double>& values, const std::string& view, bool isCell) {
+    if (pts.size() == 0) return false;
+    GObj obj;
+    obj.pts.resize(pts.size());
+    obj.values.resize(pts.size());
+    obj.isVector = false;
+    obj.isCell = isCell;
+    for (size_t i = 0; i < pts.size(); ++i) {
+      obj.pts[i] = pts[i];
+      if (values.size() == 0) {
+        obj.values[i] = 0.;
+      } else if (values.size() == pts.size()) {
+        obj.values[i] = values[i];
+      } else {
+        obj.values[i] = values[0];
+      }
+    }
+    View& V = get_global_view(view);
+    V.objs.push_back(obj);
+    return true;
+  }
+
+  bool add(vec3 p, double value, const std::string& view) {
+    return add(std::vector<vec3>{p},std::vector<double>{value}, view, false);
+  }
+
+  bool add(const std::vector<vec3>& pts, double value, const std::string& view, bool isCell) {
+    return add(pts,std::vector<double>{value}, view, isCell);
+  }
+
+  double geolog_norm(vec3 a) {
+    return std::sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]); 
+  }
+
+  bool add(vec3 p, vec3 n, const std::string& view) {
+    GObj obj;
+    obj.isVector = true;
+    obj.isCell = false;
+    obj.pts.resize(1);
+    obj.values.resize(3);
+    obj.pts[0] = p;
+    obj.values[0] = n[0];
+    obj.values[1] = n[1];
+    obj.values[2] = n[2];
+    View& V = get_global_view(view);
+    V.objs.push_back(obj);
+    return true;
+  }
+
+  bool add(const std::vector<vec3>& pts, vec3 n, const std::string& view) {
+    if (pts.size() == 0) return false;
+    vec3 center = geolog_points_center(pts);
+    return add(center, n, view);
+  }
+
+
+  bool add(vec3 p, const std::string& text, const std::string& view) {
+    GObj obj;
+    obj.isVector = false;
+    obj.isCell = false;
+    obj.pts.resize(1);
+    obj.pts[0] = p;
+    obj.text = text;
+    View& V = get_global_view(view);
+    V.objs.push_back(obj);
+    return true;
+  }
+
+  bool add(const std::vector<vec3>& pts, const std::string& text, const std::string& view) {
+    if (pts.size() == 0) return false;
+    vec3 center = geolog_points_center(pts);
+    return add(center, text, view);
+  }
+
+  bool add(const std::vector<MElement*>& elements, const std::string& view) {
+#if defined(GMSH_LINKED)
+    View& V = get_global_view(view);
+    size_t e0 = V.objs.size();
+    V.objs.resize(V.objs.size()+elements.size());
+    for (size_t i = 0; i < elements.size(); ++i) {
+      MElement* elt = elements[i];
+      if (elt == nullptr) continue;
+      size_t nv = elt->getNumVertices();
+      V.objs[e0+i].isVector = false;
+      V.objs[e0+i].isCell = false;
+      if (elt->getDim() == 3) {
+        V.objs[e0+i].isCell = true;
+      }
+      V.objs[e0+i].pts.resize(nv);
+      V.objs[e0+i].values.resize(nv,0.);
+      for (size_t lv = 0; lv < nv; ++lv) {
+        MVertex* v = elt->getVertex(lv);
+        V.objs[e0+i].pts[lv][0] = v->x();
+        V.objs[e0+i].pts[lv][1] = v->y();
+        V.objs[e0+i].pts[lv][2] = v->z();
+      }
+    }
+
+    return true;
+#endif
+    return false;
+  }
+
+  bool add(const std::vector<MElement*>& elements, const std::unordered_map<MVertex*,double>& field, const std::string& view) {
+#if defined(GMSH_LINKED)
+    View& V = get_global_view(view);
+    size_t e0 = V.objs.size();
+    V.objs.resize(V.objs.size()+elements.size());
+    for (size_t i = 0; i < elements.size(); ++i) {
+      MElement* elt = elements[i];
+      if (elt == nullptr) continue;
+      size_t nv = elt->getNumVertices();
+      V.objs[e0+i].isVector = false;
+      V.objs[e0+i].isCell = false;
+      if (elt->getDim() == 3) {
+        V.objs[e0+i].isCell = true;
+      }
+      V.objs[e0+i].pts.resize(nv);
+      V.objs[e0+i].values.resize(nv,0.);
+      for (size_t lv = 0; lv < nv; ++lv) {
+        MVertex* v = elt->getVertex(lv);
+        V.objs[e0+i].pts[lv][0] = v->x();
+        V.objs[e0+i].pts[lv][1] = v->y();
+        V.objs[e0+i].pts[lv][2] = v->z();
+        auto it = field.find(v);
+        if (it != field.end()) {
+          V.objs[e0+i].values[lv] = it->second;
+        }
+      }
+    }
+
+    return true;
+#endif
+    return false;
+  }
+
+  bool add(const std::vector<MElement*>& elements, const std::vector<std::vector<double> >& field, const std::string& view) {
+#if defined(GMSH_LINKED)
+    if (elements.size() != field.size()) return false;
+    View& V = get_global_view(view);
+    size_t e0 = V.objs.size();
+    V.objs.resize(V.objs.size()+elements.size());
+    for (size_t i = 0; i < elements.size(); ++i) {
+      MElement* elt = elements[i];
+      if (elt == nullptr) continue;
+      size_t nv = elt->getNumVertices();
+      if (field[i].size() != nv) return false;
+      V.objs[e0+i].isVector = false;
+      V.objs[e0+i].isCell = false;
+      if (elt->getDim() == 3) {
+        V.objs[e0+i].isCell = true;
+      }
+      V.objs[e0+i].pts.resize(nv);
+      V.objs[e0+i].values.resize(nv,0.);
+      for (size_t lv = 0; lv < nv; ++lv) {
+        MVertex* v = elt->getVertex(lv);
+        V.objs[e0+i].pts[lv][0] = v->x();
+        V.objs[e0+i].pts[lv][1] = v->y();
+        V.objs[e0+i].pts[lv][2] = v->z();
+        V.objs[e0+i].values[lv] = field[i][lv];
+      }
+    }
+
+    return true;
+#endif
+    return false;
+
+  }
+
+  std::string gobj_type(const GObj& obj) {
+    if        (obj.pts.size() == 1 && obj.isVector) {
+      return "VP";
+    } else if (obj.pts.size() == 1 && obj.text.size() > 0) {
+      return "text";
+    } else if (obj.pts.size() == 1 && obj.values.size() == 1) {
+      return "SP";
+    } else if (obj.pts.size() == 2) {
+      return "SL";
+    } else if (obj.pts.size() == 3) {
+      return "ST";
+    } else if (obj.pts.size() == 4 && !obj.isCell) {
+      return "SQ";
+    } else if (obj.pts.size() == 4 && obj.isCell) {
+      return "SS";
+    } else if (obj.pts.size() == 5 && !obj.isCell) {
+      return "ST"; /* triangulation of polygon */
+    } else if (obj.pts.size() == 5 && obj.isCell) {
+      return "SY";
+    } else if (obj.pts.size() == 6 && !obj.isCell) {
+      return "ST"; /* triangulation of polygon */
+    } else if (obj.pts.size() == 6 && obj.isCell) {
+      return "SI";
+    } else if (obj.pts.size() == 7 && !obj.isCell) {
+      return "ST"; /* triangulation of polygon */
+    } else if (obj.pts.size() == 8 && !obj.isCell) {
+      return "ST"; /* triangulation of polygon */
+    } else if (obj.pts.size() == 8 && obj.isCell) {
+      return "SH";
+    } else if (obj.pts.size() > 8 && !obj.isCell) {
+      return "ST"; /* triangulation of polygon */
+    }
+    return "";
+  }
+
+  bool prepare_data(const GObj& obj, const std::string& ty, std::vector<double>& data, int& numElem) {
+    size_t N = obj.pts.size();
+    if (ty == "ST" && N > 3) { /* Require triangulation of polygon */
+      vec3 center = geolog_points_center(obj.pts);
+      for (size_t i = 0; i < obj.pts.size(); ++i) {
+        vec3 p1 = obj.pts[i];
+        vec3 p2 = obj.pts[(i+1)%obj.pts.size()];
+        double vmid = 0.5*(obj.values[i]+obj.values[(i+1)%obj.pts.size()]);
+        std::vector<vec3> tri_pts = {p1,p2,center};
+        std::vector<double> tri_values = {obj.values[i],obj.values[(i+1)%obj.pts.size()],vmid};
+        for (size_t d = 0; d < 3; ++d) {
+          for (size_t lv = 0; lv < 3; ++lv) {
+            data.push_back(tri_pts[lv][d]);
+          }
+        }
+        for (size_t lv = 0; lv < 3; ++lv) {
+          data.push_back(tri_values[lv]);
+        }
+        numElem += 1;
+      }
+    } else {
+      for (size_t d = 0; d < 3; ++d) {
+        for (size_t lv = 0; lv < N; ++lv) {
+          data.push_back(obj.pts[lv][d]);
+        }
+      }
+      for (size_t lv = 0; lv < N; ++lv) {
+        data.push_back(obj.values[lv]);
+      }
+      numElem += 1;
+    }
+    return true;
+  }
+
+  bool export_to_gmsh() {
+#if defined(GMSH_LINKED)
+    for (size_t v = 0; v < views.size(); ++v) {
+      if (views[v].objs.size() == 0) continue;
+      std::unordered_map<std::string,std::vector<double>> data_TYPE;
+      std::unordered_map<std::string,int> numElem_TYPE;
+      std::vector<std::string> data_string;
+      for (size_t i = 0; i < views[v].objs.size(); ++i) {
+        const GObj& obj = views[v].objs[i];
+        if (obj.text.size() > 0 && obj.pts.size() == 1) {
+          for (size_t d = 0; d < 3; ++d) {
+            data_TYPE["text"].push_back(obj.pts[0][d]);
+          }
+          data_string.push_back(obj.text);
+          numElem_TYPE["text"] += 1;
+        } else if (obj.isVector && obj.pts.size() == 1 && obj.values.size() == 3) {
+          std::vector<double>& data = data_TYPE["VP"];
+          for (size_t d = 0; d < 3; ++d) {
+            data.push_back(obj.pts[0][d]);
+          }
+          for (size_t d = 0; d < 3; ++d) {
+            data.push_back(obj.values[d]);
+          }
+          numElem_TYPE["VP"] += 1;
+        } else if (obj.pts.size() > 0 && obj.values.size() == obj.pts.size()) {
+          std::string ty = gobj_type(obj);
+          if (ty == "") {
+            std::cerr << "in GeoLog::export_to_gmsh(), GObj content not supported" << std::endl;
+            return false;
+          }
+          std::vector<double>& data = data_TYPE[ty];
+          int& numElem = numElem_TYPE[ty];
+          prepare_data(obj, ty, data, numElem); /* will triangulate polygons */
+        } else {
+          std::cerr << "in GeoLog::export_to_gmsh(), GObj content not supported" << std::endl;
+          return false;
+        }
+      }
+
+
+      /* gmsh API calls */
+      int aboe = CTX::instance()->abortOnError;
+      gmsh::initialize(); /* changes abortOnError !! */
+      CTX::instance()->abortOnError = aboe;
+      int view = gmsh::view::add(views[v].name);
+      for (const auto& kv: data_TYPE) {
+        if (kv.first != "" && kv.first != "text") {
+          if (kv.second.size() > 0) gmsh::view::addListData(view, kv.first, numElem_TYPE[kv.first], kv.second);
+        }
+      }
+      if (data_string.size() > 0) {
+        gmsh::view::addListDataString(view, data_TYPE["text"], data_string);
+      }
+    }
+
+    return true;
+#else
+    return false;
+#endif
+  }
+
+  bool flush() {
+    export_to_gmsh();
+    views.clear();
+    return true;
+  }
+
+}
diff --git a/contrib/QuadMeshingTools/geolog.h b/contrib/QuadMeshingTools/geolog.h
new file mode 100644
index 0000000000000000000000000000000000000000..43e5cf830e18ee9dcd08a85a21f855019de09fe3
--- /dev/null
+++ b/contrib/QuadMeshingTools/geolog.h
@@ -0,0 +1,59 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <vector>
+#include <unordered_map>
+#include <array>
+#include <string>
+
+class MElement;
+class MVertex;
+
+namespace GeoLog {
+  using vec3 = std::array<double,3>;
+
+  struct GObj {
+    std::vector<vec3> pts;
+    std::vector<double> values;
+    bool isCell = false;
+    bool isVector = false;
+    std::string text = "";
+  };
+
+  struct View {
+    std::string name;
+    std::vector<GObj> objs;
+    std::vector<std::pair<std::string,double>> optionsSetNumber;
+  };
+
+  /* Global variable */
+  extern std::vector<View> views;
+
+  /* Global functions (fill the global views) */
+  /* - scalar values */
+  bool add(vec3 p, double value, const std::string& view);
+  bool add(const std::vector<vec3>& pts, double value, const std::string& view, bool isCell = false);
+  bool add(const std::vector<vec3>& pts, const std::vector<double>& values, const std::string& view, bool isCell = false);
+  /* - vector value (vector at center if multiple points) */
+  bool add(vec3 p, vec3 n, const std::string& view);
+  bool add(const std::vector<vec3>& pts, vec3 n, const std::string& view);
+  /* - text value (text at center if multiple points) */
+  bool add(vec3 p, const std::string& text, const std::string& view);
+  bool add(const std::vector<vec3>& pts, const std::string& text, const std::string& view);
+
+  /* - interface for gmsh types */
+  bool add(const std::vector<MElement*>& elements, const std::string& view);
+  bool add(const std::vector<MElement*>& elements, const std::unordered_map<MVertex*,double>& field, const std::string& view);
+  bool add(const std::vector<MElement*>& elements, const std::vector<std::vector<double> >& field, const std::string& view);
+
+  View& get_global_view(const std::string& name);
+
+  /* Send the views to gmsh (deleting them in the process) */
+  bool flush();
+}
diff --git a/contrib/QuadMeshingTools/qmtCrossField.cpp b/contrib/QuadMeshingTools/qmtCrossField.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..df75ca9bd52bb4e0f0f832095b7540164a18724c
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtCrossField.cpp
@@ -0,0 +1,1729 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtCrossField.h"
+
+/* System includes */
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <cstdint>
+#include <cmath>
+#include <algorithm>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MTriangle.h"
+#include "gmsh.h"
+
+/* Linear algebra solver */
+#if defined(HAVE_EIGEN)
+  #include<Eigen/IterativeLinearSolvers>
+  #include<Eigen/SparseCholesky>
+  #include<Eigen/SparseLU>
+#endif
+#if defined(HAVE_SOLVER)
+  #include "dofManager.h"
+  #include "laplaceTerm.h"
+  #include "linearSystemGmm.h"
+  #include "linearSystemCSR.h"
+  #include "linearSystemFull.h"
+  #include "linearSystemPETSc.h"
+  #include "linearSystemMUMPS.h"
+  #include "linearSystemEigen.h"
+#endif
+
+/* QuadMeshingTools includes */
+#include "arrayGeometry.h"
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "geolog.h"
+
+
+/* TODO list:
+ * - Cross field smoother with a single Laplacian solve
+ * - Cross field smoother with a single factorization
+ * - MUMPS support
+ */
+
+using namespace ArrayGeometry;
+using namespace CppUtils;
+
+using std::vector;
+using std::unordered_map;
+using std::array;
+using std::pair;
+
+namespace QMT {
+
+  constexpr double EPS = 1.e-14;
+
+  using id   = uint32_t;
+  using sid  = int64_t;
+  using id2  = std::array<id,2>;
+  using id3  = std::array<id,3>;
+  using sid3 = std::array<sid,3>;
+  constexpr id   NO_ID  = (id) -1;
+  constexpr sid  NO_SID = (sid) NO_ID;
+
+  struct IJV {
+    id2 ij;
+    double val;
+    bool operator<(const IJV& b) const { return ij[0] < b.ij[0] || (ij[0] == b.ij[0] && ij[1] < b.ij[1]); }
+  };
+
+  struct IV {
+    id i;
+    double val;
+    bool operator<(const IV& b) const { return i < b.i; }
+  };
+
+
+  class CrossFieldLinearSystem {
+    protected:
+    size_t N = 0;
+#if defined(HAVE_EIGEN)
+    Eigen::VectorXd x, b;
+    Eigen::SparseMatrix<double> A;
+    Eigen::SparseLU<Eigen::SparseMatrix<double> > solver;
+#endif
+
+    public:
+    CrossFieldLinearSystem(size_t N_):N(N_) {
+#if defined(HAVE_EIGEN)
+      Msg::Debug("Eigen call: initialize sparse matrix, vectors and solver");
+      x.resize(N);
+      x.fill(0.);
+      b.resize(N);
+      b.fill(0.);
+      A.resize(N,N);
+#else
+      Msg::Error("Linear solver Eigen required");
+#endif
+    }
+
+    bool add_sparse_coefficients(
+        const std::vector<std::vector<size_t>>& columns,
+        const std::vector<std::vector<double>>& values,
+        bool firstTime = false) {
+#if defined(HAVE_EIGEN)
+      // Msg::Debug("Eigen call: add coefficients");
+      std::vector<Eigen::Triplet<double,size_t> > triplets;
+      triplets.reserve(values.size());
+      if (firstTime) {
+        for (size_t i = 0; i < columns.size(); ++i) {
+          for (size_t k = 0; k < columns[i].size(); ++k) {
+            size_t j = columns[i][k];
+            double val = values[i][k];
+            triplets.push_back({i,j,val});
+          }
+        }
+        A.setFromTriplets(triplets.begin(),triplets.end());
+      } else {
+        for (size_t i = 0; i < columns.size(); ++i) {
+          for (size_t k = 0; k < columns[i].size(); ++k) {
+            size_t j = columns[i][k];
+            double val = values[i][k];
+            A.coeffRef(i,j) += val; /* entry (i,j) should already exists */
+          }
+        }
+      }
+      return true;
+#else
+      Msg::Error("Linear solver Eigen required");
+      return false;
+#endif
+    }
+
+    bool set_rhs_values(const std::vector<double>& rhs) {
+#if defined(HAVE_EIGEN)
+      // Msg::Debug("Eigen call: add rhs values");
+      for (size_t i = 0; i < rhs.size(); ++i) if (rhs[i] != 0.) {
+        b[i] = rhs[i];
+      }
+      return true;
+#else
+      Msg::Error("Linear solver Eigen required");
+      return false;
+#endif
+    }
+
+    bool preprocess_sparsity_pattern() {
+#if defined(HAVE_EIGEN)
+      Msg::Debug("Eigen call: analyse sparse matrix sparsity pattern");
+      solver.analyzePattern(A);
+      return true;
+#else
+      Msg::Error("Linear solver Eigen required");
+      return false;
+#endif
+    }
+
+    bool factorize() {
+#if defined(HAVE_EIGEN)
+      Msg::Debug("Eigen call: factorize sparse matrix");
+      solver.factorize(A);
+      return true;
+#else
+      Msg::Error("Linear solver Eigen required");
+      return false;
+#endif
+    }
+
+    bool solve(std::vector<double>& slt) {
+#if defined(HAVE_EIGEN)
+      Msg::Debug("Eigen call: solve linear system");
+      x = solver.solve(b);
+      if (solver.info() != Eigen::ComputationInfo::Success) {
+        Msg::Warning("Eigen: failed to solve linear system with SparseLU (%li variables)", N);
+        return false;
+      }
+      slt.resize(x.size());
+      for (size_t i = 0; i < N; ++i) slt[i] = x[i];
+      return true;
+#else
+      Msg::Error("Linear solver Eigen required");
+      return false;
+#endif
+    }
+
+  };
+
+
+  bool compute_triangle_adjacencies(
+      const vector<id3>& triangles,
+      vector<sid3>& triangle_neighbors,
+      vector<vector<id>>& nm_triangle_neighbors,
+      vector<id2>& uIEdges,
+      vector<id>& old2IEdge,
+      vector<vector<id>>& uIEdgeToOld
+      ) {
+    triangle_neighbors.clear();
+    triangle_neighbors.resize(triangles.size(),{NO_ID,NO_ID,NO_ID});
+    nm_triangle_neighbors.clear();
+
+    constexpr size_t NBF = 3;
+
+    /* Store element 'faces', with duplicates for further 'equality test' */
+    std::vector<id2> faces;
+    for (size_t i = 0; i < triangles.size(); ++i) {
+      for (size_t lf = 0; lf < NBF; ++lf) {
+        id2 face = {triangles[i][lf],triangles[i][(lf+1)%NBF]};
+        std::sort(face.begin(),face.end());
+        faces.push_back(face);
+      }
+    }
+
+    /* Reduce 'duplicated faces' to 'unique faces', keeping the 'old2new' mapping */
+    size_t nbUniques = sort_unique_with_perm(faces, uIEdges, old2IEdge);
+
+    /* Build the 'unique face to elements' mapping */
+    uIEdgeToOld.resize(nbUniques);
+    for (size_t i = 0; i < triangles.size(); ++i) {
+      for (size_t lf = 0; lf < NBF; ++lf) {
+        id facePos = NBF*i+lf;
+        uIEdgeToOld[old2IEdge[facePos]].push_back(facePos);
+      }
+    }
+
+    /* Loop over 'unique face to elements' and set the element adjacencies */
+    constexpr id2 NO_FACE = {NO_ID,NO_ID};
+    for (size_t i = 0; i < nbUniques; ++i) {
+      if (uIEdges[i] == NO_FACE) continue;
+      if(uIEdges[i][0] == NO_ID) return false;
+      if(uIEdges[i][1] == NO_ID) return false;
+      if (uIEdgeToOld[i].size() == 1) { /* boundary */
+        id eltId = uIEdgeToOld[i][0] / NBF;
+        id lf = uIEdgeToOld[i][0] % NBF;
+        triangle_neighbors[eltId][lf] = NO_ID;
+      } else if (uIEdgeToOld[i].size() == 2) { /* regular face */
+        id e1 = uIEdgeToOld[i][0] / NBF;
+        id lf1 = uIEdgeToOld[i][0] % NBF;
+        id e2 = uIEdgeToOld[i][1] / NBF;
+        id lf2 = uIEdgeToOld[i][1] % NBF;
+        triangle_neighbors[e1][lf1] = NBF*e2+lf2;
+        triangle_neighbors[e2][lf2] = NBF*e1+lf1;
+      } else if (uIEdgeToOld[i].size() > 2) { /* non manifold face */
+        for (size_t j = 0; j < uIEdgeToOld[i].size(); ++j) {
+          id e = uIEdgeToOld[i][j] / NBF;
+          id lf = uIEdgeToOld[i][j] % NBF;
+          std::vector<id> neighs;
+          for (size_t k = 0; k < uIEdgeToOld[i].size(); ++k) {
+            if (uIEdgeToOld[i][k] != uIEdgeToOld[i][j]) {
+              neighs.push_back(uIEdgeToOld[i][k]);
+            }
+          }
+          neighs.shrink_to_fit();
+          id pos = nm_triangle_neighbors.size();
+          nm_triangle_neighbors.push_back(neighs);
+          triangle_neighbors[e][lf] = -((sid) pos + 1);
+        }
+      }
+    }
+
+    /* Reduce memory consumption */
+    triangle_neighbors.shrink_to_fit();
+    nm_triangle_neighbors.shrink_to_fit();
+
+    return true;
+  }
+
+  /* two unknowns (x_2i, x_2i+1) for each edge */
+  bool stiffness_coefficient(
+      int N,
+      const std::vector<std::array<double,3> >& points,
+      const std::vector<std::array<id,3> >& triangles,
+      id e,
+      const vector<id2>& uIEdges,
+      const vector<id>& old2IEdge,
+      const vector<vector<id>>& uIEdgeToOld,
+      vector<IV>& iv,
+      vector<IJV>& ijv) {
+    if (uIEdgeToOld[e].size() != 2) {
+      Msg::Error("assembly, edge %li: uIEdgeToOld[e].size() = %li", e, uIEdgeToOld[e].size());
+      return false;
+    }
+    /* edge vertices */
+    id v1 = uIEdges[e][0];
+    id v2 = uIEdges[e][1];
+    vec3 e_x = points[v2] - points[v1];
+    double lenr = length(e_x);
+    if (lenr < EPS) {
+      Msg::Error("edge too small: v1=%li, v2=%li, length = %e", v1, v2, lenr);
+      return false;
+    }
+    e_x = (1./lenr) * e_x;
+    /* four neighbor edges */
+    id bvars[4] = {NO_ID,NO_ID,NO_ID,NO_ID};
+    double alpha[4] = {0.,0.,0.,0.};
+    double CR_weight[4] = {-1./4,-1./4,-1./4,-1./4};
+    vec3 prevN;
+    for (size_t s = 0; s < 2; ++s) { /* two triangles */
+      id oe = uIEdgeToOld[e][s];
+      id t = oe / 3;
+      id le = oe % 3;
+      vec3 N = triangleNormal(points[triangles[t][0]],points[triangles[t][1]],points[triangles[t][2]]);
+      if (s == 1 && dot(prevN,N) < 0.)  N = -1. * N;
+      prevN = N;
+      // N = {0,0,1};
+      vec3 e_y = cross(N,e_x);
+      if (maxAbs(e_y) == 0.) {
+        Msg::Error("length(e_y) = {}", length(e_y));
+        return false;
+      }
+      normalize(e_y);
+
+      for (size_t k = 0; k < 2; ++k) { /* two other edges in triangle t */
+        id aoe = 3*t+(le+1+k)%3;
+        id ae = old2IEdge[aoe];
+        id2 aedge = uIEdges[ae];
+
+        bvars[2*s+k] = ae;
+        vec3 edg = points[aedge[1]]-points[aedge[0]];
+        double len = length(edg);
+        if (len < EPS) {
+          Msg::Error("edge too small: t=%li, k = %li, edge=%li, length = %e", t, k, aedge, len);
+          return false;
+        }
+        edg = (1./len) * edg;
+
+        /* 360deg angle (used for the angle rotation) */
+        double cx = dot(edg,e_x);
+        double cy = dot(edg,e_y);
+        alpha[2*s+k] = atan2(cy,cx);
+        if (alpha[2*s+k] < 0.) alpha[2*s+k] += 2.*M_PI;
+
+        /* 180deg edge-edge angle (used for the Crouzeix Raviart) */
+        double agl = 0.;
+        if (aedge[0] == v1) {
+          agl = angleVectorsAlreadyNormalized(edg,e_x);
+        } else if (aedge[1] == v1) {
+          agl = angleVectorsAlreadyNormalized(edg, -1. * e_x);
+        } else if (aedge[0] == v2) {
+          agl = angleVectorsAlreadyNormalized(-1. * edg, e_x);
+        } else if (aedge[1] == v2) {
+          agl = angleVectorsAlreadyNormalized(-1. * edg, -1. * e_x);
+        } else {
+          Msg::Error("should not happen");
+          return false;
+        }
+        CR_weight[2*s+k] = -2. / tan(agl);
+      }
+    }
+    /* compute coefficients */
+    double isum = -1. * (CR_weight[0] + CR_weight[1] + CR_weight[2] + CR_weight[3]);
+    for (size_t k = 0; k < 4; ++k)
+      CR_weight[k] = CR_weight[k] / isum;
+
+    iv.clear();
+    ijv.clear();
+    id x_i = 2*e;
+    id y_i = 2*e+1;
+    iv.push_back({x_i,1.});
+    iv.push_back({y_i,1.});
+    double Nd = double(N);
+    for (size_t j = 0; j < 4; ++j) {
+      id x_j = 2*bvars[j];
+      id y_j = 2*bvars[j]+1;
+      ijv.push_back({{x_i,x_j},CR_weight[j]    *cos(Nd*alpha[j])});
+      ijv.push_back({{x_i,y_j},CR_weight[j]*-1.*sin(Nd*alpha[j])});
+      ijv.push_back({{y_i,x_j},CR_weight[j]    *sin(Nd*alpha[j])});
+      ijv.push_back({{y_i,y_j},CR_weight[j]    *cos(Nd*alpha[j])});
+    }
+
+    return true;
+  }
+
+  bool prepare_system(
+      const vector<IV>& K_diag,
+      const vector<IJV>& K_coefs,
+      vector<vector<size_t>>& columns,
+      vector<vector<double>>& values) {
+    vector<IJV> coefs = K_coefs;
+    coefs.resize(coefs.size()+K_diag.size());
+    for (size_t i = 0; i < K_diag.size(); ++i) {
+      coefs[K_coefs.size()+i] = {{id(K_diag[i].i),id(K_diag[i].i)},K_diag[i].val};
+    }
+    std::sort(coefs.begin(),coefs.end());
+
+    size_t cur_i = coefs[0].ij[0];
+    size_t cur_j = coefs[0].ij[1];
+    double acc_val = coefs[0].val;
+    for (size_t k = 1; k < coefs.size(); ++k) {
+      id i = coefs[k].ij[0];
+      id j = coefs[k].ij[1];
+      double v = coefs[k].val;
+      if (i != cur_i) {
+        if (std::abs(acc_val) > EPS) {
+          columns[cur_i].push_back(cur_j);
+          values[cur_i].push_back(acc_val);
+        }
+        cur_i = i;
+        acc_val = v;
+        cur_j = j;
+      } else if (j != cur_j) {
+        if (std::abs(acc_val) > EPS) {
+          columns[cur_i].push_back(cur_j);
+          values[cur_i].push_back(acc_val);
+        }
+        cur_i = i;
+        acc_val = v;
+        cur_j = j;
+      } else {
+        acc_val += v;
+      }
+    }
+    if (std::abs(acc_val) > EPS) {
+      columns[cur_i].push_back(cur_j);
+      values[cur_i].push_back(acc_val);
+    }
+
+    return true;
+  }
+
+
+  bool expand_dirichlet_boundary_conditions(
+      int N,
+      const std::vector<std::array<double,3> >& points,
+      const std::vector<std::array<id,3> >& triangles,
+      const vector<id2>& uIEdges,
+      const vector<id>& old2IEdge,
+      const vector<vector<id>>& uIEdgeToOld,
+      size_t nb_layers,
+      vector<bool>& dirichletEdge,
+      vector<vec2>& dirichletValue,
+      int verbosity) {
+    /* Look for expanded BC edges */
+    vector<bool> extDirichletEdge = dirichletEdge;
+    vector<id> new_edges;
+    for (size_t layer = 0; layer < nb_layers; ++layer) {
+      for (size_t e = 0; e < uIEdges.size(); ++e) if (extDirichletEdge[e]) {
+        for (size_t i = 0; i < uIEdgeToOld[e].size(); ++i) {
+          id t = uIEdgeToOld[e][i] / 3;
+          for (size_t le = 0; le < 3; ++le) {
+            id oe2 = 3*t+le;
+            id e2 = old2IEdge[oe2];
+            if (!extDirichletEdge[e2]) {
+              new_edges.push_back(e2);
+            }
+          }
+        }
+      }
+      sort_unique(new_edges);
+      for (size_t i = 0; i < new_edges.size(); ++i)  {
+        extDirichletEdge[new_edges[i]] = true;
+      }
+    }
+    if (new_edges.size() == 0) {
+      if (verbosity >= 2)
+        Msg::Warning("no new edges to expand dirichlet boundary conditions");
+      return false;
+    }
+
+    if (verbosity >= 2)
+      Msg::Info("Dirichlet B.C. expansion: added %li edges (for %li layers)", new_edges.size(), nb_layers);
+
+    /* Small system for BC expansion */
+    vector<IJV> K_coefs;
+    for (size_t k = 0; k < new_edges.size(); ++k)  {
+      id e = new_edges[k];
+      vector<IV> iv;
+      vector<IJV> ijv;
+      bool oks = stiffness_coefficient(N, points, triangles, e, uIEdges, old2IEdge, uIEdgeToOld, iv, ijv);
+      if (!oks || iv.size() != 2 || iv[0].i != 2*e || iv[1].i != 2*e+1) {
+        Msg::Error("failed to get stiffness coefficients for edge e = %li", e);
+        return false;
+      }
+      /* Add coefficients for interaction i-j of edges in extDirichletEdge */
+      for (size_t l = 0; l < ijv.size(); ++l) if (extDirichletEdge[ijv[l].ij[1]/2]) {
+        K_coefs.push_back(ijv[l]);
+      }
+    }
+    vector<IV> K_diag;
+    vector<vector<size_t>> A_col(2*uIEdges.size());
+    vector<vector<double>> A_coef(2*uIEdges.size());
+    bool okp = prepare_system(K_diag, K_coefs, A_col, A_coef);
+    if (!okp) {
+      Msg::Error("failed to prepare system");
+      return false;
+    }
+
+    /* Explicit solver (local smoothing) */
+    for (size_t e = 0; e < uIEdges.size(); ++e) if (extDirichletEdge[e] && !dirichletEdge[e]) {
+      dirichletValue[e] = {0.,0.};
+    }
+    for (size_t iter = 0; iter < 10*nb_layers; ++iter) {
+      for (size_t e = 0; e < uIEdges.size(); ++e) if (extDirichletEdge[e] && !dirichletEdge[e]) {
+        for (size_t d = 0; d < 2; ++d) {
+          id i = 2*e+d;
+          dirichletValue[e][d] = 0.;
+          for (size_t l = 0; l < A_col[i].size(); ++l) {
+            id j = A_col[i][l];
+            if (!extDirichletEdge[j/2]) continue;
+            double w = A_coef[i][l];
+            dirichletValue[e][d] += -1. * w * dirichletValue[j/2][j%2];
+          }
+        }
+        double n2 = length(dirichletValue[e]);
+        if (n2 < EPS) {
+          continue;
+        }
+        dirichletValue[e][0] /= n2;
+        dirichletValue[e][1] /= n2;
+      }
+    }
+
+    /* Set expanded edges as Dirichlet edges */
+    for (size_t e = 0; e < uIEdges.size(); ++e) if (extDirichletEdge[e]
+        && !dirichletEdge[e] && length(dirichletValue[e]) > EPS) {
+      dirichletEdge[e] = true;
+    }
+
+    return true;
+  }
+
+  bool compute_cross_field_with_multilevel_diffusion(
+      int N,
+      const std::vector<std::array<double,3> >& points,
+      const std::vector<std::array<id,2> >& lines,
+      const std::vector<std::array<id,3> >& triangles,
+      std::vector<std::array<double,3> >& triEdgeTheta,
+      int nbDiffusionLevels,
+      double thresholdNormConvergence,
+      int nbBoundaryExtensionLayer,
+      int verbosity) {
+    if (N != 4 && N != 6) return false;
+
+    /* Build unique edges and association with adjacent triangles,
+     * including the non-manifold cases */
+    vector<id2> uIEdges;
+    vector<id> old2IEdge;
+    vector<vector<id>> uIEdgeToOld;
+    std::vector<sid3> triangle_neighbors;
+    std::vector<std::vector<id>> nm_triangle_neighbors;
+    bool oka = compute_triangle_adjacencies(triangles, triangle_neighbors, nm_triangle_neighbors, uIEdges, old2IEdge, uIEdgeToOld);
+    if (!oka) {
+      Msg::Error("failed to compute mesh adjacencies");
+      return false;
+    }
+
+    /* Bbox diagonal is used later to specify the diffusion length */
+    double diag = bboxDiag(points);
+    if (verbosity > 0)
+      Msg::Info("Heat-based cross field computation, input: %li points, %li lines, %li triangles, %li internal edges, bbox diag = %li", points.size(),lines.size(),triangles.size(),uIEdges.size(), diag);
+
+    if (uIEdges.size() == 0) {
+      Msg::Error("no internal edges");
+      return false;
+    }
+
+    /* System unknowns: cos(Nt),sin(Nt) for each edge */
+    vector<double> x(2*uIEdges.size(),0.);
+
+    /* Initial Dirichlet boundary conditions
+     * alignement of crosses with edges (relative angle = 0)
+     * theta_e = 0 => (cos4t/sin4t) = (1,0) */
+    size_t nbc = 0;
+    vector<bool> dirichletEdge(uIEdges.size(),false);
+    vector<vec2> dirichletValue(uIEdges.size(),{1.,0.});
+    for (size_t e = 0; e < uIEdges.size(); ++e) if (uIEdgeToOld[e].size() != 2) {
+      dirichletEdge[e] = true;
+      dirichletValue[e] = {1.,0.};
+      nbc += 1;
+    }
+    for (size_t l = 0; l < lines.size(); ++l) {
+      /* mark the lines as boundary conditions */
+      id2 edge = sorted(lines[l][0],lines[l][1]);
+      auto it = std::find(uIEdges.begin(),uIEdges.end(),edge);
+      if (it != uIEdges.end()) {
+        id e = id(it - uIEdges.begin());
+        dirichletEdge[e] = true;
+        dirichletValue[e] = {1.,0.};
+        nbc += 1;
+      }
+    }
+    if (verbosity >= 2)
+      Msg::Info("- boundary conditions: %li crosses fixed on edges", nbc);
+
+    if (nbBoundaryExtensionLayer > 0) {
+      bool oke = expand_dirichlet_boundary_conditions(N, points, triangles, uIEdges, old2IEdge, uIEdgeToOld, nbBoundaryExtensionLayer, dirichletEdge, dirichletValue, verbosity);
+      if (!oke) {
+        Msg::Warning("failed to expand dirichlet boundary conditions");
+      }
+      for (size_t e = 0; e < uIEdges.size(); ++e) {
+        x[2*e+0] = dirichletValue[e][0];
+        x[2*e+1] = dirichletValue[e][1];
+      }
+    }
+
+    if (verbosity >= 2)
+      Msg::Info("- compute stiffness matrix coefficients (Crouzeix-Raviart) ...");
+
+    vector<IV> K_diag;
+    vector<IJV> K_coefs;
+    vector<double> rhs(2*uIEdges.size(),0.);
+    vector<double> Mass(2*uIEdges.size(),1.); /* diagonal for Crouzeix-Raviart */
+    for (size_t e = 0; e < uIEdges.size(); ++e) {
+      if (!dirichletEdge[e]) {
+        vector<IV> iv;
+        vector<IJV> ijv;
+        bool oks = stiffness_coefficient(N, points, triangles, e, uIEdges, old2IEdge, uIEdgeToOld, iv, ijv);
+        if (!oks) {
+          Msg::Error("failed to compute stiffness matrix coefficients for e = %li", e);
+          return false;
+        }
+        for (size_t i = 0; i < iv.size(); ++i)
+          K_diag.push_back(iv[i]);
+        for (size_t i = 0; i < ijv.size(); ++i)
+          K_coefs.push_back(ijv[i]);
+        id t1 = uIEdgeToOld[e][0]/3;
+        id t2 = uIEdgeToOld[e][1]/3;
+        double area1 = triangleArea(points[triangles[t1][0]],points[triangles[t1][1]],points[triangles[t1][2]]);
+        double area2 = triangleArea(points[triangles[t2][0]],points[triangles[t2][1]],points[triangles[t2][2]]);
+        Mass[2*e+0] = 1./3 * (area1 + area2);
+        Mass[2*e+1] = 1./3 * (area1 + area2);
+      } else { /* Dirichlet BC */
+        K_diag.push_back({id(2*e+0),1.});
+        rhs[2*e+0] = dirichletValue[e][0];
+        K_diag.push_back({id(2*e+1),1.});
+        rhs[2*e+1] = dirichletValue[e][1];
+      }
+    }
+
+    double eavg = 0.;
+    double emin = DBL_MAX;
+    double emax = -DBL_MAX;
+    for (size_t e = 0; e < uIEdges.size(); ++e) {
+      double len = length(points[uIEdges[e][1]]-points[uIEdges[e][0]]);
+      eavg += len;
+      emin = std::min(len,emin);
+      emax = std::max(len,emax);
+    }
+    eavg /= uIEdges.size();
+
+    if (verbosity >= 2)
+      Msg::Info("- edge size: min=%.3f, avg=%.3f, max=%.3f | bbox diag: %.3f",emin,eavg,emax,diag);
+
+
+    /* prepare system */
+    vector<vector<size_t>> K_columns(2*uIEdges.size());
+    vector<vector<double>> K_values(2*uIEdges.size());
+    {
+      bool okp = prepare_system(K_diag, K_coefs, K_columns, K_values);
+      if (!okp) {
+        Msg::Error("failed to prepare system");
+        return false;
+      }
+    }
+
+    double dtInitial = (0.1*diag)*(0.1*diag);
+    double dtFinal = (3.*emin)*(3.*emin);
+
+    if (verbosity >= 1)
+      Msg::Info("- diffusion and projection loop (%li levels, %li unknowns, dt = %.3f .. %.3f) ...", nbDiffusionLevels, 2*uIEdges.size(),dtInitial, dtFinal);
+
+    double wti = TimeOfDay();
+    for (size_t e = 0; e < uIEdges.size(); ++e) {
+      x[2*e+0] = dirichletValue[e][0];
+      x[2*e+1] = dirichletValue[e][1];
+    }
+
+    vector<double> steps;
+    if (nbDiffusionLevels > 1) {
+      for (size_t i = 0; i < nbDiffusionLevels; ++i) {/* resolution transition */
+        double dt = dtInitial + (dtFinal-dtInitial) * double(i)/double(nbDiffusionLevels-1);
+        steps.push_back(dt);
+      }
+    } else {
+      steps.push_back(dtFinal);
+    }
+
+    {
+      /* Initialize system (I/dt + M^-1 * L) x_(i+1) = 1/dt * x_i     (Ax = B) */
+      vector<vector<size_t>> Acol = K_columns;
+      vector<vector<double>> Aval_add = K_values; /* to get sparsity pattern */
+      for (size_t i = 0; i < Aval_add.size(); ++i)
+        std::fill(Aval_add[i].begin(),Aval_add[i].end(),0.);
+      vector<double> B = x;
+      vector<double> norms(uIEdges.size(),0.);
+      vector<double> prevNorms = norms;
+
+      CrossFieldLinearSystem solver(2*uIEdges.size());
+
+      vector<double> diag_sum(2*uIEdges.size(), 0.);
+      for (size_t i = 0; i < Acol.size(); ++i) {
+        if (!dirichletEdge[i/2]) {
+          for (size_t j = 0; j < Acol[i].size(); ++j) {
+            Aval_add[i][j] = 1. / Mass[i] * K_values[i][j];
+          }
+        } else {
+          Aval_add[i] = {1.};
+        }
+      }
+      solver.add_sparse_coefficients(Acol, Aval_add, true);
+      for (size_t i = 0; i < Aval_add.size(); ++i) Aval_add[i].clear();
+      for (size_t i = 0; i < Acol.size(); ++i) Acol[i].clear();
+      bool okp = solver.preprocess_sparsity_pattern();
+      if (!okp) {
+        Msg::Error("linear solver analysis failed");
+        return false;
+      }
+
+      /* Loop over the changing timesteps */
+      double prev_dt = DBL_MAX;
+      for (int iter = 0; iter < steps.size(); ++iter) {
+        if (iter > 0 && steps[iter] > prev_dt) continue;
+        double dt = steps[iter];
+        prev_dt = dt;
+
+        if (verbosity >= 1)
+          Msg::Info("  - step %li/%li | dt = %.3f, linear system loop ...", iter+1, steps.size(), dt);
+
+        /* Update LHS matrix with the new timestep */
+        for (size_t i = 0; i < Acol.size(); ++i) {
+          if (!dirichletEdge[i/2]) {
+            Acol[i] = {i};
+            Aval_add[i] = {-diag_sum[i] + 1./dt};
+            diag_sum[i] = 1./dt;
+          }
+        }
+        bool oku = solver.add_sparse_coefficients(Acol, Aval_add, false);
+        if (!oku) {
+          Msg::Error("failed to update linear system");
+          return false;
+        }
+        solver.factorize();
+
+        /* Loop at fixed time step */
+        constexpr size_t subiter_max = 25;
+        for (size_t subiter = 0; subiter < subiter_max; ++subiter) {
+          prevNorms = norms;
+
+          /* Update RHS */
+          B = x;
+          for (size_t i = 0; i < B.size(); ++i) if (!dirichletEdge[i/2])
+            B[i] /= dt;
+          solver.set_rhs_values(B);
+
+          bool oks = solver.solve(x);
+          if (!oks) {
+            Msg::Error("failed to solve linear system");
+            return false;
+          }
+
+
+          /* Normalize cross field and gather norm stats */
+          double nmi = DBL_MAX;
+          double nma = -DBL_MAX;
+          for (size_t e = 0; e < uIEdges.size(); ++e) {
+            norms[e] = std::sqrt(x[2*e]*x[2*e]+x[2*e+1]*x[2*e+1]);
+            nmi = std::min(nmi,norms[e]);
+            nma = std::max(nma,norms[e]);
+            if (!dirichletEdge[e] && norms[e] > EPS) {
+              x[2*e+0] /= norms[e];
+              x[2*e+1] /= norms[e];
+            }
+          }
+          // Msg::Info("            |   norm, min = {}, max = {}", nmi, nma);
+          const double EPS_NORM = 1.e-1;
+          if (nma > 1. + EPS_NORM) {
+            steps[iter] /= 10;
+            dt = steps[iter];
+            iter -= 1;
+            if (verbosity >= 2)
+              Msg::Warning("           |   max(norm)=%.3f (should be 1.), solve failed, new time step: dt = %.3f", nma, dt);
+            break;
+          }
+          if (subiter > 0 || iter > 0) {
+            double linf = 0.;
+            for (size_t i = 0; i < norms.size(); ++i) if (!dirichletEdge[i]) {
+              linf = std::max(linf,norms[i]-prevNorms[i]);
+            }
+            if (verbosity >= 3)
+              Msg::Info("           |   system solved, norm diff max: %.3f, norm range: %.3f - %.3f", linf, nmi, nma);
+            if (linf < 1.e-3) break;
+          } else {
+            if (verbosity >= 3)
+              Msg::Info("           |   system solved");
+          }
+        }
+      }
+    }
+    double et = TimeOfDay() - wti;
+    if (verbosity >= 2)
+      Msg::Info("- cross field elapsed time: %.3f", et);
+
+
+    { /* Export solution */
+      triEdgeTheta.resize(triangles.size());
+      for (size_t t = 0; t < triangles.size(); ++t) {
+        for (size_t le = 0; le < 3; ++le) {
+          id e = old2IEdge[3*t+le];
+          double len = std::sqrt(x[2*e]*x[2*e]+x[2*e+1]*x[2*e+1]);
+          double theta = (len > EPS) ? 1./double(N)*atan2(x[2*e+1]/len,x[2*e]/len) : 0.;
+          triEdgeTheta[t][le] = theta;
+        }
+      }
+    }
+
+    return true;
+  }
+
+
+  inline SVector3 tri_normal(MTriangle* t) {
+    SVector3 v10(t->getVertex(1)->x() - t->getVertex(0)->x(),
+        t->getVertex(1)->y() - t->getVertex(0)->y(),
+        t->getVertex(1)->z() - t->getVertex(0)->z());
+    SVector3 v20(t->getVertex(2)->x() - t->getVertex(0)->x(),
+        t->getVertex(2)->y() - t->getVertex(0)->y(),
+        t->getVertex(2)->z() - t->getVertex(0)->z());
+    SVector3 normal_to_triangle = crossprod(v20, v10);
+    normal_to_triangle.normalize();
+    return normal_to_triangle;
+  }
+
+  inline SVector3 crouzeix_raviart_interpolation(SVector3 lambda, SVector3 edge_values[3]) {
+    double x = lambda[1];
+    double y = lambda[2];
+    SVector3 shape = {1.0 - 2.0 * y, -1.0 + 2.0 * (x + y), 1.0 - 2.0 * x};
+    return shape[0] * edge_values[0] + shape[1] * edge_values[1] + shape[2] * edge_values[2];
+  }
+
+  int local_frame(const MVertex* v, const std::vector<MTriangle*>& tris,
+      SVector3& e_x, SVector3& e_y, SVector3& e_z) {
+    e_x = SVector3(DBL_MAX,DBL_MAX,DBL_MAX);
+    SVector3 avg(0.,0.,0.);
+    for (MTriangle* t: tris) {
+      avg += tri_normal(t);
+      if (e_x.x() == DBL_MAX) {
+        for (size_t le = 0; le < 3; ++le) {
+          MVertex* v1 = t->getVertex(le);
+          MVertex* v2 = t->getVertex((le+1)%3);
+          if (v1 == v) {
+            e_x = v2->point() - v1->point();
+            break;
+          } else if (v2 == v) {
+            e_x = v1->point() - v2->point();
+            break;
+          }
+        }
+      }
+    }
+    if (avg.norm() < 1.e-16) {
+      Msg::Error("local frame for %li triangles: avg normal = %.2f, %.2f, %.2f",
+          tris.size(), avg.x(), avg.y(), avg.z());
+      return -1;
+    }
+    if (e_x.norm() < 1.e-16) {
+      Msg::Error("local frame for %li triangles: e_x = %.2f, %.2f, %.2f",
+          tris.size(), e_x.x(), e_x.y(), e_x.z());
+      return -1;
+    }
+    e_x.normalize();
+    avg.normalize();
+    e_z = avg;
+    e_y = crossprod(e_z,e_x);
+    if (e_y.norm() < 1.e-16) {
+      Msg::Error("local frame for %li triangles: e_y = %.2f, %.2f, %.2f",
+          tris.size(), e_y.x(), e_y.y(), e_y.z());
+      return -1;
+    }
+    e_y.normalize();
+
+    return 0;
+  }
+
+  int ordered_fan_around_vertex(const MVertex* v, const std::vector<MTriangle*>& tris,
+      std::vector<std::array<MVertex*,2> >& vPairs) {
+    vPairs.clear();
+    if (tris.size() < 3) return -1;
+
+    std::unordered_set<MTriangle*> done;
+    { /* Init */
+      MTriangle* t = tris[0];
+      for (size_t le = 0; le < 3; ++le) {
+        MVertex* v1 = t->getVertex(le);
+        MVertex* v2 = t->getVertex((le+1)%3);
+        if (v1 != v && v2 != v) {
+          vPairs.push_back({v1,v2});
+          done.insert(t);
+          break;
+        }
+      }
+    }
+
+    while (vPairs.back().back() != vPairs[0][0]) {
+      MVertex* last = vPairs.back().back();
+      /* Look for next edge connected to last */
+      bool found = false;
+      for (MTriangle* t: tris) {
+        if (done.find(t) != done.end()) continue;
+        for (size_t le = 0; le < 3; ++le) {
+          MVertex* v1 = t->getVertex(le);
+          MVertex* v2 = t->getVertex((le+1)%3);
+          if (v1 != v && v2 != v) {
+            if (v1 == last) {
+              vPairs.push_back({v1,v2});
+              done.insert(t);
+              found = true;
+              break;
+            } else if (v2 == last) {
+              vPairs.push_back({v2,v1});
+              done.insert(t);
+              found = true;
+              break;
+            }
+          }
+        }
+        if (found) break;
+      }
+      if (!found) {
+        Msg::Error("failed to order fan vertex pairs");
+        return -1;
+      }
+    }
+
+    return 0;
+  }
+}
+
+
+int computeCrossFieldWithHeatEquation(
+    int N,
+    const std::vector<MTriangle*>& triangles,
+    const std::vector<MLine*>& lines,
+    std::vector<std::array<double,3> >& triEdgeTheta,
+    int nbDiffusionLevels,
+    double thresholdNormConvergence,
+    int nbBoundaryExtensionLayer,
+    int verbosity) {
+
+  /* Build discrete mesh without reference to gmsh structures */
+  std::vector<std::array<double,3> > dpoints;
+  std::vector<std::array<QMT::id,2> > dlines;
+  std::vector<std::array<QMT::id,3> > dtriangles;
+  std::vector<QMT::id> old2new;
+  {
+    old2new.reserve(3*triangles.size());
+    dpoints.reserve(3*triangles.size());
+    dlines.reserve(lines.size());
+    dtriangles.reserve(triangles.size());
+
+    constexpr QMT::id X = std::numeric_limits<QMT::id>::max();
+
+    for (MLine* l: lines) {
+      std::array<QMT::id,2> line;
+      for (size_t lv = 0; lv < 2; ++lv) {
+        MVertex* v = l->getVertex(lv);
+        size_t num = v->getNum();
+        if (num >= old2new.size()) {
+          old2new.resize(num+1,X);
+        }
+        if (old2new[num] == X) {
+          old2new[num] = dpoints.size();
+          std::array<double,3> pt = {v->x(), v->y(), v->z()};
+          dpoints.push_back(pt);
+        }
+        line[lv] = old2new[num];
+      }
+      std::sort(line.begin(),line.end());
+      dlines.push_back(line);
+    }
+    for (MTriangle* t: triangles) {
+      std::array<QMT::id,3> tri;
+      for (size_t lv = 0; lv < 3; ++lv) {
+        MVertex* v = t->getVertex(lv);
+        size_t num = v->getNum();
+        if (num >= old2new.size()) {
+          old2new.resize(num+1,X);
+        }
+        if (old2new[num] == X) {
+          old2new[num] = dpoints.size();
+          std::array<double,3> pt = {v->x(), v->y(), v->z()};
+          dpoints.push_back(pt);
+        }
+        tri[lv] = old2new[num];
+      }
+      dtriangles.push_back(tri);
+    }
+  }
+
+
+  bool ok = QMT::compute_cross_field_with_multilevel_diffusion(N,
+      dpoints, dlines, dtriangles, triEdgeTheta,
+      nbDiffusionLevels, thresholdNormConvergence,nbBoundaryExtensionLayer,
+      verbosity);
+  return ok ? 0 : -1;
+}
+
+// inline double compat_orientation_extrinsic(
+//     int Ns,
+//     const SVector3 &o0,
+//     const SVector3 &n0,
+//     const SVector3 &o1,
+//     const SVector3 &n1,
+//     SVector3 &a1, SVector3 &b1)
+// {
+//   SVector3 t0 = crossprod(n0, o0);
+//   SVector3 t1 = crossprod(n1, o1);
+//   t0.normalize();
+//   t1.normalize();
+//   std::vector<SVector3> A(Ns);
+//   std::vector<SVector3> B(Ns);
+//   for (int i = 0; i < Ns; ++i) {
+//     double agl = double(i)/double(Ns) * 2. * M_PI;
+//     A[i] = o0 * cos(agl) + t0 * sin(agl);
+//     B[i] = o1 * cos(agl) + t1 * sin(agl);
+//   }
+//   double maxx = -1;
+//   size_t is = 0;
+//   size_t js = 0;
+//   for (int i = 0; i < Ns; ++i) {
+//     for (int j = 0; j < Ns; ++j) {
+//       const double xx = dot(A[i], B[j]);
+//       if(xx > maxx) {
+//         is = i;
+//         js = j;
+//         maxx = xx;
+//       }
+//     }
+//   }
+//   a1 = A[is];
+//   b1 = B[js];
+//   return maxx;
+// }
+//
+// inline void cross_normalize(int Ns, double &a)
+// {
+//   double D = 2. * M_PI / double(Ns);
+//   if(a < 0)
+//     while(a < 0) a += D;
+//   if(a >= D)
+//     while(a >= D) a -= D;
+// }
+//
+// inline double cross_lifting(int Ns, double _a, double a)
+// {
+//   double D = 2. * M_PI / double(Ns);
+//   if(fabs(_a - a) < fabs(_a - (a + D)) && fabs(_a - a) < fabs(_a - (a - D))) {
+//     return a;
+//   }
+//   else if(fabs(_a - (a + D)) < fabs(_a - a) &&
+//       fabs(_a - (a + D)) < fabs(_a - (a - D))) {
+//     return a + D;
+//   }
+//   else {
+//     return a - D;
+//   }
+//   return DBL_MAX;
+// }
+
+
+inline double compat_orientation_extrinsic(int Ns,
+    const SVector3 &o0,
+    const SVector3 &n0,
+    const SVector3 &o1,
+    const SVector3 &n1,
+    SVector3 &a1, SVector3 &b1)
+{
+  if (Ns != 4) return DBL_MAX;
+
+  SVector3 t0 = crossprod(n0, o0);
+  SVector3 t1 = crossprod(n1, o1);
+
+  const size_t permuts[8][2] = {{0, 0}, {1, 0}, {2, 0}, {3, 0},
+    {0, 1}, {1, 1}, {2, 1}, {3, 1}};
+  SVector3 A[4]{o0, t0, -o0, -t0};
+  SVector3 B[2]{o1, t1};
+
+  double maxx = -1;
+  int index = 0;
+  for(size_t i = 0; i < 8; i++) {
+    const double xx = dot(A[permuts[i][0]], B[permuts[i][1]]);
+    if(xx > maxx) {
+      index = i;
+      maxx = xx;
+    }
+  }
+  a1 = A[permuts[index][0]];
+  b1 = B[permuts[index][1]];
+  return maxx;
+}
+
+inline void cross_normalize(int Ns, double &a)
+{
+  if (Ns != 4) {
+    a = DBL_MAX;
+    return ;
+  }
+  double D = M_PI * .5;
+  if(a < 0)
+    while(a < 0) a += D;
+  if(a >= D)
+    while(a >= D) a -= D;
+}
+
+inline double cross_lifting(int Ns, double _a, double a)
+{
+  if (Ns != 4) return DBL_MAX;
+  double D = M_PI * .5;
+  if(fabs(_a - a) < fabs(_a - (a + D)) && fabs(_a - a) < fabs(_a - (a - D))) {
+    return a;
+  }
+  else if(fabs(_a - (a + D)) < fabs(_a - a) &&
+      fabs(_a - (a + D)) < fabs(_a - (a - D))) {
+    return a + D;
+  }
+  else {
+    return a - D;
+  }
+  return DBL_MAX;
+}
+
+
+int computeCrossFieldConformalScaling(
+    int Ns,
+    const std::vector<MTriangle*>& triangles,
+    const std::vector<std::array<double,3> >& triEdgeTheta,
+    std::unordered_map<MVertex*,double>& scaling)
+{
+#if defined(HAVE_SOLVER)
+  Msg::Debug("compute cross field scaling (N=%i, %li triangles) ...", Ns, triangles.size());
+  if (triangles.size() != triEdgeTheta.size()) {
+    Msg::Error("conformal scaling: incoherent number of elements in inputs");
+    return -1;
+  }
+
+#if defined(HAVE_PETSC)
+  Msg::Debug("- with PETSc solver");
+  linearSystemPETSc<double> *_lsys = new linearSystemPETSc<double>;
+#elif defined(HAVE_MUMPS)
+  Msg::Debug("- with MUMPS solver");
+  linearSystemMUMPS<double> *_lsys = new linearSystemMUMPS<double>;
+#elif defined(HAVE_EIGEN)
+  Msg::Debug("- with EIGEN solver");
+  linearSystemEigen<double> *_lsys = new linearSystemEigen<double>;
+#else
+  Msg::Debug("- with dense solver (slow, should not be used)");
+  linearSystemFull<double> *_lsys = new linearSystemFull<double>;
+#endif
+  dofManager<double> *myAssembler = new dofManager<double>(_lsys);
+
+  /* Vertex unknowns */
+  std::set<MVertex *, MVertexPtrLessThan> vs;
+  for (MTriangle* t: triangles) {
+    for(size_t k = 0; k < 3; k++) { vs.insert(t->getVertex(k)); }
+  }
+  for (MVertex* v: vs) myAssembler->numberVertex(v,0,1);
+
+  simpleFunction<double> ONE(1.0);
+  laplaceTerm l(0, 1, &ONE);
+
+  /* Collect gradient of theta (cross field directions) */
+  std::map<MTriangle *, SVector3> gradients_of_theta;
+  for (size_t i = 0; i < triangles.size(); ++i) {
+    MTriangle* t = triangles[i];
+
+    SVector3 v10(t->getVertex(1)->x() - t->getVertex(0)->x(),
+        t->getVertex(1)->y() - t->getVertex(0)->y(),
+        t->getVertex(1)->z() - t->getVertex(0)->z());
+    SVector3 v20(t->getVertex(2)->x() - t->getVertex(0)->x(),
+        t->getVertex(2)->y() - t->getVertex(0)->y(),
+        t->getVertex(2)->z() - t->getVertex(0)->z());
+    SVector3 normal_to_triangle = crossprod(v20, v10);
+    normal_to_triangle.normalize();
+
+    SElement se(t);
+    l.addToMatrix(*myAssembler, &se);
+
+    SVector3 t_i, o_i, o_1, o_2, tgt0;
+    for (size_t le = 0; le < 3; ++ le) {
+      /* Edge ordered lower index to largest */
+      std::array<MVertex*,2> edge = {t->getVertex(le),t->getVertex((le+1)%3)};
+      if (edge[0]->getNum() > edge[1]->getNum()) std::reverse(edge.begin(),edge.end());
+
+      /* Edge tangent */
+      SVector3 tgt = edge[1]->point() - edge[0]->point();
+      if (tgt.norm() < 1.e-16) {
+        Msg::Warning("Edge (tri=%i,le=%i), length = %.e", t->getNum(), le, tgt.norm());
+        if (tgt.norm() == 0.) {return -1;}
+      }
+      tgt.normalize();
+      SVector3 tgt2 = crossprod(normal_to_triangle,tgt);
+      tgt2.normalize();
+
+      /* Cross angle  (from Crouzeix-Raviart cross field) */
+      double A = triEdgeTheta[i][le];
+
+      SVector3 o = tgt * cos(A) + tgt2 * sin(A);
+      o.normalize();
+      o -= normal_to_triangle * dot(normal_to_triangle, o_i);
+      o.normalize();
+
+      if (le == 0) {
+        t_i = crossprod(normal_to_triangle, tgt);
+        t_i -= normal_to_triangle * dot(normal_to_triangle, t_i);
+        t_i.normalize();
+        o_i = o;
+        tgt0 = tgt;
+      } else if (le == 1) {
+        o_1 = o;
+      } else if (le == 2) {
+        o_2 = o;
+      }
+    }
+
+    SVector3 x0, x1, x2, x3;
+    compat_orientation_extrinsic(Ns, o_i, normal_to_triangle, o_1, normal_to_triangle, x0, x1);
+    compat_orientation_extrinsic(Ns, o_i, normal_to_triangle, o_2, normal_to_triangle, x2, x3);
+
+    double a0 = atan2(dot(t_i, o_i), dot(tgt0, o_i));
+
+    x0 -= normal_to_triangle * dot(normal_to_triangle, x0);
+    x0.normalize();
+    x1 -= normal_to_triangle * dot(normal_to_triangle, x1);
+    x1.normalize();
+    x2 -= normal_to_triangle * dot(normal_to_triangle, x2);
+    x2.normalize();
+    x3 -= normal_to_triangle * dot(normal_to_triangle, x3);
+    x3.normalize();
+
+    cross_normalize(Ns,a0);
+    double A1 = atan2(dot(t_i, x1), dot(tgt0, x1));
+    double A2 = atan2(dot(t_i, x3), dot(tgt0, x3));
+    cross_normalize(Ns,A1);
+    double a1 = cross_lifting(Ns,a0,A1);
+    cross_normalize(Ns,A2);
+    double a2 = cross_lifting(Ns,a0,A2);
+
+    double a[3] = {a0 + a2 - a1, a0 + a1 - a2, a1 + a2 - a0};
+    double g[3] = {0, 0, 0};
+    t->interpolateGrad(a, 0, 0, 0, g);
+    gradients_of_theta[t] = SVector3(g[0], g[1], g[2]);
+    SPoint3 pp = t->barycenter();
+
+    SVector3 G(g[0], g[1], g[2]);
+    SVector3 GT = crossprod(G, normal_to_triangle);
+
+    double g1[3];
+    a[0] = 1;
+    a[1] = 0;
+    a[2] = 0;
+    t->interpolateGrad(a, 0, 0, 0, g1);
+    double RHS1 = g1[0] * GT.x() + g1[1] * GT.y() + g1[2] * GT.z();
+    a[0] = 0;
+    a[1] = 1;
+    a[2] = 0;
+    t->interpolateGrad(a, 0, 0, 0, g1);
+    double RHS2 = g1[0] * GT.x() + g1[1] * GT.y() + g1[2] * GT.z();
+    a[0] = 0;
+    a[1] = 0;
+    a[2] = 1;
+    t->interpolateGrad(a, 0, 0, 0, g1);
+    double RHS3 = g1[0] * GT.x() + g1[1] * GT.y() + g1[2] * GT.z();
+    int num1 = myAssembler->getDofNumber(l.getLocalDofR(&se, 0));
+    int num2 = myAssembler->getDofNumber(l.getLocalDofR(&se, 1));
+    int num3 = myAssembler->getDofNumber(l.getLocalDofR(&se, 2));
+    double V = -t->getVolume();
+    _lsys->addToRightHandSide(num1, RHS1 * V);
+    _lsys->addToRightHandSide(num2, RHS2 * V);
+    _lsys->addToRightHandSide(num3, RHS3 * V);
+  }
+
+  int status = _lsys->systemSolve();
+
+  if (status == -1) { /* failed to solve */
+    Msg::Warning("conformal scaling (%li triangles, %li variables), failed to solve linear system, use uniform scaling",
+        triangles.size(), vs.size());
+    for (MVertex* v: vs) {
+      scaling[v] = 1.;
+    }
+    delete _lsys;
+    return 0;
+  }
+
+  /* Extract solution */
+  double sMin =  DBL_MAX;
+  double sMax = -DBL_MAX;
+  size_t i = 0;
+  for (MVertex* v: vs) {
+    double h;
+    myAssembler->getDofValue(v, 0, 1, h);
+    double cs = exp(-h);
+    scaling[v] = cs;
+    sMin = std::min(sMin,cs);
+    sMax = std::max(sMax,cs);
+    i += 1;
+  }
+  if (sMin == DBL_MAX || sMax == -DBL_MAX || sMin == 0.) {
+    Msg::Error("Conformal scaling computed (%d unknowns, %li triangles -> min=%.3f, max=%.3f), wrong",
+        myAssembler->sizeOfR(), triangles.size(), sMin, sMax);
+  } else {
+    Msg::Debug("Conformal scaling computed (%d unknowns, %li triangles -> min=%.3f, max=%.3f, width=%.3f)",
+        myAssembler->sizeOfR(), triangles.size(), sMin, sMax, sMax - sMin);
+  }
+
+  delete _lsys;
+
+  if (false) {
+    std::vector<MElement*> elts = dynamic_cast_vector<MTriangle*,MElement*>(triangles);
+    GeoLog::add(elts, scaling, "h=exp(-H)");
+    GeoLog::flush();
+  }
+
+#else
+  Msg::Error("Computing cross field scaling requires the SOLVER module");
+  return -1;
+#endif
+
+  return 0;
+}
+
+int computeQuadSizeMapFromCrossFieldConformalFactor(
+    const std::vector<MTriangle*>& triangles,
+    std::size_t targetNumberOfQuads,
+    std::unordered_map<MVertex*,double>& scaling) {
+
+  Msg::Debug("Offset quad size map from cross field conformal factor to target %li quads ...", targetNumberOfQuads);
+
+  if (targetNumberOfQuads == 0) {
+    Msg::Error("targetNumberOfQuads: %i should be positive", targetNumberOfQuads);
+    return -1;
+  }
+
+  double csMin =  DBL_MAX;
+  double csMax = -DBL_MAX;
+  double Hmin  =  DBL_MAX;
+  double Hmax  = -DBL_MAX;
+  size_t nWoCorner = 0;
+  for (MTriangle* t: triangles) {
+    for (size_t lv = 0; lv < 3; ++lv) {
+      MVertex* v = t->getVertex(lv);
+      auto it = scaling.find(v);
+      if (it == scaling.end()) {
+        Msg::Error("scaling not found for vertex %i", v->getNum());
+        return -1;
+      }
+      GVertex* gv = v->onWhat()->cast2Vertex();
+      if (gv != nullptr) continue; /* Remove corner values from range */
+      csMin = std::min(csMin, it->second);
+      csMax = std::max(csMax, it->second);
+      nWoCorner += 1;
+    }
+  }
+
+  if (nWoCorner > 0 && (csMin == DBL_MAX || csMax == -DBL_MAX)) {
+    Msg::Warning("conformal scaling is wrong, %li values, min=DBL_MAX or max=-DBL_MAX, filling with unit values", scaling.size(), csMin, csMax);
+    for (MTriangle* t: triangles) {
+      for (size_t lv = 0; lv < 3; ++lv) {
+        MVertex* v = t->getVertex(lv);
+        scaling[v] = 1.;
+      }
+    }
+  }
+
+  /* Compute integral of current size map */
+  double integral = 0.;
+  double smin = DBL_MAX;
+  double smax = -DBL_MAX;
+  std::vector<MVertex*> vertices;
+  vertices.reserve(3*triangles.size());
+  for (MTriangle* t: triangles) {
+    double values[3] = {0,0,0};
+    for (size_t lv = 0; lv < 3; ++lv) {
+      MVertex* v = t->getVertex(lv);
+      auto it = scaling.find(v);
+      if (it == scaling.end()) {
+        Msg::Error("scaling value not found for v=%li",v->getNum());
+        return -1;
+      }
+      /* Clamp with range without corners */
+      if (nWoCorner > 0 && (it->second < csMin || it->second > csMax)) {
+        it->second = clamp(it->second,csMin,csMax);
+      }
+      values[lv] = it->second;
+      smin = std::min(smin,values[lv]);
+      smax = std::max(smax,values[lv]);
+      vertices.push_back(v);
+    }
+    double a = std::abs(t->getVolume());
+    double avg = 1./3. * (values[0] + values[1] + values[2]);
+    if (avg == 0.) continue;
+    integral += a * 1. / std::pow(avg,2);
+  }
+
+  if (integral == 0.) {
+    Msg::Warning("Size map from conformal scaling: total integral is 0 ... (%li triangles, smin=%.3e, smax=%.3e)",
+        triangles.size(), smin, smax);
+    return -1;
+  }
+  Msg::Debug("- %li triangles, conformal scaling: min=%.3e, max=%.3e, #=%.3e",
+      triangles.size(), smin, smax, integral);
+  std::sort(vertices.begin(), vertices.end());
+  vertices.erase(std::unique(vertices.begin(), vertices.end() ), vertices.end());
+
+  /* Apply the scaling */
+  double target = double(targetNumberOfQuads);
+  double FAC = double(target) / integral;
+  double sf = 1./std::sqrt(FAC);
+  smin = DBL_MAX;
+  smax = -DBL_MAX;
+  for (size_t j = 0; j < vertices.size(); ++j) {
+    MVertex* v = vertices[j];
+    auto it = scaling.find(v);
+    it->second = sf * it->second;
+    smin = std::min(smin,it->second);
+    smax = std::max(smax,it->second);
+  }
+  Msg::Debug("- %li triangles, sizemap range: [%.3e, %.3e] (factor applied: %3f)", triangles.size(), smin, smax, FAC);
+
+  return 0;
+}
+
+int convertToPerTriangleCrossFieldDirections(
+    int Ns,
+    const std::vector<MTriangle*>& triangles,
+    const std::vector<std::array<double,3> >& triEdgeTheta,
+    std::vector<std::array<double,9> >& triangleDirections) {
+
+  triangleDirections.resize(triangles.size());
+
+  for (size_t f = 0; f < triangles.size(); ++f) {
+    MTriangle* t = triangles[f];
+
+    SVector3 N = QMT::tri_normal(t);
+
+    /* Compute one branch at triangle vertices */
+    SVector3 refCross = {0.,0.,0.};
+    SVector3 avgCross = {0.,0.,0.};
+    SVector3 lifted_dirs[3];
+    for (size_t le = 0; le < 3; ++le) {
+      /* Get cross angle */
+      std::array<MVertex*,2> edge = {t->getVertex(le),t->getVertex((le+1)%3)};
+      if (edge[0]->getNum() > edge[1]->getNum()) std::reverse(edge.begin(),edge.end());
+
+      double A = triEdgeTheta[f][le];
+
+      /* Local reference frame */
+      SVector3 tgt = edge[1]->point() - edge[0]->point();
+      if (tgt.norm() < 1.e-16) {
+        Msg::Warning("Edge (tri=%i,le=%i), length = %.e", t->getNum(), le, tgt.norm());
+        if (tgt.norm() == 0.) {return -1;}
+      }
+      tgt.normalize();
+      SVector3 tgt2 = crossprod(N,tgt);
+      tgt2.normalize();
+
+      SVector3 cross1 = tgt * cos(A) + tgt2 * sin(A);
+      cross1.normalize();
+
+      SVector3 cross2 = crossprod(N,cross1);
+      cross2.normalize();
+
+      if (le == 0) {
+        refCross = cross1;
+        avgCross = avgCross + cross1;
+        lifted_dirs[le] = refCross;
+      } else {
+        SVector3 closest = {0.,0.,0.};
+        double dotmax = -DBL_MAX;
+        for (int k = 0; k < Ns; ++k) {
+          double agl = A + double(k)/double(Ns) * 2. * M_PI;
+          SVector3 candidate = tgt * cos(agl) + tgt2 * sin(agl);
+          candidate.normalize();
+          if (dot(candidate,refCross) > dotmax) {
+            closest = candidate;
+            dotmax = dot(candidate,refCross);
+          }
+        }
+        // SVector3 candidates[4] = {cross1,-1.*cross1,cross2,-1.*cross2};
+        // SVector3 closest = {0.,0.,0.};
+        // double dotmax = -DBL_MAX;
+        // for (size_t k = 0; k < 4; ++k) {
+        //   if (dot(candidates[k],refCross) > dotmax) {
+        //     closest = candidates[k];
+        //     dotmax = dot(candidates[k],refCross);
+        //   }
+        // }
+        lifted_dirs[le] = closest;
+        avgCross = avgCross + closest;
+      }
+    }
+    SVector3 vertex_dirs[3];
+    std::array<double,9> tDirs;
+    for (size_t lv = 0; lv < 3; ++lv) {
+      SVector3 lambda = {0.,0.,0.};
+      lambda[lv] = 1.;
+      SVector3 dir = QMT::crouzeix_raviart_interpolation(lambda,lifted_dirs);
+      if (length2(dir) != 0.) dir.normalize();
+      for (size_t d = 0; d < 3; ++d) {
+        tDirs[3*lv+d] = dir.data()[d];
+      }
+    }
+    triangleDirections[f] = tDirs;
+  }
+
+  return 0;
+}
+
+inline double angle2PI(const SVector3& u, const SVector3& v, const SVector3& n) {
+  const double dp = dot(u,v);
+  const double tp = dot(n,crossprod(u,v));
+  double angle = atan2(tp,dp);
+  if (angle < 0) angle += 2. * M_PI;
+  return angle;
+}
+
+int detectCrossFieldSingularities(
+    int Ns,
+    const std::vector<MTriangle*>& triangles,
+    const std::vector<std::array<double,3> >& triEdgeTheta,
+    bool addSingularitiesAtAcuteCorners,
+    double thresholdInDeg,
+    std::vector<std::pair<SPoint3,int> >& singularities) {
+  singularities.clear();
+  if (triangles.size() != triEdgeTheta.size()) {
+    Msg::Error("detect cross field singularities: wrong inputs");
+    return -1;
+  }
+
+  /* Get interior vertices and adjacent triangles */
+  unordered_map<MVertex*,vector<MTriangle*> > v2t;
+
+  /* put edge angles here, maybe a bit slow ... */
+  unordered_map<MEdge,double,MEdgeHash,MEdgeEqual> edgeTheta;
+
+  for (size_t i = 0; i < triangles.size(); ++i) {
+    MTriangle* t = triangles[i];
+    for (size_t le = 0; le < 3; ++le) {
+      MVertex* v1 = t->getVertex(le);
+      MVertex* v2 = t->getVertex((le+1)%3);
+
+      MEdge edg(v1,v2);
+      edgeTheta[edg] = triEdgeTheta[i][le];
+
+      GFace* gf = dynamic_cast<GFace*>(v1->onWhat());
+      if (gf == nullptr) continue;
+      v2t[v1].push_back(t);
+    }
+  }
+
+  /* Compute index at each vertex (looking on the one rings) */
+  unordered_map<MVertex*,int> vertexIndex;
+  for (auto& kv: v2t) {
+    MVertex* v = kv.first;
+    const vector<MTriangle*>& tris = kv.second;
+
+    SVector3 e_x, e_y, N;
+    int st = QMT::local_frame(v, tris, e_x, e_y, N);
+    if (st != 0) {
+      Msg::Error("no local frame for v=%li", v->getNum());
+      continue;
+    }
+
+    std::vector<std::array<MVertex*,2> > vPairs;
+    int st2 = QMT::ordered_fan_around_vertex(v, tris, vPairs);
+    if (st2 != 0) {
+      Msg::Error("no ordered fan around v=%li", v->getNum());
+      continue;
+    }
+
+    double angle_deficit = 2.*M_PI;
+    std::vector<SVector3> rep_vectors(vPairs.size()); /* cross field representation vector in local frame (+e_x,+e_y) */
+    for (size_t j = 0; j < vPairs.size(); ++j) {
+      MVertex* v1 = vPairs[j][0];
+      MVertex* v2 = vPairs[j][1];
+      angle_deficit -= angle3Vertices(v1, v, v2); /* gaussian curvature */
+
+      SVector3 tgt;
+      if (v1->getNum() < v2->getNum()) {
+        tgt = v2->point() - v1->point();
+      } else {
+        tgt = v1->point() - v2->point();
+      }
+      tgt.normalize();
+      SVector3 tgt2 = crossprod(N,tgt);
+      tgt2.normalize();
+      std::array<size_t,2> vPair = {v1->getNum(),v2->getNum()};
+      if (vPair[1] < vPair[0]) vPair = {v2->getNum(),v1->getNum()};
+      MEdge query(v1,v2);
+      auto it = edgeTheta.find(query);
+      if (it == edgeTheta.end()) {
+        Msg::Error("Edge (%li,%li) not found in edgeTheta",vPair[0],vPair[1]);
+        return -1;
+      }
+      double A = it->second;
+
+      SVector3 branchInQuadrant;
+      bool found = false;
+      double dpmax = -DBL_MAX; size_t kmax = (size_t) -1;
+      for (size_t k = 0; k < Ns; ++k) { /* Loop over branches */
+        double agl = A + double(k)/double(Ns) * 2. * M_PI;
+        SVector3 branch = tgt * cos(agl) + tgt2 * sin(agl);
+        if (dot(branch,e_x) >= 0. && dot(branch,e_y) >= 0.) {
+          branchInQuadrant = branch;
+          found = true;
+          break;
+        }
+        double dp = dot(branch,SVector3(std::sqrt(2),std::sqrt(2),0.));
+        if (dp > dpmax) {dpmax = dp; kmax = k;}
+      }
+      if (!found && kmax != (size_t)-1 ) { /* if numerical errors */
+        double agl = A + double(kmax)/double(Ns) * 2. * M_PI;
+        branchInQuadrant = tgt * cos(agl) + tgt2 * sin(agl);
+      }
+
+      double theta = acos(dot(branchInQuadrant,e_x));
+      rep_vectors[j] = {cos(double(Ns)*theta),sin(double(Ns)*theta),0.};
+    }
+    double sum_diff = 0.;
+    for (size_t j = 0; j < vPairs.size(); ++j) {
+      SVector3 vertical(0.,0.,1.);
+      const SVector3 r1 = rep_vectors[j];
+      const SVector3 r2 = rep_vectors[(j+1)%rep_vectors.size()];
+      double diff_angle = angle2PI(r1,r2,vertical);
+      if (diff_angle > M_PI) diff_angle -= 2.*M_PI;
+      sum_diff += diff_angle;
+    }
+    if (std::abs(sum_diff-2*M_PI) < 0.05*M_PI) {
+      vertexIndex[v] = -1;
+    } else if (std::abs(sum_diff+2*M_PI) < 0.05*M_PI) {
+      vertexIndex[v] = 1;
+    } else if (std::abs(sum_diff) > 0.05 * M_PI) {
+      Msg::Debug("singularity detection, v=%i, sum of diff is %.3f deg, ignored", v->getNum(), sum_diff);
+    }
+  }
+
+  /* Three types of singularities with Crouzeix-Raviart interpolation:
+   * - on vertex
+   * - on edge
+   * - on triangle */
+
+  /* triangle singularities */
+  for (MTriangle* t: triangles) {
+    MVertex* v1 = t->getVertex(0);
+    MVertex* v2 = t->getVertex(1);
+    MVertex* v3 = t->getVertex(2);
+    for (double index: {-1.,1.}) {
+      if (vertexIndex[v1] == index
+          && vertexIndex[v2] == index
+          && vertexIndex[v3] == index) {
+        SPoint3 p = (v1->point()+v2->point()+v3->point()) * double(1./3.);
+        singularities.push_back({p,index});
+        /* remove from list of available singularities */
+        vertexIndex[v1] = 0.;
+        vertexIndex[v2] = 0.;
+        vertexIndex[v3] = 0.;
+      }
+    }
+  }
+  /* edge singularities */
+  for (MTriangle* t: triangles) {
+    for (size_t le = 0; le < 3; ++le) {
+      MVertex* v1 = t->getVertex(le);
+      MVertex* v2 = t->getVertex((le+1)%3);
+      for (double index: {-1.,1.}) {
+        if (vertexIndex[v1] == index
+            && vertexIndex[v2] == index) {
+          SPoint3 p = (v1->point()+v2->point()) * 0.5;
+          singularities.push_back({p,index});
+          /* remove from list of available singularities */
+          vertexIndex[v1] = 0.;
+          vertexIndex[v2] = 0.;
+        }
+      }
+    }
+  }
+  /* vertex singularities */
+  for (auto& kv: vertexIndex) if (kv.second != 0) {
+    singularities.push_back({kv.first->point(),kv.second});
+  }
+
+  Msg::Debug("detect cross field singularities: found %li singularities (%li triangles)",
+      singularities.size(), triangles.size());
+
+  if (addSingularitiesAtAcuteCorners) {
+    size_t nb = singularities.size();
+    unordered_map<MVertex*, double> cornerAngle;
+    unordered_map<MVertex*, std::vector<MTriangle*> > cornerToTris;
+    for (MTriangle* t: triangles) {
+      for (size_t le = 0; le < 3; ++le) {
+        MVertex* v2 = t->getVertex((le+1)%3);
+        if (v2->onWhat()->cast2Vertex() != NULL) {
+          MVertex* v1 = t->getVertex(le);
+          MVertex* v3 = t->getVertex((le+2)%3);
+          double agl = std::abs(angle3Vertices(v1,v2,v3));
+          cornerAngle[v2] += agl;
+          cornerToTris[v2].push_back(t);
+        }
+      }
+    }
+    for (const auto& kv: cornerAngle) {
+      MVertex* v = kv.first;
+      double agl = kv.second;
+      if (agl * 180. / M_PI < thresholdInDeg)  {
+        std::vector<MTriangle*>& tris = cornerToTris[v];
+        if (tris.size() == 0) continue;
+        SPoint3 p(0.,0.,0.);
+        for (MTriangle* t: tris) {
+          p += t->barycenter();
+        }
+        p = p * double(1./double(tris.size()));
+        singularities.push_back({p,1});
+      }
+    }
+    if (singularities.size() > nb) {
+      Msg::Debug("detect cross field singularities: added %li artificial singularities at acute corners",
+          singularities.size()-nb);
+    }
+  }
+
+  return 0;
+}
diff --git a/contrib/QuadMeshingTools/qmtCrossField.h b/contrib/QuadMeshingTools/qmtCrossField.h
new file mode 100644
index 0000000000000000000000000000000000000000..70aac6a0a73a6e6711be02802a9ae2e0e7c5dfd4
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtCrossField.h
@@ -0,0 +1,133 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <utility>
+#include "SPoint3.h"
+
+class MVertex;
+class MTriangle;
+class MLine;
+class GFace;
+
+/**
+ * @brief Compute a smooth boundary-aligned cross field by alternating
+ *        heat diffusion and projection (also called the MBO method).
+ *        The crosses are aligned with the lines.
+ *        The crosses are sampled on the mesh edges (Crouzeix-Raviart)
+ *        and are represented by the angle of one of the branch with the
+ *        edge. Returned values are copied on the triangle for ease of
+ *        use in other methods.
+ *
+ * @param[in] N symmetry invariance, N=4 for crosses, N=6 for asterisks
+ * @param[in] triangles Triangulation used for the Crouzeix-Raviart computation, must be connected
+ * @param[in] lines Boundary conditions (cross aligned, theta angle is 0), must be non-empty
+ * @param[out] triEdgeTheta The cross field, one angle (in radians) per triangle edge. 
+ *             It is the relative angle between the edge and one branch of the cross.
+ *             i.e.: branch = cos(theta)*edge_tangent+sin(theta)*edge_ortho
+ * @param[in] nbDiffusionLevels Number of diffusion levels in the MBO algo. 
+ * @param[in] thresholdNormConvergence Converence criteria inside each level
+ * @param[in] nbBoundaryExtensionLayer Extend the Dirichlet BCs inside (on X layers) 
+ *            to push singularities inside the faces.
+ * @param[in] verbosity 0: no log (except errors), 1: two lines, 2: one per level, 3+: details
+ *
+ * @return 0 if success
+ */
+int computeCrossFieldWithHeatEquation(
+    int N,
+    const std::vector<MTriangle*>& triangles, 
+    const std::vector<MLine*>& lines, 
+    std::vector<std::array<double,3> >& triEdgeTheta, 
+    int nbDiffusionLevels = 5, 
+    double thresholdNormConvergence = 1.e-3, 
+    int nbBoundaryExtensionLayer = 1,
+    int verbosity = 1);
+
+/**
+ * @brief Compute the cross field conformal scaling by canceling the Lie bracket,
+ *        in a least square sense (singularities are not used).
+ *        The scaling defines the "intrinsic" cross field size map (up to a constant).
+ *
+ * @param[in] N symmetry invariance, N=4 for crosses, N=6 for asterisks
+ * @param[in] triangles Triangulation used to compute the cross field, and use to compute the scaling
+ * @param[in] triEdgeTheta The cross field, one angle per triangle edge, relative to the edge direction
+ *                     should be compatible with the result of computeCrossFieldWithHeatEquation()
+ * @param[out] scaling The conformal scaling, scalar field with one value per vertex (P1 FEM)
+ *
+ * @return 0 if success
+ */
+int computeCrossFieldConformalScaling(
+    int N,
+    const std::vector<MTriangle*>& triangles, 
+    const std::vector<std::array<double,3> >& triEdgeTheta, 
+    std::unordered_map<MVertex*,double>& scaling);
+
+
+/**
+ * @brief Compute a size map from the conformal scaling by adding an offset
+ *        to get targetNumberOfQuads in the end (when integrating the sizemap).
+ *
+ * @param triangles Triangulation used to compute the conformal scaling
+ * @param targetNumberOfQuads The number of quads used to offset the scaling
+ * @param[in,out] scaling The size map to update with the offset
+ *
+ * @return 0 if success
+ */
+int computeQuadSizeMapFromCrossFieldConformalFactor(
+    const std::vector<MTriangle*>& triangles, 
+    std::size_t targetNumberOfQuads, 
+    std::unordered_map<MVertex*,double>& scaling);
+
+
+/**
+ * @brief Convert the edge-sampled cross field to a triangle-sampled cross field,
+ *        by using Crouzeix-Raviart interpolation.
+ *        Each triangle has 3 unit directions at its corner. This cross field is (slighly)
+ *        dicontinuous at triangle interfaces.
+ *
+ * @param[in] N symmetry invariance, N=4 for crosses, N=6 for asterisks
+ * @param[in] triangles Triangulation used to compute cross field and size map
+ * @param[in] triEdgeTheta The cross field, one angle per triangle edge, relative to the edge direction
+ *                     should be compatible with the result of computeCrossFieldWithHeatEquation()
+ * @param[out] triangleDirections The cross field sampled at triangle corners, three vectors 
+ *             per triangle (one per corner).  component ordering: [v1x,v1y,v1z,.., v3x,v3y,v3z]
+ *
+ * @return 0 if success
+ */
+int convertToPerTriangleCrossFieldDirections(
+    int N,
+    const std::vector<MTriangle*>& triangles, 
+    const std::vector<std::array<double,3> >& triEdgeTheta, 
+    std::vector<std::array<double,9> >& triangleDirections);
+
+/**
+ * @brief Detect the singularities in a cross field by adding angle differences around
+ *        vertex one-rings
+ *
+ * @param[in] N symmetry invariance, N=4 for crosses, N=6 for asterisks
+ * @param[in] triangles Triangulation used to compute cross field and size map
+ * @param[in] triEdgeTheta The cross field, one angle per triangle edge, relative to the edge direction
+ *                     should be compatible with the result of computeCrossFieldWithHeatEquation()
+ * @param[in] addSingularitiesAtAcuteCorners If true, at singularity at corners whose angle is small
+ * @param[in] thresholdInDeg Corners are considered acute if inferior to this threshold, e.g. 30 (degrees)
+ * @param[out] singularities Cross field singularities, position and index (-1 for valence 5, 
+ *                           +1 for valence 3)
+ *
+ * @return 0 if success
+ */
+int detectCrossFieldSingularities(
+    int N,
+    const std::vector<MTriangle*>& triangles, 
+    const std::vector<std::array<double,3> >& triEdgeTheta, 
+    bool addSingularitiesAtAcuteCorners,
+    double thresholdInDeg,
+    std::vector<std::pair<SPoint3,int> >& singularities);
+
diff --git a/contrib/QuadMeshingTools/qmtCurveQuantization.cpp b/contrib/QuadMeshingTools/qmtCurveQuantization.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3357c83336c23e0eb0b92917eaa7eccf11430c69
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtCurveQuantization.cpp
@@ -0,0 +1,493 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtSizeMap.h"
+
+/* System includes */
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <cstdint>
+#include <cmath>
+#include <queue>
+#include <algorithm>
+
+/* Gmsh includes */
+#include "Context.h"
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MTriangle.h"
+#include "meshGEdge.h"
+#include "BackgroundMesh.h"
+#include "gmsh.h" // debug
+
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "arrayGeometry.h"
+#include "geolog.h"
+
+using namespace CppUtils;
+using namespace ArrayGeometry;
+
+using std::vector;
+using std::pair;
+using std::unordered_map;
+
+namespace QMT {
+  constexpr int UNASSIGNED = -1;
+  constexpr int START = -2;
+
+
+  vec3 gedgeCenter(GEdge* ge) {
+    double t = 0.5*(ge->parBounds(0).low() + ge->parBounds(0).high());
+    GPoint p = ge->point(t);
+    return {p.x(),p.y(),p.z()};
+  }
+
+  /* See Campen et al. 2015 */
+  inline double quantization_weigth(const int node, const vector<double>& x_ideal, const vector<int>& n) {
+    const size_t Ne = n.size();
+    double current = (n[node] == UNASSIGNED) ? 0. : double(n[node]);
+    const double dp = x_ideal[node] - current;
+    if (1. <= dp) {
+      return 1./ (dp+1.);
+    } else if (0. <= dp && dp < 1.) {
+      return Ne / (dp+1.);
+    } else if (dp < 0.) {
+      return Ne*Ne / (1.-dp);
+    }
+    return DBL_MAX;
+  }
+
+  bool DBGPRINT = false;
+
+  bool tchordPropagation(
+      const vector<vector<vector<int> > >& node2side2nodes,
+      int nodeInit,
+      const vector<int>& n,
+      const vector<double>& x_ideal,
+      vector<int>& tchord) {
+
+
+    std::vector<int> parent(node2side2nodes.size(),UNASSIGNED);
+    std::vector<int> initialSide(node2side2nodes.size(),UNASSIGNED);
+
+    std::priority_queue<std::pair<double,int>, std::vector<std::pair<double,int> > > Q;
+    parent[nodeInit] = START;
+    Q.push({DBL_MAX,nodeInit});
+
+    std::vector<int> initialSideEnding(node2side2nodes[nodeInit].size(),UNASSIGNED);
+    if (initialSideEnding.size() == 0 || initialSideEnding.size() > 2) {
+      Msg::Error("wrong number of initial sides: %li", initialSideEnding.size());
+      return false;
+    }
+
+    while (Q.size() > 0) {
+      int node = Q.top().second;
+      Q.pop();
+      int parentNode = parent[node];
+      if (parentNode == UNASSIGNED) {
+        Msg::Error("parent not defined for node, should not happen");
+        return false;
+      }
+
+      int currentInitialSide = initialSide[node];
+      if (currentInitialSide != UNASSIGNED && initialSideEnding[currentInitialSide] != UNASSIGNED) {
+        if (DBGPRINT) {
+          DBG(nodeInit, node, parentNode, currentInitialSide, "side finished, continue");
+        }
+        continue;
+      }
+      if (DBGPRINT) {
+        DBG(nodeInit, node, parentNode, currentInitialSide);
+      }
+
+
+      /* Propagate on side which is not the origin (i.e. contains the parent) */
+      bool prop = false;
+      for (size_t s = 0; s < node2side2nodes[node].size(); ++s) {
+        if (node == nodeInit) currentInitialSide = s; /* first time */
+
+        auto& sideNodes = node2side2nodes[node][s];
+
+        if (DBGPRINT) {
+          DBG(nodeInit, node, parentNode, currentInitialSide, s, sideNodes);
+        }
+
+        if (inVector(parentNode, sideNodes)) continue;
+
+        for (auto& node2: sideNodes) {
+          if (DBGPRINT) {
+            DBG("   ", node2, parent[node2]);
+          }
+          if (parent[node2] != UNASSIGNED) continue; /* already visited */
+          double w = quantization_weigth(node2, x_ideal, n);
+          parent[node2] = node;
+          initialSide[node2] = currentInitialSide;
+          Q.push({w,node2});
+          prop = true;
+          if (DBGPRINT) {
+            DBG("   +", node2, w);
+          }
+        }
+
+      }
+      if (!prop && currentInitialSide != UNASSIGNED
+          && initialSideEnding[currentInitialSide] == UNASSIGNED) {
+        initialSideEnding[currentInitialSide] = node;
+        if (DBGPRINT)   {
+          DBG(currentInitialSide, "end on", node);
+        }
+      }
+    }
+
+    /* Check endings of propagation */
+    if (DBGPRINT) {
+      DBG(initialSideEnding);
+    }
+    for (int& ending: initialSideEnding) if (ending == UNASSIGNED) {
+      if (DBGPRINT) {
+        DBG("return false");
+      }
+      return false;
+    }
+
+    /* Unroll sides */
+    tchord.clear();
+    for (int& ending: initialSideEnding) {
+      int node = ending;
+      while (node != START) {
+        tchord.push_back(node);
+        node = parent[node];
+      }
+    }
+    sort_unique(tchord);
+
+    return true;
+  }
+
+  bool solveQuantizationWithGreedyApproach(
+      const vector<pair<vector<GEdge*>,vector<GEdge*> > >& oppositeSides,
+      const unordered_map<GEdge*,double>& x_ideal,
+      unordered_map<GEdge*,int>& x) {
+
+    vector<pair<vector<int>,vector<int> > > oppositeSideTags(oppositeSides.size());;
+    for (size_t i = 0; i < oppositeSides.size(); ++i) {
+      for (size_t j = 0; j < oppositeSides[i].first.size(); ++j) {
+        oppositeSideTags[i].first.push_back(oppositeSides[i].first[j]->tag());
+      }
+      for (size_t j = 0; j < oppositeSides[i].second.size(); ++j) {
+        oppositeSideTags[i].second.push_back(oppositeSides[i].second[j]->tag());
+      }
+    }
+
+    int count = 0;
+    unordered_map<GEdge*,int> old2new;
+    vector<GEdge*> new2old;
+    for (auto& kv: oppositeSides) {
+      for (GEdge* ge: merge(kv.first,kv.second)) {
+        auto it = old2new.find(ge);
+        if (it == old2new.end()) {
+          old2new[ge] = count;
+          new2old.push_back(ge);
+          count += 1;
+        }
+      }
+    }
+
+    /* Build continuous data */
+    vector<double> c_x_ideal(count,0.);
+    for (auto& kv: x_ideal) {
+      c_x_ideal[old2new[kv.first]] = kv.second;
+    }
+
+    /* In the dual graph,
+     * - a GEdge is a node
+     * - the opposite GEdge in a GFace are edges */
+    vector<vector<vector<int> > > node2side2nodes(count);
+    for (auto& kv: oppositeSides) {
+      /* Create a new side for each node */
+      for (GEdge* ge: merge(kv.first,kv.second)) {
+        int node = old2new[ge];
+        node2side2nodes[node].resize(node2side2nodes[node].size()+1);
+      }
+
+      /* Fill the side with the opposite nodes */
+      for (GEdge* ge1: kv.first) {
+        int node1 = old2new[ge1];
+        for (GEdge* ge2: kv.second) {
+          int node2 = old2new[ge2];
+
+          node2side2nodes[node1].back().push_back(node2);
+          node2side2nodes[node2].back().push_back(node1);
+        }
+      }
+    }
+
+    /* Greedy assignement in the graph */
+    vector<int> n(count, UNASSIGNED);
+    vector<int> tchord;
+    int EXISTING_TRANSFINITE = 0;
+    int OTHERS = 1;
+    for (int pass: {EXISTING_TRANSFINITE,OTHERS}) {
+      /* Order the unassigned edges, shorter ideal length first */
+      std::priority_queue<std::pair<double,int>, std::vector<std::pair<double,int> >, std::greater<std::pair<double,int> > > Q;
+      if (pass == EXISTING_TRANSFINITE) {
+        for (int e0 = 0; e0 < count; ++e0) if (n[e0] == UNASSIGNED ) {
+          if (new2old[e0]->meshAttributes.method == MESH_TRANSFINITE) {
+            Q.push({c_x_ideal[e0],e0});
+          }
+        }
+      } else {
+        for (int e0 = 0; e0 < count; ++e0) if (n[e0] == UNASSIGNED ) {
+          Q.push({c_x_ideal[e0],e0});
+        }
+      }
+
+      while (Q.size() > 0) {
+        int e0 = Q.top().second;
+        Q.pop();
+        if (n[e0] != UNASSIGNED) continue;
+        tchord.clear();
+        bool ok = tchordPropagation(node2side2nodes, e0, n, c_x_ideal, tchord);
+        if (!ok || tchord.size() == 0) continue;
+
+        vector<int> nLinesImposedFromTransfinite;
+        double avgDiff = 0.;
+        double minDiff = DBL_MAX;
+        double maxDiff = 0.;
+        for (int e: tchord) {
+          double current = (n[e] == UNASSIGNED) ? 0. : double(n[e]);
+          avgDiff += (c_x_ideal[e]-current);
+          minDiff = std::min(minDiff,c_x_ideal[e]-current);
+          maxDiff = std::max(maxDiff,c_x_ideal[e]-current);
+          if (new2old[e]->meshAttributes.method == MESH_TRANSFINITE) {
+            nLinesImposedFromTransfinite.push_back(new2old[e]->meshAttributes.nbPointsTransfinite-1);
+          }
+        }
+        avgDiff /= double(tchord.size());
+        int increment = 0;
+        sort_unique(nLinesImposedFromTransfinite);
+        if (nLinesImposedFromTransfinite.size() == 1) {
+          increment = nLinesImposedFromTransfinite[0];
+        } else if (nLinesImposedFromTransfinite.size() > 1) {
+          Msg::Error("curve quantization: incoherent imposed transfinite constraints");
+          continue;
+        } else {
+          increment = int(std::round(minDiff));
+          if (increment <= 0.) increment = 1;
+        }
+        DBG(tchord, increment);
+        for (int e: tchord) {
+          if (n[e] == UNASSIGNED) {
+            n[e] = increment;
+          } else {
+            n[e] += increment;
+          }
+        }
+
+        // int e0tag = new2old[e0]->tag();
+        // vector<int> tchordTags;
+        // for (int a: tchord) tchordTags.push_back(new2old[a]->tag());
+        // DBG(e0tag, ok, tchordTags, avgDiff, increment);
+        // {
+        //   for (int a: tchord) {
+        //     vec3 pt = gedgeCenter(new2old[a]);
+        //     GeoLog::add({pt},0.,"chord_"+std::to_string(e0tag));
+        //   }
+        // }
+      }
+    }
+
+    GeoLog::flush();
+
+    DBG(c_x_ideal);
+    DBG(n);
+
+    for (size_t i = 0; i < n.size(); ++i) if (n[i] > 0){
+      x[new2old[i]] = n[i];
+    }
+
+    return true;
+  }
+}
+
+
+const std::string BMESH_NAME = "bmesh_quadqs";
+
+int initialCurveQuantization(GModel* gm, double maxDiffNbLines,
+    std::unordered_map<GFace*,vector<GVertex*> >& faceCorners
+    ) {
+  std::vector<GFace*> faces = model_faces(gm);
+  std::vector<GEdge*> edges = model_edges(gm);
+
+  Msg::Debug("initial curve quantization (%li curves) ...", edges.size());
+
+
+  /* Collect opposite sides in the CAD */
+  vector<pair<vector<GEdge*>,vector<GEdge*> > > oppositeSides;
+  std::unordered_map<GEdge*,double> x_ideal;
+
+  for (GFace* gf: faces) {
+    if (CTX::instance()->mesh.meshOnlyVisible && !gf->getVisibility()) continue;
+    if (CTX::instance()->debugSurface > 0 && gf->tag() != CTX::instance()->debugSurface) continue;
+
+    GFaceInfo info;
+    bool okf = fillGFaceInfo(gf, info);
+    if (!okf) {
+      Msg::Debug("initial curve quantization: no triangles available");
+      return -1;
+    }
+
+    std::vector<std::vector<std::vector<std::pair<GEdge*,bool> > > > loopSideEdgesAndInv;
+    bool oksl = faceOrderedSideLoops(gf, info, loopSideEdgesAndInv);
+    if (!oksl) {
+      Msg::Debug("initial curve quantization: failed to get face ordered side loops for face %i", gf->tag());
+      continue;
+    }
+
+    DBG(isTopologicalDisk(info),haveConcaveCorners(info),info.bdrValVertices[1].size());
+
+    /* Rectangular face with 4 convex corners */
+    if (isTopologicalDisk(info) && !haveConcaveCorners(info)
+        && info.bdrValVertices[1].size() == 4) {
+      vector<pair<vector<GEdge*>,vector<GEdge*> > > GFoppositeSides;
+      size_t NS = 0;
+      for (size_t k = 0; k < 2; ++k) { /* direction */
+        double len_a = 0.;
+        double len_b = 0.;
+        int nl_a = 0;
+        int nl_b = 0;
+        size_t Na = 0;
+        size_t Nb = 0;
+        vector<GEdge*> side_a;
+        vector<GEdge*> side_b;
+        for (auto& kv: loopSideEdgesAndInv[0][k]) {
+          GEdge* ge = kv.first;
+          len_a += ge->length();
+          int npts = meshGEdgeTargetNumberOfPoints(ge);
+          if (npts >= 2) {
+            nl_a += (npts-1);
+            auto it = x_ideal.find(ge);
+            if (it == x_ideal.end()) x_ideal[ge] = double(nl_a);
+          }
+          Na += 1;
+          side_a.push_back(ge);
+        }
+        for (auto& kv: loopSideEdgesAndInv[0][k+2]) {
+          GEdge* ge = kv.first;
+          len_b += ge->length();
+          int npts = meshGEdgeTargetNumberOfPoints(ge);
+          if (npts >= 2) {
+            nl_b += (npts-1);
+            auto it = x_ideal.find(ge);
+            if (it == x_ideal.end()) x_ideal[ge] = double(nl_b);
+          }
+          Nb += 1;
+          side_b.push_back(ge);
+        }
+
+        if (len_a == 0 || len_b == 0) continue;
+
+        /* Check the difference in terms of number of lines */
+        double nl_diff_rel = std::abs(double(nl_a-nl_b)) / (double(std::max(nl_a,nl_b)));
+        double len_diff_rel = std::abs(double(len_a-len_b)) / (double(std::max(len_a,len_b)));
+        if (nl_diff_rel <= maxDiffNbLines) {
+          /* Want equality on opposite sides */
+          GFoppositeSides.push_back({side_a,side_b});
+          NS += 1;
+        }
+      }
+
+      if (NS == 2) { /* transfinite face, both direction equal */
+        std::vector<GVertex*> corners;
+        for (size_t k = 0; k < 4; ++k) {
+          for (auto& kv: loopSideEdgesAndInv[0][k]) {
+            GEdge* ge = kv.first;
+            bool inv = kv.second;
+            GVertex* gv1 = inv ? ge->vertices()[1] : ge->vertices()[0];
+            bool isCorner1 = std::find( info.bdrValVertices[1].begin(), info.bdrValVertices[1].end(), gv1) !=
+              info.bdrValVertices[1].end();
+            if (isCorner1) {
+              corners.push_back(gv1);
+            }
+          }
+        }
+        if (corners.size() != 4) {
+          Msg::Debug("curve quantization: face %i, wrong number of corners", gf->tag());
+          continue;
+        }
+        append(oppositeSides,GFoppositeSides);
+        faceCorners[gf] = corners;
+      }
+    }
+  }
+
+  if (oppositeSides.size() == 0) return 0;
+
+  unordered_map<GEdge*,int> n;
+  bool okq = QMT::solveQuantizationWithGreedyApproach(oppositeSides, x_ideal, n);
+  if (!okq) {
+    Msg::Error("failed to solve quantization with greedy approach");
+    return -1;
+  }
+
+  /* Transfinite constraints on curve */
+  for (auto& kv: n) {
+    if (kv.second > 0) {
+      GEdge* ge = kv.first;
+      int nLines = kv.second;
+      if (ge->meshAttributes.method != MESH_TRANSFINITE) {
+        ge->meshAttributes.method = MESH_TRANSFINITE;
+        ge->meshAttributes.typeTransfinite = 4; /* use size map for positions */
+        ge->meshAttributes.nbPointsTransfinite = nLines + 1;
+        Msg::Debug("- set transfinite on curve %i (%i points)", ge->tag(), nLines+1);
+      }
+    }
+  }
+
+  return 0;
+}
+
+
+
+int setQuadqsTransfiniteConstraints(GModel* gm, double maxDiffNbLines) {
+  Msg::Debug("set quadqs transfinite constraints ...");
+
+  std::unordered_map<GFace*,vector<GVertex*> > faceCorners;
+
+  int si = initialCurveQuantization(gm, maxDiffNbLines, faceCorners);
+  if (si != 0) return si;
+
+  for (GFace* gf: gm->getFaces()) {
+    bool allTransfi = true;
+    for (GEdge* ge: gf->edges()) {
+      if (ge->meshAttributes.method != MESH_TRANSFINITE) allTransfi = false;
+    }
+    if (allTransfi) {
+      gf->meshAttributes.method = MESH_TRANSFINITE;
+      gf->meshAttributes.transfiniteArrangement = 1; /* Right */
+      gf->meshAttributes.recombine = 1;
+      gf->meshAttributes.recombineAngle = 45.;
+      auto it = faceCorners.find(gf);
+      if (it != faceCorners.end()) {
+        std::vector<GVertex*> corners = it->second;
+        gf->meshAttributes.corners = corners; /* warning: must be ordered ! */
+      }
+      Msg::Debug("- set transfinite on surface %i", gf->tag());
+    }
+  }
+
+  return 0;
+}
diff --git a/contrib/QuadMeshingTools/qmtCurveQuantization.h b/contrib/QuadMeshingTools/qmtCurveQuantization.h
new file mode 100644
index 0000000000000000000000000000000000000000..3640d28f0deb4c033ed0be1060af0cd57ad7ac35
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtCurveQuantization.h
@@ -0,0 +1,34 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+class GModel;
+
+/**
+ *
+ * WARNING: work in progress, NOT READY for generic usage
+ *
+ *
+ * @brief Determine the number of points on each GEdge
+ *        for quad meshing. Try to match the opposite 
+ *        sides to get regular meshes.
+ *        The GEdge meshing properties are changed and
+ *        some GEdge are set to transfinite.
+ *        The GFace whose boundary curves are all transfinite
+ *        are set to transfinite.
+ *        Requires a mesh. Use the existing GFace meshes
+ *        or a background mesh if available.
+ *
+ * @param gm The model containing the curves
+ * @param maxDiffNbLines Two opposite sides are constrained to the
+ *                       same number of lines if their relative difference
+ *                       is inferior to this threshold.
+ *
+ * @return 0 if success
+ */
+int setQuadqsTransfiniteConstraints(GModel* gm, double maxDiffNbLines = 0.25);
diff --git a/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.cpp b/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..50017e4d440b51dcec1e8eb83f8ee39c5365c2fd
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.cpp
@@ -0,0 +1,488 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtDiskQuadrangulationRemeshing.h"
+
+/* System includes */
+// #include <vector>
+// #include <array>
+// #include <unordered_map>
+// #include <cstdint>
+// #include <cmath>
+// #include <queue>
+// #include <algorithm>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MElement.h"
+#include "MTriangle.h"
+#include "MQuadrangle.h"
+#include "BackgroundMesh.h"
+#include "StringUtils.h"
+
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "qmtMeshGeometryOptimization.h"
+#include "dataDiskQuadrangulationsSplit.hpp" // list of disk quadrangulations as many strings
+
+using namespace CppUtils;
+
+constexpr bool PARANO_QUALITY = false;
+
+namespace QMT {
+  using id = uint32_t;
+  using id4 = std::array<id,4>;
+
+  struct vidHash {
+    size_t operator()(const std::vector<id>& p) const noexcept {
+      uint32_t hash = 0;
+      for (size_t i = 0; i < p.size(); ++i) {
+        hash += p[i];
+        hash += hash << 10;
+        hash ^= hash >> 6;
+      }
+      hash += hash << 3;
+      hash ^= hash >> 11;
+      hash += hash << 15;
+      return hash;
+    }
+  };
+
+  using std::vector;
+  using std::unordered_map; /* robin_hood unordered_map much faster */
+  using Quadrangulation = std::vector< std::array<id,4> >;
+
+  vector<vector<Quadrangulation> > B_disk_quadrangulations;
+  vector<unordered_map<vector<id>, vector<id>, vidHash > > B_BVL_ids;
+
+  bool load_disk_quadrangulations_from_raw_data() {
+    if (B_disk_quadrangulations.size() != 0) return false;
+
+    Msg::Info("loading disk quadrangulations ...");
+    B_disk_quadrangulations.reserve(20);
+    B_BVL_ids.reserve(20);
+    // std::string data(disk_quadrangulations);
+    std::string data;
+    diskQuadrangulationConcat(data);
+    vector<std::string> lines = SplitString(data,'\n');
+    Quadrangulation qdrl;
+    vector<std::string> numbers;
+    vector<id> bdrValLoop;
+    for (size_t i = 0; i < lines.size(); ++i) {
+      numbers = SplitString(lines[i],' ');
+      if (numbers.size() < 7) continue;
+      size_t B = std::stoi(numbers[0]);
+      size_t I = std::stoi(numbers[1]);
+      size_t Q = std::stoi(numbers[2]);
+      if (numbers.size() != 3 + 4 * Q) {
+        Msg::Warning("load_disk_quadrangulations | wrong sizes: B=%li, I=%li, Q=%li and numbers.size = %li",
+            B, I, Q, numbers.size());
+        continue;
+      }
+      qdrl.resize(Q);
+      for (size_t j = 0; j < Q; ++j) {
+        for (size_t lv = 0; lv < 4; ++lv) {
+          qdrl[j][lv] = std::stoi(numbers[3 + 4 * j + lv]);
+        }
+      }
+
+      if (B >= B_disk_quadrangulations.size()) {
+        B_disk_quadrangulations.resize(B+1);
+        B_disk_quadrangulations[B].reserve(1000);
+        B_BVL_ids.resize(B+1);
+      }
+
+      id qId = B_disk_quadrangulations[B].size();
+      B_disk_quadrangulations[B].push_back(qdrl);
+
+      /* Assumes:
+       * - first B vertices are on the boundary
+       * - canonical valence ordering according to boundary valence loop
+       *   (should be compatible with the generator) */
+      bdrValLoop.clear();
+      bdrValLoop.resize(B,0);
+      for (size_t j = 0; j < Q; ++j) for (size_t lv = 0; lv < 4; ++lv){
+        id v = qdrl[j][lv];
+        if (v < B) bdrValLoop[v] += 1;
+      }
+      B_BVL_ids[B][bdrValLoop].push_back(qId);
+    }
+    Msg::Info("%li disk quadrangulations loaded", lines.size());
+    return true;
+  }
+
+  bool computeQuadMeshValences(const vector<id4>& quads, vector<int>& valence) {
+    valence.clear();
+    valence.reserve(quads.size()*4);
+    for (size_t f = 0; f < quads.size(); ++f) for (size_t lv = 0; lv < 4; ++lv) {
+      size_t v = quads[f][lv];
+      if (v >= valence.size()) valence.resize(v+1,0);
+      valence[v] += 1;
+    }
+    return true;
+  }
+
+  double computeIrregularity(
+      const vector<id4>& quads,
+      const vector<int>& valence,
+      const std::vector<int>& bndIdealValence,
+      const std::vector<std::pair<int,int> >& bndAllowedValenceRange)
+  {
+    double irregularity = 0.;
+    /* Boundary vertices */
+    for (size_t bv = 0; bv < bndIdealValence.size(); ++bv) {
+      if (valence[bv] < bndAllowedValenceRange[bv].first) return DBL_MAX;
+      if (valence[bv] > bndAllowedValenceRange[bv].second) return DBL_MAX;
+      if (bndIdealValence[bv] <= 1 && valence[bv] >= 2) { /* probably making a 6+ ... */
+        irregularity += 1000;
+      } else {
+        irregularity += 10*std::pow(bndIdealValence[bv]-valence[bv],2);
+      }
+    }
+    /* Interior vertices */
+    for (size_t iv = bndIdealValence.size(); iv < valence.size(); ++iv) {
+      irregularity += std::pow(4-valence[iv],2);
+    }
+    return irregularity;
+  }
+
+
+  bool computeBestMatchingConfiguration(
+      const vector<id4>& quads,
+      const vector<int>& valence,
+      const vector<int>& bndIdealValence,
+      const vector<std::pair<int,int> >& bndAllowedValenceRange,
+      int& rotation,
+      double& irregularity)
+  {
+    double best = DBL_MAX;
+    int rot = 0;
+    vector<int> biv = bndIdealValence;
+    vector<std::pair<int,int>>  bav = bndAllowedValenceRange;
+
+    /* Initial config */
+    {
+      double irreg = computeIrregularity(quads, valence, biv, bav);
+      if (irreg < best) {
+        best = irreg;
+        rotation = rot;
+      }
+    }
+
+    /* Forward rotation */
+    for (size_t r = 1; r < biv.size(); ++r) {
+      rot += 1;
+      std::rotate(biv.begin(),biv.begin()+1,biv.end());
+      std::rotate(bav.begin(),bav.begin()+1,bav.end());
+      double irreg = computeIrregularity(quads, valence, biv, bav);
+      if (irreg < best) {
+        best = irreg;
+        rotation = rot;
+      }
+    }
+
+    /* Try in reverse order */
+    rot = 0;
+    biv = bndIdealValence;
+    bav = bndAllowedValenceRange;
+    std::reverse(biv.begin(),biv.end());
+    std::reverse(bav.begin(),bav.end());
+    for (size_t r = 1; r < biv.size(); ++r) {
+      rot -= 1;
+      std::rotate(biv.begin(),biv.begin()+1,biv.end());
+      std::rotate(bav.begin(),bav.begin()+1,bav.end());
+      double irreg = computeIrregularity(quads, valence, biv, bav);
+      if (irreg < best) {
+        best = irreg;
+        rotation = rot;
+      }
+    }
+
+    irregularity = best;
+    return (best != DBL_MAX);
+  }
+
+  /* WARNING: GFace is not modified, just the "floating" MVertex
+   * and MQuadrangle are created, they must be inserted in the GFace
+   * later is the pattern is kept.
+   * The vertex positions are random ! Need geometric smoothing after */
+  bool getDiskQuadrangulationRemeshing(
+      GFace* gf,
+      const std::vector<MVertex*>& bnd,
+      int rotation,                                      /* rotation to apply to input */
+      const std::vector<id4>& quads,                     /* pattern */
+      std::vector<MVertex*> & newVertices,               /* new vertices inside the cavity */
+      std::vector<MElement*> & newElements               /* new quads inside the cavity */
+      ) {
+    if (bnd.size() < 4) return false;
+
+    const double EPS_RANDOM = 1.e-16;
+
+    std::vector<MVertex*> bndr = bnd;
+    if (rotation > 0) {
+      std::rotate(bndr.begin(),bndr.begin()+(size_t)rotation,bndr.end());
+    } else if (rotation < 0) {
+      std::reverse(bndr.begin(),bndr.end());
+      std::rotate(bndr.begin(),bndr.begin()+(size_t) std::abs(rotation),bndr.end());
+    }
+
+    /* Default position/uv for new vertices */
+    SPoint3 defaultPoint;
+    SPoint2 defaultParam;
+    size_t num = (size_t) -1;
+    for (MVertex* v: bnd) {
+      if (v->onWhat() == gf && v->getNum() < num) {
+        defaultPoint = v->point();
+        v->getParameter(0,defaultParam[0]);
+        v->getParameter(1,defaultParam[1]);
+        num = v->getNum();
+      }
+    }
+    if (num == (size_t) -1) { /* No bdr vertex inside face */
+      defaultPoint = bndr[0]->point();
+      reparamMeshVertexOnFace(bndr[0], gf, defaultParam);
+    }
+
+    size_t count = 1;
+    unordered_map<id,MVertex*> pv2mv;
+    for (size_t f = 0; f < quads.size(); ++f) {
+      std::array<MVertex*,4> vert;
+      for (size_t lv = 0; lv < 4; ++lv) {
+        size_t pv = quads[f][lv];
+        if (pv < bndr.size()) {
+          vert[lv] = bndr[pv];
+        } else {
+          auto it = pv2mv.find(pv);
+          if (it == pv2mv.end()) {
+            SVector3 p = defaultPoint;
+            p.data()[0] += count * EPS_RANDOM;
+            p.data()[1] += count * EPS_RANDOM;
+            p.data()[2] += count * EPS_RANDOM;
+            double uv[2] = {defaultParam.x(),defaultParam.y()};
+            uv[0] = uv[0] + count * EPS_RANDOM;
+            uv[1] = uv[1] + count * EPS_RANDOM;
+            MVertex *mv = new MFaceVertex(p.x(),p.y(),p.z(),gf,uv[0],uv[1]);
+            pv2mv[pv] = mv;
+            vert[lv] = mv;
+            newVertices.push_back(mv);
+            count += 1;
+          } else {
+            vert[lv] = it->second;
+          }
+        }
+      }
+      if (rotation < 0) { /* revert quad to keep coherent orientation */
+        std::reverse(vert.begin(),vert.end());
+      }
+      MQuadrangle *q = new MQuadrangle (vert[0],vert[1],vert[2],vert[3]);
+      newElements.push_back(q);
+    }
+
+    /* Ensure coherent orientation between the new mesh and the boundary */
+    bool oko = orientElementsAccordingToBoundarySegment(bnd[0],bnd[1], newElements);
+    if (!oko) {
+      Msg::Error("getDiskQuadrangulationRemeshing: bdr quad edge not found, weird");
+      return false;
+    }
+
+    return true;
+  }
+
+  bool smallCavitySmoothing(GFaceMeshPatch& patch,
+      SurfaceProjector* sp, bool invertNormalsForQuality,
+      GeomOptimStats& stats) {
+    if (patch.intVertices.size() == 0) {
+      computeSICN(patch.elements, stats.sicnMinBefore, stats.sicnAvgBefore);
+      computeSICN(patch.elements, stats.sicnMinAfter, stats.sicnAvgAfter);
+      return true;
+    }
+
+
+    bool cadInitOk = false;
+    if (haveNiceParametrization(patch.gf)) {
+      PatchGeometryBackup backup(patch);
+      /* Try pure UV smoothing in parameter space */
+      int s0 = patchOptimizeGeometryGlobal(patch, stats);
+      if (stats.sicnMinAfter > 0.) {
+        cadInitOk = true;
+      } else {
+        backup.restore();
+      }
+    }
+
+    /* Kernel smoothing (in parameter space or in 3D space with proj.) */
+    GeomOptimOptions opt;
+    opt.invertCADNormals = invertNormalsForQuality;
+    opt.localLocking = true;
+    opt.dxLocalMax = 1.e-5;
+    opt.outerLoopIterMax = 100;
+    opt.timeMax = 0.25 * double(patch.intVertices.size());
+    if (cadInitOk) {
+      opt.force3DwithProjection = false;
+      opt.useDmoIfSICNbelow = 0.5;
+    } else {
+      opt.sp = sp;
+      opt.force3DwithProjection = true;
+    }
+
+    bool okk = patchOptimizeGeometryWithKernel(patch, opt, stats);
+    return okk;
+  }
+
+}
+
+using namespace QMT;
+
+int initDiskQuadrangulations() {
+  bool ok = load_disk_quadrangulations_from_raw_data();
+  if (!ok) return -1;
+  return 0;
+}
+
+int remeshLocalWithDiskQuadrangulation(
+    GFace* gf,
+    const std::vector<MElement*>& elements,
+    const std::vector<MVertex*>& intVertices,
+    const std::vector<MVertex*>& bdrVertices,
+    const std::vector<int>& bndIdealValence,
+    const std::vector<std::pair<int,int> >& bndAllowedValenceRange,
+    const std::vector<MElement*>& neighborsForGeometry,
+    double minSICNrequired,
+    bool invertNormalsForQuality,
+    SurfaceProjector* sp,
+    GFaceMeshDiff& diff) {
+  if (QMT::B_disk_quadrangulations.size() == 0) {
+    Msg::Error("Missing disk quadrangulation database, call initDiskQuadrangulations() before");
+    return -1;
+  }
+  if (bdrVertices.size() == 0) {
+    Msg::Error("disk quadrangulation remeshing: no boundary vertices", bdrVertices.size());
+    return -1;
+  }
+
+
+  /* Get disk quadrangulations with the same boundary size */
+  const vector<vector<id4> >* small_patterns = NULL;
+  if (bdrVertices.size() < B_disk_quadrangulations.size() && B_disk_quadrangulations[bdrVertices.size()].size() > 0) {
+    small_patterns = &(B_disk_quadrangulations[bdrVertices.size()]);
+  } else {
+    // TODO: a simple remeshing by using parallel quads ?
+    Msg::Warning("disk quadrangulation remeshing: no pattern for input boundary loop size (%li bdr vertices)",
+        bdrVertices.size());
+    return -1;
+  }
+  const vector<vector<id4> >& qmeshes = *small_patterns;
+
+
+  /* For each disk quadrangulation, compute vertex valence and
+   * check matching with input patch, considering all rotations.
+   * Store the compatible matchings with their irregularity score. */
+  vector<int> valence;
+  std::vector<std::pair<double,std::pair<size_t,int> > > irregularity_pattern_rotation;
+  for (size_t i = 0; i < qmeshes.size(); ++i) {
+    const vector<id4>& quads = qmeshes[i];
+    computeQuadMeshValences(quads, valence);
+    double irregularity = DBL_MAX;
+    int rotation = 0;
+    bool found = computeBestMatchingConfiguration(quads, valence, bndIdealValence, bndAllowedValenceRange, rotation, irregularity);
+    if (found) {
+      irregularity_pattern_rotation.push_back({irregularity,{i,rotation}});
+    }
+  }
+  if (irregularity_pattern_rotation.size() == 0) {
+    Msg::Debug("disk quadrangulation remeshing: no pattern matching input allowed valence range (%li bdr vertices)",
+        bdrVertices.size());
+    return -1; /* no pattern matching allowed valence range */
+  }
+  std::sort(irregularity_pattern_rotation.begin(),irregularity_pattern_rotation.end());
+
+  /* Keep the best pattern for which it is possible to find a
+   * untangled and sufficient quality geometry */
+  size_t N = 5; /* maximum number of pattern tested */
+  if (irregularity_pattern_rotation.size() < N) N = irregularity_pattern_rotation.size();
+
+  bool geometryOk = false;
+  for (size_t i = 0; i < N; ++i) {
+    size_t no = irregularity_pattern_rotation[i].second.first;
+    int rotation = irregularity_pattern_rotation[i].second.second;
+    const vector<id4>& quads = qmeshes[no];
+
+    /* New GFace mesh patch */
+    GFaceMeshPatch patch;
+    patch.gf = gf;
+    patch.bdrVertices = {bdrVertices};
+
+    bool ok = getDiskQuadrangulationRemeshing(gf, bdrVertices,
+        rotation, quads, patch.intVertices, patch.elements);
+    if (!ok) {
+      Msg::Debug("disk quandrangulation remeshing: failed to remesh small cavity");
+      continue;
+    }
+    Msg::Debug("disk quadrangulation remeshing: try %li/%li, dq=[%li,%i], %li bdr, %i->%i int vertices, %i->%i quads",
+        i, N, no, rotation, patch.bdrVertices.front().size(), intVertices.size(), patch.intVertices.size(), elements.size(), patch.elements.size());
+
+    /* Try to only move the interior vertices (in general, it is not enough) */
+    {
+      GeomOptimStats stats;
+      bool oks = smallCavitySmoothing(patch, sp, invertNormalsForQuality, stats);
+      if (oks && stats.sicnMinAfter > minSICNrequired) {
+        geometryOk = true;
+        diff.after = patch; /* set the diff output ! */
+        break;
+      }
+    }
+
+    /* Try to move the interior and bdr vertices (which are not on CAD curve/corner) */
+    {
+      std::vector<MElement*> largerElements = patch.elements;
+      append(largerElements, neighborsForGeometry);
+      GFaceMeshPatch largerPatch;
+      bool okp = patchFromElements(gf, largerElements, largerPatch);
+      if (!okp || largerPatch.intVertices.size() == 0) continue;
+
+      PatchGeometryBackup bdrBackup(largerPatch);
+
+      Msg::Debug("try smoothing the extended cavity (%li -> %li free vertices)",
+          patch.intVertices.size(), largerPatch.intVertices.size());
+
+      GeomOptimStats stats;
+      bool oks = smallCavitySmoothing(largerPatch, sp, invertNormalsForQuality, stats);
+      if (oks && stats.sicnMinAfter > minSICNrequired) {
+        geometryOk = true;
+        diff.after = patch; /* set the diff output (the patch, not the largerPatch) ! */
+        break;
+      } else {
+        /* restore boundary positions */
+        bdrBackup.restore();
+      }
+    }
+  }
+
+  if (!geometryOk) {
+    Msg::Debug("disk quadrangulation remeshing: failed to find valid geometry (%li bdr vertices)",
+        bdrVertices.size());
+    return -1;
+  }
+
+  /* set the diff input */
+  diff.gf = gf;
+  diff.before.gf = gf;
+  diff.before.elements = elements;
+  diff.before.intVertices = intVertices;
+  diff.before.bdrVertices = {bdrVertices};
+
+
+  return 0;
+}
diff --git a/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.h b/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.h
new file mode 100644
index 0000000000000000000000000000000000000000..6094b862d99bbee760c677940ac9c4fbe548c55d
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtDiskQuadrangulationRemeshing.h
@@ -0,0 +1,58 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include "qmtMeshUtils.h"
+
+
+class SurfaceProjector;
+
+/**
+ * @brief Parse the disk quadrangulation list at runtime. 
+ *        Must be called one-time before using remeshLocalWithDiskQuadrangulation()
+ *
+ * @return 0 if success
+ */
+int initDiskQuadrangulations();
+
+/**
+ * @brief Look for the best topological disk quadrangulation remeshing 
+ *        which match the allowed valence ranges.
+ *        Requires that the disk quadrangulation data is initialized, see initDiskQuadrangulations()
+ *        The GFace mesh is not changed, the changes are stored in the diff 
+ *        which can executed by the caller.
+ *
+ * @param[in] gf CAD face containing the elements
+ * @param[in] elements Elements (triangles or quads) in the input patch. May be empty
+ * @param[in] intVertices Interior vertices in the input patch. May be empty
+ * @param[in] bdrVertices Patch ordered boundary vertex loop, minimum 4 vertices
+ * @param[in] bndIdealValence The ideal inside quad valence for the boundary corners
+ * @param[in] bndAllowedValenceRange The allowed range of inside quad valence
+ * @param[in] neighborsForGeometry Adjacent elements that may be used for geometry untangling
+ * @param[in] minSICNafer Minimum SICN quality required in the remeshed patch. 
+ *                        Compared after geometry untangling/smoothing.
+ * @param[in] invertNormalsForQuality The CAD normals are used to compute signed quality.
+ *                                    This flag invert invert the CAD normals in the measure.
+ * @param[in] sp If not nullptr, the surface projector is used instead of the CAD parametrization
+ *               in the smoothing. Required if there is no surface parametrization.
+ * @param[out] diff The mesh diff (to the GFace) containing the remeshing candidate
+ *
+ * @return 0 if a valid remeshing has been found
+ */
+int remeshLocalWithDiskQuadrangulation(
+    GFace* gf,
+    const std::vector<MElement*>& elements,
+    const std::vector<MVertex*>& intVertices,
+    const std::vector<MVertex*>& bdrVertices,
+    const std::vector<int>& bndIdealValence,
+    const std::vector<std::pair<int,int> >& bndAllowedValenceRange,
+    const std::vector<MElement*>& neighborsForGeometry,
+    double minSICNafer,
+    bool invertNormalsForQuality,
+    SurfaceProjector* sp,
+    GFaceMeshDiff& diff);
diff --git a/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.cpp b/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2414658d913f36cc232f0a49351c87fecbb5ffae
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.cpp
@@ -0,0 +1,1581 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtMeshGeometryOptimization.h"
+
+/* System includes */
+// #include <vector>
+// #include <array>
+// #include <unordered_map>
+// #include <cstdint>
+// #include <cmath>
+// #include <queue>
+// #include <algorithm>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MElement.h"
+#include "MTriangle.h"
+#include "MQuadrangle.h"
+#include "robin_hood.h"
+#include "meshOctreeLibOL.h"
+#include "Context.h"
+#include "gmsh.h" // api
+
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "arrayGeometry.h"
+#include "geolog.h"
+
+#if defined(HAVE_EIGEN)
+#include<Eigen/SparseLU>
+#include<Eigen/IterativeLinearSolvers>
+#endif
+
+constexpr bool DBG_VIZU_K = false;
+constexpr bool DBG_VIZU_G = false;
+
+using namespace CppUtils;
+using namespace ArrayGeometry;
+
+using std::vector;
+using vec4 = std::array<double,4>;
+using vec5 = std::array<double,5>;
+
+template <typename Key, typename T, typename Hash = robin_hood::hash<Key>,
+         typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+           using unordered_map = robin_hood::detail::Table<true, MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+template <typename Key, typename Hash = robin_hood::hash<Key>, typename KeyEqual = std::equal_to<Key>,
+         size_t MaxLoadFactor100 = 80>
+           using unordered_set = robin_hood::detail::Table<true, MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+namespace QMT {
+  constexpr size_t NO_SIZE_T = (size_t) -1;
+
+  bool SHOW_QUALITY = false; /* Debug only */
+
+  inline bool kernelWinslowSpecialStencil(const vec3 ptsStencil[8], vec3& newPos) {
+    /* Stencil:
+     *   6---1---4
+     *   |   |   |
+     *   2--- ---0
+     *   |   |   |
+     *   7---3---5
+     */
+    /* warning: 2D stencil but 3D coordinates */
+    const double hx = 1.;
+    const double hy = 1.;
+
+    /* 1. Compute the winslow coefficients (alpha_i, beta_i in the Karman paper) */
+    /*    a. Compute first order derivatives of the position */
+    vec3 r_i[2];
+    r_i[0] = 1./hx * (ptsStencil[0] - ptsStencil[2]);
+    r_i[1] = 1./hy * (ptsStencil[1] - ptsStencil[3]);
+    /*    b. Compute the alpha_i coefficients */
+    const double alpha_0 = dot(r_i[1],r_i[1]);
+    const double alpha_1 = dot(r_i[0],r_i[0]);
+    /*    c. Compute the beta coefficient */
+    const double beta =  dot(r_i[0],r_i[1]);
+
+    /* cross derivative */
+    const vec3 u_xy = 1./(4.*hx*hy) * (ptsStencil[4]+ptsStencil[7]-ptsStencil[6]-ptsStencil[5]);
+
+    /* 2. Compute the "winslow new position" */
+    const double denom = 2. * alpha_0 / (hx*hx) + 2. * alpha_1 / (hy*hy);
+    if (std::abs(denom) < 1.e-18) return false;
+    newPos = 1. / denom * (
+        alpha_0/(hx*hx) * (ptsStencil[0] + ptsStencil[2])
+        + alpha_1/(hy*hy) * (ptsStencil[1] + ptsStencil[3])
+        - 2. * beta * u_xy
+        );
+    return true;
+  }
+
+  inline bool kernelWinslow(const std::array<vec3,8>& stencil, vec3& newPos) {
+    /* Continuous ordering in input stencil */
+    const std::array<uint32_t,8> o2n = {0, 2, 4, 6, 1, 7, 3, 5};
+    const std::array<vec3,8> winStencil = {
+      stencil[o2n[0]], stencil[o2n[1]], stencil[o2n[2]], stencil[o2n[3]],
+      stencil[o2n[4]], stencil[o2n[5]], stencil[o2n[6]], stencil[o2n[7]]};
+    return kernelWinslowSpecialStencil(winStencil.data(), newPos);
+  }
+
+  bool kernelLaplacian(const std::vector<vec3>& points, vec3& newPos) {
+    const size_t N = points.size();
+    if (N == 0) return false;
+    newPos = {0.,0.,0.};
+    for (size_t i = 0; i < N; ++i) {
+      newPos = newPos + points[i];
+    }
+    newPos = 1./double(N) * newPos;
+    return true;
+  }
+
+  bool kernelAngleBased(const vec3& center, const std::vector<vec3>& points, vec3& newPos) {
+    const size_t N = points.size();
+    std::vector<vec3> rotated(N);
+    std::vector<double> angles(N);
+    double sum_angle = 0.;
+    for (size_t i = 0; i < N; ++i) {
+      const vec3& prev = points[(N+i-1)%N];
+      const vec3& cur = points[i];
+      const vec3& next = points[(i+1)%N];
+      vec3 oldDir = (center - cur);
+      double len = length(oldDir);
+      if (len == 0.) return false;
+      vec3 d1 = prev-cur;
+      if (length2(d1) == 0.) return false;
+      vec3 d2 = next-cur;
+      if (length2(d2) == 0.) return false;
+      normalize(d1);
+      normalize(d2);
+      vec3 newDir = d1+d2;
+      if (length2(newDir) == 0.) return false;
+      normalize(newDir);
+      if (dot(newDir,oldDir) < 0.) {
+        newDir = -1. * newDir;
+      }
+      rotated[i] = cur + len * newDir;
+      normalize(oldDir);
+      double agl = angleVectorsAlreadyNormalized(newDir,oldDir);
+      angles[i] = agl;
+      sum_angle += agl;
+    }
+    if (sum_angle == 0.) return false;
+    newPos.data()[0] = 0.;
+    newPos.data()[1] = 0.;
+    newPos.data()[2] = 0.;
+    for (size_t i = 0; i < N; ++i) {
+      double w = angles[i] / sum_angle;
+      // double w = 1./double(N);
+      newPos = newPos + w * rotated[i];
+    }
+    return true;
+  }
+
+  std::array<vec3,8> fillStencilRegular(
+      size_t v,
+      const std::vector<vec3>& points,
+      const std::vector<size_t>& one_ring_first,
+      const std::vector<uint32_t>& one_ring_values) {
+    return std::array<vec3,8>{
+      points[one_ring_values[one_ring_first[v]+0]],
+      points[one_ring_values[one_ring_first[v]+1]],
+      points[one_ring_values[one_ring_first[v]+2]],
+      points[one_ring_values[one_ring_first[v]+3]],
+      points[one_ring_values[one_ring_first[v]+4]],
+      points[one_ring_values[one_ring_first[v]+5]],
+      points[one_ring_values[one_ring_first[v]+6]],
+      points[one_ring_values[one_ring_first[v]+7]]
+    };
+  }
+
+  void fillStencilIrregular(
+      size_t v,
+      const std::vector<vec3>& points,
+      const std::vector<size_t>& one_ring_first,
+      const std::vector<uint32_t>& one_ring_values,
+      std::vector<vec3>& stencil,
+      bool oneOverTwo = false) {
+    if (oneOverTwo) {
+      size_t n = (one_ring_first[v+1]-one_ring_first[v])/2;
+      stencil.resize(n);
+      for (size_t i = 0; i < stencil.size(); ++i) {
+        stencil[i] = points[one_ring_values[one_ring_first[v]+2*i]];
+      }
+    } else {
+      stencil.resize(one_ring_first[v+1]-one_ring_first[v]);
+      for (size_t i = 0; i < stencil.size(); ++i) {
+        stencil[i] = points[one_ring_values[one_ring_first[v]+i]];
+      }
+    }
+  }
+
+  double stencilAverageLength(const std::array<vec3,8>& stencil) {
+    double avg = 0.;
+    const uint32_t N = stencil.size();
+    for (uint32_t i = 0; i < N; ++i) {
+      const vec3& p0 = stencil[i];
+      const vec3& p1 = stencil[(i+1)%N];
+      avg += length(p1-p0);
+    }
+    avg /= double(N);
+    return avg;
+  }
+
+  double stencilAverageLength(const std::vector<vec3>& stencil) {
+    double avg = 0.;
+    const uint32_t N = stencil.size();
+    for (uint32_t i = 0; i < N; ++i) {
+      const vec3& p0 = stencil[i];
+      const vec3& p1 = stencil[(i+1)%N];
+      avg += length(p1-p0);
+    }
+    avg /= double(N);
+    return avg;
+  }
+
+  /* p0, p1, p2, p3: the four (ordered and oriented) corners
+   * Quad normal reference computed from the corners. Element should not
+   * be inverted or too tangled */
+  inline double quad_shape_ln(const vec3& p0, const vec3& p1, const vec3& p2, const vec3& p3) {
+    /* Based on Sandia Verdict document */
+    constexpr double EPS = 1.e-16;
+    constexpr double EPS2 = EPS*EPS;
+    const vec3 L0 = p1 - p0;
+    const vec3 L1 = p2 - p1;
+    const vec3 L2 = p3 - p2;
+    const vec3 L3 = p0 - p3;
+    const vec3 X1 = L0 - L2;
+    const vec3 X2 = L1 - L3;
+    vec3 Nc = cross(X1,X2);
+    const double lenNc_sq = length2(Nc);
+    if (lenNc_sq < EPS2) return -1.;
+    normalize(Nc);
+    const double len0_sq = length2(L0);
+    const double len1_sq = length2(L1);
+    const double len2_sq = length2(L2);
+    const double len3_sq = length2(L3);
+    if (len0_sq < EPS2 || len1_sq < EPS2 || len2_sq < EPS2 || len3_sq < EPS2) return 0.;
+    const vec3 N0 = cross(L3,L0);
+    const vec3 N1 = cross(L0,L1);
+    const vec3 N2 = cross(L1,L2);
+    const vec3 N3 = cross(L2,L3);
+    const double a0 = dot(Nc,N0); /* bad if non planar quad ? */
+    const double a1 = dot(Nc,N1);
+    const double a2 = dot(Nc,N2);
+    const double a3 = dot(Nc,N3);
+    const double q0 = a0/(len3_sq+len0_sq);
+    const double q1 = a1/(len0_sq+len1_sq);
+    const double q2 = a2/(len1_sq+len2_sq);
+    const double q3 = a3/(len2_sq+len3_sq);
+    if (SHOW_QUALITY && (q0 < 0 || q1 < 0 || q2 < 0 || q3 < 0)) {
+      vec3 mid = (p0+p1+p2+p3)*0.25;
+      DBG(q0,q1,q2,q3);
+      GeoLog::add(mid,Nc,"Nc");
+      GeoLog::add(p0,N0,"Ni");
+      GeoLog::add(p1,N1,"Ni");
+      GeoLog::add(p2,N2,"Ni");
+      GeoLog::add(p3,N3,"Ni");
+      GeoLog::add({p0,p1,p2,p3},0.,"quad");
+      GeoLog::flush();
+      gmsh::fltk::run();
+      abort();
+    }
+    return 2.*std::min(std::min(q0,q1),std::min(q2,q3));
+  }
+
+
+  inline double stencilQualitySICNmin(
+      const vec3& center,
+      const std::array<vec3,8>& stencil,
+      double breakIfBelowThreshold = -DBL_MAX) {
+    double qmin = DBL_MAX;
+    constexpr uint32_t N = 4;
+    for (uint32_t i = 0; i < N; ++i) {
+      const vec3& p0 = stencil[2*i+0];
+      const vec3& p1 = stencil[2*i+1];
+      const size_t i2 = (2*i+2)%(2*N);
+      const vec3& p2 = stencil[i2];
+      const double q = quad_shape_ln(p0,p1,p2,center);
+      qmin = std::min(q,qmin);
+      if (qmin < breakIfBelowThreshold) return qmin;
+    }
+    return qmin;
+  }
+
+  inline double stencilQualitySICNmin(
+      const vec3& center,
+      const std::vector<vec3>& stencil,
+      double breakIfBelowThreshold = -DBL_MAX) {
+    if (stencil.size() % 2 != 0) return -DBL_MAX;
+    double qmin = DBL_MAX;
+    const uint32_t N = stencil.size() / 2;
+    for (uint32_t i = 0; i < N; ++i) {
+      const vec3& p0 = stencil[2*i+0];
+      const vec3& p1 = stencil[2*i+1];
+      const size_t i2 = (2*i+2)%(2*N);
+      const vec3& p2 = stencil[i2];
+      const double q = quad_shape_ln(p0,p1,p2,center);
+      qmin = std::min(q,qmin);
+      if (qmin < breakIfBelowThreshold) return qmin;
+    }
+    return qmin;
+  }
+
+  struct OneRing {
+    vec5* p_uv = NULL;
+    uint32_t n = 0;
+    vec2 jump = {{0.,0.}};
+    vec3 range = {{0.,0.,0.}};
+  };
+
+
+  bool buildCondensedStructure(
+      const std::vector<MVertex*>& freeVertices,
+      const std::vector<MElement*>& elements,
+      unordered_map<MVertex*,size_t>& old2new,
+      std::vector<vector<size_t> >& v2v) {
+    /* Build the old2new mapping */
+    size_t vcount = 0;
+    for (MVertex* v: freeVertices) {
+      old2new[v] = vcount;
+      vcount += 1;
+    }
+    size_t nInterior = vcount;
+    if (nInterior == 0) return true; /* nothing to smooth */
+    v2v.resize(nInterior);
+    for (MElement* f: elements) {
+      for (size_t le = 0; le < 4; ++le) {
+        MVertex* vs[2] = {
+          f->getVertex(le),
+          f->getVertex((le+1)%4)
+        };
+        size_t nvs[2];
+        for (size_t lv = 0; lv < 2; ++lv) {
+          MVertex* v = vs[lv];
+          size_t nv = NO_SIZE_T;
+          auto it = old2new.find(v);
+          if (it == old2new.end()) {
+            old2new[v] = vcount;
+            nv = vcount;
+            vcount += 1;
+          } else {
+            nv = it->second;
+          }
+          nvs[lv] = nv;
+        }
+        if (nvs[0] < nInterior) v2v[old2new[vs[0]]].push_back(old2new[vs[1]]);
+        if (nvs[1] < nInterior) v2v[old2new[vs[1]]].push_back(old2new[vs[0]]);
+      }
+      constexpr bool addDiags = false;
+      if (addDiags) {
+        for (size_t d = 0; d < 2; ++d) {
+          MVertex* vs[2] = {
+            f->getVertex(d),
+            f->getVertex((d+2)%4)
+          };
+          size_t nvs[2] = {old2new[vs[0]],old2new[vs[1]]};
+          if (nvs[0] < nInterior) v2v[old2new[vs[0]]].push_back(old2new[vs[1]]);
+          if (nvs[1] < nInterior) v2v[old2new[vs[1]]].push_back(old2new[vs[0]]);
+        }
+      }
+    }
+    return true;
+  }
+
+  bool buildCondensedStructure(
+      const std::vector<MElement*>& elements,
+      const std::vector<MVertex*>& freeVertices,
+      unordered_map<MVertex*,uint32_t>& old2new,
+      std::vector<MVertex*>& new2old,
+      std::vector<std::array<uint32_t,4> >& quads,
+      std::vector<std::vector<uint32_t> >& v2q,
+      std::vector<std::vector<uint32_t> >& oneRings,
+      std::vector<std::array<double,3> >& points
+      ) {
+    new2old.reserve(2*freeVertices.size());
+    v2q.reserve(2*freeVertices.size());
+    points.reserve(2*freeVertices.size());
+
+    size_t vcount = 0;
+    for (MVertex* v: freeVertices) {
+      old2new[v] = vcount;
+      vec3 pt = SVector3(v->point());
+      points.push_back(pt);
+      new2old.push_back(v);
+      vcount += 1;
+    }
+
+    v2q.resize(vcount);
+    quads.resize(elements.size());
+    for (size_t f = 0; f < elements.size(); ++f) {
+      MElement* q = elements[f];
+      if (q->getNumVertices() != 4) {
+        Msg::Error("buildCondensedStructure: element is not a quad");
+        return false;
+      }
+      for (size_t lv = 0; lv < 4; ++lv) {
+        MVertex* v = q->getVertex(lv);
+        auto it = old2new.find(v);
+        size_t nv;
+        if (it == old2new.end()) {
+          old2new[v] = vcount;
+          new2old.push_back(v);
+          nv = vcount;
+          vcount += 1;
+          vec3 pt = SVector3(v->point());
+          points.push_back(pt);
+          if (nv >= v2q.size()) {
+            v2q.resize(nv+1);
+          }
+        } else {
+          nv = it->second;
+        }
+        quads[f][lv] = nv;
+        v2q[nv].push_back(f);
+      }
+    }
+    points.shrink_to_fit();
+    quads.shrink_to_fit();
+    new2old.shrink_to_fit();
+    v2q.shrink_to_fit();
+
+    /* Build the one rings for the free vertices */
+    oneRings.resize(freeVertices.size());
+    vector<MElement*> adjQuads;
+    for (size_t v = 0; v < freeVertices.size(); ++v) {
+      adjQuads.resize(v2q[v].size());
+      for (size_t lq = 0; lq < v2q[v].size(); ++lq) {
+        adjQuads[lq] = elements[v2q[v][lq]];
+      }
+      std::vector<MVertex*> bnd;
+      bool okb = buildBoundary(adjQuads, bnd);
+      if (!okb) {
+        Msg::Error("buildCondensedStructure: failed to build boundary for stencil");
+        return false;
+      }
+      if (bnd.back() == bnd.front()) bnd.pop_back();
+
+      /* Be sure the first vertex on the boundary is edge-connected to v */
+      /* Start of the stencil */
+      MVertex* vp = freeVertices[v];
+      MVertex* v0 = NULL;
+      for (MElement* e: adjQuads) {
+        size_t N = e->getNumVertices();
+        for (size_t j = 0; j < N; ++j) {
+          MVertex* a = e->getVertex(j);
+          MVertex* b = e->getVertex((j+1)%N);
+          if (a == vp) {
+            v0 = b;
+            break;
+          } else if (b == vp) {
+            v0 = a;
+            break;
+          }
+        }
+        if (v0 != NULL) break;
+      }
+      if (v0 == NULL) {
+        Msg::Warning("buildCondensedStructure: failed to found v0");
+        return false;
+      }
+      for (size_t j = 0; j < bnd.size(); ++j) {
+        if (bnd[j] == v0 && j > 0) {
+          std::rotate(bnd.begin(),bnd.begin()+j,bnd.end());
+        }
+      }
+      if (bnd.front() != v0) {
+        Msg::Warning("buildCondensedStructure: wrong start");
+        return false;
+      }
+      if (bnd.size() < 6 || bnd.size() % 2 != 0) {
+        Msg::Warning("buildCondensedStructure: wrong boundary, size %li", bnd.size());
+        return false;
+      }
+
+      oneRings[v].resize(bnd.size());
+      for (size_t j = 0; j < bnd.size(); ++j) {
+        auto it = old2new.find(bnd[j]);
+        if (it != old2new.end()) {
+          oneRings[v][j] = it->second;
+        } else {
+          Msg::Error("buildCondensedStructure: vertex not found in old2new");
+          return false;
+        }
+      }
+    }
+
+    return true;
+  }
+
+  bool buildUVSmoothingDataStructures(
+      GFace* gf,
+      const std::vector<MElement*>& elements,
+      const std::vector<MVertex*>& freeVertices,
+      std::vector<vec5>& point_uv,
+      std::vector<size_t>& one_ring_first,
+      std::vector<uint32_t>& one_ring_values,
+      std::vector<MVertex*>& new2old) {
+
+    unordered_map<MVertex*,uint32_t> old2new;
+    std::vector<std::array<uint32_t,4> > quads;
+    std::vector<std::vector<uint32_t> > v2q;
+    std::vector<std::vector<uint32_t> > oneRings;
+    std::vector<std::array<double,3> > points;
+    bool okc = buildCondensedStructure(elements,freeVertices,old2new,new2old,
+        quads,v2q,oneRings,points);
+    if (!okc) {
+      Msg::Warning("buildCondensedStructure: failed to build condensed representation");
+      return false;
+    }
+
+    /* Get associated uv in GFace */
+    std::vector<std::array<double,2> > uvs(old2new.size(),{DBL_MAX,DBL_MAX});
+    for (size_t i = 0; i < elements.size(); ++i) {
+      std::vector<SPoint2> quad_uvs = paramOnElement(gf, elements[i]);
+      for (size_t lv = 0; lv < 4; ++lv) {
+        size_t v = quads[i][lv];
+        if (uvs[v][0] == DBL_MAX) {
+          uvs[v][0] = quad_uvs[lv][0];
+          uvs[v][1] = quad_uvs[lv][1];
+        }
+      }
+    }
+
+    /* Compact 3D + uv */
+    point_uv.resize(points.size());
+    for (size_t i = 0; i < points.size(); ++i) {
+      point_uv[i][0] = points[i][0];
+      point_uv[i][1] = points[i][1];
+      point_uv[i][2] = points[i][2];
+      point_uv[i][3] = uvs[i][0];
+      point_uv[i][4] = uvs[i][1];
+    }
+
+    /* One ring adjacencies in contiguous memory */
+    compress(oneRings, one_ring_first, one_ring_values);
+
+    return true;
+  }
+
+  bool getContinuousUVOnLoop(
+      GFace* gf,
+      const std::vector<MVertex*>& bndOrdered,
+      std::vector<SPoint2>& bndUvs) {
+    if (bndOrdered.size() < 3) return false;
+
+    /* If periodic parametrization, get periods */
+    double Ts[2] = {0.,0.};
+    if (gf->periodic(0)) Ts[0] = gf->period(0);
+    if (gf->periodic(1)) Ts[1] = gf->period(1);
+
+    /* Get start point on the loop, inside GFace if possible */
+    size_t i0 = 0;
+    for (size_t i = 0; i < bndOrdered.size(); ++i) {
+      MVertex* v = bndOrdered[i];
+      if (v->onWhat() == gf) {
+        i0 = i;
+        break;
+      }
+    }
+
+    /* Get all the parameters on the loop */
+    bndUvs.resize(bndOrdered.size());
+    reparamMeshVertexOnFace(bndOrdered[i0],gf,bndUvs[i0],true);
+    SPoint2 prevUV = bndUvs[i0];
+
+    double gapMax[2] = {0.,0.};
+    const size_t N = bndOrdered.size();
+    for (size_t k = 1; k < N; ++k) {
+      size_t i = (i0+k)%N;
+      MVertex* v = bndOrdered[i];
+      bool okr = reparamMeshVertexOnFaceWithRef(gf, v, prevUV, bndUvs[i]);
+      if (!okr) return false;
+
+      gapMax[0] = std::max(gapMax[0],std::abs(bndUvs[i].data()[0] - prevUV.data()[0]));
+      gapMax[1] = std::max(gapMax[1],std::abs(bndUvs[i].data()[1] - prevUV.data()[1]));
+      prevUV = bndUvs[i];
+    }
+    gapMax[0] = std::max(gapMax[0],std::abs(bndUvs.front().data()[0] - bndUvs.back().data()[0]));
+    gapMax[1] = std::max(gapMax[1],std::abs(bndUvs.front().data()[1] - bndUvs.back().data()[1]));
+
+    if (Ts[0] > 0 && gapMax[0] > 0.5 * Ts[0]) {
+      Msg::Debug("getContinuousUVOnLoop: reject because gap on boundary: %f (period %f)", gapMax[0], Ts[0]);
+      return false;
+    }
+    if (Ts[1] > 0 && gapMax[1] > 0.5 * Ts[1]) {
+      Msg::Debug("getContinuousUVOnLoop: reject because gap on boundary: %f (period %f)", gapMax[1], Ts[1]);
+      return false;
+    }
+
+    return true;
+  }
+
+  bool solveLaplaceLinearSystem(
+      size_t nInterior,
+      const vector<vector<size_t> >& v2v, vector<SPoint2>& uvs) {
+    if (nInterior > 100) {
+      Msg::Debug("... solve laplace linear system (%li unknowns) ...", nInterior);
+    }
+
+#if defined(HAVE_EIGEN)
+    size_t N = uvs.size();
+    Eigen::VectorXd x_u(N), x_v(N), b_u(N), b_v(N);
+    Eigen::SparseMatrix<double> A(N,N);
+    b_u.fill(0.);
+    b_v.fill(0.);
+    double PENALTY = 1.e8;
+
+    std::vector<Eigen::Triplet<double, size_t> > triplets;
+    for (size_t v = 0; v < uvs.size(); ++v) {
+      if (v < nInterior) {
+        triplets.push_back({v,v,1.});
+        if (v2v[v].size() == 0) continue;
+        double sum = double(v2v[v].size());
+        for (size_t v2: v2v[v]) {
+          triplets.push_back({v,v2,-1./sum});
+        }
+      } else { /* fixed value */
+        triplets.push_back({v,v,PENALTY});
+        b_u[v] = PENALTY * uvs[v][0];
+        b_v[v] = PENALTY * uvs[v][1];
+      }
+    }
+    A.setFromTriplets(triplets.begin(),triplets.end());
+
+    bool solveOk = true;
+    { /* Try SparseLU */
+      Eigen::SparseLU<Eigen::SparseMatrix<double> > solver;
+      solver.analyzePattern(A);
+      solver.factorize(A);
+      x_u = solver.solve(b_u);
+      if (solver.info() != Eigen::ComputationInfo::Success) {
+        Msg::Warning("failed to solve linear system with SparseLU (%li variables)", N);
+        solveOk = false;
+      }
+      x_v = solver.solve(b_v);
+      if (solver.info() != Eigen::ComputationInfo::Success) {
+        Msg::Warning("failed to solve linear system with SparseLU (%li variables)", N);
+        solveOk = false;
+      }
+    }
+    if (!solveOk) { /* Try least square */
+      solveOk = true;
+      Eigen::LeastSquaresConjugateGradient<Eigen::SparseMatrix<double> > solver;
+      solver.compute(A);
+      x_u = solver.solve(b_u);
+      if (solver.info() != Eigen::ComputationInfo::Success) {
+        Msg::Warning("failed to solve linear system with least-square (%li variables)", N);
+        solveOk = false;
+      }
+      x_v = solver.solve(b_v);
+      if (solver.info() != Eigen::ComputationInfo::Success) {
+        Msg::Warning("failed to solve linear system with least-square (%li variables)", N);
+        solveOk = false;
+      }
+    }
+
+    for (size_t v = 0; v < nInterior; ++v) {
+      uvs[v][0] = x_u[v];
+      uvs[v][1] = x_v[v];
+    }
+    if (!solveOk) {
+      Msg::Error("failed to solve linear system to solve uv");
+      return false;
+    }
+
+#else
+    Msg::Error("solveLaplaceLinearSystem requires the EIGEN module");
+    return -1;
+#endif
+    return true;
+  }
+
+
+  /* p0, p1, p2, p3: the four (ordered and oriented) corners
+   * N: reference normal (normalized) */
+  inline double quad_shape(const vec3& p0, const vec3& p1, const vec3& p2, const vec3& p3, const vec3& N) {
+    /* Based on Sandia Verdict document */
+    constexpr double EPS = 1.e-16;
+    constexpr double EPS2 = EPS*EPS;
+    const vec3 L0 = p1 - p0;
+    const vec3 L1 = p2 - p1;
+    const vec3 L2 = p3 - p2;
+    const vec3 L3 = p0 - p3;
+    const double len0_sq = length2(L0);
+    const double len1_sq = length2(L1);
+    const double len2_sq = length2(L2);
+    const double len3_sq = length2(L3);
+    if (len0_sq < EPS2 || len1_sq < EPS2 || len2_sq < EPS2 || len3_sq < EPS2) return -1.;
+    const vec3 N0 = cross(L3,L0);
+    const vec3 N1 = cross(L0,L1);
+    const vec3 N2 = cross(L1,L2);
+    const vec3 N3 = cross(L2,L3);
+    const double a0 = dot(N,N0); /* bad if non planar quad ? */
+    const double a1 = dot(N,N1);
+    const double a2 = dot(N,N2);
+    const double a3 = dot(N,N3);
+    const double q0 = a0/(len3_sq+len0_sq);
+    const double q1 = a1/(len0_sq+len1_sq);
+    const double q2 = a2/(len1_sq+len2_sq);
+    const double q3 = a3/(len2_sq+len3_sq);
+    if (SHOW_QUALITY && (q0 < 0 || q1 < 0 || q2 < 0 || q3 < 0)) {
+      DBG("------");
+      DBG(len0_sq, len1_sq, len2_sq, len3_sq);
+      DBG(N);
+      DBG(N0,N1,N2,N3);
+      DBG(q0,q1,q2,q3);
+      vec3 mid = (p0+p1+p2+p3)*0.25;
+      GeoLog::add(mid,N,"Ni");
+      GeoLog::add(p0,N0,"Ni");
+      GeoLog::add(p1,N1,"Ni");
+      GeoLog::add(p2,N2,"Ni");
+      GeoLog::add(p3,N3,"Ni");
+      GeoLog::add({p0,p1,p2,p3},0.,"quad");
+      GeoLog::flush();
+      gmsh::fltk::run();
+      abort();
+    }
+    return 2.*std::min(std::min(q0,q1),std::min(q2,q3));
+  }
+
+  inline double computeQualityQuadOneRing(const vec5& v, const OneRing& ring, const vec3& normal,
+      double breakIfBelowThreshold = -DBL_MAX) {
+    if (ring.n % 2 != 0) return -DBL_MAX;
+    double qmin = DBL_MAX;
+    const vec3 p = {v[0],v[1],v[2]};
+    for (uint32_t i = 0; i < ring.n / 2; ++i) {
+      const vec3 p0 = { ring.p_uv[2*i+0][0], ring.p_uv[2*i+0][1], ring.p_uv[2*i+0][2] };
+      const vec3 p1 = { ring.p_uv[2*i+1][0], ring.p_uv[2*i+1][1], ring.p_uv[2*i+1][2] };
+      const size_t i2 = (2*i+2)%ring.n;
+      const vec3 p2 = { ring.p_uv[i2][0], ring.p_uv[i2][1], ring.p_uv[i2][2] };
+      const double q = quad_shape(p0,p1,p2,p,normal);
+      qmin = std::min(q,qmin);
+      if (qmin < breakIfBelowThreshold) return qmin;
+    }
+    return qmin;
+  }
+
+  inline double dist_abs(double a, double b) {
+    return std::abs(a-b);
+  }
+
+  inline vec2 uv_adjust_jump(vec2 uv, const vec2& uv_ref, const vec2& jump) {
+    for (uint32_t d = 0; d < 2; ++d) if (jump[d] != 0.) {
+      if (uv[d] < uv_ref[d]) {
+        double cand = uv[d] + jump[d];
+        while (dist_abs(cand,uv_ref[d]) < dist_abs(uv[d], uv_ref[d])) {
+          uv[d] = cand;
+          cand = uv[d] + jump[d];
+        }
+      } else {
+        double cand = uv[d] - jump[d];
+        while (dist_abs(cand,uv_ref[d]) < dist_abs(uv[d], uv_ref[d])) {
+          uv[d] = cand;
+          cand = uv[d] - jump[d];
+        }
+      }
+    }
+    return uv;
+  }
+
+  inline double abs_diff_wperiod(double a, double b, double T) {
+    if (T == 0.) return std::abs(a-b);
+    return std::abs(fmod(a-b,T));
+  }
+
+  inline vec2 getDeltaUV(const vec5& v, const OneRing& ring) {
+    constexpr bool useBboxUV = false;
+    bool periodic = (ring.jump[0] != 0. || ring.jump[1] != 0.);
+    if (useBboxUV) {
+      const vec2 uv_0 = {v[3],v[4]};
+      double u_range[2] = {DBL_MAX,-DBL_MAX};
+      double v_range[2] = {DBL_MAX,-DBL_MAX};
+      for (uint32_t i = 0; i < ring.n; ++i) {
+        vec2 uv_i = {ring.p_uv[i][3],ring.p_uv[i][4]};
+        if (periodic) uv_i = uv_adjust_jump(uv_i, uv_0, ring.jump);
+        u_range[0] = std::min(u_range[0],uv_i[0]);
+        u_range[1] = std::max(u_range[1],uv_i[0]);
+        v_range[0] = std::min(v_range[0],uv_i[1]);
+        v_range[1] = std::max(v_range[1],uv_i[1]);
+      }
+      const double du = u_range[1] - u_range[0];
+      const double dv = v_range[1] - v_range[0];
+      return {du,dv};
+    } else {
+      bool periodic = (ring.jump[0] != 0. || ring.jump[1] != 0.);
+      const vec2 uv_0 = {v[3],v[4]};
+      double du = 0.;
+      double dv = 0.;
+      // DBG(uv_0, ring.jump);
+      for (uint32_t i = 0; i < ring.n; ++i) {
+        double duc = abs_diff_wperiod(ring.p_uv[i][3],ring.p_uv[(i+1)%ring.n][3], ring.jump[0]);
+        double dvc = abs_diff_wperiod(ring.p_uv[i][4],ring.p_uv[(i+1)%ring.n][4], ring.jump[1]);
+        if (ring.jump[0] > 0. && duc > 0.5 * ring.jump[0]) duc = 0.;
+        if (ring.jump[1] > 0. && dvc > 0.5 * ring.jump[1]) dvc = 0.;
+        du = std::max(du,duc);
+        dv = std::max(dv,dvc);
+      }
+      return {2.*du,2.*dv};
+    }
+  }
+
+  inline double getRingDispMax(const vec5& v, const OneRing& ring) {
+    double dMax2 = 0.;
+    for (uint32_t i = 0; i < ring.n; ++i) {
+      vec3 p_i = {ring.p_uv[i][0], ring.p_uv[i][1], ring.p_uv[i][2]};
+      vec3 p_n = {ring.p_uv[(i+1)%ring.n][0], ring.p_uv[(i+1)%ring.n][1], ring.p_uv[(i+1)%ring.n][2]};
+      dMax2 = std::max(dMax2, length2(p_i-p_n));
+    }
+    return std::sqrt(dMax2);
+  }
+
+  inline vec4 getGrid(const vec5& v, vec2 deltaUV, size_t n, double w) {
+    const vec2 uv_0 = {v[3],v[4]};
+    const vec4 grid = {
+      uv_0[0] - w * deltaUV[0], /* grid_u_min */
+      uv_0[1] - w * deltaUV[1], /* grid_v_min */
+      uv_0[0] + w * deltaUV[0], /* grid_u_max */
+      uv_0[1] + w * deltaUV[1]  /* grid_v_max */
+    };
+    return grid;
+  }
+
+  vec5 dmoOptimizeVertexPosition(GFace* gf, vec5 v, const OneRing& ring, size_t n, size_t nIter,
+      vec3 normal, double& qmax) {
+    double w = 0.5;
+    if (qmax == DBL_MAX || qmax == -DBL_MAX) {
+      /* Only compute input quality if not given */
+      qmax = computeQualityQuadOneRing(v, ring, normal);
+    }
+    vec5 vmax = v;
+    vec2 deltaUV = getDeltaUV(v, ring);
+
+    /* Sanity check on the UV variation */
+    if (ring.jump[0] > 0. && deltaUV[0] > 0.5*ring.jump[0]) return v;
+    if (ring.jump[1] > 0. && deltaUV[1] > 0.5*ring.jump[1]) return v;
+    if (deltaUV[0] > 0.05 * ring.range[0]) return v;
+    if (deltaUV[1] > 0.05 * ring.range[1]) return v;
+
+    const bool checkDisplacement = ring.jump[0] != 0. || ring.jump[1] != 0.;
+    const double dispMax = checkDisplacement ? getRingDispMax(v, ring) : 0.;
+
+    for (size_t iter = 0; iter < nIter; ++iter) {
+      vec4 grid = getGrid(v, deltaUV, n, w);
+      SPoint2 uv;
+      for (size_t i = 0; i < n; ++i) {
+        uv.data()[0] = double(i)/double(n-1)*grid[0] + double(n-1-i)/double(n-1)*grid[2];
+        for (size_t j = 0; j < n; ++j) {
+          uv.data()[1] = double(j)/double(n-1)*grid[1] + double(n-1-j)/double(n-1)*grid[3];
+          GPoint newPos = gf->point(uv);
+          if (!newPos.succeeded()) continue;
+          if (checkDisplacement) {
+            double disp = length(vec3{newPos.x(),newPos.y(),newPos.z()} - vec3{v[0],v[1],v[2]});
+            // if (disp > 1 || dispMax > 1) {
+            //   // DBG(disp, dispMax, v, deltaUV, uv, ring.jump);
+            //   // abort();
+            //   //gmsh::fltk::run();
+            //   //abort();
+            // }
+            if (disp > dispMax) continue;
+          }
+          const vec5 v2 = {newPos.x(),newPos.y(),newPos.z(),uv.data()[0],uv.data()[1]};
+          double q2 = computeQualityQuadOneRing(v2, ring, normal, qmax);
+          if (q2 > qmax) {
+            vmax = v2;
+            qmax = q2;
+          }
+        }
+      }
+      w = w * 2./double(n-1);
+    }
+
+    return vmax;
+  }
+}
+using namespace QMT;
+
+
+void computeSICN(const std::vector<MElement*>& elements, double& sicnMin, double& sicnAvg) {
+  sicnMin = DBL_MAX;
+  sicnAvg = 0.;
+  for (size_t i = 0; i < elements.size(); ++i)  {
+    double q = elements[i]->minSICNShapeMeasure();
+    if (std::isnan(q)) {
+      q = -1.;
+    }
+    sicnMin = std::min(sicnMin, q);
+    sicnAvg += q;
+  }
+  if (elements.size() > 0) sicnAvg /= double(elements.size());
+}
+
+int patchOptimizeGeometryGlobal(
+    GFaceMeshPatch& patch,
+    GeomOptimStats& stats) {
+  GFace* gf = patch.gf;
+  if (gf == NULL) return -1;
+  if (!gf->haveParametrization()) {
+    Msg::Debug("optimize geometry global: face %i have no parametrization", gf->tag());
+    return -2;
+  }
+  if (patch.bdrVertices.size() != 1) {
+    Msg::Debug("optimize geometry global: patch has multiple boundary loops (%li)", patch.bdrVertices.size());
+    return -1;
+  }
+  if (patch.intVertices.size() == 0) {
+    Msg::Debug("optimize geometry global: no interior vertices (%li bdr vertices, %li elements)",
+        patch.bdrVertices.front().size(), patch.elements.size());
+    return -1;
+  }
+
+  bool debugCreateViews = DBG_VIZU_G;
+  if (Msg::GetVerbosity() >= 999
+      && CTX::instance()->debugSurface == patch.gf->tag()) {
+    debugCreateViews = true;
+  }
+  const int rdi = (int)(((double)rand()/RAND_MAX)*1e4); /* only to get a random name for debugging */
+
+  double t1 = Cpu();
+
+  unordered_map<MVertex*,size_t> old2new;
+  std::vector<vector<size_t> > v2v;
+  bool oks = buildCondensedStructure(patch.intVertices, patch.elements, old2new, v2v);
+  if (!oks) {
+    Msg::Debug("optimize geometry global: failed to build edge graph");
+    return -1;
+  }
+
+
+  /* uvs/v2v: first all the free vertices, then the bdr vertices */
+  vector<SPoint2> uvs(old2new.size(),SPoint2(DBL_MAX,DBL_MAX));
+  /* Interior vertices initialized to (0,0) */
+  size_t nInterior = patch.intVertices.size();
+  for (size_t v = 0; v < nInterior; ++v) {
+    sort_unique(v2v[v]);
+    uvs[v] = SPoint2(0.,0.);
+  }
+
+  /* Boundary vertices */
+  for (size_t loop = 0; loop < patch.bdrVertices.size(); ++loop) {
+    vector<SPoint2> bndUvs;
+    bool okl = getContinuousUVOnLoop(gf, patch.bdrVertices[loop], bndUvs);
+    if (!okl) {
+      Msg::Debug("optimize geometry global: failed to get continuous UV on boundary loop");
+      return -2;
+    }
+    for (size_t i = 0; i < patch.bdrVertices[loop].size(); ++i){
+      MVertex* v = patch.bdrVertices[loop][i];
+      auto it = old2new.find(v);
+      if (it == old2new.end()) {
+        Msg::Error("optimize geometry global: bdr vertex not found in old2new");
+        return -1;
+      }
+      size_t idx = it->second;
+      if (uvs[idx].x() != DBL_MAX) continue;
+      uvs[idx] = bndUvs[i];
+      double dist = std::pow(bndUvs[(i+1)%bndUvs.size()].x() - bndUvs[i].x(),2)
+        + std::pow(bndUvs[(i+1)%bndUvs.size()].y() - bndUvs[i].y(),2);
+      dist = std::sqrt(dist);
+    }
+  }
+
+  computeSICN(patch.elements, stats.sicnMinBefore, stats.sicnAvgBefore);
+
+  /* Laplacian smoothing via linear system */
+  bool ok = solveLaplaceLinearSystem(nInterior, v2v, uvs);
+  if (!ok) {
+    Msg::Warning("optimize geometry global: failed to solve linear system");
+    return -1;
+  }
+
+  if (debugCreateViews) {
+    GeoLog::add(patch.elements, "optim_Duv_IN_"+std::to_string(rdi) + "_" + std::to_string(stats.sicnAvgBefore));
+  }
+
+  /* Apply CAD mapping */
+  for (MVertex* v: patch.intVertices) {
+    size_t idx = old2new[v];
+    SPoint2 uv = uvs[idx];
+    v->setParameter(0,uv[0]);
+    v->setParameter(1,uv[1]);
+    GPoint p = gf->point(uv);
+    if (p.succeeded()) {
+      v->setXYZ(p.x(),p.y(),p.z());
+    } else {
+      Msg::Error("optimize geometry global: CAD evaluation failed on face %i at uv=(%f,%f)",gf->tag(),uv[0],uv[1]);
+    }
+  }
+
+  computeSICN(patch.elements, stats.sicnMinAfter, stats.sicnAvgAfter);
+
+  if (debugCreateViews) {
+    GeoLog::add(patch.elements, "optim_Duv_OUT_"+std::to_string(rdi) + "_" + std::to_string(stats.sicnAvgAfter));
+  }
+
+  double t2 = Cpu();
+  stats.timeCpu = t2 - t1;
+  stats.nFree = patch.intVertices.size();
+  stats.nLock = patch.bdrVertices.front().size();
+
+  Msg::Debug("optimize geometry global (UV Laplacian): %li/%li free vertices, %li elements, SICN min: %.3f -> %.3f, SICN avg: %.3f -> %.3f, time: %.3fsec",
+      patch.intVertices.size(), patch.intVertices.size()+patch.bdrVertices.front().size(), patch.elements.size(),
+      stats.sicnMinBefore, stats.sicnMinAfter, stats.sicnAvgBefore, stats.sicnAvgAfter, stats.timeCpu);
+
+
+  return 0;
+}
+
+bool kernelLoopWithParametrization(
+    GFaceMeshPatch& patch,
+    const GeomOptimOptions& opt,
+    GeomOptimStats& stats) {
+
+  GFace* gf = patch.gf;
+  if (!gf->haveParametrization()) {
+    Msg::Error("optimize geometry kernel: face %i have no parametrization", gf->tag());
+    return false;
+  }
+
+  /* Data for smoothing */
+  std::vector<vec5> point_uv;
+  std::vector<size_t> one_ring_first;
+  std::vector<uint32_t> one_ring_values;
+  std::vector<MVertex*> new2old;
+  bool okb = buildUVSmoothingDataStructures(gf, patch.elements, patch.intVertices, point_uv,
+      one_ring_first, one_ring_values, new2old);
+  if (!okb) {
+    Msg::Error("optimize geometry kernel: failed to build adjacency datastructures");
+    return -1;
+  }
+  OneRing ring;
+  std::vector<vec5> ringGeometric(10);
+  if (gf->periodic(0)) ring.jump[0] = gf->period(0);
+  if (gf->periodic(1)) ring.jump[1] = gf->period(1);
+  ring.range[0] = gf->parBounds(0).high()-gf->parBounds(0).low();
+  ring.range[1] = gf->parBounds(1).high()-gf->parBounds(1).low();
+  ring.p_uv = ringGeometric.data();
+  const double sign = opt.invertCADNormals ? -1. : 1.;
+
+  size_t dmo_grid_width = 8;
+  size_t dmo_grid_depth = 3;
+  if (!haveNiceParametrization(gf)) {
+    dmo_grid_width = 12;
+    dmo_grid_depth = 4;
+  }
+
+  /* Initialization: all vertices unlocked */
+  std::vector<bool> locked(patch.intVertices.size(),false);
+  if (opt.qualityRangeTechnique) {
+    std::fill(locked.begin(),locked.end(),true);
+  }
+
+  /* Explicit smoothing loop */
+  const size_t nFree = patch.intVertices.size();
+  for (size_t iter = 0; iter < opt.outerLoopIterMax; ++iter) {
+    size_t nMoved = 0;
+    double iterQmin = 1.;
+
+    /* Loop over interior vertices */
+    for (size_t v = 0; v < nFree; ++v) {
+
+      /* Fill the OneRing geometric information */
+      ring.n = one_ring_first[v+1]-one_ring_first[v];
+      if (ring.n >= ringGeometric.size()) {
+        ringGeometric.resize(ring.n);
+        ring.p_uv = ringGeometric.data();
+      }
+      for (size_t lv = 0; lv < ring.n; ++lv) {
+        ring.p_uv[lv] = point_uv[one_ring_values[one_ring_first[v]+lv]];
+      }
+
+
+      /* Current position, normal and quality */
+      vec5 pos = point_uv[v];
+      vec3 normal = sign * gf->normal(SPoint2(pos[3],pos[4]));
+      if (length2(normal) == 0.) {
+        Msg::Warning("optimize geometry kernel: CAD normal length is 0 !");
+        continue;
+      }
+      normalize(normal);
+      double quality = computeQualityQuadOneRing(pos, ring, normal);
+
+      if (opt.qualityRangeTechnique && iter == 0) {
+        /* First iteration: unlocked low quality vertices */
+        if (quality < opt.qualityRangeMin) {
+          locked[v] = false;
+        } else {
+          continue;
+        }
+      }
+      if (opt.qualityRangeTechnique && quality > opt.qualityRangeMax) {
+        locked[v] = true;
+        continue;
+      }
+
+      /* Optimize vertex position with DMO (adaptive grid sampling) */
+      if (opt.qualityRangeTechnique || quality < opt.useDmoIfSICNbelow) {
+        vec5 newPos = dmoOptimizeVertexPosition(gf, pos, ring, dmo_grid_width, dmo_grid_depth, normal, quality);
+        point_uv[v] = newPos;
+        iterQmin = std::min(iterQmin,quality);
+        nMoved += 1;
+      }
+
+      if (opt.qualityRangeTechnique) {
+        if (quality > opt.qualityRangeTechnique) {
+          locked[v] = true;
+          continue;
+        } else { /* Unlock neighbors ! */
+          for (size_t lv = 0; lv < ring.n; ++lv) {
+            uint32_t v2 = one_ring_values[one_ring_first[v]+lv];
+            if (v2 < nFree) locked[v2] = false;
+          }
+        }
+      } else {
+        // TODO: lock vertex is local dx reduction
+      }
+    }
+    // DBG(iter, nMoved, iterQmin);
+  }
+
+  /* Update the positions */
+  for (size_t i = 0; i < patch.intVertices.size(); ++i) {
+    new2old[i]->setParameter(0,point_uv[i][3]);
+    new2old[i]->setParameter(1,point_uv[i][4]);
+    new2old[i]->setXYZ(point_uv[i][0],point_uv[i][1],point_uv[i][2]);
+  }
+
+  return true;
+}
+
+bool movePointWithKernelAndProjection(
+    uint32_t v,
+    const std::vector<std::array<double,3> >& points,
+    const std::vector<size_t>& one_ring_first,
+    const std::vector<uint32_t>& one_ring_values,
+    bool project,
+    SurfaceProjector* sp,
+    vec3& newPos,
+    vec2& newUv)
+{
+  if (project && sp == nullptr) {
+    Msg::Error("cannot project with surface projector");
+    return false;
+  }
+
+  size_t n = one_ring_first[v+1] - one_ring_first[v];
+  GPoint proj;
+  double stDx = 0.;
+  if (n == 8) { /* regular vertex */
+    /* Extract geometric stencil */
+    std::array<vec3,8> stencil = fillStencilRegular(v, points, one_ring_first, one_ring_values);
+
+    /* Smoothing (in 3D, not on surface) */
+    bool ok = kernelWinslow(stencil, newPos);
+    if (!ok) return false;
+
+    if (project) { /* Projection on surface */
+      proj = sp->closestPoint(newPos.data(), false, false);
+      if (!proj.succeeded()) {
+        Msg::Debug("kernel smoothing: projection failed");
+        return false;
+      }
+      newPos = {proj.x(),proj.y(),proj.z()};
+      newUv = {proj.u(),proj.v()};
+    }
+  } else { /* irregular vertex */
+    std::vector<vec3> stencilIrreg(8);
+
+    /* Extract geometric stencil */
+    constexpr bool oneOverTwo = true; /* angle-based does not use diagonals */
+    fillStencilIrregular(v, points, one_ring_first, one_ring_values, stencilIrreg, oneOverTwo);
+
+    /* Smoothing (in 3D, not on surface) */
+    bool ok = kernelAngleBased(points[v], stencilIrreg, newPos);
+    if (!ok) return false;
+
+    if (project) { /* Projection on surface */
+      proj = sp->closestPoint(newPos.data(), false, false);
+      if (!proj.succeeded()) {
+        Msg::Debug("kernel smoothing: projection failed");
+        return false;
+      }
+      newPos = {proj.x(),proj.y(),proj.z()};
+      newUv = {proj.u(),proj.v()};
+    }
+  }
+  return true;
+}
+
+bool kernelLoopWithProjection(
+    GFaceMeshPatch& patch,
+    const GeomOptimOptions& opt,
+    GeomOptimStats& stats) {
+  GFace* gf = patch.gf;
+  if (opt.sp == nullptr) {
+    Msg::Error("kernel loop with projection: no surface projector");
+    return false;
+  }
+
+  /* Data for smoothing */
+  std::vector<size_t> one_ring_first;
+  std::vector<uint32_t> one_ring_values;
+  std::vector<MVertex*> new2old;
+  unordered_map<MVertex*,uint32_t> old2new;
+  std::vector<std::array<double,3> > points;
+  {
+    std::vector<std::array<uint32_t,4> > quads;
+    std::vector<std::vector<uint32_t> > v2q;
+    std::vector<std::vector<uint32_t> > oneRings;
+    bool okc = buildCondensedStructure(patch.elements,patch.intVertices,
+        old2new,new2old, quads,v2q,oneRings,points);
+    if (!okc) {
+      Msg::Error("buildCondensedStructure: failed to build condensed representation");
+      return false;
+    }
+    compress(oneRings, one_ring_first, one_ring_values);
+  }
+  const size_t nFree = patch.intVertices.size();
+
+  std::vector<std::array<double,2> > point_uvs;
+  if (gf->haveParametrization()) {
+    point_uvs.resize(points.size());
+    for (size_t v = 0; v < nFree; ++v) {
+      new2old[v]->getParameter(0,point_uvs[v][0]);
+      new2old[v]->getParameter(1,point_uvs[v][1]);
+    }
+  }
+
+  /* Local sizes */
+  vector<double> localAvgSize(nFree,0.);
+  for (size_t v = 0; v < nFree; ++v) {
+    size_t n = one_ring_first[v+1] - one_ring_first[v];
+    if (n == 0) continue;
+    for (size_t lv = 0; lv < n; ++lv) {
+      uint32_t v2 = one_ring_values[one_ring_first[v]+lv];
+      localAvgSize[v] += length(points[v]-points[v2]);
+    }
+    localAvgSize[v] /= double(n);
+  }
+
+  bool project = true;
+  if (gf->geomType() == GFace::GeomType::Plane) project = false;
+
+  /* Initialization: all vertices unlocked */
+  std::vector<bool> locked(patch.intVertices.size(),false);
+
+  /* Explicit smoothing loop */
+  double t0 = Cpu();
+  double sum_dx0 = 0;
+  std::vector<vec3> stencilIrreg(10);
+  for (size_t iter = 0; iter < opt.outerLoopIterMax; ++iter) {
+    size_t nMoved = 0;
+
+    double sum_dx = 0.;
+    /* Loop over interior vertices */
+    for (size_t v = 0; v < nFree; ++v) {
+      if (locked[v]) continue;
+
+      vec3 newPos = points[v];
+      vec2 newUv;
+      if (point_uvs.size()) { newUv = point_uvs[v]; }
+
+      bool ok = movePointWithKernelAndProjection(v, points, one_ring_first, one_ring_values,
+          project, opt.sp, newPos, newUv);
+      if (ok) {
+        double dx = length(newPos - points[v]);
+        sum_dx += dx;
+        /* Modify the coordinates */
+        points[v] = newPos;
+        point_uvs[v] = newUv;
+        if (opt.localLocking && dx < opt.dxLocalMax*localAvgSize[v]) {
+          locked[v] = true;
+        } else {
+          nMoved += 1;
+        }
+      } else {
+        locked[v] = true;
+      }
+    }
+
+    if (iter == 0) {
+      sum_dx0 = sum_dx;
+    } else {
+      if (sum_dx < opt.dxGlobalMax * sum_dx0) break;
+      if (nMoved == 0) break;
+    }
+
+    if (Cpu() - t0 > opt.timeMax) break;
+  }
+
+  /* Update the positions */
+  for (size_t i = 0; i < patch.intVertices.size(); ++i) {
+    MVertex* v = new2old[i];
+    v->setXYZ(points[i][0],points[i][1],points[i][2]);
+    if (point_uvs.size()) {
+      v->setParameter(0,point_uvs[i][0]);
+      v->setParameter(1,point_uvs[i][1]);
+
+      SPoint3 query = v->point();
+      GPoint proj = gf->closestPoint(query, point_uvs[i].data());
+      if (proj.succeeded()) {
+        v->setXYZ(proj.x(),proj.y(),proj.z());
+        v->setParameter(0,proj.u());
+        v->setParameter(1,proj.v());
+      }
+    }
+  }
+
+  return true;
+}
+
+
+size_t nbVerticesOnBoundary(const GFaceMeshPatch& patch) {
+  size_t n = 0;
+  for (size_t i = 0; i < patch.bdrVertices.size(); ++i)
+    n += patch.bdrVertices[i].size();
+  return n;
+}
+
+bool patchOptimizeGeometryWithKernel(
+    GFaceMeshPatch& patch,
+    const GeomOptimOptions& opt,
+    GeomOptimStats& stats) {
+
+  /* Debug visualization */
+  bool debugCreateViews = DBG_VIZU_K;
+  if (Msg::GetVerbosity() >= 999
+      && CTX::instance()->debugSurface == patch.gf->tag()) {
+    debugCreateViews = true;
+  }
+  const int rdi = (int)(((double)rand()/RAND_MAX)*1e4); /* only to get a random name for debugging */
+
+
+  GFace* gf = patch.gf;
+  if (gf == NULL || patch.elements.size() == 0) return false;
+  if (patch.intVertices.size() == 0) return false;
+
+  stats.sicnMinBefore = -1.; /* if no element */
+  stats.sicnAvgBefore = -1.;
+  double t1 = Cpu();
+  computeSICN(patch.elements, stats.sicnMinBefore, stats.sicnAvgBefore);
+
+  if (patch.intVertices.size() == 0) {
+    Msg::Debug("optimize geometry kernel: no interior vertices (%li elements)",
+        patch.elements.size());
+    stats.sicnMinAfter = stats.sicnMinBefore;
+    stats.sicnAvgAfter = stats.sicnAvgBefore;
+    return true;
+  }
+
+  PatchGeometryBackup* backup = nullptr;
+  if (opt.withBackup) {
+    backup = new PatchGeometryBackup(patch);
+  }
+
+  bool useParam = gf->haveParametrization();
+  if (opt.sp != nullptr) useParam = false;
+  if (opt.force3DwithProjection) useParam = false;
+
+  if (debugCreateViews) {
+    std::string method = "K" + (useParam ? std::string("uv") : std::string("3d+p"));
+    GeoLog::add(patch.elements, "optim_"+method+"_IN_"+std::to_string(rdi) + "_" + std::to_string(stats.sicnAvgBefore));
+  }
+
+  if (useParam) {
+    bool okl = kernelLoopWithParametrization(patch, opt, stats);
+    if (!okl) {
+      Msg::Warning("optimize geometry kernel: the loop with param. failed (%li elements)",
+          patch.elements.size());
+      return -1;
+    }
+  } else {
+    bool okl = kernelLoopWithProjection(patch, opt, stats);
+    if (!okl) {
+      Msg::Warning("optimize geometry kernel: the loop with projection failed (%li elements)",
+          patch.elements.size());
+      return -1;
+    }
+  }
+
+  /* Statistics */
+  computeSICN(patch.elements, stats.sicnMinAfter, stats.sicnAvgAfter);
+
+  bool cancel = false;
+
+  if (opt.withBackup && backup && stats.sicnMinAfter < stats.sicnMinBefore) {
+    Msg::Debug("optimize geometry kernel: restore patch geometry with backup", patch.elements.size());
+    backup->restore();
+    stats.sicnMinAfter = stats.sicnMinBefore;
+    stats.sicnAvgAfter = stats.sicnAvgBefore;
+    cancel = true;
+  }
+
+  /* Debug visualization */
+  if (debugCreateViews) {
+    std::string method = "K" + (useParam ? std::string("uv") : std::string("3d+p"));
+    GeoLog::add(patch.elements, "optim_"+method+"_OUT_"+std::to_string(rdi) + "_" + std::to_string(stats.sicnAvgAfter));
+    GeoLog::flush();
+  }
+
+  double t2 = Cpu();
+  stats.timeCpu = t2 - t1;
+  stats.nFree = patch.intVertices.size();
+  stats.nLock = nbVerticesOnBoundary(patch);
+
+  if (backup) delete backup;
+
+  if (cancel) return true;
+
+  if (useParam) {
+    Msg::Debug("optimize geometry kernel (using CAD param): %li/%li free vertices, %li elements, SICN min: %.3f -> %.3f, SICN avg: %.3f -> %.3f, time: %.3fsec",
+        patch.intVertices.size(), stats.nFree + stats.nLock, patch.elements.size(),
+        stats.sicnMinBefore, stats.sicnMinAfter, stats.sicnAvgBefore, stats.sicnAvgAfter, stats.timeCpu);
+  } else {
+    Msg::Debug("optimize geometry kernel (using triangulation): %li/%li free vertices, %li elements, SICN min: %.3f -> %.3f, SICN avg: %.3f -> %.3f, time: %.3fsec",
+        patch.intVertices.size(), stats.nFree + stats.nLock, patch.elements.size(),
+        stats.sicnMinBefore, stats.sicnMinAfter, stats.sicnAvgBefore, stats.sicnAvgAfter, stats.timeCpu);
+  }
+
+  return true;
+}
+
+bool patchProjectOnSurface(GFaceMeshPatch& patch, SurfaceProjector* sp) {
+  Msg::Debug("patch surface projection (%i vertices) ...", patch.intVertices.size());
+  bool useParam = patch.gf->haveParametrization();
+  for (MVertex* v: patch.intVertices) {
+    GPoint proj;
+    if (sp != nullptr) {
+      /* Triangulation projection */
+      proj = sp->closestPoint(v->point().data(),false,false);
+      if (proj.succeeded()) {
+        v->setXYZ(proj.x(),proj.y(),proj.z());
+      }
+      if (useParam) {
+        /* CAD projection */
+        double uv[2] = {proj.u(),proj.v()};
+        GPoint proj2 = patch.gf->closestPoint(v->point(),uv);
+        if (proj2.succeeded()) {
+          v->setXYZ(proj2.x(),proj2.y(),proj2.z());
+          v->setParameter(0,proj2.u());
+          v->setParameter(1,proj2.v());
+        }
+      }
+    } else if (useParam) {
+      double uv[2];
+      v->getParameter(0,uv[0]);
+      v->getParameter(1,uv[1]);
+      /* CAD projection */
+      GPoint proj2 = patch.gf->closestPoint(v->point(),uv);
+      if (proj2.succeeded()) {
+        v->setXYZ(proj2.x(),proj2.y(),proj2.z());
+        v->setParameter(0,proj2.u());
+        v->setParameter(1,proj2.v());
+      }
+    } else {
+      Msg::Error("patch projection: no parametrization and no surface projector");
+      return false;
+    }
+  }
+  return true;
+}
+
+bool optimizeGeometryQuadMesh(GFace* gf, SurfaceProjector* sp, double timeMax)
+{
+  if (!gf->haveParametrization() && sp == nullptr) {
+    Msg::Error("optimize geometry: face %i, no CAD and no surface projector", gf->tag());
+    return false;
+  }
+
+  if (gf->quadrangles.size() == 0) {
+    Msg::Error("optimize geometry: face %i, no quads", gf->tag());
+    return false;
+  }
+
+  bool forceEvenIfBadBoundary = true;
+  GFaceMeshPatch patch;
+  bool okp = patchFromQuads(gf, gf->quadrangles, patch, forceEvenIfBadBoundary);
+  if (!okp) {
+    Msg::Warning("optimize geometry: face %i, failed to build patch", gf->tag());
+    return false;
+  }
+
+  bool debugCreateViews = DBG_VIZU_G;
+  if (Msg::GetVerbosity() >= 999
+      && CTX::instance()->debugSurface == patch.gf->tag()) {
+    debugCreateViews = true;
+  }
+  const int rdi = (int)(((double)rand()/RAND_MAX)*1e4); /* only to get a random name for debugging */
+
+  int countMax = 3;
+  bool running = true;
+  size_t niter = 50;
+  int count = 0;
+  if (gf->geomType() == GEntity::Plane) {
+    /* Much faster projection, we can smooth */
+    niter = 100;
+  }
+
+  double t0 = Cpu();
+
+  while (running && count < countMax) {
+    running = false;
+    count += 1;
+    if (Cpu() - t0 > timeMax) {
+      Msg::Debug("optimize geometry: face %i, reached time limit", gf->tag());
+      break;
+    }
+
+    PatchGeometryBackup backup(patch);
+
+    double minSICNb = DBL_MAX;
+    double avgSICNb = 0.;
+    computeSICN(patch.elements, minSICNb, avgSICNb);
+
+    if (debugCreateViews) {
+      std::string method = "GFace_K";
+      GeoLog::add(patch.elements, "optim_"+method+"_IN_"+std::to_string(rdi) + "_" + std::to_string(minSICNb));
+    }
+
+    GeomOptimStats stats;
+    GeomOptimOptions opt;
+    opt.sp = sp;
+    opt.outerLoopIterMax = niter;
+    opt.timeMax = timeMax;
+    opt.localLocking = true;
+    opt.dxGlobalMax = 1.e-3;
+    opt.dxLocalMax = 1.e-5;
+    opt.force3DwithProjection = true;
+    opt.withBackup = false;
+    double t1 = Cpu();
+    bool okk = kernelLoopWithProjection(patch, opt, stats);
+    if (!okk) {
+      return false;
+    }
+    double etime = Cpu() - t1;
+
+    double minSICNa = DBL_MAX;
+    double avgSICNa = 0.;
+    computeSICN(patch.elements, minSICNa, avgSICNa);
+
+    bool keep = true;
+    if (minSICNa < minSICNb && avgSICNa < avgSICNb) keep = false;
+    if (minSICNa < 0.1 && minSICNa < minSICNb) keep = false;
+    if (minSICNa < 0.75 * minSICNb) keep = false;
+
+    if (debugCreateViews) {
+      std::string method = "GFace_K";
+      GeoLog::add(patch.elements, "optim_"+method+"_OUT_"+std::to_string(rdi) + "_" + std::to_string(minSICNa) + "_keep=" + std::to_string(keep));
+    }
+
+    if (keep) {
+      Msg::Debug("- Face %i: kernel smoothing (Mix Winslow/Angle, explicit with projections, %li vertices, %li iter max, %.3f sec), SICN min: %f -> %f, avg: %f -> %f",
+          gf->tag(),gf->mesh_vertices.size(), niter,etime,minSICNb,minSICNa,avgSICNb,avgSICNa);
+      if (minSICNa >= minSICNb && 0.99*avgSICNa > avgSICNb && etime < 1) {
+        niter *= 1.5;
+        running = true;
+      }
+    } else {
+      Msg::Debug("- Face %i: worst quality after global smoothing (Mix Winslow/Angle, explicit, %li iter max), roll back (SICN min: %f -> %f, avg: %f -> %f)",
+          gf->tag(),niter,minSICNb,minSICNa,avgSICNb,avgSICNa);
+      backup.restore();
+      break;
+    }
+  }
+
+  return true;
+}
diff --git a/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.h b/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.h
new file mode 100644
index 0000000000000000000000000000000000000000..cdebf5df510fc1ab732dd18bcda4dca0ef29b07f
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtMeshGeometryOptimization.h
@@ -0,0 +1,122 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <float.h>
+#include "qmtMeshUtils.h"
+
+class SurfaceProjector;
+
+/**
+ * @brief Mesh optimization statistics
+ */
+struct GeomOptimStats {
+  size_t nFree = 0;
+  size_t nLock = 0;
+  double timeCpu = 0.;
+  size_t outerLoopIter = 0;
+  double sicnMinBefore = 0.;
+  double sicnMinAfter = 0.;
+  double sicnAvgBefore = 0.;
+  double sicnAvgAfter = 0.;
+  void print();
+};
+
+/**
+ * @brief Optimize the vertex position inside a patch by
+ *        smoothing the CAD parametric coordinates with
+ *        a Laplacian solver: Du=0, Dv=0
+ *        The patch boundary is fixed.
+ *        Use direct solver and arithmetric average to ensure
+ *        maximum principle.
+ *        Not always applicable: if no param, if the patch contains a CAD uv singularity
+ *
+ * @param[in,out] patch The mesh patch to smooth. The new positions and uv are directly updated 
+ *                      in the MVertex instances.
+ * @param[out] stats Some statistics on the smoothing
+ *
+ * @return 0 if success
+ */
+int patchOptimizeGeometryGlobal(
+    GFaceMeshPatch& patch, 
+    GeomOptimStats& stats);
+
+/**
+ * @brief Options for the kernel-based explicit untangling/smoothing.
+ * Kernels:
+ * - DMO (brute-force uv sampling) if low quality
+ * - Winslow if regular vertex
+ * - Angle-based smoothing is irregular vertex
+ */
+struct GeomOptimOptions {
+  double useDmoIfSICNbelow = 0.1; /* use the DMO kernel if SICN quality below threshold */
+  size_t outerLoopIterMax = 100; /* maximum number of loops over all vertices */
+  double timeMax = DBL_MAX; /* stop smoothing is timeMax elapsed */
+  bool invertCADNormals = false; /* invert the CAD normals for the quality computation */
+  SurfaceProjector* sp = nullptr; /* if present, surface projection is used instead of CAD */
+  double smartMinThreshold = -DBL_MAX; /* do not displace if inducing min(SICN) < smartMinThreshold */
+  bool qualityRangeTechnique = false;
+  bool localLocking = false; /* Lock if small displacement, unlocked neighbors else */
+  double dxLocalMax = 1.e-5; /* lock a vertex if dx < dxLocalMax * local_size */
+  double dxGlobalMax = 1.e-5; /* stop if sum(dx) < dxGlobalMax * sum(dx_0) */
+  double qualityRangeMin = 0.5;
+  double qualityRangeMax = 0.8;
+  bool withBackup = true; /* save the geometry before, restore if quality decreased */
+  bool force3DwithProjection = false;
+};
+
+/**
+ * @brief Optimize the mesh by iteratively moving the vertices (explicit approach).
+ *        The patch boundary is fixed.
+ *        Require a parametrization on the face.
+ *
+ * @param[in,out] patch The mesh patch to smooth. The new positions and uv are directly updated 
+ *                      in the MVertex instances.
+ * @param[in] opt The optimization parameters
+ * @param[out] stats Some statistics on the smoothing
+ *
+ * @return true if success
+ */
+bool patchOptimizeGeometryWithKernel(
+    GFaceMeshPatch& patch, 
+    const GeomOptimOptions& opt,
+    GeomOptimStats& stats);
+
+/**
+ * @brief Compute minimum and average SICN quality of elements
+ *
+ * @param[in] elements The elements on which to measure the quality
+ * @param[out] sicnMin Minimum element SICN quality
+ * @param[out] sicnAvg Average element SICN quality
+ */
+void computeSICN(const std::vector<MElement*>& elements, double& sicnMin, double& sicnAvg);
+
+
+/**
+ * @brief Project the patch interior vertices on the surface.
+ *        If no parametrization, only the SurfaceProjector is used.
+ *        If param, the SurfaceProjector is used as a initial guess.
+ *
+ * @param patch The patch containing the vertices
+ * @param sp If not nullptr, use it to project
+ *
+ * @return true if success
+ */
+bool patchProjectOnSurface(GFaceMeshPatch& patch, SurfaceProjector* sp = nullptr);
+
+/**
+ * @brief High-level function which try to make good parameter choices
+ *        automatically.
+ *
+ * @param gf The face containing the quad mesh to smooth
+ * @param sp Surface projector (faster than CAD projection)
+ * @param timeMax Time budget for the smoothing
+ *
+ * @return true if success
+ */
+bool optimizeGeometryQuadMesh(GFace* gf, SurfaceProjector* sp = nullptr, double timeMax = DBL_MAX);
diff --git a/contrib/QuadMeshingTools/qmtMeshUtils.cpp b/contrib/QuadMeshingTools/qmtMeshUtils.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..079b85e53e14a1bef3e8fc570f1af696de1c8154
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtMeshUtils.cpp
@@ -0,0 +1,1419 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtMeshUtils.h"
+
+/* System includes */
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <unordered_set>
+#include <cstdint>
+#include <cmath>
+#include <algorithm>
+#include <queue>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MTriangle.h"
+#include "MQuadrangle.h"
+#include "robin_hood.h"
+#include "meshOctreeLibOL.h"
+#include "BackgroundMesh.h"
+
+// /* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "arrayGeometry.h"
+#include "geolog.h"
+#include "gmsh.h"
+#include "row_echelon_integer.hpp"
+
+using namespace CppUtils;
+using std::unordered_map;
+using std::unordered_set;
+using std::vector;
+
+std::vector<GFace*> model_faces(const GModel* gm) {
+  std::vector<GFace*> faces;
+  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
+    faces.push_back(*it);
+  }
+  return faces;
+}
+
+std::vector<GEdge*> face_edges(const GFace* gf) {
+  std::vector<GEdge*> edges;
+  for (GEdge* ge: gf->edges()) {
+    edges.push_back(ge);
+  }
+  GFace* gfc = const_cast<GFace*>(gf);
+  for (GEdge* ge: gfc->embeddedEdges()) {
+    edges.push_back(ge);
+  }
+  sort_unique(edges);
+  return edges;
+}
+
+std::vector<GEdge*> model_edges(const GModel* gm) {
+  std::vector<GEdge*> edges;
+  std::vector<GFace*> faces = model_faces(gm);
+  for (GFace* gf: faces) append(edges,face_edges(gf));
+  sort_unique(edges);
+  return edges;
+}
+
+bool haveNiceParametrization(GFace* gf) {
+  if (!gf->haveParametrization()) return false;
+  if (gf->geomType() == GFace::GeomType::Sphere) return false;
+
+  // if (gf->periodic(0) || gf->periodic(1)) return false;
+
+  return true;
+}
+
+bool buildVertexToVertexMap(
+    const std::vector<MTriangle*>& triangles,
+    std::unordered_map<MVertex*,std::vector<MVertex*> >& v2v) {
+  v2v.clear();
+  v2v.rehash(3*triangles.size());
+
+  size_t N = 3;
+  for (MTriangle* f: triangles) {
+    for (size_t le = 0; le < N; ++le) {
+      MVertex* v1 = f->getVertex(le);
+      MVertex* v2 = f->getVertex((le+1)%N);
+      v2v[v1].push_back(v2);
+      v2v[v2].push_back(v1);
+    }
+  }
+  for (auto& kv: v2v) {
+    sort_unique(kv.second);
+  }
+
+  return true;
+}
+
+bool buildBoundary (const std::vector<MElement*>& elements, std::vector<MVertex*>& bnd){
+  std::vector<MEdge> eds,veds;
+
+  for (MElement* e: elements) {
+    for (size_t j=0;j<(size_t)e->getNumEdges();j++){
+      eds.push_back(e->getEdge(j));
+    }
+  }
+
+  MEdgeLessThan melt;
+  std::sort(eds.begin(),eds.end(), melt);
+  for(size_t i=0;i<eds.size();i++){
+    if (i != eds.size()-1 && eds[i] == eds[i+1])i++;
+    else veds.push_back(eds[i]);
+  }
+
+  std::vector<std::vector<MVertex *> > vsorted;
+  bool oks = SortEdgeConsecutive(veds, vsorted);
+  if (!oks) {
+    return false;
+  }
+  if (vsorted.empty()){
+    return false;
+  }
+  else if (vsorted.size() > 1){
+    Msg::Debug("buildBoundary(): %li loops instead of one\n",vsorted.size());
+    return false;
+  }
+
+  /* Reverse vertices if necessary, to keep coherent with elements orientation */
+  {
+    MEdge e = veds[0];
+    MVertex* v1 = e.getVertex(0);
+    MVertex* v2 = e.getVertex(1);
+    auto it = std::find(vsorted[0].begin(),vsorted[0].end(),v1);
+    if (it == vsorted[0].end()) {
+      Msg::Error("buildBoundary(): vertex not found in sorted vertices, weird");
+      return false;
+    }
+    size_t i = it - vsorted[0].begin();
+    size_t i_next = (i+1)%vsorted[0].size();
+    size_t i_prev = (i-1+vsorted[0].size())%vsorted[0].size();
+    if (vsorted[0][i_next] == v2) {
+      // good ordering
+    } else if (vsorted[0][i_prev] == v2) { // apply reverse
+      std::reverse(vsorted[0].begin(),vsorted[0].end());
+    } else {
+      Msg::Error("buildBoundary(): second vertex not found in adjacent sorted vertices, weird");
+      return false;
+    }
+  }
+  bnd = vsorted[0];
+  return true;
+}
+
+bool buildBoundaries(const std::vector<MElement*>& elements, std::vector<std::vector<MVertex*> >& loops) {
+  loops.clear();
+  std::vector<MEdge> eds,veds;
+
+  for (MElement* e: elements) {
+    for (size_t j=0;j<(size_t)e->getNumEdges();j++){
+      eds.push_back(e->getEdge(j));
+    }
+  }
+
+  MEdgeLessThan melt;
+  std::sort(eds.begin(),eds.end(), melt);
+  for(size_t i=0;i<eds.size();i++){
+    if (i != eds.size()-1 && eds[i] == eds[i+1])i++;
+    else veds.push_back(eds[i]);
+  }
+
+  if (veds.size() == 0) return true; /* No boundary, e.g. sphere */
+
+  std::vector<std::vector<MVertex *> > vsorted;
+  bool oks = SortEdgeConsecutive(veds, vsorted);
+  if (!oks || vsorted.empty()) {
+    return false;
+  }
+
+  /* Reverse vertices if necessary, to keep coherent with elements orientation */
+  for (size_t l = 0; l < vsorted.size(); ++l) {
+    std::vector<MVertex*>& loop = vsorted[l];
+    /* Find a MEdge on the loop */
+    MVertex* a = nullptr;
+    MVertex* b = nullptr;
+    for (MEdge e: veds) {
+      MVertex* v1 = e.getVertex(0);
+      MVertex* v2 = e.getVertex(1);
+      auto it = std::find(loop.begin(),loop.end(),v1);
+      if (it != loop.end()) {
+        /* v1 from the MEdge found on the loop */
+        a = v1;
+        b = v2;
+        break;
+      }
+    }
+    if (a == nullptr || b == nullptr) {
+      Msg::Error("buildBoundaries(): vertex not found in sorted vertices, weird");
+      return false;
+    }
+
+    auto it = std::find(loop.begin(),loop.end(),a);
+    size_t i = it - loop.begin();
+    size_t i_next = (i+1)%loop.size();
+    size_t i_prev = (i-1+loop.size())%loop.size();
+    if (loop[i_next] == b) {
+      // good ordering
+    } else if (loop[i_prev] == b) { // apply reverse
+      std::reverse(loop.begin(),loop.end());
+    } else {
+      Msg::Error("buildBoundaries(): second vertex not found in adjacent sorted vertices, weird");
+      return false;
+    }
+  }
+
+  loops = vsorted;
+  return true;
+}
+
+bool getConnectedComponents(const std::vector<MElement*>& elements,
+    std::vector<std::vector<MElement*> >& components) {
+  components.clear();
+
+  unordered_map<MVertex *, std::vector<MElement *> > v2q;
+  for (MElement* e: elements) {
+    for (size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+      v2q[e->getVertex(lv)].push_back(e);
+    }
+  }
+
+  unordered_map<MElement*,int> color;
+  int no = 0;
+  for (MElement* e0: elements) {
+    auto it = color.find(e0);
+    if (it != color.end()) continue;
+    no += 1;
+
+    std::vector<MElement*> current;
+    std::queue<MElement*> Q;
+    color[e0] = no;
+    Q.push(e0);
+    current.push_back(e0);
+
+    while (Q.size() > 0) {
+      MElement* e = Q.front();
+      Q.pop();
+      for (size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+        MVertex* v = e->getVertex(lv);
+        auto it = v2q.find(v);
+        if (it == v2q.end()) continue;
+        for (MElement* e2: it->second) if (e2 != e) {
+          auto it2 = color.find(e2);
+          if (it2 == color.end()) {
+            color[e2] = no;
+            Q.push(e2);
+            current.push_back(e2);
+          }
+        }
+      }
+    }
+
+    sort_unique(current);
+    components.push_back(current);
+  }
+
+  return true;
+}
+
+bool patchFromElements(GFace* gf, const std::vector<MElement*>& elements, GFaceMeshPatch& patch, bool forceEvenIfBadBoundary) {
+  patch.gf = gf;
+  bool okb = buildBoundaries(elements, patch.bdrVertices);
+  if (!okb) {
+    if (forceEvenIfBadBoundary) {
+      /* Boundaries are not manifold, put all vertices in a unordered loop */
+      patch.bdrVertices.resize(1);
+      patch.bdrVertices[0].clear();
+      for (MElement* e: elements)  {
+        for (size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+          MVertex* v = e->getVertex(lv);
+          if (v->onWhat() != gf) {
+            patch.bdrVertices[0].push_back(v);
+          }
+        }
+      }
+      sort_unique(patch.bdrVertices[0]);
+    } else {
+      return false;
+    }
+  }
+
+  /* Ensure no repetition in the boundary loops */
+  for (std::vector<MVertex*>& loop: patch.bdrVertices) {
+    if (loop.back() == loop.front()) loop.pop_back();
+  }
+
+  patch.intVertices.reserve(4*elements.size());
+  for (MElement* e: elements)  {
+    if (e == nullptr) {
+      Msg::Error("patchFromElements: given MElement* is nullptr");
+      return false;
+    }
+    for (size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+      patch.intVertices.push_back(e->getVertex(lv));
+    }
+  }
+  std::vector<MVertex*> bdr;
+  for (size_t i = 0; i < patch.bdrVertices.size(); ++i) append(bdr, patch.bdrVertices[i]);
+  patch.intVertices = difference(patch.intVertices, bdr);
+
+  /* Vertices associated to embedded GVertex/GEdge in GFace */
+  patch.embVertices.clear();
+  for (MVertex* v: patch.intVertices) {
+    if (v->onWhat()->cast2Face() == nullptr) { /* MVertex assigned to GVertex or GEdge */
+      patch.embVertices.push_back(v);
+    }
+  }
+  if (patch.embVertices.size() > 0) {
+    patch.intVertices = difference(patch.intVertices, patch.embVertices);
+  }
+
+  patch.elements = elements;
+
+  return true;
+}
+
+bool patchFromQuads(GFace* gf, const std::vector<MQuadrangle*>& quads, GFaceMeshPatch& patch, bool forceEvenIfBadBoundary) {
+  std::vector<MElement*> elts = dynamic_cast_vector<MQuadrangle*,MElement*>(quads);
+  return patchFromElements(gf, elts, patch, forceEvenIfBadBoundary);
+}
+
+struct as2Hash {
+  size_t operator()(std::array<size_t,2> p) const noexcept {
+    return size_t(p[0]) << 32 | p[1];
+  }
+};
+
+bool patchIsTopologicallyValid(const GFaceMeshPatch& patch) {
+  std::unordered_map<std::array<size_t,2>, size_t, as2Hash> edgeVal;
+  for (MElement* f: patch.elements) {
+    size_t n = f->getNumVertices();
+    for (size_t lv = 0; lv < n; ++lv) {
+      MVertex* v = f->getVertex(lv);
+      MVertex* v2 = f->getVertex((lv+1)%n);
+      if (v->getNum() < v2->getNum()) {
+        std::array<size_t,2> vpair = {v->getNum(),v2->getNum()};
+        edgeVal[vpair] += 1;
+      } else {
+        std::array<size_t,2> vpair =  {v2->getNum(),v->getNum()};
+        edgeVal[vpair] += 1;
+      }
+    }
+  }
+
+  for (auto& kv: edgeVal) {
+    if (kv.second > 2) {
+      Msg::Debug("patchIsTopologicallyValid | edge (%i,%i) non manifold, valence =  %i", kv.first[0],kv.first[1], kv.second);
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool GFaceMeshDiff::execute(bool verifyPatchTopology) {
+  if (gf != before.gf || gf != after.gf) return false;
+  if (after.elements.size() == 0) return false;
+  if (done) return false;
+  if (verifyPatchTopology) {
+    bool ok = patchIsTopologicallyValid(after);
+    if (!ok) return false;
+  }
+  if (before.bdrVertices.size() != after.bdrVertices.size()) {
+    Msg::Error("GFaceMeshDiff::execute(): different boundary size before/after, should not happen");
+    return false;
+  }
+
+  /* Replace the interior vertices */
+  while (before.intVertices.size() > 0) {
+    MVertex* ov = before.intVertices.back();
+    before.intVertices.pop_back();
+    auto it = std::find(gf->mesh_vertices.begin(),gf->mesh_vertices.end(), ov);
+    if (it == gf->mesh_vertices.end()) {
+      Msg::Error("GFaceMeshDiff::execute(): vertex %li (entity dim=%i) not found in gf->mesh_vertices (size %li), should NEVER happen, memory corrupted",
+          ov->getNum(), ov->onWhat()->dim(), gf->mesh_vertices.size());
+      if (Msg::GetVerbosity() >= 99) {
+        gmsh::initialize();
+        GeoLog::add(ov->point(),0.,"bad_property_v" + std::to_string(ov->getNum()));
+        GeoLog::flush();
+        gmsh::fltk::run();
+      }
+      abort();
+    }
+    if (after.intVertices.size() > 0) {
+      /* Replace old vertex by new one, in place */
+      MVertex* nv = after.intVertices.back();
+      after.intVertices.pop_back();
+      *it = nv;
+    } else {
+      it = gf->mesh_vertices.erase(it);
+    }
+    delete ov;
+  }
+  /* Append remaining vertices */
+  while (after.intVertices.size() > 0) {
+    MVertex* nv = after.intVertices.back();
+    after.intVertices.pop_back();
+    gf->addMeshVertex(nv);
+  }
+
+  /* Replace the elements */
+  while (before.elements.size() > 0) {
+    MElement* oe = before.elements.back();
+    before.elements.pop_back();
+    MQuadrangle* oq = dynamic_cast<MQuadrangle*>(oe);
+    MTriangle* ot = dynamic_cast<MTriangle*>(oe);
+    if (oq != nullptr) {
+      auto it = std::find(gf->quadrangles.begin(),gf->quadrangles.end(), oq);
+      if (it == gf->quadrangles.end()) {
+        Msg::Error("GFaceMeshDiff::execute(): quad not found in gf->quadrangles, should NEVER happen, memory corrupted");
+        abort();
+      }
+      if (after.elements.size() > 0) {
+        /* Replace old quad by new one, in place */
+        MQuadrangle* nq = dynamic_cast<MQuadrangle*>(after.elements.back());
+        if (nq != nullptr) {
+          after.elements.pop_back();
+          *it = nq;
+        } else {
+          it = gf->quadrangles.erase(it);
+        }
+      } else {
+        it = gf->quadrangles.erase(it);
+      }
+      delete oq;
+    } else if (ot != nullptr) {
+      auto it = std::find(gf->triangles.begin(),gf->triangles.end(), ot);
+      if (it == gf->triangles.end()) {
+        Msg::Error("GFaceMeshDiff::execute(): quad not found in gf->triangles, should NEVER happen, memory corrupted");
+        abort();
+      }
+      if (after.elements.size() > 0) {
+        /* Replace old triangle by new one, in place */
+        MTriangle* nt = dynamic_cast<MTriangle*>(after.elements.back());
+        if (nt != nullptr) {
+          after.elements.pop_back();
+          *it = nt;
+        } else {
+          it = gf->triangles.erase(it);
+        }
+      } else {
+        it = gf->triangles.erase(it);
+      }
+      delete ot;
+    } else {
+      Msg::Error("GFaceMeshDiff::execute(): element is not MQuadrangle and not MTriangle, should NEVER happen, memory corrupted");
+      abort();
+    }
+  }
+  /* Append remaining elements */
+  while (after.elements.size() > 0) {
+    MElement* ne = after.elements.back();
+    after.elements.pop_back();
+    gf->addElement(ne->getType(), ne);
+  }
+
+  done = true;
+  return true;
+}
+
+GFaceMeshDiff::~GFaceMeshDiff() {
+  if (done) {
+    /* execute() should have already cleared these vectors, just doing by security */
+    for (MVertex* v: before.intVertices) if (v != nullptr) {
+      delete v;
+      v = nullptr;
+    }
+    for (MElement* e: before.elements) if (e != nullptr) {
+      delete e;
+      e = nullptr;
+    }
+  } else {
+    for (MVertex* v: after.intVertices) if (v != nullptr) {
+      delete v;
+      v = nullptr;
+    }
+    for (MElement* e: after.elements) if (e != nullptr) {
+      delete e;
+      e = nullptr;
+    }
+  }
+}
+
+PatchGeometryBackup::PatchGeometryBackup(GFaceMeshPatch& p, bool includeBoundary) {
+  for (MVertex* v: p.intVertices) {
+    SPoint2 uv(DBL_MAX,DBL_MAX);
+    GFace* gf = dynamic_cast<GFace*>(v->onWhat());
+    if (gf != nullptr) {
+      MFaceVertex* mfv = dynamic_cast<MFaceVertex*>(v);
+      if (mfv != nullptr) {
+        mfv->getParameter(0,uv.data()[0]);
+        mfv->getParameter(1,uv.data()[1]);
+      }
+    }
+    old[v] = {uv,v->point()};
+  }
+  if (includeBoundary) {
+    for (std::vector<MVertex*>& bdr : p.bdrVertices) {
+      for (MVertex* v: bdr) {
+        SPoint2 uv(DBL_MAX,DBL_MAX);
+        GFace* gf = dynamic_cast<GFace*>(v->onWhat());
+        if (gf != nullptr) {
+          MFaceVertex* mfv = dynamic_cast<MFaceVertex*>(v);
+          if (mfv != nullptr) {
+            mfv->getParameter(0,uv.data()[0]);
+            mfv->getParameter(1,uv.data()[1]);
+          }
+        }
+        old[v] = {uv,v->point()};
+      }
+    }
+  }
+}
+
+bool PatchGeometryBackup::restore() {
+  for (auto& kv: old) {
+    MVertex* v = kv.first;
+    SPoint2 uv = kv.second.first;
+    SPoint3 pt = kv.second.second;
+    if (uv.x() != DBL_MAX) {
+      v->setParameter(0,uv.x());
+      v->setParameter(1,uv.y());
+    }
+    v->setXYZ(pt.x(),pt.y(),pt.z());
+  }
+  return true;
+}
+
+MVertex* centerOfElements(const std::vector<MElement*>& elements) {
+  if (elements.size() == 0) return NULL;
+
+  std::map<std::array<MVertex*,2>,size_t> vPairCount;
+  unordered_map<MVertex*, unordered_set<MVertex*> > v2v;
+  for (MElement* f: elements) {
+    size_t N = f->getNumEdges();
+    for (size_t le = 0; le < N; ++le) {
+      MVertex* v1 = f->getVertex(le);
+      MVertex* v2 = f->getVertex((le+1)%N);
+      v2v[v1].insert(v2);
+      v2v[v2].insert(v1);
+      std::array<MVertex*,2> vPair = {v1,v2};
+      if (v2 < v1) {
+        vPair = {v2,v1};
+      }
+      vPairCount[vPair] += 1;
+    }
+  }
+
+  /* Init from boundary */
+  unordered_map<MVertex*,double> dist;
+  std::priority_queue<std::pair<double,MVertex*>,  std::vector<std::pair<double,MVertex*> >,  std::greater<std::pair<double,MVertex*> > > Q;
+  for (const auto& kv: vPairCount) if (kv.second == 1) {
+    dist[kv.first[0]] = 0.;
+    dist[kv.first[1]] = 0.;
+    Q.push({0.,kv.first[0]});
+    Q.push({0.,kv.first[1]});
+  }
+
+  /* Dijkstra propagation */
+  while (Q.size() > 0) {
+    MVertex* v = Q.top().second;
+    double cdist = Q.top().first;
+    Q.pop();
+    for (MVertex* v2: v2v[v]) {
+      double w_ij = v->distance(v2);
+      auto it = dist.find(v2);
+      if (it == dist.end() || cdist + w_ij < it->second) {
+        double new_dist = cdist + w_ij;
+        dist[v2] = cdist + w_ij;
+        Q.push({new_dist,v2});
+      }
+    }
+  }
+
+  double dmax = 0.;
+  MVertex* center = NULL;
+  for (const auto& kv: dist) {
+    if (kv.second > dmax) {
+      dmax = kv.second;
+      center = kv.first;
+    }
+  }
+  return center;
+}
+
+bool setVertexGFaceUV(GFace* gf, MVertex* v, double uv[2]) {
+  bool onGf = (dynamic_cast<GFace*>(v->onWhat()) == gf);
+  if (onGf) {
+    v->getParameter(0,uv[0]);
+    v->getParameter(1,uv[1]);
+    return true;
+  } else {
+    GEdge* ge = dynamic_cast<GEdge*>(v->onWhat());
+    if (ge != NULL) {
+      double t;
+      v->getParameter(0,t);
+      SPoint2 uvp = ge->reparamOnFace(gf, t, -1);
+      uv[0] = uvp.x();
+      uv[1] = uvp.y();
+      return true;
+    } else {
+      GVertex* gv = dynamic_cast<GVertex*>(v->onWhat());
+      if (gv != NULL) {
+        SPoint2 uvp = gv->reparamOnFace(gf,0);
+        uv[0] = uvp.x();
+        uv[1] = uvp.y();
+        return true;
+      }
+    }
+  }
+  uv[0] = 0.;
+  uv[1] = 0.;
+  return false;
+}
+
+bool orientElementsAccordingToBoundarySegment(MVertex* a, MVertex* b, std::vector<MElement*>& elements) {
+  int reorient = 0;
+  for (MElement* e: elements) {
+    size_t n = e->getNumVertices();
+    for (size_t lv = 0; lv < n; ++lv) {
+      MVertex* v0 = e->getVertex(lv);
+      MVertex* v1 = e->getVertex((lv+1)%n);
+      if (v0 == a && v1 == b) {
+        reorient = -1;
+        break;
+      } else if (v0 == b && v1 == a) {
+        reorient = 1;
+        break;
+      }
+    }
+    if (reorient != 0) break;
+  }
+  if (reorient == 1) {
+    for (MElement* e: elements) {
+      e->reverse();
+    }
+  } else if (reorient == 0) {
+    Msg::Error("orientElementsAccordingToBoundarySegment: bdr quad edge not found, weird");
+    return false;
+  }
+  return true;
+}
+
+void getAllParametersWithPeriodJump(MVertex *v, GFace *gf, std::vector<SPoint2> &params)
+{
+  params.clear();
+
+  if(gf->geomType() == GEntity::DiscreteSurface) {
+    params.push_back(gf->parFromPoint(SPoint3(v->x(), v->y(), v->z())));
+    return;
+  }
+
+  if(v->onWhat()->dim() == 0) {
+    GVertex *gv = (GVertex *)v->onWhat();
+    std::vector<GEdge *> const &ed = gv->edges();
+    bool seam = false;
+    for(auto it = ed.begin(); it != ed.end(); it++) {
+      if((*it)->isSeam(gf)) {
+        Range<double> range = (*it)->parBounds(0);
+        if(gv == (*it)->getBeginVertex()) {
+          params.push_back((*it)->reparamOnFace(gf, range.low(), -1));
+          params.push_back((*it)->reparamOnFace(gf, range.low(), 1));
+        }
+        if(gv == (*it)->getEndVertex()) {
+          params.push_back((*it)->reparamOnFace(gf, range.high(), -1));
+          params.push_back((*it)->reparamOnFace(gf, range.high(), 1));
+        }
+        if(gv != (*it)->getBeginVertex() && gv != (*it)->getEndVertex()) {
+          Msg::Warning("Strange!");
+        }
+        seam = true;
+      }
+    }
+    if(!seam) params.push_back(gv->reparamOnFace(gf, 1));
+  }
+  else if(v->onWhat()->dim() == 1) {
+    GEdge *ge = (GEdge *)v->onWhat();
+    if(!ge->haveParametrization()) return;
+    double UU;
+    v->getParameter(0, UU);
+    if(UU == 0.0) UU = ge->parFromPoint(v->point());
+    params.push_back(ge->reparamOnFace(gf, UU, 1));
+    if(ge->isSeam(gf)) params.push_back(ge->reparamOnFace(gf, UU, -1));
+  }
+  else {
+    double UU, VV;
+    if(v->onWhat() == gf && v->getParameter(0, UU) && v->getParameter(1, VV)) {
+      params.push_back(SPoint2(UU, VV));
+      if (gf->periodic(0) && gf->periodic(1)) {
+        double Tu = gf->period(0);
+        double Tv = gf->period(1);
+        params.push_back(SPoint2(UU+Tu, VV+Tv));
+        params.push_back(SPoint2(UU+Tu, VV-Tv));
+        params.push_back(SPoint2(UU-Tu, VV+Tv));
+        params.push_back(SPoint2(UU-Tu, VV-Tv));
+      } else if (gf->periodic(0)) {
+        double Tu = gf->period(0);
+        params.push_back(SPoint2(UU+Tu, VV));
+        params.push_back(SPoint2(UU-Tu, VV));
+      } else if (gf->periodic(1)) {
+        double Tv = gf->period(1);
+        params.push_back(SPoint2(UU, VV+Tv));
+        params.push_back(SPoint2(UU, VV-Tv));
+      }
+    }
+  }
+}
+
+bool reparamMeshVertexOnFaceWithRef(GFace* gf, MVertex* v, const SPoint2& ref, SPoint2& param) {
+  std::vector<SPoint2> p1s;
+  getAllParametersWithPeriodJump(v, gf, p1s);
+  if (p1s.size() == 0) {
+    return false;
+  } else if (p1s.size() == 0) {
+    param = p1s[0];
+    return true;
+  }
+
+  double dmin2 = DBL_MAX;
+  for (size_t i = 0; i < p1s.size(); ++i) {
+    const SPoint2& uv = p1s[i];
+    double d2 = std::pow(uv.x()-ref.x(),2)+ std::pow(uv.y()-ref.y(),2);
+    if (d2 < dmin2) {
+      dmin2 = d2;
+      param = uv;
+    }
+  }
+  return true;
+}
+
+std::vector<SPoint2> paramOnElement(GFace* gf, MElement* t) {
+  if (t == nullptr) return {};
+  const size_t n = t->getNumVertices();
+  std::vector<SPoint2> uvs(n,SPoint2(0.,0.));
+
+  bool reparam = false;
+  for (size_t lv = 0; lv < n; ++lv) {
+    MVertex* v = t->getVertex(lv);
+    bool onGf = (dynamic_cast<GFace*>(v->onWhat()) == gf);
+    if (onGf) {
+      v->getParameter(0,uvs[lv][0]);
+      v->getParameter(1,uvs[lv][1]);
+    } else {
+      reparam = true;
+    }
+  }
+
+  if (reparam) {
+    bool found = false;
+    for (size_t lv = 0; lv < n; ++lv) {
+      MVertex* v = t->getVertex(lv);
+      bool onGf = (dynamic_cast<GFace*>(v->onWhat()) == gf);
+      if (onGf) {
+        v->getParameter(0,uvs[lv][0]);
+        v->getParameter(1,uvs[lv][1]);
+        for (size_t k = 1; k < n; ++k) {
+          MVertex* v2 = t->getVertex((lv+k)%n);
+          reparamMeshVertexOnFaceWithRef(gf, v2, uvs[lv], uvs[(lv+k)%n]);
+        }
+        found = true;
+        break;
+      }
+    }
+    if (!found) {
+      /* Element with no vertex inside the GFace, difficult to get
+       * good UV parametrization, we use center projection to get
+       * a initial guess */
+      SPoint3 center = t->barycenter();
+      double initialGuess[2] = {0.,0.};
+      GPoint proj = gf->closestPoint(center,initialGuess);
+      if (proj.succeeded()) {
+        SPoint2 ref(proj.u(),proj.v());
+        for (size_t k = 0; k < n; ++k) {
+          MVertex* v = t->getVertex(k);
+          reparamMeshVertexOnFaceWithRef(gf, v, ref, uvs[k]);
+        }
+      } else {
+        Msg::Error("parametrization not found for element");
+      }
+    }
+  }
+  return uvs;
+}
+
+std::vector<MTriangle*> trianglesFromQuads(const std::vector<MQuadrangle*>& quads) {
+  std::vector<MTriangle*> tris;
+  tris.reserve(2*quads.size());
+  for (MQuadrangle* q: quads) {
+    MTriangle *t11 = new MTriangle(q->getVertex(0), q->getVertex(1), q->getVertex(2));
+    MTriangle *t12 = new MTriangle(q->getVertex(0), q->getVertex(2), q->getVertex(3));
+    tris.push_back(t11);
+    tris.push_back(t12);
+  }
+  return tris;
+}
+
+bool getGFaceTriangles(GFace* gf, std::vector<MTriangle*>& triangles, bool& requireDelete) {
+  triangles.clear();
+  requireDelete = false;
+
+  /* Existing pure tri or pure quad mesh on the GFace */
+  if (gf->triangles.size() > 0 && gf->quadrangles.size() == 0) {
+    triangles = gf->triangles;
+    requireDelete = false;
+    return true;
+  } else if (gf->triangles.size() == 0 && gf->quadrangles.size() > 0) {
+    triangles = trianglesFromQuads(gf->quadrangles);
+    requireDelete = true;
+    return true;
+  }
+
+  /* Check if there is the quadqs background mesh */
+  const std::string BMESH_NAME = "bmesh_quadqs";
+  if (backgroudMeshExists(BMESH_NAME)) {
+    GlobalBackgroundMesh& bmesh = getBackgroundMesh(BMESH_NAME);
+    auto it = bmesh.faceBackgroundMeshes.find(gf);
+    if (it != bmesh.faceBackgroundMeshes.end() && it->second.triangles.size() > 0) {
+      /* Get pointers to triangles in the background mesh */
+      triangles.resize(it->second.triangles.size());
+      for (size_t i = 0; i < it->second.triangles.size(); ++i) {
+        triangles[i] = &(it->second.triangles[i]);
+      }
+      requireDelete = false;
+      return true;
+    }
+  }
+
+  /* Check if there is another background mesh */
+  for (auto& bmesh: global_bmeshes) {
+    auto it = bmesh->faceBackgroundMeshes.find(gf);
+    if (it != bmesh->faceBackgroundMeshes.end() && it->second.triangles.size() > 0) {
+      /* Get pointers to triangles in the background mesh */
+      triangles.resize(it->second.triangles.size());
+      for (size_t i = 0; i < it->second.triangles.size(); ++i) {
+        triangles[i] = &(it->second.triangles[i]);
+      }
+      requireDelete = false;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool fillSurfaceProjector(GFace* gf, SurfaceProjector* sp) {
+  if (sp == nullptr) {
+    Msg::Error("fillSurfaceProjector: given SurfaceProjector* is null !");
+    abort();
+  }
+
+  if (gf->geomType() == GFace::GeomType::Sphere) {
+    bool oka = sp->setAnalyticalProjection(gf);
+    return oka;
+  }
+
+  bool deleteTheTris = false;
+  std::vector<MTriangle*> triangles;
+  bool okgt = getGFaceTriangles(gf, triangles, deleteTheTris);
+  if (!okgt) {
+    Msg::Error("fillSurfaceProjector: case not supported, no triangles");
+    return false;
+  }
+
+  bool oki = sp->initialize(gf, triangles);
+  if (!oki) {
+    Msg::Error("failed to initialize the surface projector");
+  }
+
+  if (deleteTheTris) {
+    for (MTriangle* t: triangles) delete t;
+  }
+
+  return true;
+}
+
+int surfaceEulerCharacteristicDiscrete(const std::vector<MTriangle*>& triangles) {
+  if (triangles.size() == 0) {
+    Msg::Error("no triangulation for face, cannot compute discrete Euler characteristic");
+    return std::numeric_limits<int>::max();
+  }
+  std::vector<size_t> vertices;
+  std::vector<std::array<size_t,2> > edges;
+  vertices.reserve(3*triangles.size());
+  edges.reserve(3*triangles.size());
+  for (MTriangle* t: triangles) {
+    for (size_t lv = 0; lv < 3; ++lv) {
+      size_t v1 = t->getVertex(lv)->getNum();
+      size_t v2 = t->getVertex((lv+1)%3)->getNum();
+      std::array<size_t,2> vPair = {v1,v2};
+      if (v1 > v2) vPair = {v2,v1};
+      edges.push_back(vPair);
+      vertices.push_back(v1);
+    }
+  }
+  sort_unique(vertices);
+  sort_unique(edges);
+  int S = triangles.size();
+  int E = edges.size();
+  int V = vertices.size();
+  return V - E + S;
+}
+
+inline void normalize_accurate(SVector3& a) {
+  double amp = std::abs(a.data()[0]);
+  amp = std::max(amp,std::abs(a.data()[1]));
+  amp = std::max(amp,std::abs(a.data()[2]));
+  if (amp == 0.) {
+    return;
+  }
+  a = amp * a;
+  a.normalize();
+}
+
+inline double angleVectors(SVector3 a, SVector3 b) {
+  if (a.normSq() == 0. || b.normSq() == 0.) return DBL_MAX;
+  normalize_accurate(a);
+  normalize_accurate(b);
+  return acos(ArrayGeometry::clamp(dot(a,b),-1.,1.));
+}
+
+bool fillGFaceInfo(GFace* gf, GFaceInfo& info, const std::vector<MTriangle*>& triangles) {
+  info.gf = gf;
+  info.chi = 0;
+  info.cornerIsNonManifold.clear();
+  for (auto& a: info.bdrValVertices) a.clear();
+  info.intSumVal3mVal5 = 0;
+
+  /* Compute geometric info */
+  robin_hood::unordered_map<GVertex*,std::vector<MElement*> > corner2tris;
+  robin_hood::unordered_map<GVertex*,double> corner2angle;
+  for (MTriangle* t: triangles) {
+    for (size_t lv = 0; lv < 3; ++lv) {
+      MVertex* v = t->getVertex(lv);
+      GVertex* gv = v->onWhat()->cast2Vertex();
+      if (gv != nullptr) {
+        MVertex* vPrev = t->getVertex((3+lv-1)%3);
+        MVertex* vNext = t->getVertex((lv+1)%3);
+        SVector3 pNext = vNext->point();
+        SVector3 pPrev = vPrev->point();
+        SVector3 pCurr = v->point();
+        double agl = angleVectors(pNext-pCurr,pPrev-pCurr);
+        corner2tris[gv].push_back(t);
+        corner2angle[gv] += agl;
+      }
+    }
+  }
+  robin_hood::unordered_set<GVertex*> boundaryCADcorners;
+  for (GEdge* ge: gf->edges()) for (GVertex* gv: ge->vertices()) {
+    boundaryCADcorners.insert(gv);
+  }
+
+  for (const auto& kv: corner2tris) {
+    GVertex* gv = kv.first;
+    /* Check if corner is manifold */
+    {
+      auto it = boundaryCADcorners.find(gv);
+      if (it == boundaryCADcorners.end()) continue; /* ignore interior GVertex */
+    }
+    std::vector<MElement*> elts = kv.second;
+    std::vector<MVertex*> bnd;
+    bool okb = buildBoundary(elts, bnd);
+    if (!okb) {
+      info.cornerIsNonManifold.insert(gv);
+      continue;
+    }
+    double angle = corner2angle[gv];
+    double angle_deg = 180. / M_PI * angle;
+    if (angle_deg < 90. + 45.) {
+      info.bdrValVertices[1].insert(gv);
+    } else if (angle_deg < 180. + 45.) {
+      info.bdrValVertices[2].insert(gv);
+    } else if (angle_deg < 270. + 45.) {
+      info.bdrValVertices[3].insert(gv);
+    } else if (angle_deg < 360.) {
+      info.bdrValVertices[4].insert(gv);
+    } else {
+      Msg::Warning("CAD vertex (surf=%i,node=%i) has angle = %f deg (interior node ?)", gf->tag(), gv->tag(), angle_deg);
+      continue;
+    }
+  }
+  info.chi = surfaceEulerCharacteristicDiscrete(triangles);
+
+  /* discrete topological relations between irregular vertices:
+   *  sum3m5 = n_val3 - n_val5 = 4 \chi + m_val3 - m_val1  + 2 m_val4 */
+  info.intSumVal3mVal5 = 4*info.chi + int(info.bdrValVertices[3].size())
+    - int(info.bdrValVertices[1].size()) + 2 * int(info.bdrValVertices[4].size());
+
+  return true;
+
+}
+
+bool fillGFaceInfo(GFace* gf, GFaceInfo& info) {
+  info.gf = gf;
+  info.chi = 0;
+  info.cornerIsNonManifold.clear();
+  for (auto& a: info.bdrValVertices) a.clear();
+  info.intSumVal3mVal5 = 0;
+
+
+  bool deleteTheTris = false;
+  std::vector<MTriangle*> triangles;
+  bool okgt = getGFaceTriangles(gf, triangles, deleteTheTris);
+  if (!okgt) {
+    Msg::Error("fillSurfaceProjector: case not supported, no triangles");
+    return false;
+  }
+
+  bool okr = fillGFaceInfo(gf, info, triangles);
+
+  if (deleteTheTris) {
+    for (MTriangle* t: triangles) delete t;
+  }
+
+  return okr;
+}
+
+bool isTopologicalDisk(const GFaceInfo& info) {
+  return info.chi == 1;
+}
+
+bool haveConcaveCorners(const GFaceInfo& info) {
+  if (info.bdrValVertices[3].size() > 0 || info.bdrValVertices[4].size() > 0) {
+    return true;
+  }
+  return false;
+}
+
+bool faceOrderedSideLoops(GFace* gf, const GFaceInfo& info,
+    std::vector<std::vector<std::vector<std::pair<GEdge*,bool> > > >& loopSideEdgesAndInv) {
+  if (info.gf != gf) return false;
+  loopSideEdgesAndInv.clear();
+
+  std::unordered_set<GVertex*> isCorner;
+  for (GVertex* gv: info.bdrValVertices[1]) isCorner.insert(gv);
+  for (GVertex* gv: info.bdrValVertices[3]) isCorner.insert(gv);
+  for (GVertex* gv: info.bdrValVertices[4]) isCorner.insert(gv);
+
+  const std::vector<GEdge *>& edges = gf->edges();
+  std::unordered_map<GVertex*, std::vector<GEdge*> > v2e;
+  for (GEdge* ge: edges) {
+    for (GVertex* gv: ge->vertices()) v2e[gv].push_back(ge);
+  }
+  for (auto& kv: v2e) sort_unique(kv.second);
+
+
+  std::unordered_set<GEdge*> visited;
+
+  int withCorner = 0;
+  int withoutCorner = 1;
+  for (int pass: {withCorner, withoutCorner}) {
+    for (GEdge* e0: edges) {
+      bool already = (visited.find(e0) != visited.end());
+      if (already) continue;
+
+      if (e0->periodic(0)) {
+        /* New loop with a single periodic GEdge */
+        loopSideEdgesAndInv.resize(loopSideEdgesAndInv.size()+1);
+        loopSideEdgesAndInv.back() = { { {e0,false} }  };
+        visited.insert(e0);
+        continue;
+      }
+
+      GVertex* v1 = e0->vertices()[0];
+      GVertex* v2 = e0->vertices()[1];
+      if (pass == withCorner) {
+        bool v1IsCorner = (isCorner.find(v1) != isCorner.end());
+        if (!v1IsCorner) continue;
+      }
+
+      /* New loop */
+      loopSideEdgesAndInv.resize(loopSideEdgesAndInv.size()+1);
+
+
+      if (pass == withoutCorner) { /* New side from no corner */
+        loopSideEdgesAndInv.back().resize(loopSideEdgesAndInv.back().size()+1);
+      }
+
+      size_t infLoop = 0;
+      GVertex* v = v1;
+      GEdge* e = e0;
+      bool inv = false;
+      do {
+        infLoop += 1;
+        if (infLoop > 1e6) {
+          Msg::Warning("infinite loop in edges of face %i, cancel simple quad mesh", gf->tag());
+          return -1;
+        }
+        bool vIsCorner = (isCorner.find(v) != isCorner.end());
+        if (vIsCorner) { /* new side in current loop */
+          loopSideEdgesAndInv.back().resize(loopSideEdgesAndInv.back().size()+1);
+        }
+        v1 = e->vertices()[0];
+        v2 = e->vertices()[1];
+
+        inv = (v == v2);
+
+        loopSideEdgesAndInv.back().back().push_back({e,inv});
+
+        visited.insert(e);
+
+        GVertex* v_next = NULL;
+        if (v2 != v) {
+          v_next = v2;
+        } else {
+          v_next = v1;
+        }
+        GEdge* e_next = NULL;
+        if (v2e[v_next].size() == 2) {
+          e_next = (v2e[v_next][0] != e) ? v2e[v_next][0] : v2e[v_next][1];
+        } else {
+          Msg::Warning("non manifold edge loop around face %li, cancel simple quad mesh", gf->tag());
+          return -1;
+        }
+
+        e = e_next;
+        v = v_next;
+      } while (e != e0);
+    }
+  }
+
+  // Msg::Warning("- Face %i: %li loops", gf->tag(), loopSideEdgesAndInv.size());
+  // for (size_t i = 0; i < loopSideEdgesAndInv.size(); ++i) {
+  //   Msg::Warning("-      loop %li: %li sides", i, loopSideEdgesAndInv[i].size());
+  //   for (size_t j = 0; j < loopSideEdgesAndInv[i].size(); ++j) {
+  //     Msg::Warning("-          side %li: %li edges ", j, loopSideEdgesAndInv[i][j].size());
+  //   }
+  // }
+
+  return true;
+}
+
+bool appendCADStatistics(GModel* gm, std::unordered_map<std::string,double>& stats, const std::string& prefix) {
+  stats[prefix+"n_corners"] = double(gm->getVertices().size());
+  stats[prefix+"n_curves"] = double(model_edges(gm).size());
+  stats[prefix+"n_faces"] = double(model_faces(gm).size());
+  stats[prefix+"n_volumes"] = double(gm->getRegions().size());
+  return true;
+}
+
+bool appendQuadMeshStatistics(GModel* gm, std::unordered_map<std::string,double>& stats, const std::string& prefix) {
+  Msg::Debug("compute quad mesh statistics ...");
+  /* Stats on regularity of vertices */
+  std::vector<MQuadrangle*> all_quads;
+  {
+    std::vector<int> nValFace(10,0);
+    std::vector<int> nValCurve(10,0);
+    std::vector<int> nValCorner(10,0);
+    double nVert = 0.; /* repetition on shared GVertex / GEdge */
+    double nQuad = 0.;
+    for (GFace* gf: model_faces(gm)) {
+      append(all_quads,gf->quadrangles);
+      unordered_map<MVertex *, std::vector<MElement *> > adj;
+      for (MQuadrangle* f: gf->quadrangles) {
+        nQuad += 1.;
+        for (size_t lv = 0; lv < 4; ++lv) {
+          MVertex* v = f->getVertex(lv);
+          adj[v].push_back(f);
+        }
+      }
+      for (auto& kv: adj) {
+        nVert += 1.;
+        MVertex* v = kv.first;
+        GEntity* ent = v->onWhat();
+        bool onCorner = (dynamic_cast<GVertex*>(ent) != NULL);
+        bool onCurve = (dynamic_cast<GEdge*>(ent) != NULL);
+        bool onFace = (dynamic_cast<GFace*>(ent) != NULL);
+        int val = (int) kv.second.size();
+        if (onCorner) {
+          if ((size_t)val >= nValCorner.size()) nValCorner.resize(val+1);
+          nValCorner[val] += 1;
+        } else if (onCurve) {
+          if ((size_t)val >= nValCurve.size()) nValCurve.resize(val+1);
+          nValCurve[val] += 1;
+        } else if (onFace) {
+          if ((size_t)val >= nValFace.size()) nValFace.resize(val+1);
+          nValFace[val] += 1;
+        }
+      }
+    }
+    double regular = 0.;
+    double irregular = 0.;
+    double very_irregular = 0.;
+    double val3 = 0.;
+    double val5 = 0.;
+    for (size_t val = 0; val < nValCurve.size(); ++val) {
+      if (val == 2) {
+        regular += double(nValCurve[val]);
+      } else if (val == 1 || val == 3){
+        irregular += double(nValCurve[val]);
+      } else {
+        very_irregular += double(nValCurve[val]);
+      }
+    }
+    for (size_t val = 0; val < nValFace.size(); ++val) {
+      if (val == 4) {
+        regular += double(nValFace[val]);
+      } else if (val == 3) {
+        irregular += double(nValFace[val]);
+        val3 += double(nValFace[val]);
+      } else if (val == 5) {
+        irregular += double(nValFace[val]);
+        val5 += double(nValFace[val]);
+      } else {
+        very_irregular += double(nValFace[val]);
+      }
+    }
+    stats[prefix+"n_quads"] = nQuad;
+    stats[prefix+"n_vertices"] = nVert;
+    stats[prefix+"n_regular"] = regular;
+    stats[prefix+"n_irregular"] = irregular;
+    stats[prefix+"n_very_irregular"] = very_irregular;
+    stats[prefix+"n_val3"] = val3;
+    stats[prefix+"n_val5"] = val5;
+  }
+
+  /* Quality stats */
+  if (all_quads.size() > 0){
+    std::vector<double> quality(all_quads.size());
+    std::vector<double> edgeLen(4*all_quads.size());
+    double edge_len_min = DBL_MAX;
+    double edge_len_avg = 0.;
+    double edge_len_max = 0.;
+    double edge_n = 0.;
+    double avg = 0.;
+    for (size_t f = 0; f < all_quads.size(); ++f) {
+      quality[f] = all_quads[f]->minSICNShapeMeasure();
+      avg += quality[f];
+      for (size_t le = 0; le < 4; ++le) {
+        SPoint3 p1 = all_quads[f]->getVertex(le)->point();
+        SPoint3 p2 = all_quads[f]->getVertex((le+1)%4)->point();
+        double len = p1.distance(p2);
+        edgeLen[4*f+le] = len;
+        edge_len_min = std::min(edge_len_min, len);
+        edge_len_max = std::max(edge_len_max, len);
+        edge_len_avg += len;
+        edge_n += 1.;
+      }
+    }
+    avg /= quality.size();
+    edge_len_avg /= edge_n;
+    std::sort(quality.begin(),quality.end());
+    std::sort(edgeLen.begin(),edgeLen.end());
+    stats[prefix+"SICN_min"] = quality[0];
+    stats[prefix+"SICN_avg"] = avg;
+    stats[prefix+"SICN_max"] = quality.back();
+    stats[prefix+"SICN_med"] = quality[size_t(0.50*double(quality.size()))];
+    // stats[prefix+"SICN_01% <"] = quality[size_t(0.01*double(quality.size()))];
+    // stats[prefix+"SICN_10% <"] = quality[size_t(0.10*double(quality.size()))];
+    // stats[prefix+"SICN_25% <"] = quality[size_t(0.25*double(quality.size()))];
+    // stats[prefix+"SICN_50% <"] = quality[size_t(0.50*double(quality.size()))];
+    // stats[prefix+"SICN_75% <"] = quality[size_t(0.75*double(quality.size()))];
+    // stats[prefix+"SICN_90% <"] = quality[size_t(0.90*double(quality.size()))];
+    // stats[prefix+"SICN_99% <"] = quality[size_t(0.99*double(quality.size()))];
+
+    stats[prefix+"edge_min"] = edgeLen.front();
+    stats[prefix+"edge_avg"] = edge_len_avg;
+    stats[prefix+"edge_med"] = edgeLen[size_t(0.5*double(edgeLen.size()))];
+    stats[prefix+"edge_max"] = edgeLen.back();
+  }
+
+
+  return true;
+}
+
+void printStatistics(const unordered_map<std::string,double>& stats, const std::string& title) {
+  std::vector<std::string> keys;
+  for (auto& kv: stats) keys.push_back(kv.first);
+  std::sort(keys.begin(),keys.end());
+  Msg::Info("%s", title.c_str());;
+  for (std::string key: keys) {
+    double val = stats.at(key);
+    if (std::trunc(val) == val) {
+      Msg::Info("- %s: %i", key.c_str(),int(val));
+    } else {
+      Msg::Info("- %s: %f", key.c_str(),val);
+    }
+  }
+}
+
+void writeStatistics(const unordered_map<std::string,double>& stats, const std::string& path) {
+  std::vector<std::string> keys;
+  for (auto& kv: stats) keys.push_back(kv.first);
+  std::sort(keys.begin(),keys.end());
+
+  std::ofstream out(path);
+  out << "{\n";
+  for (size_t i = 0; i < keys.size(); ++i) {
+    std::string key = keys[i];
+    double val = stats.at(key);
+    if (std::trunc(val) == val) {
+      out << "\"" << key << "\"" << ": " << int(val);
+    } else {
+      out << "\"" << key << "\"" << ": " << val;
+    }
+    if ((int)i < (int)keys.size()-1) {
+      out << ",\n";
+    } else {
+      out << "\n";
+    }
+  }
+  out << "}\n";
+  out.close();
+}
+
+void errorAndAbortIfNegativeElement(GFace* gf, const std::vector<MElement*>& elts, const std::string& msg) {
+  Msg::Debug("errorAndAbortIfNegativeElement ... (! SLOW !)");
+  double vmin = DBL_MAX;
+  for (MElement* e: elts) {
+    double q = e->minSICNShapeMeasure();
+    vmin = std::min(vmin,q);
+  }
+  if (vmin < 0.) {
+    Msg::Error("Face %i, negative element (in %li tested): SICN min = %.3f. %s", gf->tag(), elts.size(), vmin, msg.c_str());
+    abort();
+  }
+}
+
+void errorAndAbortIfInvalidVertex(MVertex* v, const std::string& msg) {
+  size_t numMax = GModel::current()->getMaxVertexNumber();
+  if (v == nullptr) {
+    Msg::Error("Invalid vertex: v = %p | %s",
+        v, msg.c_str());
+    abort();
+  }
+  if (v->getNum() > numMax) {
+    Msg::Error("Invalid vertex: v = %p, num = %li > numMax=%li | %s",
+        v, v->getNum(), numMax, msg.c_str());
+    abort();
+  }
+  GEntity* ge = v->onWhat();
+  if (ge == nullptr) {
+    Msg::Error("Invalid vertex: v = %p, num = %li has no entity | %s",
+        v, v->getNum(), msg.c_str());
+    abort();
+  }
+  auto it = std::find(ge->mesh_vertices.begin(),ge->mesh_vertices.end(),v);
+  if (it == ge->mesh_vertices.end()) {
+    Msg::Error("Invalid vertex: v = %p, num = %li, not found in its entity mesh_vertices (dim %i, tag %i) | %s",
+        v, v->getNum(), ge->dim(), ge->tag(), msg.c_str());
+    abort();
+  }
+}
+
+void errorAndAbortIfInvalidVertexInElements(const std::vector<MElement*>& elts, const std::string& msg) {
+  Msg::Debug("errorAndAbortIfInvalidVertexInElements ... (! SLOW !)");
+  size_t numMax = GModel::current()->getMaxVertexNumber();
+  for (MElement* e: elts) {
+    if (e == nullptr) continue;
+    for (size_t lv = 0; lv < e->getNumVertices(); ++lv) {
+      MVertex* v = e->getVertex(lv);
+      if (v == nullptr) {
+        Msg::Error("Element %li (dim %i), invalid vertex: lv = %li: v = %p | %s",
+            e->getNum(), e->getDim(), lv, v, msg.c_str());
+        abort();
+      }
+      if (v->getNum() > numMax) {
+        Msg::Error("Element %li (dim %i), invalid vertex: lv = %li: v = %p, num = %li > numMax=%li | %s",
+            e->getNum(), e->getDim(), lv, v, v->getNum(), numMax, msg.c_str());
+        abort();
+      }
+      GEntity* ge = v->onWhat();
+      if (ge == nullptr) {
+        Msg::Error("Element %li (dim %i), invalid vertex: lv = %li: v = %p, num = %li has no entity | %s",
+            e->getNum(), e->getDim(), lv, v, v->getNum(), msg.c_str());
+        abort();
+      }
+      auto it = std::find(ge->mesh_vertices.begin(),ge->mesh_vertices.end(),v);
+      if (it == ge->mesh_vertices.end()) {
+        Msg::Error("Element %li (dim %i), invalid vertex: lv = %li: v = %p, num = %li, not found in its entity mesh_vertices (dim %i, tag %i) | %s",
+            e->getNum(), e->getDim(), lv, v, v->getNum(), ge->dim(), ge->tag(), msg.c_str());
+        abort();
+      }
+
+      // // this ones require to rebuild vertex cache
+      // MVertex* v2 = GModel::current()->getMeshVertexByTag(v->getNum());
+      // if (v2 != v) {
+      //   Msg::Error("Element %li (dim %i), invalid vertex: lv = %li: v = %p, num = %li -> getMeshVertexByTag -> v = %p | %s",
+      //       e->getNum(), e->getDim(), lv, v, v->getNum(), v2, msg.c_str());
+      //   abort();
+      // }
+    }
+  }
+}
+
+void errorAndAbortIfInvalidVertexInModel(GModel* gm, const std::string& msg) {
+  Msg::Debug("errorAndAbortIfInvalidVertexInModel ... (! SLOW !)");
+  for (GVertex* gv: gm->getVertices()) {
+    for (MVertex* v: gv->mesh_vertices) {
+      errorAndAbortIfInvalidVertex(v, msg);
+    }
+  }
+  for (GEdge* ge: model_edges(gm)) {
+    errorAndAbortIfInvalidVertexInElements(dynamic_cast_vector<MLine*,MElement*>(ge->lines), msg);
+  }
+  for (GFace* gf: model_faces(gm)) {
+    errorAndAbortIfInvalidVertexInElements(dynamic_cast_vector<MTriangle*,MElement*>(gf->triangles), msg);
+    errorAndAbortIfInvalidVertexInElements(dynamic_cast_vector<MQuadrangle*,MElement*>(gf->quadrangles), msg);
+  }
+}
+
+std::string randomIdentifier() {
+  return std::to_string(rand());
+}
diff --git a/contrib/QuadMeshingTools/qmtMeshUtils.h b/contrib/QuadMeshingTools/qmtMeshUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..ebdde427dd480b8a01580ed70ac19164a4d11119
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtMeshUtils.h
@@ -0,0 +1,151 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <set>
+#include <vector>
+#include <string>
+#include <unordered_map>
+#include "SPoint2.h"
+#include "SPoint3.h"
+
+
+class GModel;
+class GVertex;
+class GFace;
+class GEdge;
+class MTriangle;
+class MQuadrangle;
+class MVertex;
+class MElement;
+class SurfaceProjector;
+
+std::vector<GFace*> model_faces(const GModel* gm);
+std::vector<GEdge*> face_edges(const GFace* gf);
+std::vector<GEdge*> model_edges(const GModel* gm);
+
+bool haveNiceParametrization(GFace* gf);
+
+bool buildVertexToVertexMap(
+    const std::vector<MTriangle*>& triangles,
+    std::unordered_map<MVertex*,std::vector<MVertex*> >& v2v);
+
+
+struct GFaceMeshPatch {
+  /* Warning: simple container for pointers, memory not managed by this struct.
+   * The GFaceMeshDiff wrapper is doing some memory management for the content. */
+  GFace* gf = nullptr;
+  /* bdrVertices are the ordered boundary loops, there is only one
+   * if patch is a topological disk */
+  std::vector<std::vector<MVertex*> > bdrVertices; 
+  std::vector<MVertex*> intVertices; /* interior free vertices */
+  std::vector<MVertex*> embVertices; /* fixed vertices inside patch */
+  std::vector<MElement*> elements;
+};
+
+
+bool buildBoundary (const std::vector<MElement*>& elements, std::vector<MVertex*>& bnd);
+bool buildBoundaries(const std::vector<MElement*>& elements, std::vector<std::vector<MVertex*> >& loops);
+bool patchFromElements(GFace* gf, const std::vector<MElement*>& elements, GFaceMeshPatch& patch, bool forceEvenIfBadBoundary = false);
+bool patchFromQuads(GFace* gf, const std::vector<MQuadrangle*>& quads, GFaceMeshPatch& patch, bool forceEvenIfBadBoundary = false);
+
+
+void sicnQuality(const GFaceMeshPatch& patch, double& sicnMin, double& sicnAvg);
+
+bool patchIsTopologicallyValid(const GFaceMeshPatch& patch);
+
+bool getConnectedComponents(const std::vector<MElement*>& elements, 
+    std::vector<std::vector<MElement*> >& components);
+
+bool setVertexGFaceUV(GFace* gf, MVertex* v, double uv[2]);
+
+MVertex* centerOfElements(const std::vector<MElement*>& elements);
+
+bool orientElementsAccordingToBoundarySegment(MVertex* a, MVertex* b, std::vector<MElement*>& elements);
+
+bool reparamMeshVertexOnFaceWithRef(GFace* gf, MVertex* v, const SPoint2& ref, SPoint2& param);
+
+std::vector<SPoint2> paramOnElement(GFace* gf, MElement* e);
+
+/* warning: triangles are allocated, should be delete by the caller */
+std::vector<MTriangle*> trianglesFromQuads(const std::vector<MQuadrangle*>& quads);
+
+bool getGFaceTriangles(GFace* gf, std::vector<MTriangle*>& triangles, bool& requireDelete);
+
+
+bool fillSurfaceProjector(GFace* gf, SurfaceProjector* sp);
+
+int surfaceEulerCharacteristicDiscrete(const std::vector<MTriangle*>& triangles);
+
+struct GFaceInfo {
+  GFace* gf = NULL;
+  int chi = 0;
+  std::set<GVertex*> cornerIsNonManifold;
+  std::array<std::set<GVertex*>,5> bdrValVertices;
+  int intSumVal3mVal5 = 0;
+};
+
+bool fillGFaceInfo(GFace* gf, GFaceInfo& info, const std::vector<MTriangle*>& triangles);
+bool fillGFaceInfo(GFace* gf, GFaceInfo& info);
+
+bool isTopologicalDisk(const GFaceInfo& info);
+bool haveConcaveCorners(const GFaceInfo& info);
+
+bool faceOrderedSideLoops(GFace* gf, const GFaceInfo& info, 
+    std::vector<std::vector<std::vector<std::pair<GEdge*,bool> > > >& loopSideEdgesAndInv);
+
+bool appendCADStatistics(GModel* gm, std::unordered_map<std::string,double>& stats, const std::string& prefix = "CAD_");
+bool appendQuadMeshStatistics(GModel* gm, std::unordered_map<std::string,double>& stats, const std::string& prefix = "Mesh_");
+void printStatistics(const std::unordered_map<std::string,double>& stats, const std::string& title = "Statistics:");
+void writeStatistics(const std::unordered_map<std::string,double>& stats, const std::string& path); /* json format */
+
+void errorAndAbortIfNegativeElement(GFace* gf, const std::vector<MElement*>& elts, const std::string& msg = "");
+void errorAndAbortIfInvalidVertexInElements(const std::vector<MElement*>& elts, const std::string& msg = "");
+void errorAndAbortIfInvalidVertexInModel(GModel* gm, const std::string& msg = "");
+
+std::string randomIdentifier();
+
+struct GFaceMeshDiff {
+  GFace* gf = nullptr;
+  GFaceMeshPatch before;
+  GFaceMeshPatch after;
+  bool done = false;
+  
+  /**
+   * @brief Update the GFace with the new vertices/elements
+   *        and remove/delete the old ones.
+   *
+   * @param[in] verifyPatchTopology Check if the patch after is manifold
+   *
+   * @return true if success
+   */
+  bool execute(bool verifyPatchTopology = false);
+
+  /**
+   * @brief Destructor, delete/remove the new or old components
+   *        depending on the value of the variable done.
+   */
+  ~GFaceMeshDiff(); 
+};
+
+
+/**
+ * @brief Store the geometry (uv + 3D) of a GFaceMeshPatch.
+ *        Useful to restore the initial geometry after trying
+ *        various smoothing operations that were not successful.
+ */
+struct PatchGeometryBackup {
+  std::vector<MVertex*> vertices;
+  std::vector<SPoint2> UVs;
+  std::vector<SPoint3> positions;
+  std::unordered_map<MVertex*,std::pair<SPoint2,SPoint3> > old;
+
+  PatchGeometryBackup(GFaceMeshPatch& p, bool includeBoundary = false);
+  bool restore();
+};
+
diff --git a/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.cpp b/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..055ecb3d3aa0ea07577bbca1567e9836c492f52b
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.cpp
@@ -0,0 +1,2968 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtQuadCavityRemeshing.h"
+
+/* System includes */
+// #include <vector>
+// #include <array>
+// #include <unordered_map>
+// #include <cstdint>
+// #include <cmath>
+#include <queue>
+#include <unordered_set>
+// #include <algorithm>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "MLine.h"
+#include "MElement.h"
+#include "MTriangle.h"
+#include "MQuadrangle.h"
+#include "BackgroundMesh.h"
+#include "StringUtils.h"
+#include "meshOctreeLibOL.h"
+#include "gmsh.h" // api
+
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+#include "qmtMeshGeometryOptimization.h"
+#include "row_echelon_integer.hpp"
+#include "geolog.h"
+#include "robin_hood.h" // fast unordered_set and unordered_map
+
+using namespace CppUtils;
+
+const size_t PATTERN_QUAD_REGULAR = 0;
+const size_t PATTERN_TRIANGLE = 1;
+const size_t PATTERN_PENTAGON = 2;
+const size_t PATTERN_QUAD_DIAG35 = 3;
+const size_t PATTERN_QUAD_ALIGNED35 = 4;
+const size_t PATTERN_QUAD_CHORD_UTURN = 5;
+const size_t PATTERN_2CORNERS = 6;
+const size_t PATTERN_1CORNER = 7;
+const size_t PATTERN_DISK = 8;
+
+size_t patternNumberOfCorners(size_t pId) {
+  switch (pId) {
+    case PATTERN_QUAD_REGULAR:
+      return 4;
+    case PATTERN_TRIANGLE:
+      return 3;
+    case PATTERN_PENTAGON:
+      return 5;
+    case PATTERN_QUAD_DIAG35:
+      return 4;
+    case PATTERN_QUAD_ALIGNED35:
+      return 4;
+    case PATTERN_QUAD_CHORD_UTURN:
+      return 4;
+    case PATTERN_2CORNERS:
+      return 2;
+    case PATTERN_1CORNER:
+      return 1;
+    case PATTERN_DISK:
+      return 0;
+    default:
+      Msg::Error("patternNumberOfCorners: pattern not supported");
+  };
+  return 0;
+}
+
+
+namespace QMT {
+  using std::vector;
+  using std::array;
+
+
+  /* robin_hood hash sets and maps are much faster than the STL version */
+  // using std::unordered_map;
+  // using std::unordered_set;
+
+  template <typename Key, typename T, typename Hash = robin_hood::hash<Key>,
+           typename KeyEqual = std::equal_to<Key>, size_t MaxLoadFactor100 = 80>
+             using unordered_map = robin_hood::detail::Table<true, MaxLoadFactor100, Key, T, Hash, KeyEqual>;
+
+  template <typename Key, typename Hash = robin_hood::hash<Key>, typename KeyEqual = std::equal_to<Key>,
+           size_t MaxLoadFactor100 = 80>
+             using unordered_set = robin_hood::detail::Table<true, MaxLoadFactor100, Key, void, Hash, KeyEqual>;
+
+  /* hash_combine from boost */
+  template <class T>
+    inline void hash_combine(std::size_t& seed, const T& v)
+    {
+      std::hash<T> hasher;
+      seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+    }
+
+
+  using id = uint32_t;
+  using id2 = std::array<id,2>;
+  using id4 = std::array<id,4>;
+
+  constexpr bool DBG_VERBOSE = false;
+
+  /* Quad meshes of patterns, known at compile time
+   * These patterns must be CONVEX
+   * WARNING: orientation of quads must be coherent ! */
+  const std::vector<std::pair<size_t,std::vector<id4> > > quad_meshes = {
+    /* regular quad patch */
+    {PATTERN_QUAD_REGULAR,{{0,1,2,3}}},
+
+    /* triangular patch with one val3 singularity */
+    {PATTERN_TRIANGLE,{{0,1,6,5},{1,2,3,6},{3,4,5,6}}},
+
+    /* pentagonal patch with one val5 singularity */
+    {PATTERN_PENTAGON,{{0, 1, 2, 3}, {0, 5, 4, 1}, {0, 7, 6, 5}, {0, 9, 8, 7}, {0, 3, 10, 9}}},
+
+    /* quad patch with one val3 and one val5 singularities (on diagonal) */
+    {PATTERN_QUAD_DIAG35,{{0, 1, 2, 3}, {0, 5, 4, 1}, {0, 7, 6, 5}, {0, 9, 8, 7}, {0, 3, 10, 9}, {8, 9, 10, 11}}},
+
+    /* quad patch with one val3, one val5 singularities and two regular inside (3-5 pair for size transition) */
+    {PATTERN_QUAD_ALIGNED35,{{0, 1, 2, 3}, {0, 5, 4, 1}, {0, 7, 6, 5}, {0, 9, 8, 7}, {0, 3, 10, 9}, {9, 10, 12, 11}, {3, 13, 12, 10}, {8, 9, 11, 14}, {2, 15, 13, 3}}},
+
+    /* quad patch with two val3, two val5 inside, size transition by having a chord making a U-turn */
+    {PATTERN_QUAD_CHORD_UTURN,{{0, 1, 2, 3}, {0, 5, 4, 1}, {0, 7, 6, 5}, {0, 9, 8, 7}, {0, 3, 10, 9}, {9, 10, 12, 11}, {9, 11, 14, 13}, {8, 9, 13, 15}, {6, 7, 8, 15}}},
+
+    /* patch with two corners, two val3 singularities inside (good for eye shape) */
+    {PATTERN_2CORNERS,{{0, 1, 2, 3}, {0, 5, 4, 1}, {0, 3, 6, 5}, {4, 5, 6, 7}}},
+
+    /* patch with one corner, three val3 singularities inside and one regular vertiex */
+    {PATTERN_1CORNER,{{0,1,6,5},{1,2,7,6},{2,3,8,7},{3,4,9,8},{4,5,6,9},{6,7,8,9}}},
+
+    /* disk pattern (no corners) */
+    {PATTERN_DISK,{{0,1,6,5},{1,2,7,6},{2,3,4,7},{0,5,4,3},{4,5,6,7}}},
+  };
+
+  constexpr id NO_ID = (id) -1;
+  inline id2 sorted(id v1, id v2) { if (v1 < v2) { return {v1,v2}; } else { return {v2,v1}; } }
+  inline id2 sorted(id2 e) { if (e[0] < e[1]) { return {e[0],e[1]}; } else { return {e[1],e[0]}; } }
+
+  struct id2hash {
+    size_t operator()(const id2 &pr) const noexcept {
+      size_t seed = 0;
+      hash_combine(seed, robin_hood::hash_bytes(&(pr[0]), sizeof(id)));
+      hash_combine(seed, robin_hood::hash_bytes(&(pr[1]), sizeof(id)));
+      return seed;
+    }
+  };
+
+  struct vidHash {
+    size_t operator()(const std::vector<id>& p) const noexcept {
+      size_t seed = 0;
+      for (size_t i = 0; i < p.size(); ++i) {
+        hash_combine(seed, robin_hood::hash_bytes(&(p[i]), sizeof(id)));
+      }
+      return seed;
+    }
+  };
+
+  bool build_quad_chord(const vector<id4>& quadEdges, const vector<vector<id> >& e2f, id eStart, std::vector<id>& chordEdges) {
+    chordEdges.size();
+
+    vector<bool> visited(e2f.size(),false);
+
+    /* Init */
+    visited[eStart] = true;
+    std::queue<id> qq;
+    qq.push(eStart);
+
+    /* Propagation */
+    while (qq.size() > 0) {
+      id e = qq.front();
+      qq.pop();
+      chordEdges.push_back(e);
+
+      for (size_t lf = 0; lf < e2f[e].size(); ++lf) {
+        id f = e2f[e][lf];
+        id oe = NO_ID;
+        for (size_t le = 0; le < 4; ++le) {
+          if (quadEdges[f][le] == e) {
+            oe = quadEdges[f][(le+2)%4];
+            break;
+          }
+        }
+        if (oe == NO_ID) return false;
+        if (visited[oe]) continue;
+        visited[oe] = true;
+        qq.push(oe);
+      }
+    }
+
+    sort_unique(chordEdges);
+
+    return true;
+  }
+
+  double sum_sqrt(const vector<int>& values) {
+    double s = 0.;
+    for (const auto& v: values) s += sqrt(v);
+    return s;
+  }
+
+  bool all_strictly_positive(const vector<int>& values) {
+    for (const auto& v: values) if (v <= 0) return false;
+    return true;
+  }
+
+  /* Struct to interface with row_echelon_integer.hpp */
+  struct IMatrix {
+    /* Data */
+    int m;
+    int n;
+    std::vector<int> a;
+
+    /* Methods */
+    IMatrix(int m_, int n_): m(m_), n(n_) {
+      a.resize(m*n,0);
+    }
+
+    void set(int i, int j, int value) { a[i+j*m] = value; }
+    int get(int i, int j) const {return a[i+j*m]; }
+
+    int tansform_to_row_reduced_echelon() {
+      return i4mat_ref(m,n,a.data());
+    }
+
+    void print(const std::string& title = "IMatrix") {
+      i4mat_print(m, n, a.data(), title);
+    }
+
+    double solution_score(const std::vector<int>& x) {
+      if (x.size() != (size_t) n-1) return 0.;
+      for (int j = 0; j < n-1; ++j) {
+        if (x[j] == 0) return 0.;
+      }
+
+      /* Verify x is solution */
+      for (int i = 0; i < m; ++i) {
+        int sum = 0;
+        for (int j = 0; j < n-1; ++j) {
+          sum += x[j] * get(i,j);
+        }
+        sum += get(i,n-1);
+        if (sum != 0) { /* Not a solution */
+          return 0.;
+        }
+      }
+
+      return sum_sqrt(x);
+    }
+
+    double get_positive_solution_DFS(std::vector<int>& x, int& count, int count_limit, const std::vector<double>& x_ideal, int& ncalls) {
+      if (x.size() == 0) {
+        x.resize(n-1,0);
+        /* Check if a unknown is uncontrained. Happen with purely internal chords */
+        int sum_rhs = 0;
+        vector<bool> touched(x.size(),false);
+        for (int i = 0; i < m; ++i) {
+          for (int j = 0; j < n-1; ++j) {
+            int acoef = get(i,j);
+            if (acoef != 0) {
+              touched[j] = true;
+            }
+          }
+          sum_rhs += std::abs(get(i,n-1));
+        }
+        for (int j = 0; j < n-1; ++j) if (!touched[j]) {
+          x[j] = sum_rhs / (n-1);
+          if (x[j] < 0) x[j] = 1;
+        }
+      }
+
+      ncalls += 1;
+      if (ncalls > 1e7) {
+        Msg::Debug("get_positive_solution_DFS: infinite loop ? %i calls in recursion", ncalls);
+        return 0.;
+      }
+      if (all_strictly_positive(x)) count += 1;
+      if (count > count_limit) return 0.;
+
+      /* Stop condition: x is solution and has positive score */
+      double current_score = solution_score(x);
+      if (current_score > 0.) return current_score;
+
+
+      double best_score = 0.;
+      vector<int> best_x;
+      std::vector<int> undetermined;
+      /* Loop from last line to first line */
+      for (int i = m-1; i >= 0; --i) {
+        undetermined.clear();
+        /* Check line */
+        int total = -1 * get(i,n-1);
+        for (int j = 0; j < n-1; ++j) {
+          int w = get(i,j);
+          if (w != 0) {
+            if (x[j] == 0) {
+              undetermined.push_back(j);
+            } else {
+              total -= w * x[j];
+            }
+          }
+        }
+        if (undetermined.size() == 0) {
+          if (total == 0) {
+            continue;
+          } else {
+            return 0.;
+          }
+        }
+
+        /* Fix one value and make recursive call */
+        if (undetermined.size() == 1) {
+          int j = undetermined[0];
+          int w = get(i,j);
+          if (total % w == 0) {
+            int candidate = total / w;
+            if (candidate < 1) return 0.;
+            vector<int> x2 = x;
+            x2[j] = candidate;
+            double sub_score = get_positive_solution_DFS(x2, count, count_limit, x_ideal, ncalls);
+            if (sub_score > 0.) { /* Found a solution ! Return this one */
+              x = x2;
+              return sub_score;
+            }
+          }
+        } else {
+          double sum = 0.;
+          for (size_t k = 0; k < undetermined.size(); ++k) {
+            int j = undetermined[k];
+            int w = get(i,j);
+            sum += std::abs(w);
+          }
+          for (size_t k = 0; k < undetermined.size(); ++k) {
+            int j = undetermined[k];
+            int w = get(i,j);
+            double ideal_repartition = 1./sum * double(total);
+            int xmin = 1;
+            int xmax = int(double(total) / double(w));
+            if (xmax < xmin) return 0.;
+            if ((size_t)j < x_ideal.size()) {
+              ideal_repartition = x_ideal[j];
+            }
+
+            vector<std::pair<double,int> > prio_candidate;
+            if (xmax == xmin) {
+              prio_candidate.push_back({0.,xmin});
+            } else {
+              for (int candidate = xmin; candidate < xmax+1; ++candidate) {
+                double dist = std::pow(ideal_repartition-candidate,2);
+                prio_candidate.push_back({dist,candidate});
+              }
+            }
+
+            // TODO: better priority, see 2 corner cases
+            std::sort(prio_candidate.begin(),prio_candidate.end());
+            vector<int> x2;
+            for (size_t l = 0; l < prio_candidate.size(); ++l) {
+              int candidate = prio_candidate[l].second;
+              x2 = x;
+              x2[j] = candidate;
+              double sub_score = get_positive_solution_DFS(x2, count, count_limit, x_ideal, ncalls);
+              if (sub_score > 0.) { /* Found a solution ! Return this one */
+                x = x2;
+                return sub_score;
+              }
+            }
+          }
+        }
+      }
+      if (best_score > 0.) {
+        x = best_x;
+        return best_score;
+      }
+      return 0.;
+    }
+
+
+  };
+
+
+
+  struct QuadMeshPattern {
+    size_t patternId;
+    id n = 0;
+    vector<id2> edges;
+    vector<id4> quads; /* contains edge id's, not vertex ! */
+    vector<id4> qvertices;
+    vector<bool> vOnBdr;
+    vector<id> eChordId;
+    vector<vector<id> > v2e;
+    vector<vector<id> > e2f;
+    vector<vector<id> > chords;
+    vector<vector<id> > sides;
+    id ncorners;
+
+    bool load(size_t pId, const std::vector<id4>& quadVertices) {
+      patternId = pId;
+      ncorners = 0;
+      edges.reserve(2*quadVertices.size());
+      quads.reserve(quadVertices.size());
+      unordered_map<id2,id,id2hash> vpair2e;
+      n = 0;
+      for (size_t f = 0; f < quadVertices.size(); ++f) {
+        id4 quad;
+        for (size_t le = 0; le < 4; ++le) {
+          id v1 = quadVertices[f][le];
+          id v2 = quadVertices[f][(le+1)%4];
+          n = std::max(n,v1+1);
+          id2 oedge = {v1,v2};
+          id2 vpair = sorted(v1,v2);
+          auto it = vpair2e.find(vpair);
+          id e = 0;
+          if (it == vpair2e.end()) {
+            e = edges.size();
+            edges.push_back(oedge);
+            vpair2e[vpair] = e;
+          } else {
+            e = it->second;
+          }
+          quad[le] = e;
+        }
+        quads.push_back(quad);
+        qvertices.push_back(quadVertices[f]);
+      }
+      v2e.resize(n);
+      for (size_t e = 0; e < edges.size(); ++e) {
+        v2e[edges[e][0]].push_back(e);
+        v2e[edges[e][1]].push_back(e);
+      }
+      e2f.resize(edges.size());
+      for (size_t f = 0; f < quads.size(); ++f) {
+        for (size_t le = 0; le < 4; ++le) {
+          e2f[quads[f][le]].push_back(f);
+        }
+      }
+      vOnBdr.resize(n,false);
+      for (size_t e = 0; e < e2f.size(); ++e) if (e2f[e].size() == 1) {
+        vOnBdr[edges[e][0]] = true;
+        vOnBdr[edges[e][1]] = true;
+      }
+
+      { /* Build chords of the quad mesh */
+        chords.clear();
+        eChordId.resize(edges.size(),NO_ID);
+        vector<id> chordEdges;
+        for (size_t e = 0; e < edges.size(); ++e) if (eChordId[e] == NO_ID) {
+          chordEdges.clear();
+          bool ok = build_quad_chord(quads, e2f, e, chordEdges);
+          if (!ok) return false;
+          for (id e: chordEdges) {
+            eChordId[e] = chords.size();
+          }
+          chords.push_back(chordEdges);
+        }
+      }
+
+      { /* Build the boundary sides (seperated by convex corners) */
+        sides.clear();
+        vector<id>* cur_side = NULL;
+        for (id v0 = 0; v0 < n; ++v0) if (vOnBdr[v0] && v2e[v0].size() == 2) {
+          id v = v0;
+          id e = NO_ID;
+          do {
+            if (v2e[v].size() == 2) { /* concave corner */
+              sides.resize(sides.size()+1);
+              cur_side = &sides.back();
+              ncorners += 1;
+            }
+            for (id ee: v2e[v]) if (ee != e && e2f[ee].size() == 1) {
+              if (edges[ee][0] == v) { /* assume edges are ordered on bdr */
+                e = ee; break;
+              }
+            }
+            if (e == NO_ID) {
+              Msg::Error("load, edge not found !");
+              return false;
+            }
+            cur_side->push_back(e);
+            id v2 = (edges[e][0] != v) ? edges[e][0] : edges[e][1];
+            v = v2;
+          } while (v != v0);
+          break;
+        }
+        if (cur_side == NULL) { /* No convex corner, should be disk disk */
+          sides.resize(sides.size()+1);
+          cur_side = &sides.back();
+          for (id v0 = 0; v0 < n; ++v0) if (vOnBdr[v0] && v2e[v0].size() == 3) {
+            id v = v0;
+            id e = NO_ID;
+            do {
+              for (id ee: v2e[v]) if (ee != e && e2f[ee].size() == 1) {
+                if (edges[ee][0] == v) { /* assume edges are ordered on bdr */
+                  e = ee; break;
+                }
+              }
+              if (e == NO_ID) {
+                Msg::Error("load, edge not found !");
+                return false;
+              }
+              cur_side->push_back(e);
+              id v2 = (edges[e][0] != v) ? edges[e][0] : edges[e][1];
+              v = v2;
+            } while (v != v0);
+            break;
+          }
+        }
+        if (cur_side == NULL) return false;
+      }
+
+      return true;
+    }
+  };
+
+  double patternIrregularity(const QuadMeshPattern& M) {
+    double irreg = 0.;
+    for (size_t i = 0; i < M.n; ++i) if (!M.vOnBdr[i]) {
+      irreg += std::pow(double(M.v2e[i].size())-4.,2);
+    }
+    return irreg;
+  }
+
+  double checkPatternMatching(const QuadMeshPattern& P, const std::vector<size_t>& sideSizes, vector<int>& slt) {
+    slt.clear();
+    size_t N = sideSizes.size();
+    bool possible = true;
+    for (size_t s = 0; s < N; ++s) {
+      if (sideSizes[s] < P.sides[s].size() + 1) {
+        /* on given side, less edges in the cavity than edges in the pattern */
+        possible = false; break;
+      }
+    }
+    if (!possible) return 0.;
+
+    int nvars = 0;
+    for (id v: P.eChordId) nvars = std::max(nvars,(int)v+1);
+    IMatrix mat(N,nvars+1);
+    for (size_t s = 0; s < N; ++s) {
+      for (size_t j = 0; j < P.sides[s].size(); ++j) {
+        id e = P.sides[s][j];
+        id var = P.eChordId[e];
+        mat.set(s,var,mat.get(s,var)+1);
+      }
+      mat.set(s,nvars,-1. * (sideSizes[s]-1));
+    }
+    mat.tansform_to_row_reduced_echelon();
+
+    // TODO IDEA
+    // - give ideal_repartition to the get_positive_solution_DFS() fct ?
+    //   to control a bit the quantization
+    // - other idea: use row echelon to compute null space [x_kernel, ...] and find
+    //               solution x0 + lambda * x_kernel that maximize an objective
+    //               function ?
+    vector<double> ideal_repartition;
+    if (P.patternId == PATTERN_2CORNERS) {
+      ideal_repartition.resize(P.chords.size(),0);
+      size_t navg = (sideSizes[0] + sideSizes[1] - 2)/2;
+      for (size_t j = 0; j < P.chords.size(); ++j) {
+        if (P.chords[j].size() == 3) {
+          ideal_repartition[j] = 0.95 * navg;
+        } else if (P.chords[j].size() == 4) {
+          ideal_repartition[j] = 0.05 * navg;
+        } else {
+          Msg::Error("setting ideal_repartition for PATTERN_2CORNERS, should not happen");
+        }
+      }
+    } else if (P.patternId == PATTERN_DISK) {
+      // TODO: detect circular chord and use a smaller ideal_repartition on it
+    }
+    double score = 0.;
+    slt.clear();
+    int count = 0;
+    int count_limit = 100; /* limit on the number of solution tried in the DFS */
+    int ncalls = 0;
+    score = mat.get_positive_solution_DFS(slt, count, count_limit, ideal_repartition, ncalls);
+
+    return score;
+  }
+
+
+  double checkPatternMatchingWithRotations(const QuadMeshPattern& P, const std::vector<size_t>& sideSizes, int& rotation) {
+    size_t N = sideSizes.size();
+    if (P.sides.size() != N) return 0.;
+
+    vector<size_t> ssr = sideSizes;
+    vector<int> slt;
+
+    double best = 0.;
+    int rot = 0;
+
+    /* Initial config */
+    {
+      double match = checkPatternMatching(P, ssr, slt);
+      if (match > best) {
+        best = match;
+        rotation = rot;
+      }
+    }
+
+    /* Forward rotation */
+    for (size_t r = 1; r < ssr.size(); ++r) {
+      rot += 1;
+      std::rotate(ssr.begin(),ssr.begin()+1,ssr.end());
+      double match = checkPatternMatching(P, ssr, slt);
+      if (match > best) {
+        best = match;
+        rotation = rot;
+      }
+    }
+
+    /* Try in reverse order */
+    rot = 0;
+    ssr = sideSizes;
+    std::reverse(ssr.begin(),ssr.end());
+    for (size_t r = 1; r < ssr.size(); ++r) {
+      rot -= 1;
+      std::rotate(ssr.begin(),ssr.begin()+1,ssr.end());
+      double match = checkPatternMatching(P, ssr, slt);
+      if (match > best) {
+        best = match;
+        rotation = rot;
+      }
+    }
+
+
+    return best;
+  }
+
+  std::vector<MVertex*> createVertices (GFace* gf, MVertex *v1, MVertex *v2, int n,
+      std::vector<MVertex*>& newVertices){
+    bool haveParam = gf->haveParametrization();
+    std::vector<MVertex*> r;
+    r.push_back(v1);
+    double uv1[2] = {0.,0.};
+    double uv2[2] = {0.,0.};
+    if (haveParam) {
+      setVertexGFaceUV(gf, v1, uv1);
+      setVertexGFaceUV(gf, v2, uv2);
+    }
+    for (int i=1;i<n;i++){
+      double xi = (double)i/n;
+      SPoint3 p ((1.-xi)*v1->x()+xi*v2->x(),(1.-xi)*v1->y()+xi*v2->y(),(1.-xi)*v1->z()+xi*v2->z());
+      double uv[2] = {0.,0.};
+      if (haveParam) {
+        uv[0] = (1.-xi)*uv1[0]+xi*uv2[0];
+        uv[1] = (1.-xi)*uv1[1]+xi*uv2[1];
+      }
+      MVertex *vNew = new MFaceVertex(p.x(),p.y(),p.z(),gf,uv[0],uv[1]);
+      newVertices.push_back(vNew);
+      r.push_back(vNew);
+    }
+    r.push_back(v2);
+    return r;
+  }
+
+  std::vector<MVertex*> reverseVector (const std::vector<MVertex*> &v){
+    std::vector<MVertex*> r;
+    for (size_t i=0;i<v.size();i++)r.push_back(v[v.size() - 1 - i]);
+    return r;
+  }
+
+  void createQuadPatch (GFace* gf,
+      const std::vector<MVertex*> &s1,
+      const std::vector<MVertex*> &s2,
+      const std::vector<MVertex*> &s3,
+      const std::vector<MVertex*> &s4,
+      std::vector<MElement*>& newQuads,
+      std::vector<MVertex*>& newVertices){
+
+    bool haveParam = gf->haveParametrization();
+
+    std::vector<MVertex*> s3r = reverseVector(s3);
+    std::vector<MVertex*> s4r = reverseVector(s4);
+    std::vector< std::vector<MVertex*> > grid(s1.size());
+    for (size_t i = 0; i < grid.size(); ++i) grid[i].resize(s2.size(),NULL);
+    grid.front() = s4r;
+    grid.back() = s2;
+
+    /* Fill the interior with transfinite interpolation */
+    if (s1.size() > 2) {
+      SVector3 c00 = s1[0]->point();
+      SVector3 c10 = s2[0]->point();
+      SVector3 c11 = s3[0]->point();
+      SVector3 c01 = s4[0]->point();
+      for (size_t i=1; i < s1.size()-1; i++){
+        grid[i][0] = s1[i];
+        grid[i].back() = s3r[i];
+
+        if (s2.size() <= 2) continue;
+
+        double u = double(i) / double(s1.size()-1.);
+        SVector3 s1u = s1[i]->point();
+        SVector3 s3u = s3r[i]->point();
+
+        for (size_t j=1; j < s2.size()-1; j++){
+          double v = double(j) / double(s2.size()-1.);
+          SVector3 s2v = s2[j]->point();
+          SVector3 s4v = s4r[j]->point();
+
+          SVector3 p = (1.-v) * s1u + v * s3u + (1.-u) * s4v + u * s2v
+            - ((1.-u)*(1.-v)*c00 + u*v*c11 + u * (1.-v) * c10 + (1.-u)*v*c01);
+          double uv[2] = {0.,0.};
+          MVertex *vNew = new MFaceVertex(p.x(),p.y(),p.z(),gf,uv[0],uv[1]);
+          newVertices.push_back(vNew);
+          grid[i][j] = vNew;
+        }
+      }
+    }
+
+    for (size_t i=0;i<grid.size()-1;i++){
+      for (size_t j=0;j<grid[i].size()-1;j++){
+        MQuadrangle *q = new MQuadrangle (grid[i][j],grid[i+1][j],grid[i+1][j+1],grid[i][j+1]);
+        newQuads.push_back(q);
+      }
+    }
+  }
+
+
+  bool addQuadsAccordingToPattern(
+      const QuadMeshPattern& P,
+      const std::vector<int>& quantization,
+      GFace* gf,
+      const std::vector<std::vector<MVertex*> >& sides, /* vertices on the boundary, not changed */
+      std::vector<MVertex*>& newVertices,               /* new vertices inside the cavity */
+      std::vector<MElement*>& newElements,              /* new quads inside the cavity */
+      MVertex* oldCenter = NULL                         /* initial guess for new positions */
+      ) {
+    constexpr bool DBG_VIZU = false;
+    if (P.sides.size() != sides.size()) {
+      Msg::Error("wrong input sizes ... pattern: %li sides, input: %li sides", P.sides.size(),sides.size());
+      return false;
+    }
+
+    unordered_map<id2, std::vector<MVertex*>,id2hash> vpair2vertices;
+    std::vector<MVertex*> v2mv(P.n,NULL);
+    std::vector<MVertex*> vert;
+
+    /* Associate exising vertices to pattern sides */
+    SVector3 center(0.,0.,0.);
+    if (oldCenter) {
+      center = oldCenter->point();
+    } else {
+      double csum = 0.;
+      for (size_t s = 0; s < sides.size(); ++s) {
+        for (size_t k = 0; k < sides[s].size(); ++k) {
+          center += sides[s][k]->point();
+          csum += 1.;
+        }
+      }
+      if (csum == 0.) return false;
+      center = 1./csum * center;
+    }
+
+    for (size_t s = 0; s < P.sides.size(); ++s) {
+      size_t pos = 0;
+      size_t sp = 0;
+      for (size_t j = 0; j < P.sides[s].size(); ++j) {
+        sp += quantization[P.eChordId[P.sides[s][j]]];
+      }
+      if (sp + 1 != sides[s].size()) {
+        return false;
+      }
+      for (size_t j = 0; j < P.sides[s].size(); ++j) {
+        id e = P.sides[s][j];
+        int n_e = quantization[P.eChordId[e]];
+        vert.resize(n_e+1);
+        for (size_t k = 0; k < (size_t) n_e+1; ++k) {
+          if (pos+k>=sides[s].size()) {
+            Msg::Error("issue, pos=%li + k=%li = %li >= sides[s].size()=%li", pos, k, pos+k, sides[s].size());
+            return false;
+          }
+          vert[k] = sides[s][pos+k];
+        }
+        pos += n_e;
+        id v1 = P.edges[e][0];
+        id v2 = P.edges[e][1];
+        if (v2mv[v1] == NULL) v2mv[v1] = vert.front();
+        if (v2mv[v2] == NULL) v2mv[v2] = vert.back();
+
+        id2 vpair = sorted(v1,v2);
+        if (v1 < v2) {
+          vpair2vertices[vpair] = vert;
+        } else {
+          std::reverse(vert.begin(),vert.end());
+          vpair2vertices[vpair] = vert;
+        }
+      }
+    }
+
+    /* Create vertices on internal points */
+    for (size_t v = 0; v < P.n; ++v) if (!P.vOnBdr[v]) {
+      GPoint pp;
+      if (oldCenter) {
+        double uv[2];
+        oldCenter->getParameter(0,uv[0]);
+        oldCenter->getParameter(1,uv[1]);
+        pp = GPoint(center.x(),center.y(),center.z(),gf,uv[0],uv[1]);
+      } else {
+        pp = GPoint(center.x(),center.y(),center.z(),gf,0,0);
+      }
+
+      bool moveTowardBdr = true;
+      if (moveTowardBdr) {
+        double vsum = 10.; /* weight on center */
+        SVector3 avg(vsum*pp.x(),vsum*pp.y(),vsum*pp.z());
+        for (size_t e: P.v2e[v]) {
+          size_t v2 = (P.edges[e][0] != v) ? P.edges[e][0] : P.edges[e][1];
+          if (P.vOnBdr[v2]) {
+            SVector3 p2 = v2mv[v2]->point();
+            avg += p2;
+            vsum += 1;
+          }
+        }
+        if (vsum > 1) {
+          pp.x() = avg.x() / vsum;
+          pp.y() = avg.y() / vsum;
+          pp.z() = avg.z() / vsum;
+        }
+      }
+
+      double uv[2] = {0.,0.};
+      MVertex *sing = new MFaceVertex(pp.x(),pp.y(),pp.z(),gf,pp.u(),pp.v());
+      GPoint proj = gf->closestPoint(sing->point(),uv);
+      if (proj.succeeded()) {
+        sing->x() = proj.x();
+        sing->y() = proj.y();
+        sing->z() = proj.z();
+        sing->setParameter(0,proj.u());
+        sing->setParameter(1,proj.v());
+      }
+
+      newVertices.push_back(sing);
+      bool irregular = (P.v2e[v].size() != 4);
+      v2mv[v] = sing;
+    }
+
+    /* Create vertices on internal curves */
+    for (size_t e = 0; e < P.edges.size(); ++e) if (P.e2f[e].size() == 2) {
+      id v1 = P.edges[e][0];
+      id v2 = P.edges[e][1];
+      MVertex* mv1 = v2mv[v1];
+      MVertex* mv2 = v2mv[v2];
+      if (mv1 == NULL || mv2 == NULL) {
+        Msg::Error("MVertex* not found ?");
+        return false;
+      }
+      int n_e = quantization[P.eChordId[e]];
+      id2 vpair = sorted(v1,v2);
+      if (v1 < v2) {
+        vpair2vertices[vpair] = createVertices (gf, mv1, mv2, n_e, newVertices);
+      } else {
+        vpair2vertices[vpair] = createVertices (gf, mv2, mv1, n_e, newVertices);
+      }
+    }
+
+    /* Create vertices inside the quad patches */
+    for (size_t f = 0; f < P.quads.size(); ++f) {
+      std::vector<std::vector<MVertex*> > quadCurves(4);
+      for (size_t le = 0; le < 4; ++le) {
+        id v0 = P.qvertices[f][le];
+        id v1 = P.qvertices[f][(le+1)%4];
+        id2 vpair = sorted(v0,v1);
+        auto it = vpair2vertices.find(vpair);
+        if (it == vpair2vertices.end()) {
+          Msg::Error("MVertex* vector not found for vertex pair (edge in pattern)");
+          return false;
+        }
+        quadCurves[le] = it->second;
+        if (v1 < v0) {
+          std::reverse(quadCurves[le].begin(),quadCurves[le].end());
+        }
+      }
+      createQuadPatch(gf, quadCurves[0], quadCurves[1], quadCurves[2], quadCurves[3], newElements, newVertices);
+    }
+
+    return true;
+  }
+
+  void clearStuff(std::vector<MVertex*>& newVertices,
+      std::vector<MElement*>& newElements) {
+    for (MVertex*& v: newVertices) if (v != NULL) {
+      delete v;
+      v = NULL;
+    }
+    newVertices.clear();
+    for (MElement*& e: newElements) if (e != NULL) {
+      delete e;
+      e = NULL;
+    }
+    newElements.clear();
+  }
+
+  template<class T>
+    void remove_element_if_inside(const T& value, std::vector<T>& vec) {
+      auto it = std::find(vec.begin(),vec.end(),value);
+      if (it != vec.end()) {
+        vec.erase(it);
+      }
+    }
+
+  struct QuadqsContext {
+    bool optimizeTopology = true;
+    bool optimizeGeometry = true;
+    unordered_map<std::string,double> stats;
+    double timeoutQuadqsPerGFace = DBL_MAX;
+    double timeoutQuadqsPerGFaceCavity = DBL_MAX;
+    double timeoutGeomOptimPerGFace = DBL_MAX;
+  };
+
+  struct QuadqsGFaceContext {
+    /* Options (all timings in seconds) */
+    double timeoutQuadqsPerGFace = DBL_MAX;
+    double timeoutQuadqsPerGFaceCavity = DBL_MAX;
+    double timeoutGeomOptimPerGFace = DBL_MAX;
+    bool invertNormalsForQuality = false;
+    size_t nTryMaxPerVertex = 2;
+    size_t nTryCloseReset = 5;
+    SurfaceProjector* sp = nullptr;
+    /* Stats on execution */
+    double t0 = 0.;
+    size_t nSingCavityRemesh = 0;
+    size_t nQuadCavityRemesh = 0;
+    bool finished = false;
+
+    /* Functions */
+    QuadqsGFaceContext(const QuadqsContext& qqs) {
+      timeoutQuadqsPerGFace = qqs.timeoutQuadqsPerGFace;
+      timeoutQuadqsPerGFaceCavity = qqs.timeoutQuadqsPerGFaceCavity;
+      timeoutGeomOptimPerGFace = qqs.timeoutGeomOptimPerGFace;
+      t0 = Cpu();
+    }
+
+    double elapsedCpuTime() const {
+      return Cpu() - t0;
+    }
+  };
+
+  enum GrowthPolicy {
+    GROW_MINIMAL,
+    GROW_MAXIMAL,
+  };
+
+  const uint32_t NO_U32 = (uint32_t) -1;
+
+  struct RemeshableCavity {
+    std::vector<MElement*> elements;
+    std::vector<std::vector<MVertex*> > sides;
+    std::vector<MVertex*> intVertices;
+    double irregularityMeasure = 0;
+    uint32_t nIrregular = 0; // # irregular vertices outside allowed ones
+    std::pair<size_t,int> patternNoAndRot = {(size_t)-1,0};
+  };
+
+  struct GrowingCavity {
+    std::vector<bool> quadIsInside;      /* fixed size: farmer.quads.size() */
+    std::vector<uint32_t> quadEdgeIsBdr; /* fixed size: 4*farmer.quads.size() */
+    unordered_set<uint32_t> verticesInt; /* growing with cavity */
+    unordered_set<uint32_t> verticesBdr; /* growing with cavity */
+    unordered_set<uint32_t> elements;    /* growing with cavity */
+    /* nb of irregular vertices strictly inside cavity (include singularities) */
+    uint32_t nIrregInterior = 0;
+
+    void clear() {
+      quadIsInside.clear();
+      quadEdgeIsBdr.clear();
+      verticesInt.clear();
+      verticesBdr.clear();
+      elements.clear();
+      nIrregInterior = 0;
+    }
+  };
+
+  struct CavityFarmer { /* the guy who grows cavities */
+    public:
+      GFace* gf = nullptr;
+
+      /* contiguous representation of the GFace quad mesh  */
+      std::vector<MVertex*> vertices;
+      unordered_map<MVertex*,uint32_t> vertexLocal;
+      std::vector<MQuadrangle*> quadrangles;
+      unordered_map<MQuadrangle*,uint32_t> quadLocal;
+      std::vector<std::array<uint32_t,4> > quads;
+
+      /* quad adjacency information */
+      std::vector<uint32_t> adjacent; /* adjacent[4*q1+le1] = 4*q2+le2 */
+      std::vector<uint32_t> v2q_first; /* vertex to quads */
+      std::vector<uint32_t> v2q_values; /* vertex to quads */
+
+      GrowingCavity cav; /* current cavity */
+      GrowingCavity cavBackup; /* potential extension */
+
+      /* growth constraints */
+      std::vector<bool> vertexForbidden;
+      std::vector<bool> quadEdgeForbidden;
+
+    public:
+      CavityFarmer(GFace* gf_):gf(gf_) {};
+
+      void clear() {
+        vertices.clear();
+        vertexLocal.clear();
+        quadrangles.clear();
+        quadLocal.clear();
+        quads.clear();
+        adjacent.clear();
+        v2q_first.clear();
+        v2q_values.clear();
+        vertexForbidden.clear();
+        quadEdgeForbidden.clear();
+        cav.clear();
+        cavBackup.clear();
+      }
+
+      void debug_show_cavity(const std::string& name, bool light = true) {
+        std::vector<MElement*> elts;
+        for (uint32_t f: cav.elements) {
+          elts.push_back(quadrangles[f]);
+        }
+        if (light) {
+          GeoLog::add(elts,name);
+          return;
+        }
+        GeoLog::add(elts,name+"_cav.elements");
+        std::vector<array<double,3> > interior;
+        std::vector<array<double,3> > bdr;
+        for (uint32_t v: cav.verticesInt) {
+          interior.push_back(vertices[v]->point());
+        }
+        for (uint32_t v: cav.verticesBdr) {
+          bdr.push_back(vertices[v]->point());
+        }
+        GeoLog::add(interior,0.,name+"_cav.verticesInt");
+        GeoLog::add(bdr,1.,name+"_cav.verticesBdr");
+
+        std::vector<MElement*> elts2;
+        for (size_t f = 0; f < quadrangles.size(); ++f) if (cav.quadIsInside[f]) {
+          elts2.push_back(quadrangles[f]);
+        }
+        GeoLog::add(elts2,name+"_cav.quadIsInside");
+        for (size_t f = 0; f < quadrangles.size(); ++f) {
+          for (size_t le = 0; le < 4; ++le) {
+            if (cav.quadEdgeIsBdr[4*f+le]) {
+              uint32_t v1 = quads[f][le];
+              uint32_t v2 = quads[f][(le+1)%4];
+              std::vector<array<double,3> > bdrEdges = {vertices[v1]->point(), vertices[v2]->point()};
+              GeoLog::add(bdrEdges,0.,name+"_cav.quadEdgeIsBdr");
+            }
+          }
+        }
+        GeoLog::flush();
+      }
+
+      bool updateFarmer(GFace* gf) {
+        /* assume coherent orientation of quads in GFace */
+        clear();
+        std::vector<uint32_t> valence;
+        vertices.reserve(2*gf->mesh_vertices.size());
+        valence.reserve(2*gf->mesh_vertices.size());
+        quads.reserve(gf->quadrangles.size());
+        quadrangles = gf->quadrangles;
+        for (size_t f = 0; f < quadrangles.size(); ++f) {
+          MQuadrangle* q = quadrangles[f];
+          quadLocal[q] = f;
+          array<uint32_t,4> quad;
+          for (size_t lv = 0; lv < 4; ++lv) {
+            MVertex* v = q->getVertex(lv);
+            auto it = vertexLocal.find(v);
+            if (it != vertexLocal.end()) {
+              uint32_t nv = it->second;
+              quad[lv] = nv;
+              valence[nv] += 1;
+            } else {
+              uint32_t nv = vertices.size();
+              vertices.push_back(v);
+              valence.push_back(1);
+              vertexLocal[v] = nv;
+              quad[lv] = nv;
+            }
+          }
+          quads.push_back(quad);
+        }
+
+        /* Build the vertex to quads adjacencies */
+        v2q_first.resize(vertices.size()+1,0);
+        for (uint32_t v = 0; v < vertices.size(); ++v) {
+          v2q_first[v+1] = v2q_first[v] + valence[v];
+        }
+        v2q_values.resize(v2q_first.back(), NO_U32);
+        for (uint32_t f = 0; f < quads.size(); ++f) {
+          for (uint32_t lv = 0; lv < 4; ++lv) {
+            const uint32_t v = quads[f][lv];
+            const uint32_t begin = v2q_first[v];
+            const uint32_t end = v2q_first[v+1];
+            bool foundSlot = false;
+            for (uint32_t pos = begin; pos < end; ++pos) {
+              if (v2q_values[pos] == NO_U32) {
+                v2q_values[pos] = f;
+                foundSlot = true;
+                break;
+              }
+            }
+            if (!foundSlot) {
+              Msg::Error("cavity farmer: no slot found !");
+              return false;
+            }
+          }
+        }
+
+        /* Build the quad to quads adjacencies */
+        adjacent.resize(4*quads.size(),NO_U32);
+        for (uint32_t f = 0; f < quads.size(); ++f) {
+          for (uint32_t le = 0; le < 4; ++le) {
+            if (adjacent[4*f+le] != NO_U32) continue;
+            const uint32_t v1 = quads[f][le];
+            const uint32_t v2 = quads[f][(le+1)%4];
+            const uint32_t begin = v2q_first[v1];
+            const uint32_t end = v2q_first[v1+1];
+            for (uint32_t pos = begin; pos < end; ++pos) {
+              const uint32_t f2 = v2q_values[pos];
+              for (uint32_t le2 = 0; le2 < 4; ++le2) {
+                const uint32_t av1 = quads[f2][le2];
+                const uint32_t av2 = quads[f2][(le2+1)%4];
+                if (av1 == v2 && av2 == v1) {
+                  adjacent[4*f+le] = 4*f2+le2;
+                  adjacent[4*f2+le2] = 4*f+le;
+                  break;
+                }
+              }
+              if (adjacent[4*f+le] != NO_U32) break;
+            }
+          }
+        }
+
+        /* Embedded edges in faces */
+        for (GEdge* ge: gf->embeddedEdges()) {
+          unordered_set<id2,id2hash> embLines;
+          for (MLine* line: ge->lines) {
+            MVertex* v1 = line->getVertex(0);
+            MVertex* v2 = line->getVertex(1);
+            auto it1 = vertexLocal.find(v1);
+            auto it2 = vertexLocal.find(v2);
+            if (it1 == vertexLocal.end() || it2 == vertexLocal.end()) {
+              Msg::Debug("cavity farmer update: vertex of embedded line not found, weird");
+              continue;
+            }
+            id2 vpair = sorted(it1->second,it2->second);
+            embLines.insert(vpair);
+          }
+          if (embLines.size() == 0) continue;
+          if (quadEdgeForbidden.size() == 0) {
+            quadEdgeForbidden.resize(4*quads.size(),false);
+            for (uint32_t f = 0; f < quads.size(); ++f) {
+              for (uint32_t le = 0; le < 4; ++le) {
+                const uint32_t v1 = quads[f][le];
+                const uint32_t v2 = quads[f][(le+1)%4];
+                id2 vpair = sorted(v1,v2);
+                auto it = embLines.find(vpair);
+                if (it != embLines.end()) {
+                  quadEdgeForbidden[4*f+le] = true;
+                }
+              }
+            }
+          }
+        }
+
+        return true;
+      }
+
+      bool vertexValence(uint32_t v, uint32_t& valIn, uint32_t& valOut, uint32_t* qOut = nullptr) {
+        valIn = 0;
+        valOut = 0;
+        if (v >= v2q_first.size()) {
+          Msg::Error("vertexValence: incoherent state");
+          return false;
+        }
+        const uint32_t begin = v2q_first[v];
+        const uint32_t end = v2q_first[v+1];
+        for (uint32_t pos = begin; pos < end; ++pos) {
+          const uint32_t f = v2q_values[pos];
+          if (f == NO_U32) continue;
+          if (cav.quadIsInside[f]) {
+            valIn += 1;
+          } else {
+            valOut += 1;
+            if (qOut != nullptr) {
+              *qOut = f;
+            }
+          }
+        }
+        return true;
+      }
+
+      /* slow, do not call often */
+      bool vertexAdjacentQuads(MVertex* vp, std::vector<MQuadrangle*>& adjQuads) {
+        auto it = vertexLocal.find(vp);
+        if (it == vertexLocal.end()) {
+          return false;
+        }
+        const uint32_t v = it->second;
+        const uint32_t begin = v2q_first[v];
+        const uint32_t end = v2q_first[v+1];
+        const uint32_t n = end-begin;
+        adjQuads.resize(n);
+        for (uint32_t i = 0; i < n; ++i) {
+          const uint32_t f = v2q_values[begin+i];
+          adjQuads[i] = quadrangles[f];
+        }
+        return adjQuads.size() > 0;
+      }
+
+      /* warning: when false is returned, the current cavity
+       *          is no longer valid and it should be discarded
+       *          or repaired by a external backup */
+      bool addQuads(const std::vector<uint32_t>& toAdd, bool checkForbidden = true) {
+        vector<uint32_t> touched;
+        touched.reserve(4*toAdd.size());
+        for (uint32_t f: toAdd) {
+          if (cav.quadIsInside[f] == false) {
+            cav.quadIsInside[f] = true;
+            cav.elements.insert(f);
+          } else {
+            Msg::Error("cavity farmer: quad already in cavity, should not happen");
+            return false;
+          }
+          for (size_t le = 0; le < 4; ++le) {
+            touched.push_back(quads[f][le]);
+            uint32_t opp = adjacent[4*f+le];
+            if (cav.quadEdgeIsBdr[4*f+le]) {
+              Msg::Error("cavity farmer: quad edge already cavity bdr, should not happen");
+              return false;
+            } else if (opp != NO_U32 && cav.quadEdgeIsBdr[opp]) {
+              /* adjacent quad was in cavity and boundary */
+
+              if (checkForbidden && quadEdgeForbidden.size() > 0) {
+                /* check if adding the quad would include a forbidden quad edge */
+                if (quadEdgeForbidden[4*f+le]) return false;
+              }
+
+              /* adjacent quad was in cavity and boundary => no longer boundary */
+              cav.quadEdgeIsBdr[opp] = false;
+            } else {
+              /* adjacent quad edge was not cavity bdr, this one becomes one */
+              cav.quadEdgeIsBdr[4*f+le] = true;
+            }
+          }
+        }
+        sort_unique(touched);
+
+        for (uint32_t v: touched) {
+          uint32_t valIn, valOut;
+          vertexValence(v, valIn, valOut);
+          if (valOut > 0) {
+            cav.verticesBdr.insert(v);
+          } else if (valOut == 0 && valIn > 0) {
+            MVertex* pv = vertices[v];
+            GFace* pgf = pv->onWhat()->cast2Face();
+            if (pgf != nullptr) { /* vertex inside GFace */
+              auto it = cav.verticesInt.find(v);
+              if (it == cav.verticesInt.end()) { /* New interior */
+                if (checkForbidden && vertexForbidden[v]) {
+                  return false;
+                }
+                cav.verticesInt.insert(v);
+
+                if (valIn != 4) {
+                  cav.nIrregInterior += 1;
+                }
+
+                /* remove from boundary*/
+                auto itb = cav.verticesBdr.find(v);
+                if (itb != cav.verticesBdr.end()) {
+                  cav.verticesBdr.erase(itb);
+                }
+              }
+            } else { /* vertex on GFace boundary */
+              cav.verticesBdr.insert(v);
+            }
+          } else {
+            Msg::Error("cavity farmer: incoherent vertex state in addQuads");
+            return false;
+          }
+        }
+
+        return true;
+      }
+
+
+      double cavityIrregularity(uint32_t& nIrregular, uint32_t& nConvexCorners) {
+        nIrregular = 0;
+        nConvexCorners = 0;
+        double ir = 0.;
+        for (uint32_t v: cav.verticesInt) {
+          uint32_t valIn, valOut;
+          vertexValence(v, valIn, valOut);
+          if (valOut) {
+            Msg::Error("weird: cavity interior vertex has valence-out=%i",valOut);
+          }
+          if (valIn != 4) {
+            ir += std::pow(valIn-4.,2);
+            nIrregular += 1;
+          }
+        }
+        for (uint32_t v: cav.verticesBdr) {
+          uint32_t valIn, valOut;
+          vertexValence(v, valIn, valOut);
+          if (valIn == 1) {
+            nConvexCorners += 1;
+          } else if (valIn > 2) {
+            /* inside-valence 3+ on cavity boundary will be eliminated
+             * inside-valence 1 is a cavity corner, does not count as irregular here*/
+            nIrregular += 1;
+            ir += std::pow(valIn-2.,2);
+          }
+        }
+        return ir;
+      }
+
+      bool isValidConvexCavity() {
+        for (uint32_t v: cav.verticesBdr) {
+          uint32_t valIn, valOut;
+          vertexValence(v, valIn, valOut);
+          if (valOut == 1) {
+            MVertex* vp = vertices[v];
+            GFace* gf = vp->onWhat()->cast2Face();
+            if (gf != nullptr) {
+              /* Concave cavity corner, inside the surface mesh */
+              return false;
+            }
+          } else if (valOut >= 3) {
+            MVertex* vp = vertices[v];
+            GVertex* gv = vp->onWhat()->cast2Vertex();
+            if (gv != nullptr) {
+              /* CAD corner, valence is superior or equal to three, should not be absorbed in cavity */
+              return false;
+            }
+          } else if (valIn == 3 && valOut == 2 && vertexForbidden[v]) {
+            /* Would change a valence 5 singularity into a regular vertex */
+            return false;
+          }
+        }
+
+        return true;
+      }
+
+      bool convexify(bool checkForbidden = true) {
+        bool running = true;
+        while (running) {
+          running = false;
+          std::vector<uint32_t> quadsAtConcavities;
+          for (uint32_t v: cav.verticesBdr) {
+            uint32_t valIn, valOut;
+            uint32_t qOut = NO_U32;
+            vertexValence(v, valIn, valOut, &qOut);
+            /* Add exterior quad if cavity bdr vertex out-valence is one
+             * and cavity bdr vertex is inside the GFace */
+            if (valOut == 1) {
+              GFace* pgf = vertices[v]->onWhat()->cast2Face();
+              if (pgf == nullptr) continue;
+              quadsAtConcavities.push_back(qOut);
+            }
+          }
+          if (quadsAtConcavities.size() > 0) {
+            sort_unique(quadsAtConcavities);
+            bool oka = addQuads(quadsAtConcavities, checkForbidden);
+            if (!oka) return false;
+            running = true;
+          }
+        }
+        return isValidConvexCavity();
+      }
+
+      bool getCavitySides(uint32_t& Ncorners,
+          std::vector<std::vector<uint32_t> >& sides) {
+
+        /* Prepare the cavity boundary edges to make
+         * a continuous loop on them */
+        vector<uint32_t> pos2vertex;
+        vector<uint32_t> vertex2pos(vertices.size(),NO_U32); /* allocation outside ? */
+        vector<uint32_t> pos2nextVertex;
+        vector<bool> isCorner;
+        pos2vertex.reserve(cav.verticesBdr.size());
+        pos2vertex.reserve(cav.verticesBdr.size());
+        isCorner.reserve(cav.verticesBdr.size());
+        uint32_t v0 = NO_U32;
+
+        for (uint32_t v: cav.verticesBdr) {
+          uint32_t n = v2q_first[v+1]-v2q_first[v];
+          int edgeFound = 0;
+          for (uint32_t lq = 0; lq < n; ++lq) {
+            uint32_t q = v2q_values[v2q_first[v]+lq];
+            if (!cav.quadIsInside[q]) continue;
+            for (uint32_t le = 0; le < 4; ++le) {
+              if (quads[q][le] == v && cav.quadEdgeIsBdr[4*q+le]) {
+                edgeFound += 1;
+                if (edgeFound == 1) { /* edgeFound >= 2 means non manifold */
+                  uint32_t v2 = quads[q][(le+1)%4];
+                  if (vertex2pos[v] != NO_U32) {
+                    Msg::Debug("cavity farmer: get sides, vertex already assigned, not manifold bdr loop");
+                    return false;
+                  }
+                  vertex2pos[v] = pos2vertex.size();
+                  pos2vertex.push_back(v);
+                  pos2nextVertex.push_back(v2);
+                  uint32_t valIn, valOut;
+                  vertexValence(v, valIn, valOut);
+                  if (valIn == 1) {
+                    isCorner.push_back(true);
+                    Ncorners += 1;
+                    if (v0 == NO_U32) {
+                      v0 = v;
+                    } else {
+                      /* deterministic choice of the start */
+                      size_t num0 = vertices[v0]->getNum();
+                      size_t num = vertices[v]->getNum();
+                      if (num < num0) {
+                        v0 = v;
+                      }
+                    }
+                  } else {
+                    isCorner.push_back(false);
+                  }
+                }
+              }
+            }
+          }
+          if (edgeFound == 0) {
+            Msg::Error("cavity sides: cavity bdr edge not found around vertex %i, shoud NOT happen", v);
+            return false;
+          } else if (edgeFound >= 2) {
+            Msg::Debug("cavity sides: found %i cavity bdr edge, bdr loop is not manifold", edgeFound);
+            return false;
+          }
+        }
+        if (pos2vertex.size() == 0) {
+          return false;
+        }
+
+        if (v0 == NO_U32) {
+          /* No corner, the cavity is a disk */
+          v0 = pos2vertex[0];
+          sides.resize(1);
+          sides[0].push_back(v0);
+        }
+
+        /* Propagation along the boundary */
+        uint32_t nCornerVisited = 0;
+        uint32_t nVertexVisited = 0;
+        uint32_t v = v0;
+        uint32_t iter = 0;
+        while (true) {
+          iter += 1;
+          if (iter > 2 * cav.verticesBdr.size()) {
+            Msg::Warning("cavity farmer, get sides: infinite loop ? iter = %i but #bdr=%li, may happen if loop not manifold",
+                iter, cav.verticesBdr.size());
+            return false;
+            // debug_show_cavity("infinite_loop",false);
+            // gmsh::initialize();
+            // GeoLog::flush();
+            // gmsh::fltk::run();
+            // abort();
+          }
+
+          uint32_t pos = vertex2pos[v];
+          if (isCorner[pos]) {
+            nCornerVisited += 1;
+            sides.resize(sides.size()+1);
+            sides.back().push_back(v);
+          }
+
+          uint32_t v2 = pos2nextVertex[pos];
+          sides.back().push_back(v2);
+          v = v2;
+          nVertexVisited += 1;
+
+          if (v2 == v0) { /* closed the loop */
+            break;
+          }
+        }
+
+        if (nCornerVisited != Ncorners || nVertexVisited != cav.verticesBdr.size()) {
+          Msg::Debug("getCavitySides: not all cavity bdr corners/vertices were visited, bdr has multiple loops (i.e. not a topo. disk)");
+
+          // debug_show_cavity("bad_cav_" + std::to_string(nVertexVisited) + "!=" + std::to_string(cav.verticesBdr.size()));
+          // GeoLog::flush();
+          
+          return false;
+        }
+
+        return true;
+      }
+
+      bool growCavityStep() {
+        std::vector<std::vector<uint32_t> > sides;
+        uint32_t Ncorners = 0;
+        bool oks = getCavitySides(Ncorners, sides);
+        if (!oks) {
+          if (DBG_VERBOSE) {Msg::Debug("cavity farmer: grow one side, failed to build cavity boundary");}
+          return false;
+        }
+
+        // For isotropic growth, we choose try the largest sides first,
+        // and we add the getNum of the first vertex for reproductibility. */
+        vector<std::pair<size_t,size_t> > sizeAndSide(sides.size());
+        for (size_t i = 0; i < sides.size(); ++i) {
+          size_t num = vertices[sides[i].front()]->getNum();
+          sizeAndSide[i] = {size_t(1e7*sides[i].size()+num),i};
+        }
+        std::sort(sizeAndSide.begin(),sizeAndSide.end());
+        std::reverse(sizeAndSide.begin(),sizeAndSide.end());
+
+        cavBackup = cav; /* to be able to restore if candidate is not good */
+
+        for (size_t k = 0; k < sizeAndSide.size(); ++k) {
+          size_t i = sizeAndSide[k].second;
+          if (sides[i].size() < 2) continue;
+          bool candidate = true;
+          /* Look at side interior vertices */
+          for (size_t j = 1; j < sides[i].size()-1; ++j) {
+            uint32_t v = sides[i][j];
+            /* Check if side is touching a growth limit */
+            if (vertexForbidden[v]) {
+              candidate = false;
+              break;
+            }
+            /* Check if touching a CAD corner */
+            MVertex* pv = vertices[v];
+            GVertex* gv = dynamic_cast<GVertex*>(pv->onWhat());
+            if (gv != nullptr) { /* side touching CAD corner */
+              candidate = false;
+              break;
+            }
+          }
+
+          if (candidate) {
+            /* Build the new convex cavity by expanding on the side
+             * and check if it is a valid */
+
+            /* Add the new quads */
+            size_t nAdded = 0;
+            std::vector<uint32_t> cQuads;
+            cQuads.reserve(4*sides[i].size());
+            if (sides[i].size() == 2) { /* Side is one edge */
+              uint32_t v1 = sides[i][0];
+              uint32_t v2 = sides[i][1];
+              const uint32_t begin = v2q_first[v1];
+              const uint32_t end = v2q_first[v1+1];
+              for (uint32_t pos = begin; pos < end; ++pos) {
+                const uint32_t f = v2q_values[pos];
+                if (!cav.quadIsInside[f]) {
+                  for (size_t le = 0; le < 4; ++le) {
+                    uint32_t qv1 = quads[f][le];
+                    uint32_t qv2 = quads[f][(le+1)%4];
+                    if ((qv1 == v1 && qv2 == v2) || (qv1 == v2 && qv2 == v1)) {
+                      cQuads.push_back(f);
+                      break;
+                    }
+                  }
+                }
+                if (cQuads.size() > 0) break;
+              }
+            } else { /* Take quads adjacent to interior side vertices */
+              for (size_t j = 1; j < sides[i].size()-1; ++j) {
+                uint32_t v = sides[i][j];
+
+                const uint32_t begin = v2q_first[v];
+                const uint32_t end = v2q_first[v+1];
+                for (uint32_t pos = begin; pos < end; ++pos) {
+                  const uint32_t f = v2q_values[pos];
+                  if (!cav.quadIsInside[f]) {
+                    cQuads.push_back(f);
+                  }
+                }
+              }
+            }
+            if (cQuads.size() == 0) continue;
+            sort_unique(cQuads);
+            bool oka = addQuads(cQuads);
+            if (!oka) { /* try next side */
+              if (DBG_VERBOSE) {
+                Msg::Debug("cavity grow one side: %li quads, side %i, FAILED to add %li quads",
+                  cav.elements.size(), k, cQuads.size());}
+              cav = cavBackup;
+              continue;
+            }
+
+            /* Convexify the cavity */
+            bool okc = convexify();
+            if (!okc) { /* try next side */
+              if (DBG_VERBOSE) {
+                Msg::Debug("cavity grow one side: %li quads, side %i, FAILED to convexify after adding %li quads",
+                  cav.elements.size(), k, cQuads.size());}
+              cav = cavBackup;
+              continue;
+            }
+
+            /* Extended cavity is good, keep it */
+            cavBackup.clear();
+
+            if (DBG_VERBOSE) {
+              Msg::Debug("cavity grow one side: %li quads, side %i, OK convexify (after adding %li quads)",
+                  cav.elements.size(), k, cQuads.size());}
+
+            return true;
+          }
+        }
+        if (DBG_VERBOSE) {
+          Msg::Debug("cavity grow one side: %li quads, tried all sides, no extension possible",
+              cav.elements.size());}
+        cav = cavBackup;
+        return false;
+      }
+
+
+      bool growCavity(
+          const std::vector<MQuadrangle*>& quadsInit,
+          GrowthPolicy policy,
+          const std::vector<size_t>& patternsToCheck,
+          const unordered_map<size_t,size_t>& patternSizeLimits,
+          const unordered_set<MVertex*>& allowedIrregularVertices,
+          const unordered_set<MVertex*>& forbiddenIrregularVertices,
+          RemeshableCavity& rcav){
+
+        /* clear current cavity */
+        cav.clear();
+        cavBackup.clear();
+        cav.quadIsInside.resize(quads.size(),false);
+        cav.quadEdgeIsBdr.resize(4*quads.size(),false);
+
+        /* constrain the growth */
+        vertexForbidden.clear();
+        vertexForbidden.resize(vertices.size(),false);
+        for (MVertex* v: forbiddenIrregularVertices) {
+          if (allowedIrregularVertices.find(v) != allowedIrregularVertices.end()) {
+            continue;
+          }
+          auto it = vertexLocal.find(v);
+          if (it != vertexLocal.end()) vertexForbidden[it->second] = true;
+        }
+
+        /* initialize the cavity with given quads */
+        vector<uint32_t> lquads;
+        for (MQuadrangle* q: quadsInit) {
+          auto it = quadLocal.find(q);
+          if (it == quadLocal.end()) {
+            Msg::Error("cavity farmer: quad not found in farmer mesh");
+            return false;
+          }
+          lquads.push_back(it->second);
+        }
+        sort_unique(lquads);
+
+        bool oka = addQuads(lquads);
+        if (!oka) {
+          // Initialization may be rejected if it includes forbidden vertices or quad edges
+          // (e.g. around the vertex of an embedded line)
+          Msg::Debug("cavity remeshing: failed to initialize (%li quads)", lquads.size());
+          return false;
+        }
+
+        uint32_t lastNbIrregular = 0;
+        bool running = true;
+        uint32_t iter = 0;
+        while (running) {
+          iter += 1;
+          /* Grow the cavity on one of its sides */
+          bool okg = growCavityStep();
+          // if (false) {
+          //   std::string name = "cav" + std::to_string(ccc) + "_it" + std::to_string(iter) + "_" + std::to_string(okg);
+          //   debug_show_cavity(name, true);
+          //   GeoLog::flush();
+          // }
+          if (!okg) {
+            if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li vertices, failed to grow cavity",
+                iter, cav.verticesInt.size() + cav.verticesBdr.size());}
+            break;
+          }
+
+          /* nb of irregular vertices in cavity, counting interior and boundary, and singularities */
+          uint32_t curCavityNirreg = 0;
+          uint32_t curNcorners = 0;
+          double curCavityIrregularity = cavityIrregularity(curCavityNirreg, curNcorners);
+          /* If no new irregular vertices, continue the growth */
+          if (curCavityNirreg <= lastNbIrregular) continue;
+
+          /* Check if the cavity is topologicaly remeshable with patterns */
+          std::vector<std::vector<uint32_t> > sides; /* same for the different pattern checks */
+          uint32_t Ncorners = 0;
+          double bestIrreg = DBL_MAX;
+          for (size_t pId: patternsToCheck) {
+            /* Check pattern size limit if any */
+            auto it = patternSizeLimits.find(pId);
+            if (it != patternSizeLimits.end() && cav.elements.size() > it->second)
+              continue;
+
+            if (patternNumberOfCorners(pId) != curNcorners) {
+              if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, not right number of corners (%i)",
+                  iter, cav.elements.size(), curNcorners);}
+              continue;
+            }
+
+            if (pId == PATTERN_QUAD_DIAG35 || pId == PATTERN_QUAD_ALIGNED35
+                || pId == PATTERN_QUAD_CHORD_UTURN) {
+              /* these patterns have two irregular vertices inside, no need to check
+               * if there are only two irregular vertices in current cavity */
+              if (curCavityNirreg <= 2) continue;
+            }
+
+            /* Get the sides to check if remeshable */
+            if (sides.size() == 0) { /* first time, same for the next pattern checks */
+              bool oks = getCavitySides(Ncorners, sides);
+              if (!oks) {
+                if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, failed to build cavity boundary",
+                    iter, cav.elements.size());}
+                break;
+              }
+            }
+
+            /* Number of vertices on each side, including extremities */
+            std::vector<size_t> sideSizes(sides.size());
+            for (size_t i = 0; i < sideSizes.size(); ++i) sideSizes[i] = sides[i].size();
+
+            if (pId == PATTERN_QUAD_REGULAR) {
+              /* two opposite sides must have same number of vertices, no need to check else */
+              if (sideSizes.size() != 4) continue;
+              if (sideSizes[0] != sideSizes[2] || sideSizes[1] != sideSizes[3]) continue;
+            }
+
+            /* Check if remeshable with pattern pId */
+            double irregAfterRemeshing = 0.; /* to ensure irregularity decrease with remeshing */
+            std::pair<size_t,int> par;
+            bool meshable = patchIsRemeshableWithQuadPattern({pId}, Ncorners, sideSizes, par, irregAfterRemeshing);
+
+            if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, #sides=%li, #irregular=%i, cavityIrregularity=%f | CHECK pId %li: remeshability: %i, irregAfterRemeshing=%e (best was %e)",
+                iter, cav.elements.size(), sides.size(), curCavityNirreg, curCavityIrregularity, pId, meshable, irregAfterRemeshing, bestIrreg);}
+
+            if (!meshable) continue;
+            if (irregAfterRemeshing >= bestIrreg) {
+              if (DBG_VERBOSE) {Msg::Debug("------- discard because irregAfterRemeshing=%f >= bestIrreg=%f",
+                  irregAfterRemeshing, bestIrreg);}
+              continue;
+            }
+            if (irregAfterRemeshing >= curCavityIrregularity) {
+              if (DBG_VERBOSE) {Msg::Debug("------- discard because irregAfterRemeshing=%f >= curCavityIrregularity=%f",
+                  irregAfterRemeshing, curCavityIrregularity);}
+              continue;
+            }
+
+            { /* set last remeshable cavity */
+              if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, set new remeshable cavity (irregAfterRemeshing=%f)",
+                  iter, cav.elements.size(), irregAfterRemeshing);}
+              bestIrreg = irregAfterRemeshing;
+              lastNbIrregular = curCavityNirreg;
+
+              /* set last remeshable cavity */
+              rcav.irregularityMeasure = irregAfterRemeshing;
+              rcav.nIrregular = curCavityNirreg;
+              rcav.patternNoAndRot = par;
+              /* - convert local indices to gmsh elements */
+              rcav.elements.clear();
+              rcav.elements.reserve(cav.elements.size());
+              for (uint32_t f: cav.elements) {
+                rcav.elements.push_back(quadrangles[f]);
+              }
+              rcav.intVertices.clear();
+              rcav.intVertices.reserve(cav.verticesInt.size());
+              for (uint32_t v: cav.verticesInt) {
+                rcav.intVertices.push_back(vertices[v]);
+              }
+              rcav.sides.resize(sides.size());
+              for (size_t i = 0; i < sides.size(); ++i) {
+                rcav.sides[i].resize(sides[i].size());
+                for (size_t j = 0; j < sides[i].size(); ++j) {
+                  rcav.sides[i][j] = vertices[sides[i][j]];
+                }
+              }
+
+              if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, SET LAST remeshable cavity (#irreg = %li)",
+                  iter, rcav.elements.size(), curCavityNirreg);}
+            }
+          }
+          if (policy == GROW_MINIMAL && bestIrreg != DBL_MAX && lastNbIrregular > 0) {
+            /* Found a remeshable cavity, return */
+            if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, policy is MINIMAL growth, RETURN cavity",
+                iter, rcav.elements.size());}
+            return true;
+          }
+        }
+
+        if (lastNbIrregular > 0) {
+          if (DBG_VERBOSE) {Msg::Debug("------ grow cavity: iter %li, %li quads, MAXIMAL growth, RETURN cavity",
+              iter, rcav.elements.size());}
+        }
+
+        return lastNbIrregular > 0;
+      }
+
+      bool getCavityNeighbors(RemeshableCavity& rcav, std::vector<MElement*>& neighbors) {
+        neighbors.clear();
+        std::vector<uint32_t> bdr;
+        for (auto& side: rcav.sides) for (MVertex* v: side) {
+          auto it = vertexLocal.find(v);
+          if (it != vertexLocal.end()) {
+            bdr.push_back(it->second);
+          }
+        }
+        sort_unique(bdr);
+        for (uint32_t v: bdr) {
+          const uint32_t begin = v2q_first[v];
+          const uint32_t end = v2q_first[v+1];
+          for (uint32_t pos = begin; pos < end; ++pos) {
+            const uint32_t f = v2q_values[pos];
+            MElement* elt = quadrangles[f];
+            neighbors.push_back(elt);
+          }
+        }
+        neighbors = difference(neighbors,rcav.elements);
+        return true;
+      }
+  };
+
+  bool quadMeshIsMinimal(const CavityFarmer& farmer, const std::vector<std::pair<SPoint3,int> >& singularities) {
+    if (farmer.vertices.size() == 0)  {
+      Msg::Error("quadMeshIsMinimal: farmer not initialized");
+      return false;
+    }
+    size_t nIrregInt = 0;
+    size_t nIrregBdr = 0;
+    for (uint32_t i = 0; i < farmer.vertices.size(); ++i) {
+      uint32_t val = farmer.v2q_first[i+1]-farmer.v2q_first[i];
+      MVertex* v = farmer.vertices[i];
+      if (v->onWhat()->cast2Face() != nullptr && val != 4) {
+        nIrregInt += 1;
+      } else if (v->onWhat()->cast2Edge() != nullptr && val != 2) {
+        nIrregBdr += 1;
+      }
+    }
+    if (nIrregBdr == 0 && nIrregInt == singularities.size()) return true;
+    return false;
+  }
+
+
+  bool remeshCavity(GFace* gf, RemeshableCavity& cav, QuadqsGFaceContext& ctx,
+      const std::vector<MElement*>& cavityNeighborsForSmoothing) {
+    /* Collect current patch components */
+    bool SHOW_REMESH_CAV = false;
+    static size_t ccount = 0;
+    if (SHOW_REMESH_CAV) {
+      ccount += 1;
+      std::string name = "cav" + std::to_string(ccount);
+      GeoLog::add(cav.elements,name+"_try");
+    }
+
+    /* Call the remeshing code */
+    const double minSICNafer = 0.1;
+    GFaceMeshDiff diff;
+    int st = remeshPatchWithQuadPattern(gf, cav.patternNoAndRot, cav.sides, cav.elements,
+        cav.intVertices, minSICNafer, ctx.invertNormalsForQuality, ctx.sp, diff);
+    if (st != 0) {
+      if (DBG_VERBOSE) {Msg::Debug("remesh cavity: %li quads, failed to remesh path with quad pattern",
+          cav.elements.size());}
+      return false;
+    }
+
+    /* Check the geometry quality before / after*/
+    double sicnMin, sicnAvg;
+    computeSICN(diff.before.elements, sicnMin, sicnAvg);
+    double sicnMinAfter, sicnAvgAfter;
+    computeSICN(diff.after.elements, sicnMinAfter, sicnAvgAfter);
+    if ((sicnMin > 0.3 && sicnAvg > 0.5) || sicnMinAfter > sicnMin) {
+      constexpr bool verifyTopology = true;
+      size_t neb = diff.before.elements.size();
+      size_t nea = diff.after.elements.size();
+      size_t nvb = diff.before.intVertices.size();
+      size_t nva = diff.after.intVertices.size();
+
+      if (SHOW_REMESH_CAV) {
+        std::string name = "cav" + std::to_string(ccount);
+        GeoLog::add(diff.after.elements,name+"_OK");
+      }
+
+      /* To smooth the interface between remeshed cavity and rest of the mesh,
+       * we collect the boundary (interior to the mesh) and its adjacent quads */
+      vector<MVertex*> toSmooth;
+      vector<MElement*> neighbors = cavityNeighborsForSmoothing;
+      {
+        /* Cavity boundary vertices, inside the surface, not changed by diff.execute() */
+        toSmooth.reserve(diff.after.bdrVertices.front().size());
+        for (MVertex* v: diff.after.bdrVertices.front()) {
+          GFace* gf = dynamic_cast<GFace*>(v->onWhat());
+          if (gf != nullptr) toSmooth.push_back(v);
+        }
+
+        /* New quads inside cavity, touching boundary, still present after execute() */
+        for (MElement* e: diff.after.elements) for (size_t lv = 0; lv < 4; ++lv) {
+          MVertex* v = e->getVertex(lv);
+          auto it = std::find(toSmooth.begin(),toSmooth.end(),v);
+          if (it != toSmooth.end()) {
+            neighbors.push_back(e);
+            break;
+          }
+        }
+        sort_unique(neighbors);
+      }
+
+      /* Modify the GFace mesh ! (and empty the diff content) */
+      bool oke = diff.execute(verifyTopology);
+      if (!oke) {
+        Msg::Error("remesh cavity: diff execute() failed, should not happen");
+        return false;
+      }
+
+      Msg::Debug("----V remeshed a cavity, %li -> %li quads, %li -> %li int. vertices, SICN min: %.3f -> %.3f",
+          neb, nea, nvb, nva, sicnMin, sicnMinAfter);
+
+      /* Boundary vertex smoothing, to get a smooth transition with the
+       * rest of the mesh after cavity remeshing */
+      {
+        GFaceMeshPatch patchBdr;
+        bool okp = patchFromElements(gf, neighbors, patchBdr);
+        if (okp) {
+          Msg::Debug("----P smooth cavity boundary (%li vertices, %li quads)",
+              patchBdr.intVertices.size(),patchBdr.elements.size());
+          GeomOptimStats stats;
+          GeomOptimOptions opt;
+          opt.sp = ctx.sp;
+          opt.outerLoopIterMax = 20.;
+          opt.timeMax = 10.;
+          opt.withBackup = true;
+          opt.invertCADNormals = ctx.invertNormalsForQuality;
+          opt.smartMinThreshold = 0.1;
+          opt.localLocking = true;
+          opt.dxLocalMax = 1.e-4;
+          patchOptimizeGeometryWithKernel(patchBdr, opt, stats);
+        }
+      }
+      Msg::Debug("---->");
+      return true;
+    } else {
+      Msg::Debug("----X reject cavity new geometry, SICN min: %.3f -> %.3f, avg: %.3f -> %.3f",
+          sicnMin, sicnMinAfter, sicnAvg, sicnAvgAfter);
+      if (SHOW_REMESH_CAV) {
+        std::string name = "cav" + std::to_string(ccount);
+        GeoLog::add(diff.after.elements,name+"_REJQ");
+      }
+    }
+
+    return false;
+  }
+
+  void assignSingularitiesToIrregularVertices(
+      GFace* gf,
+      const CavityFarmer& farmer,
+      const std::vector<std::pair<SPoint3,int> >& singularities,
+      std::vector<MVertex*>& irregularVertices) {
+    irregularVertices.clear();
+
+    /* Extract irregular vertices in face */
+    vector<MVertex*> nodeVal3;
+    vector<MVertex*> nodeVal5;
+
+    for (uint32_t i = 0; i < farmer.vertices.size(); ++i) {
+      uint32_t val = farmer.v2q_first[i+1]-farmer.v2q_first[i];
+      MVertex* v = farmer.vertices[i];
+      if (v->onWhat() != gf) continue;
+      if (val != 4) {
+        if (val == 3) {
+          nodeVal3.push_back(v);
+        } else if (val == 5) {
+          nodeVal5.push_back(v);
+        }
+      }
+    }
+
+    /* Assign singular vertices */
+    for (size_t i = 0; i < singularities.size(); ++i) {
+      int index = singularities[i].second;
+      vector<MVertex*>* verticesp;
+      if (index == 1) {
+        verticesp = &nodeVal3;
+      } else if (index == -1) {
+        verticesp = &nodeVal5;
+      } else {
+        Msg::Warning("cavity remeshing: face %i, singularity of index %i not supported", gf->tag(),index);
+        continue;
+      }
+      SPoint3 p = singularities[i].first;
+      vector<MVertex*>& vertices = *verticesp;
+      double dmin = DBL_MAX;
+      MVertex* best = nullptr;
+      for (size_t j = 0; j < vertices.size(); ++j) {
+        SVector3 p2 = vertices[j]->point();
+        double dist = vertices[j]->point().distance(p);
+        if (dist < dmin) {
+          dmin = dist;
+          best = vertices[j];
+        }
+      }
+      if (best != nullptr) {
+        irregularVertices.push_back(best);
+      } else {
+        Msg::Warning("- Face %i, singular node %i, failed to assign to irregular vertex", gf->tag(), i);
+      }
+    }
+  }
+
+  struct CavityStart {
+    std::vector<MQuadrangle*> quads;
+    SPoint3 center;
+
+    CavityStart(const std::vector<MQuadrangle*>& _qs) {
+      quads = _qs;
+      sort_unique(quads);
+      center = SPoint3(0.,0.,0.);
+      for (MQuadrangle* e: quads) {
+        center = center + e->barycenter();
+      }
+      if (quads.size() > 0) {
+        center = center * double(1./double(quads.size()));
+      }
+    }
+
+    bool operator==(CavityStart const& b) const {
+      return b.quads == quads;
+    }
+  };
+
+  struct CavityStartHash {
+    size_t operator()(const CavityStart& start) const noexcept {
+      size_t seed = 0;
+      for (MQuadrangle* a: start.quads) {
+        hash_combine(seed, robin_hood::hash_bytes(&a, sizeof(MQuadrangle*)));
+      }
+      return seed;
+    }
+  };
+
+  struct StartStats {
+    int nTry = 0;
+    int nTryMax = 0;
+  };
+
+  struct CavityRegulator {
+    unordered_map<CavityStart, StartStats, CavityStartHash> starts;
+
+    bool authorized(const CavityStart& start) {
+      auto it = starts.find(start);
+      if (it == starts.end()) {
+        return true;
+      } else {
+        if (it->second.nTry < it->second.nTryMax) return true;
+      }
+      return false;
+    }
+
+    void declare(const CavityStart& start, int nTryMaxIfFirstTime = 3) {
+      auto it = starts.find(start);
+      if (it != starts.end()) {
+        it->second.nTry += 1;
+      } else { /* new start */
+        StartStats st;
+        st.nTry = 1;
+        st.nTryMax = nTryMaxIfFirstTime;
+        starts[start] = st;
+      }
+    }
+
+    void decreaseCounterCloseStarts(const CavityFarmer& farmer,
+        const SPoint3& pos, size_t Nclose = 4) {
+      std::vector<std::pair<double,StartStats*> > dist_stats;
+      for (auto& kv: starts) {
+        bool stillExists = true;
+        for (MQuadrangle* q: kv.first.quads) {
+          if (farmer.quadLocal.find(q) == farmer.quadLocal.end()) {
+            stillExists = false;
+            break;
+          }
+        }
+        if (!stillExists) continue;
+        double dist = pos.distance(kv.first.center);
+        if (dist > 1.e-22) {
+          dist_stats.push_back({dist,&(kv.second)});
+        }
+      }
+      std::sort(dist_stats.begin(),dist_stats.end());
+      for (size_t i = 0; i < std::min(Nclose,dist_stats.size()); ++i) {
+        dist_stats[i].second->nTry -= 1;
+      }
+    }
+
+  };
+
+  bool remeshQuadrilateralCavities(GFace* gf,
+      const std::vector<std::pair<SPoint3,int> >& singularities,
+      const std::vector<size_t>& patternsToCheck,
+      const unordered_map<size_t,size_t>& patternSizeLimits,
+      CavityRegulator& regulator,
+      QuadqsGFaceContext& ctx)
+  {
+    if (ctx.finished) return true;
+
+    Msg::Debug("-- remeshing quadrilateral cavities (%i quads, %i patterns to check) ...",
+        gf->quadrangles.size(), patternsToCheck.size());
+    unordered_set<MVertex*> allowedIrregularVertices;
+    unordered_set<MVertex*> forbiddenIrregularVertices;
+    std::vector<MVertex*> singularVertices; /* to be preserved */
+    std::vector<SPoint3> repulsion; /* to distribute the cavities, add repulsion after remeshing */
+
+    size_t nbCavityRemeshed = 0;
+
+    /* for PASS_ALONG_GEDGES
+     * The queue contains the curves which are not loop */
+    std::queue<GEdge*> gedges;
+    for (GEdge* ge: gf->edges()) {
+      /* Ignore periodic curves */
+      if (ge->vertices().size() != 2) continue;
+      if (ge->periodic(0)) continue;
+      if (ge->vertices().front() == ge->vertices().back()) continue;
+      gedges.push(ge);
+    }
+
+    /* for PASS_FROM_CORNERS
+     * The queue contains the CAD corners which are not concave */
+    std::queue<GVertex*> gcorners;
+    for (GVertex* gv: gf->vertices()) {
+      gcorners.push(gv);
+    }
+
+    /* for PASS_FROM_IRREGULAR
+     * The priority queue contains the irregular vertices not associated
+     * to cross field singularity and a priority based on repulsion.
+     * Higher values appear first when doing Q.top() */
+    std::priority_queue<std::pair<double,MVertex*>,  std::vector<std::pair<double,MVertex*> > > Qirreg;
+
+    CavityFarmer farmer(gf);
+
+    const size_t PASS_FROM_CORNERS = 1;
+    const size_t PASS_ALONG_GEDGES = 2;
+    const size_t PASS_FROM_IRREGULAR = 3;
+    for (size_t pass : {PASS_FROM_CORNERS, PASS_ALONG_GEDGES, PASS_FROM_IRREGULAR}) {
+      bool updateRequired = true;
+      bool inProgress = true;
+      while (inProgress
+          || (pass == PASS_FROM_CORNERS && gcorners.size() > 0)
+          || (pass == PASS_ALONG_GEDGES && gedges.size() > 0)
+          || (pass == PASS_FROM_IRREGULAR && Qirreg.size() > 0)) {
+        inProgress = false;
+
+        if (updateRequired) {
+          farmer.updateFarmer(gf);
+
+          if (quadMeshIsMinimal(farmer, singularities)) {
+            ctx.finished = true;
+            break;
+          }
+
+          /* Get vertices to preserve from cross field singularities */
+          assignSingularitiesToIrregularVertices(gf, farmer, singularities, singularVertices);
+          forbiddenIrregularVertices.clear();
+          for (MVertex* v: singularVertices) forbiddenIrregularVertices.insert(v);
+
+          if (pass == PASS_FROM_IRREGULAR) {
+            /* Update the queue */
+            while (!Qirreg.empty()) { /* empty the queue */
+              Qirreg.pop();
+            }
+            for (uint32_t i = 0; i < farmer.vertices.size(); ++i) {
+              uint32_t val = farmer.v2q_first[i+1]-farmer.v2q_first[i];
+              MVertex* v = farmer.vertices[i];
+              if (v->onWhat() != gf) continue;
+              if (val == 4) continue;
+              if (forbiddenIrregularVertices.find(v) != forbiddenIrregularVertices.end()) continue;
+
+              SPoint3 pt = v->point();
+              double prio = 0.;
+              for (const SPoint3& r: repulsion) {
+                prio += pt.distance(r);
+              }
+              /* deterministic offset for reproductibility */
+              double offsetR = 1.e-16*double(v->getNum());
+              Qirreg.push({prio+offsetR,v});
+            }
+          }
+
+          updateRequired = false;
+        }
+
+        /* Initialize a remeshing cavity */
+        std::vector<MQuadrangle*> quadsInit;
+        size_t nTryMax = 3;
+        GrowthPolicy policy;
+        MVertex* vIrreg = nullptr; /* only used with PASS_FROM_IRREGULAR */
+        if (pass == PASS_FROM_CORNERS) {
+          if (gcorners.empty()) continue;
+          policy = GROW_MAXIMAL;
+          nTryMax = 1;
+          allowedIrregularVertices.clear();
+          GVertex* gv = gcorners.front();
+          gcorners.pop();
+          for (MVertex* v: gv->mesh_vertices) {
+            std::vector<MQuadrangle*> adjQuads;
+            bool oka = farmer.vertexAdjacentQuads(v, adjQuads);
+            if (oka) {
+              append(quadsInit,adjQuads);
+            }
+          }
+          sort_unique(quadsInit);
+          if (quadsInit.size() == 0 || quadsInit.size() >= 3) continue; /* do not start from concave corners */
+        } else if (pass == PASS_ALONG_GEDGES) {
+          if (gedges.empty()) continue;
+          policy = GROW_MAXIMAL;
+          nTryMax = 1;
+          allowedIrregularVertices.clear();
+          /* Get adjacent to a GEdge not yet processed */
+          GEdge* ge = gedges.front();
+          gedges.pop();
+          for (MVertex* v: ge->mesh_vertices) {
+            std::vector<MQuadrangle*> adjQuads;
+            bool oka = farmer.vertexAdjacentQuads(v, adjQuads);
+            if (oka) {
+              append(quadsInit,adjQuads);
+            }
+          }
+          sort_unique(quadsInit);
+        } else if (pass == PASS_FROM_IRREGULAR) {
+          if (Qirreg.empty()) continue;
+          policy = GROW_MINIMAL;
+          nTryMax = 3;
+          vIrreg = Qirreg.top().second;
+          Qirreg.pop();
+          std::vector<MQuadrangle*> adjQuads;
+          bool oka = farmer.vertexAdjacentQuads(vIrreg, adjQuads);
+          if (oka) {
+            append(quadsInit,adjQuads);
+          } else {
+            Msg::Error("remesh quad cavity: vertex not found in adjacency map, should NEVER happen");
+            return false;
+          }
+        }
+        if (quadsInit.size() == 0) continue;
+
+
+        /* Check if not too many try already done */
+        CavityStart start(quadsInit);
+        if (!regulator.authorized(start)) {
+          continue;
+        }
+        regulator.declare(start,nTryMax);
+
+        Msg::Debug("---< start cavity with %i quads", quadsInit.size());
+
+        /* Grow a convex cavity containg irregular vertices to remove */
+        RemeshableCavity cav;
+        bool okg = farmer.growCavity(quadsInit, policy, patternsToCheck, patternSizeLimits,
+            allowedIrregularVertices, forbiddenIrregularVertices, cav);
+        if (!okg) {
+          continue;
+        }
+
+        Msg::Debug("---- found a topological cavity with %i quads, try geometrical remeshing", cav.elements.size());
+
+        std::vector<MElement*> neighbors;
+        farmer.getCavityNeighbors(cav, neighbors);
+
+        bool okr = remeshCavity(gf, cav, ctx, neighbors);
+        if (okr) {
+          /* GFace mesh has changed, need to update adjacency info (v2q is no longer usable) */
+          updateRequired = true;
+          inProgress = true;
+          nbCavityRemeshed += 1;
+          repulsion.push_back(start.center);
+          size_t NcloseUnlock = 4;
+          regulator.decreaseCounterCloseStarts(farmer,start.center, NcloseUnlock);
+        }
+      }
+
+      if (ctx.finished) break;
+    }
+
+    Msg::Debug("-- remeshed %i quadrilateral cavities", nbCavityRemeshed);
+
+    ctx.nQuadCavityRemesh += nbCavityRemeshed;
+
+    return true;
+  }
+
+  bool remeshSingularityCavities(GFace* gf,
+      const std::vector<std::pair<SPoint3,int> >& singularities,
+      const std::vector<size_t>& patternsToCheck,
+      const unordered_map<size_t,size_t>& patternSizeLimits,
+      CavityRegulator& regulator,
+      QuadqsGFaceContext& ctx)
+  {
+    if (ctx.finished) return true;
+
+    Msg::Debug("-- remeshing singularity cavities (face %i, %i quads, %i patterns to check) ...",
+        gf->tag(), gf->quadrangles.size(), patternsToCheck.size());
+    unordered_set<MVertex*> allowedIrregularVertices;
+    unordered_set<MVertex*> forbiddenIrregularVertices;
+    std::vector<MVertex*> singularVertices; /* to preserve */
+    std::vector<SPoint3> repulsion; /* to distribute the cavities, add repulsion after remeshing */
+
+    size_t nbCavityRemeshed = 0;
+
+    /* The priority queue contains the irregular vertices associated to
+     * cross field singularity and a priority based on repulsion.
+     * Higher values appear first when doing Q.top() */
+    std::priority_queue<std::pair<double,MVertex*>,  std::vector<std::pair<double,MVertex*> > > Q;
+
+    CavityFarmer farmer(gf);
+
+    bool updateRequired = true;
+    bool inProgress = true;
+    while (inProgress || Q.size() > 0) {
+      inProgress = false;
+
+      if (updateRequired) {
+        farmer.updateFarmer(gf);
+
+        if (quadMeshIsMinimal(farmer, singularities)) {
+          ctx.finished = true;
+          break;
+        }
+
+        /* Get vertices to preserve from cross field singularities */
+        assignSingularitiesToIrregularVertices(gf, farmer, singularities, singularVertices);
+        forbiddenIrregularVertices.clear();
+        for (MVertex* v: singularVertices) forbiddenIrregularVertices.insert(v);
+
+        /* Update the queue */
+        while (!Q.empty()) { /* empty the queue */
+          Q.pop();
+        }
+        for (MVertex* v: singularVertices) {
+          SPoint3 pt = v->point();
+          double prio = 0.;
+          for (const SPoint3& r: repulsion) {
+            prio += pt.distance(r);
+          }
+          /* deterministic offset for reproductibility */
+          double offsetR = 1.e-16*double(v->getNum());
+          Q.push({prio+offsetR,v});
+        }
+
+        updateRequired = false;
+      }
+
+      /* Initialize a remeshing cavity */
+      if (Q.empty()) continue;
+      GrowthPolicy policy = GROW_MINIMAL;
+      if (singularities.size() == 1) policy = GROW_MAXIMAL;
+      MVertex* vSing = Q.top().second;
+      Q.pop();
+      std::vector<MQuadrangle*> quadsInit;
+      bool oka = farmer.vertexAdjacentQuads(vSing, quadsInit);
+      if (!oka) {
+        Msg::Error("remesh singularity cavity: vertex not found in adjacency map, should NEVER happen");
+        return false;
+      }
+      allowedIrregularVertices.clear();
+      allowedIrregularVertices.insert(vSing);
+
+      /* Check if not too many try already done */
+      CavityStart start(quadsInit);
+      if (!regulator.authorized(start)) {
+        continue;
+      }
+      int nTryMax = 3;
+      regulator.declare(start,nTryMax);
+
+      Msg::Debug("---< start cavity with %i quads adjacent to singularity vertex %li",
+          quadsInit.size(), vSing->getNum());
+
+      /* Grow a convex cavity containg irregular vertices to remove */
+      RemeshableCavity cav;
+      bool okg = farmer.growCavity(quadsInit, policy, patternsToCheck, patternSizeLimits,
+          allowedIrregularVertices, forbiddenIrregularVertices, cav);
+      if (!okg) {
+        continue;
+      }
+
+      Msg::Debug("---- found a topological cavity with %i quads, try geometrical remeshing", cav.elements.size());
+
+      std::vector<MElement*> neighbors;
+      farmer.getCavityNeighbors(cav, neighbors);
+
+      bool okr = remeshCavity(gf, cav, ctx, neighbors);
+
+      if (okr) {
+        /* GFace mesh has changed, need to update adjacency info (v2q is no longer usable) */
+        updateRequired = true;
+        inProgress = true;
+        nbCavityRemeshed += 1;
+        repulsion.push_back(start.center);
+        size_t NcloseUnlock = 4;
+        regulator.decreaseCounterCloseStarts(farmer,start.center, NcloseUnlock);
+      }
+    }
+
+    ctx.nSingCavityRemesh += nbCavityRemeshed;
+
+    Msg::Debug("-- remeshed %i singularity cavities", nbCavityRemeshed);
+
+    return true;
+  }
+
+
+  /* Global storage. Patterns are initialized at runtime, by the call to initQuadPatterns() */
+  std::vector<QuadMeshPattern> patterns;
+}
+
+using namespace QMT;
+
+int initQuadPatterns() {
+  if (patterns.size() != 0) return false;
+  {
+    Msg::Info("loading %li quad patterns", quad_meshes.size());
+    patterns.resize(quad_meshes.size());
+    for (size_t i = 0; i < quad_meshes.size(); ++i) {
+      bool ok = patterns[i].load(quad_meshes[i].first, quad_meshes[i].second);
+      if (!ok) {
+        Msg::Error("mesh quad patterns, failed to init pattern no %i", i);
+      }
+    }
+  }
+  return true;
+}
+
+std::vector<size_t> getAllLoadedPatterns() {
+  std::vector<size_t> pIds;
+  for (size_t i = 0; i < patterns.size(); ++i) {
+    pIds.push_back(patterns[i].patternId);
+  }
+  return pIds;
+}
+
+bool patchIsRemeshableWithQuadPattern(
+    const std::vector<size_t>& patternsToCheck,
+    size_t Ncorners,
+    const std::vector<size_t>& sideSizes,
+    std::pair<size_t,int>& patternNoAndRot,
+    double& irregularityMeasure) {
+  irregularityMeasure = DBL_MAX;
+  if (patterns.size() == 0) {
+    Msg::Error("Quad patterns are not loaded, please call initQuadPatterns() before");
+    return false;
+  }
+
+  vector<bool> check(patterns.size(),false);
+  for (size_t pId: patternsToCheck) check[pId] = true;
+
+  double irreg_min = DBL_MAX;
+  for (size_t i = 0; i < patterns.size(); ++i) if (check[i]) {
+    const QuadMeshPattern& P = patterns[i];
+    // DBG(" ", i, P.ncorners, P.sides.size());;
+    if (Ncorners != P.ncorners) continue;
+    if (sideSizes.size() != P.sides.size()) continue;
+
+    int rot = 0;
+    double score = checkPatternMatchingWithRotations(P, sideSizes, rot);
+    if (score > 0.) {
+      double irreg = patternIrregularity(P);
+      if (irreg < irreg_min) {
+        patternNoAndRot.first = i;
+        patternNoAndRot.second = rot;
+        irreg_min = irreg;
+      }
+    }
+  }
+
+  irregularityMeasure = irreg_min;
+  return (irreg_min != DBL_MAX);
+}
+
+int remeshPatchWithQuadPattern(
+    GFace* gf,
+    const std::pair<size_t,int>& patternNoAndRot,
+    const std::vector<std::vector<MVertex*> > & sides,
+    const std::vector<MElement*> & elements,
+    const std::vector<MVertex*>& intVertices,
+    double minSICNrequired,
+    bool invertNormalsForQuality,
+    SurfaceProjector* sp,
+    GFaceMeshDiff& diff) {
+  if (patterns.size() == 0) {
+    Msg::Error("Quad patterns are not loaded, please call initQuadPatterns() before");
+    return false;
+  }
+
+  size_t N = sides.size();
+  const QuadMeshPattern& P = patterns[patternNoAndRot.first];
+  int rot = patternNoAndRot.second;
+  if (P.sides.size() != N) {
+    Msg::Error("remesh patch with patterns: sides not matching, shoud not happen (pattern has %li sides, but %li sides in input) ...", P.sides.size(), N);
+    return -1;
+  }
+
+  /* Apply the rotation */
+  std::vector<std::vector<MVertex*> > sidesr = sides;
+  if (rot > 0) {
+    std::rotate(sidesr.begin(),sidesr.begin()+(size_t)rot,sidesr.end());
+  } else if (rot < 0) {
+    std::reverse(sidesr.begin(),sidesr.end());
+    std::rotate(sidesr.begin(),sidesr.begin()+(size_t) std::abs(rot),sidesr.end());
+    for (size_t i = 0; i <sidesr.size(); ++i) {
+      std::reverse(sidesr[i].begin(),sidesr[i].end());
+    }
+  }
+
+  /* Verify the given pattern and given sides are coherent */
+  vector<size_t> ssr(sidesr.size());
+  for (size_t i = 0; i < sidesr.size(); ++i) ssr[i] = sidesr[i].size();
+  vector<int> slt;
+  double match = checkPatternMatching(P, ssr, slt);
+  if (match <= 0.) {
+    Msg::Error("remesh patch with patterns: given pattern not matching given sides");
+    return -1;
+  }
+
+  /* Add the new vertices and quads in the GFace */
+  MVertex* oldCenter = centerOfElements(elements);
+
+  /* Generate new interior MVertex and MElement instances */
+  diff.gf = gf;
+  diff.after.gf = gf;
+  bool oka = addQuadsAccordingToPattern(P, slt, gf, sidesr, diff.after.intVertices, diff.after.elements, oldCenter);
+  if (!oka) {
+    Msg::Error("failed to add quads according to pattern, weird");
+    clearStuff(diff.after.intVertices, diff.after.elements);
+    return -1;
+  }
+
+  /* Ensure coherent orientation between the new mesh and the boundary.
+   * The reference orientation (a,b) is from the sides before applying
+   * rotation. */
+  MVertex* a = sides[0][0];
+  MVertex* b = sides[0][1];
+  bool oko = orientElementsAccordingToBoundarySegment(a, b, diff.after.elements);
+  if (!oko) {
+    Msg::Error("remesh quad with patterns: bdr quad edge not found, weird");
+    return false;
+  }
+
+  /* Build the old patch in the diff */
+  diff.before.gf = gf;
+  diff.before.intVertices = intVertices;
+  diff.before.elements = elements;
+  /* - build a continuous bdr loop from the sides */
+  diff.before.bdrVertices = {{sides.front().front()}};
+  for (auto& side: sides) for (MVertex* v: side) {
+    if (v != diff.before.bdrVertices.front().back()) {
+      diff.before.bdrVertices.front().push_back(v);
+    }
+  }
+  if (diff.before.bdrVertices.front().back() == diff.before.bdrVertices.front().front()) {
+    diff.before.bdrVertices.front().pop_back();
+  }
+  diff.after.bdrVertices = diff.before.bdrVertices; /* the new patch has the same bdr */
+
+  /* Determine the new patch geometry by smoothing on the surface */
+  GeomOptimStats stats;
+  int stGeoGlobal = -1;
+  if (gf->haveParametrization()) {
+    stGeoGlobal = patchOptimizeGeometryGlobal(diff.after, stats);
+    if (stGeoGlobal != 0) {
+      Msg::Debug("failed to optimize geometry with global UV smoothing");
+    }
+  }
+
+  if (!gf->haveParametrization() || stGeoGlobal != 0 || stats.sicnMinAfter < minSICNrequired) {
+    /* Project */
+    bool okp = patchProjectOnSurface(diff.after, sp);
+    if (!okp) {
+      Msg::Debug("failed to project geometry");
+      return -1;
+    }
+
+    /* Smooth with kernel */
+    GeomOptimOptions opt;
+    opt.sp = sp;
+    opt.invertCADNormals = invertNormalsForQuality;
+    opt.outerLoopIterMax = 100;
+    opt.timeMax = 0.5;
+    opt.localLocking = true;
+    opt.dxGlobalMax = 1.e-3;
+    opt.dxLocalMax = 1.e-5;
+    opt.withBackup = false;
+    patchOptimizeGeometryWithKernel(diff.after, opt, stats);
+  }
+
+  if (stats.sicnMinAfter < minSICNrequired) {
+    Msg::Debug("remesh patch with quad pattern: rejected because SICN min is %.3f", stats.sicnMinAfter);
+    return -1;
+  }
+
+  return 0;
+}
+
+
+int improveQuadMeshTopologyWithCavityRemeshing(GFace* gf,
+    const std::vector<std::pair<SPoint3,int> >& singularities,
+    bool invertNormalsForQuality) {
+
+  Msg::Info("- Face %i: optimize quad mesh topology (%i elements, %i cross field singularities) with cavity remeshing ...",
+      gf->tag(), gf->quadrangles.size(), singularities.size());
+  size_t nqb = gf->quadrangles.size();
+  size_t nvb = gf->mesh_vertices.size();
+
+
+  QuadqsContext qqs;
+  QuadqsGFaceContext ctx(qqs);
+  ctx.invertNormalsForQuality = invertNormalsForQuality;
+
+  bool alwaysBuildSurfaceProjector = true;
+  if (alwaysBuildSurfaceProjector || !haveNiceParametrization(gf)) {
+    ctx.sp = new SurfaceProjector();
+    bool okf = fillSurfaceProjector(gf, ctx.sp);
+    if (!okf) {
+      return false;
+    }
+  }
+
+
+  unordered_map<size_t,size_t> patternSizeLimits;
+  patternSizeLimits[PATTERN_QUAD_DIAG35] = 100;
+  patternSizeLimits[PATTERN_QUAD_ALIGNED35] = 200;
+  patternSizeLimits[PATTERN_QUAD_CHORD_UTURN] = 100;
+  vector<size_t> patternsToCheck;
+
+  /* For a given cavity start, we count the number of cavities
+   * that have been tried
+   * The count is reset when an another close cavity is remeshed.
+   * When a cavity is remeshed, its interior vertices are changed,
+   * so the count is automatically reset.
+   * (the content may be invalid, so it shoud not be used without checking existence) */
+  CavityRegulator regulator;
+
+  bool running = true;
+  while (running) {
+    running = false;
+    size_t ncrb = ctx.nQuadCavityRemesh + ctx.nSingCavityRemesh;
+
+    Msg::Debug("<< start cavity remeshing iteration");
+
+    /* 1st pass: check regular quad patch remeshing only */
+    patternsToCheck = {PATTERN_QUAD_REGULAR};
+    bool ok1 = remeshQuadrilateralCavities(gf, singularities, patternsToCheck, patternSizeLimits, regulator, ctx);
+    if (!ok1) {
+      Msg::Error("- Face %i: failed to remesh quadrilateral cavities", gf->tag());
+      return false;
+    }
+
+    /* 2d pass: remesh around cross field singularities */
+    patternsToCheck = {PATTERN_TRIANGLE,PATTERN_PENTAGON};
+    bool ok2 = remeshSingularityCavities(gf, singularities, patternsToCheck, patternSizeLimits, regulator,ctx);
+    if (!ok2) {
+      Msg::Error("- Face %i: failed to remesh singularity cavities", gf->tag());
+      return false;
+    }
+
+    /* 3d pass: check regular quad patches again (if unlocked by singularity remeshing) */
+    patternsToCheck = {PATTERN_QUAD_REGULAR};
+    bool ok3 = remeshQuadrilateralCavities(gf, singularities, patternsToCheck, patternSizeLimits, regulator, ctx);
+    if (!ok3) {
+      Msg::Error("- Face %i: failed to remesh quadrilateral cavities", gf->tag());
+      return false;
+    }
+
+    /* 4d pass: size transition patterns */
+    patternsToCheck = {PATTERN_QUAD_REGULAR, PATTERN_QUAD_DIAG35, PATTERN_QUAD_ALIGNED35, PATTERN_QUAD_CHORD_UTURN};
+    bool ok4 = remeshQuadrilateralCavities(gf, singularities, patternsToCheck, patternSizeLimits, regulator, ctx);
+    if (!ok4) {
+      Msg::Error("- Face %i: failed to remesh quadrilateral cavities", gf->tag());
+      return false;
+    }
+
+    size_t ncra = ctx.nQuadCavityRemesh + ctx.nSingCavityRemesh;
+    if (ncra > ncrb) { /* The mesh changed */
+      /* Smooth geometry (quick) */
+      double timeMax = 1.;
+      optimizeGeometryQuadMesh(gf, ctx.sp, timeMax);
+
+      /* Decrease the try counter, to enable a new try everywhere */
+      for (auto& kv: regulator.starts) if (kv.second.nTry > 0) {
+        kv.second.nTry -= 1;
+      }
+    }
+
+    /* Restart a full iteration if some cavities have been remeshed */
+    if (ncra > ncrb) running = true;
+    Msg::Debug(">> end of cavity remeshing iteration");
+
+    if (ctx.finished) {
+      Msg::Debug("quad mesh remeshing is finised (minimal number of irregular vertices)");
+      break;
+    }
+  }
+
+  if (ctx.sp) {
+    delete ctx.sp;
+    ctx.sp = nullptr;
+  }
+
+  Msg::Info("- Face %i: remeshed %i singular and %i quadrilateral cavities, %i -> %i quads, %i -> %i vertices",
+      gf->tag(), ctx.nSingCavityRemesh, ctx.nQuadCavityRemesh, nqb, gf->quadrangles.size(), nvb, gf->mesh_vertices.size());
+
+  return 0;
+}
+
+int meshFaceWithGlobalPattern(GFace* gf, bool invertNormalsForQuality, double minimumQualityRequired) {
+  GFaceInfo info;
+  bool okf = fillGFaceInfo(gf, info);
+  if (!okf) return -1;
+
+  /* Check if convex topological disk */
+  bool convexTopologicalDisk = isTopologicalDisk(info) && !haveConcaveCorners(info);
+  if (!convexTopologicalDisk) {
+    return -1;
+  }
+
+  Msg::Debug("- Face %i: is topological disk, try quad pattern meshing", gf->tag());
+
+  double t0 = Cpu();
+
+  /* Build the ordered sides */
+  const vector<GEdge *>& edges = gf->edges();
+  unordered_map<GVertex*,vector<GEdge*> > v2e;
+  for (GEdge* ge: edges) {
+    if (ge->periodic(0)) continue;
+    for (GVertex* gv: ge->vertices()) v2e[gv].push_back(ge);
+  }
+  for (auto& kv: v2e) { sort_unique(kv.second); }
+  std::set<GVertex*> corners = info.bdrValVertices[1];
+  bool disk = (corners.size() == 0 && info.bdrValVertices[2].size() > 0);
+
+  /* Sort CAD edges in sides */
+  vector<vector<GEdge*> > sides;
+  vector<vector<bool> > sidesInv;
+  for (GEdge* e0: edges) if (!e0->periodic(0)) {
+    GVertex* v1 = e0->vertices()[0];
+    GVertex* v2 = e0->vertices()[1];
+    bool v1IsCorner = (corners.find(v1) != corners.end());
+    if (!disk && !v1IsCorner) continue;
+    if (disk) {
+      sides.resize(1);
+      sidesInv.resize(1);
+    }
+
+    size_t infLoop = 0;
+    GVertex* v = v1;
+    GEdge* e = e0;
+    bool inv = false;
+    do {
+      infLoop += 1;
+      if (infLoop > 1e6) {
+        Msg::Warning("infinite loop in edges of face %i, cancel simple quad mesh", gf->tag());
+        return -1;
+      }
+      bool vIsCorner = (corners.find(v) != corners.end());
+      if (vIsCorner) {
+        sides.resize(sides.size()+1);
+        sidesInv.resize(sidesInv.size()+1);
+      }
+      v1 = e->vertices()[0];
+      v2 = e->vertices()[1];
+
+      inv = (v == v2);
+
+      sides.back().push_back(e);
+      sidesInv.back().push_back(inv);
+
+      GVertex* v_next = NULL;
+      if (v2 != v) {
+        v_next = v2;
+      } else {
+        v_next = v1;
+      }
+      GEdge* e_next = NULL;
+      if (v2e[v_next].size() == 2) {
+        e_next = (v2e[v_next][0] != e) ? v2e[v_next][0] : v2e[v_next][1];
+      } else {
+        Msg::Warning("non manifold edge loop around face %li, cancel simple quad mesh", gf->tag());
+        return -1;
+      }
+
+      e = e_next;
+      v = v_next;
+    } while (e != e0);
+    break;
+  }
+
+  if (disk && gf->edges().size() == 1 && gf->edges()[0]->periodic(0)) {
+    sides = {gf->edges()};
+    sidesInv = {{false}};
+  }
+
+  if (sides.size() == 0) {
+    Msg::Debug("face %i (%li edges), failed to build sides",gf->tag(),edges.size());
+    DBG(disk);
+    return -1;
+  }
+
+  /* Collect mesh vertices */
+  vector<vector<MVertex*> > sideVertices(sides.size());
+  for (size_t i = 0; i < sides.size(); ++i) {
+    for (size_t j = 0; j < sides[i].size(); ++j) {
+      GEdge* ge = sides[i][j];
+      bool inv = sidesInv[i][j];
+      GVertex* v1 = ge->vertices()[0];
+      GVertex* v2 = ge->vertices()[1];
+
+      /* Vertices from v1 to v2 */
+      vector<MVertex*> ge_vert;
+      {
+        std::vector<MEdge> medges(ge->lines.size());
+        for (size_t k = 0; k < ge->lines.size(); ++k) {
+          medges[k] = MEdge(ge->lines[k]->getVertex(0),ge->lines[k]->getVertex(1));
+        }
+        std::vector<std::vector<MVertex* > > gevs;
+        bool oks = SortEdgeConsecutive(medges, gevs);
+        if (!oks || gevs.size() != 1) return -1;
+        if (gevs[0].front() == v1->mesh_vertices[0]
+            && gevs[0].back() == v2->mesh_vertices[0]) {
+          ge_vert = gevs[0];
+        } else if (gevs[0].front() == v2->mesh_vertices[0]
+            && gevs[0].back() == v1->mesh_vertices[0]) {
+          ge_vert = gevs[0];
+          std::reverse(ge_vert.begin(),ge_vert.end());
+        } else {
+          Msg::Error("corner and edge vertices not matching");
+          return -1;
+        }
+      }
+
+      if (inv) {
+        std::reverse(ge_vert.begin(),ge_vert.end());
+      }
+      if (sideVertices[i].size() == 0) {
+        append(sideVertices[i], ge_vert);
+      } else {
+        if (sideVertices[i].back() == ge_vert[0]) {
+          sideVertices[i].pop_back();
+        }
+        append(sideVertices[i], ge_vert);
+      }
+    }
+  }
+
+  /* When there is just one side, two possible cases:
+   * - disk (all bdr vertices are quad-valence 2)
+   * - face with only one convex corner
+   */
+  if (sides.size() == 1) {
+    if (sides[0].size() < 1) {
+      Msg::Warning("not enough vertices on face loop for quad meshing (%li vert)", sides[0].size());
+      return -1;
+    }
+    if (disk) {
+      if (sides[0].front() == sides[0].back()) {
+        sides[0].pop_back();
+      }
+    } else {
+      if (sides[0].front() == sides[0].back()) {
+        sides[0].pop_back();
+      }
+    }
+  }
+
+
+  /* Pure topological check with side sizes */
+  std::vector<size_t> patternsToCheck = getAllLoadedPatterns();
+  std::vector<size_t> sideSizes(sideVertices.size());
+  for (size_t i = 0; i < sideSizes.size(); ++i) sideSizes[i] = sideVertices[i].size();
+
+  std::pair<size_t,int> patternNoAndRot;
+  size_t Ncorners = disk ? 0 : sideSizes.size();
+  double irreg;
+  bool meshable = patchIsRemeshableWithQuadPattern(patternsToCheck, Ncorners, sideSizes, patternNoAndRot, irreg);
+  if (!meshable) return -1;
+
+
+  /* Build the mesh, smooth and check the geometry quality */
+  std::vector<MElement*> oldElements;
+  oldElements.reserve(gf->quadrangles.size()+gf->triangles.size());
+  for (MElement* f: gf->triangles) oldElements.push_back(f);
+  for (MElement* f: gf->quadrangles) oldElements.push_back(f);
+  std::vector<MVertex*> oldVertices = gf->mesh_vertices;
+
+  /* SurfaceProjector, useful for smoothing */
+  SurfaceProjector* sp = new SurfaceProjector();
+  bool oksp = fillSurfaceProjector(gf, sp);
+  if (!oksp) {
+    delete sp;
+    sp = nullptr;
+  }
+
+  const double minSICNafer = -DBL_MAX; /* do not filter based on quality */
+  GFaceMeshDiff diff;
+  int st = remeshPatchWithQuadPattern(gf, patternNoAndRot, sideVertices, oldElements,
+      oldVertices, minSICNafer, invertNormalsForQuality, sp, diff);
+  if (st != 0) {
+    if (DBG_VERBOSE) {Msg::Debug("remesh cavity: %li quads, failed to remesh path with quad pattern",
+        oldElements.size());}
+    if (sp) delete sp;
+    return -1;
+  }
+
+  bool good = false;
+  double sicnMin, sicnAvg;
+  double sicnMinAfter, sicnAvgAfter;
+  size_t neb = diff.before.elements.size();
+  size_t nea = diff.after.elements.size();
+  size_t nvb = diff.before.intVertices.size();
+  size_t nva = diff.after.intVertices.size();
+  {
+
+    GeomOptimStats stats;
+    GeomOptimOptions opt;
+    opt.sp = sp;
+    opt.outerLoopIterMax = 100;
+    opt.timeMax = 3.;
+    opt.localLocking = true;
+    opt.dxGlobalMax = 1.e-3;
+    opt.dxLocalMax = 1.e-5;
+    opt.force3DwithProjection = true;
+    opt.withBackup = false;
+    bool oko = patchOptimizeGeometryWithKernel(diff.after, opt, stats);
+    if (!oko) {
+      if (sp) delete sp;
+      return -1;
+    }
+
+    computeSICN(diff.before.elements, sicnMin, sicnAvg);
+    computeSICN(diff.after.elements, sicnMinAfter, sicnAvgAfter);
+    if (sicnMinAfter > minimumQualityRequired) {
+      constexpr bool verifyTopology = true;
+      bool oke = diff.execute(verifyTopology);
+      if (oke) {
+        good = true;
+      } else {
+        Msg::Error("remesh cavity: diff execute() failed, should not happen");
+      }
+    } else {
+      Msg::Debug("- Face %i: pattern-based quad mesh REJECTED because SICN min %.3f < %.3f",
+          gf->tag(), sicnMinAfter, minimumQualityRequired);
+    }
+  }
+
+  if (good) {
+    Msg::Info("- Face %i: remeshed with a global pattern, %li -> %li quads, %i -> %i int. vertices, SICN min: %.3f -> %.3f, SICN avg: %.3f -> %.3f, time: %.3fs",
+        gf->tag(), neb, nea, nvb, nva, sicnMin, sicnMinAfter, sicnAvg, sicnAvgAfter, Cpu()-t0);
+    gf->meshStatistics.status = GFace::DONE;
+  }
+
+  if (sp) delete sp;
+
+  return good;
+}
diff --git a/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.h b/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.h
new file mode 100644
index 0000000000000000000000000000000000000000..fb3b417572784249853d2b09c2678f1107b5f48e
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtQuadCavityRemeshing.h
@@ -0,0 +1,132 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include "qmtMeshUtils.h"
+
+class SurfaceProjector;
+
+
+/**
+ * @brief Apply iterative cavity remeshing to the face mesh
+ *        to reduce the number of irregular vertices which
+ *        are not matching cross field singularities.
+ *        The quad patterns must be loaded before (see initQuadPatterns()).
+ *
+ * @param[in,out] gf The face containing the quad mesh to improve
+ * @param[in] singularities Floating list of cross field singularities, specified by 
+ *                          their position and their index (-1 for valence 5, +1 for valence 3)
+ * @param[in] invertNormalsForQuality The CAD normals are used to compute signed quality.
+ *                                    This flag invert invert the CAD normals in the measure.
+ *
+ * @return 0 if success
+ */
+int improveQuadMeshTopologyWithCavityRemeshing(GFace* gf,
+    const std::vector<std::pair<SPoint3,int> >& singularities,
+    bool invertNormalsForQuality);
+
+/**
+ * @brief Consider the current face mesh as a global single cavity
+ *        and try to mesh it with the exising patterns.
+ *        The quad patterns must be loaded before (see initQuadPatterns()).
+ *
+ * @param[in,out] gf The face containing the quad mesh to improve
+ * @param[in] invertNormalsForQuality The CAD normals are used to compute signed quality.
+ *                                    This flag invert invert the CAD normals in the measure.
+ * @param[in] minimumQualityRequired Minimum quality (SICN) required to accept a new quad mesh
+ *
+ * @return 0 if success
+ */
+int meshFaceWithGlobalPattern(GFace* gf, bool invertNormalsForQuality, double minimumQualityRequired);
+
+
+/* List of patterns */
+extern const size_t PATTERN_QUAD_REGULAR;
+extern const size_t PATTERN_TRIANGLE;
+extern const size_t PATTERN_PENTAGON;
+extern const size_t PATTERN_QUAD_DIAG35;
+extern const size_t PATTERN_QUAD_ALIGNED35;
+extern const size_t PATTERN_QUAD_CHORD_UTURN;
+extern const size_t PATTERN_2CORNERS;
+extern const size_t PATTERN_1CORNER;
+extern const size_t PATTERN_DISK;
+
+/**
+ * @return the number of corners in the input pattern
+ */
+size_t patternNumberOfCorners(size_t pId);
+
+/**
+ * @brief Initialize the pattern datastructures from raw meshes.
+ *        Must be called one-time before using remeshPatchWithQuadPattern()
+ *
+ * @return 0 if success
+ */
+int initQuadPatterns();
+
+/**
+ * @brief Get a vector with all the patterns.
+ *
+ * @return the pattern identifiers (see the list of patterns)
+ */
+std::vector<size_t> getAllLoadedPatterns();
+
+/**
+ * @brief Check if there is a topological quad mesh matching
+ *        a given boundary, in the specified patterns.
+ *        Mesh geometry is totally ignored in this function.
+ *
+ * @param[in] patternsToCheck The list of patterns to try
+ * @param[in] Ncorners The number of corners in the patch
+ * @param[in] sideSizes The number of edges on each side
+ * @param[out] patternNoAndRot If found, the pattern identifier and its associated rotation
+ * @param[out] irregularityMeasure If round, the topological irregularity measure of the pattern
+ *
+ * @return true if a matching is found
+ */
+bool patchIsRemeshableWithQuadPattern(
+    const std::vector<size_t>& patternsToCheck,
+    size_t Ncorners, 
+    const std::vector<size_t>& sideSizes, 
+    std::pair<size_t,int>& patternNoAndRot,
+    double& irregularityMeasure);
+
+
+/**
+ * @brief Look for the best topological disk quadrangulation remeshing 
+ *        which match the allowed valence ranges.
+ *        Requires that the disk quadrangulation data is initialized, see initDiskQuadrangulations()
+ *        The GFace mesh is not changed, the changes are stored in the diff 
+ *        which can executed by the caller.
+ *
+ * @param[in] gf CAD face containing the elements
+ * @param[in] patternNoAndRot If found, the pattern identifier and its associated rotation
+ * @param[in] sides The vertices on each side. Must be compatible with the output of
+ *                  patchIsRemeshableWithQuadPattern()
+ * @param[in] elements The old elements in the patch, may be empty
+ * @param[in] intVertices The old interior vertices in the patch, may empty
+ * @param[in] minSICNrequired Minimum SICN quality required in the remeshed patch. 
+ *                        Compared after geometry untangling/smoothing.
+ * @param[in] invertNormalsForQuality The CAD normals are used to compute signed quality.
+ *                                    This flag invert invert the CAD normals in the measure.
+ * @param[in] sp If not nullptr, the surface projector is used instead of the CAD parametrization
+ *               in the smoothing. Required if there is no surface parametrization.
+ * @param[out] diff The mesh diff (to the GFace) containing the remeshing candidate
+ *
+ * @return 0 if success
+ */
+int remeshPatchWithQuadPattern(
+    GFace* gf,
+    const std::pair<size_t,int>& patternNoAndRot,
+    const std::vector<std::vector<MVertex*> > & sides,
+    const std::vector<MElement*> & elements,
+    const std::vector<MVertex*>& intVertices,
+    double minSICNrequired,
+    bool invertNormalsForQuality,
+    SurfaceProjector* sp,
+    GFaceMeshDiff& diff);
diff --git a/contrib/QuadMeshingTools/qmtSizeMap.cpp b/contrib/QuadMeshingTools/qmtSizeMap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f7f427de478e4b9929fe5774278186bf16b08893
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtSizeMap.cpp
@@ -0,0 +1,243 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#include "qmtSizeMap.h"
+
+/* System includes */
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <cstdint>
+#include <cmath>
+#include <queue>
+#include <algorithm>
+
+/* Gmsh includes */
+#include "GmshMessage.h"
+#include "OS.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
+#include "GModel.h"
+#include "MVertex.h"
+#include "Context.h"
+#include "MLine.h"
+#include "MTriangle.h"
+#include "BackgroundMesh.h"
+#include "gmsh.h" // debug
+
+/* QuadMeshingTools includes */
+#include "cppUtils.h"
+#include "qmtMeshUtils.h"
+
+using namespace CppUtils;
+
+namespace QMT {
+
+  void setMinimum(MVertex* v, std::unordered_map<MVertex*,double>& minSize,
+      double value) {
+    auto it = minSize.find(v);
+    if (it == minSize.end()) {
+      minSize[v] = value;
+    } else if (value < it->second) {
+      it->second = value;
+    }
+  }
+
+  inline double distance2(const SPoint3& a, const SPoint3& b) {
+    const double dx = a.x() - b.x();
+    const double dy = a.y() - b.y();
+    const double dz = a.z() - b.z();
+    return dx*dx+dy*dy+dz*dz;
+  }
+
+  inline double distance_point_segment_squared(const SPoint3& query, const SPoint3& a, const SPoint3& b) {
+    const double l2 = distance2(a,b);
+    const double t = dot(query-a,b-a);
+    if (t <= 0. || l2 == 0.) {
+      return distance2(query,a);
+    } else if (t > l2) {
+      return distance2(query,b);
+    }
+    const double lambda = 1. - t / l2;
+    SPoint3 proj(lambda * a + (1. - lambda) * b);
+    return distance2(query,proj);
+  }
+
+  double distanceToLines(const SPoint3& query, const std::vector<MLine>& lines) {
+    // warning: not very efficient ...
+    double mdist2 = DBL_MAX;
+    for (const MLine& l: lines) {
+      const MVertex* v1 = l.getVertex(0);
+      const MVertex* v2 = l.getVertex(1);
+      mdist2 = std::min(mdist2,distance_point_segment_squared(query,v1->point(),v2->point()));
+    }
+    return std::sqrt(mdist2);
+  }
+
+  double distanceToGEdgeBackgroundMesh(const SPoint3& query, GlobalBackgroundMesh& gbm, GEdge* ge) {
+    auto it = gbm.edgeBackgroundMeshes.find(ge);
+    if (it == gbm.edgeBackgroundMeshes.end()) {
+      Msg::Error("curve %i not found in background mesh, cannot compute distance to it", ge->tag());
+      return DBL_MAX;
+    }
+    return distanceToLines(query,it->second.lines);
+  }
+}
+
+using namespace QMT;
+
+int computeMinimalSizeOnCurves(
+    GlobalBackgroundMesh& gbm,
+    std::unordered_map<MVertex*,double>& minSize) {
+  Msg::Debug("compute minimal size on curves (using background mesh) ...");
+  /* Important information: all mesh elements are queried in the GlobalBackgroundMesh,
+   * not in the current GModel ! */
+
+  GModel* gm = gbm.gm;
+  if (gm == NULL) return -1;
+
+  /* Initialize minimal size on vertex associated to GVertex
+   * prescribed size */
+  for (MVertex* v: gbm.mesh_vertices) {
+    GVertex* gv = dynamic_cast<GVertex*>(v->onWhat());
+    if (gv == NULL) continue;
+    /* Mesh size */
+    double size = gv->prescribedMeshSizeAtVertex();
+    if (size > 0 && size < 1.e22) setMinimum(v, minSize, size);
+  }
+
+  std::unordered_map<GVertex*,std::vector<GEdge*> > gv2ge;
+  for (GEdge* ge: model_edges(gm)) for (GVertex* gv: ge->vertices()) {
+    gv2ge[gv].push_back(ge);
+  }
+  for (auto& kv: gv2ge) sort_unique(kv.second);
+
+  /* On curve vertices, minimum size is minimum of:
+   * - existing size
+   * - curve length
+   * - distance of projection to non adjacent curves */
+  for (GFace* gf: model_faces(gm)) {
+    for (GEdge* ge: face_edges(gf)) {
+      auto it = gbm.edgeBackgroundMeshes.find(ge);
+      if (it == gbm.edgeBackgroundMeshes.end()) {
+        Msg::Error("curve %i not found in background mesh", ge->tag());
+        continue;
+      }
+
+      /* Collect curve vertices, including extremities */
+      std::vector<MVertex*> curve_vertices;
+      for (MLine& e: it->second.lines) for (size_t lv: {0,1}) {
+        MVertex* v = e.getVertex(lv);
+        curve_vertices.push_back(v);
+      }
+      sort_unique(curve_vertices);
+
+      /* Collect non-adjacent curves */
+      std::vector<GEdge*> curvesAjacent;
+      for (GVertex* gv: ge->vertices()) {
+        for (GEdge* ge2: gv2ge[gv]) if (ge2 != ge) {
+          curvesAjacent.push_back(ge2);
+
+          if (ge2->length() <= CTX::instance()->geom.tolerance) { /* yes CAD is annoying ... */
+            for (GVertex* gv2: ge2->vertices()) {
+              for (GEdge* ge3: gv2ge[gv2]) if (ge3 != ge) {
+                curvesAjacent.push_back(ge3);
+              }
+            }
+          }
+        }
+      }
+      sort_unique(curvesAjacent);
+
+      std::vector<GEdge*> curvesNotAdjacent;
+      for (GFace* gf: ge->faces()) for (GEdge* ge2: gf->edges()) if (ge2 != ge) {
+        curvesNotAdjacent.push_back(ge2);
+      }
+      curvesNotAdjacent = difference(curvesNotAdjacent,curvesAjacent);
+      sort_unique(curvesNotAdjacent);
+
+      double len = ge->length();
+      for (MVertex* v: curve_vertices) {
+        double vMin = len; /* curve length */
+
+        /* Size: minimum of projection to non-adj curves */
+        for (GEdge* ge2: curvesNotAdjacent) {
+          /* Warning: testing all MLine, slow, should have kdtree acceleration */
+          double dist = distanceToGEdgeBackgroundMesh(v->point(), gbm, ge2);
+          if (vMin > 0) vMin = std::min(vMin, dist);
+        }
+
+        if (vMin > 0 && vMin < 1.e22) setMinimum(v, minSize, vMin);
+      }
+    }
+  }
+
+  return 0;
+}
+
+int sizeMapOneWaySmoothing(
+    const std::vector<MTriangle*>& triangles,
+    std::unordered_map<MVertex*,double>& values,
+    double gradientMax) {
+  Msg::Debug("one way smoothing of scalar field (%li triangles, %li values) ...",
+      triangles.size(), values.size());
+  if (triangles.size() == 0) return -1;
+  if (gradientMax <= 0.) return -1;
+
+  std::unordered_map<MVertex*, std::vector<MVertex*> > v2v;
+  buildVertexToVertexMap(triangles, v2v);
+
+  std::priority_queue<std::pair<double,MVertex*>,  std::vector<std::pair<double,MVertex*> >,  std::greater<std::pair<double,MVertex*> > > Q;
+  for (const auto& kv: values) {
+    Q.push({kv.second,kv.first});
+  }
+
+  /* Dijkstra propagation */
+  while (Q.size() > 0) {
+    MVertex* v = Q.top().second;
+    double cdist = Q.top().first;
+    Q.pop();
+    for (MVertex* v2: v2v[v]) {
+      double w_ij = v->distance(v2) * (gradientMax-1.);
+      auto it = values.find(v2);
+      if (it == values.end() || cdist + w_ij < it->second) {
+        double new_value = cdist + w_ij;
+        auto it2 = values.find(v2);
+        if (it2 != values.end() && new_value > it2->second) {
+          /* No need to propagate in regions where sizemap is
+           * already sufficiently fine */
+          continue;
+        }
+        values[v2] = new_value;
+        Q.push({new_value,v2});
+      }
+    }
+  }
+
+  return 0;
+}
+
+void quantileFiltering(std::unordered_map<MVertex*,double>& scaling, double critera) {
+  std::vector<double> values(scaling.size());
+  size_t count = 0;
+  for (auto& kv: scaling) {
+    values[count] = kv.second;
+    count += 1;
+  }
+  std::sort(values.begin(),values.end());
+  size_t n = values.size();
+  double clamp_min = values[size_t(critera*double(n))];
+  double clamp_max = values[size_t((1.-critera)*double(n))];
+  for (auto& kv: scaling) {
+    if (kv.second < clamp_min) {
+      kv.second = clamp_min;
+    } else if (kv.second > clamp_max) {
+      kv.second = clamp_max;
+    }
+  }
+}
diff --git a/contrib/QuadMeshingTools/qmtSizeMap.h b/contrib/QuadMeshingTools/qmtSizeMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..115d377bb5f8d363aa25035b679a31a7484176b7
--- /dev/null
+++ b/contrib/QuadMeshingTools/qmtSizeMap.h
@@ -0,0 +1,64 @@
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
+//
+// Author: Maxence Reberol
+
+#pragma once
+
+#include <vector>
+#include <array>
+#include <unordered_map>
+#include <string>
+
+class MVertex;
+class MTriangle;
+class GModel;
+class GlobalBackgroundMesh;
+
+/**
+ * @brief Compute minimal size values on curve vertices. This the minimum of:
+ *        - the current curve length
+ *        - the distance to other non-adjacent curves
+ *        - the prescribed mesh size
+ *
+ * @param[in] gbm Background mesh on which to compute the minimal sizes
+ * @param[out] minSize the minimal distance, for each MVertex of GVertex / GEdge 
+ *
+ * @return 0 if success
+ */
+int computeMinimalSizeOnCurves(
+    GlobalBackgroundMesh& gbm,
+    std::unordered_map<MVertex*,double>& minSize);
+
+
+
+/**
+ * @brief One way smoothing to get a smooth scalar field where
+ *        the gradient is inferior to gradientMax, the output
+ *        verify: 
+ *          v2 = min(v2, v1 + gradientMax * d(x1,v2))
+ *        for all edge v1-v2 in the triangles. The propagation is
+ *        computed with a Dijkstra-like algorithm.
+ *
+ * @param triangles The triangulation on which to extract the edges for Dijkstra
+ * @param values The scalar field to smooth
+ * @param gradientMax The maximum gradient in the ouput, typical range is [1, 1.4]
+ *                    for meshing
+ *
+ * @return 0 if success
+ */
+int sizeMapOneWaySmoothing(
+    const std::vector<MTriangle*>& triangles,
+    std::unordered_map<MVertex*,double>& values,
+    double gradientMax = 1.2);
+
+
+/**
+ * @brief Remove extremities in the histogram
+ *
+ * @param scaling the values on which to apply the filtering
+ * @param critera keep values which are in [critera,1-critera] in the histogram
+ */
+void quantileFiltering(std::unordered_map<MVertex*,double>& scaling, double critera);
diff --git a/contrib/QuadMeshingTools/row_echelon_integer.cpp b/contrib/QuadMeshingTools/row_echelon_integer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..41614965ca010214c13a75f555c91bc9bc919815
--- /dev/null
+++ b/contrib/QuadMeshingTools/row_echelon_integer.cpp
@@ -0,0 +1,1734 @@
+/* Author: John Burkardt
+ * Link: https://people.sc.fsu.edu/~jburkardt/cpp_src/row_echelon_integer/row_echelon_integer.html 
+ * License: The computer code and data files made available on this web page are distributed under the GNU LGPL license.
+ *          https://www.gnu.org/licenses/lgpl-3.0.en.html */
+
+# include <cmath>
+# include <cstdlib>
+# include <cstring>
+# include <ctime>
+# include <iomanip>
+# include <iostream>
+
+using namespace std;
+
+# include "row_echelon_integer.hpp"
+
+//****************************************************************************80
+
+int i4_gcd ( int i, int j )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4_GCD finds the greatest common divisor of two I4's.
+//
+//  Discussion:
+//
+//    Note that only the absolute values of I and J are
+//    considered, so that the result is always nonnegative.
+//
+//    If I or J is 0, I4_GCD is returned as max ( 1, abs ( I ), abs ( J ) ).
+//
+//    If I and J have no common factor, I4_GCD is returned as 1.
+//
+//    Otherwise, using the Euclidean algorithm, I4_GCD is the
+//    greatest common divisor of I and J.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    25 March 2004
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int I, J, two numbers whose GCD is desired.
+//
+//    Output, int I4_GCD, the greatest common divisor of I and J.
+//
+{
+  int p;
+  int q;
+  int r;
+//
+//  Return immediately if either I or J is zero.
+//
+  if ( i == 0 )
+  {
+    q = i4_max ( 1, abs ( j ) );
+    return q;
+  }
+  else if ( j == 0 )
+  {
+    q = i4_max ( 1, abs ( i ) );
+    return q;
+  }
+//
+//  Set IP to the larger of I and J, IQ to the smaller.
+//  This way, we can alter IP and IQ as we go.
+//
+  p = i4_max ( abs ( i ), abs ( j ) );
+  q = i4_min ( abs ( i ), abs ( j ) );
+//
+//  Carry out the Euclidean algorithm.
+//
+  for ( ; ; )
+  {
+    r = p % q;
+
+    if ( r == 0 )
+    {
+      break;
+    }
+    p = q;
+    q = r;
+  }
+
+  return q;
+}
+//****************************************************************************80
+
+int i4_max ( int i1, int i2 )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4_MAX returns the maximum of two I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    13 October 1998
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int I1, I2, are two integers to be compared.
+//
+//    Output, int I4_MAX, the larger of I1 and I2.
+//
+{
+  int value;
+
+  if ( i2 < i1 )
+  {
+    value = i1;
+  }
+  else
+  {
+    value = i2;
+  }
+  return value;
+}
+//****************************************************************************80
+
+int i4_min ( int i1, int i2 )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4_MIN returns the minimum of two I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    13 October 1998
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int I1, I2, two integers to be compared.
+//
+//    Output, int I4_MIN, the smaller of I1 and I2.
+//
+{
+  int value;
+
+  if ( i1 < i2 )
+  {
+    value = i1;
+  }
+  else
+  {
+    value = i2;
+  }
+  return value;
+}
+//****************************************************************************80
+
+void i4mat_print ( int m, int n, int a[], string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_PRINT prints an I4MAT.
+//
+//  Discussion:
+//
+//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    10 September 2009
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, the number of rows in A.
+//
+//    Input, int N, the number of columns in A.
+//
+//    Input, int A[M*N], the M by N matrix.
+//
+//    Input, string TITLE, a title.
+//
+{
+  i4mat_print_some ( m, n, a, 1, 1, m, n, title );
+
+  return;
+}
+//****************************************************************************80
+
+void i4mat_print_some ( int m, int n, int a[], int ilo, int jlo, int ihi,
+  int jhi, string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_PRINT_SOME prints some of an I4MAT.
+//
+//  Discussion:
+//
+//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    20 August 2010
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, the number of rows of the matrix.
+//    M must be positive.
+//
+//    Input, int N, the number of columns of the matrix.
+//    N must be positive.
+//
+//    Input, int A[M*N], the matrix.
+//
+//    Input, int ILO, JLO, IHI, JHI, designate the first row and
+//    column, and the last row and column to be printed.
+//
+//    Input, string TITLE, a title.
+//
+{
+# define INCX 10
+
+  int i;
+  int i2hi;
+  int i2lo;
+  int j;
+  int j2hi;
+  int j2lo;
+
+  cout << "\n";
+  cout << title << "\n";
+
+  if ( m <= 0 || n <= 0 )
+  {
+    cout << "\n";
+    cout << "  (None)\n";
+    return;
+  }
+//
+//  Print the columns of the matrix, in strips of INCX.
+//
+  for ( j2lo = jlo; j2lo <= jhi; j2lo = j2lo + INCX )
+  {
+    j2hi = j2lo + INCX - 1;
+    if ( n < j2hi )
+    {
+      j2hi = n;
+    }
+    if ( jhi < j2hi )
+    {
+      j2hi = jhi;
+    }
+
+    cout << "\n";
+//
+//  For each column J in the current range...
+//
+//  Write the header.
+//
+    cout << "  Col:";
+    for ( j = j2lo; j <= j2hi; j++ )
+    {
+      cout << "  " << setw(6) << j - 1;
+    }
+    cout << "\n";
+    cout << "  Row\n";
+    cout << "\n";
+//
+//  Determine the range of the rows in this strip.
+//
+    if ( 1 < ilo )
+    {
+      i2lo = ilo;
+    }
+    else
+    {
+      i2lo = 1;
+    }
+    if ( ihi < m )
+    {
+      i2hi = ihi;
+    }
+    else
+    {
+      i2hi = m;
+    }
+
+
+    for ( i = i2lo; i <= i2hi; i++ )
+    {
+//
+//  Print out (up to INCX) entries in row I, that lie in the current strip.
+//
+      cout << setw(5) << i - 1 << ":";
+      for ( j = j2lo; j <= j2hi; j++ )
+      {
+        cout << "  " << setw(6) << a[i-1+(j-1)*m];
+      }
+      cout << "\n";
+    }
+  }
+
+  return;
+# undef INCX
+}
+//****************************************************************************80
+
+int i4mat_ref ( int m, int n, int a[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_REF computes the integer row echelon form (IREF) of an I4MAT.
+//
+//  Discussion:
+//
+//    If a matrix A contains only integer entries, then when it is reduced
+//    to row echelon form, it is likely that many entries will no longer
+//    be integers, due to the elimination process.
+//
+//    In some cases, tiny arithmetic errors in this elimination process can
+//    result in spurious, tiny nonzero values which can invalidate the
+//    calculation, particular if the elimination is being done in an effort
+//    to determine the rank of the matrix.  These serious errors can easily
+//    occur in very small matrices, such as of size 7x10.
+//
+//    If we, instead, insist on using only integer operations on an integer
+//    matrix, we can guarantee that tiny roundoff errors will not cause
+//    such problems.  On the other hand, as the elimination process proceeds,
+//    we may instead calculate integer matrix entries of increasingly
+//    large, and then ultimately meaningless magnitude.  I imagine this is 
+//    likely to happen for moderate size matrices of order 50x50, say, but
+//    this is a huge improvement over the unreliability of the real
+//    arithmetic case.
+//
+//
+//    Thus, we define "integer row echelon form" (IREF).
+//
+//
+//    A matrix is in integer row echelon form if:
+//
+//    * The leading nonzero in each row is positive.
+//
+//    * Each row has no common factor greater than 1.
+//
+//    * The leading nonzero in each row occurs in a column to
+//      the right of the leading nonzero in the previous row.
+//
+//    * Rows which are entirely zero occur last.
+//
+//  Example:
+//
+//    Input matrix:
+//
+//     1    3    0    2    6    3    1
+//    -2   -6    0   -2   -8    3    1
+//     3    9    0    0    6    6    2
+//    -1   -3    0    1    0    9    3
+//
+//    Output matrix:
+//
+//     1    3    0    2    6    3    1
+//     0    0    0    2    4    9    3
+//     0    0    0    0    0    3    1
+//     0    0    0    0    0    0    0
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    26 August 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, N, the number of rows and columns of
+//    the matrix A.
+//
+//    Input/output, int A[M*N].  On input, the matrix to be
+//    analyzed.  On output, the IREF form of the matrix.
+//
+//    Output, int I4MAT_REF, the pseudo-determinant.
+//
+{
+  int det;
+  int i;
+  int j;
+  int lead;
+  int r;
+  int *row;
+  int t;
+ 
+  det = 1;
+  lead = 0;
+
+  row = new int[n];
+
+  for ( r = 0; r < m; r++ )
+  {
+    if ( n - 1 < lead )
+    {
+      break;
+    }
+//
+//  Start I at row R, and search for nonzero pivot entry A(I,LEAD).
+//
+    i = r;
+
+    while ( a[i+lead*m] == 0 )
+    {
+      i = i + 1;
+//
+//  If reach last row, reset I to R, and increment LEAD.
+//
+      if ( m - 1 < i )
+      {
+        i = r;
+        lead = lead + 1;
+//
+//  If reach last column, we can find no more pivots.
+//
+        if ( n - 1 < lead )
+        {
+          lead = -1;
+          break;
+         }
+      }
+    }
+
+    if ( lead < 0 )
+    {
+      break;
+    }
+//
+//  Move pivot I into row R.
+//
+    if ( i != r )
+    {
+      for ( j = 0; j < n; j++ )
+      {
+        t        = a[i+j*m];
+        a[i+j*m] = a[r+j*m];
+        a[r+j*m] = t;
+      }
+    }
+//
+//  Ensure pivot is positive.
+//
+    if ( a[r+lead*m] < 0 )
+    {
+      for ( j = 0; j < n; j++ )
+      {
+        a[r+j*m] = - a[r+j*m];
+      }
+      det = - det;
+    }
+//
+//  Update the pseudo-determinant.
+//
+    det = det * a[r+lead*m];
+//
+//  Remove any common factor from row R.
+//
+    for ( j = 0; j < n; j++ )
+    {
+      row[j] = a[r+j*m];
+    }
+    i4vec_red ( n, row );
+    for ( j = 0; j < n; j++ )
+    {
+      a[r+j*m] = row[j];
+    }
+//
+//  Use a multiple of A(R,LEAD) to eliminate A(R+1:M,LEAD).
+//
+    for ( i = r + 1; i < m; i++ )
+    {
+      t = a[i+lead*m];
+      for ( j = 0; j < n; j++ )
+      {
+        a[i+j*m] = a[r+lead*m] * a[i+j*m] - t * a[r+j*m];
+      }
+
+      for ( j = 0; j < n; j++ )
+      {
+        row[j] = a[i+j*m];
+      }
+      i4vec_red ( n, row );
+      for ( j = 0; j < n; j++ )
+      {
+        a[i+j*m] = row[j];
+      }
+    }
+    lead = lead + 1;
+  }
+
+  delete [] row;
+
+  return det;
+}
+//****************************************************************************80
+
+void i4mat_row_reduce ( int m, int n, int i, int a[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_ROW_REDUCE divides out common factors in row I of an I4MAT.
+//
+//  Discussion:
+//
+//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    27 August 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, the number of rows in the matrix.
+//
+//    Input, int N, the number of columns in the matrix.
+//
+//    Input, int I, the row to be reduced.  0 <= I < M.
+//
+//    Input/output, int A[M*N], on input, the matrix whose
+//    row is to be reduced.  On output, row I of the matrix has been reduced.
+//
+{
+  int j;
+  int *row;
+//
+//  Remove factors common to a row.
+//
+  row = new int[n];
+
+  for ( j = 0; j < n; j++ )
+  {
+    row[j] = a[i+j*m];
+  }
+
+  i4vec_red ( n, row );
+
+  for ( j = 0; j < n; j++ )
+  {
+    a[i+j*m] = row[j];
+  }
+
+  delete [] row;
+
+  return;
+}
+//****************************************************************************80
+
+void i4mat_row_swap ( int m, int n, int a[], int i1, int i2 )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_ROW_SWAP swaps rows in an I4MAT.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    09 September 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, N, the number of rows and columns.
+//
+//    Input/output, int A[M*N].
+//    On input, the matrix to be modified.
+//    On output, two rows have been swapped. 
+//
+//    Input, int I1, I2, the indices of the rows.
+//    0 <= I1, I2 < M.
+//
+{
+  int j;
+  int t;
+
+  if ( i1 == i2 )
+  {
+    return;
+  }
+
+  if ( i1 < 0 || m <= i1 )
+  {
+    cout << "\n";
+    cout << "I4MAT_ROW_SWAP - Fatal error!\n";
+    cout <<"  Row index 0 <= I1 < M required.\n";
+    exit ( 1 );
+  }
+
+  if ( i2 < 0 || m <= i2 )
+  {
+    cout << "\n";
+    cout << "I4MAT_ROW_SWAP - Fatal error!\n";
+    cout << "  Row index 0 <= I2 < M required.\n";
+    exit ( 1 );
+  }
+
+  for ( j = 0; j < n; j++ )
+  {
+    t         = a[i1+j*m];
+    a[i1+j*m] = a[i2+j*m];
+    a[i2+j*m] = t;
+  }
+
+  return;
+}
+//****************************************************************************80
+
+int i4mat_rref ( int m, int n, int a[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_RREF: the integer row reduced echelon form (IRREF) of an I4MAT.
+//
+//  Discussion:
+//
+//    If a matrix A contains only integer entries, then when it is reduced
+//    to row echelon form, it is likely that many entries will no longer
+//    be integers, due to the elimination process.
+//
+//    In some cases, tiny arithmetic errors in this elimination process can
+//    result in spurious, tiny nonzero values which can invalidate the
+//    calculation, particular if the elimination is being done in an effort
+//    to determine the rank of the matrix.  These serious errors can easily
+//    occur in very small matrices, such as of size 7x10.
+//
+//    If we, instead, insist on using only integer operations on an integer
+//    matrix, we can guarantee that tiny roundoff errors will not cause
+//    such problems.  On the other hand, as the elimination process proceeds,
+//    we may instead calculate integer matrix entries of increasingly
+//    large, and then ultimately meaningless magnitude.  I imagine this is 
+//    likely to happen for moderate size matrices of order 50x50, say, but
+//    this is a huge improvement over the unreliability of the real
+//    arithmetic case.
+//
+//
+//    Thus, we define "integer row reduced echelon form" (IRREF).
+//
+//
+//    A matrix is in integer row reduced echelon form if:
+//
+//    * The leading nonzero in each row is positive.
+//
+//    * Each row has no common factor greater than 1.
+//
+//    * The leading nonzero in each row occurs in a column to
+//      the right of the leading nonzero in the previous row.
+//
+//    * Rows which are entirely zero occur last.
+//
+//    * When a row contains a leading nonzero in column J, then column J
+//      is otherwise entirely zero.
+//
+//  Example:
+//
+//    Input matrix:
+//
+//     1    3    0    2    6    3    1
+//    -2   -6    0   -2   -8    3    1
+//     3    9    0    0    6    6    2
+//    -1   -3    0    1    0    9    3
+//
+//    Output matrix:
+//
+//     1    3    0    0    2    0    0
+//     0    0    0    1    2    0    0
+//     0    0    0    0    0    3    1
+//     0    0    0    0    0    0    0
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    19 September 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int M, N, the number of rows and columns of
+//    the matrix A.
+//
+//    Input/output, int A[M*N].  On input, the matrix to be
+//    analyzed.  On output, the IRREF form of the matrix.
+//
+//    Output, int I4MAT_RREF, the pseudo-determinant.
+//
+{
+  int det;
+  int i;
+  int j;
+  int lead;
+  int r;
+  int *row;
+  int t;
+ 
+  det = 1;
+  lead = 0;
+
+  row = new int[n];
+
+  for ( r = 0; r < m; r++ )
+  {
+    if ( n - 1 < lead )
+    {
+      break;
+    }
+//
+//  Start I at row R, and search for nonzero pivot entry A(I,LEAD).
+//
+    i = r;
+
+    while ( a[i+lead*m] == 0 )
+    {
+      i = i + 1;
+//
+//  If reach last row, reset I to R, and increment LEAD.
+//
+      if ( m - 1 < i )
+      {
+        i = r;
+        lead = lead + 1;
+//
+//  If reach last column, we can find no more pivots.
+//
+        if ( n - 1 < lead )
+        {
+          lead = -1;
+          break;
+         }
+      }
+    }
+
+    if ( lead < 0 )
+    {
+      break;
+    }
+//
+//  Move pivot I into row R.
+//
+    if ( i != r )
+    {
+      for ( j = 0; j < n; j++ )
+      {
+        t        = a[i+j*m];
+        a[i+j*m] = a[r+j*m];
+        a[r+j*m] = t;
+      }
+    }
+//
+//  Ensure pivot is positive.
+//
+    if ( a[r+lead*m] < 0 )
+    {
+      for ( j = 0; j < n; j++ )
+      {
+        a[r+j*m] = - a[r+j*m];
+      }
+      det = - det;
+    }
+//
+//  Update the pseudo-determinant.
+//
+    det = det * a[r+lead*m];
+//
+//  Remove any common factor from row R.
+//
+    for ( j = 0; j < n; j++ )
+    {
+      row[j] = a[r+j*m];
+    }
+    i4vec_red ( n, row );
+    for ( j = 0; j < n; j++ )
+    {
+      a[r+j*m] = row[j];
+    }
+//
+//  Use a multiple of A(R,LEAD) to eliminate A(1:M,LEAD).
+//
+    for ( i = 0; i < m; i++ )
+    {
+      if ( i != r )
+      {
+        t = a[i+lead*m];
+        for ( j = 0; j < n; j++ )
+        {
+          a[i+j*m] = a[r+lead*m] * a[i+j*m] - t * a[r+j*m];
+        }
+
+        for ( j = 0; j < n; j++ )
+        {
+          row[j] = a[i+j*m];
+        }
+        i4vec_red ( n, row );
+        for ( j = 0; j < n; j++ )
+        {
+          a[i+j*m] = row[j];
+        }
+      }
+    }
+    lead = lead + 1;
+  }
+
+  delete [] row;
+
+  return det;
+}
+//****************************************************************************80
+
+double *i4mat_u_solve ( int n, int a[], int b[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4MAT_U_SOLVE solves an upper triangular linear system.
+//
+//  Discussion:
+//
+//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].
+//
+//    Note that the solution is returned as a real vector.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    26 August 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of rows and columns of
+//    the matrix A.
+//
+//    Input, int A[N*N], the N by N upper triangular matrix.
+//
+//    Input, int B[N], the right hand side of the linear system.
+//
+//    Output, double I4MAT_U_SOLVE[N], the solution of the linear system.
+//
+{
+  int i;
+  int j;
+  double *x;
+//
+//  Solve U * x = b.
+//
+  x = new double[n];
+
+  for ( i = n - 1; 0 <= i; i-- )
+  {
+    x[i] = ( double ) b[i];
+    for ( j = i + 1; j < n; j++ )
+    {
+      x[i] = x[i] - ( double ) a[i+j*n] * x[j];
+    }
+    x[i] = x[i] / ( double ) a[i+i*n];
+  }
+
+  return x;
+}
+//****************************************************************************80
+
+void i4vec_binary_next ( int n, int bvec[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_BINARY_NEXT generates the next binary vector.
+//
+//  Discussion:
+//
+//    The vectors have the order
+//
+//      (0,0,...,0),
+//      (0,0,...,1),
+//      ...
+//      (1,1,...,1)
+//
+//    and the "next" vector after (1,1,...,1) is (0,0,...,0).  That is,
+//    we allow wrap around.
+//
+//  Example:
+//
+//    N = 3
+//
+//    Input      Output
+//    -----      ------
+//    0 0 0  =>  0 0 1
+//    0 0 1  =>  0 1 0
+//    0 1 0  =>  0 1 1
+//    0 1 1  =>  1 0 0
+//    1 0 0  =>  1 0 1
+//    1 0 1  =>  1 1 0
+//    1 1 0  =>  1 1 1
+//    1 1 1  =>  0 0 0
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    31 March 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the dimension of the vectors.
+//
+//    Input, int BVEC[N], the vector whose successor is desired.
+//
+//    Output, int BVEC[N], the successor to the input vector.
+//
+{
+  int i;
+
+  for ( i = n - 1; 0 <= i; i-- )
+  {
+    if ( bvec[i] == 0 )
+    {
+      bvec[i] = 1;
+      return;
+    }
+    bvec[i] = 0;
+  }
+
+  return;
+}
+//****************************************************************************80
+
+bool i4vec_is_binary ( int n, int x[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_IS_BINARY is true if the entries in an I4VEC are all 0 or 1.
+//
+//  Discussion:
+//
+//    An I4VEC is a vector of I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    31 March 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of entries in the vector.
+//
+//    Input, int X[N], the vector to be checked.
+//
+//    Output, bool I4VEC_IS_BINARY is true if all N elements of X
+//    are 0 or 1.
+//
+{
+  int i;
+  bool value;
+
+  value = true;
+
+  for ( i = 0; i < n; i++ )
+  {
+    if ( x[i] != 0 && x[i] != 1 )
+    {
+      value = false;
+      break;
+    }
+  }
+
+  return value;
+}
+//****************************************************************************80
+
+bool i4vec_is_one ( int n, int x[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_IS_ONE is true if the entries in an I4VEC are all 1.
+//
+//  Discussion:
+//
+//    An I4VEC is a vector of I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    31 March 2018
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of entries in the vector.
+//
+//    Input, int X[N], the vector to be checked.
+//
+//    Output, bool I4VEC_IS_ONE is true if all N elements of X
+//    are 1.
+//
+{
+  int i;
+  bool value;
+
+  value = true;
+
+  for ( i = 0; i < n; i++ )
+  {
+    if ( x[i] != 1 )
+    {
+      value = false;
+      break;
+    }
+  }
+
+  return value;
+}
+//****************************************************************************80
+
+void i4vec_print ( int n, int a[], string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_PRINT prints an I4VEC.
+//
+//  Discussion:
+//
+//    An I4VEC is a vector of I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    14 November 2003
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of components of the vector.
+//
+//    Input, int A[N], the vector to be printed.
+//
+//    Input, string TITLE, a title.
+//
+{
+  int i;
+
+  cout << "\n";
+  cout << title << "\n";
+  cout << "\n";
+  for ( i = 0; i < n; i++ )
+  {
+    cout << "  " << setw(8) << i
+         << ": " << setw(8) << a[i]  << "\n";
+  }
+  return;
+}
+//****************************************************************************80
+
+int i4vec_red ( int n, int a[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_RED divides out common factors in an I4VEC.
+//
+//  Discussion:
+//
+//    An I4VEC is a vector of I4's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    25 September 2005
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of entries in the vector.
+//
+//    Input/output, int A[N], the vector to be reduced.
+//    On output, the entries have no common factor
+//    greater than 1.
+//
+//    Output, int I4VEC_RED, the common factor that was divided out.
+//
+{
+  int factor;
+  int i;
+//
+//  Find the smallest nonzero value.
+//
+  factor = 0;
+
+  for ( i = 0; i < n; i++ )
+  {
+    if ( a[i] != 0 )
+    {
+      if ( factor == 0 )
+      {
+        factor = abs ( a[i] );
+      }
+      else if ( abs ( a[i] ) < factor )
+      {
+        factor = abs ( a[i] );
+      }
+    }
+  }
+
+  if ( factor == 0 )
+  {
+    return factor;
+  }
+//
+//  Find the greatest common factor of the entire vector.
+//
+  for ( i = 0; i < n; i++ )
+  {
+    factor = i4_gcd ( a[i], factor );
+  }
+
+  if ( factor == 1 )
+  {
+    return factor;
+  }
+//
+//  Divide out the common factor.
+//
+  for ( i = 0; i < n; i++ )
+  {
+    a[i] = a[i] / factor;
+  }
+
+  return factor;
+}
+//****************************************************************************80
+
+void i4vec_transpose_print ( int n, int a[], string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    I4VEC_TRANSPOSE_PRINT prints an I4VEC "transposed".
+//
+//  Discussion:
+//
+//    An I4VEC is a vector of I4's.
+//
+//  Example:
+//
+//    A = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }
+//    TITLE = "My vector:  "
+//
+//    My vector:      1    2    3    4    5
+//                    6    7    8    9   10
+//                   11
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    03 July 2004
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of components of the vector.
+//
+//    Input, int A[N], the vector to be printed.
+//
+//    Input, string TITLE, a title.
+//
+{
+  int i;
+  int ihi;
+  int ilo;
+  int title_len;
+
+  title_len = title.length ( );
+
+  if ( 0 < title_len )
+  {
+    cout << "\n";
+    cout << title << "\n";
+  }
+
+  if ( 0 < n )
+  {
+    for ( ilo = 1; ilo <= n; ilo = ilo + 5 )
+    {
+      ihi = ilo + 5 - 1;
+      if ( n < ihi )
+      {
+        ihi = n;
+      }
+      for ( i = ilo; i <= ihi; i++ )
+      {
+        cout << setw(12) << a[i-1];
+      }
+      cout << "\n";
+    }
+  }
+  else
+  {
+    cout << "  (empty vector)\n";
+  }
+
+  return;
+}
+//****************************************************************************80
+
+void ksub_next4 ( int n, int k, int a[], bool &done )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    KSUB_NEXT4 generates the subsets of size K from a set of size N.
+//
+//  Discussion:
+//
+//    The subsets are generated one at a time.
+//
+//    The routine should be used by setting DONE to TRUE, and then calling
+//    repeatedly.  Each call returns with DONE equal to FALSE, the array
+//    A contains information defining a new subset.  When DONE returns
+//    equal to TRUE, there are no more subsets.
+//
+//    There are ( N*(N-1)*...*(N+K-1)) / ( K*(K-1)*...*2*1) such subsets.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license. 
+//
+//  Modified:
+//
+//    23 August 2018
+//
+//  Author:
+//
+//    Original FORTRAN77 version by Albert Nijenhuis, Herbert Wilf.
+//    C++ version by John Burkardt.
+//
+//  Reference:
+//
+//    Albert Nijenhuis, Herbert Wilf,
+//    Combinatorial Algorithms for Computers and Calculators,
+//    Second Edition,
+//    Academic Press, 1978,
+//    ISBN: 0-12-519260-6,
+//    LC: QA164.N54.
+//
+//  Parameters:
+//
+//    Input, int N, the size of the entire set.
+//
+//    Input, int K, the size of the desired subset.  K must be
+//    between 0 and N.
+//
+//    Input/output, int A[K], contains information about
+//    the subsets.  On the first call with DONE = TRUE, the input contents
+//    of A don't matter.  Thereafter, the input value of A
+//    should be the same as the output value of the previous call.
+//    In other words, leave the array alone!
+//    On output, as long as DONE is returned FALSE, A contains
+//    information defining a subset of K elements of a set of N elements.
+//    In other words, A will contain K distinct numbers (in order)
+//    between 1 and N.
+//
+//    Input/output, bool &DONE.
+//    On the first call, DONE is an input quantity with a value
+//    of TRUE which tells the program to initialize data and
+//    return the first subset.
+//    On return, DONE is an output quantity that is TRUE as long as
+//    the routine is returning another subset, and FALSE when
+//    there are no more.
+//
+{
+  int j;
+  int jsave;
+
+  if ( k < 0 )
+  {
+    cerr << "\n";
+    cerr << "KSUB_NEXT4 - Fatal error!\n";
+    cerr << "  K = " << k << "\n";
+    cerr << "  but 0 <= K is required!\n";
+    exit ( 1 );
+  }
+
+  if ( n < k )
+  {
+    cerr << "\n";
+    cerr << "KSUB_NEXT4 - Fatal error!\n";
+    cerr << "  N = " << n << "\n";
+    cerr << "  K = " << k << "\n";
+    cerr << "  but K <= N is required!\n";
+    exit ( 1 );
+  }
+
+//
+//  First call:
+//
+  if ( done )
+  {
+    for ( j = 0; j < k; j++ )
+    {
+      a[j] = j + 1;
+    }
+    done = false;
+  }
+//
+//  Empty set returned on previous call.
+//
+  else if ( n == 0 || k == 0 )
+  {
+    done = true;
+  }
+//
+//  Next call.
+//
+  else if ( a[0] < n - k + 1 )
+  {
+    jsave = k - 1;
+
+    for ( j = 0; j < k - 1; j++ )
+    {
+      if ( a[j] + 1 < a[j+1] )
+      {
+        jsave = j;
+        break;
+      }
+    }
+    for ( j = 0; j < jsave; j++ )
+    {
+      a[j] = j + 1;
+    }
+    a[jsave] = a[jsave] + 1;
+    done = false;
+  }
+  else
+  {
+    done = true;
+  }
+  return;
+}
+//****************************************************************************80
+
+bool r8vec_is_integer ( int n, double a[] )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    R8VEC_IS_INTEGER is TRUE if an R8VEC is integral.
+//
+//  Discussion:
+//
+//    An R8VEC is a vector of R8's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    03 October 2005
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of entries in A.
+//
+//    Input, double A[N], the vector
+//
+//    Output, bool R8VEC_IS_INTEGER, is TRUE if every entry is an integer.
+//
+{
+  int i;
+  bool value;
+
+  value = true;
+
+  for ( i = 0; i < n; i++ )
+  {
+    if ( a[i] != ( double ) ( int ) a[i] )
+    {
+      value = false;
+      break;
+    }
+  }
+  return value;
+}
+//****************************************************************************80
+
+void r8vec_print ( int n, double a[], string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    R8VEC_PRINT prints an R8VEC.
+//
+//  Discussion:
+//
+//    An R8VEC is a vector of R8's.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    16 August 2004
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of components of the vector.
+//
+//    Input, double A[N], the vector to be printed.
+//
+//    Input, string TITLE, a title.
+//
+{
+  int i;
+
+  cout << "\n";
+  cout << title << "\n";
+  cout << "\n";
+  for ( i = 0; i < n; i++ )
+  {
+    cout << "  " << setw(8)  << i
+         << ": " << setw(14) << a[i]  << "\n";
+  }
+
+  return;
+}
+//****************************************************************************80
+
+void r8vec_transpose_print ( int n, double a[], string title )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    R8VEC_TRANSPOSE_PRINT prints an R8VEC "transposed".
+//
+//  Discussion:
+//
+//    An R8VEC is a vector of R8's.
+//
+//  Example:
+//
+//    A = (/ 1.0, 2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0 /)
+//    TITLE = 'My vector:  '
+//
+//    My vector:   1.0    2.1    3.2    4.3    5.4
+//                 6.5    7.6    8.7    9.8   10.9
+//                11.0
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    11 May 2014
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, int N, the number of components of the vector.
+//
+//    Input, double A[N], the vector to be printed.
+//
+//    Input, string TITLE, a title.
+//
+{
+  int i;
+  int ihi;
+  int ilo;
+  int title_length;
+
+  title_length = s_len_trim ( title );
+
+  for ( ilo = 0; ilo < n; ilo = ilo + 5 )
+  {
+    if ( ilo == 0 )
+    {
+      cout << title;
+    }
+    else
+    {
+      for ( i = 0; i < title_length; i++ )
+      {
+        cout << " ";
+      }
+    }
+    cout << "  ";
+    ihi = i4_min ( ilo + 5, n );
+    for ( i = ilo; i < ihi; i++ )
+    {
+      cout << "  " << setw(12) << a[i];
+    }
+    cout << "\n";
+  }
+
+  return;
+}
+//****************************************************************************80
+
+int s_len_trim ( string s )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    S_LEN_TRIM returns the length of a string to the last nonblank.
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    05 July 2009
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    Input, string S, a string.
+//
+//    Output, int S_LEN_TRIM, the length of the string to the last nonblank.
+//    If S_LEN_TRIM is 0, then the string is entirely blank.
+//
+{
+  int n;
+
+  n = s.length ( );
+
+  while ( 0 < n )
+  {
+    if ( s[n-1] != ' ' )
+    {
+      return n;
+    }
+    n = n - 1;
+  }
+
+  return n;
+}
+//****************************************************************************80
+
+void timestamp ( )
+
+//****************************************************************************80
+//
+//  Purpose:
+//
+//    TIMESTAMP prints the current YMDHMS date as a time stamp.
+//
+//  Example:
+//
+//    31 May 2001 09:45:54 AM
+//
+//  Licensing:
+//
+//    This code is distributed under the GNU LGPL license.
+//
+//  Modified:
+//
+//    08 July 2009
+//
+//  Author:
+//
+//    John Burkardt
+//
+//  Parameters:
+//
+//    None
+//
+{
+# define TIME_SIZE 40
+
+  static char time_buffer[TIME_SIZE];
+  const struct std::tm *tm_ptr;
+  std::time_t now;
+
+  now = std::time ( NULL );
+  tm_ptr = std::localtime ( &now );
+
+  std::strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm_ptr );
+
+  std::cout << time_buffer << "\n";
+
+  return;
+# undef TIME_SIZE
+}
+
diff --git a/contrib/QuadMeshingTools/row_echelon_integer.hpp b/contrib/QuadMeshingTools/row_echelon_integer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..3de8630c2a94134c0a58fb449004c36d41b92738
--- /dev/null
+++ b/contrib/QuadMeshingTools/row_echelon_integer.hpp
@@ -0,0 +1,31 @@
+/* Author: John Burkardt
+ * Link: https://people.sc.fsu.edu/~jburkardt/cpp_src/row_echelon_integer/row_echelon_integer.html 
+ * License: The computer code and data files made available on this web page are distributed under the GNU LGPL license.
+ *          https://www.gnu.org/licenses/lgpl-3.0.en.html */
+
+#include <string>
+
+int i4_gcd ( int i, int j );
+int i4_max ( int i1, int i2 );
+int i4_min ( int i1, int i2 );
+void i4mat_print ( int m, int n, int a[], std::string title );
+void i4mat_print_some ( int m, int n, int a[], int ilo, int jlo, int ihi,
+  int jhi, std::string title );
+int i4mat_ref ( int m, int n, int a[] );
+void i4mat_row_reduce ( int m, int n, int i, int a[] );
+void i4mat_row_swap ( int m, int n, int a[], int i, int r );
+int i4mat_rref ( int m, int n, int a[] );
+double *i4mat_u_solve ( int n, int a[], int b[] );
+void i4vec_binary_next ( int n, int bvec[] );
+bool i4vec_is_binary ( int n, int x[] );
+bool i4vec_is_one ( int n, int x[] );
+void i4vec_print ( int n, int a[], std::string title );
+int i4vec_red ( int n, int a[] );
+void i4vec_transpose_print ( int n, int a[], std::string title );
+void ksub_next4 ( int n, int k, int a[], bool &done );
+bool r8vec_is_integer ( int n, double a[] );
+void r8vec_print ( int n, double a[], std::string title );
+void r8vec_transpose_print ( int n, double a[], std::string title );
+int s_len_trim ( std::string s );
+void timestamp ( );
+
diff --git a/contrib/domhex/BGMBase.cpp b/contrib/domhex/BGMBase.cpp
index ebf8d7b58037a5f4f45bdb606dd3e4030fea9192..ab1fe842a851ddab58861b647069ee0e2d43a99b 100644
--- a/contrib/domhex/BGMBase.cpp
+++ b/contrib/domhex/BGMBase.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -31,7 +31,7 @@ void BGMBase::export_scalar(const std::string &filename,
     elem = getElement(i);
     nvertex = elem->getNumVertices();
     type = elem->getType();
-    const char *s = nullptr;
+    const char *s = 0;
     switch(type) {
     case TYPE_PNT: s = "SP"; break;
     case TYPE_LIN: s = "SL"; break;
@@ -89,7 +89,7 @@ void BGMBase::export_vector(const std::string &filename,
     elem = getElement(i);
     nvertex = elem->getNumVertices();
     type = elem->getType();
-    const char *s = nullptr;
+    const char *s = 0;
     switch(type) {
     case TYPE_PNT: s = "VP"; break;
     case TYPE_LIN: s = "VL"; break;
@@ -141,7 +141,7 @@ void BGMBase::export_tensor_as_vectors(
 
   fprintf(f, "View \"Background Mesh\"{\n");
 
-  auto it = _whatToPrint.begin();
+  TensorStorageType::const_iterator it = _whatToPrint.begin();
   const char *s = "VP";
 
   for(; it != _whatToPrint.end(); it++) { // for all vertices
@@ -158,7 +158,7 @@ void BGMBase::export_tensor_as_vectors(
 }
 
 BGMBase::BGMBase(int dim, GEntity *_gf)
-  : octree(nullptr), gf(_gf), DIM(dim), order(1)
+  : octree(NULL), gf(_gf), DIM(dim), order(1)
 {
 }
 
@@ -166,7 +166,7 @@ BGMBase::~BGMBase() {}
 
 bool BGMBase::inDomain(double u, double v, double w)
 {
-  return (findElement(u, v, w) != nullptr);
+  return (findElement(u, v, w) != NULL);
 }
 
 const MElement *BGMBase::findElement(double u, double v, double w, bool strict)
@@ -224,7 +224,7 @@ double BGMBase::size(const MVertex *v) { return get_nodal_value(v, sizeField); }
 std::vector<double>
 BGMBase::get_nodal_value(const MVertex *v, const VectorStorageType &data) const
 {
-  auto itfind = data.find(v);
+  VectorStorageType::const_iterator itfind = data.find(v);
   if(itfind == data.end()) {
     Msg::Error("Unknown vertex %d in BGMBase::get_nodal_value", v->getNum());
     return std::vector<double>(3, 0.);
@@ -235,7 +235,7 @@ BGMBase::get_nodal_value(const MVertex *v, const VectorStorageType &data) const
 double BGMBase::get_nodal_value(const MVertex *v,
                                 const DoubleStorageType &data) const
 {
-  auto itfind = data.find(v);
+  DoubleStorageType::const_iterator itfind = data.find(v);
   if(itfind == data.end()) {
     Msg::Error("Unknown vertex %d in BGMBase::get_nodal_value", v->getNum());
     return 0.;
@@ -250,7 +250,8 @@ BGMBase::get_nodal_values(const MElement *e,
   std::vector<std::vector<double> > res(e->getNumVertices());
 
   for(std::size_t i = 0; i < e->getNumVertices(); i++) {
-    auto itfind = data.find(const_cast<MVertex *>(e->getVertex(i)));
+    VectorStorageType::const_iterator itfind =
+      data.find(const_cast<MVertex *>(e->getVertex(i)));
     for(int j = 0; j < 3; j++) res[i].push_back((itfind->second)[j]);
   }
   return res;
diff --git a/contrib/domhex/BackgroundMesh2D.cpp b/contrib/domhex/BackgroundMesh2D.cpp
index 84999c89e7f2789c797ef74dc76464ae0d2d51f1..b9933e6a11b5d8359ab3e417f19ea3badad4198d 100644
--- a/contrib/domhex/BackgroundMesh2D.cpp
+++ b/contrib/domhex/BackgroundMesh2D.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -111,9 +111,13 @@ void backgroundMesh2D::reset(bool erase_2D3D)
   create_face_mesh();
 
   // computes the mesh sizes at nodes
-  if(CTX::instance()->mesh.lcFromPoints) { computeSizeField(); }
+  if(CTX::instance()->mesh.lcFromPoints) {
+    computeSizeField();
+  }
   else
-    for(auto itv2 = _2Dto3D.begin(); itv2 != _2Dto3D.end(); ++itv2)
+    for(std::map<MVertex const *const, MVertex *>::iterator itv2 =
+          _2Dto3D.begin();
+        itv2 != _2Dto3D.end(); ++itv2)
       sizeField[itv2->first] = CTX::instance()->mesh.lcMax;
 
   // ensure that other criteria are fullfilled
@@ -130,7 +134,7 @@ void backgroundMesh2D::unset()
   for(unsigned int i = 0; i < vertices.size(); i++) delete vertices[i];
   for(unsigned int i = 0; i < getNumMeshElements(); i++) delete elements[i];
   if(octree) delete octree;
-  octree = nullptr;
+  octree = NULL;
 }
 
 void backgroundMesh2D::create_mesh_copy()
@@ -147,8 +151,8 @@ void backgroundMesh2D::create_mesh_copy()
     MVertex *news[3];
     for(int j = 0; j < 3; j++) {
       MVertex *v = e->getVertex(j);
-      auto it = _3Dto2D.find(v);
-      MVertex *newv = nullptr;
+      std::map<MVertex const *const, MVertex *>::iterator it = _3Dto2D.find(v);
+      MVertex *newv = 0;
       if(it == _3Dto2D.end()) {
         SPoint2 p;
         reparamMeshVertexOnFace(v, face, p);
@@ -207,13 +211,14 @@ void backgroundMesh2D::propagateValues(DoubleStorageType &dirichlet,
   linearSystemCSRGmm<double> *_lsys = new linearSystemCSRGmm<double>;
   _lsys->setGmres(1);
 #else
-  linearSystemFull<double> *_lsys = new linearSystemFull<double>;
+   linearSystemFull<double> *_lsys = new linearSystemFull<double>;
 #endif
 
   dofManager<double> myAssembler(_lsys);
 
   // fix boundary conditions
-  for(auto itv = dirichlet.begin(); itv != dirichlet.end(); ++itv) {
+  for(DoubleStorageType::iterator itv = dirichlet.begin();
+      itv != dirichlet.end(); ++itv) {
     myAssembler.fixVertex(itv->first, 0, 1, itv->second);
   }
 
@@ -232,7 +237,7 @@ void backgroundMesh2D::propagateValues(DoubleStorageType &dirichlet,
 
   std::map<MVertex *, SPoint3> theMap;
   if(in_parametric_plane) {
-    for(auto it = vs.begin(); it != vs.end(); ++it) {
+    for(std::set<MVertex *>::iterator it = vs.begin(); it != vs.end(); ++it) {
       SPoint2 p;
       reparamMeshVertexOnFace(*it, face, p);
       theMap[*it] = SPoint3((*it)->x(), (*it)->y(), (*it)->z());
@@ -240,11 +245,11 @@ void backgroundMesh2D::propagateValues(DoubleStorageType &dirichlet,
     }
   }
 
-  for(auto it = vs.begin(); it != vs.end(); ++it)
+  for(std::set<MVertex *>::iterator it = vs.begin(); it != vs.end(); ++it)
     myAssembler.numberVertex(*it, 0, 1);
 
   // Assemble
-  laplaceTerm l(nullptr, 1, &eval_diffusivity);
+  laplaceTerm l(0, 1, &eval_diffusivity);
   for(unsigned int k = 0; k < face->triangles.size(); k++) {
     MTriangle *t = face->triangles[k];
     SElement se(t);
@@ -252,15 +257,17 @@ void backgroundMesh2D::propagateValues(DoubleStorageType &dirichlet,
   }
 
   // Solve
-  if(myAssembler.sizeOfR()) { _lsys->systemSolve(); }
+  if(myAssembler.sizeOfR()) {
+    _lsys->systemSolve();
+  }
 
   // save solution
-  for(auto it = vs.begin(); it != vs.end(); ++it) {
+  for(std::set<MVertex *>::iterator it = vs.begin(); it != vs.end(); ++it) {
     myAssembler.getDofValue(*it, 0, 1, dirichlet[*it]);
   }
 
   if(in_parametric_plane) {
-    for(auto it = vs.begin(); it != vs.end(); ++it) {
+    for(std::set<MVertex *>::iterator it = vs.begin(); it != vs.end(); ++it) {
       SPoint3 p = theMap[(*it)];
       (*it)->setXYZ(p.x(), p.y(), p.z());
     }
@@ -278,7 +285,7 @@ void backgroundMesh2D::computeSizeField()
   }
 
   std::vector<GEdge *> const &e = face->edges();
-  auto it = e.begin();
+  std::vector<GEdge *>::const_iterator it = e.begin();
   DoubleStorageType sizes;
 
   for(; it != e.end(); ++it) {
@@ -292,7 +299,7 @@ void backgroundMesh2D::computeSizeField()
                                (v1->z() - v2->z()) * (v1->z() - v2->z()));
           for(int k = 0; k < 2; k++) {
             MVertex *v = (*it)->lines[i]->getVertex(k);
-            auto itv = sizes.find(v);
+            DoubleStorageType::iterator itv = sizes.find(v);
             if(itv == sizes.end())
               sizes[v] = std::log(d);
             else
@@ -306,7 +313,7 @@ void backgroundMesh2D::computeSizeField()
   simpleFunction<double> ONE(1.0);
   propagateValues(sizes, ONE);
 
-  auto itv2 = _2Dto3D.begin();
+  std::map<MVertex const *const, MVertex *>::iterator itv2 = _2Dto3D.begin();
   for(; itv2 != _2Dto3D.end(); ++itv2) {
     MVertex const *const v_2D = itv2->first;
     MVertex *v_3D = itv2->second;
@@ -323,7 +330,7 @@ inline double myAngle(const SVector3 &a, const SVector3 &b, const SVector3 &d)
 
 void backgroundMesh2D::updateSizes()
 {
-  auto itv = sizeField.begin();
+  DoubleStorageType::iterator itv = sizeField.begin();
   for(; itv != sizeField.end(); ++itv) {
     SPoint2 p;
     MVertex const *const v = _2Dto3D[itv->first];
@@ -364,14 +371,14 @@ void backgroundMesh2D::updateSizes()
   }
   const double _beta = 1.3;
   for(int i = 0; i < 0; i++) {
-    auto it = edges.begin();
+    std::set<MEdge, MEdgeLessThan>::iterator it = edges.begin();
     for(; it != edges.end(); ++it) {
       MVertex *v0 = it->getVertex(0);
       MVertex *v1 = it->getVertex(1);
       MVertex *V0 = _2Dto3D[v0];
       MVertex *V1 = _2Dto3D[v1];
-      auto s0 = sizeField.find(V0);
-      auto s1 = sizeField.find(V1);
+      DoubleStorageType::iterator s0 = sizeField.find(V0);
+      DoubleStorageType::iterator s1 = sizeField.find(V1);
       if(s0->second < s1->second)
         s1->second = std::min(s1->second, _beta * s0->second);
       else
@@ -473,7 +480,7 @@ void frameFieldBackgroundMesh2D::computeCrossField(
     return;
   }
   std::vector<GEdge *> const &e = face->edges();
-  auto it = e.begin();
+  std::vector<GEdge *>::const_iterator it = e.begin();
 
   for(; it != e.end(); ++it) {
     if(!(*it)->isSeam(face)) {
@@ -495,8 +502,8 @@ void frameFieldBackgroundMesh2D::computeCrossField(
         double _angle = myAngle(t1, d1, n);
         normalizeAngle(_angle);
         for(int i = 0; i < 2; i++) {
-          auto itc = _cosines4.find(v[i]);
-          auto its = _sines4.find(v[i]);
+          DoubleStorageType::iterator itc = _cosines4.find(v[i]);
+          DoubleStorageType::iterator its = _sines4.find(v[i]);
           if(itc != _cosines4.end()) {
             itc->second = 0.5 * (itc->second + std::cos(4 * _angle));
             its->second = 0.5 * (its->second + std::sin(4 * _angle));
@@ -513,7 +520,7 @@ void frameFieldBackgroundMesh2D::computeCrossField(
   propagateValues(_cosines4, eval_diffusivity, false);
   propagateValues(_sines4, eval_diffusivity, false);
 
-  auto itv2 = _2Dto3D.begin();
+  std::map<MVertex const *const, MVertex *>::iterator itv2 = _2Dto3D.begin();
   for(; itv2 != _2Dto3D.end(); ++itv2) {
     MVertex const *const v_2D = itv2->first;
     MVertex *v_3D = itv2->second;
@@ -574,7 +581,8 @@ void frameFieldBackgroundMesh2D::computeSmoothness()
 
   // build vertex -> neighbors table
   std::multimap<MVertex *, MVertex *> vertex2vertex;
-  for(auto it = beginelements(); it != endelements(); it++) {
+  for(std::vector<MElement *>::iterator it = beginelements();
+      it != endelements(); it++) {
     MElement *e = *it;
     for(std::size_t i = 0; i < e->getNumVertices(); i++) {
       MVertex *current = e->getVertex(i);
@@ -587,7 +595,8 @@ void frameFieldBackgroundMesh2D::computeSmoothness()
   }
 
   // compute smoothness
-  for(auto it = beginvertices(); it != endvertices(); it++) {
+  for(std::vector<MVertex *>::iterator it = beginvertices();
+      it != endvertices(); it++) {
     MVertex *v = *it;
     double angle_current = angle(v);
     // compare to all neighbors...
@@ -596,8 +605,8 @@ void frameFieldBackgroundMesh2D::computeSmoothness()
       range = vertex2vertex.equal_range(v);
     double minangle, totalangle = 0.;
     int N = 0;
-    for(auto itneighbor = range.first; itneighbor != range.second;
-        itneighbor++) {
+    for(std::multimap<MVertex *, MVertex *>::iterator itneighbor = range.first;
+        itneighbor != range.second; itneighbor++) {
       N++;
       minangle = M_PI / 2;
       MVertex *v_nb = itneighbor->second;
@@ -627,7 +636,8 @@ void frameFieldBackgroundMesh2D::exportCrossField(const std::string &filename)
   deltas[0] = 0.;
   deltas[1] = M_PI;
 
-  for(auto it = beginvertices(); it != endvertices(); it++) {
+  for(std::vector<MVertex *>::iterator it = beginvertices();
+      it != endvertices(); it++) {
     MVertex *v = *it;
     double angle_current = angle(v);
     GPoint p = get_GPoint_from_MVertex(v);
@@ -725,7 +735,9 @@ bool frameFieldBackgroundMesh2D::compute_RK_infos(double u, double v, double x,
   FieldManager *fields = gf->model()->getFields();
   if(fields->getBackgroundField() > 0) {
     Field *f = fields->get(fields->getBackgroundField());
-    if(!f->isotropic()) { (*f)(x, y, z, infos.metricField, gf); }
+    if(!f->isotropic()) {
+      (*f)(x, y, z, infos.metricField, gf);
+    }
     else {
       L = (*f)(x, y, z, gf);
       infos.metricField = SMetric3(1. / (L * L));
diff --git a/contrib/domhex/BackgroundMesh2D.h b/contrib/domhex/BackgroundMesh2D.h
index be68e1706775e3c6984d4454a9c52362053d5b67..db26ec1a49f76928863f7e00f2da7c901801e220 100644
--- a/contrib/domhex/BackgroundMesh2D.h
+++ b/contrib/domhex/BackgroundMesh2D.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/BackgroundMesh3D.cpp b/contrib/domhex/BackgroundMesh3D.cpp
index b1be0546a065e5574ebd1a27707ae70132273e1b..a26fe88b4b6e62031f56242229fbeadd792443c1 100644
--- a/contrib/domhex/BackgroundMesh3D.cpp
+++ b/contrib/domhex/BackgroundMesh3D.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -69,7 +69,8 @@ void backgroundMesh3D::computeSizeField()
   MVertex *v;
   MElement *e;
 
-  for(auto it = faces.begin(); it != faces.end(); it++) { // for all GFace
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) { // for all GFace
     GFace *face = *it;
     frameFieldBackgroundMesh2D *bgm2d =
       dynamic_cast<frameFieldBackgroundMesh2D *>(BGMManager::get(face));
@@ -117,7 +118,7 @@ void backgroundMesh3D::propagateValues(DoubleStorageType &dirichlet,
   linearSystemCSRGmm<double> *lsys = new linearSystemCSRGmm<double>;
   lsys->setGmres(1);
 #else
-  linearSystemFull<double> *lsys = new linearSystemFull<double>;
+   linearSystemFull<double> *lsys = new linearSystemFull<double>;
 #endif
 
   size_t i;
@@ -148,7 +149,9 @@ void backgroundMesh3D::propagateValues(DoubleStorageType &dirichlet,
 
   for(it = interior.begin(); it != interior.end(); it++) {
     it2 = dirichlet.find(*it);
-    if(it2 == dirichlet.end()) { assembler.numberVertex(*it, 0, 1); }
+    if(it2 == dirichlet.end()) {
+      assembler.numberVertex(*it, 0, 1);
+    }
   }
 
   for(i = 0; i < gr->tetrahedra.size(); i++) {
@@ -157,7 +160,7 @@ void backgroundMesh3D::propagateValues(DoubleStorageType &dirichlet,
 
   count2 = 0;
   volume = 0.0;
-  laplaceTerm term(nullptr, 1, &eval_diffusivity);
+  laplaceTerm term(0, 1, &eval_diffusivity);
   for(i = 0; i < gr->tetrahedra.size(); i++) {
     SElement se(gr->tetrahedra[i]);
     term.addToMatrix(assembler, &se);
@@ -167,7 +170,9 @@ void backgroundMesh3D::propagateValues(DoubleStorageType &dirichlet,
   // printf("number of tetrahedra = %d\n",count2);
   // printf("volume = %f\n",volume);
 
-  if(assembler.sizeOfR()) { lsys->systemSolve(); }
+  if(assembler.sizeOfR()) {
+    lsys->systemSolve();
+  }
 
   for(it = interior.begin(); it != interior.end(); it++) {
     assembler.getDofValue(*it, 0, 1, val);
@@ -214,7 +219,7 @@ MElementOctree *backgroundMesh3D::getOctree()
     GRegion *gr = dynamic_cast<GRegion *>(gf);
     if(!gr) {
       Msg::Error("Entity is not a region in background mesh");
-      return nullptr;
+      return 0;
     }
     Msg::Debug("Rebuilding BackgroundMesh element octree");
     std::vector<MElement *> copy(gr->tetrahedra.begin(), gr->tetrahedra.end());
@@ -229,7 +234,7 @@ MVertex *backgroundMesh3D::get_nearest_neighbor(const double *xyz,
   // using the octree instead of ANN, faster.
   MElement *elem = const_cast<MElement *>(findElement(xyz[0], xyz[1], xyz[2]));
 
-  if(!elem) return nullptr;
+  if(!elem) return NULL;
 
   std::vector<MVertex *> candidates(elem->getNumVertices());
   std::vector<double> distances(elem->getNumVertices());
@@ -239,7 +244,8 @@ MVertex *backgroundMesh3D::get_nearest_neighbor(const double *xyz,
     candidates[i] = v;
     distances[i] = p.distance(v->point());
   }
-  auto itmax = std::max_element(distances.begin(), distances.end());
+  std::vector<double>::iterator itmax =
+    std::max_element(distances.begin(), distances.end());
   return candidates[std::distance(distances.begin(), itmax)];
 
   //  map<double,MVertex*> distances;
@@ -283,7 +289,9 @@ frameFieldBackgroundMesh3D::frameFieldBackgroundMesh3D(GRegion *_gr)
   initiate_ANN_research();
   initiate_crossfield();
 
-  if(smooth_the_crossfield) { computeCrossField(); }
+  if(smooth_the_crossfield) {
+    computeCrossField();
+  }
   else {
     computeSmoothnessOnlyFromBoundaries();
   }
@@ -305,8 +313,8 @@ void frameFieldBackgroundMesh3D::initiate_ANN_research()
   dataPtsBnd = annAllocPts(maxPts, 3);
   int i = 0;
   MVertex *v;
-  for(auto it = listOfBndVertices.begin(); it != listOfBndVertices.end();
-      it++) {
+  for(std::set<MVertex *>::iterator it = listOfBndVertices.begin();
+      it != listOfBndVertices.end(); it++) {
     v = *it;
     for(int k = 0; k < 3; ++k) dataPtsBnd[i][k] = (v->point())[k];
     ++i;
@@ -329,22 +337,23 @@ void frameFieldBackgroundMesh3D::computeSmoothnessOnlyFromBoundaries()
   double mean_angle = 0.;
   std::vector<double> vectorial_smoothness(3);
 
-  for(auto it_vertex = vert2elem.begin(); it_vertex != vert2elem.end();
-      it_vertex++) { // for all vertices
+  for(vert2elemtype::iterator it_vertex = vert2elem.begin();
+      it_vertex != vert2elem.end(); it_vertex++) { // for all vertices
     themap.clear();
     neighbors.clear();
     MVertex const *current = it_vertex->first;
     std::pair<graphtype::const_iterator, graphtype::iterator> range =
       graph.equal_range(current);
-    auto itgraph = range.first;
+    graphtype::const_iterator itgraph = range.first;
     for(; itgraph != range.second; itgraph++) { // for all neighbors
       neighbors.insert(itgraph->second.second);
     }
-    for(auto it = neighbors.begin(); it != neighbors.end(); it++) {
+    for(std::set<MVertex const *>::iterator it = neighbors.begin();
+        it != neighbors.end(); it++) {
       themap.insert(std::make_pair(1., *it));
     }
 
-    auto itcurrent = crossField.find(current);
+    TensorStorageType::iterator itcurrent = crossField.find(current);
     STensor3 &ref = itcurrent->second;
 
     crossFieldSmoothness[current] =
@@ -377,8 +386,8 @@ void frameFieldBackgroundMesh3D::computeCrossField()
   std::map<MVertex const *const, bool> vertex_is_still;
   std::map<MVertex const *const, double> vertex_movement;
 
-  for(auto it_vertex = vert2elem.begin(); it_vertex != vert2elem.end();
-      it_vertex++) {
+  for(vert2elemtype::iterator it_vertex = vert2elem.begin();
+      it_vertex != vert2elem.end(); it_vertex++) {
     MVertex const *const current = it_vertex->first;
 
     vertex_is_still[current] = current->onWhat()->dim() <= 2;
@@ -388,8 +397,8 @@ void frameFieldBackgroundMesh3D::computeCrossField()
 
   // OLD - NEW COMPARISON
   std::map<MVertex const *, double> vertex_to_rank;
-  for(auto it_vertex = vert2elem.begin(); it_vertex != vert2elem.end();
-      it_vertex++) { // for all vertices
+  for(vert2elemtype::iterator it_vertex = vert2elem.begin();
+      it_vertex != vert2elem.end(); it_vertex++) { // for all vertices
     // vertex_to_rank[it_vertex->first] = 0.;
     vertex_to_rank[it_vertex->first] = 1.;
     rank.insert(std::make_pair(0., it_vertex->first));
@@ -434,7 +443,7 @@ void frameFieldBackgroundMesh3D::computeCrossField()
         continue;
       }
 
-      auto itcurrent = crossField.find(current);
+      TensorStorageType::iterator itcurrent = crossField.find(current);
       STensor3 &ref = itcurrent->second;
       if(verbose)
         std::cout << "-------------------- working on point "
@@ -445,7 +454,7 @@ void frameFieldBackgroundMesh3D::computeCrossField()
 
       std::pair<graphtype::iterator, graphtype::iterator> range =
         graph.equal_range(current);
-      auto itgraph = range.first;
+      graphtype::iterator itgraph = range.first;
       bool all_neighbors_still = true; // if nothing has changed since previous
                                        // iteration: nothing to do !
       for(; itgraph != range.second; itgraph++) { // for all neighbors
@@ -494,7 +503,8 @@ void frameFieldBackgroundMesh3D::computeCrossField()
 
       // iterations, convergence of the local cavity...
       for(; Nlocaliter < 20; Nlocaliter++) {
-        auto it_neighbors_to_trust = neighbors_to_trust.begin();
+        std::multimap<double, MVertex const *>::iterator it_neighbors_to_trust =
+          neighbors_to_trust.begin();
         crossFieldSmoothness[current] =
           compare_to_neighbors(current->point(), ref, it_neighbors_to_trust,
                                neighbors_to_trust.end(), mean_axis, mean_angle,
@@ -567,15 +577,15 @@ void frameFieldBackgroundMesh3D::computeCrossField()
   } // end Niter iterations
 
   // also computes smoothness for boundary points
-  for(auto it_vertex = vert2elem.begin(); it_vertex != vert2elem.end();
-      it_vertex++) {
+  for(vert2elemtype::iterator it_vertex = vert2elem.begin();
+      it_vertex != vert2elem.end(); it_vertex++) {
     MVertex const *const current = it_vertex->first;
     if(current->onWhat()->dim() <= 2) {
-      auto itcurrent = crossField.find(current);
+      TensorStorageType::iterator itcurrent = crossField.find(current);
       STensor3 &ref = itcurrent->second;
       std::pair<graphtype::iterator, graphtype::iterator> range =
         graph.equal_range(current);
-      auto itgraph = range.first;
+      graphtype::iterator itgraph = range.first;
 
       std::multimap<double, MVertex const *> neighbors_to_trust;
       itgraph = range.first;
@@ -622,7 +632,8 @@ void frameFieldBackgroundMesh3D::initiate_crossfield()
   std::vector<GFace *> faces = gr->faces();
   // here, not using the gm2D since we are interested by the new 2D vertices,
   // not the old (now erased) ones... alternative would be to reset the 2DBGM...
-  for(auto it = faces.begin(); it != faces.end(); it++) { // for all GFace
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) { // for all GFace
     GFace *face = *it;
     frameFieldBackgroundMesh2D *bgm2d =
       dynamic_cast<frameFieldBackgroundMesh2D *>(BGMManager::get(face));
@@ -640,7 +651,7 @@ void frameFieldBackgroundMesh3D::initiate_crossfield()
         v = e->getVertex(iv);
 
         // if already done: continue
-        auto itfind = crossField.find(v);
+        TensorStorageType::iterator itfind = crossField.find(v);
         if(itfind != crossField.end()) continue;
 
         STensor3 cf;
@@ -662,7 +673,7 @@ void frameFieldBackgroundMesh3D::initiate_crossfield()
       // if not in volume: continue
       if(v->onWhat()->dim() <= 2) continue;
       // if already done: continue
-      auto itfind = crossField.find(v);
+      TensorStorageType::iterator itfind = crossField.find(v);
       if(itfind != crossField.end()) continue;
       MVertex *closer_on_bnd = get_nearest_neighbor_on_boundary(v);
       crossField[v] =
@@ -694,7 +705,7 @@ frameFieldBackgroundMesh3D::get_nearest_neighbor_on_boundary(MVertex *v,
   delete[] dists;
   annDeallocPt(q);
 
-  auto it = listOfBndVertices.begin();
+  std::set<MVertex *>::iterator it = listOfBndVertices.begin();
   std::advance(it, i);
   return (*it);
 #else
@@ -811,7 +822,7 @@ const MElement *backgroundMesh3D::getElement(unsigned int i) const
   GRegion *gr = dynamic_cast<GRegion *>(gf);
   if(!gr) {
     Msg::Error("Entity is not a region in background mesh");
-    return nullptr;
+    return 0;
   }
   return gr->getMeshElement(i);
 }
@@ -835,8 +846,8 @@ void frameFieldBackgroundMesh3D::build_neighbors(const int &max_recursion_level)
   std::multimap<int, MVertex const *> proximity;
   // int counter=0;
 
-  for(auto it_vertex = vert2elem.begin(); it_vertex != vert2elem.end();
-      it_vertex++) { // for all vertices
+  for(vert2elemtype::iterator it_vertex = vert2elem.begin();
+      it_vertex != vert2elem.end(); it_vertex++) { // for all vertices
     MVertex const *const current_vertex = it_vertex->first;
     visited.clear();
     visited_elements.clear();
@@ -848,7 +859,8 @@ void frameFieldBackgroundMesh3D::build_neighbors(const int &max_recursion_level)
     get_recursive_neighbors(start, visited, visited_elements, proximity,
                             max_recursion_level);
 
-    for(auto it1 = proximity.begin(); it1 != proximity.end(); it1++) {
+    for(std::multimap<int, MVertex const *>::iterator it1 = proximity.begin();
+        it1 != proximity.end(); it1++) {
       graph.insert(std::make_pair(current_vertex,
                                   std::make_pair(it1->first, it1->second)));
     }
@@ -887,16 +899,16 @@ void frameFieldBackgroundMesh3D::get_recursive_neighbors(
 
   std::set<MVertex const *> new_vertices;
 
-  for(auto it_start = start.begin(); it_start != start.end();
-      it_start++) { // for all initial vertices
+  for(std::set<MVertex const *>::iterator it_start = start.begin();
+      it_start != start.end(); it_start++) { // for all initial vertices
     MVertex const *current = *it_start;
     //      std::cout << "get_recursive_neighbors : on vertex " <<
     //      current->getNum()
     //      << " (" << current << ")" << std::endl;
-    auto itfind = vert2elem.find(current);
+    vert2elemtype::iterator itfind = vert2elem.find(current);
     if(itfind == vert2elem.end()) continue;
 
-    auto it_elem = itfind->second.begin();
+    std::set<MElement *>::iterator it_elem = itfind->second.begin();
 
     for(; it_elem != itfind->second.end();
         it_elem++) { // for all connected elements
@@ -931,7 +943,7 @@ double frameFieldBackgroundMesh3D::compare_to_neighbors(
 {
   for(int i = 0; i < 3; i++) mean_axis(i) = 0.;
 
-  auto it = itbegin;
+  std::multimap<double, MVertex const *>::iterator it = itbegin;
   SVector3 rotation_axis;
   double minimum_angle;
 
@@ -1001,11 +1013,11 @@ double frameFieldBackgroundMesh3D::compare_to_neighbors(
            M_PI * 4.; // APPROXIMATELY between 0 (not smooth) and 1 (smooth),
                       // (sometimes <0, always > 1).
 
-  auto itan = all_angle.begin();
-  auto itpond = ponderations_vec.begin();
+  std::vector<double>::iterator itan = all_angle.begin();
+  std::vector<double>::iterator itpond = ponderations_vec.begin();
 
-  for(auto ita = all_axis.begin(); ita != all_axis.end();
-      ita++, itan++, itpond++) {
+  for(std::vector<SVector3>::iterator ita = all_axis.begin();
+      ita != all_axis.end(); ita++, itan++, itpond++) {
     // mean_axis += ((*ita)*(*itan));
     mean_axis += ((*ita) * (*itan)) * (*itpond);
   }
@@ -1264,7 +1276,7 @@ void frameFieldBackgroundMesh3D::exportVectorialSmoothness(
     const MElement *e = getElement(ie);
     for(std::size_t iv = 0; iv < e->getNumVertices(); iv++) {
       const MVertex *v = e->getVertex(iv);
-      auto itfind = done.find(v);
+      std::set<const MVertex *>::iterator itfind = done.find(v);
       if(itfind != done.end()) continue;
       done.insert(v);
       STensor3 cf;
diff --git a/contrib/domhex/BackgroundMesh3D.h b/contrib/domhex/BackgroundMesh3D.h
index 8fbe6a64bf864a5671d268fb5156ea2eb0552e1f..d3b6a7f4f1094fb37ba703768662c3cc16346363 100644
--- a/contrib/domhex/BackgroundMesh3D.h
+++ b/contrib/domhex/BackgroundMesh3D.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/BackgroundMeshManager.cpp b/contrib/domhex/BackgroundMeshManager.cpp
index 485a74c9aff90b364f8ec339af97c4ef106a4b15..c59bae0dd911a4bc4ca6fa6c9c74e04669b54dd3 100644
--- a/contrib/domhex/BackgroundMeshManager.cpp
+++ b/contrib/domhex/BackgroundMeshManager.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -13,7 +13,7 @@
 
 std::map<GEntity *, BGMBase *> BGMManager::data =
   std::map<GEntity *, BGMBase *>();
-BGMBase *BGMManager::latest2Dbgm = nullptr;
+BGMBase *BGMManager::latest2Dbgm = NULL;
 bool BGMManager::use_cross_field = true;
 
 void BGMManager::set_use_cross_field(bool b)
@@ -26,8 +26,10 @@ void BGMManager::set_use_cross_field(bool b)
 
 BGMBase *BGMManager::get(GRegion *gf)
 {
-  auto itfind = data.find(gf);
-  if(itfind != data.end()) { return itfind->second; }
+  std::map<GEntity *, BGMBase *>::iterator itfind = data.find(gf);
+  if(itfind != data.end()) {
+    return itfind->second;
+  }
 
   BGMBase *bgm = use_cross_field ? new frameFieldBackgroundMesh3D(gf) :
                                    new backgroundMesh3D(gf);
@@ -38,7 +40,7 @@ BGMBase *BGMManager::get(GRegion *gf)
 
 BGMBase *BGMManager::get(GFace *gf)
 {
-  auto itfind = data.find(gf);
+  std::map<GEntity *, BGMBase *>::iterator itfind = data.find(gf);
   if(itfind != data.end()) {
     latest2Dbgm = itfind->second;
     return itfind->second;
diff --git a/contrib/domhex/BackgroundMeshManager.h b/contrib/domhex/BackgroundMeshManager.h
index 6dcabb59c4e7aed72d58d093c32c90a7a7636d92..eb95ae3c1e9f8f4de3b85243cdf4cf2b7fd079d7 100644
--- a/contrib/domhex/BackgroundMeshManager.h
+++ b/contrib/domhex/BackgroundMeshManager.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/CMakeLists.txt b/contrib/domhex/CMakeLists.txt
index 611213c0cae367690afc834bd3db0c0b0e423cf9..958c2c932d8fd85d0c3ecd8fe8e1bd69d84d101f 100644
--- a/contrib/domhex/CMakeLists.txt
+++ b/contrib/domhex/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+# Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 #
 # See the LICENSE.txt file for license information. Please report all
 # issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/ThinLayer.cpp b/contrib/domhex/ThinLayer.cpp
index fd85ecfd4b1be23e4483e7fd5f3e2a970a3f8022..f578f44d1609175ede868847cfe1005b6a7c3336 100644
--- a/contrib/domhex/ThinLayer.cpp
+++ b/contrib/domhex/ThinLayer.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -66,7 +66,9 @@ void ThinLayer::perform()
 void ThinLayer::checkOppositeTriangles()
 {
   // all endTriangle will be set to active or not
-  for(auto it1 = VertexToCorresp.begin(); it1 != VertexToCorresp.end(); it1++) {
+  for(std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it1 =
+        VertexToCorresp.begin();
+      it1 != VertexToCorresp.end(); it1++) {
     std::vector<CorrespVertices *> vecCorr = (*it1).second;
     for(unsigned int i = 0; i < vecCorr.size(); i++) {
       CorrespVertices *currentCorr = vecCorr[i];
@@ -74,9 +76,12 @@ void ThinLayer::checkOppositeTriangles()
       MVertex *endP0 = currentEndTri.v[0];
       MVertex *endP1 = currentEndTri.v[1];
       MVertex *endP2 = currentEndTri.v[2];
-      auto it2 = VertexToCorresp.find(endP0);
-      auto it3 = VertexToCorresp.find(endP1);
-      auto it4 = VertexToCorresp.find(endP2);
+      std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it2 =
+        VertexToCorresp.find(endP0);
+      std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it3 =
+        VertexToCorresp.find(endP1);
+      std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it4 =
+        VertexToCorresp.find(endP2);
       (*it1).second[i]->setEndTriangleActive(false);
       if(it2 != VertexToCorresp.end()) {
         if(it3 != VertexToCorresp.end()) {
@@ -97,7 +102,9 @@ void ThinLayer::checkOppositeTriangles()
 
 void ThinLayer::fillvecOfThinSheets()
 {
-  for(auto it1 = VertexToCorresp.begin(); it1 != VertexToCorresp.end(); it1++) {
+  for(std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it1 =
+        VertexToCorresp.begin();
+      it1 != VertexToCorresp.end(); it1++) {
     std::vector<CorrespVertices *> vecCorr = (*it1).second;
     for(unsigned int i = 0; i < vecCorr.size(); i++) {
       CorrespVertices *currentCorr = vecCorr[i];
@@ -110,7 +117,8 @@ void ThinLayer::fillvecOfThinSheets()
         (*it1).second[i]->setTagMaster(-1);
         faceXtet faceEndSlave = (*it1).second[i]->getEndTriangle();
         for(unsigned int j = 0; j < 3; j++) {
-          auto it2 = VertexToCorresp.find(faceEndSlave.v[j]);
+          std::map<MVertex *, std::vector<CorrespVertices *> >::iterator it2 =
+            VertexToCorresp.find(faceEndSlave.v[j]);
           if(it2 != VertexToCorresp.end()) {
             if(faceEndSlave.v[j]->onWhat()->dim() == 2) {
               (*it2).second[0]->setTagMaster(
@@ -129,7 +137,8 @@ void ThinLayer::fillvecOfThinSheets()
             for(std::size_t k = 0; k < surroundingTet[j]->getNumVertices();
                 k++) {
               MVertex *ToInsertTmp = surroundingTet[j]->getVertex(k);
-              auto it2 = VertexToCorresp.find(ToInsertTmp);
+              std::map<MVertex *, std::vector<CorrespVertices *> >::iterator
+                it2 = VertexToCorresp.find(ToInsertTmp);
               if(ToInsertTmp->onWhat()->tag() == VToDo->onWhat()->tag()) {
                 // TODO: OR that onwhat -> dim <, for edges
                 if(it2 != VertexToCorresp.end()) {
@@ -142,7 +151,9 @@ void ThinLayer::fillvecOfThinSheets()
                     (*it2).second[0]->setTagMaster(-1);
                     faceXtet faceEndSlave2 = (*it2).second[0]->getEndTriangle();
                     for(unsigned int j = 0; j < 3; j++) {
-                      auto it3 = VertexToCorresp.find(faceEndSlave2.v[j]);
+                      std::map<MVertex *,
+                               std::vector<CorrespVertices *> >::iterator it3 =
+                        VertexToCorresp.find(faceEndSlave2.v[j]);
                       if(it3 != VertexToCorresp.end()) {
                         if(faceEndSlave2.v[j]->onWhat()->dim() == 2) {
                           (*it3).second[0]->setTagMaster(
@@ -171,12 +182,12 @@ std::map<MVertex *, double> ThinLayer::computeAllDistToOppSide()
   // std::vector<MElement*> crackElements;
   std::set<MVertex *> BoundaryVertices;
 
-  for(auto itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
+  for(GModel::riter itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
     GRegion *rTmp = (*itr);
     for(unsigned int i = 0; i < rTmp->tetrahedra.size(); i++) {
       MTet4 *tet4Tmp = TetToTet4[rTmp->tetrahedra[i]];
       for(unsigned int j = 0; j < 4; j++) {
-        if(tet4Tmp->getNeigh(j) == nullptr) {
+        if(tet4Tmp->getNeigh(j) == 0) {
           // find the 4th point,and fill the two vector of the boundary triangle
           faceXtet fxtTmp(tet4Tmp, j);
           for(int k = 0; k < 3; k++) {
@@ -192,7 +203,8 @@ std::map<MVertex *, double> ThinLayer::computeAllDistToOppSide()
       }
     }
   }
-  for(auto it = BoundaryVertices.begin(); it != BoundaryVertices.end(); it++) {
+  for(std::set<MVertex *>::iterator it = BoundaryVertices.begin();
+      it != BoundaryVertices.end(); it++) {
     MVertex *toCompute = (*it);
     double resultTmp = computeDistToOppSide(toCompute);
     AllDistToOppSide[toCompute] = resultTmp;
@@ -213,14 +225,14 @@ double ThinLayer::computeDistToOppSide(MVertex *v)
   MTet4 *PastTet = FirstTet;
   SPoint3 CurrentPos = SPoint3(v->x(), v->y(), v->z());
   SPoint3 LastPos = CurrentPos;
-  int *CurrentTri = nullptr;
+  int *CurrentTri = 0;
   CorrespVertices CVTemp;
   CVTemp.setStartPoint(v);
   CVTemp.setStartNormal(InteriorNormal);
   FindNewPoint((&CurrentPos), CurrentTri, CurrentTet, InteriorNormal);
   faceXtet fxtCV(CurrentTet, (*CurrentTri));
   //	while(CurrentTet->getNeigh((*CurrentTri)) != 0){
-  while(CurrentTet != nullptr) {
+  while(CurrentTet != 0) {
     PastTet = CurrentTet;
     faceXtet fxtCVtmp(PastTet, (*CurrentTri));
     FindNewPoint((&CurrentPos), CurrentTri, CurrentTet, InteriorNormal);
@@ -267,7 +279,7 @@ SVector3 ThinLayer::computeInteriorNormal(MVertex *v)
   for(unsigned int i = 0; i < currentVecTet.size(); i++) {
     MTet4 *tet4Tmp = TetToTet4[currentVecTet[i]];
     for(int j = 0; j < 4; j++) {
-      if(tet4Tmp->getNeigh(j) == nullptr) {
+      if(tet4Tmp->getNeigh(j) == 0) {
         // find the 4th point,and fill the two vector of the boundary triangle
         faceXtet fxtTmp(tet4Tmp, j);
         for(int k = 0; k < 4; k++) {
@@ -376,7 +388,7 @@ SVector3 ThinLayer::computeInteriorNormal(MVertex *v)
 
 MTet4 *ThinLayer::getTetFromPoint(MVertex *v, const SVector3 &InteriorNormal)
 {
-  MTet4 *TetToGet = nullptr;
+  MTet4 *TetToGet = 0;
   std::vector<MTetrahedron *> currentVecTet = VertexToTets[v];
   for(unsigned int i = 0; i < currentVecTet.size(); i++) {
     std::vector<SVector3> vecDir;
@@ -407,7 +419,9 @@ MTet4 *ThinLayer::getTetFromPoint(MVertex *v, const SVector3 &InteriorNormal)
       ThinLayer::IsPositivOrientation(vecDir[2], vecDir[0], InteriorNormal);
     if(isPositiv1) {
       if(isPositiv2) {
-        if(isPositiv3) { TetToGet = TetToTet4[currentVecTet[i]]; }
+        if(isPositiv3) {
+          TetToGet = TetToTet4[currentVecTet[i]];
+        }
       }
     }
   }
@@ -422,7 +436,9 @@ bool ThinLayer::IsPositivOrientation(const SVector3 &a, const SVector3 &b,
                   a.x() * b.y() - a.y() * b.x());
   double ProdScal =
     ProdVec.x() * c.x() + ProdVec.y() * c.y() + ProdVec.z() * c.z();
-  if(ProdScal >= 0.0) { result = true; }
+  if(ProdScal >= 0.0) {
+    result = true;
+  }
   return result;
 }
 
@@ -531,7 +547,7 @@ void ThinLayer::FindNewPoint(SPoint3 *CurrentPoint, int *CurrentTri,
 void ThinLayer::fillVertexToTets()
 {
   GModel *m = GModel::current();
-  for(auto itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
+  for(GModel::riter itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
     GRegion *rTmp = (*itr);
     for(unsigned int i = 0; i < rTmp->tetrahedra.size(); i++) {
       MTetrahedron *elem = rTmp->tetrahedra[i];
@@ -545,7 +561,7 @@ void ThinLayer::fillVertexToTets()
       }
     }
   }
-  for(auto itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
+  for(GModel::riter itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
     GRegion *rTmp = (*itr);
     for(unsigned int i = 0; i < rTmp->tetrahedra.size(); i++) {
       MTetrahedron *elem = rTmp->tetrahedra[i];
@@ -561,7 +577,7 @@ void ThinLayer::fillTetToTet4()
   GModel *m = GModel::current();
   std::vector<MTet4 *> vecAllTet4;
   vecAllTet4.clear();
-  for(auto itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
+  for(GModel::riter itr = m->firstRegion(); itr != m->lastRegion(); itr++) {
     GRegion *rTmp = (*itr);
     for(unsigned int i = 0; i < rTmp->tetrahedra.size(); i++) {
       MTetrahedron *elem = rTmp->tetrahedra[i];
diff --git a/contrib/domhex/ThinLayer.h b/contrib/domhex/ThinLayer.h
index 57bc60d363fe97517c684c4c7fd22d9b1e38f04f..487e6ef33b52ef4bc3b6a5ed6f71ef108699be32 100644
--- a/contrib/domhex/ThinLayer.h
+++ b/contrib/domhex/ThinLayer.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -18,7 +18,7 @@ struct faceXtet {
   MVertex *v[3], *unsorted[3];
   MTet4 *t1;
   int i1;
-  faceXtet(MTet4 *_t = nullptr, int iFac = 0) : t1(_t), i1(iFac)
+  faceXtet(MTet4 *_t = 0, int iFac = 0) : t1(_t), i1(iFac)
   {
     MVertex *v0 = t1->tet()->getVertex(faces[iFac][0]);
     MVertex *v1 = t1->tet()->getVertex(faces[iFac][1]);
@@ -30,9 +30,8 @@ struct faceXtet {
 
     v[0] = std::min(std::min(v0, v1), v2);
     v[2] = std::max(std::max(v0, v1), v2);
-    v[1] = (v0 != v[0] && v0 != v[2]) ? v0 :
-           (v1 != v[0] && v1 != v[2]) ? v1 :
-                                        v2;
+    v[1] =
+      (v0 != v[0] && v0 != v[2]) ? v0 : (v1 != v[0] && v1 != v[2]) ? v1 : v2;
     //
     //    std::sort(v, v + 3);
   }
diff --git a/contrib/domhex/cross3D.h b/contrib/domhex/cross3D.h
index 803b9ffa89daa97f5d467f20d9bea7b34eb158a1..a8efcd4459098bdad353e18320606fc6fe95ece9 100644
--- a/contrib/domhex/cross3D.h
+++ b/contrib/domhex/cross3D.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -552,12 +552,16 @@ double computeSetSmoothness(std::vector<cross3D> S)
       }
     }
     // on a trouve le quat approprie
-    for(unsigned int j = 0; j < 4; j++) { qmean[j] += qTmp[j]; }
+    for(unsigned int j = 0; j < 4; j++) {
+      qmean[j] += qTmp[j];
+    }
   }
   double normQt = sqrt(qmean[0] * qmean[0] + qmean[1] * qmean[1] +
                        qmean[2] * qmean[2] + qmean[3] * qmean[3]);
   if(normQt != 0.0) {
-    for(unsigned int j = 0; j < 4; j++) { qmean[j] = qmean[j] / normQt; }
+    for(unsigned int j = 0; j < 4; j++) {
+      qmean[j] = qmean[j] / normQt;
+    }
   }
   for(it1 = S.begin(); it1 != S.end(); it1++) {
     // pour chaque element du set
@@ -568,7 +572,9 @@ double computeSetSmoothness(std::vector<cross3D> S)
       // on trouve la cross appropriee
       Qtn qTmpi = cTmp.get(i).correspQuat();
       double prodVeci = 0.0;
-      for(unsigned int j = 0; j < 4; j++) { prodVeci += qmean[j] * qTmpi.v[j]; }
+      for(unsigned int j = 0; j < 4; j++) {
+        prodVeci += qmean[j] * qTmpi.v[j];
+      }
       if(prodVeci >= 0.0) {
         if(prodVeci > prodVecMin) {
           prodVecMin = prodVeci;
@@ -585,7 +591,9 @@ double computeSetSmoothness(std::vector<cross3D> S)
       }
     }
     // on a trouve le quat approprie
-    if(prodVecMin < result) { result = prodVecMin; }
+    if(prodVecMin < result) {
+      result = prodVecMin;
+    }
   }
   return result;
 }
diff --git a/contrib/domhex/directions3D.cpp b/contrib/domhex/directions3D.cpp
index 35d403c4ea772010d9cb358d56f5457b9377a36e..df2de3a073579c408ed63e0eee73d17523627f2c 100644
--- a/contrib/domhex/directions3D.cpp
+++ b/contrib/domhex/directions3D.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -116,7 +116,9 @@ STensor3 Frame_field::search(double x, double y, double z)
   ANNidxArray indices;
   ANNdistArray distances;
 
-  if(field.size() <= 1) { return STensor3(1.0); }
+  if(field.size() <= 1) {
+    return STensor3(1.0);
+  }
 
   query = annAllocPt(3);
   query[0] = x;
@@ -139,7 +141,9 @@ STensor3 Frame_field::search(double x, double y, double z)
 #endif
 
   if(fabs(sqrt(distance2) - sqrt(distance1)) < e2) {
-    if(labels[index2] < labels[index1]) { return field[index2].second; }
+    if(labels[index2] < labels[index1]) {
+      return field[index2].second;
+    }
     else {
       return field[index1].second;
     }
@@ -174,7 +178,9 @@ STensor3 Frame_field::combine(double x, double y, double z)
     val2 = fabs(dot(vec, vec2));
     val3 = fabs(dot(vec, vec3));
 
-    if(val1 <= val2 && val1 <= val3) { other = vec1; }
+    if(val1 <= val2 && val1 <= val3) {
+      other = vec1;
+    }
     else if(val2 <= val1 && val2 <= val3) {
       other = vec2;
     }
@@ -340,7 +346,8 @@ int Frame_field::build_vertex_to_vertices(GEntity *gr, int onWhat,
       MVertex *pVertex = pElem->getVertex(j);
       if(onWhat > 0 && pVertex->onWhat()->dim() != onWhat) continue;
 
-      auto it = vertex_to_vertices.find(pVertex);
+      std::map<MVertex *, std::set<MVertex *> >::iterator it =
+        vertex_to_vertices.find(pVertex);
       if(it != vertex_to_vertices.end()) {
         for(unsigned int k = 1; k < n; k++)
           it->second.insert(pElem->getVertex((j + k) % n));
@@ -366,7 +373,8 @@ int Frame_field::build_vertex_to_elements(GEntity *gr, bool initialize)
     unsigned int n = pElem->getNumVertices();
     for(unsigned int j = 0; j < n; j++) {
       MVertex *pVertex = pElem->getVertex(j);
-      auto it = vertex_to_elements.find(pVertex);
+      std::map<MVertex *, std::set<MElement *> >::iterator it =
+        vertex_to_elements.find(pVertex);
       if(it != vertex_to_elements.end())
         it->second.insert(pElem);
       else {
@@ -392,7 +400,8 @@ void Frame_field::build_listVertices(GEntity *gr, int dim, bool initialize)
   }
   if(initialize) listVertices.clear();
 
-  for(auto it = list.begin(); it != list.end(); it++) {
+  for(std::set<MVertex *>::const_iterator it = list.begin(); it != list.end();
+      it++) {
     listVertices.push_back(*it);
   }
 }
@@ -421,7 +430,7 @@ void Frame_field::deleteAnnData()
 #if defined(HAVE_ANN)
   if(annTree && annTree->thePoints()) delete annTree->thePoints();
   if(annTree) delete annTree;
-  annTree = nullptr;
+  annTree = NULL;
 #endif
 }
 
@@ -455,7 +464,8 @@ void Frame_field::initFace(GFace *gf)
       it != vertex_to_elements.end(); it++) {
     std::set<MElement *> elements = it->second;
     SVector3 Area = SVector3(0, 0, 0);
-    for(auto iter = elements.begin(); iter != elements.end(); iter++) {
+    for(std::set<MElement *>::const_iterator iter = elements.begin();
+        iter != elements.end(); iter++) {
       MElement *pElem = *iter;
       int n = pElem->getNumVertices();
       int i;
@@ -474,7 +484,7 @@ void Frame_field::initFace(GFace *gf)
     }
     Area.normalize(); // average normal over neighbour face elements
     STensor3 m = convert(cross3D(Area));
-    auto iter = crossField.find(it->first);
+    std::map<MVertex *, STensor3>::iterator iter = crossField.find(it->first);
     if(iter == crossField.end())
       crossField.insert(std::pair<MVertex *, STensor3>(it->first, m));
     else
@@ -487,7 +497,8 @@ void Frame_field::initFace(GFace *gf)
   // of gf
   std::vector<GEdge *> const &edges = gf->edges();
   vertex_to_elements.clear();
-  for(auto it = edges.begin(); it != edges.end(); it++) {
+  for(std::vector<GEdge *>::const_iterator it = edges.begin();
+      it != edges.end(); it++) {
     build_vertex_to_elements(*it, false);
   }
 
@@ -506,7 +517,7 @@ void Frame_field::initFace(GFace *gf)
     SVector3 tangent = edg1.scaledTangent() + edg2.scaledTangent();
     tangent.normalize();
 
-    auto iter = crossField.find(pVertex);
+    std::map<MVertex *, STensor3>::iterator iter = crossField.find(pVertex);
     if(iter == crossField.end()) {
       std::cout << "This should not happen: cross not found 1" << std::endl;
       exit(1);
@@ -538,7 +549,7 @@ void Frame_field::initFace(GFace *gf)
     MVertex *pVertex0 = it->first;
     if(pVertex0->onWhat()->dim() != 2) continue;
 
-    auto iter = crossField.find(pVertex0);
+    std::map<MVertex *, STensor3>::iterator iter = crossField.find(pVertex0);
     cross3D y;
     if(iter == crossField.end()) {
       std::cout << "This should not happen: cross not found 2" << std::endl;
@@ -628,7 +639,8 @@ double Frame_field::findBarycenter(
   SVector3 T = SVector3(0.), dT;
   double temp = 0.;
   energy = 0;
-  for(auto it = list.begin(); it != list.end(); ++it) {
+  for(std::set<MVertex *>::const_iterator it = list.begin(); it != list.end();
+      ++it) {
     MVertex *pVertex = *it;
     if(pVertex->getNum() == pVertex0->getNum())
       std::cout << "This should not happen!" << std::endl;
@@ -701,18 +713,26 @@ void Frame_field::buildSmoothness()
       MVertex *v0 = entities[i]->mesh_vertices[j];
       V1.insert(v0);
       std::vector<MVertex *> v0vec = Neighbours[v0];
-      for(unsigned int k = 0; k < v0vec.size(); k++) { V1.insert(v0vec[k]); }
-      for(auto itSet = V1.begin(); itSet != V1.end(); itSet++) {
+      for(unsigned int k = 0; k < v0vec.size(); k++) {
+        V1.insert(v0vec[k]);
+      }
+      for(std::set<MVertex *>::iterator itSet = V1.begin(); itSet != V1.end();
+          itSet++) {
         MVertex *vTmp = (*itSet);
         V2.insert(vTmp);
         v0vec = Neighbours[vTmp];
-        for(unsigned int k = 0; k < v0vec.size(); k++) { V2.insert(v0vec[k]); }
+        for(unsigned int k = 0; k < v0vec.size(); k++) {
+          V2.insert(v0vec[k]);
+        }
       }
-      for(auto itSet = V2.begin(); itSet != V2.end(); itSet++) {
+      for(std::set<MVertex *>::iterator itSet = V2.begin(); itSet != V2.end();
+          itSet++) {
         MVertex *vTmp = (*itSet);
         V3.insert(vTmp);
         v0vec = Neighbours[vTmp];
-        for(unsigned int k = 0; k < v0vec.size(); k++) { V3.insert(v0vec[k]); }
+        for(unsigned int k = 0; k < v0vec.size(); k++) {
+          V3.insert(v0vec[k]);
+        }
       }
       // we have all three set here, time to compute the smoothnesses for each
       // one
@@ -722,19 +742,22 @@ void Frame_field::buildSmoothness()
       double S1 = 0.0;
       double S2 = 0.0;
       double S3 = 0.0;
-      for(auto itSet = V1.begin(); itSet != V1.end(); itSet++) {
+      for(std::set<MVertex *>::iterator itSet = V1.begin(); itSet != V1.end();
+          itSet++) {
         MVertex *vTmp = (*itSet);
         STensor3 tTmp = crossField[vTmp];
         cross3D cTmp = cross3D(tTmp);
         C1.push_back(cTmp);
       }
-      for(auto itSet = V2.begin(); itSet != V2.end(); itSet++) {
+      for(std::set<MVertex *>::iterator itSet = V2.begin(); itSet != V2.end();
+          itSet++) {
         MVertex *vTmp = (*itSet);
         STensor3 tTmp = crossField[vTmp];
         cross3D cTmp = cross3D(tTmp);
         C2.push_back(cTmp);
       }
-      for(auto itSet = V3.begin(); itSet != V3.end(); itSet++) {
+      for(std::set<MVertex *>::iterator itSet = V3.begin(); itSet != V3.end();
+          itSet++) {
         MVertex *vTmp = (*itSet);
         STensor3 tTmp = crossField[vTmp];
         cross3D cTmp = cross3D(tTmp);
@@ -785,7 +808,7 @@ double Frame_field::smooth()
       iter != vertex_to_vertices.end(); ++iter) {
     // MVertex* pVertex0 = iter->first;
     SVector3 T(0, 0, 0);
-    auto itA = crossField.find(iter->first);
+    std::map<MVertex *, STensor3>::iterator itA = crossField.find(iter->first);
     if(itA == crossField.end()) {
       std::cout << "This should not happen" << std::endl;
       exit(1);
@@ -851,12 +874,13 @@ void Frame_field::recur_connect_vert(FILE *fi, int count, MVertex *v,
 
   count++;
 
-  for(auto it = v2v.lower_bound(v); it != v2v.upper_bound(v); ++it) {
+  for(std::multimap<MVertex *, MVertex *>::iterator it = v2v.lower_bound(v);
+      it != v2v.upper_bound(v); ++it) {
     MVertex *nextV = it->second;
     if(touched.find(nextV) == touched.end()) {
       // compute dot product (N0,R0,A0) dot (Ni,Ri,Ai)^T
       // where N,R,A are the 3 directions
-      auto iter = crossField.find(nextV);
+      std::map<MVertex *, STensor3>::iterator iter = crossField.find(nextV);
       STensor3 nextCross = iter->second;
       STensor3 nextCrossT = nextCross.transpose();
       STensor3 prod = cross.operator*=(nextCrossT);
@@ -888,7 +912,9 @@ void Frame_field::recur_connect_vert(FILE *fi, int count, MVertex *v,
       // create new cross
       fullMatrix<double> newmat(3, 3);
       for(int i = 0; i < 3; i++) {
-        for(int j = 0; j < 3; j++) { newmat(i, j) = nextCross(Id(i), j); }
+        for(int j = 0; j < 3; j++) {
+          newmat(i, j) = nextCross(Id(i), j);
+        }
       }
 
       STensor3 newcross(0.0);
@@ -945,7 +971,8 @@ void Frame_field::continuousCrossField(GRegion *gr, GFace *gf)
       iter != vertex_to_vertices.end(); ++iter) {
     MVertex *v = iter->first;
     std::set<MVertex *> mySet = iter->second;
-    for(auto it = mySet.begin(); it != mySet.end(); ++it) {
+    for(std::set<MVertex *>::iterator it = mySet.begin(); it != mySet.end();
+        ++it) {
       v2v.insert(std::make_pair(v, *it));
     }
   }
@@ -953,7 +980,7 @@ void Frame_field::continuousCrossField(GRegion *gr, GFace *gf)
   // recursive loop
   MVertex *beginV = gf->getMeshVertex(0);
   std::set<MVertex *> touched;
-  auto iter = crossField.find(beginV);
+  std::map<MVertex *, STensor3>::iterator iter = crossField.find(beginV);
   STensor3 bCross = iter->second;
 
   FILE *fi = Fopen("cross_recur.pos", "w");
@@ -1019,7 +1046,8 @@ void Frame_field::save_dist(const std::string &filename)
   std::ofstream file(filename.c_str());
   file << "View \"Distance\" {\n";
 
-  for(auto it = crossDist.begin(); it != crossDist.end(); it++) {
+  for(std::map<MEdge, double, MEdgeLessThan>::iterator it = crossDist.begin();
+      it != crossDist.end(); it++) {
     MVertex *pVerta = it->first.getVertex(0);
     MVertex *pVertb = it->first.getVertex(1);
     double value = it->second * 180. / M_PI;
@@ -1090,7 +1118,8 @@ void Frame_field::save_energy(GRegion *gr, const std::string &filename)
         matvec(inv, gsf[nod1], grd1);
         matvec(inv, gsf[nod2], grd2);
         SVector3 esf = sf[nod1] * SVector3(grd2) - sf[nod2] * SVector3(grd1);
-        auto it = crossDist.find(pTet->getEdge(k));
+        std::map<MEdge, double, MEdgeLessThan>::iterator it =
+          crossDist.find(pTet->getEdge(k));
         sum += it->second * esf;
         // sum += (pTet->getVertex(nod2)->z() - pTet->getVertex(nod1)->z()) *
         // esf;
@@ -1225,7 +1254,9 @@ void Size_field::solve(GRegion *gr)
 
   for(it = interior.begin(); it != interior.end(); it++) {
     it2 = boundary.find(*it);
-    if(it2 == boundary.end()) { assembler.numberVertex(*it, 0, 1); }
+    if(it2 == boundary.end()) {
+      assembler.numberVertex(*it, 0, 1);
+    }
   }
 
   for(i = 0; i < gr->tetrahedra.size(); i++) {
@@ -1235,7 +1266,7 @@ void Size_field::solve(GRegion *gr)
   count2 = 0;
   volume = 0.0;
   simpleFunction<double> ONE(1.0);
-  laplaceTerm term(nullptr, 1, &ONE);
+  laplaceTerm term(0, 1, &ONE);
   for(i = 0; i < gr->tetrahedra.size(); i++) {
     SElement se(gr->tetrahedra[i]);
     term.addToMatrix(assembler, &se);
@@ -1245,7 +1276,9 @@ void Size_field::solve(GRegion *gr)
   // printf("number of tetrahedra = %d\n",count2);
   // printf("volume = %f\n",volume);
 
-  if(assembler.sizeOfR()) { system->systemSolve(); }
+  if(assembler.sizeOfR()) {
+    system->systemSolve();
+  }
 
   for(it = interior.begin(); it != interior.end(); it++) {
     assembler.getDofValue(*it, 0, 1, val);
@@ -1272,7 +1305,7 @@ double Size_field::search(double x, double y, double z)
 
   element = (MElement *)octree->find(x, y, z, 3, true);
 
-  if(element != nullptr) {
+  if(element != NULL) {
     temp1[0] = x;
     temp1[1] = y;
     temp1[2] = z;
@@ -1321,9 +1354,13 @@ void Size_field::print_field(GRegion *gr)
     // y = (it->first)->y();
     // z = (it->first)->z();
 
-    if(it->second > max) { max = it->second; }
+    if(it->second > max) {
+      max = it->second;
+    }
 
-    if(it->second < min) { min = it->second; }
+    if(it->second < min) {
+      min = it->second;
+    }
 
     // printf("x = %f, y = %f, z = %f, mesh size = %f\n",x,y,z,it->second);
   }
@@ -1512,7 +1549,7 @@ bool Nearest_point::search(double x, double y, double z, SVector3 &vec)
   delete[] indices;
   delete[] distances;
 
-  if(vicinity[index] != nullptr) {
+  if(vicinity[index] != NULL) {
     found = closest(vicinity[index], SPoint3(x, y, z));
   }
   else {
@@ -1643,7 +1680,9 @@ double Nearest_point::clamp(double x, double min, double max)
 
   val = x;
 
-  if(val < min) { val = min; }
+  if(val < min) {
+    val = min;
+  }
   else if(val > max) {
     val = max;
   }
diff --git a/contrib/domhex/directions3D.h b/contrib/domhex/directions3D.h
index 7ffdc4eac2f9960306248a0b4324cb95a4660236..3e692e17412ca5157be7b56560e10c792f2d732b 100644
--- a/contrib/domhex/directions3D.h
+++ b/contrib/domhex/directions3D.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/meshGFaceQuadrilateralize.cpp b/contrib/domhex/meshGFaceQuadrilateralize.cpp
index 809ff8dfdf3d94d5287f2166119ca362c38fb32e..ddd0928283f2e736b310f74633ac06d2b73b6698 100644
--- a/contrib/domhex/meshGFaceQuadrilateralize.cpp
+++ b/contrib/domhex/meshGFaceQuadrilateralize.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -352,7 +352,9 @@ bool edgeFront::formQuad(BDS_Edge *e, BDS_Edge *left, BDS_Edge *right)
     BDS_Point *p = toUpdate[i];
     for(std::list<BDS_Edge *>::iterator itp = p->edges.begin();
         itp != p->edges.end(); ++itp) {
-      if(inFront(*itp)) { updateStatus(*itp); }
+      if(inFront(*itp)) {
+        updateStatus(*itp);
+      }
     }
   }
   return true;
diff --git a/contrib/domhex/meshGFaceQuadrilateralize.h b/contrib/domhex/meshGFaceQuadrilateralize.h
index 2d831af9da2892e3b24149a31f1a62df6dc30ee1..c00642d5dd4158378e4c651bf4f33a6af16e6643 100644
--- a/contrib/domhex/meshGFaceQuadrilateralize.h
+++ b/contrib/domhex/meshGFaceQuadrilateralize.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/pointInsertion.cpp b/contrib/domhex/pointInsertion.cpp
index 64b92cc86f4ef2ab4070973f97c33d408fd20a22..3103eb028b5455a5bb3bd8c4482ba7b5873d6414 100644
--- a/contrib/domhex/pointInsertion.cpp
+++ b/contrib/domhex/pointInsertion.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -26,195 +26,6 @@
 
 bool old_algo_hexa() { return true; }
 
-template <typename T>
-void print_nodal_info(const std::string &filename,
-                      std::map<MVertex *, T> const &map)
-{
-  std::ofstream out(filename.c_str());
-
-  out << "View \"\"{" << std::endl;
-  for(auto it = map.begin(); it != map.end(); it++) {
-    MVertex *v = it->first;
-    out << "SP( " << v->x() << "," << v->y() << "," << v->z() << "){"
-        << it->second << "};" << std::endl;
-  }
-  out << "};" << std::endl;
-
-  out.close();
-}
-
-bool shoot(const SPoint2 &start, const SPoint2 &dir, const double &h,
-           SPoint2 &res)
-{
-  const int RK = 1;
-
-  if(RK == 1) {
-    res = start + (dir * h);
-    //    std::cout << "(" << start[0] << "," <<start[1] << ") -> (" << res[0]
-    //    << ","
-    //    <<res[1] << ") " << std::endl;
-    return true;
-  }
-
-  return false;
-}
-
-bool computeFourNeighbors(frameFieldBackgroundMesh2D *bgm,
-                          MVertex *v_center, // the vertex for which we want to
-                                             // generate 4 neighbors (real
-                                             // vertex (xyz), not parametric!)
-                          SPoint2 &midpoint,
-                          bool goNonLinear, // do we compute the position in
-                                            // the real surface which is
-                                            // nonlinear
-                          SPoint2 newP[4][NUMDIR], // look into other directions
-                          SMetric3 &metricField) // the mesh metric
-{
-  // we assume that v is on surface gf, and backgroundMesh2D has been created
-  // based on gf
-
-  // get BGM and GFace
-  GFace *gf = dynamic_cast<GFace *>(bgm->getBackgroundGEntity());
-
-  // get the parametric coordinates of the point on the surface
-  reparamMeshVertexOnFace(v_center, gf, midpoint);
-
-  // get RK info on midpoint (infos in two directions...)
-  RK_form infos;
-  bgm->compute_RK_infos(midpoint[0], midpoint[1], v_center->x(), v_center->y(),
-                        v_center->z(), infos);
-  metricField = infos.metricField;
-
-  // shoot in four directions
-  SPoint2 param_vec;
-  double h;
-  for(int i = 0; i < 4; i++) { // in four directions
-    switch(i) {
-    case 0:
-      param_vec = infos.paramt1;
-      h = infos.paramh.first;
-      break;
-    case 1:
-      param_vec = infos.paramt2;
-      h = infos.paramh.second;
-      break;
-    case 2:
-      param_vec = infos.paramt1 * -1.;
-      h = infos.paramh.first;
-      break;
-    case 3:
-      param_vec = infos.paramt2 * -1.;
-      h = infos.paramh.second;
-      break;
-    }
-    shoot(midpoint, param_vec, h, newP[i][0]);
-    //    std::cout << "(" << midpoint[0] << "," <<midpoint[1] << ") -> (" <<
-    //    newP[i][0][0] << "," << newP[i][0][1] << ") " << std::endl;
-  }
-
-  // the following comes from surfaceFiller.cpp...
-  const double EPS = 1.e-7;
-  for(int j = 0; j < 2; j++) {
-    for(int i = 0; i < 4; i++) {
-      newP[i][0][j] += (EPS * (double)rand() / RAND_MAX);
-    }
-  }
-
-  // We could stop here. Yet, if the metric varies a lot, we can solve a
-  // nonlinear problem in order to find a better approximation in the real
-  // surface
-  if(1 && goNonLinear) {
-    double L = infos.localsize;
-    double newPoint[4][2];
-    for(int j = 0; j < 2; j++) {
-      for(int i = 0; i < 4; i++) { newPoint[i][j] = newP[i][0][j]; }
-    }
-    double ERR[4];
-    for(int i = 0; i < 4; i++) { //
-      //      if (newPoint[i][0] < rangeU.low())newPoint[i][0] = rangeU.low();
-      //      if (newPoint[i][0] > rangeU.high())newPoint[i][0] = rangeU.high();
-      //      if (newPoint[i][1] < rangeV.low())newPoint[i][1] = rangeV.low();
-      //      if (newPoint[i][1] > rangeV.high())newPoint[i][1] = rangeV.high();
-      GPoint pp = gf->point(newP[i][0]);
-      double D = sqrt((pp.x() - v_center->x()) * (pp.x() - v_center->x()) +
-                      (pp.y() - v_center->y()) * (pp.y() - v_center->y()) +
-                      (pp.z() - v_center->z()) * (pp.z() - v_center->z()));
-      ERR[i] = 100 * fabs(D - L) / (D + L);
-      //      printf("L = %12.5E D = %12.5E ERR =
-      //      %12.5E\n",L,D,100*fabs(D-L)/(D+L));
-    }
-
-    surfaceFunctorGFace ss(gf);
-    SVector3 dirs[4] = {infos.t1 * (-1.0), infos.t2 * (-1.0), infos.t1 * (1.0),
-                        infos.t2 * (1.0)};
-    for(int i = 0; i < 4; i++) {
-      if(ERR[i] > 12) {
-        double uvt[3] = {newPoint[i][0], newPoint[i][1], 0.0};
-        // printf("Intersecting with circle N = %g %g %g dir = %g %g %g R
-        //	  = %g p = %g %g
-        //	  %g\n",n.x(),n.y(),n.z(),dirs[i].x(),dirs[i].y(),dirs[i].z(),L,
-        //        v_center->x(),v_center->y(),v_center->z());
-        curveFunctorCircle cf(
-          dirs[i], infos.normal,
-          SVector3(v_center->x(), v_center->y(), v_center->z()), L);
-        if(intersectCurveSurface(cf, ss, uvt, infos.paramh.first * 1.e-3)) {
-          GPoint pp = gf->point(SPoint2(uvt[0], uvt[1]));
-          double D = sqrt((pp.x() - v_center->x()) * (pp.x() - v_center->x()) +
-                          (pp.y() - v_center->y()) * (pp.y() - v_center->y()) +
-                          (pp.z() - v_center->z()) * (pp.z() - v_center->z()));
-          double DP =
-            sqrt((newPoint[i][0] - uvt[0]) * (newPoint[i][0] - uvt[0]) +
-                 (newPoint[i][1] - uvt[1]) * (newPoint[i][1] - uvt[1]));
-          double newErr = 100 * fabs(D - L) / (D + L);
-          //	    if (v_center->onWhat() != gf && gf->tag() == 3){
-          //	      crossField2d::normalizeAngle (uvt[2]);
-          //	      printf("INTERSECT angle = %g DP %g\n",uvt[2],DP);
-          //	    }
-          if(newErr < 1 && DP < .1) {
-            //	      printf("%12.5E vs %12.5E : %12.5E %12.5E vs %12.5E %12.5E
-            //	      \n",ERR[i],newErr,newPoint[i][0],newPoint[i][1],uvt[0],uvt[1]);
-            newPoint[i][0] = uvt[0];
-            newPoint[i][1] = uvt[1];
-          }
-          //	    printf("OK\n");
-        }
-        else {
-          Msg::Debug("Cannot put a new point on Surface %d", gf->tag());
-          // printf("NOT OK\n");
-        }
-      }
-    }
-
-    // return the four new vertices
-    for(int i = 0; i < 4; i++) {
-      newP[i][0] = SPoint2(newPoint[i][0], newPoint[i][1]);
-    }
-  }
-
-  return true;
-}
-
-void computeTwoNeighbors(frameFieldBackgroundMesh3D *bgm, MVertex *parent,
-                         std::vector<MVertex *> &spawns, SVector3 dir, double h)
-{
-  // using approximate size, RK1...
-  double x = parent->x();
-  double y = parent->y();
-  double z = parent->z();
-  double newx, newy, newz;
-  GRegion *gr = dynamic_cast<GRegion *>(bgm->getBackgroundGEntity());
-
-  newx = x + h * dir(0);
-  newy = y + h * dir(1);
-  newz = z + h * dir(2);
-  spawns[0] = new MVertex(newx, newy, newz, gr, 0);
-
-  newx = x - h * dir(0);
-  newy = y - h * dir(1);
-  newz = z - h * dir(2);
-  spawns[1] = new MVertex(newx, newy, newz, gr, 0);
-}
-
 void computeSixNeighbors(frameFieldBackgroundMesh3D *bgm, MVertex *parent,
                          std::vector<MVertex *> &spawns, STensor3 dir, double h)
 {
@@ -245,199 +56,11 @@ Filler2D::Filler2D() {}
 
 Filler2D::~Filler2D()
 {
-  std::cout << "FILLER2D timing:" << std::endl;
-  std::cout << "  ------- CUMULATIVE TIME2D bgm & smoothing  : "
-            << time_bgm_and_smoothing << " s." << std::endl;
-  std::cout << "  ------- CUMULATIVE TIME2D inserting points : "
-            << time_insertion << " s." << std::endl;
-  std::cout << "  ------- TOTAL 2D TIME (new)   : "
-            << time_bgm_and_smoothing + time_insertion << " s." << std::endl;
 }
 
 void Filler2D::pointInsertion2D(GFace *gf, std::vector<MVertex *> &packed,
                                 std::vector<SMetric3> &metrics)
 {
-  // NB/ do not use the mesh in GFace, use the one in backgroundMesh2D!
-
-  //  if(debug) std::cout << " ------------------   OLD -------------------" <<
-  //  std::endl; stringstream ssa;
-  ////  ssa << "oldbgm_angles_" << gf->tag() << ".pos";
-  ////  backgroundMesh::current()->print(ssa.str(),gf,1);
-  //  ssa << "oldbgm_sizes_" << gf->tag() << ".pos";
-  //  backgroundMesh::current()->print(ssa.str(),gf,0);
-  //
-  //
-  //
-  //
-  //  if(debug) std::cout << " ------------------   NEW -------------------" <<
-  //  std::endl; backgroundMesh2D *bgm2 =
-  //  dynamic_cast<backgroundMesh2D*>(BGMManager::get(gf)); stringstream ss2;
-  //  ss2 << "basebg_sizefield_" << gf->tag() << ".pos";
-  //  bgm2->exportSizeField(ss2.str());
-  //
-  //
-  //
-  //  return;
-  //
-
-  BGMManager::set_use_cross_field(true);
-
-  const bool goNonLinear = true;
-  const bool debug = false;
-  const bool export_stuff = true;
-
-  if(debug) std::cout << "ENTERING POINTINSERTION2D" << std::endl;
-
-  double a;
-
-  // acquire background mesh
-  if(debug) std::cout << "pointInsertion2D: recover BGM" << std::endl;
-  a = Cpu();
-  frameFieldBackgroundMesh2D *bgm =
-    dynamic_cast<frameFieldBackgroundMesh2D *>(BGMManager::get(gf));
-  time_bgm_and_smoothing += (Cpu() - a);
-
-  if(!bgm) {
-    Msg::Error("BGM dynamic cast failed in filler2D::pointInsertion2D");
-    return;
-  }
-
-  // export BGM size field
-  if(export_stuff) {
-    std::cout << "pointInsertion2D: export size field " << std::endl;
-    std::stringstream ss;
-    ss << "bg2D_sizefield_" << gf->tag() << ".pos";
-    bgm->exportSizeField(ss.str());
-
-    std::cout << "pointInsertion2D : export crossfield " << std::endl;
-    std::stringstream sscf;
-    sscf << "bg2D_crossfield_" << gf->tag() << ".pos";
-    bgm->exportCrossField(sscf.str());
-
-    std::cout << "pointInsertion2D : export smoothness " << std::endl;
-    std::stringstream sss;
-    sss << "bg2D_smoothness_" << gf->tag() << ".pos";
-    bgm->exportSmoothness(sss.str());
-  }
-
-  // point insertion algorithm:
-  a = Cpu();
-
-  // for debug check...
-  int priority_counter = 0;
-  std::map<MVertex *, int> vert_priority;
-
-  // get all the boundary vertices
-  if(debug) std::cout << "pointInsertion2D : get bnd vertices " << std::endl;
-  std::set<MVertex *> bnd_vertices = bgm->get_vertices_of_maximum_dim(1);
-
-  // put boundary vertices in a fifo queue
-  std::set<smoothness_point_pair,
-           compareSurfacePointWithExclusionRegionPtr_Smoothness>
-    fifo;
-  std::vector<surfacePointWithExclusionRegion *> vertices;
-
-  // initiate the rtree
-  if(debug) std::cout << "pointInsertion2D : initiate RTree " << std::endl;
-  RTree<surfacePointWithExclusionRegion *, double, 2, double> rtree;
-  SMetric3 metricField(1.0);
-  SPoint2 newp[4][NUMDIR];
-  auto it = bnd_vertices.begin();
-
-  for(; it != bnd_vertices.end(); ++it) {
-    SPoint2 midpoint;
-    computeFourNeighbors(bgm, *it, midpoint, goNonLinear, newp, metricField);
-    surfacePointWithExclusionRegion *sp =
-      new surfacePointWithExclusionRegion(*it, newp, midpoint, metricField);
-
-    smoothness_point_pair mp;
-    mp.ptr = sp;
-    mp.rank = (1. - bgm->get_smoothness(midpoint[0], midpoint[1]));
-    fifo.insert(mp);
-
-    vertices.push_back(sp);
-    double _min[2], _max[2];
-    sp->minmax(_min, _max);
-    rtree.Insert(_min, _max, sp);
-  }
-
-  // ---------- main loop -----------------
-  while(!fifo.empty()) {
-    if(debug)
-      std::cout << " -------- fifo.size() = " << fifo.size() << std::endl;
-    int count_nbaddedpt = 0;
-
-    surfacePointWithExclusionRegion *parent = (*fifo.begin()).ptr;
-    fifo.erase(fifo.begin());
-
-    for(int dir = 0; dir < NUMDIR; dir++) {
-      for(int i = 0; i < 4; i++) {
-        if(!inExclusionZone(parent->_p[i][dir], rtree, vertices)) {
-          GPoint gp = gf->point(parent->_p[i][dir]);
-          MFaceVertex *v =
-            new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
-          SPoint2 midpoint;
-          computeFourNeighbors(bgm, v, midpoint, goNonLinear, newp,
-                               metricField);
-          surfacePointWithExclusionRegion *sp =
-            new surfacePointWithExclusionRegion(v, newp, midpoint, metricField,
-                                                parent);
-          smoothness_point_pair mp;
-          mp.ptr = sp;
-          mp.rank = (1. - bgm->get_smoothness(gp.u(), gp.v()));
-
-          if(debug) vert_priority[v] = priority_counter++;
-
-          fifo.insert(mp);
-          vertices.push_back(sp);
-          double _min[2], _max[2];
-          sp->minmax(_min, _max);
-          rtree.Insert(_min, _max, sp);
-
-          if(debug) {
-            std::cout << "  adding node (" << sp->_v->x() << "," << sp->_v->y()
-                      << "," << sp->_v->z() << ")" << std::endl;
-            std::cout
-              << "    ----------------------------- sub --- fifo.size() = "
-              << fifo.size() << std::endl;
-          }
-          count_nbaddedpt++;
-        }
-      }
-    }
-    if(debug)
-      std::cout << "////////// nbre of added point: " << count_nbaddedpt
-                << std::endl;
-  }
-  time_insertion += (Cpu() - a);
-
-  if(debug) {
-    std::stringstream ss;
-    ss << "priority_" << gf->tag() << ".pos";
-    print_nodal_info(ss.str().c_str(), vert_priority);
-    ss.clear();
-  }
-
-  // add the vertices as additional vertices in the
-  // surface mesh
-  char ccc[256];
-  sprintf(ccc, "points%d.pos", gf->tag());
-  FILE *f = Fopen(ccc, "w");
-  if(f) {
-    fprintf(f, "View \"\"{\n");
-    for(unsigned int i = 0; i < vertices.size(); i++) {
-      vertices[i]->print(f, i);
-      if(vertices[i]->_v->onWhat() == gf) {
-        packed.push_back(vertices[i]->_v);
-        metrics.push_back(vertices[i]->_meshMetric);
-        SPoint2 midpoint;
-        reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
-      }
-      delete vertices[i];
-    }
-    fprintf(f, "};");
-    fclose(f);
-  }
 }
 
 bool Filler3D::treat_region(GRegion *gr)
@@ -533,7 +156,8 @@ bool Filler3D::treat_region(GRegion *gr)
   MElement *element;
   MVertex *vertex;
   std::vector<GFace *> faces = gr->faces();
-  for(auto it = faces.begin(); it != faces.end(); it++) {
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) {
     GFace *gf = *it;
     // int limit = code_kesskessai(gf->tag());
     for(unsigned int i = 0; i < gf->getNumMeshElements(); i++) {
@@ -548,7 +172,7 @@ bool Filler3D::treat_region(GRegion *gr)
   }
 
   int geodim;
-  for(auto it = temp.begin(); it != temp.end(); it++) {
+  for(std::set<MVertex *>::iterator it = temp.begin(); it != temp.end(); it++) {
     geodim = (*it)->onWhat()->dim();
     if((geodim == 0) || (geodim == 1) || (geodim == 2))
       boundary_vertices.push_back(*it);
@@ -579,7 +203,9 @@ bool Filler3D::treat_region(GRegion *gr)
       bgm->eval_approximate_crossfield(closest, svp->cf);
 
       fifo->insert(svp);
-      if(debug) { smoothness_forplot[svp->v] = svp->rank; }
+      if(debug) {
+        smoothness_forplot[svp->v] = svp->rank;
+      }
     }
     else {
       STensor3 temp;
@@ -621,16 +247,9 @@ bool Filler3D::treat_region(GRegion *gr)
     //    }
 
     std::vector<MVertex *> spawns;
-    if(!use_vectorial_smoothness) {
-      spawns.resize(6);
-      computeSixNeighbors(bgm, parent, spawns, fifo->get_first_crossfield(),
-                          fifo->get_first_size());
-    }
-    else {
-      spawns.resize(2);
-      computeTwoNeighbors(bgm, parent, spawns, fifo->get_first_direction(),
-                          fifo->get_first_size());
-    }
+    spawns.resize(6);
+    computeSixNeighbors(bgm, parent, spawns, fifo->get_first_crossfield(),
+			fifo->get_first_size());
     fifo->erase_first();
 
     //    std::cout << "while, fifo->size()=" << fifo->size() << " parent=(" <<
@@ -709,7 +328,9 @@ bool Filler3D::treat_region(GRegion *gr)
           }
         }
       }
-      if(!spawn_created) { delete individual; }
+      if(!spawn_created) {
+        delete individual;
+      }
     } // end loop on spawns
   }
 
@@ -717,18 +338,6 @@ bool Filler3D::treat_region(GRegion *gr)
 
   time_insert_points += (Cpu() - a);
 
-  // --- output ---
-  if(debug) {
-    std::stringstream ss;
-    ss << "priority_3D_" << gr->tag() << ".pos";
-    print_nodal_info(ss.str().c_str(), vert_priority);
-    ss.clear();
-
-    std::stringstream sss;
-    sss << "smoothness_3D_" << gr->tag() << ".pos";
-    print_nodal_info(sss.str().c_str(), smoothness_forplot);
-    sss.clear();
-  }
 
   // ------- meshing using new points
   std::cout << "tets in gr before= " << gr->tetrahedra.size() << std::endl;
diff --git a/contrib/domhex/pointInsertion.h b/contrib/domhex/pointInsertion.h
index 2b99ca620213c6389cde1c8a5152e2e2b1a47eb5..70a8b20f174e32a9c0fae3b487727da3189f6c0f 100644
--- a/contrib/domhex/pointInsertion.h
+++ b/contrib/domhex/pointInsertion.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/pointInsertionRTreeTools.cpp b/contrib/domhex/pointInsertionRTreeTools.cpp
index 3c62d1adf5f3a464aefc14bf76abc782f4fcdf3c..9dc1759a791358c413cdd11ad1fc2faf373a005b 100644
--- a/contrib/domhex/pointInsertionRTreeTools.cpp
+++ b/contrib/domhex/pointInsertionRTreeTools.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -12,32 +12,34 @@
 #include "GEntity.h"
 #include "fullMatrix.h"
 
-surfacePointWithExclusionRegion::surfacePointWithExclusionRegion(
-  MVertex *v, SPoint2 p[4][NUMDIR], SPoint2 &_mp, SMetric3 &meshMetric,
-  surfacePointWithExclusionRegion *father)
+surfacePointWithExclusionRegion::surfacePointWithExclusionRegion(MVertex *v, SPoint2 p[8], SPoint2 &_mp, SMetric3 &meshMetric,
+								 surfacePointWithExclusionRegion *father)
 {
   _v = v;
   _meshMetric = meshMetric;
   _center = _mp;
-  for(int i = 0; i < 4; i++)
-    _q[i] = _center + (p[i][0] + p[(i + 1) % 4][0] - _center * 2) * FACTOR;
-  for(int i = 0; i < 4; i++)
-    for(int j = 0; j < NUMDIR; j++) _p[i][j] = p[i][j];
+  for(int i = 0; i < 4; i++){
+    _q[i] = _center + (p[i] + p[(i + 1) % 4] - _center * 2) * FACTOR;
+    //    printf("%g %g vs %g %g\n",_q[i].x(),_q[i].y(),p[i+4].x(),p[i+4].y());
+    //    _q[i] = p[i+4];
+  }
+  for(int i = 0; i < 4; i++)_p[i] = p[i];
 
   if(!father) {
-    fullMatrix<double> V(3, 3);
-    fullVector<double> S(3);
-    meshMetric.eig(V, S);
-    double l = std::max(std::max(S(0), S(1)), S(2));
-    _distanceSummed = sqrt(1 / (l * l));
+    _father = NULL;
   }
   else {
-    _distanceSummed = father->_distanceSummed + distance(father->_v, _v);
+    _father = father->_v;
   }
 }
 
-bool surfacePointWithExclusionRegion::inExclusionZone(const SPoint2 &p)
+bool surfacePointWithExclusionRegion::inExclusionZone(const SPoint2 &p, MVertex *parent)
 {
+  if (_father == parent) {
+    //    printf("parent = me\n");
+    return false;
+  }
+
   double mat[2][2];
   double b[2], uv[2];
   mat[0][0] = _q[1].x() - _q[0].x();
@@ -76,59 +78,40 @@ void surfacePointWithExclusionRegion::minmax(double _min[2],
 
 void surfacePointWithExclusionRegion::print(FILE *f, int i)
 {
+  //  fprintf(f, "SP(%g,%g,%g){%d};\n", _v->x(), _v->y(), _v->z(), i);
+  //  return;
   fprintf(f, "SP(%g,%g,%g){%d};\n", _center.x(), _center.y(), 0.0, i);
   fprintf(f, "SQ(%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g){%d,%d,%d,%d};\n",
           _q[0].x(), _q[0].y(), 0.0, _q[1].x(), _q[1].y(), 0.0, _q[2].x(),
           _q[2].y(), 0.0, _q[3].x(), _q[3].y(), 0.0, i, i, i, i);
+  
 }
 
-my_wrapper::my_wrapper(const SPoint2 &sp) : _tooclose(false), _p(sp) {}
-
 bool rtree_callback(surfacePointWithExclusionRegion *neighbour, void *point)
 {
   my_wrapper *w = static_cast<my_wrapper *>(point);
 
-  if(neighbour->inExclusionZone(w->_p)) {
+  if(neighbour->inExclusionZone(w->_p, w->_parent)) {
     w->_tooclose = true;
     return false;
   }
-
   return true;
 }
 
 bool inExclusionZone(
+  MVertex *parent,
   SPoint2 &p,
-  RTree<surfacePointWithExclusionRegion *, double, 2, double> &rtree,
-  std::vector<surfacePointWithExclusionRegion *> &all)
+  RTree<surfacePointWithExclusionRegion *, double, 2, double> &rtree)
 {
-  // should assert that the point is inside the domain
-  // OLD BGM
-  if(old_algo_hexa()) {
-    if(!backgroundMesh::current()->inDomain(p.x(), p.y(), 0)) return true;
-  }
-  else {
-    // NEW BGM
-    if(!BGMManager::current2D()->inDomain(p.x(), p.y(), 0)) return true;
-  }
-
-  my_wrapper w(p);
+  my_wrapper w(p, parent);
   double _min[2] = {p.x() - 1.e-1, p.y() - 1.e-1},
          _max[2] = {p.x() + 1.e-1, p.y() + 1.e-1};
   rtree.Search(_min, _max, rtree_callback, &w);
 
   return w._tooclose;
-
-  for(unsigned int i = 0; i < all.size(); ++i) {
-    if(all[i]->inExclusionZone(p)) {
-      // printf("%g %g is in exclusion zone of %g
-      //        %g\n",p.x(),p.y(),all[i]._center.x(),all[i]._center.y());
-      return true;
-    }
-  }
-  return false;
 }
 
-frameFieldBackgroundMesh3D *Wrapper3D::bgmesh = nullptr;
+frameFieldBackgroundMesh3D *Wrapper3D::bgmesh = NULL;
 
 double infinity_distance_3D(const MVertex *v1, const MVertex *v2, STensor3 &cf)
 {
diff --git a/contrib/domhex/pointInsertionRTreeTools.h b/contrib/domhex/pointInsertionRTreeTools.h
index 32498f9b963017867bd0dc26b89db0c4449529cd..39cead2d0e2174573da428e91e304e0165752322 100644
--- a/contrib/domhex/pointInsertionRTreeTools.h
+++ b/contrib/domhex/pointInsertionRTreeTools.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -14,15 +14,16 @@
 #include "STensor3.h"
 #include "BackgroundMesh3D.h"
 #include "GEntity.h"
+#include "GFace.h"
 #include "rtree.h"
 
 static const double k1 = 0.61; // k1*h is the minimal distance between two nodes
 static const double k2 = 0.5; // k2*h is the minimal distance to the boundary
 static const double sqrt3 = 1.73205081;
-static const double FACTOR = .71;
+static const double FACTOR = .61;
 
-static const int NUMDIR = 1;
-static const double DIRS[NUMDIR] = {0.0};
+//static const int NUMDIR = 1;
+//static const double DIRS[NUMDIR] = {0.0};
 
 // static const int NUMDIR = 3;
 // static const double DIRS [NUMDIR] = {0.0, M_PI/20.,-M_PI/20.};
@@ -30,11 +31,11 @@ static const double DIRS[NUMDIR] = {0.0};
 class surfacePointWithExclusionRegion {
 public:
   MVertex *_v;
+  MVertex *_father;
   SPoint2 _center;
-  SPoint2 _p[4][NUMDIR];
+  SPoint2 _p[4];
   SPoint2 _q[4];
   SMetric3 _meshMetric;
-  double _distanceSummed;
   /*
      + p3
      p4   |
@@ -43,11 +44,11 @@ public:
      + p1
 
    */
-  surfacePointWithExclusionRegion(
-    MVertex *v, SPoint2 p[4][NUMDIR], SPoint2 &_mp, SMetric3 &meshMetric,
-    surfacePointWithExclusionRegion *father = nullptr);
+  surfacePointWithExclusionRegion(MVertex *v, SPoint2 p[8],
+                                  SPoint2 &_mp, SMetric3 &meshMetric,
+                                  surfacePointWithExclusionRegion *father = 0);
 
-  bool inExclusionZone(const SPoint2 &p);
+  bool inExclusionZone(const SPoint2 &p, MVertex *v);
   void minmax(double _min[2], double _max[2]) const;
   void print(FILE *f, int i);
 };
@@ -55,47 +56,18 @@ public:
 class my_wrapper {
 public:
   bool _tooclose;
+  MVertex *_parent;
   SPoint2 _p;
-  my_wrapper(const SPoint2 &sp);
+  my_wrapper(const SPoint2 &sp, MVertex *parent) :
+  _p(sp), _parent(parent), _tooclose(false){}
 };
 
-struct smoothness_point_pair {
-  double rank;
-  surfacePointWithExclusionRegion *ptr;
-};
-
-class compareSurfacePointWithExclusionRegionPtr_Smoothness {
-public:
-  inline bool operator()(const smoothness_point_pair &a,
-                         const smoothness_point_pair &b) const
-  {
-    if(a.rank == b.rank) {
-      if(a.ptr->_distanceSummed > b.ptr->_distanceSummed) return false;
-      if(a.ptr->_distanceSummed < b.ptr->_distanceSummed) return true;
-      return a.ptr < b.ptr;
-    }
-    return (a.rank < b.rank);
-  }
-};
-
-class compareSurfacePointWithExclusionRegionPtr {
-public:
-  inline bool operator()(const surfacePointWithExclusionRegion *a,
-                         const surfacePointWithExclusionRegion *b) const
-  {
-    if(a->_distanceSummed > b->_distanceSummed) return false;
-    if(a->_distanceSummed < b->_distanceSummed) return true;
-    return a < b;
-  }
-};
+ bool rtree_callback(surfacePointWithExclusionRegion *neighbour,
+		     void *point);
 
-extern bool rtree_callback(surfacePointWithExclusionRegion *neighbour,
-                           void *point);
-
-extern bool inExclusionZone(
-  SPoint2 &p,
-  RTree<surfacePointWithExclusionRegion *, double, 2, double> &rtree,
-  std::vector<surfacePointWithExclusionRegion *> &all);
+bool inExclusionZone(MVertex *parent,
+		     SPoint2 &p,
+		     RTree<surfacePointWithExclusionRegion *, double, 2, double> &rtree);
 
 class Wrapper3D {
 private:
@@ -107,14 +79,9 @@ private:
   bool ok;
 
 public:
-  Wrapper3D()
-    : individual(nullptr), parent(nullptr), size(nullptr), cf(nullptr),
-      vec(nullptr), ok(true)
-  {
-  }
+  Wrapper3D() : individual(0), parent(0), size(0), cf(0), vec(0), ok(true) {}
   Wrapper3D(MVertex *_i, MVertex *_p)
-    : individual(_i), parent(_p), size(nullptr), cf(nullptr), vec(nullptr),
-      ok(true)
+    : individual(_i), parent(_p), size(0), cf(0), vec(0), ok(true)
   {
   }
   ~Wrapper3D() {}
@@ -146,7 +113,7 @@ extern void fill_min_max(double x, double y, double z, double h, double *min,
 // listOfPoints AND in RTree: larger memory footprint but less CPU time...
 class smoothness_vertex_pair {
 public:
-  smoothness_vertex_pair() : rank(0.), size(0.), v(nullptr), dir(0), layer(0) {}
+  smoothness_vertex_pair() : rank(0.), size(0.), v(0), dir(0), layer(0) {}
   ~smoothness_vertex_pair() {}
   STensor3 cf;
   SVector3 direction;
diff --git a/contrib/domhex/simple3D.cpp b/contrib/domhex/simple3D.cpp
index 88770a91bbe64e05cbc21d8df6708a37ff36a71f..9161546102349c2d87e2a9d715b45a191752c156 100644
--- a/contrib/domhex/simple3D.cpp
+++ b/contrib/domhex/simple3D.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -282,7 +282,9 @@ void Filler::treat_model()
 
   for(it = model->firstRegion(); it != model->lastRegion(); it++) {
     gr = *it;
-    if(gr->getNumMeshElements() > 0) { treat_region(gr); }
+    if(gr->getNumMeshElements() > 0) {
+      treat_region(gr);
+    }
   }
 }
 
@@ -345,15 +347,21 @@ void Filler::treat_region(GRegion *gr)
   }
 
   for(it = temp.begin(); it != temp.end(); it++) {
-    if((*it)->onWhat()->dim() == 0) { boundary_vertices.push_back(*it); }
+    if((*it)->onWhat()->dim() == 0) {
+      boundary_vertices.push_back(*it);
+    }
   }
 
   for(it = temp.begin(); it != temp.end(); it++) {
-    if((*it)->onWhat()->dim() == 1) { boundary_vertices.push_back(*it); }
+    if((*it)->onWhat()->dim() == 1) {
+      boundary_vertices.push_back(*it);
+    }
   }
 
   for(it = temp.begin(); it != temp.end(); it++) {
-    if((*it)->onWhat()->dim() == 2) { boundary_vertices.push_back(*it); }
+    if((*it)->onWhat()->dim() == 2) {
+      boundary_vertices.push_back(*it);
+    }
   }
 
   std::queue<Node *> fifo;
@@ -386,7 +394,9 @@ void Filler::treat_region(GRegion *gr)
     }
 
     std::vector<Node *> spawns(6);
-    for(int i = 0; i < 6; i++) { spawns[i] = new Node(); }
+    for(int i = 0; i < 6; i++) {
+      spawns[i] = new Node();
+    }
 
     create_spawns(gr, octree, parent, spawns);
 
@@ -423,7 +433,9 @@ void Filler::treat_region(GRegion *gr)
       if(!ok2) delete individual;
     }
 
-    if(count % 100 == 0) { printf("%d\n", count); }
+    if(count % 100 == 0) {
+      printf("%d\n", count);
+    }
     count++;
   }
 
@@ -489,7 +501,9 @@ Metric Filler::get_metric(double x, double y, double z, GEntity *ge)
   manager = ge->model()->getFields();
   if(manager->getBackgroundField() > 0) {
     field = manager->get(manager->getBackgroundField());
-    if(field) { (*field)(x, y, z, temp, ge); }
+    if(field) {
+      (*field)(x, y, z, temp, ge);
+    }
   }
 
   m.set_m11(v1.x());
@@ -522,7 +536,9 @@ double Filler::get_size(double x, double y, double z, GEntity *ge)
   manager = ge->model()->getFields();
   if(manager->getBackgroundField() > 0) {
     field = manager->get(manager->getBackgroundField());
-    if(field) { h = (*field)(x, y, z, ge); }
+    if(field) {
+      h = (*field)(x, y, z, ge);
+    }
   }
 
   return h;
@@ -532,7 +548,7 @@ bool Filler::inside_domain(MElementOctree *octree, double x, double y, double z)
 {
   MElement *element;
   element = (MElement *)octree->find(x, y, z, 3, true);
-  if(element != nullptr)
+  if(element != NULL)
     return 1;
   else
     return 0;
@@ -558,8 +574,8 @@ bool Filler::far_from_boundary(MElementOctree *octree, Node *node)
   e5 = (MElement *)octree->find(x, y, z + k2 * h, 3, true);
   e6 = (MElement *)octree->find(x, y, z - k2 * h, 3, true);
 
-  if(e1 != nullptr && e2 != nullptr && e3 != nullptr && e4 != nullptr &&
-     e5 != nullptr && e6 != nullptr)
+  if(e1 != NULL && e2 != NULL && e3 != NULL && e4 != NULL && e5 != NULL &&
+     e6 != NULL)
     return 1;
   else
     return 0;
@@ -668,14 +684,18 @@ double Filler::improvement(GEntity *ge, MElementOctree *octree,
   y = point.y() + h1 * direction.y();
   z = point.z() + h1 * direction.z();
 
-  if(inside_domain(octree, x, y, z)) { h2 = get_size(x, y, z); }
+  if(inside_domain(octree, x, y, z)) {
+    h2 = get_size(x, y, z);
+  }
   else
     h2 = h1;
 
   coeffA = 1.0;
   coeffB = 0.16;
 
-  if(h2 > h1) { average = coeffA * h1 + (1.0 - coeffA) * h2; }
+  if(h2 > h1) {
+    average = coeffA * h1 + (1.0 - coeffA) * h2;
+  }
   else {
     average = coeffB * h1 + (1.0 - coeffB) * h2;
   }
diff --git a/contrib/domhex/simple3D.h b/contrib/domhex/simple3D.h
index f5e703d88d33f38d0a52a9ac3613aa9f3ba43694..0e244e61ba5a3526445e186e91f502442d6a10e5 100644
--- a/contrib/domhex/simple3D.h
+++ b/contrib/domhex/simple3D.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
diff --git a/contrib/domhex/surfaceFiller.cpp b/contrib/domhex/surfaceFiller.cpp
index 003bb90d58065c0ed5829474407a46432a63c208..663ee8b8cb0346330ce190a0054c767cb3723b7d 100644
--- a/contrib/domhex/surfaceFiller.cpp
+++ b/contrib/domhex/surfaceFiller.cpp
@@ -16,6 +16,7 @@
 #include "rtree.h"
 #include "MVertex.h"
 #include "MElement.h"
+#include "MLine.h"
 #include "BackgroundMesh.h"
 #include "intersectCurveSurface.h"
 #include "pointInsertionRTreeTools.h"
@@ -42,31 +43,26 @@ bool compute4neighbors(
   GFace *gf, // the surface
   MVertex *v_center, // the wertex for which we wnt to generate 4 neighbors
   SPoint2 &midpoint,
-  bool goNonLinear, // do we compute the position in the real surface which is
-                    // nonlinear
-  SPoint2 newP[4][NUMDIR], // look into other directions
-  SMetric3 &metricField, FILE *crossf = nullptr) // the mesh metric
+  SPoint2 newP[8], // look into other directions
+  SMetric3 &metricField,// the mesh metric
+  Field *f,
+  double du,
+  double dv,
+  double mult) 
 {
   // we assume that v is on surface gf
 
   // get the parameter of the point on the surface
   reparamMeshVertexOnFace(v_center, gf, midpoint);
-
-  double L =
-    backgroundMesh::current()->operator()(midpoint[0], midpoint[1], 0.0);
+  
+  midpoint = SPoint2(midpoint.x() + du,midpoint.y() + dv);
+  
+  SVector3 t1;
+  (*f)(v_center->x(), v_center->y(), v_center->z(), t1, gf);
+  double L = t1.norm()*mult;
+  //  printf("L = %12.5E\n",L);
   metricField = SMetric3(1. / (L * L));
-  FieldManager *fields = gf->model()->getFields();
-  if(fields->getBackgroundField() > 0) {
-    Field *f = fields->get(fields->getBackgroundField());
-    if(!f->isotropic()) {
-      (*f)(v_center->x(), v_center->y(), v_center->z(), metricField, gf);
-    }
-    else {
-      L = (*f)(v_center->x(), v_center->y(), v_center->z(), gf);
-      metricField = SMetric3(1. / (L * L));
-    }
-  }
-
+  
   // get the unit normal at that point
   Pair<SVector3, SVector3> der =
     gf->firstDer(SPoint2(midpoint[0], midpoint[1]));
@@ -74,691 +70,358 @@ bool compute4neighbors(
   SVector3 s2 = der.second();
   SVector3 n = crossprod(s1, s2);
   n.normalize();
-
-  double M = dot(s1, s1);
-  double N = dot(s2, s2);
-  double E = dot(s1, s2);
-
-  // compute the first fundamental form i.e. the metric tensor at the point
-  // M_{ij} = s_i \cdot s_j
-  double metric[2][2] = {{M, E}, {E, N}};
-
-  SVector3 basis_u = s1;
-  basis_u.normalize();
-  SVector3 basis_v = crossprod(n, basis_u);
-
-  for(int DIR = 0; DIR < NUMDIR; DIR++) {
-    double quadAngle =
-      backgroundMesh::current()->getAngle(midpoint[0], midpoint[1], 0) +
-      DIRS[DIR];
-
-    // normalize vector t1 that is tangent to gf at midpoint
-    SVector3 t1 = basis_u * cos(quadAngle) + basis_v * sin(quadAngle);
-    t1.normalize();
-
-    // compute the second direction t2 and normalize (t1,t2,n) is the tangent
-    // frame
-    SVector3 t2 = crossprod(n, t1);
-    t2.normalize();
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), t1.x(), t1.y(), t1.z());
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), t2.x(), t2.y(), t2.z());
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), -t1.x(), -t1.y(), -t1.z());
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), -t2.x(), -t2.y(), -t2.z());
-
-    double size_1 = sqrt(1. / dot(t1, metricField, t1));
-    double size_2 = sqrt(1. / dot(t2, metricField, t2));
-
-    // compute covariant coordinates of t1 and t2
-    // t1 = a s1 + b s2 -->
-    // t1 . s1 = a M + b E
-    // t1 . s2 = a E + b N --> solve the 2 x 2 system
-    // and get covariant coordinates a and b
-    double rhs1[2] = {dot(t1, s1), dot(t1, s2)}, covar1[2];
-    bool singular = false;
-    if(!sys2x2(metric, rhs1, covar1)) {
-      Msg::Info("Argh surface %d %g %g %g -- %g %g %g -- %g %g", gf->tag(),
-                s1.x(), s1.y(), s1.z(), s2.x(), s2.y(), s2.z(), size_1, size_2);
-      covar1[1] = 1.0;
-      covar1[0] = 0.0;
-      singular = true;
-    }
-    double rhs2[2] = {dot(t2, s1), dot(t2, s2)}, covar2[2];
-    if(!sys2x2(metric, rhs2, covar2)) {
-      Msg::Info("Argh surface %d %g %g %g -- %g %g %g", gf->tag(), s1.x(),
-                s1.y(), s1.z(), s2.x(), s2.y(), s2.z());
-      covar2[0] = 1.0;
-      covar2[1] = 0.0;
-      singular = true;
-    }
-
-    // transform the sizes with respect to the metric
-    // consider a vector v of size 1 in the parameter plane
-    // its length is sqrt (v^T M v) --> if I want a real size
-    // of size1 in direction v, it should be sqrt(v^T M v) * size1
-    double l1 = sqrt(covar1[0] * covar1[0] + covar1[1] * covar1[1]);
-    double l2 = sqrt(covar2[0] * covar2[0] + covar2[1] * covar2[1]);
-
-    covar1[0] /= l1;
-    covar1[1] /= l1;
-    covar2[0] /= l2;
-    covar2[1] /= l2;
-
-    double size_param_1 =
-      size_1 / sqrt(M * covar1[0] * covar1[0] + 2 * E * covar1[1] * covar1[0] +
-                    N * covar1[1] * covar1[1]);
-    double size_param_2 =
-      size_2 / sqrt(M * covar2[0] * covar2[0] + 2 * E * covar2[1] * covar2[0] +
-                    N * covar2[1] * covar2[1]);
-    if(singular) {
-      size_param_1 = size_param_2 = std::min(size_param_1, size_param_2);
-    }
-
-    const double EPS = 1.e-7;
-    double r1 = EPS * (double)rand() / RAND_MAX;
-    double r2 = EPS * (double)rand() / RAND_MAX;
-    double r3 = EPS * (double)rand() / RAND_MAX;
-    double r4 = EPS * (double)rand() / RAND_MAX;
-    double r5 = EPS * (double)rand() / RAND_MAX;
-    double r6 = EPS * (double)rand() / RAND_MAX;
-    double r7 = EPS * (double)rand() / RAND_MAX;
-    double r8 = EPS * (double)rand() / RAND_MAX;
-    double newPoint[4][2] = {{midpoint[0] - covar1[0] * size_param_1 + r1,
-                              midpoint[1] - covar1[1] * size_param_1 + r2},
-                             {midpoint[0] - covar2[0] * size_param_2 + r3,
-                              midpoint[1] - covar2[1] * size_param_2 + r4},
-                             {midpoint[0] + covar1[0] * size_param_1 + r5,
-                              midpoint[1] + covar1[1] * size_param_1 + r6},
-                             {midpoint[0] + covar2[0] * size_param_2 + r7,
-                              midpoint[1] + covar2[1] * size_param_2 + r8}};
-    // We could stop here. Yet, if the metric varies a lot, we can solve
-    // a nonlinear problem in order to find a better approximation in the real
-    // surface
-    double ERR[4];
-    for(int i = 0; i < 4; i++) {
-      GPoint pp = gf->point(SPoint2(newPoint[i][0], newPoint[i][1]));
-      double D = sqrt((pp.x() - v_center->x()) * (pp.x() - v_center->x()) +
-                      (pp.y() - v_center->y()) * (pp.y() - v_center->y()) +
-                      (pp.z() - v_center->z()) * (pp.z() - v_center->z()));
-      ERR[i] = 100 * fabs(D - L) / (D + L);
-    }
-
-    if(1 && goNonLinear) {
-      surfaceFunctorGFace ss(gf); //
-      SVector3 dirs[4] = {t1 * (-1.0), t2 * (-1.0), t1 * (1.0), t2 * (1.0)}; //
-      for(int i = 0; i < 4; i++) { //
-        if(ERR[i] > 12) {
-          double uvt[3] = {newPoint[i][0], newPoint[i][1], 0.0}; //
-          curveFunctorCircle cf(
-            dirs[i], n, SVector3(v_center->x(), v_center->y(), v_center->z()),
-            L);
-          if(intersectCurveSurface(cf, ss, uvt, size_param_1 * 1.e-3)) { //
-            GPoint pp = gf->point(SPoint2(uvt[0], uvt[1]));
-            double D =
-              sqrt((pp.x() - v_center->x()) * (pp.x() - v_center->x()) +
-                   (pp.y() - v_center->y()) * (pp.y() - v_center->y()) +
-                   (pp.z() - v_center->z()) * (pp.z() - v_center->z()));
-            double DP =
-              sqrt((newPoint[i][0] - uvt[0]) * (newPoint[i][0] - uvt[0]) +
-                   (newPoint[i][1] - uvt[1]) * (newPoint[i][1] - uvt[1]));
-            double newErr = 100 * fabs(D - L) / (D + L);
-            if(newErr < 1 && DP < .1) {
-              newPoint[i][0] = uvt[0];
-              newPoint[i][1] = uvt[1];
-            }
-          }
-          else {
-            Msg::Debug("Cannot put a new point on Surface %d", gf->tag());
-          }
-        }
-      }
-    }
-
-    // return the four new vertices
-    for(int i = 0; i < 4; i++) {
-      newP[i][DIR] = SPoint2(newPoint[i][0], newPoint[i][1]);
-    }
-  }
-  return true;
-}
-
-// recover element around vertex v and interpolate smoothness on this element...
-double get_smoothness(MVertex *v, GFace *gf,
-                      const std::map<MVertex *, double> &vertices2smoothness)
-{
-  // recover element around MVertex v
-  SPoint3 sp3(v->x(), v->y(), v->z());
-  SPoint2 param_point;
-  reparamMeshVertexOnFace(v, gf, param_point);
-  MElement *elem = backgroundMesh::current()->getMeshElementByCoord(
-    param_point[0], param_point[1], 0.);
-  if(!elem) {
-    elem = backgroundMesh::current()->getMeshElementByCoord(
-      param_point[0], param_point[1], 0., false);
-    if(!elem)
-      Msg::Warning("No element found for coordinate (%g, %g, %g)", sp3.x(),
-                   sp3.y(), sp3.z());
-  }
-
-  // recover element's vertices:
-  std::vector<MVertex *> localvertices;
-  localvertices.reserve(elem->getNumVertices());
-
-  for(std::size_t ivert = 0; ivert < elem->getNumVertices(); ivert++) {
-    MVertex *temp = elem->getVertex(ivert);
-    localvertices.push_back(temp);
-  }
-
-  // recover parametrisation uvw
-  double uvw[3], xyz[3];
-  xyz[0] = param_point[0];
-  xyz[1] = param_point[1];
-  xyz[2] = 0.;
-  elem->xyz2uvw(xyz, uvw);
-
-  // interpolate :
-  double val[3];
-  int i = 0;
-  for(auto it = localvertices.begin(); it != localvertices.end(); it++) {
-    MVertex *localv = *it;
-    auto itfind = vertices2smoothness.find(localv);
-    if(itfind == vertices2smoothness.end()) {
-      Msg::Warning("Background vertex not found");
-      return 0;
-    }
-    val[i++] = itfind->second;
-  }
-  double res = elem->interpolate(val, uvw[0], uvw[1], uvw[2]);
-  return res;
-}
-
-void print_nodal_info_int(const std::string &filename,
-                          std::map<MVertex *, int> &mapp)
-{
-  std::ofstream out(filename.c_str());
-
-  out << "View \"\"{" << std::endl;
-  for(auto it = mapp.begin(); it != mapp.end(); it++) {
-    MVertex *v = it->first;
-    out << "SP( " << v->x() << "," << v->y() << "," << v->z() << "){"
-        << it->second << "};" << std::endl;
-    ;
-  }
-  out << "};" << std::endl;
-
-  out.close();
-}
-
-void print_nodal_info_double(const std::string &filename,
-                             std::map<MVertex *, double> &mapp)
-{
-  std::ofstream out(filename.c_str());
-
-  out << "View \"\"{" << std::endl;
-  for(auto it = mapp.begin(); it != mapp.end(); it++) {
-    MVertex *v = it->first;
-    out << "SP( " << v->x() << "," << v->y() << "," << v->z() << "){"
-        << it->second << "};" << std::endl;
-    ;
-  }
-  out << "};" << std::endl;
-
-  out.close();
-}
-
-void export_point(surfacePointWithExclusionRegion *sp, int DIR, FILE *crossf,
-                  GFace *gf)
-{
-  // get the unit normal at that point
-  Pair<SVector3, SVector3> der = gf->firstDer(sp->_center);
-  SVector3 s1 = der.first();
-  SVector3 s2 = der.second();
-  SVector3 n = crossprod(s1, s2);
-  n.normalize();
-  SVector3 basis_u = s1;
-  basis_u.normalize();
-  SVector3 basis_v = crossprod(n, basis_u);
-
-  double quadAngle =
-    backgroundMesh::current()->getAngle(sp->_center[0], sp->_center[1], 0) +
-    DIRS[DIR];
-
-  // normalize vector t1 that is tangent to gf at midpoint
-  SVector3 t1 = basis_u * cos(quadAngle) + basis_v * sin(quadAngle);
+  t1 -= n*dot(t1,n);
   t1.normalize();
-
-  // compute the second direction t2 and normalize (t1,t2,n) is the tangent
-  // frame
-  SVector3 t2 = crossprod(n, t1);
-  t2.normalize();
-
-  //  double scale = DIR+1.;
-  SMetric3 metricField;
-  double L =
-    backgroundMesh::current()->operator()(sp->_center[0], sp->_center[1], 0.0);
-  metricField = SMetric3(1. / (L * L));
-  FieldManager *fields = gf->model()->getFields();
-  if(fields->getBackgroundField() > 0) {
-    Field *f = fields->get(fields->getBackgroundField());
-    if(!f->isotropic()) {
-      (*f)(sp->_v->x(), sp->_v->y(), sp->_v->z(), metricField, gf);
-    }
-    else {
-      L = (*f)(sp->_v->x(), sp->_v->y(), sp->_v->z(), gf);
-      metricField = SMetric3(1. / (L * L));
-    }
-  }
-  double size_1 = sqrt(1. / dot(t1, metricField, t1));
-  double size_2 = sqrt(1. / dot(t2, metricField, t2));
-
-  if(crossf) {
-    fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", sp->_v->x(), sp->_v->y(),
-            sp->_v->z(), t1.x() * size_1, t1.y() * size_1, t1.z() * size_1);
-    fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", sp->_v->x(), sp->_v->y(),
-            sp->_v->z(), t2.x() * size_2, t2.y() * size_2, t2.z() * size_2);
-    fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", sp->_v->x(), sp->_v->y(),
-            sp->_v->z(), -t1.x() * size_1, -t1.y() * size_1, -t1.z() * size_1);
-    fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", sp->_v->x(), sp->_v->y(),
-            sp->_v->z(), -t2.x() * size_2, -t2.y() * size_2, -t2.z() * size_2);
-  }
-}
-
-bool get_local_sizes_and_directions(const MVertex *v_center,
-                                    const SPoint2 &midpoint, const int DIR,
-                                    GFace *gf, double (&covar1)[2],
-                                    double (&covar2)[2], double &size_param_1,
-                                    double &size_param_2, double &L,
-                                    SVector3 &t1, SVector3 &t2, SVector3 &n,
-                                    FILE *crossf = nullptr)
-{
-  // bool get_RK_stuff(const MVertex *v_center, const SPoint2 &midpoint, const
-  // int DIR, GFace* gf, double (&covar1)[2], double (&covar2)[2], double
-  // &size_param_1, double &size_param_2, double &L, SVector3 &t1, SVector3 &t2,
-  // SVector3 &n, FILE *crossf, const SVector3 &previous_t1, const SVector3
-  // &previous_t2, bool use_previous_basis=false, bool export_cross=true){
-
-  // !!!!!!!!!!!! check if point is in domain (for RK !!!)
-  if(!backgroundMesh::current()->inDomain(midpoint.x(), midpoint.y(), 0))
-    return false;
-
-  SMetric3 metricField;
-  L = backgroundMesh::current()->operator()(midpoint[0], midpoint[1], 0.0);
-  metricField = SMetric3(1. / (L * L));
-  FieldManager *fields = gf->model()->getFields();
-  if(fields->getBackgroundField() > 0) {
-    Field *f = fields->get(fields->getBackgroundField());
-    if(!f->isotropic()) {
-      (*f)(v_center->x(), v_center->y(), v_center->z(), metricField, gf);
-    }
-    else {
-      L = (*f)(v_center->x(), v_center->y(), v_center->z(), gf);
-      metricField = SMetric3(1. / (L * L));
-    }
-  }
-
-  // get the unit normal at that point
-  Pair<SVector3, SVector3> der =
-    gf->firstDer(SPoint2(midpoint[0], midpoint[1]));
-  SVector3 s1 = der.first();
-  SVector3 s2 = der.second();
-  n = crossprod(s1, s2);
-  n.normalize();
-
+  
   double M = dot(s1, s1);
   double N = dot(s2, s2);
   double E = dot(s1, s2);
-
+  
   // compute the first fundamental form i.e. the metric tensor at the point
   // M_{ij} = s_i \cdot s_j
   double metric[2][2] = {{M, E}, {E, N}};
-
-  SVector3 basis_u = s1;
-  basis_u.normalize();
-  SVector3 basis_v = crossprod(n, basis_u);
-
-  double quadAngle =
-    backgroundMesh::current()->getAngle(midpoint[0], midpoint[1], 0) +
-    DIRS[DIR];
-  // double quadAngle  = atan2(midpoint[0],midpoint[1]);
-
-  // normalize vector t1 that is tangent to gf at midpoint
-  t1 = basis_u * cos(quadAngle) + basis_v * sin(quadAngle);
-  t1.normalize();
-
+  
   // compute the second direction t2 and normalize (t1,t2,n) is the tangent
   // frame
-  t2 = crossprod(n, t1);
+  SVector3 t2 = crossprod(n, t1);
   t2.normalize();
-
-  double size_1 = sqrt(1. / dot(t1, metricField, t1));
-  double size_2 = sqrt(1. / dot(t2, metricField, t2));
-
-  if(crossf) {
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), t1.x() * size_1, t1.y() * size_1,
-              t1.z() * size_1);
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), t2.x() * size_2, t2.y() * size_2,
-              t2.z() * size_2);
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), -t1.x() * size_1, -t1.y() * size_1,
-              -t1.z() * size_1);
-    if(DIR == 0 && crossf)
-      fprintf(crossf, "VP(%g,%g,%g) {%g,%g,%g};\n", v_center->x(),
-              v_center->y(), v_center->z(), -t2.x() * size_2, -t2.y() * size_2,
-              -t2.z() * size_2);
-  }
-
+  
   // compute covariant coordinates of t1 and t2
   // t1 = a s1 + b s2 -->
   // t1 . s1 = a M + b E
   // t1 . s2 = a E + b N --> solve the 2 x 2 system
   // and get covariant coordinates a and b
-  double rhs1[2] = {dot(t1, s1), dot(t1, s2)};
+  double rhs1[2] = {dot(t1, s1)*L, dot(t1, s2)*L}, covar1[2];
   bool singular = false;
   if(!sys2x2(metric, rhs1, covar1)) {
-    Msg::Info("Argh surface %d %g %g %g -- %g %g %g -- %g %g", gf->tag(),
-              s1.x(), s1.y(), s1.z(), s2.x(), s2.y(), s2.z(), size_1, size_2);
+    Msg::Debug("surface filler: SINGULAR AT %g %g",midpoint.x(),midpoint.y());
+    return false;
     covar1[1] = 1.0;
     covar1[0] = 0.0;
     singular = true;
   }
-  double rhs2[2] = {dot(t2, s1), dot(t2, s2)};
+  double rhs2[2] = {dot(t2, s1)*L, dot(t2, s2)*L}, covar2[2];
   if(!sys2x2(metric, rhs2, covar2)) {
-    Msg::Info("Argh surface %d %g %g %g -- %g %g %g", gf->tag(), s1.x(), s1.y(),
-              s1.z(), s2.x(), s2.y(), s2.z());
+    Msg::Debug("surface filler: SINGULAR AT %g %g",midpoint.x(),midpoint.y());
+    return false;
     covar2[0] = 1.0;
     covar2[1] = 0.0;
     singular = true;
   }
-
-  // transform the sizes with respect to the metric
-  // consider a vector v of size 1 in the parameter plane
-  // its length is sqrt (v^T M v) --> if I want a real size
-  // of size1 in direction v, it should be sqrt(v^T M v) * size1
-  double l1 = sqrt(covar1[0] * covar1[0] + covar1[1] * covar1[1]);
-  double l2 = sqrt(covar2[0] * covar2[0] + covar2[1] * covar2[1]);
-
-  covar1[0] /= l1;
-  covar1[1] /= l1;
-  covar2[0] /= l2;
-  covar2[1] /= l2;
-
-  size_param_1 =
-    size_1 / sqrt(M * covar1[0] * covar1[0] + 2 * E * covar1[1] * covar1[0] +
-                  N * covar1[1] * covar1[1]);
-  size_param_2 =
-    size_2 / sqrt(M * covar2[0] * covar2[0] + 2 * E * covar2[1] * covar2[0] +
-                  N * covar2[1] * covar2[1]);
-  if(singular) {
-    size_param_1 = size_param_2 = std::min(size_param_1, size_param_2);
+  
+  // compute the corners of the box as well
+  double LSQR = L ;
+  SVector3 b1 = t1+t2;
+  b1.normalize();
+  SVector3 b2 = t1-t2;
+  b2.normalize();
+
+  double rhs3[2] = {dot(b1, s1)*LSQR, dot(b1, s2)*LSQR}, covar3[2];
+  if(!sys2x2(metric, rhs3, covar3)) {
+    covar3[1] = 1.e22;
+    covar3[0] = 0.0;
+    singular = true;
   }
-
-  return true;
-}
-
-// using fifo based on smoothness criteria
-void packingOfParallelogramsSmoothness(GFace *gf,
-                                       std::vector<MVertex *> &packed,
-                                       std::vector<SMetric3> &metrics)
-{
-  Msg::Info("Packing of parallelograms: new algorithm based on smoothness");
-  const bool goNonLinear = true;
-
-  const bool debug = (Msg::GetVerbosity() == 99);
-
-  // build vertex -> neighbors table
-  std::multimap<MVertex *, MVertex *> vertex2vertex;
-  for(auto it = backgroundMesh::current()->begin_triangles();
-      it != backgroundMesh::current()->end_triangles(); it++) {
-    MElement *e = *it;
-    for(std::size_t i = 0; i < e->getNumVertices(); i++) {
-      MVertex *current = e->getVertex(i);
-      for(std::size_t j = 0; j < e->getNumVertices(); j++) {
-        if(i == j) continue;
-        MVertex *neighbor = e->getVertex(j);
-        vertex2vertex.insert(std::make_pair(current, neighbor));
-      }
-    }
+  double rhs4[2] = {dot(b2, s1)*LSQR, dot(b2, s2)*LSQR}, covar4[2];
+  if(!sys2x2(metric, rhs4, covar4)) {
+    covar4[0] = 1.e22;
+    covar4[1] = 0.0;
+    singular = true;
   }
-
-  // build table vertex->smoothness
-  std::map<MVertex *, double> vertices2smoothness;
-  std::map<MVertex *, double> smoothness_essai;
-  for(auto it = backgroundMesh::current()->begin_vertices();
-      it != backgroundMesh::current()->end_vertices(); it++) {
-    MVertex *v = *it;
-
-    SPoint2 param_point(v->x(), v->y());
-    GPoint gpt = gf->point(param_point);
-    MVertex v_real(gpt.x(), gpt.y(), gpt.z());
-    SVector3 t1, t2, n;
-    double covar1[2], covar2[2], L, size_param_1, size_param_2;
-    get_local_sizes_and_directions(&v_real, param_point, 0, gf, covar1, covar2,
-                                   size_param_1, size_param_2, L, t1, t2, n);
-
-    // compare to all neighbors...
-    std::pair<std::multimap<MVertex *, MVertex *>::iterator,
-              std::multimap<MVertex *, MVertex *>::iterator>
-      range = vertex2vertex.equal_range(v);
-    SVector3 t1_nb, t2_nb, n_nb;
-    double covar1_nb[2], covar2_nb[2], L_nb, size_param_1_nb, size_param_2_nb;
-    double maxprod, angle = 0.;
-    int N = 0;
-    for(auto itneighbor = range.first; itneighbor != range.second;
-        itneighbor++) {
-      N++;
-      maxprod = 0.;
-      MVertex *v_nb = itneighbor->second;
-      SPoint2 param_point_nb(v_nb->x(), v_nb->y());
-      GPoint gpt_nb = gf->point(param_point_nb);
-      MVertex v_real_nb(gpt_nb.x(), gpt_nb.y(), gpt_nb.z());
-      get_local_sizes_and_directions(&v_real_nb, param_point_nb, 0, gf,
-                                     covar1_nb, covar2_nb, size_param_1_nb,
-                                     size_param_2_nb, L_nb, t1_nb, t2_nb, n_nb);
-      // angle comparison...
-      maxprod = std::max(maxprod, fabs(t1[0] * t1_nb[0] + t1[1] * t1_nb[1]));
-      maxprod = std::max(maxprod, fabs(t1[0] * t2_nb[0] + t1[1] * t2_nb[1]));
-      angle += fabs(acos(std::max(std::min(maxprod, 1.), -1.)));
-    }
-    angle /= N;
-    vertices2smoothness[v] = angle;
+  
+  
+  double size_1 = sqrt (covar1[0]*covar1[0]+covar1[1]*covar1[1]);
+  double size_2 = sqrt (covar2[0]*covar2[0]+covar2[1]*covar2[1]);
+  
+  //  if (singular){
+  //  }
+  
+  
+  double newPoint[8][2] = {{midpoint[0] - covar1[0],
+			    midpoint[1] - covar1[1]},
+			   {midpoint[0] - covar2[0],
+			    midpoint[1] - covar2[1]},
+			   {midpoint[0] + covar1[0],
+			    midpoint[1] + covar1[1]},
+			   {midpoint[0] + covar2[0],
+			    midpoint[1] + covar2[1]},
+			   {midpoint[0] - covar3[0],
+			    midpoint[1] - covar3[1]},
+			   {midpoint[0] - covar4[0],
+			    midpoint[1] - covar4[1]},
+			   {midpoint[0] + covar3[0],
+			    midpoint[1] + covar3[1]},
+			   {midpoint[0] + covar4[0],
+			    midpoint[1] + covar4[1]}};
+  
+  SVector3 dirs[8]      = {t1 * (-1.0), t2 * (-1.0), t1 * (1.0), t2 * (1.0),
+			   b1 * (-1.0), b2 * (-1.0), b1 * (1.0), b2 * (1.0) };
+  SVector3 orthodirs[8] = {t2 * (-1.0), t1 * (-1.0), t2 * (1.0), t1 * (1.0),
+			   b2 * (-1.0), b1 * (-1.0), b2 * (1.0), b1 * (1.0) };
+  double   LS[8]   = {L,L,L,L,LSQR,LSQR,LSQR,LSQR};
+  
+  SPoint3 ppx (v_center->x(),v_center->y(),v_center->z());
+  surfaceFunctorGFace ss(gf);
+  for(int i = 0; i < 8; i++) {
+    newP[i] = SPoint2(newPoint[i][0], newPoint[i][1]);    
+    GPoint pp = gf->point(newP[i]);
+    SPoint3 px (pp.x(),pp.y(),pp.z());
+    SVector3 test = px - ppx;
+    double L2 = test.norm();
+    double DIFF_ANG = fabs(dot(orthodirs[i],test)) / L2;
+    double DIFF_L   = fabs(L2-LS[i]);
+    if (singular || DIFF_L > .1*LS[i] || DIFF_ANG > .1){
+      curveFunctorCircle cf(dirs[i], n, SVector3(v_center->x(), v_center->y(), v_center->z()), LS[i]);
+      double uvt[3] = {newPoint[i][0], newPoint[i][1], 0.0}; //
+      if(intersectCurveSurface(cf, ss, uvt, size_1 * 1.e-6)) { 
+	pp = gf->point(SPoint2(uvt[0], uvt[1]));      
+	px = SPoint3 (pp.x(),pp.y(),pp.z());
+	test = px - ppx;
+	L2 = test.norm();
+	double DIFF_ANG2 = fabs(dot(orthodirs[i],test)) / L2;
+	double DIFF_L2   = fabs(L2-LS[i]);
+	newPoint[i][0]=uvt[0];
+	newPoint[i][1]=uvt[1];
+  if (DIFF_L2 <= DIFF_L && DIFF_ANG2 <= DIFF_ANG){
+  }
+  else{
+    Msg::Debug("Difficult to find a point %lu L %g vs %g (ps %12.5E) ",i,L,L2,DIFF_ANG2);
   }
-
-  // --------------- export de smoothness comme elements....
-  // -----------------------
-  if(debug) {
-    std::stringstream ss;
-    ss << "backgroundmesh_element_smoothness_" << gf->tag() << ".pos";
-    std::ofstream out(ss.str().c_str());
-    out << "View \"directions\" {" << std::endl;
-    for(auto it = backgroundMesh::current()->begin_triangles();
-        it != backgroundMesh::current()->end_triangles(); it++) {
-      MElement *e = *it;
-      std::vector<MVertex *> nodes;
-      std::vector<double> smoothtemp;
-      for(int i = 0; i < 3; i++) {
-        MVertex *v = e->getVertex(i);
-        nodes.push_back(v);
-        smoothtemp.push_back(vertices2smoothness[v]);
-      }
-      out << "ST(";
-      for(int i = 0; i < 3; i++) {
-        GPoint pp = gf->point(SPoint2(nodes[i]->x(), nodes[i]->y()));
-        out << pp.x() << "," << pp.y() << "," << pp.z();
-        if(i != 2) out << ",";
       }
-      out << "){";
-      for(int i = 0; i < 3; i++) {
-        out << (1. - (smoothtemp[i] / M_PI * 4.));
-        if(i != 2) out << ",";
+      else{
+	SPoint3 p_test (v_center->x() + dirs[i].x() * LS[i],
+			v_center->y() + dirs[i].y() * LS[i],
+			v_center->z() + dirs[i].z() * LS[i]);      		
+	pp = gf->closestPoint(p_test ,uvt);
+	if (pp.succeeded()){
+	  newPoint[i][0] = pp.u();
+	  newPoint[i][1] = pp.v();
+	}
+	else 
+	  Msg::Debug("Impossible to intersect with a circle of radius %g",L);
       }
-      out << "};" << std::endl;
-    }
-    out << "};" << std::endl;
-    out.close();
+    }    
   }
-  //                   --------------- END ----------------
+  
+  return true;
+}
 
-  // for debug check...
-  int priority_counter = 0;
-  std::map<MVertex *, int> vert_priority;
+// at crossfield singularities, directions are undefined
+// we draw a circle around
+// static void createSingularPatches (GFace *gf, std::map<MVertex *, int> &s, Field *f, std::vector<MVertex*> &toInsert){
+
+//   FILE *_f = fopen("patches.pos","w");
+//   fprintf(_f,"View \"\"{\n");
+//   for (std::map<MVertex *, int>::iterator it = s.begin();it != s.end() ; ++it){
+//     SPoint2 midpoint;
+//     SPoint2 newP[8];
+//     SMetric3 metricField;
+//     compute4neighbors(gf, it->first, midpoint, newP, metricField, f, 0, 0, it->second == 5 ? .25 : 1); 
+//     //the 8 points (I know, it's strange ...)
+//     //                 2  
+//     //             7       6
+//     //          1             3  
+//     //             4       5
+//     //                 0
+
+//     // get the unit normal at that point
+//     Pair<SVector3, SVector3> der =
+//       gf->firstDer(SPoint2(midpoint[0], midpoint[1]));
+//     SVector3 s1 = der.first();
+//     SVector3 s2 = der.second();
+//     SVector3 n = crossprod(s1, s2);
+//     n.normalize();
+    
+//     int loop [8] = {0,4,1,7,2,6,3,5};
+//     SVector3 t0[8],t1[8];
+//     GPoint p0[8];
+//     std::vector<double> dots;
+//     std::vector<SPoint3> pts;
+//     for (int i=0;i<8;i++){
+//       p0[i] = gf->point(newP[loop[i]]);
+//       (*f)(p0[i].x(), p0[i].y(),p0[i].z(),t0[i], gf);      
+//       t0[i] -= n*dot(t0[i],n);
+//       t0[i].normalize();  
+//       t1[i] = crossprod(n, t0[i]);
+//       t1[i].normalize();
+//     }
+//     int nSamples = 30;
+//     SPoint3 p(it->first->x(),it->first->y(),it->first->z());
+//     for (int i=0;i<8;i++){
+//       SVector3 t0i = t0[i];
+//       SVector3 t1i = t1[i];
+//       SVector3 t0n = t0[(i+1)%8];
+//       SVector3 t1n = t1[(i+1)%8];
+//       if (fabs(dot(t0i,t0n)) < fabs(dot(t0i,t1n))){
+// 	SVector3 temp_ = t0n;
+// 	t0n = t1n;
+// 	t1n = temp_;	
+//       }
+//       if (dot(t0i,t0n) < 0)t0n = t0n * (-1.0);
+//       if (dot(t1i,t1n) < 0)t1n = t1n * (-1.0);
+
+//       GPoint pi = p0[i];
+//       GPoint pn = p0[(i+1)%8];
+//       fprintf(_f,"SP(%g,%g,%g){%d};\n",
+// 	      pi.x(),pi.y(),pi.z(),i);
+//       for (int j=0;j<nSamples;j++){
+// 	double xi = (double)j/(nSamples);
+// 	SPoint3 pij (pi.x()*(1-xi)+pn.x()*xi,pi.y()*(1-xi)+pn.y()*xi,pi.z()*(1-xi)+pn.z()*xi);
+// 	SVector3 vij = p-pij;
+// 	pts.push_back (pij);
+// 	vij.normalize();
+// 	SVector3 v0 = t0i*(1-xi) + t0n*xi;
+// 	SVector3 v1 = t1i*(1-xi) + t1n*xi;
+// 	v0.normalize();
+// 	v1.normalize();
+// 	double dot0 = fabs(dot(v0,vij));
+// 	double dot1 = fabs(dot(v1,vij));
+// 	dots.push_back(std::max(dot0,dot1));
+// 	fprintf(_f,"VP(%g,%g,%g){%g,%g,%g};\n",
+// 		pij.x(),pij.y(),pij.z(),
+// 		dot0*v0.x(),dot0*v0.y(),dot0*v0.z());
+// 	fprintf(_f,"VP(%g,%g,%g){%g,%g,%g};\n",
+// 		pij.x(),pij.y(),pij.z(),
+// 		dot1*v1.x(),dot1*v1.y(),dot1*v1.z());
+//       }
+//     }           
+
+//     int nbMax = 0;
+//     for (size_t i=0;i<pts.size();i++){
+//       double V0 = dots[i];
+//       double V1 = dots[(i+1)%pts.size()];
+//       double V2 = dots[(i+2)%pts.size()];
+//       if (V1 > V0 && V1 > V2){
+// 	double uvt[2] = {0,0};
+// 	GPoint pp = gf->closestPoint(pts[i] ,uvt);
+// 	MFaceVertex *vv = new MFaceVertex (pp.x(),pp.y(),pp.z(),gf,pp.u(),pp.v());
+// 	toInsert.push_back(vv);
+// 	nbMax++;
+//       }
+//     }
+//     if (nbMax == it-> second)printf("singularity %lu has a good set of %d sampling points\n",it->first->getNum(),nbMax);
+//     else {
+//       toInsert.resize(toInsert.size() - nbMax);
+//       printf("singularity %lu has a bad set of %d vs %d sampling points\n",it->first->getNum(),nbMax,it->second);
+//     }
+//   }
+			
+//   fprintf(_f,"};\n");
+//   fclose(_f);
+  
+// }
+
+
+
+static bool outBounds(SPoint2 p, double minu, double maxu, double minv, double maxv){
+  if (p.x() > maxu || p.x() <  minu || p.y() > maxv || p.y() <  minv){
+    //    printf("OUT BOUND %g %g\n",p.x(),p.y());
+    return true;
+
+  }
+  return false;
+}
 
-  // get all the boundary vertices
-  std::set<MVertex *> bnd_vertices;
-  for(unsigned int i = 0; i < gf->getNumMeshElements(); i++) {
-    MElement *element = gf->getMeshElement(i);
-    for(std::size_t j = 0; j < element->getNumVertices(); j++) {
-      MVertex *vertex = element->getVertex(j);
-      if(vertex->onWhat()->dim() < 2) bnd_vertices.insert(vertex);
-    }
-  }
+static bool close2sing(std::vector<MVertex*> &s, GFace *gf, SPoint2 p, Field *f){
+
+  if (s.empty())return false;
+  GPoint gp = gf->point(p);
+  SVector3 t1;
+  (*f)(gp.x(), gp.y(), gp.z(), t1, gf);
+  double L = t1.norm();
+  
+  for (size_t i=0;i<s.size();i++){
+    MVertex *v = s[i];
+    double d = sqrt ((v->x()-gp.x())*(v->x()-gp.x())+
+		     (v->y()-gp.y())*(v->y()-gp.y())+
+		     (v->z()-gp.z())*(v->z()-gp.z()));
+    if (d < FACTOR*L)return true;
+  }
+  return false;
+}
 
-  //  --------- put boundary vertices in a fifo queue ---------------
-  std::set<smoothness_point_pair,
-           compareSurfacePointWithExclusionRegionPtr_Smoothness>
-    fifo;
-  std::vector<surfacePointWithExclusionRegion *> vertices;
-  // put the RTREE
-  RTree<surfacePointWithExclusionRegion *, double, 2, double> rtree;
-  SMetric3 metricField(1.0);
-  SPoint2 newp[4][NUMDIR];
-  auto it = bnd_vertices.begin();
-
-  char NAME[345];
-  sprintf(NAME, "crossReal%d.pos", gf->tag());
-  FILE *crossf = nullptr;
-  if(debug) { crossf = Fopen(NAME, "w"); }
-  if(crossf) fprintf(crossf, "View \"\"{\n");
-  for(; it != bnd_vertices.end(); ++it) {
-    SPoint2 midpoint;
-    // compute4neighbors_RK2 (gf, *it, midpoint, goNonLinear, newp,
-    // metricField,crossf);
-    compute4neighbors(gf, *it, midpoint, goNonLinear, newp, metricField,
-                      crossf);
-    surfacePointWithExclusionRegion *sp =
-      new surfacePointWithExclusionRegion(*it, newp, midpoint, metricField);
-    smoothness_point_pair mp;
-    mp.ptr = sp;
-    mp.rank = get_smoothness(*it, gf, vertices2smoothness);
-    fifo.insert(mp);
-
-    if(debug) { smoothness_essai[*it] = mp.rank; }
-
-    vertices.push_back(sp);
-    double _min[2], _max[2];
-    sp->minmax(_min, _max);
-    rtree.Insert(_min, _max, sp);
-    if(crossf) export_point(sp, 0, crossf, gf);
-  }
 
-  // ---------- main loop -----------------
-  while(!fifo.empty()) {
-    surfacePointWithExclusionRegion *parent = (*fifo.begin()).ptr;
-    fifo.erase(fifo.begin());
-    int count_nbaddedpt = 0;
-    for(int dir = 0; dir < NUMDIR; dir++) {
-      for(int i = 0; i < 4; i++) {
-        if(!inExclusionZone(parent->_p[i][dir], rtree, vertices)) {
-          GPoint gp = gf->point(parent->_p[i][dir]);
-          MFaceVertex *v =
-            new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
-          SPoint2 midpoint;
-          // compute4neighbors_RK2 (gf, v, midpoint, goNonLinear, newp,
-          // metricField,crossf);
-          compute4neighbors(gf, v, midpoint, goNonLinear, newp, metricField,
-                            crossf);
-          surfacePointWithExclusionRegion *sp =
-            new surfacePointWithExclusionRegion(v, newp, midpoint, metricField,
-                                                parent);
-          smoothness_point_pair mp;
-          mp.ptr = sp;
-          mp.rank = get_smoothness(v, gf, vertices2smoothness);
-
-          if(debug) {
-            smoothness_essai[v] = mp.rank;
-            vert_priority[v] = priority_counter++;
-          }
-          fifo.insert(mp);
-          vertices.push_back(sp);
-          double _min[2], _max[2];
-          sp->minmax(_min, _max);
-          rtree.Insert(_min, _max, sp);
-          if(crossf) export_point(sp, dir, crossf, gf);
-
-          count_nbaddedpt++;
-        }
+static void findPhysicalGroupsForSingularities(GFace *gf,
+                                               std::map<MVertex *, int> &temp)
+{
+ 
+  std::set<GVertex *, GEntityPtrLessThan> emb = gf->embeddedVertices();
+  if (emb.empty())return;
+
+  std::map<int, std::vector<GEntity *> > groups[4];
+  gf->model()->getPhysicalGroups(groups);
+  for(std::map<int, std::vector<GEntity *> >::iterator it = groups[0].begin();
+      it != groups[0].end(); ++it) {
+    std::string name = gf->model()->getPhysicalName(0, it->first);
+    if(name == "SINGULARITY_OF_INDEX_THREE") {
+      for(size_t j = 0; j < it->second.size(); j++) {
+	if (emb.find((GVertex*)it->second[j]) != emb.end()){
+	  if(!it->second[j]->mesh_vertices.empty())
+	    temp[it->second[j]->mesh_vertices[0]] = 3;
+	}
       }
     }
-  }
-  if(crossf) {
-    fprintf(crossf, "};\n");
-    fclose(crossf);
-  }
-
-  if(debug) {
-    std::stringstream ss;
-    ss << "priority_" << gf->tag() << ".pos";
-    print_nodal_info_int(ss.str().c_str(), vert_priority);
-    ss.clear();
-    ss << "smoothness_test_" << gf->tag() << ".pos";
-    print_nodal_info_double(ss.str().c_str(), smoothness_essai);
-  }
-
-  // add the vertices as additional vertices in the surface mesh
-  char ccc[256];
-  sprintf(ccc, "points%d.pos", gf->tag());
-  FILE *f = nullptr;
-  if(debug) { f = Fopen(ccc, "w"); }
-  if(f) fprintf(f, "View \"\"{\n");
-  for(unsigned int i = 0; i < vertices.size(); i++) {
-    if(f) vertices[i]->print(f, i);
-    if(vertices[i]->_v->onWhat() == gf) {
-      packed.push_back(vertices[i]->_v);
-      metrics.push_back(vertices[i]->_meshMetric);
-      SPoint2 midpoint;
-      reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
+    else if(name == "SINGULARITY_OF_INDEX_FIVE") {
+      for(size_t j = 0; j < it->second.size(); j++) {
+	if (emb.find((GVertex*)it->second[j]) != emb.end()){
+	  if(!it->second[j]->mesh_vertices.empty())
+	    temp[it->second[j]->mesh_vertices[0]] = 5;
+	}
+      }
+    }
+    else if(name == "SINGULARITY_OF_INDEX_SIX") {
+      for(size_t j = 0; j < it->second.size(); j++) {
+	if (emb.find((GVertex*)it->second[j]) != emb.end()){
+	  if(!it->second[j]->mesh_vertices.empty())
+	    temp[it->second[j]->mesh_vertices[0]] = 6;
+	}
+      }
     }
-    delete vertices[i];
-  }
-  if(f) {
-    fprintf(f, "};");
-    fclose(f);
   }
 }
 
-// fills a surface with points in order to build a nice quad mesh
 
 void packingOfParallelograms(GFace *gf, std::vector<MVertex *> &packed,
                              std::vector<SMetric3> &metrics)
 {
-  // PE MODIF
-  //  packingOfParallelogramsSmoothness(gf,packed,metrics);
-  //  return;
-  // END PE MODIF
-
-  const bool debug = (Msg::GetVerbosity() == 99);
-
-  const bool goNonLinear = true;
 
-  if(debug) {
-    std::stringstream ssa;
-    ssa << "oldbgm_angles_" << gf->tag() << ".pos";
-    backgroundMesh::current()->print(ssa.str(), gf, 1);
+  FILE *f = NULL;
+  FILE *f2 = NULL;
+  if(Msg::GetVerbosity() == 99) {
+    char ccc[256];
+    sprintf(ccc, "points%d.pos", gf->tag());
+    f = Fopen(ccc, "w");
+    sprintf(ccc, "e_points%d.pos", gf->tag());
+    f2 = Fopen(ccc, "w");
+    if(f) fprintf(f, "View \"\"{\n");
+    if(f2) fprintf(f2, "View \"\"{\n");
+  }
+  
+  FieldManager *fields = gf->model()->getFields();
+  Field *cross_field = NULL;
+  SVector3 t1;
+  double L;
+  if(fields->getBackgroundField() > 0) {        
+    cross_field = fields->get(fields->getBackgroundField());
+    if(cross_field->numComponents() != 3) {// we hae a true scaled cross fields !!
+      Msg::Error ("Packing of Parallelograms require a scaled cross field");
+      Msg::Error ("Do first gmsh yourmeshname.msh -crossfield to create yourmeshname_scaled_crossfield.pos");
+      Msg::Error ("Then do yourmeshname.geo -bgm yourmeshname_scaled_crossfield.pos");
+      return;
+    }
+  }
+  else {
+    Msg::Error ("Packing of Parallelograms require a scaled cross field");
+    Msg::Error ("Do first gmsh yourmeshname.msh -crossfield to create yourmeshname_scaled_crossfield.pos");
+    Msg::Error ("Then do yourmeshname.geo -bgm yourmeshname_scaled_crossfield.pos");
+    return;
   }
 
+  
+  const bool goNonLinear = true;
+  
   // get all the boundary vertices
-  std::set<MVertex *> bnd_vertices;
+  std::set<MVertex *, MVertexPtrLessThan> bnd_vertices;
   for(unsigned int i = 0; i < gf->getNumMeshElements(); i++) {
     MElement *element = gf->getMeshElement(i);
     for(std::size_t j = 0; j < element->getNumVertices(); j++) {
@@ -767,77 +430,115 @@ void packingOfParallelograms(GFace *gf, std::vector<MVertex *> &packed,
     }
   }
 
+  // Renormalize size map taking into account quantization...
+  double globalMult = 1.0;
+
   // put boundary vertices in a fifo queue
-  std::set<surfacePointWithExclusionRegion *,
-           compareSurfacePointWithExclusionRegionPtr>
-    fifo;
+  std::queue<surfacePointWithExclusionRegion *> fifo;
   std::vector<surfacePointWithExclusionRegion *> vertices;
   // put the RTREE
   RTree<surfacePointWithExclusionRegion *, double, 2, double> rtree;
   SMetric3 metricField(1.0);
-  SPoint2 newp[4][NUMDIR];
-  auto it = bnd_vertices.begin();
-
-  char NAME[345];
-  sprintf(NAME, "crossReal%d.pos", gf->tag());
-  FILE *crossf = nullptr;
-  if(debug) { crossf = Fopen(NAME, "w"); }
-  if(crossf) fprintf(crossf, "View \"\"{\n");
+  SPoint2 newp[8];
+  std::set<MVertex *, MVertexPtrLessThan>::iterator it = bnd_vertices.begin();
+
+  double maxu = -1.e22,minu = 1.e22;
+  double maxv = -1.e22,minv = 1.e22;
+  
+  std::vector<MVertex*> singularities;  
   for(; it != bnd_vertices.end(); ++it) {
+
+    int NP = 1;
     SPoint2 midpoint;
-    compute4neighbors(gf, *it, midpoint, goNonLinear, newp, metricField,
-                      crossf);
-    surfacePointWithExclusionRegion *sp =
-      new surfacePointWithExclusionRegion(*it, newp, midpoint, metricField);
-    fifo.insert(sp);
-    vertices.push_back(sp);
-    double _min[2], _max[2];
-    sp->minmax(_min, _max);
-    rtree.Insert(_min, _max, sp);
+    double du[4] = {0,0,0,0}, dv[4]= {0,0,0,0};
+    
+    for (int i=0;i<2;i++){
+      if (gf->periodic(i)){
+	reparamMeshVertexOnFace(*it, gf, midpoint);
+	Range<double> bnds = gf->parBounds(i);      
+	//	if (1 || midpoint[i] == bnds.low()){
+	  if (i == 0)
+	    du[NP] =  bnds.high() -  bnds.low();
+	  else
+	    dv[NP] =  bnds.high() -  bnds.low();
+	  NP++;
+	  //	}
+	  //	else if (midpoint[i] == bnds.high()){
+	  if (i == 0)
+	    du[NP] =  -(bnds.high() -  bnds.low());
+	  else
+	    dv[NP] =  -(bnds.high() -  bnds.low());
+	  NP++;
+	  //	}
+      }
+    }
+    for (int i=0;i<NP;i++){
+      bool singular = !compute4neighbors(gf, *it, midpoint, newp, metricField, cross_field, du[i],dv[i],globalMult );
+      if (!singular){
+	surfacePointWithExclusionRegion *sp =
+	  new surfacePointWithExclusionRegion(*it, newp, midpoint, metricField);
+	minu = std::min(midpoint.x(),minu);
+	maxu = std::max(midpoint.x(),maxu);
+	minv = std::min(midpoint.y(),minv);
+	maxv = std::max(midpoint.y(),maxv);
+	vertices.push_back(sp);
+	fifo.push(sp);
+	double _min[2], _max[2];
+	sp->minmax(_min, _max);
+	rtree.Insert(_min, _max, sp);
+      }
+      else{
+	singularities.push_back(*it);
+	break;
+      }
+    }
   }
 
-  //  printf("initially : %d vertices in the domain\n",vertices.size());
-
+  //  printf("bounds = %g %g %g %g \n",minu,maxu,minv,maxv);
+  
   while(!fifo.empty()) {
-    surfacePointWithExclusionRegion *parent = *fifo.begin();
-    fifo.erase(fifo.begin());
-    for(int dir = 0; dir < NUMDIR; dir++) {
-      int countOK = 0;
-      for(int i = 0; i < 4; i++) {
-        if(!inExclusionZone(parent->_p[i][dir], rtree, vertices)) {
-          countOK++;
-          GPoint gp = gf->point(parent->_p[i][dir]);
-          MFaceVertex *v =
-            new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
-          SPoint2 midpoint;
-          compute4neighbors(gf, v, midpoint, goNonLinear, newp, metricField,
-                            crossf);
-          surfacePointWithExclusionRegion *sp =
-            new surfacePointWithExclusionRegion(v, newp, midpoint, metricField,
-                                                parent);
-          fifo.insert(sp);
-          vertices.push_back(sp);
-          double _min[2], _max[2];
-          sp->minmax(_min, _max);
-          rtree.Insert(_min, _max, sp);
-        }
+    //    printf("%d vertices in the domain\n",vertices.size());
+    //    if (vertices.size() > 5000)break;
+    surfacePointWithExclusionRegion *parent = fifo.front();
+    fifo.pop();
+    for(int i = 0; i < 4; i++) {
+      if(!close2sing (singularities,gf,parent->_p[i],cross_field)
+	 && !inExclusionZone(parent->_v, parent->_p[i], rtree) &&
+	 !outBounds(parent->_p[i],minu,maxu,minv,maxv)&&
+	gf->containsParam(parent->_p[i]))
+	{
+	  GPoint gp = gf->point(parent->_p[i]);
+	  MFaceVertex *v =
+	    new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
+	  SPoint2 midpoint;
+	  compute4neighbors(gf, v, midpoint, newp, metricField, cross_field,0, 0, globalMult);
+	  surfacePointWithExclusionRegion *sp =
+	    new surfacePointWithExclusionRegion(v, newp, midpoint, metricField, parent);
+	  fifo.push(sp);
+	  vertices.push_back(sp);
+	  double _min[2], _max[2];
+	  sp->minmax(_min, _max);
+	  rtree.Insert(_min, _max, sp);
+	}
+      else{
+	if(Msg::GetVerbosity() == 99) {
+	  GPoint gp = gf->point(parent->_p[i]);
+	  MFaceVertex *v =
+	    new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
+	  SPoint2 midpoint;
+	  compute4neighbors(gf, v, midpoint, newp, metricField, cross_field, 0, 0 , globalMult);
+	  surfacePointWithExclusionRegion *sp =
+	    new surfacePointWithExclusionRegion(v, newp, midpoint, metricField,parent);
+	  if (!gf->containsParam(parent->_p[i]))
+	    sp->print(f2, i);	  
+	  //	 printf("AI\n");
+	}
       }
-      if(countOK) break;
     }
   }
-  if(crossf) {
-    fprintf(crossf, "};\n");
-    fclose(crossf);
-  }
   // add the vertices as additional vertices in the surface mesh
-  char ccc[256];
-  sprintf(ccc, "points%d.pos", gf->tag());
-  FILE *f = nullptr;
-  if(debug) { f = Fopen(ccc, "w"); }
-  if(f) fprintf(f, "View \"\"{\n");
   for(unsigned int i = 0; i < vertices.size(); i++) {
-    //    if(vertices[i]->_v->onWhat() != gf)
-    if(f) vertices[i]->print(f, i);
+    if (f)vertices[i]->print(f, i);
     if(vertices[i]->_v->onWhat() == gf) {
       packed.push_back(vertices[i]->_v);
       metrics.push_back(vertices[i]->_meshMetric);
@@ -846,166 +547,85 @@ void packingOfParallelograms(GFace *gf, std::vector<MVertex *> &packed,
     }
     delete vertices[i];
   }
-  if(f) {
+  if (f){
+    fprintf(f2, "};");
+    fclose(f2);
     fprintf(f, "};");
     fclose(f);
   }
 }
 
-// fills a surface with points in order to build a nice quad mesh
-void packingOfParallelogramsConstrained(
-  GFace *gf, const std::set<MVertex *> &constr_vertices,
-  std::vector<MVertex *> &packed, std::vector<SMetric3> &metrics)
-{
-// PE MODIF
-//  packingOfParallelogramsSmoothness(gf,packed,metrics);
-//  return;
-// END PE MODIF
-#if defined(HAVE_RTREE)
-
-  std::cout << "      inside packingOfParallelogramsConstrained" << std::endl;
-  const bool goNonLinear = true;
-
-  //  FILE *f = Fopen ("parallelograms.pos","w");
-
-  // get all the boundary vertices
-  std::set<MVertex *> bnd_vertices;
-  for(unsigned int i = 0; i < gf->getNumMeshElements(); i++) {
-    MElement *element = gf->getMeshElement(i);
-    for(int j = 0; j < element->getNumVertices(); j++) {
-      MVertex *vertex = element->getVertex(j);
-      if(vertex->onWhat()->dim() < 2) bnd_vertices.insert(vertex);
+/* OLD STUFF 
+
+   double uvt[3] = {newPoint[0], newPoint[1], 0.0};
+  curveFunctorCircle cc(n2, n1, middle, d);
+  surfaceFunctorGFace ss(gf);
+
+  if(intersectCurveSurface(cc, ss, uvt, d * 1.e-8)) {
+    // if(gf->containsParam(SPoint2(uvt[0], uvt[1]))) {
+      newPoint[0] = uvt[0];
+      newPoint[1] = uvt[1];
+      return true;
+    // }
+  }
+
+  
+  surfaceFunctorGFace ss(gf); //
+  SVector3 dirs[4] = {t1 * (-1.0), t2 * (-1.0), t1 * (1.0), t2 * (1.0)}; //
+  for(int i = 0; i < 4; i++) { //
+    double uvt[3] = {newPoint[i][0], newPoint[i][1], 0.0}; //
+    
+    curveFunctorCircle cf(
+			  dirs[i], n, SVector3(v_center->x(), v_center->y(), v_center->z()),
+			  L);
+    if(intersectCurveSurface(cf, ss, uvt, size_1 * 1.e-2)) { //
+      GPoint pp = gf->point(SPoint2(uvt[0], uvt[1]));
+      double D =
+	sqrt((pp.x() - v_center->x()) * (pp.x() - v_center->x()) +
+	     (pp.y() - v_center->y()) * (pp.y() - v_center->y()) +
+	     (pp.z() - v_center->z()) * (pp.z() - v_center->z()));
+      double DP =
+	sqrt((newPoint[i][0] - uvt[0]) * (newPoint[i][0] - uvt[0]) +
+	     (newPoint[i][1] - uvt[1]) * (newPoint[i][1] - uvt[1]));
+      double newErr = 100 * fabs(D - L) / (D + L);
+      if(newErr < 1 && DP < .1) {
+	newPoint[i][0] = uvt[0];
+	newPoint[i][1] = uvt[1];
+      }
+      else {      
+	SPoint3 test (v_center->x() + dirs[i].x() * L,
+		      v_center->y() + dirs[i].y() * L,
+		      v_center->z() + dirs[i].z() * L);      
+	
+	
+	GPoint pp = gf->closestPoint(test,uvt);
+	if (pp.succeeded()){
+	  newPoint[i][0] = pp.u();
+	  newPoint[i][1] = pp.v();
+	}
+	else return false;
+      }
     }
-  }
-  std::cout << "      got all the boundary vertices" << std::endl;
-
-  // put boundary vertices in a fifo queue
-  std::set<surfacePointWithExclusionRegion *,
-           compareSurfacePointWithExclusionRegionPtr>
-    fifo;
-  std::vector<surfacePointWithExclusionRegion *> vertices;
-  // put the RTREE
-  RTree<surfacePointWithExclusionRegion *, double, 2, double> rtree;
-  SMetric3 metricField(1.0);
-  SPoint2 newp[4][NUMDIR];
-  std::set<MVertex *>::iterator it = bnd_vertices.begin();
-
-  char NAME[345];
-  sprintf(NAME, "crossReal%d.pos", gf->tag());
-  FILE *crossf = NULL;
-  if(debug) { crossf = Fopen(NAME, "w"); }
-  if(crossf) fprintf(crossf, "View \"\"{\n");
-  std::cout << "      entering first for" << std::endl;
-  for(; it != bnd_vertices.end(); ++it) {
-    SPoint2 midpoint;
-    compute4neighbors(gf, *it, midpoint, goNonLinear, newp, metricField,
-                      crossf);
-    surfacePointWithExclusionRegion *sp =
-      new surfacePointWithExclusionRegion(*it, newp, midpoint, metricField);
-    fifo.insert(sp);
-    vertices.push_back(sp);
-    double _min[2], _max[2];
-    sp->minmax(_min, _max);
-    rtree.Insert(_min, _max, sp);
-  }
-
-  std::set<MVertex *>::iterator it_constr = constr_vertices.begin();
-  std::cout << "      entering second for" << std::endl;
-  for(; it_constr != constr_vertices.end(); ++it_constr) {
-    SPoint2 midpoint;
-    std::cout << "going to test out parameterisation of the new point"
-              << std::endl;
-    double para0, para1;
-    (*it_constr)->getParameter(0, para0);
-    (*it_constr)->getParameter(1, para1);
-    std::cout << "            point tested: para 1 " << para0 << " and para 2 "
-              << para1 << std::endl;
-    std::cout << "         going to compute4neighbors" << std::endl;
-    compute4neighbors(gf, *it_constr, midpoint, goNonLinear, newp, metricField,
-                      crossf);
-    std::cout << "         going to surfacePointWithExclusionRegion"
-              << std::endl;
-    surfacePointWithExclusionRegion *sp = new surfacePointWithExclusionRegion(
-      *it_constr, newp, midpoint, metricField);
-    std::cout << "         done surfacePointWithExclusionRegion" << std::endl;
-    fifo.insert(sp);
-    vertices.push_back(sp);
-    double _min[2], _max[2];
-    sp->minmax(_min, _max);
-    rtree.Insert(_min, _max, sp);
-  }
-
-  //  printf("initially : %d vertices in the domain\n",vertices.size());
-
-  std::cout << "      entering while" << std::endl;
-  while(!fifo.empty()) {
-    surfacePointWithExclusionRegion *parent = *fifo.begin();
-    fifo.erase(fifo.begin());
-    for(int dir = 0; dir < NUMDIR; dir++) {
-      int countOK = 0;
-      for(int i = 0; i < 4; i++) {
-        if(!inExclusionZone(parent->_p[i][dir], rtree, vertices)) {
-          countOK++;
-          GPoint gp = gf->point(parent->_p[i][dir]);
-          MFaceVertex *v =
-            new MFaceVertex(gp.x(), gp.y(), gp.z(), gf, gp.u(), gp.v());
-          std::cout << "going to test out parameterisation of the new point"
-                    << std::endl;
-          double para0, para1;
-          v->getParameter(0, para0);
-          v->getParameter(1, para1);
-          std::cout << "            point tested: para 1 " << para0
-                    << " and para 2 " << para1 << std::endl;
-          SPoint2 midpoint;
-          compute4neighbors(gf, v, midpoint, goNonLinear, newp, metricField,
-                            crossf);
-          surfacePointWithExclusionRegion *sp =
-            new surfacePointWithExclusionRegion(v, newp, midpoint, metricField,
-                                                parent);
-          fifo.insert(sp);
-          vertices.push_back(sp);
-          double _min[2], _max[2];
-          sp->minmax(_min, _max);
-          rtree.Insert(_min, _max, sp);
-        }
+    else {      
+      SPoint3 test (v_center->x() + dirs[i].x() * L,
+		    v_center->y() + dirs[i].y() * L,
+		    v_center->z() + dirs[i].z() * L);      
+      
+      
+      GPoint pp = gf->closestPoint(test,uvt);
+      if (pp.succeeded()){
+	newPoint[i][0] = pp.u();
+	newPoint[i][1] = pp.v();
       }
-      if(countOK) break;
+      else return false;
     }
   }
-  std::cout << "      entering if" << std::endl;
-  if(crossf) {
-    fprintf(crossf, "};\n");
-    fclose(crossf);
-  }
 
-  // add the vertices as additional vertices in the surface mesh
-  char ccc[256];
-  sprintf(ccc, "points%d.pos", gf->tag());
-  FILE *f = NULL;
-  if(debug) { f = Fopen(ccc, "w"); }
-  if(f) fprintf(f, "View \"\"{\n");
-  std::cout << "      entering another for" << std::endl;
-  for(unsigned int i = 0; i < vertices.size(); i++) {
-    if(f) vertices[i]->print(f, i);
-    if(vertices[i]->_v->onWhat() == gf) {
-      packed.push_back(vertices[i]->_v);
-      metrics.push_back(vertices[i]->_meshMetric);
-      SPoint2 midpoint;
-      reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
-      std::cout << "going to test out parameterisation of the REPARAM point"
-                << std::endl;
-      double para0, para1;
-      vertices[i]->_v->getParameter(0, para0);
-      vertices[i]->_v->getParameter(1, para1);
-      std::cout << "            point tested: para 1 " << para0
-                << " and para 2 " << para1 << std::endl;
-    }
-    delete vertices[i];
+  
+  // return the four new vertices
+  for(int i = 0; i < 4; i++) {
+    newP[i] = SPoint2(newPoint[i][0], newPoint[i][1]);
   }
-  if(f) {
-    fprintf(f, "};");
-    fclose(f);
-  }
-  // delete rtree;
-#endif
-}
+  return true;
+
+ */
diff --git a/contrib/domhex/surfaceFiller.h b/contrib/domhex/surfaceFiller.h
index 48e4ec7946ae8d9fb4e668023f3d1adcfb0c1deb..32e209f7b6e3ddd65b58da9f851d1c2d7313d222 100644
--- a/contrib/domhex/surfaceFiller.h
+++ b/contrib/domhex/surfaceFiller.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -14,13 +14,7 @@
 class GFace;
 class MVertex;
 
-void packingOfParallelogramsSmoothness(GFace *gf,
-                                       std::vector<MVertex *> &packed,
-                                       std::vector<SMetric3> &metrics);
 void packingOfParallelograms(GFace *gf, std::vector<MVertex *> &packed,
                              std::vector<SMetric3> &metrics);
-void packingOfParallelogramsConstrained(
-  GFace *gf, const std::set<MVertex *> &constr_vertices,
-  std::vector<MVertex *> &packed, std::vector<SMetric3> &metrics);
 
 #endif
diff --git a/contrib/domhex/yamakawa.cpp b/contrib/domhex/yamakawa.cpp
index 6cfe3281f41a5d4097284230faa7750021af8c57..984700b7b14f85ec4dfda49b4b24ae6fb9f128ba 100644
--- a/contrib/domhex/yamakawa.cpp
+++ b/contrib/domhex/yamakawa.cpp
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -93,7 +93,8 @@ namespace {
   bool inclusion(MVertex *v1, MVertex *v2, MVertex *v3,
                  const std::set<MElement *> &tets)
   {
-    for(auto it = tets.begin(); it != tets.end(); it++) {
+    for(std::set<MElement *>::const_iterator it = tets.begin();
+        it != tets.end(); it++) {
       if(tet_contains_vertex(*it, v1) && tet_contains_vertex(*it, v2) &&
          tet_contains_vertex(*it, v3)) {
         return true;
@@ -392,7 +393,8 @@ namespace {
   {
     TetMeshConnectivity::TetSet tets_around_v =
       tet_mesh.tets_around_vertex(vertex);
-    for(auto tet = tets_around_v.begin(); tet != tets_around_v.end(); ++tet) {
+    for(TetMeshConnectivity::TetSet::const_iterator tet = tets_around_v.begin();
+        tet != tets_around_v.end(); ++tet) {
       if(hex_contains_tet(hex, *tet)) { result.insert(*tet); }
     }
   }
@@ -411,7 +413,7 @@ namespace {
       MVertex *v = tet->getVertex(i);
       if(v != v1 && v != v2 && v != v3) { return v; }
     }
-    return nullptr;
+    return NULL;
   }
 
   // Among the input tetrahedra find the first tet that contains v1, v2, and v3
@@ -422,21 +424,22 @@ namespace {
   MVertex *find(MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4,
                 const std::set<MElement *> &tets)
   {
-    for(auto it = tets.begin(); it != tets.end(); it++) {
+    for(std::set<MElement *>::const_iterator it = tets.begin();
+        it != tets.end(); it++) {
       MElement *tet = *it;
       if(tet_contains_vertex(tet, v1) && tet_contains_vertex(tet, v2) &&
          tet_contains_vertex(tet, v3) && !tet_contains_vertex(tet, v4)) {
         return last_tet_vertex(tet, v1, v2, v3);
       }
     }
-    return nullptr;
+    return NULL;
   }
 
   template <class T>
   bool find_value_in_multiset(const std::multiset<T> &set, const T &value,
                               T &value_in_set)
   {
-    auto it = set.find(value);
+    typename std::multiset<T>::const_iterator it = set.find(value);
     for(; it != set.end() && it->get_hash() == value.get_hash(); ++it) {
       if(value.same_vertices(*it)) {
         value_in_set = *it;
@@ -450,7 +453,7 @@ namespace {
   template <class T>
   bool find_value_in_multiset(const std::multiset<T> &set, const T &value)
   {
-    auto it = set.find(value);
+    typename std::multiset<T>::const_iterator it = set.find(value);
     for(; it != set.end() && it->get_hash() == value.get_hash(); ++it) {
       if(value.same_vertices(*it)) { return true; }
     }
@@ -491,25 +494,29 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
   map<MVertex *, int> vertices;
   int counterv = 1;
 
-  for(auto it = gr->tetrahedra.begin(); it != gr->tetrahedra.end(); it++) {
+  for(vector<MTetrahedron *>::iterator it = gr->tetrahedra.begin();
+      it != gr->tetrahedra.end(); it++) {
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       vertices.insert(make_pair((*it)->getVertex(i), counterv));
       counterv++;
     }
   }
-  for(auto it = gr->hexahedra.begin(); it != gr->hexahedra.end(); it++) {
+  for(vector<MHexahedron *>::iterator it = gr->hexahedra.begin();
+      it != gr->hexahedra.end(); it++) {
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       vertices.insert(make_pair((*it)->getVertex(i), counterv));
       counterv++;
     }
   }
-  for(auto it = gr->prisms.begin(); it != gr->prisms.end(); it++) {
+  for(vector<MPrism *>::iterator it = gr->prisms.begin();
+      it != gr->prisms.end(); it++) {
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       vertices.insert(make_pair((*it)->getVertex(i), counterv));
       counterv++;
     }
   }
-  for(auto it = gr->pyramids.begin(); it != gr->pyramids.end(); it++) {
+  for(vector<MPyramid *>::iterator it = gr->pyramids.begin();
+      it != gr->pyramids.end(); it++) {
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       vertices.insert(make_pair((*it)->getVertex(i), counterv));
       counterv++;
@@ -524,7 +531,8 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
       << "$Nodes" << endl
       << vertices.size() << endl;
   // write vertices
-  for(auto it = vertices.begin(); it != vertices.end(); it++)
+  for(map<MVertex *, int>::iterator it = vertices.begin(); it != vertices.end();
+      it++)
     out << it->second << " " << it->first->x() << " " << it->first->y() << " "
         << it->first->z() << endl;
   out << "$EndNodes" << endl
@@ -535,7 +543,8 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
 
   // write elems
   int counter = 1;
-  for(auto it = gr->tetrahedra.begin(); it != gr->tetrahedra.end(); it++) {
+  for(vector<MTetrahedron *>::iterator it = gr->tetrahedra.begin();
+      it != gr->tetrahedra.end(); it++) {
     out << counter << " 4 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       MVertex *v = (*it)->getVertex(i);
@@ -544,7 +553,8 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
     out << endl;
     counter++;
   }
-  for(auto it = gr->hexahedra.begin(); it != gr->hexahedra.end(); it++) {
+  for(vector<MHexahedron *>::iterator it = gr->hexahedra.begin();
+      it != gr->hexahedra.end(); it++) {
     out << counter << " 5 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       MVertex *v = (*it)->getVertex(i);
@@ -553,7 +563,8 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
     out << endl;
     counter++;
   }
-  for(auto it = gr->prisms.begin(); it != gr->prisms.end(); it++) {
+  for(vector<MPrism *>::iterator it = gr->prisms.begin();
+      it != gr->prisms.end(); it++) {
     out << counter << " 6 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       MVertex *v = (*it)->getVertex(i);
@@ -562,7 +573,8 @@ void export_gregion_mesh(GRegion *gr, const string &filename)
     out << endl;
     counter++;
   }
-  for(auto it = gr->pyramids.begin(); it != gr->pyramids.end(); it++) {
+  for(vector<MPyramid *>::iterator it = gr->pyramids.begin();
+      it != gr->pyramids.end(); it++) {
     out << counter << " 7 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       MVertex *v = (*it)->getVertex(i);
@@ -593,7 +605,10 @@ bool compare_hex_ptr_by_quality(Hex *a, Hex *b)
 
 Recombinator::~Recombinator()
 {
-  for(auto it = potential.begin(); it != potential.end(); it++) { delete *it; }
+  for(std::vector<Hex *>::iterator it = potential.begin();
+      it != potential.end(); it++) {
+    delete *it;
+  }
 }
 
 void Recombinator::execute()
@@ -602,8 +617,8 @@ void Recombinator::execute()
   // Backup the current mesh
   model->writeMSH("beforeyamakawa.msh");
 
-  for(auto region_itr = model->firstRegion(); region_itr != model->lastRegion();
-      region_itr++) {
+  for(GModel::riter region_itr = model->firstRegion();
+      region_itr != model->lastRegion(); region_itr++) {
     GRegion *region = *region_itr;
 
     if(region->getNumMeshElements() > 0) { execute(region); }
@@ -632,7 +647,8 @@ void Recombinator::print_all_potential_hex() const
   std::cout
     << "__________________________ START POT HEX LISTING ____________________ "
     << endl;
-  for(auto it = potential.begin(); it != potential.end(); it++) {
+  for(std::vector<Hex *>::const_iterator it = potential.begin();
+      it != potential.end(); it++) {
     cout << "--- Potential hex : " << *(*it) << "   " << (*it)->get_quality()
          << endl;
   }
@@ -706,13 +722,13 @@ void Recombinator::pattern1()
       remove_values_from_set(bin3, added);
 
       added.resize(7);
-      for(auto it1 = bin1.begin(); it1 != bin1.end(); it1++) {
+      for(vertex_set_itr it1 = bin1.begin(); it1 != bin1.end(); it1++) {
         MVertex *p = *it1;
         added[4] = p;
-        for(auto it2 = bin2.begin(); it2 != bin2.end(); it2++) {
+        for(vertex_set_itr it2 = bin2.begin(); it2 != bin2.end(); it2++) {
           MVertex *q = *it2;
           added[5] = q;
-          for(auto it3 = bin3.begin(); it3 != bin3.end(); it3++) {
+          for(vertex_set_itr it3 = bin3.begin(); it3 != bin3.end(); it3++) {
             MVertex *r = *it3;
             added[6] = r;
             if(p != q && p != r && q != r) {
@@ -721,7 +737,8 @@ void Recombinator::pattern1()
               tet_mesh.vertices_around_vertices(p, q, r, bin4);
               remove_values_from_set(bin4, added);
 
-              for(auto it4 = bin4.begin(); it4 != bin4.end(); it4++) {
+              for(std::set<MVertex *>::iterator it4 = bin4.begin();
+                  it4 != bin4.end(); it4++) {
                 MVertex *s = *it4;
                 Hex *hex = new Hex(a, b, q, c, d, p, s, r);
 
@@ -768,10 +785,10 @@ void Recombinator::pattern2()
       MVertex *s = find(a, b, d, c, verif);
       MVertex *p = find(b, c, d, a, verif);
 
-      if(s != nullptr && p != nullptr) {
+      if(s != NULL && p != NULL) {
         MVertex *r = find(s, b, d, a, verif);
         MVertex *q = find(p, b, d, c, verif);
-        if(r != nullptr && q != nullptr) {
+        if(r != 0 && q != 0) {
           // 2 possible hexes
           Hex *hex = new Hex(a, s, b, c, d, r, q, p);
           add_or_free_potential_hex(hex);
@@ -815,12 +832,11 @@ void Recombinator::pattern3()
       MVertex *bA = find(a, c, b, d, verif2);
       MVertex *bB = find(a, c, d, b, verif2);
 
-      if(fA != nullptr && fB != nullptr && bA != nullptr && bB != nullptr &&
-         fA != fB && bA != bB) {
+      if(fA != 0 && fB != 0 && bA != 0 && bB != 0 && fA != fB && bA != bB) {
         if(scalar(fA, fB, a, b) > scalar(fA, fB, b, c) &&
            scalar(bA, bB, a, b) > scalar(bA, bB, b, c)) {
-          MVertex *p = nullptr;
-          MVertex *q = nullptr;
+          MVertex *p = NULL;
+          MVertex *q = NULL;
           if(distance(fA, b, c) < distance(fB, b, c)) {
             p = fA;
             q = fB;
@@ -830,8 +846,8 @@ void Recombinator::pattern3()
             q = fA;
           }
 
-          MVertex *r = nullptr;
-          MVertex *s = nullptr;
+          MVertex *r = NULL;
+          MVertex *s = NULL;
           if(distance(bA, b, c) < distance(bB, b, c)) {
             r = bA;
             s = bB;
@@ -860,8 +876,8 @@ void Recombinator::pattern3()
         } // copy paste alert
         else if(scalar(fA, fB, a, b) <= scalar(fA, fB, b, c) &&
                 scalar(bA, bB, a, b) <= scalar(bA, bB, b, c)) {
-          MVertex *p = nullptr;
-          MVertex *q = nullptr;
+          MVertex *p = NULL;
+          MVertex *q = NULL;
           if(distance(fA, a, b) < distance(fB, a, b)) {
             p = fA;
             q = fB;
@@ -870,8 +886,8 @@ void Recombinator::pattern3()
             p = fB;
             q = fA;
           }
-          MVertex *r = nullptr;
-          MVertex *s = nullptr;
+          MVertex *r = NULL;
+          MVertex *s = NULL;
           if(distance(bA, a, b) < distance(bB, a, b)) {
             r = bA;
             s = bB;
@@ -919,9 +935,10 @@ void add_hex_to_region(GRegion *region, const Hex &hex)
 
 bool Recombinator::are_all_tets_free(const std::set<MElement *> &tets) const
 {
-  for(auto it = tets.begin(); it != tets.end(); it++) {
+  for(std::set<MElement *>::const_iterator it = tets.begin(); it != tets.end();
+      it++) {
     MElement *tet = *it;
-    auto it2 = markings.find(tet);
+    std::map<MElement *, bool>::const_iterator it2 = markings.find(tet);
     if(it2->second == true) { return false; }
   }
   return true;
@@ -929,8 +946,9 @@ bool Recombinator::are_all_tets_free(const std::set<MElement *> &tets) const
 
 void Recombinator::mark_tets(const std::set<MElement *> &tets)
 {
-  for(auto it = tets.begin(); it != tets.end(); ++it) {
-    auto it2 = markings.find(*it);
+  for(std::set<MElement *>::const_iterator it = tets.begin(); it != tets.end();
+      ++it) {
+    std::map<MElement *, bool>::iterator it2 = markings.find(*it);
     it2->second = true;
   }
 }
@@ -938,7 +956,8 @@ void Recombinator::mark_tets(const std::set<MElement *> &tets)
 void remove_slivers(std::set<MElement *> &tets, const Hex &hex,
                     std::set<MElement *> &slivers)
 {
-  for(auto it = tets.begin(); it != tets.end(); ++it) {
+  for(std::set<MElement *>::iterator it = tets.begin(); it != tets.end();
+      ++it) {
     if(is_combinatorially_sliver(*it, hex)) {
       slivers.insert(*it);
       tets.erase(it);
@@ -955,7 +974,7 @@ void Recombinator::delete_marked_tets_in_region() const
   current_region->tetrahedra.clear();
   for(unsigned int i = 0; i < copy_tets.size(); i++) {
     MElement *element = (MElement *)(copy_tets[i]);
-    auto it2 = markings.find(element);
+    std::map<MElement *, bool>::const_iterator it2 = markings.find(element);
     if(it2->second == false) {
       current_region->tetrahedra.push_back(copy_tets[i]);
     }
@@ -1058,7 +1077,8 @@ void Recombinator::build_tuples()
 
   std::vector<GFace *> faces = current_region->faces();
 
-  for(auto it = faces.begin(); it != faces.end(); it++) {
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) {
     GFace *gf = *it;
 
     for(unsigned int i = 0; i < gf->getNumMeshElements(); i++) {
@@ -1104,7 +1124,8 @@ void Recombinator::create_quads_on_boundary()
 void Recombinator::delete_quad_triangles_in_boundary() const
 {
   std::vector<GFace *> faces = current_region->faces();
-  for(auto it = faces.begin(); it != faces.end(); it++) {
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) {
     GFace *gf = *it;
     std::vector<MElement *> triangles_to_keep;
     triangles_to_keep.reserve(gf->triangles.size());
@@ -1267,11 +1288,11 @@ bool Recombinator::faces_statuquo(MVertex *a, MVertex *b, MVertex *c,
     Tuple tuple1(a, b, c);
     Tuple tuple2(c, d, a);
 
-    auto it1 = tuples.find(tuple1);
-    auto it2 = tuples.find(tuple2);
+    std::multiset<Tuple>::iterator it1 = tuples.find(tuple1);
+    std::multiset<Tuple>::iterator it2 = tuples.find(tuple2);
 
-    GFace *gf1 = nullptr;
-    GFace *gf2 = nullptr;
+    GFace *gf1 = NULL;
+    GFace *gf2 = NULL;
 
     while(it1 != tuples.end() && it1->get_hash() == tuple1.get_hash()) {
       if(tuple1.same_vertices(*it1)) { gf1 = it1->get_gf(); }
@@ -1286,7 +1307,7 @@ bool Recombinator::faces_statuquo(MVertex *a, MVertex *b, MVertex *c,
 
     assert((gf1 == NULL && gf2 == NULL) || (gf1 != NULL && gf2 != NULL));
 
-    if(gf1 != nullptr && gf2 != nullptr) {
+    if(gf1 != NULL && gf2 != NULL) {
       if(gf1 != gf2) { return false; }
       else
         return true;
@@ -1298,11 +1319,11 @@ bool Recombinator::faces_statuquo(MVertex *a, MVertex *b, MVertex *c,
     Tuple tuple1(a, b, d);
     Tuple tuple2(b, c, d);
 
-    auto it1 = tuples.find(tuple1);
-    auto it2 = tuples.find(tuple2);
+    std::multiset<Tuple>::iterator it1 = tuples.find(tuple1);
+    std::multiset<Tuple>::iterator it2 = tuples.find(tuple2);
 
-    GFace *gf1 = nullptr;
-    GFace *gf2 = nullptr;
+    GFace *gf1 = NULL;
+    GFace *gf2 = NULL;
 
     while(it1 != tuples.end() && it1->get_hash() == tuple1.get_hash()) {
       if(tuple1.same_vertices(*it1)) { gf1 = it1->get_gf(); }
@@ -1314,7 +1335,7 @@ bool Recombinator::faces_statuquo(MVertex *a, MVertex *b, MVertex *c,
       it2++;
     }
 
-    if(gf1 != nullptr && gf2 != nullptr) {
+    if(gf1 != NULL && gf2 != NULL) {
       if(gf1 != gf2) { return false; }
       else
         return true;
@@ -1960,7 +1981,7 @@ void Supplementary::create_quads_on_boundary(MVertex *a, MVertex *b, MVertex *c,
   std::multiset<Tuple>::iterator it1;
   std::multiset<Tuple>::iterator it2;
 
-  gf1 = nullptr;
+  gf1 = NULL;
   // gf2 = NULL;
 
   tuple1 = Tuple(a, b, c);
@@ -2654,8 +2675,8 @@ bool Supplementary::faces_statuquo(MVertex *a, MVertex *b, MVertex *c,
 
   bool ok = 1;
 
-  gf1 = nullptr;
-  gf2 = nullptr;
+  gf1 = NULL;
+  gf2 = NULL;
 
   Tuple tuple1(a, b, c);
   Tuple tuple2(c, d, a);
@@ -2744,7 +2765,7 @@ void Supplementary::build_vertex_to_vertices(GRegion *gr)
         MVertex *c = element->getVertex((j + 2) % 4);
         MVertex *d = element->getVertex((j + 3) % 4);
 
-        auto it = vertex_to_vertices.find(a);
+        Vertex2Vertices::iterator it = vertex_to_vertices.find(a);
         if(it != vertex_to_vertices.end()) {
           it->second.insert(b);
           it->second.insert(c);
@@ -2774,7 +2795,7 @@ void Supplementary::build_vertex_to_tetrahedra(GRegion *gr)
       for(std::size_t j = 0; j < element->getNumVertices(); j++) {
         MVertex *getVertex = element->getVertex(j);
 
-        auto it = vertex_to_tetrahedra.find(getVertex);
+        Vertex2Elements::iterator it = vertex_to_tetrahedra.find(getVertex);
         if(it != vertex_to_tetrahedra.end()) { it->second.insert(element); }
         else {
           bin.clear();
@@ -3061,7 +3082,7 @@ void PostOp::executeNew(GRegion *gr)
       std::set<MElement *> potential;
       find_tetrahedra(f.get_a(), f.get_b(), f.get_c(), potential);
 
-      auto it = potential.begin();
+      element_set_itr it = potential.begin();
       while(it != potential.end()) {
         if(tetrahedra.find(*it) == tetrahedra.end())
           potential.erase(it++);
@@ -3226,7 +3247,7 @@ MVertex *PostOp::otherVertexQuadFace(MFace &f, MVertex *v1, MVertex *v2,
                                      MVertex *v3)
 {
   int n = 0;
-  MVertex *v = nullptr;
+  MVertex *v = 0;
   for(int i = 0; i < 4; ++i) {
     if(f.getVertex(i) != v1 && f.getVertex(i) != v2 && f.getVertex(i) != v3) {
       ++n;
@@ -3234,7 +3255,7 @@ MVertex *PostOp::otherVertexQuadFace(MFace &f, MVertex *v1, MVertex *v2,
     }
   }
   if(n == 1) return v;
-  return nullptr;
+  return NULL;
 }
 
 void PostOp::matchQuadFace(MFace &f, MVertex *v1, MVertex *v2, MVertex *v3)
@@ -3563,7 +3584,7 @@ void PostOp::split_pyramids(GRegion *gr)
     std::set<MElement *> otherPyr;
     find_pyramids_from_quad(a, b, c, d, otherPyr);
     if(otherPyr.size() == 2) {
-      auto myit = otherPyr.begin();
+      element_set_itr myit = otherPyr.begin();
       MElement *other = *myit;
       if(other == element) { other = *(++myit); }
       // TODO test also quality of tet after split of other pyr ?
@@ -4094,7 +4115,7 @@ void PostOp::pyramids2(MVertex *a, MVertex *b, MVertex *c, MVertex *d,
   // y = (diagA->y() + diagB->y())/2.0;
   // z = (diagA->z() + diagB->z())/2.0;
 
-  mid = nullptr;
+  mid = 0;
   movables.clear();
 
   if(tetrahedra.size() > 0 || pyramids.size() > 0) {
@@ -4176,7 +4197,7 @@ void PostOp::pyramids2(MVertex *a, MVertex *b, MVertex *c, MVertex *d,
         MVertex *Nin = other(*it, diagA, diagB, Nout);
         //        N1 = other(*it,diagA,diagB);
 
-        if(Nout != nullptr && Nin != nullptr) {
+        if(Nout != 0 && Nin != 0) {
           Ns.insert(N1);
           Ns.insert(N2);
 
@@ -4221,7 +4242,7 @@ void PostOp::pyramids2(MVertex *a, MVertex *b, MVertex *c, MVertex *d,
         build_vertex_to_pyramids(temp2);
 
         MVertex *NoutDiag = findInTriFace(diagA, diagB, nDiagA, nDiagB, *it);
-        MVertex *NoutNDiag = nullptr;
+        MVertex *NoutNDiag = NULL;
         for(int iV = 0; iV < 5; iV++) {
           MVertex *v = (*it)->getVertex(iV);
           if(v != a && v != b && v != c && v != d && v != NoutDiag) {
@@ -4485,7 +4506,7 @@ void PostOp::create_quads_on_boundary(MVertex *a, MVertex *b, MVertex *c,
   std::multiset<Tuple>::iterator it1;
   std::multiset<Tuple>::iterator it2;
 
-  gf1 = nullptr;
+  gf1 = NULL;
   // gf2 = NULL;
 
   tuple1 = Tuple(a, b, c);
@@ -4661,7 +4682,7 @@ bool PostOp::different(MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4)
 
 MVertex *PostOp::other(MElement *element, MVertex *v1, MVertex *v2)
 {
-  MVertex *pointer = nullptr;
+  MVertex *pointer = NULL;
 
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
@@ -4676,7 +4697,7 @@ MVertex *PostOp::other(MElement *element, MVertex *v1, MVertex *v2)
 
 MVertex *PostOp::other(MElement *element, MVertex *v1, MVertex *v2, MVertex *v3)
 {
-  MVertex *pointer = nullptr;
+  MVertex *pointer = NULL;
 
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
@@ -4800,13 +4821,13 @@ MVertex *PostOp::findInTriFace(MVertex *in0, MVertex *in1, MVertex *out0,
         if(face.getVertex(iV) != in0 && face.getVertex(iV) != in1)
           return face.getVertex(iV);
   }
-  return nullptr;
+  return NULL;
 }
 
 MVertex *PostOp::find(MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4,
                       MElement *element)
 {
-  MVertex *pointer = nullptr;
+  MVertex *pointer = NULL;
 
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
@@ -5033,7 +5054,7 @@ void PostOp::build_vertex_to_tetrahedra(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_tetrahedra.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_tetrahedra.find(getVertex);
     if(it != vertex_to_tetrahedra.end()) { it->second.insert(element); }
     else {
       bin.clear();
@@ -5049,7 +5070,7 @@ void PostOp::erase_vertex_to_tetrahedra(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_tetrahedra.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_tetrahedra.find(getVertex);
     if(it != vertex_to_tetrahedra.end()) { it->second.erase(element); }
   }
 }
@@ -5071,7 +5092,7 @@ void PostOp::build_vertex_to_pyramids(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_pyramids.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_pyramids.find(getVertex);
     if(it != vertex_to_pyramids.end()) { it->second.insert(element); }
     else {
       bin.clear();
@@ -5087,7 +5108,7 @@ void PostOp::erase_vertex_to_pyramids(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_pyramids.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_pyramids.find(getVertex);
     if(it != vertex_to_pyramids.end()) { it->second.erase(element); }
   }
 }
@@ -5109,7 +5130,7 @@ void PostOp::build_vertex_to_hexPrism(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_hexPrism.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_hexPrism.find(getVertex);
     if(it != vertex_to_hexPrism.end()) { it->second.insert(element); }
     else {
       bin.clear();
@@ -5125,7 +5146,7 @@ void PostOp::erase_vertex_to_hexPrism(MElement *element)
   for(std::size_t i = 0; i < element->getNumVertices(); i++) {
     MVertex *getVertex = element->getVertex(i);
 
-    auto it = vertex_to_hexPrism.find(getVertex);
+    Vertex2Elements::iterator it = vertex_to_hexPrism.find(getVertex);
     if(it != vertex_to_hexPrism.end()) { it->second.erase(element); }
   }
 }
@@ -5176,19 +5197,20 @@ void export_the_clique_graphviz_format(cliques_compatibility_graph<T> &cl,
 {
   ofstream out(filename.c_str());
   out << "Graph G {" << endl;
-  auto it_all = cl.allQ.rbegin();
+  typename multimap<int, set<T> >::reverse_iterator it_all = cl.allQ.rbegin();
 
   for(int i = 0; i < clique_number; i++) { it_all++; }
   //  int clique_size = it_all->second.size();
-  auto ithex = it_all->second.begin();
-  auto ithexen = it_all->second.end();
+  typename set<T>::iterator ithex = it_all->second.begin();
+  typename set<T>::iterator ithexen = it_all->second.end();
 
   int counter = 1;
   map<T, int> visited_hex;
   multimap<int, int> done;
 
   // export all hex
-  auto itgraph = cl.begin_graph();
+  typename cliques_compatibility_graph<T>::graph::const_iterator itgraph =
+    cl.begin_graph();
   typename cliques_compatibility_graph<T>::graph_data::const_iterator
     itgraphdata;
 
@@ -5196,7 +5218,7 @@ void export_the_clique_graphviz_format(cliques_compatibility_graph<T> &cl,
     T firsthex = itgraph->second.first;
     //    if (!post_check_validation(firsthex)) continue;
 
-    auto itfind = visited_hex.find(firsthex);
+    typename map<T, int>::iterator itfind = visited_hex.find(firsthex);
     int num1 = 0;
     if(itfind == visited_hex.end()) {
       num1 = counter;
@@ -5222,7 +5244,8 @@ void export_the_clique_graphviz_format(cliques_compatibility_graph<T> &cl,
       bool found = false;
       pair<multimap<int, int>::iterator, multimap<int, int>::iterator> range =
         done.equal_range(num1);
-      for(auto it = range.first; it != range.second; it++) {
+      for(multimap<int, int>::iterator it = range.first; it != range.second;
+          it++) {
         if(it->second == num2) {
           found = true;
           break;
@@ -5238,7 +5261,7 @@ void export_the_clique_graphviz_format(cliques_compatibility_graph<T> &cl,
   // export chosen hex with different color
   for(; ithex != ithexen;
       ithex++) { // brutal post-check: random pickup of hexahedra in clique
-    auto itfind = visited_hex.find(*ithex);
+    typename map<T, int>::iterator itfind = visited_hex.find(*ithex);
     if(itfind == visited_hex.end()) {
       cout << "graph export: should not happen ! " << endl;
       throw;
@@ -5278,9 +5301,10 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
   set<MElement *> hexs;
   map<MVertex *, int> vertices;
   int counterv = 1;
-  auto it = hex_to_tet.begin();
+  typename map<T, std::set<MElement *> >::const_iterator it =
+    hex_to_tet.begin();
   for(; it != hex_to_tet.end(); it++) {
-    auto itt = it->second.begin();
+    std::set<MElement *>::const_iterator itt = it->second.begin();
     for(; itt != it->second.end(); itt++) {
       tets.insert(*itt);
       for(int i = 0; i < 4; i++) {
@@ -5291,8 +5315,10 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
   }
 
   // create MHexahedron, remove included tets from set "tets"
-  for(auto it = clique.begin(); it != clique.end(); it++) {
-    auto itfind = hex_to_tet.find(*it);
+  for(typename graph_data_no_hash::const_iterator it = clique.begin();
+      it != clique.end(); it++) {
+    typename map<T, std::set<MElement *> >::const_iterator itfind =
+      hex_to_tet.find(*it);
     if(itfind == hex_to_tet.end()) {
       cout << "clique_stop_criteria::void export_corresponding_mesh : not "
               "found !!!"
@@ -5300,8 +5326,8 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
       throw;
     }
     // remove tets
-    for(auto ittet = itfind->second.begin(); ittet != itfind->second.end();
-        ittet++) {
+    for(set<MElement *>::const_iterator ittet = itfind->second.begin();
+        ittet != itfind->second.end(); ittet++) {
       tets.erase(*ittet);
     }
     // create MHexahedron
@@ -5331,7 +5357,8 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
           << "$Nodes" << endl
           << vertices.size() << endl;
   // write vertices
-  for(auto it = vertices.begin(); it != vertices.end(); it++) {
+  for(map<MVertex *, int>::iterator it = vertices.begin(); it != vertices.end();
+      it++) {
     out << it->second << " " << it->first->x() << " " << it->first->y() << " "
         << it->first->z() << endl;
     outtets << it->second << " " << it->first->x() << " " << it->first->y()
@@ -5346,7 +5373,7 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
   // write hexs
   int counter = 1;
   int countertets = 1;
-  for(auto it = hexs.begin(); it != hexs.end(); it++) {
+  for(set<MElement *>::iterator it = hexs.begin(); it != hexs.end(); it++) {
     out << counter << " 5 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
       MVertex *v = (*it)->getVertex(i);
@@ -5356,7 +5383,7 @@ void clique_stop_criteria<T>::export_corresponding_mesh(
     counter++;
   }
   // write tets
-  for(auto it = tets.begin(); it != tets.end(); it++) {
+  for(set<MElement *>::iterator it = tets.begin(); it != tets.end(); it++) {
     out << counter << " 4 2 0 26";
     outtets << counter << " 4 2 0 26";
     for(std::size_t i = 0; i < (*it)->getNumVertices(); i++) {
@@ -5388,16 +5415,18 @@ bool clique_stop_criteria<T>::stop(const graph_data_no_hash &clique) const
 
   set<MElement *> thetets;
   //  set<MElement*> slivers;
-  for(auto it = clique.begin(); it != clique.end(); it++) {
-    auto itfind = hex_to_tet.find(*it);
+  for(typename graph_data_no_hash::const_iterator it = clique.begin();
+      it != clique.end(); it++) {
+    typename map<T, std::set<MElement *> >::const_iterator itfind =
+      hex_to_tet.find(*it);
     if(itfind == hex_to_tet.end()) {
       cout << "clique_stop_criteria::bool stop : not found !!!" << endl;
       throw;
     }
     //    total += (itfind->second.size());
     //    cout << "volumes=" << endl;
-    for(auto ittet = itfind->second.begin(); ittet != itfind->second.end();
-        ittet++) {
+    for(set<MElement *>::const_iterator ittet = itfind->second.begin();
+        ittet != itfind->second.end(); ittet++) {
       //      set<MElement*>::iterator itfindtet = thetets.find(*ittet);
       //      if (itfindtet!=thetets.end()){
       //        cout << "Tet " << *ittet << " already done !!!" << endl;
@@ -5410,14 +5439,16 @@ bool clique_stop_criteria<T>::stop(const graph_data_no_hash &clique) const
 
   // to be sure, adding volume criteria...
   vector<double> volumes;
-  for(auto it = thetets.begin(); it != thetets.end(); it++) {
+  for(set<MElement *>::iterator it = thetets.begin(); it != thetets.end();
+      it++) {
     volumes.push_back((*it)->getVolume());
   }
   int meanvolume =
     (std::accumulate(volumes.begin(), volumes.end(), 0)) / volumes.size();
   int nb_slivers = 0;
   double threshold = 1.e-3 * meanvolume;
-  for(auto it = thetets.begin(); it != thetets.end(); it++) {
+  for(set<MElement *>::iterator it = thetets.begin(); it != thetets.end();
+      it++) {
     if((*it)->getVolume() < threshold) { nb_slivers++; }
   }
 
@@ -5455,7 +5486,7 @@ template <class T> void cliques_compatibility_graph<T>::find_cliques()
 {
   // init
   graph_data s;
-  for(auto it = G.begin(); it != G.end(); it++) {
+  for(typename graph::iterator it = G.begin(); it != G.end(); it++) {
     s.insert(make_pair(it->first, it->second.first));
   }
   find_cliques(s, 0);
@@ -5514,7 +5545,8 @@ template <class T> void cliques_compatibility_graph<T>::store_clique(int n)
     }
   }
   if(store_it) {
-    auto itstore = allQ.insert(make_pair(Q.size(), set<T>()));
+    typename multimap<int, set<T> >::iterator itstore =
+      allQ.insert(make_pair(Q.size(), set<T>()));
     itstore->second.insert(Q.begin(), Q.end());
     // for (typename graph_data_no_hash::iterator it = Q.begin(); it != Q.end();
     // it++) {
@@ -5583,7 +5615,7 @@ void cliques_compatibility_graph<T>::find_cliques(graph_data &subgraph, int n)
     return;
   }
   if(subgraph.size() == 1) {
-    auto ittemp = subgraph.begin();
+    typename graph_data::iterator ittemp = subgraph.begin();
     T u = ittemp->second;
     Q.insert(u);
     store_clique(n);
@@ -5622,7 +5654,7 @@ void cliques_compatibility_graph<T>::find_cliques(graph_data &subgraph, int n)
 
     black.clear();
     if(white.size() > 0) {
-      auto ittemp = white.begin();
+      typename graph_data::iterator ittemp = white.begin();
       u = ittemp->second;
       u_key = ittemp->first;
       fill_black_set(u, u_key, subgraph, black); // building the black set only
@@ -5637,7 +5669,7 @@ void cliques_compatibility_graph<T>::erase_entry(graph_data &subgraph, T &u,
   pair<typename graph_data::iterator, typename graph_data::iterator> range =
     subgraph.equal_range(key);
 
-  auto it = range.first;
+  typename graph_data::iterator it = range.first;
   for(; it != range.second; it++) {
     if(it->second == u) {
       subgraph.erase(it);
@@ -5655,7 +5687,8 @@ void cliques_compatibility_graph<T>::choose_u(const graph_data &subgraph, T &u,
                                               hash_key &u_key)
 {
   double valuemax = -DBL_MAX;
-  for(auto it = subgraph.begin(); it != subgraph.end(); it++) {
+  for(typename graph_data::const_iterator it = subgraph.begin();
+      it != subgraph.end(); it++) {
     double value = function_to_maximize_for_u(it->second, it->first, subgraph);
     if(value > valuemax) {
       valuemax = value;
@@ -5674,7 +5707,7 @@ void cliques_compatibility_graph<T>::split_set_BW(const T &u,
 {
   // splitting set subgraph into white and black nodes
   white.insert(make_pair(u_key, u));
-  auto it = subgraph.begin();
+  typename graph_data::const_iterator it = subgraph.begin();
   for(; it != subgraph.end(); it++) {
     if(u == (it->second)) continue;
     if(!compatibility(u, u_key, it->second, it->first))
@@ -5691,7 +5724,7 @@ void cliques_compatibility_graph<T>::fill_black_set(const T &u,
                                                     graph_data &black)
 {
   // filling black set
-  auto it = subgraph.begin();
+  typename graph_data::const_iterator it = subgraph.begin();
   for(; it != subgraph.end(); it++) {
     if(u == (it->second)) continue;
     if(compatibility(u, u_key, it->second, it->first))
@@ -5707,7 +5740,8 @@ double cliques_compatibility_graph<T>::function_to_maximize_for_u(
   const T &u, const hash_key &u_key, const graph_data &subgraph)
 {
   int counter = 0;
-  for(auto it = subgraph.begin(); it != subgraph.end(); it++) {
+  for(typename graph_data::const_iterator it = subgraph.begin();
+      it != subgraph.end(); it++) {
     if((it->second) == u) continue;
     if(compatibility(u, u_key, it->second, it->first)) counter++;
   }
@@ -5724,15 +5758,15 @@ bool cliques_compatibility_graph<T>::compatibility(const T &u,
   // Find u data
   pair<typename graph::const_iterator, typename graph::const_iterator>
     range_ukey = G.equal_range(u_key);
-  auto itfind_u = range_ukey.first;
+  typename graph::const_iterator itfind_u = range_ukey.first;
   for(; itfind_u != range_ukey.second; itfind_u++) {
     if(itfind_u->second.first == u) break;
   }
   // Check if v is in u data
   pair<typename graph_data::const_iterator, typename graph_data::const_iterator>
     range_vkey = itfind_u->second.second.equal_range(v_key);
-  for(auto itfind_v = range_vkey.first; itfind_v != range_vkey.second;
-      itfind_v++) {
+  for(typename graph_data::const_iterator itfind_v = range_vkey.first;
+      itfind_v != range_vkey.second; itfind_v++) {
     if(itfind_v->second == v) { return true; }
   }
   return false;
@@ -5796,7 +5830,8 @@ bool PEEntity::hasVertex(MVertex *v) const
 
 bool PEEntity::same_vertices(const PEEntity *t) const
 {
-  for(auto it = vertices.begin(); it != vertices.end(); it++) {
+  for(vector<MVertex *>::const_iterator it = vertices.begin();
+      it != vertices.end(); it++) {
     if(!(t->hasVertex(*it))) return false;
   }
   return true;
@@ -5903,7 +5938,7 @@ void Recombinator_Graph::fill_tet_to_hex_table(Hex *hex)
   // non, c'est pas toujours le cas !!! ???
 
   set<MVertex *> vertices;
-  for(auto it = parts.begin(); it != parts.end(); it++) {
+  for(element_set_itr it = parts.begin(); it != parts.end(); it++) {
     element = *it;
     for(int i = 0; i < 4; i++) { vertices.insert(element->getVertex(i)); }
   }
@@ -5932,7 +5967,8 @@ void Recombinator_Graph::fill_tet_to_hex_table(Hex *hex)
   // deviennent b c d a, on a une rotation et un hex tout pourri... mais qui a
   // même hash et mêmes noeuds ?!?! now, check if the hex already exists...
   if(!bypass) {
-    auto itfind = find_the_created_potential_hex(hex, created_potential_hex);
+    graph_data::const_iterator itfind =
+      find_the_created_potential_hex(hex, created_potential_hex);
     if(itfind != created_potential_hex.end()) {
       delete hex;
       if(very_verbose)
@@ -5954,7 +5990,7 @@ void Recombinator_Graph::fill_tet_to_hex_table(Hex *hex)
   // counting the number of triangular external faces. If different from 12,
   // discard the hex ! if not, build the face/hex table
   std::multimap<unsigned long long, pair<PETriangle *, int> > faces_temp;
-  for(auto it_tet = parts.begin(); it_tet != parts.end();
+  for(element_set_itr it_tet = parts.begin(); it_tet != parts.end();
       it_tet++) { // for all tets
     for(int i = 0; i < 4; i++) { // for all faces
       MFace f = (*it_tet)->getFace(i);
@@ -5963,8 +5999,10 @@ void Recombinator_Graph::fill_tet_to_hex_table(Hex *hex)
   }
 
   int count = 0;
-  auto it_face = faces_temp.begin();
-  auto it_faceen = faces_temp.end();
+  std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator
+    it_face = faces_temp.begin();
+  std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator
+    it_faceen = faces_temp.end();
   for(; it_face != it_faceen; it_face++) // counting
     if(it_face->second.second == 1) count++;
 
@@ -5993,7 +6031,7 @@ void Recombinator_Graph::fill_tet_to_hex_table(Hex *hex)
   // might be a source of the above problem... but I am quite unsure. JP.
   created_potential_hex.insert(make_pair(hex->get_hash(), hex));
   add_edges(hex);
-  for(auto it = parts.begin(); it != parts.end(); it++) {
+  for(element_set_itr it = parts.begin(); it != parts.end(); it++) {
     element = *it;
     tet_to_hex[element].insert(hex);
     hex_to_tet[hex].insert(element);
@@ -6056,11 +6094,11 @@ void Recombinator_Graph::execute_blossom(unsigned int max_nb_cliques,
 
 Recombinator_Graph::~Recombinator_Graph()
 {
-  for(auto it = triangular_faces.begin(); it != triangular_faces.end(); it++) {
+  for(iter it = triangular_faces.begin(); it != triangular_faces.end(); it++) {
     delete it->second;
   }
-  for(auto it = edges_and_diagonals.begin(); it != edges_and_diagonals.end();
-      it++) {
+  for(linemap::iterator it = edges_and_diagonals.begin();
+      it != edges_and_diagonals.end(); it++) {
     delete it->second;
   }
 
@@ -6097,10 +6135,11 @@ void Recombinator_Graph::createBlossomInfo(GRegion *gr)
 
   cout << "recover blossom info" << endl;
 
-  for(auto it = faces.begin(); it != faces.end(); it++) {
+  for(std::vector<GFace *>::iterator it = faces.begin(); it != faces.end();
+      it++) {
     gf = *it;
 
-    auto it_quad = gf->quadrangles.begin();
+    std::vector<MQuadrangle *>::iterator it_quad = gf->quadrangles.begin();
 
     for(; it_quad != gf->quadrangles.end(); it_quad++) {
       element = *it_quad;
@@ -6284,7 +6323,7 @@ PETriangle *Recombinator_Graph::get_triangle(MElement *element, int i, int j,
   v.push_back(element->getVertex(j));
   v.push_back(element->getVertex(k));
   t = new PETriangle(v);
-  auto itfind = find_the_triangle(t, triangular_faces);
+  citer itfind = find_the_triangle(t, triangular_faces);
   if(itfind == triangular_faces.end()) {
     itfind = triangular_faces.insert(make_pair(t->get_hash(), t));
   }
@@ -6401,8 +6440,8 @@ void Recombinator_Graph::merge_clique(GRegion *gr,
                                       cliques_losses_graph<Hex *> &cl,
                                       int clique_number)
 {
-  auto it_all = cl.allQ.rbegin();
-  auto it_allen = cl.allQ.rend();
+  multimap<int, set<Hex *> >::reverse_iterator it_all = cl.allQ.rbegin();
+  multimap<int, set<Hex *> >::reverse_iterator it_allen = cl.allQ.rend();
   int clique_counter = 0;
   std::set<MElement *> parts;
   // int clique_size = 0;
@@ -6414,8 +6453,8 @@ void Recombinator_Graph::merge_clique(GRegion *gr,
 
     // cout << "--------------------- clique " << clique_counter << " made of ";
     // clique_size = it_all->second.size();
-    auto ithex = it_all->second.begin();
-    auto ithexen = it_all->second.end();
+    set<Hex *>::iterator ithex = it_all->second.begin();
+    set<Hex *>::iterator ithexen = it_all->second.end();
     double quality = 0.;
     int count = 0;
 
@@ -6441,7 +6480,7 @@ bool Recombinator_Graph::merge_hex(GRegion *gr, Hex *hex)
   MHexahedron *h = new MHexahedron(hex->vertices());
   gr->addHexahedron(h);
 
-  auto it_tet_to_remove = hex_to_tet[hex].begin();
+  std::set<MElement *>::iterator it_tet_to_remove = hex_to_tet[hex].begin();
   std::vector<MTetrahedron *>::iterator itfind_tet_region;
   for(; it_tet_to_remove != hex_to_tet[hex].end(); it_tet_to_remove++) {
     itfind_tet_region = std::find(gr->tetrahedra.begin(), gr->tetrahedra.end(),
@@ -6474,8 +6513,8 @@ void Recombinator_Graph::export_tets(set<MElement *> &tetset, Hex *hex,
   ofstream out(ss.str().c_str());
 
   out << "View \"hex tets parts\" {" << endl;
-  auto it = tetset.begin();
-  auto iten = tetset.end();
+  element_set_itr it = tetset.begin();
+  element_set_itr iten = tetset.end();
   int count = 0;
   for(; it != iten; it++, count++) {
     out << "SS(";
@@ -6505,8 +6544,8 @@ void Recombinator_Graph::export_single_hex_tet(Hex *hex, const string &s)
   ofstream out(ss.str().c_str());
 
   out << "View \"hex tets\" {" << endl;
-  auto it = hex_to_tet[hex].begin();
-  auto iten = hex_to_tet[hex].end();
+  element_set_itr it = hex_to_tet[hex].begin();
+  element_set_itr iten = hex_to_tet[hex].end();
   int count = 0;
   for(; it != iten; it++, count++) {
     out << "SS(";
@@ -6570,8 +6609,8 @@ void Recombinator_Graph::export_single_hex_faces(Hex *hex, const string &s)
   ofstream out(ss.str().c_str());
 
   out << "View \"hex faces\" {" << endl;
-  auto it = hex_to_faces[hex].begin();
-  auto iten = hex_to_faces[hex].end();
+  std::set<PETriangle *>::iterator it = hex_to_faces[hex].begin();
+  std::set<PETriangle *>::iterator iten = hex_to_faces[hex].end();
   int count = 0;
   for(; it != iten; it++, count++) {
     out << "ST(";
@@ -6600,7 +6639,7 @@ void Recombinator_Graph::export_hex_init_degree(
   ss << ".pos";
   ofstream out(ss.str().c_str());
 
-  auto it = chosen_hex.begin();
+  std::vector<Hex *>::const_iterator it = chosen_hex.begin();
   out << "View \"hex\" {" << endl;
   for(; it != chosen_hex.end(); it++) {
     out << "SH(";
@@ -6609,7 +6648,7 @@ void Recombinator_Graph::export_hex_init_degree(
       out << v->x() << "," << v->y() << "," << v->z();
       if(n != 7) out << ",";
     }
-    auto itfind = init_degree.find(*it);
+    map<Hex *, int>::const_iterator itfind = init_degree.find(*it);
     out << "){";
     for(int n = 0; n < 8; n++) {
       out << itfind->second;
@@ -6654,7 +6693,7 @@ void Recombinator_Graph::export_all_hex(int &file, GRegion *gr)
   ssinit << ".pos";
   ofstream out(ss.str().c_str());
 
-  auto it = gr->hexahedra.begin();
+  std::vector<MHexahedron *>::iterator it = gr->hexahedra.begin();
   int i = 1;
   out << "View \"hex\" {" << endl;
   for(; it != gr->hexahedra.end(); it++, i++) {
@@ -6688,9 +6727,9 @@ bool Recombinator_Graph::is_not_good_enough(Hex *hex)
 // tetrahedra For the entry to be added the hex also have to be good_enough
 void Recombinator_Graph::create_indirect_neighbors_graph()
 {
-  auto it_tet = tet_to_hex.begin();
+  std::map<MElement *, std::set<Hex *> >::iterator it_tet = tet_to_hex.begin();
   for(; it_tet != tet_to_hex.end(); it_tet++) {
-    auto it_hex1 = it_tet->second.begin();
+    std::set<Hex *>::iterator it_hex1 = it_tet->second.begin();
     for(; it_hex1 != it_tet->second.end(); it_hex1++) {
       Hex *hex = *it_hex1;
 
@@ -6700,7 +6739,7 @@ void Recombinator_Graph::create_indirect_neighbors_graph()
         continue;
       }
       if(is_not_good_enough(hex)) { continue; }
-      auto itfind_graph = find_hex_in_graph(hex);
+      graph::iterator itfind_graph = find_hex_in_graph(hex);
       if(itfind_graph == incompatibility_graph.end()) {
         // Add the hex to the graph
         itfind_graph = incompatibility_graph.insert(
@@ -6709,7 +6748,7 @@ void Recombinator_Graph::create_indirect_neighbors_graph()
       }
       // Link the hex as incompatible to all the good enough hex
       // that share the current tet
-      for(auto it_hex2 = it_tet->second.begin();
+      for(std::set<Hex *>::iterator it_hex2 = it_tet->second.begin();
           it_hex2 != it_tet->second.end(); it_hex2++) {
         Hex *hex2 = *it_hex2;
         if(hex != hex2 && !is_not_good_enough(hex2)) {
@@ -6727,7 +6766,7 @@ Recombinator_Graph::find_the_created_potential_hex(
 {
   std::pair<graph_data::const_iterator, graph_data::const_iterator> range =
     list.equal_range(hex->get_hash());
-  for(auto it = range.first; it != range.second; it++) {
+  for(graph_data::const_iterator it = range.first; it != range.second; it++) {
     Hex *candidate = it->second;
     if(candidate->same_vertices(hex)) { return it; }
   }
@@ -6743,7 +6782,9 @@ Recombinator_Graph::find_the_triangle(
     std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator,
     std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator>
     range = list.equal_range(t->get_hash());
-  for(auto it = range.first; it != range.second; it++) {
+  for(std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator it =
+        range.first;
+      it != range.second; it++) {
     PETriangle *candidate = it->second.first;
     if(candidate->same_vertices(t)) {
       it->second.second++;
@@ -6757,7 +6798,7 @@ Recombinator_Graph::citer
 Recombinator_Graph::find_the_triangle(PETriangle *t, const trimap &list)
 {
   std::pair<citer, citer> range = list.equal_range(t->get_hash());
-  for(auto it = range.first; it != range.second; it++) {
+  for(citer it = range.first; it != range.second; it++) {
     if(it->second->same_vertices(t)) return it;
   }
   return list.end();
@@ -6768,7 +6809,7 @@ Recombinator_Graph::find_the_line(PELine *t, const linemap &list)
 {
   std::pair<linemap::const_iterator, linemap::const_iterator> range =
     list.equal_range(t->get_hash());
-  for(auto it = range.first; it != range.second; it++) {
+  for(linemap::const_iterator it = range.first; it != range.second; it++) {
     if(it->second->same_vertices(t)) return it;
   }
   return list.end();
@@ -6780,7 +6821,7 @@ void Recombinator_Graph::export_direct_neighbor_table(int max)
   ss << "neighbors_table";
   ofstream out(ss.str().c_str());
 
-  auto it = ndegree.begin();
+  std::multimap<int, Hex *>::iterator it = ndegree.begin();
 
   int counter = 0;
   out << " n  neighbors_rank hex* quality" << endl;
@@ -6818,7 +6859,8 @@ void Recombinator_Graph::export_direct_neighbor_table(int max)
 void print_stats_graph(const Recombinator_Graph::graph &in)
 {
   int total = 0;
-  for(auto it = in.begin(); it != in.end(); it++) {
+  for(Recombinator_Graph::graph::const_iterator it = in.begin(); it != in.end();
+      it++) {
     total += it->second.second.size();
   }
   size_t nb_entries = in.size();
@@ -6843,7 +6885,9 @@ void Recombinator_Graph::create_losses_graph(GRegion *gr)
 // common) but DO NOT pass the compatibility tests)
 void Recombinator_Graph::create_direct_neighbors_incompatibility_graph()
 {
-  for(auto it_hex = hex_to_tet.begin(); it_hex != hex_to_tet.end(); it_hex++) {
+  for(std::map<Hex *, std::set<MElement *> >::iterator it_hex =
+        hex_to_tet.begin();
+      it_hex != hex_to_tet.end(); it_hex++) {
     Hex *hex = it_hex->first;
     if(is_not_good_enough(hex)) {
       // Why is it even there in the first place? JP
@@ -6851,7 +6895,7 @@ void Recombinator_Graph::create_direct_neighbors_incompatibility_graph()
     }
 
     // Find or create the hex data in the incompatibility graph
-    auto itfind_graph = find_hex_in_graph(hex);
+    graph::iterator itfind_graph = find_hex_in_graph(hex);
     if(itfind_graph == incompatibility_graph.end()) {
       incompatibility_graph.insert(
         make_pair(hex->get_hash(), make_pair(hex, graph_data())));
@@ -6864,12 +6908,13 @@ void Recombinator_Graph::create_direct_neighbors_incompatibility_graph()
     std::vector<Hex *> visited_hex;
     // Check compatibility with the that share an facet with hex
     const std::set<PETriangle *> &hex_faces = hex_to_faces[hex];
-    for(auto it_faces = hex_faces.begin(); it_faces != hex_faces.end();
-        it_faces++) {
+    for(std::set<PETriangle *>::const_iterator it_faces = hex_faces.begin();
+        it_faces != hex_faces.end(); it_faces++) {
       PETriangle *face = *it_faces;
 
       const std::set<Hex *> &hex_sharing_triangle = faces_to_hex[face];
-      for(auto it_neighbors = hex_sharing_triangle.begin();
+      for(std::set<Hex *>::const_iterator it_neighbors =
+            hex_sharing_triangle.begin();
           it_neighbors != hex_sharing_triangle.end(); it_neighbors++) {
         Hex *other_hex = *it_neighbors;
         if(other_hex == hex) continue;
@@ -6888,11 +6933,12 @@ void Recombinator_Graph::create_direct_neighbors_incompatibility_graph()
     // change following...
 
     const std::set<PELine *> &hex_edges = hex_to_edges[hex];
-    for(auto it_line = hex_edges.begin(); it_line != hex_edges.end();
-        it_line++) {
+    for(std::set<PELine *>::const_iterator it_line = hex_edges.begin();
+        it_line != hex_edges.end(); it_line++) {
       PELine *line = *it_line;
       const std::set<Hex *> &hex_sharing_edge = edges_to_hex[line];
-      for(auto it_neighbors = hex_sharing_edge.begin();
+      for(std::set<Hex *>::const_iterator it_neighbors =
+            hex_sharing_edge.begin();
           it_neighbors != hex_sharing_edge.end(); it_neighbors++) {
         Hex *other_hex = *it_neighbors;
         if(other_hex == hex) continue;
@@ -6961,7 +7007,8 @@ void Recombinator_Graph::add_face(
   v.push_back(b);
   v.push_back(c);
   PETriangle *q = new PETriangle(v);
-  auto itfind = find_the_triangle(q, f);
+  std::multimap<unsigned long long, pair<PETriangle *, int> >::iterator itfind =
+    find_the_triangle(q, f);
   if(itfind == f.end()) { f.insert(make_pair(q->get_hash(), make_pair(q, 1))); }
   else {
     delete q;
@@ -6975,7 +7022,7 @@ void Recombinator_Graph::add_face(MVertex *a, MVertex *b, MVertex *c, Hex *hex)
   v.push_back(b);
   v.push_back(c);
   PETriangle *q = new PETriangle(v);
-  auto itfind = find_the_triangle(q, triangular_faces);
+  citer itfind = find_the_triangle(q, triangular_faces);
   if(itfind == triangular_faces.end()) {
     itfind = triangular_faces.insert(make_pair(q->get_hash(), q));
   }
@@ -7012,7 +7059,7 @@ void Recombinator_Graph::fill_edges_table(
 
       // see if already exists or not...
       PELine *l = new PELine(edge);
-      auto itfind = find_the_line(l, edges_and_diagonals);
+      linemap::const_iterator itfind = find_the_line(l, edges_and_diagonals);
       if(itfind == edges_and_diagonals.end()) {
         itfind = edges_and_diagonals.insert(make_pair(l->get_hash(), l));
       }
@@ -7034,7 +7081,7 @@ Recombinator_Graph::find_hex_in_graph(Hex *hex)
     incompatibility_graph.equal_range(hex->get_hash());
   if(range.first == range.second) return incompatibility_graph.end();
 
-  auto it = range.first;
+  graph::iterator it = range.first;
   for(; it != range.second; it++) {
     if(it->second.first == hex) { return it; }
   }
@@ -7048,7 +7095,7 @@ Recombinator_Graph::find_hex_in_graphrow(Hex *hex, graph_data &row)
     row.equal_range(hex->get_hash());
   if(range.first == range.second) return row.end();
 
-  auto it = range.first;
+  graph_data::iterator it = range.first;
   for(; it != range.second; it++) {
     if(it->second == hex) { return it; }
   }
@@ -7057,17 +7104,17 @@ Recombinator_Graph::find_hex_in_graphrow(Hex *hex, graph_data &row)
 
 bool Recombinator_Graph::find_hex_couple_in_graph(Hex *hex, Hex *other_hex)
 {
-  auto it = find_hex_in_graph(hex);
+  graph::iterator it = find_hex_in_graph(hex);
   if(it == incompatibility_graph.end()) return false;
 
-  auto itt = find_hex_in_graphrow(other_hex, it->second.second);
+  graph_data::iterator itt = find_hex_in_graphrow(other_hex, it->second.second);
   if(itt == it->second.second.end()) return false;
   return true;
 }
 
 void Recombinator_Graph::add_graph_entry(Hex *hex, Hex *other_hex)
 {
-  auto itfind_graph = find_hex_in_graph(hex);
+  graph::iterator itfind_graph = find_hex_in_graph(hex);
 
   if(itfind_graph == incompatibility_graph.end()) {
     itfind_graph = incompatibility_graph.insert(
@@ -7086,11 +7133,13 @@ void Recombinator_Graph::compute_hex_ranks()
 {
   create_faces_connectivity();
 
-  for(auto it = hex_to_faces.begin(); it != hex_to_faces.end(); it++) {
+  for(std::map<Hex *, set<PETriangle *> >::iterator it = hex_to_faces.begin();
+      it != hex_to_faces.end(); it++) {
     Hex *hex = it->first;
     // Count the number of facets on boundary for the hex
     int boundary_count = 0.;
-    for(auto itf = it->second.begin(); itf != it->second.end(); itf++) {
+    for(set<PETriangle *>::iterator itf = it->second.begin();
+        itf != it->second.end(); itf++) {
       PETriangle *face = *itf;
       if(faces_connectivity[face] == 1) boundary_count += 1.;
     }
@@ -7105,7 +7154,9 @@ void Recombinator_Graph::compute_hex_ranks()
 // Complex way to get the number of tets around a triangular facet
 void Recombinator_Graph::create_faces_connectivity()
 {
-  for(auto it_tet = tet_to_hex.begin(); it_tet != tet_to_hex.end(); it_tet++) {
+  for(std::map<MElement *, std::set<Hex *> >::iterator it_tet =
+        tet_to_hex.begin();
+      it_tet != tet_to_hex.end(); it_tet++) {
     add_face_connectivity(it_tet->first, 0, 1, 2);
     add_face_connectivity(it_tet->first, 0, 1, 3);
     add_face_connectivity(it_tet->first, 0, 2, 3);
@@ -7123,7 +7174,7 @@ void Recombinator_Graph::add_face_connectivity(MElement *tet, int i, int j,
   v.push_back(tet->getVertex(j));
   v.push_back(tet->getVertex(k));
   t = new PETriangle(v);
-  auto itfind = find_the_triangle(t, triangular_faces);
+  citer itfind = find_the_triangle(t, triangular_faces);
   if(itfind != triangular_faces.end()) { faces_connectivity[itfind->second]++; }
   delete t;
 }
@@ -7132,13 +7183,15 @@ void Recombinator_Graph::compute_hex_ranks_blossom()
 {
   create_faces_connectivity();
 
-  for(auto it = hex_to_faces.begin(); it != hex_to_faces.end(); it++) {
+  for(map<Hex *, set<PETriangle *> >::iterator it = hex_to_faces.begin();
+      it != hex_to_faces.end(); it++) {
     Hex *hex = it->first;
     double nb_faces_on_boundary = 0.;
-    for(auto face = it->second.begin(); face != it->second.end(); face++) {
+    for(set<PETriangle *>::iterator face = it->second.begin();
+        face != it->second.end(); face++) {
       if(faces_connectivity[*face] == 1) nb_faces_on_boundary += 1.;
     }
-    auto itfind = hex_ranks.find(hex);
+    map<Hex *, vector<double> >::iterator itfind = hex_ranks.find(hex);
     if(itfind == hex_ranks.end())
       hex_ranks.insert(make_pair(hex, vector<double>(3)));
     hex_ranks[hex][0] = nb_faces_on_boundary;
@@ -7179,14 +7232,14 @@ PETriangle *Recombinator_Graph::get_triangle(MVertex *a, MVertex *b, MVertex *c)
   v.push_back(b);
   v.push_back(c);
   PETriangle *t = new PETriangle(v);
-  auto it_find_tri = find_the_triangle(t, triangular_faces);
+  citer it_find_tri = find_the_triangle(t, triangular_faces);
   delete t;
   return (it_find_tri->second);
 }
 
 bool Recombinator_Graph::is_blossom_pair(PETriangle *t1, PETriangle *t2)
 {
-  auto itfind = blossom_info.find(t1);
+  tripair::iterator itfind = blossom_info.find(t1);
   if(itfind != blossom_info.end()) {
     if(t2 == itfind->second) return true;
   }
diff --git a/contrib/domhex/yamakawa.h b/contrib/domhex/yamakawa.h
index 1ffb80da657bebba55fc1842fcdbfd69a20cf83b..71be39101d39ae6a66d260b26e1f007f31d4277c 100644
--- a/contrib/domhex/yamakawa.h
+++ b/contrib/domhex/yamakawa.h
@@ -1,4 +1,4 @@
-// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
+// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
 //
 // See the LICENSE.txt file for license information. Please report all
 // issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -75,7 +75,7 @@ public:
     else {
       cout << "Hex: unknown vertex number " << i << endl;
       throw;
-      return nullptr;
+      return NULL;
     }
   }
   const std::vector<MVertex *> &vertices() const { return vertices_; }
@@ -104,7 +104,7 @@ public:
   bool contains(MVertex *v) const { return vertex_index(v) != -1; }
   unsigned long long get_hash()
   {
-    if(hash == 0. && vertices_[0] != nullptr) { set_hash(); }
+    if(hash == 0. && vertices_[0] != NULL) { set_hash(); }
     return hash;
   }
   bool operator<(const Hex &hex) const
@@ -121,7 +121,7 @@ private:
   unsigned long long hash;
 
 public:
-  Facet() : a(nullptr), b(nullptr), c(nullptr), hash(0.)
+  Facet() : a(NULL), b(NULL), c(NULL), hash(0.)
   {
     num[0] = -1;
     num[1] = -1;
@@ -176,7 +176,7 @@ private:
   void compute_hash() { hash = a->getNum() + b->getNum(); }
 
 public:
-  Diagonal() : a(nullptr), b(nullptr), hash(){};
+  Diagonal() : a(NULL), b(NULL), hash(){};
   Diagonal(MVertex *a2, MVertex *b2) : a(a2), b(b2) { compute_hash(); }
   ~Diagonal(){};
   MVertex *get_a() const { return a; }
@@ -206,15 +206,15 @@ private:
 
 public:
   Tuple()
-    : vertex1(nullptr), vertex2(nullptr), vertex3(nullptr), element(nullptr),
-      gf(nullptr), hash(0)
+    : vertex1(NULL), vertex2(NULL), vertex3(NULL), element(NULL), gf(NULL),
+      hash(0)
   {
   }
 
   Tuple(MVertex *const a, MVertex *const b, MVertex *const c,
         MElement *const element2, GFace *const gf2)
-    : vertex1(nullptr), vertex2(nullptr), vertex3(nullptr), element(element2),
-      gf(gf2), hash(a->getNum() + b->getNum() + c->getNum())
+    : vertex1(NULL), vertex2(NULL), vertex3(NULL), element(element2), gf(gf2),
+      hash(a->getNum() + b->getNum() + c->getNum())
   {
     MVertex *tmp[3] = {a, b, c};
     std::sort(tmp, tmp + 3);
@@ -224,8 +224,8 @@ public:
   }
 
   Tuple(MVertex *const a, MVertex *const b, MVertex *const c)
-    : vertex1(nullptr), vertex2(nullptr), vertex3(nullptr), element(nullptr),
-      gf(nullptr), hash(a->getNum() + b->getNum() + c->getNum())
+    : vertex1(NULL), vertex2(NULL), vertex3(NULL), element(NULL), gf(NULL),
+      hash(a->getNum() + b->getNum() + c->getNum())
   {
     MVertex *tmp[3] = {a, b, c};
     std::sort(tmp, tmp + 3);
@@ -331,7 +331,8 @@ private:
         MVertex *b = tet->getVertex((j + 1) % 4);
         MVertex *c = tet->getVertex((j + 2) % 4);
         MVertex *d = tet->getVertex((j + 3) % 4);
-        auto it = vertex_to_vertices_.find(a);
+        std::map<MVertex *, std::set<MVertex *> >::iterator it =
+          vertex_to_vertices_.find(a);
         if(it != vertex_to_vertices_.end()) {
           it->second.insert(b);
           it->second.insert(c);
@@ -356,7 +357,8 @@ private:
       MElement *tet = region->getMeshElement(i);
       for(unsigned int j = 0; j < 4; j++) {
         MVertex *getVertex = tet->getVertex(j);
-        auto it = vertex_to_elements_.find(getVertex);
+        std::map<MVertex *, std::set<MElement *> >::iterator it =
+          vertex_to_elements_.find(getVertex);
         if(it != vertex_to_elements_.end()) { it->second.insert(tet); }
         else {
           std::set<MElement *> bin;
@@ -381,7 +383,7 @@ public:
   typedef std::map<MVertex *, std::set<MVertex *> > Vertex2Vertices;
   typedef std::map<MVertex *, std::set<MElement *> > Vertex2Elements;
 
-  Recombinator() : current_region(nullptr), hex_threshold_quality(0.6){};
+  Recombinator() : current_region(NULL), hex_threshold_quality(0.6){};
   virtual ~Recombinator();
 
   virtual void execute();
diff --git a/contrib/mobile/Android/app/build.gradle b/contrib/mobile/Android/app/build.gradle
index fc4758b2ed363291895ba843945903cadb93bc1b..7c3bf89d9527be6ddcf3f66e18d602ead2e75962 100644
--- a/contrib/mobile/Android/app/build.gradle
+++ b/contrib/mobile/Android/app/build.gradle
@@ -5,7 +5,7 @@ android {
 
     defaultConfig {
         applicationId "org.geuz.onelab"
-        minSdkVersion 16
+        minSdkVersion 23
         targetSdkVersion 29
         ndk.abiFilters "arm64-v8a"
     }
diff --git a/contrib/mobile/Android/app/src/main/AndroidManifest.xml b/contrib/mobile/Android/app/src/main/AndroidManifest.xml
index 078345354dbe1608fe7688592d802a88597f8195..8af3a4e70df0c214c517dc96ca98bc117d8703a9 100644
--- a/contrib/mobile/Android/app/src/main/AndroidManifest.xml
+++ b/contrib/mobile/Android/app/src/main/AndroidManifest.xml
@@ -1,10 +1,10 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="org.geuz.onelab"
           android:versionName="2.3.4"
-          android:versionCode="53"
+          android:versionCode="58"
           android:installLocation="auto" >
 
-  <uses-sdk android:minSdkVersion="16"
+  <uses-sdk android:minSdkVersion="23"
             android:targetSdkVersion="29" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.VIBRATE"/>
diff --git a/contrib/mobile/Android/app/src/main/java/org/geuz/onelab/AboutActivity.java b/contrib/mobile/Android/app/src/main/java/org/geuz/onelab/AboutActivity.java
index 44913c3a5b3d0e7c2f2e3104d460cddd8ef466c0..029db83b54e8098f74fb6d425482941af6e34cdd 100644
--- a/contrib/mobile/Android/app/src/main/java/org/geuz/onelab/AboutActivity.java
+++ b/contrib/mobile/Android/app/src/main/java/org/geuz/onelab/AboutActivity.java
@@ -59,7 +59,7 @@ public class AboutActivity extends Activity {
         _webview.loadDataWithBaseURL(
           "",
           "<html><head><style type=\"text/css\">" + css +
-            " h3 { text-align: center; } </style></head><h3>Onelab/Mobile</h3> <h4>Running an existing model</h4> <p> The list of available models appears when you launch the app. Selecting a model will load it. You can then press <b>Run</b> to launch a simulation with the default set of parameters. When available, additional information about a model can be obtained by long-pressing on the model description and selecting <b>Visit model website</b>.</p> <h4>Modifying a model</h4> <p>To run a model with different parameters, press <b>Parameters</b> and modify any of the presets. Then press <b>Run</b> again: all the simulation steps will be performed with the new parameter values. To restore the preset parameters values, press <b>Reset</b>. </p> <p> Advanced users can also directly edit the model input files: long-press on the model description and select <b>Edit model files</b>. </p> <p> To free up space, temporary model files (meshes, solution files) can be removed by long-pressing on the model description and selecting <b>Clear results</b>. </p> <p> To completey remove a model, long-press on the model description and select <b>Remove</b>. </p> <h4>Sharing a model</h4> <p> To share a model by email, long-press on the model description and select <b>Email model files</b>. </p> <h4>Installing a new model</h4> <p> To install a new model: <ol> <li>Put all the model files (.pro, .geo) in a directory, which should also contain a file named <code>infos.xml</code> with the model information: <pre>\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;models&gt;\n  &lt;model&gt;\n    &lt;title&gt;Model title&lt;/title&gt;\n    &lt;summary&gt;Model summary&lt;/summary&gt;\n    &lt;file type=\"pro\"&gt;main_pro_file.pro&lt;/file&gt;\n    &lt;preview type=\"png\"&gt;128x128_pixel_screenshot.png&lt;/preview&gt;\n    &lt;url&gt;http://model_website.com&lt;/url&gt;\n  &lt;/model&gt;\n&lt;/models&gt;\n</pre><li>Zip the directory. <li>Open the .zip file on your device, e.g. by copying it on an SD card, through Google Drive or by  emailing it to yourself and opening the attachment; or by putting it  on a web server and downloading the file on the device with Chrome. <li>Refresh the list of models: the new model will be extracted  alongside Onelab/Mobile\'s built-in models.</ol> <p style=\"padding-top: 2em;\">Visit <a href=\"http://onelab.info/\">http://onelab.info/</a> for more information.</p> </body></html>",
+            " h3 { text-align: center; } </style></head><h3>Onelab/Mobile</h3> <h4>Running an existing model</h4> <p> The list of available models appears when you launch the app. Selecting a model will load it. You can then press <b>Run</b> to launch a simulation with the default set of parameters. When available, additional information about a model can be obtained by long-pressing on the model description and selecting <b>Visit model website</b>.</p> <h4>Modifying a model</h4> <p>To run a model with different parameters, press <b>Parameters</b> and modify any of the presets. Then press <b>Run</b> again: all the simulation steps will be performed with the new parameter values. To restore the preset parameters values, press <b>Reset</b>. </p> <p> Advanced users can also directly edit the model input files: long-press on the model description and select <b>Edit model files</b>. </p> <p> To free up space, temporary model files (meshes, solution files) can be removed by long-pressing on the model description and selecting <b>Clear results</b>. </p> <p> To completey remove a model, long-press on the model description and select <b>Remove</b>. </p> <h4>Sharing a model</h4> <p> To share a model by email, long-press on the model description and select <b>Email model files</b>. </p> <h4>Installing a new model</h4> <p> To install a new model: <ol> <li>Put all the model files (.pro, .geo) in a directory, which should also contain a file named <code>infos.xml</code> with the model information: <pre>\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;models&gt;\n  &lt;model&gt;\n    &lt;title&gt;Model title&lt;/title&gt;\n    &lt;summary&gt;Model summary&lt;/summary&gt;\n    &lt;file type=\"pro\"&gt;main_pro_file.pro&lt;/file&gt;\n    &lt;preview type=\"png\"&gt;128x128_pixel_screenshot.png&lt;/preview&gt;\n    &lt;url&gt;http://model_website.com&lt;/url&gt;\n  &lt;/model&gt;\n&lt;/models&gt;\n</pre><li>Zip the directory. <li>Open the .zip file on your device, e.g. by copying it on an SD card, through Google Drive or by  emailing it to yourself and opening the attachment; or by putting it  on a web server and downloading the file on the device with Chrome. <li>Refresh the list of models: the new model will be extracted  alongside Onelab/Mobile\'s built-in models.</ol> <p style=\"padding-top: 2em;\">Visit <a href=\"https://onelab.info/\">https://onelab.info/</a> for more information.</p> </body></html>",
           "text/html", "UTF-8", "");
       }
       else {
@@ -105,7 +105,7 @@ public class AboutActivity extends Activity {
         "<p>Copyright (C) 2014-2021 Christophe Geuzaine and Maxime Graulich, ";
       aboutOnelab += "University of Li&egrave;ge</p>";
       aboutOnelab +=
-        "<p>Visit <a href=\"http://onelab.info/\">http://onelab.info/</a> ";
+        "<p>Visit <a href=\"https://onelab.info/\">https://onelab.info/</a> ";
       aboutOnelab += "for more information</p>";
       aboutOnelab +=
         "<p>&nbsp;</p><p>This version of Onelab/Mobile contains:</p></center>";
diff --git a/contrib/mobile/Android/build.gradle b/contrib/mobile/Android/build.gradle
index 97f835e50c66183f5ff1927148ed88fad7e98afa..fc82e6802c828bd7928343f5c4552fe11c2a01ab 100644
--- a/contrib/mobile/Android/build.gradle
+++ b/contrib/mobile/Android/build.gradle
@@ -5,7 +5,7 @@ buildscript {
        jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.3'
+        classpath 'com.android.tools.build:gradle:4.0.0'
     }
 }
 
diff --git a/contrib/mobile/drawContext.cpp b/contrib/mobile/drawContext.cpp
index 4fb577ea993acb5de162b5b5acf441a35a8b976e..961bc7f28f027f14ca8578fada738e31a7f23749 100644
--- a/contrib/mobile/drawContext.cpp
+++ b/contrib/mobile/drawContext.cpp
@@ -47,8 +47,8 @@ drawContext::drawContext(float fontFactor, bool retina)
 
 static void checkGlError(const char *op)
 {
-  // for (GLint error = glGetError(); error; error = glGetError())
-  //  Msg::Error("%s: glError (0x%x)",op,error);
+  for (GLint error = glGetError(); error; error = glGetError())
+    printf("*** %s: glError (0x%x)\n", op, error);
 }
 
 void drawContext::load(std::string filename)
@@ -1175,7 +1175,11 @@ int onelab_cb(std::string action)
 
   if(action == "reset") {
     onelab::server::instance()->clear();
-    onelabUtils::runGmshClient(action, true);
+    try {
+      onelabUtils::runGmshClient(action, true);
+    } catch(...) {
+      printf("*** runGmshClient() exception\n");
+    }
     action = "check";
   }
 
@@ -1189,7 +1193,11 @@ int onelab_cb(std::string action)
 
   do {
     // run Gmsh (only if necessary)
-    onelabUtils::runGmshClient(action, true);
+    try {
+      onelabUtils::runGmshClient(action, true);
+    } catch(...) {
+      printf("*** runGmshClient() exception\n");
+    }
 
     // run GetDP (always -- to not confuse the user)
     onelab::string o("GetDP/Action", action);
@@ -1225,11 +1233,12 @@ int onelab_cb(std::string action)
     try {
       getdp(args, onelab::server::instance());
     } catch(...) {
-      Msg::Error("Calculation was aborted");
+      printf("*** getdp() exception\n");
     }
   } while(action == "compute" && !onelabStop &&
           (onelabUtils::incrementLoop("3") || onelabUtils::incrementLoop("2") ||
            onelabUtils::incrementLoop("1")));
+
   onelabStop = false;
   locked = false;
   return onelab::server::instance()->getChanged();
diff --git a/contrib/mobile/iOS/Onelab/AboutViewController.mm b/contrib/mobile/iOS/Onelab/AboutViewController.mm
index aea6fba0fc6b57232664bc32548e12659f2bdf90..c28f35b787034c778345dfe113790248129bf13a 100644
--- a/contrib/mobile/iOS/Onelab/AboutViewController.mm
+++ b/contrib/mobile/iOS/Onelab/AboutViewController.mm
@@ -78,15 +78,15 @@
                     @"h3>Version %@<p>Copyright (C) 2014-2021 Christophe "
                     @"Geuzaine and Maxime Graulich, University of "
                     @"Li&egrave;ge</p><p>Visit <a "
-                    @"href=\"http://onelab.info/\">http://onelab.info/</a> for "
+                    @"href=\"https://onelab.info/\">https://onelab.info/</a> for "
                     @"more information</p><p style=\"padding-top: 35px;\">This "
                     @"version of Onelab/Mobile "
                     @"contains:</p><h3>Gmsh</h3>Version %s (<i>Build date:</i> "
                     @"%s)<p>Copyright (C) 1997-2021 Christophe Geuzaine and "
                     @"Jean-Fran&ccedil;ois Remacle</p><p><a "
-                    @"href=\"http://geuz.org/gmsh/CREDITS.txt\">Credits</"
+                    @"href=\"https://gmsh.info/CREDITS.txt\">Credits</"
                     @"a> and <a "
-                    @"href=\"http://geuz.org/gmsh/LICENSE.txt\">licensing "
+                    @"href=\"https://gmsh.info/LICENSE.txt\">licensing "
                     @"information</a></p><p><i>Build options:</i> "
                     @"%s</p><p>Visit <a "
                     @"href=\"https://gmsh.info/\">https://gmsh.info</a> for more "
@@ -94,9 +94,9 @@
                     @"date:</i> %s)<p>Copyright (C) 1997-2021 Patrick Dular "
                     @"and Christophe Geuzaine, University of "
                     @"Li&egrave;ge</p><p><a "
-                    @"href=\"http://geuz.org/getdp/CREDITS.txt\">Credits</"
+                    @"href=\"https://getdp.info/CREDITS.txt\">Credits</"
                     @"a> and <a "
-                    @"href=\"http://geuz.org/getdp/LICENSE.txt\">licensing "
+                    @"href=\"https://getdp.info/LICENSE.txt\">licensing "
                     @"information</a></p><p><i>Build options:</i> "
                     @"%s</p><p>Visit <a "
                     @"href=\"https://getdp.info\">https://getdp.info</a> for "
@@ -160,7 +160,7 @@
                     @"Safari. <li>Refresh the list of models: the new model "
                     @"will be extracted  alongside Onelab/Mobile\'s built-in "
                     @"models.</ol> <p style=\"padding-top: 2em;\">Visit <a "
-                    @"href=\"http://onelab.info/\">http://onelab.info/</a> for "
+                    @"href=\"https://onelab.info/\">https://onelab.info/</a> for "
                     @"more information.</p> </body></html>",
                     css]
              baseURL:[[NSBundle mainBundle] bundleURL]];
diff --git a/contrib/mobile/iOS/Onelab/Onelab-Info.plist b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
index 4caada0751170c69ee6c81054f98660fee4c2217..39d0b292eaf5b5f0077a057718c4cbfdd842f59b 100644
--- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist
+++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
@@ -30,7 +30,7 @@
     <key>CFBundleName</key><string>${PRODUCT_NAME}</string>
     <key>CFBundlePackageType</key><string>APPL</string>
     <key>CFBundleShortVersionString</key><string>2.3.4</string>
-    <key>CFBundleVersion</key><string>53</string>
+    <key>CFBundleVersion</key><string>56</string>
     <key>CFBundleSignature</key><string>????</string>
     <key>LSRequiresIPhoneOS</key><true/>
     <key>UIFileSharingEnabled</key><true/>
diff --git a/contrib/mobile/iOS/Onelab/OptionsViewController.mm b/contrib/mobile/iOS/Onelab/OptionsViewController.mm
index 0d73bd302f4c4255f16a48f8afe7d3c6af955d91..2e8b4628067a6c20b9a8880e5ab34475ee1a2933 100644
--- a/contrib/mobile/iOS/Onelab/OptionsViewController.mm
+++ b/contrib/mobile/iOS/Onelab/OptionsViewController.mm
@@ -138,7 +138,8 @@
 - (UITableViewCell *)tableView:(UITableView *)tableView
          cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
-  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
+  UITableViewCell *cell =
+    [tableView dequeueReusableCellWithIdentifier:@"postproCell"];
   if(cell == nil) {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"postproCell"];
@@ -148,88 +149,79 @@
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"postproCell"];
   }
+
+  [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
   [cell
     setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.x,
                         tableView.frame.size.width, cell.frame.size.height)];
   switch(indexPath.section) {
   case 0: {
-    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
-    UISwitch *showHideOptions =
+    UISwitch *showHide =
       [[UISwitch alloc] initWithFrame:CGRectMake(15, 6.5, 100, 30)];
-    UILabel *lblOptions = [[UILabel alloc]
-      initWithFrame:CGRectMake(25 + (showHideOptions.frame.size.width), 8,
+    UILabel *label = [[UILabel alloc]
+      initWithFrame:CGRectMake(25 + (showHide.frame.size.width), 8,
                                (tableView.frame.size.width -
-                                (showHideOptions.frame.size.width) - 50),
+                                (showHide.frame.size.width) - 50),
                                30)];
     // set font size at 90% of default size
-    lblOptions.font = [lblOptions.font fontWithSize:(0.9 * lblOptions.font.pointSize)];
+    label.font =
+      [label.font fontWithSize:(0.9 * label.font.pointSize)];
 
     if(indexPath.row == 0) {
-      [lblOptions setText:@"Show geometry points"];
-      [showHideOptions setOn:(CTX::instance()->geom.points)];
-      [showHideOptions addTarget:self
+      [label setText:@"Show geometry points"];
+      [showHide setOn:(CTX::instance()->geom.points)];
+      [showHide addTarget:self
                           action:@selector(setShowGeomPoints:)
                 forControlEvents:UIControlEventValueChanged];
     }
     else if(indexPath.row == 1) {
-      [lblOptions setText:@"Show geometry curves"];
-      [showHideOptions setOn:(CTX::instance()->geom.curves)];
-      [showHideOptions addTarget:self
+      [label setText:@"Show geometry curves"];
+      [showHide setOn:(CTX::instance()->geom.curves)];
+      [showHide addTarget:self
                           action:@selector(setShowGeomCurves:)
                 forControlEvents:UIControlEventValueChanged];
     }
     else if(indexPath.row == 2) {
-      [lblOptions setText:@"Show mesh surface edges"];
-      [showHideOptions setOn:(CTX::instance()->mesh.surfaceEdges)];
-      [showHideOptions addTarget:self
+      [label setText:@"Show mesh surface edges"];
+      [showHide setOn:(CTX::instance()->mesh.surfaceEdges)];
+      [showHide addTarget:self
                           action:@selector(setShowMeshSurfaceEdges:)
                 forControlEvents:UIControlEventValueChanged];
     }
     else if(indexPath.row == 3) {
-      [lblOptions setText:@"Show mesh volume edges"];
-      [showHideOptions setOn:CTX::instance()->mesh.volumeEdges];
-      [showHideOptions addTarget:self
+      [label setText:@"Show mesh volume edges"];
+      [showHide setOn:CTX::instance()->mesh.volumeEdges];
+      [showHide addTarget:self
                           action:@selector(setShowMeshVolumeEdges:)
                 forControlEvents:UIControlEventValueChanged];
     }
-    [cell addSubview:showHideOptions];
-    [cell addSubview:lblOptions];
+    [cell.contentView addSubview:showHide];
+    [cell.contentView addSubview:label];
   } break;
   case 1: {
-    NSArray *rows = [tableView indexPathsForVisibleRows];
-    for(NSIndexPath *mIndexpath in rows)
-      if(![mIndexpath isEqual:indexPath]) {
-        UITableViewCell *tmp = [tableView cellForRowAtIndexPath:indexPath];
-        for(UIView *tmpv in tmp.subviews)
-          for(UIView *v in tmpv.subviews)
-            if([v isKindOfClass:[UISwitch class]])
-              [(UISwitch *)v setOn:PView::list[v.tag]->getOptions()->visible];
-      }
-
-    [cell setSelectionStyle:UITableViewCellSelectionStyleGray];
     int i = (int)(PView::list.size() - 1 - indexPath.row);
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
     UISwitch *showHide =
       [[UISwitch alloc] initWithFrame:CGRectMake(15, 6.5, 100, 30)];
-    UILabel *lbl = [[UILabel alloc]
+    UILabel *label = [[UILabel alloc]
       initWithFrame:CGRectMake(25 + (showHide.frame.size.width), 8,
                                (tableView.frame.size.width -
                                 showHide.frame.size.width - 50),
                                30)];
     // set font size at 90% of default size
-    lbl.font = [lbl.font fontWithSize:(0.9 * lbl.font.pointSize)];
+    label.font = [label.font fontWithSize:(0.9 * label.font.pointSize)];
     [showHide setOn:(PView::list[i]->getOptions()->visible == 1)];
     [showHide setTag:i];
     [showHide addTarget:self
                  action:@selector(PViewVisible:)
        forControlEvents:UIControlEventValueChanged];
-    [lbl setBackgroundColor:[UIColor clearColor]];
-    [lbl setText:[Utils getStringFromCString:PView::list[i]
+    [label setBackgroundColor:[UIColor clearColor]];
+    [label setText:[Utils getStringFromCString:PView::list[i]
                                                ->getData()
                                                ->getName()
                                                .c_str()]];
-    [cell addSubview:showHide];
-    [cell addSubview:lbl];
+    [cell.contentView addSubview:showHide];
+    [cell.contentView addSubview:label];
   } break;
   }
   return cell;
diff --git a/contrib/mobile/iOS/Onelab/ParametersViewController.mm b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
index 5b181d414c2397e16e254a042c0b5631e04a13e9..14ac83284526a64f9d883ecb85b7c00abf4f3c90 100644
--- a/contrib/mobile/iOS/Onelab/ParametersViewController.mm
+++ b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
@@ -411,25 +411,25 @@ NSInteger compareParameter(id p1, id p2, void *context)
          cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   // get the param with his name
-  static NSString *CellIdentifier = @"parameterCell";
   if(indexPath.section >= _sections.count)
     return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                  reuseIdentifier:CellIdentifier];
+                                  reuseIdentifier:@"parameterCell"];
   NSMutableArray *sectionContent =
     [_sections objectAtIndex:[indexPath section]];
   if(indexPath.row >= sectionContent.count)
     return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                  reuseIdentifier:CellIdentifier];
+                                  reuseIdentifier:@"parameterCell"];
   Parameter *tmp = [sectionContent objectAtIndex:[indexPath row]];
-
-  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
-  if(cell == nil)
+  UITableViewCell *cell =
+    [tableView dequeueReusableCellWithIdentifier:@"parameterCell"];
+  if(cell == nil) {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                  reuseIdentifier:CellIdentifier];
+                                  reuseIdentifier:@"parameterCell"];
+  }
   else {
     cell = nil;
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                  reuseIdentifier:CellIdentifier];
+                                  reuseIdentifier:@"parameterCell"];
   }
 
   float lm = 20.; // left margin
@@ -437,39 +437,48 @@ NSInteger compareParameter(id p1, id p2, void *context)
   float h2 = cell.frame.size.height / 2.;
 
   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
-  [tmp setLabelFrame:CGRectMake(lm, 5, ww, h2)];
-  [cell addSubview:[tmp getLabel]];
   if([tmp isKindOfClass:[ParameterStringList class]]) {
     ParameterStringList *param = (ParameterStringList *)tmp;
-    [param setFrame:CGRectMake(lm, h2 + 10, ww, h2)];
-    [cell addSubview:[param getUIView]];
+    [param setLabelFrame:CGRectMake(lm, 5, ww, h2)];
+    [param setFrame:CGRectMake(lm, h2 + 15, ww, h2)];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getUIView]];
   }
   else if([tmp isKindOfClass:[ParameterNumberList class]]) {
     ParameterNumberList *param = (ParameterNumberList *)tmp;
-    [param setFrame:CGRectMake(lm, h2 + 10, ww, h2)];
-    [cell addSubview:[param getUIView]];
+    [param setLabelFrame:CGRectMake(lm, 5, ww, h2)];
+    [param setFrame:CGRectMake(lm, h2 + 15, ww, h2)];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getUIView]];
   }
   else if([tmp isKindOfClass:[ParameterNumberCheckbox class]]) {
     ParameterNumberCheckbox *param = (ParameterNumberCheckbox *)tmp;
     [param
       setLabelFrame:CGRectMake(85, 12, tableView.frame.size.width - 100, h2)];
-    [param setFrame:CGRectMake(lm, 6.5, ww, cell.frame.size.height)];
-    [cell addSubview:[param getCheckbox]];
+    [param setFrame:CGRectMake(lm, 6.5, ww, cell.frame.size.height - 6.5)];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getCheckbox]];
   }
   else if([tmp isKindOfClass:[ParameterNumberStepper class]]) {
     ParameterNumberStepper *param = (ParameterNumberStepper *)tmp;
+    [param setLabelFrame:CGRectMake(lm, 5, ww, h2)];
     [param setFrame:CGRectMake(lm, h2 + 10, ww, h2)];
-    [cell addSubview:[param getStepper]];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getStepper]];
   }
   else if([tmp isKindOfClass:[ParameterNumberRange class]]) {
     ParameterNumberRange *param = (ParameterNumberRange *)tmp;
-    [param setFrame:CGRectMake(lm, h2 + 10, ww, h2)];
-    [cell addSubview:[param getSlider]];
+    [param setLabelFrame:CGRectMake(lm, 5, ww, h2)];
+    [param setFrame:CGRectMake(lm, h2 + 15, ww, h2)];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getSlider]];
   }
   else if([tmp isKindOfClass:[ParameterNumberTextbox class]]) {
     ParameterNumberTextbox *param = (ParameterNumberTextbox *)tmp;
+    [param setLabelFrame:CGRectMake(lm, 5, ww, h2)];
     [param setFrame:CGRectMake(lm, h2 + 10, ww, h2)];
-    [cell addSubview:[param getTextbox]];
+    [cell.contentView addSubview:[param getLabel]];
+    [cell.contentView addSubview:[param getTextbox]];
   }
 
   return cell;
diff --git a/contrib/mobile/utils/android_build.sh b/contrib/mobile/utils/android_build.sh
index c6070a9685e1516ef86503fced749d30891289a9..2fdcae4f59f737a56ee68cbc5c1cde56f41c493b 100755
--- a/contrib/mobile/utils/android_build.sh
+++ b/contrib/mobile/utils/android_build.sh
@@ -4,7 +4,7 @@ appname=Onelab
 enable_occ=1
 enable_simulator=0
 version=2.3.4
-build=53 # must be incremented for each submitted build
+build=58 # must be incremented for each submitted build
 
 while [[ $# -gt 0 ]]; do
   key="$1"
diff --git a/contrib/mobile/utils/ios_build.sh b/contrib/mobile/utils/ios_build.sh
index d119a5705cd8c7e954712a610c73795cf93da4d1..82fcdf7d7ef3e94988550e1b268bffcd74dbccbc 100755
--- a/contrib/mobile/utils/ios_build.sh
+++ b/contrib/mobile/utils/ios_build.sh
@@ -6,7 +6,7 @@ enable_simulator=0
 #buildtype=Debug
 buildtype=Release
 version=2.3.4
-build=53 # must be incremented for each submitted build
+build=56 # must be incremented for each submitted build
 
 while [[ $# -gt 0 ]]; do
   key="$1"
@@ -46,7 +46,7 @@ iphoneos_version_min="-target arm64-apple-ios9.0" # iOS 13 SDK
 if [ $enable_simulator != 0 ]; then
   ios=iossimulator
   iphoneos=iphonesimulator
-  iphoneos_version_min=
+  iphoneos_version_min="-target x86_64-apple-ios9.0" # iOS 14 SDK
 fi
 
 gmsh_git="${HOME}/src/gmsh/"
@@ -126,6 +126,8 @@ if [ $enable_simulator != 0 ]; then
   # change blas/lapack for simulator
   sed -e "s|lastKnownFileType = archive.ar; name = libf2cblas.a; path = ${appname}/frameworks/petsc.framework/libf2cblas.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_git/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj;
   sed -e "s|lastKnownFileType = archive.ar; name = libf2clapack.a; path = ${appname}/frameworks/petsc.framework/libf2clapack.a;|lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework;|" -i "" $gmsh_git/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj;
+  # change VALID_ARCHS
+  sed -e "s|VALID_ARCHS = arm64|VALID_ARCHS = x86_64|" -i "" $gmsh_git/contrib/mobile/build_iossimulator_${appname}/${appname}/${appname}.xcodeproj/project.pbxproj;
 fi
 
 # TODO:
diff --git a/contrib/onelab/python/onelab.py b/contrib/onelab/python/onelab.py
index fdf5c7d45d12753b79a4da8f700b23f441e3f4a0..026c3b2d05486838ae446ab62170459036b1c7ae 100755
--- a/contrib/onelab/python/onelab.py
+++ b/contrib/onelab/python/onelab.py
@@ -126,6 +126,8 @@ class client :
   _GMSH_PARSE_STRING = 21
   _GMSH_PARAMETER = 23
   _GMSH_PARAMETER_QUERY = 24
+  _GMSH_PARAMETER_QUERY_ALL = 25
+  _GMSH_PARAMETER_QUERY_END = 26
   _GMSH_CONNECT = 27
   _GMSH_OLPARSE = 28
   _GMSH_PARAMETER_NOT_FOUND = 29
@@ -194,6 +196,16 @@ class client :
     elif t == self._GMSH_PARAMETER_NOT_FOUND and warn_if_not_found :
       print ('Unknown parameter %s' %(param.name))
 
+  def _getAllParameters(self, type, lst) :
+    if not self.socket :
+      return
+    self._send(self._GMSH_PARAMETER_QUERY_ALL,
+               _parameter(type, name='dummy').tochar())
+    (t, msg) = self._receive()
+    while t == self._GMSH_PARAMETER_QUERY_ALL:
+      lst.append(_parameter(type, name='dummy').fromchar(msg))
+      (t, msg) = self._receive()
+
   def defineNumber(self, name, **param):
     if 'value' in param :
       param["values"] = [param["value"]]
@@ -289,6 +301,16 @@ class client :
     self._getParameter(param, warn_if_not_found)
     return param.values
 
+  def getAllParameters(self):
+    lst = []
+    self._getAllParameters('number', lst)
+    self._getAllParameters('string', lst)
+    dic = {}
+    for p in lst:
+      dic[p.name] = {a[0]: getattr(p, a[0])
+                     for a in _parameter._members[p.type]}
+    return dic
+
   def getNumberChoices(self, name, warn_if_not_found=True):
     param = _parameter('number', name=name)
     self._getParameter(param, warn_if_not_found)
diff --git a/demos/api/custom_gui.cpp b/demos/api/custom_gui.cpp
index 9d4824ad5e2ffc25e0f7f4eb8efeacaf43e24c42..762dcfc70aed2b2d872f85c15e5469c4d1b8134c 100644
--- a/demos/api/custom_gui.cpp
+++ b/demos/api/custom_gui.cpp
@@ -1,5 +1,6 @@
 #include <cmath>
 #include <thread>
+#include <set>
 #include "gmsh.h"
 
 // This example shows how to implement a custom user interface running
@@ -45,6 +46,49 @@ void compute(const std::string &arg)
   gmsh::fltk::awake("update");
 }
 
+bool checkForEvent(const std::string &parameters)
+{
+  std::vector<std::string> action;
+  gmsh::onelab::getString("ONELAB/Action", action);
+  if(action.empty()) {
+  }
+  else if(action[0] == "should compute") {
+    gmsh::onelab::setString("ONELAB/Action", {""});
+    gmsh::onelab::setString("ONELAB/Button", {"Stop!", "should stop"});
+    // force interface update (to show the new button label)
+    gmsh::fltk::update();
+    // start computationally intensive calculations in their own threads
+    std::vector<double> v;
+    gmsh::onelab::getNumber("My App/Number of threads", v);
+    int n = v.size() ? static_cast<int>(v[0]) : 1;
+    for(unsigned int i = 0; i < n; i++) {
+      std::thread t(compute, "My App/Thread " + std::to_string(i + 1));
+      t.detach();
+    }
+  }
+  else if(action[0] == "should stop") {
+    stop_computation = true;
+  }
+  else if(action[0] == "done computing") {
+    // should not detach threads, and join them all here
+    gmsh::onelab::setString("ONELAB/Action", {""});
+    gmsh::onelab::setString("ONELAB/Button", {"Do it!", "should compute"});
+    gmsh::fltk::update();
+    stop_computation = false;
+  }
+  else if(action[0] == "reset") {
+    // user clicked on "Reset database"
+    gmsh::onelab::setString("ONELAB/Action", {""});
+    gmsh::onelab::set(parameters);
+    gmsh::fltk::update();
+  }
+  else if(action[0] == "check") {
+    // could perform action here after each change in ONELAB parameters,
+    // e.g. rebuild a CAD model, update other parameters, ...
+  }
+  return true;
+}
+
 int main(int argc, char **argv)
 {
   gmsh::initialize();
@@ -69,55 +113,12 @@ int main(int argc, char **argv)
   gmsh::onelab::set(parameters);
 
   // create the graphical user interface
-  gmsh::fltk::initialize();
-
-  while(1) {
-    // check if GUI has been closed
-    if(!gmsh::fltk::isAvailable()) break;
-
-    // wait for an event
-    gmsh::fltk::wait();
-
-    // check if the user clicked on the custom ONELAB button by examining the
-    // value of the "ONELAB/Action" parameter
-    std::vector<std::string> action;
-    gmsh::onelab::getString("ONELAB/Action", action);
-    if(action.empty()) { continue; }
-    else if(action[0] == "should compute") {
-      gmsh::onelab::setString("ONELAB/Action", {""});
-      gmsh::onelab::setString("ONELAB/Button", {"Stop!", "should stop"});
-      // force interface update (to show the new button label)
-      gmsh::fltk::update();
-      // start computationally intensive calculations in their own threads
-      std::vector<double> v;
-      gmsh::onelab::getNumber("My App/Number of threads", v);
-      int n = v.size() ? static_cast<int>(v[0]) : 1;
-      for(unsigned int i = 0; i < n; i++) {
-        std::thread t(compute, "My App/Thread " + std::to_string(i + 1));
-        t.detach();
-      }
-    }
-    else if(action[0] == "should stop") {
-      stop_computation = true;
-    }
-    else if(action[0] == "done computing") {
-      // should not detach threads, and join them all here
-      gmsh::onelab::setString("ONELAB/Action", {""});
-      gmsh::onelab::setString("ONELAB/Button", {"Do it!", "should compute"});
-      gmsh::fltk::update();
-      stop_computation = false;
-    }
-    else if(action[0] == "reset") {
-      // user clicked on "Reset database"
-      gmsh::onelab::setString("ONELAB/Action", {""});
-      gmsh::onelab::set(parameters);
-      gmsh::fltk::update();
-    }
-    else if(action[0] == "check") {
-      // could perform action here after each change in ONELAB parameters,
-      // e.g. rebuild a CAD model, update other parameters, ...
-      continue;
-    }
+  std::set<std::string> args(argv, argv + argc);
+  if(!args.count("-nopopup")) {
+    gmsh::fltk::initialize();
+    // wait for events until the GUI is closed
+    while(gmsh::fltk::isAvailable() && checkForEvent(parameters))
+      gmsh::fltk::wait();
   }
 
   gmsh::finalize();
diff --git a/demos/api/custom_gui.py b/demos/api/custom_gui.py
index df5232e8bdda0a0d548b6138bc7a7a2e6b2c13da..def58f26b4cb9413f0745e70bce18eacf668b818 100644
--- a/demos/api/custom_gui.py
+++ b/demos/api/custom_gui.py
@@ -70,23 +70,13 @@ def compute(arg):
     return
 
 
-# create the graphical user interface
-if '-nopopup' not in sys.argv:
-    gmsh.fltk.initialize()
-
-while 1:
-    # check if GUI has been closed
-    if gmsh.fltk.isAvailable() == 0:
-        break
-
-    # wait for an event
-    gmsh.fltk.wait()
-
-    # check if the user clicked on the custom ONELAB button by examining the
-    # value of the "ONELAB/Action" parameter
+def checkForEvent():
+    # check if an action is requested
     action = gmsh.onelab.getString("ONELAB/Action")
+    global stop_computation
     if len(action) < 1:
-        continue
+        # no action requested
+        pass
     elif action[0] == "should compute":
         gmsh.onelab.setString("ONELAB/Action", [""])
         gmsh.onelab.setString("ONELAB/Button", ["Stop!", "should stop"])
@@ -113,6 +103,15 @@ while 1:
     elif action[0] == "check":
         # could perform action here after each change in ONELAB parameters,
         # e.g. rebuild a CAD model, update other parameters, ...
-        continue
+        pass
+    return 1
+
+
+# create the graphical user interface
+if "-nopopup" not in sys.argv:
+    gmsh.fltk.initialize()
+    # wait for events until the GUI is closed
+    while gmsh.fltk.isAvailable() and checkForEvent():
+        gmsh.fltk.wait()
 
 gmsh.finalize()
diff --git a/demos/api/onelab_data.py b/demos/api/onelab_data.py
deleted file mode 100644
index 4279a7fc70f2c819682b1d6b1adf2842c238b994..0000000000000000000000000000000000000000
--- a/demos/api/onelab_data.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import gmsh
-import sys
-
-if len(sys.argv) < 2:
-    print("Usage: " + sys.argv[0] + " file [options]")
-    exit(0)
-
-gmsh.initialize()
-
-gmsh.open(sys.argv[1])
-
-# attempts to run a client selected when opening the file (e.g. a .pro file)
-gmsh.onelab.run()
-
-json = gmsh.onelab.get()
-print(json)
-
-gmsh.finalize()
diff --git a/demos/api/onelab_run.py b/demos/api/onelab_run.py
new file mode 100644
index 0000000000000000000000000000000000000000..75c0e1838e21a6a6512715142184230a879be6f6
--- /dev/null
+++ b/demos/api/onelab_run.py
@@ -0,0 +1,37 @@
+import gmsh
+import threading
+import sys
+
+# This shows how ONELAB clients that communicate with the ONELAB server through
+# sockets can be executed using the Gmsh API, by explicitely specying the
+# command to run the client
+
+# One such example is the GetDP finite element solver (https://getdp.info).
+
+# Provided that the getdp executable is in your path, running this example in
+# the getdp/demos directory will launch two getdp clients concurrently, that
+# will both exchange data with the ONELAB server
+
+gmsh.initialize()
+
+# set a parameter in the onelab database
+gmsh.onelab.setNumber('Parameters/Materials/hc', [920000. / 2.])
+
+# run the getdp client (which will connect through a socket), by forcing the
+# value of murCore
+def compute(name, value):
+    cmd = 'getdp magnet.pro -solve Magnetostatics_phi -setnumber murCore {}'
+    gmsh.onelab.run(name, cmd.format(value))
+    return
+
+# run the two calculations in parallel
+t1 = threading.Thread(target=compute, args=('my first getdp', 20))
+t1.start()
+t2 = threading.Thread(target=compute, args=('my second getdp', 1000))
+t2.start()
+
+# wait for the 2 calculations to stop
+t1.join()
+t2.join()
+
+gmsh.finalize()
diff --git a/demos/api/onelab_data.c b/demos/api/onelab_run_auto.c
similarity index 91%
rename from demos/api/onelab_data.c
rename to demos/api/onelab_run_auto.c
index 068108327837e108e72920f58371c548a29fc428..cb9123da9c8bd5a05e076712a1bf9b0be24bf94a 100644
--- a/demos/api/onelab_data.c
+++ b/demos/api/onelab_run_auto.c
@@ -25,8 +25,6 @@ int main(int argc, char **argv)
 
   gmshOpen(argv[1], &ierr); chk(ierr);
 
-  /* attempts to run a client selected when opening the file (e.g. a .pro
-     file) */
   gmshOnelabRun("", "", &ierr); chk(ierr);
 
   gmshOnelabGet(&json, "json", "", &ierr); chk(ierr);
diff --git a/demos/api/onelab_data.cpp b/demos/api/onelab_run_auto.cpp
similarity index 81%
rename from demos/api/onelab_data.cpp
rename to demos/api/onelab_run_auto.cpp
index 0bb41a9cc3a193fe469612d7cd7eda453400b405..9dc3006424817cd35f92fe71a51f22953eb3d7d1 100644
--- a/demos/api/onelab_data.cpp
+++ b/demos/api/onelab_run_auto.cpp
@@ -12,7 +12,6 @@ int main(int argc, char **argv)
 
   gmsh::open(argv[1]);
 
-  // attempts to run a client selected when opening the file (e.g. a .pro file)
   gmsh::onelab::run();
 
   std::string json;
diff --git a/demos/api/onelab_run_auto.py b/demos/api/onelab_run_auto.py
new file mode 100644
index 0000000000000000000000000000000000000000..e933ebba4f1b6138721ea8668ec8e0596acb2300
--- /dev/null
+++ b/demos/api/onelab_run_auto.py
@@ -0,0 +1,31 @@
+import gmsh
+import sys
+
+# This shows how ONELAB clients that communicate with the ONELAB server through
+# sockets can be executed using the Gmsh API, using client information stored in
+# the "Solver.Name?", "Solver.Extension?" and ""Solver.Executable?" Gmsh options
+
+# By default Gmsh defines Solver.Name0 = "GetDP" and Solver.Extension0 = ".pro".
+# Provided that Solver.Executable0 points to the GetDP executable, if you open a
+# file with the ".pro" extension with gmsh.open(), then call gmsh.onelab.run(),
+# the getdp solver will be run.
+
+# If Solver.Executable0 is not set, you can set it using
+#
+# gmsh.option.setString('Solver.Executable0', '/path/to/getdp')
+
+if len(sys.argv) < 2:
+    print("Usage: " + sys.argv[0] + " file [options]")
+    exit(0)
+
+gmsh.initialize()
+
+gmsh.open(sys.argv[1])
+
+# attempts to run a client selected when opening the file (e.g. a .pro file)
+gmsh.onelab.run()
+
+json = gmsh.onelab.get()
+print(json)
+
+gmsh.finalize()
diff --git a/demos/api/prepro.py b/demos/api/prepro.py
index 291d2ea76317322d66b20d6d3653972c090f8f8e..1236171ba7913853819234cda305ef3d5ef6a2f4 100644
--- a/demos/api/prepro.py
+++ b/demos/api/prepro.py
@@ -19,15 +19,15 @@ if len(sys.argv) > 1:
 # - "ONELAB Context/Surface Template/"
 # - "ONELAB Context/Volume Template/"
 #
-# Double- (or right-) clicking on an entity in the GUI will then pop-up a
-# context window where instances of these variables for the given entity can be
-# edited. For example, if the "ONELAB Context/Curve Template/0Boundary
-# condition" exists, double-clicking on curve 123 in the model (or in the
-# visibility browser) will create "ONELAB Context/Curve 123/0Boundary condition"
-# (or "ONELAB Context/Physical Curve 1000/0Boundary condition" depending on the
-# choice in the context window, if curve 123 belongs to the physical curve
-# 1000). The context window is also shown automatically when a new physical
-# group is created in the GUI.
+# Double-clicking on an entity in the GUI will then pop-up a context window
+# where instances of these variables for the given entity can be edited. For
+# example, if the "ONELAB Context/Curve Template/0Boundary condition" exists,
+# double-clicking on curve 123 in the model (or in the visibility browser) will
+# create "ONELAB Context/Curve 123/0Boundary condition" (or "ONELAB
+# Context/Physical Curve 1000/0Boundary condition" depending on the choice in
+# the context window, if curve 123 belongs to the physical curve 1000). The
+# context window is also shown automatically when a new physical group is
+# created in the GUI.
 #
 # As usual, every time the ONELAB database is changed the "ONELAB/Action"
 # parameter is set to "check", which gives the Python code the opportunity to
diff --git a/demos/api/terrain_bspline.py b/demos/api/terrain_bspline.py
index 0d879fa308b7121392ed99c48e6048d2f58833cc..b28cc20d59a51d3e5a28c8c6915b664beb67c7d5 100644
--- a/demos/api/terrain_bspline.py
+++ b/demos/api/terrain_bspline.py
@@ -36,7 +36,7 @@ gmsh.onelab.set("""[
 ]""")
 
 def setMeshConstraint():
-    if gmsh.onelab.getNumber('Parameters/Full-hex mesh?') == 1:
+    if gmsh.onelab.getNumber('Parameters/Full-hex mesh?')[0] == 1:
         NN = 30
         for c in gmsh.model.getEntities(1):
             gmsh.model.mesh.setTransfiniteCurve(c[1], NN)
@@ -58,6 +58,8 @@ def checkForEvent():
         setMeshConstraint()
     return 1
 
+setMeshConstraint()
+
 if "-nopopup" not in sys.argv:
     gmsh.fltk.initialize()
     while gmsh.fltk.isAvailable() and checkForEvent():
diff --git a/doc/gmsh.1 b/doc/gmsh.1
index 6abd478c6cf5075be1b98ae762dfac6a61567ff5..39e7919dc4035dcb4e8d0a28550100dbf4810ab0 100644
--- a/doc/gmsh.1
+++ b/doc/gmsh.1
@@ -1,4 +1,4 @@
-.TH Gmsh 1 "05 November 2020" "4.7" "Gmsh Manual Pages"
+.TH Gmsh 1 "03 March 2021" "4.8" "Gmsh Manual Pages"
 .UC 4
 .\" ********************************************************************
 .SH NAME
diff --git a/doc/gmsh.html b/doc/gmsh.html
index 74f18dff9075f966df944fcf0b886993e7d3da61..4eb896fc6fcc0f3e5962580d8b973e904d039cd1 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -98,21 +98,21 @@ Public License (GPL)</a>:
 <ul>
   <li>
     <div class="highlight">
-      Current stable release (version 4.7.1, 16 November 2020):
+      Current stable release (version 4.8.0, 2 March 2021):
       <ul>
         <li>Download Gmsh for
-          <a href="bin/Windows/gmsh-4.7.1-Windows64.zip">Windows 64-bit</a>,
-          <a href="bin/Windows/gmsh-4.7.1-Windows32.zip">Windows 32-bit</a>,
-          <a href="bin/Linux/gmsh-4.7.1-Linux64.tgz">Linux 64-bit</a>,
-          <a href="bin/Linux/gmsh-4.7.1-Linux32.tgz">Linux 32-bit</a> or
-          <a href="bin/MacOSX/gmsh-4.7.1-MacOSX.dmg">MacOS</a>
-        <li>Download the <a href="src/gmsh-4.7.1-source.tgz">source code</a>
+          <a href="bin/Windows/gmsh-4.8.0-Windows64.zip">Windows 64-bit</a>,
+          <a href="bin/Windows/gmsh-4.8.0-Windows32.zip">Windows 32-bit</a>,
+          <a href="bin/Linux/gmsh-4.8.0-Linux64.tgz">Linux 64-bit</a>,
+          <a href="bin/Linux/gmsh-4.8.0-Linux32.tgz">Linux 32-bit</a> or
+          <a href="bin/MacOSX/gmsh-4.8.0-MacOSX.dmg">MacOS</a>
+        <li>Download the <a href="src/gmsh-4.8.0-source.tgz">source code</a>
         <li>Download the Software Development Kit (SDK) for
-          <a href="bin/Windows/gmsh-4.7.1-Windows64-sdk.zip">Windows 64-bit</a>,
-          <a href="bin/Windows/gmsh-4.7.1-Windows32-sdk.zip">Windows 32-bit</a>,
-          <a href="bin/Linux/gmsh-4.7.1-Linux64-sdk.tgz">Linux 64-bit</a>,
-          <a href="bin/Linux/gmsh-4.7.1-Linux32-sdk.tgz">Linux 32-bit</a> or
-          <a href="bin/MacOSX/gmsh-4.7.1-MacOSX-sdk.tgz">MacOS</a>
+          <a href="bin/Windows/gmsh-4.8.0-Windows64-sdk.zip">Windows 64-bit</a>,
+          <a href="bin/Windows/gmsh-4.8.0-Windows32-sdk.zip">Windows 32-bit</a>,
+          <a href="bin/Linux/gmsh-4.8.0-Linux64-sdk.tgz">Linux 64-bit</a>,
+          <a href="bin/Linux/gmsh-4.8.0-Linux32-sdk.tgz">Linux 32-bit</a> or
+          <a href="bin/MacOSX/gmsh-4.8.0-MacOSX-sdk.tgz">MacOS</a>
         <li>Download both Gmsh and the SDK with pip: '<code>pip install --upgrade
             <a href="https://pypi.org/project/gmsh/">gmsh</a></code>'
       </ul>
diff --git a/doc/texinfo/cmake_options.texi b/doc/texinfo/cmake_options.texi
index 7c43067a059ba4df6345cde5b91a991681f5f841..c8a0c492ca706795e5d92bb59db4eeef3f3d87c0 100644
--- a/doc/texinfo/cmake_options.texi
+++ b/doc/texinfo/cmake_options.texi
@@ -114,6 +114,8 @@ Enable Poppler for displaying PDF documents (experimental) (default: OFF)
 Enable private API (default: OFF)
 @item ENABLE_PRO
 Enable PRO extensions (default: ON)
+@item ENABLE_QUADMESHINGTOOLS
+Enable QuadMeshingTools extensions (default: ON)
 @item ENABLE_QUADTRI
 Enable QuadTri structured meshing extensions (default: ON)
 @item ENABLE_REVOROPT
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index d32c502ca5765d9bd316b19a31ed01b6d3b293b6..5367aa71ca9a396ea8c2d381880a4118a4bc95db 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -2093,12 +2093,15 @@ be defined separately). Likewise, a curve loop defining a hole should not
 have any curves in common with another curve loop defining a hole in the
 same surface (in which case the two curve loops should be combined).
 
-@item Surface ( @var{expression} ) = @{ @var{expression-list} @} < In Sphere @{ @var{expression} @} >;
+@item Surface ( @var{expression} ) = @{ @var{expression-list} @} < In Sphere @{ @var{expression} @}, Using Point @{ @var{expression-list} @} >;
 Creates a surface filling. With the built-in kernel, the first curve
-loop should be composed of either three or four curves. With the
-built-in kernel, the optional @code{In Sphere} argument forces the
-surface to be a spherical patch (the extra parameter gives the tag of
-the center of the sphere).
+loop should be composed of either three or four curves, the surface is
+constructed using transfinite interpolation, and the optional @code{In
+Sphere} argument forces the surface to be a spherical patch (the extra
+parameter gives the tag of the center of the sphere). With the
+OpenCASCADE kernel, a BSpline surface is constructucted by optimization
+to match the bounding curves, as well as the (optional) points provided
+after @code{Using Point}.
 
 @item BSpline Surface ( @var{expression} ) = @{ @var{expression-list} @};
 Creates a BSpline surface filling. Only a single curve loop made of 2, 3
@@ -6086,6 +6089,7 @@ problems. For example, on Linux you can use
 @code{valgrind --leak-check=full gmsh file.geo -3}.
 @c macOS: (gdb) set env DYLD_INSERT_LIBRARIES /usr/lib/libgmalloc.dylib
 @c export LD_PRELOAD=libnjamd.so kill -USR1
+@c macOS: (lldb) env DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
 @end itemize
 
 @c -------------------------------------------------------------------------
diff --git a/doc/texinfo/opt_general.texi b/doc/texinfo/opt_general.texi
index ee08683be93572f07c55fa5b074b9c27030f783d..4a468fcce607ed0c9322761057e01f6bbe434041 100644
--- a/doc/texinfo/opt_general.texi
+++ b/doc/texinfo/opt_general.texi
@@ -38,12 +38,12 @@ Saved in: @code{General.OptionsFileName}
 
 @item General.BuildInfo
 Gmsh build information (read-only)@*
-Default value: @code{"Version: 4.8.0-git-e3eb5cdb2; License: GNU General Public License; Build OS: MacOSX-sdk; Build date: 20210218; Build host: MacBook-Pro-Christophe.local; Build options: 64Bit ALGLIB ANN Bamg Blas[petsc] Blossom Cairo Cgns DIntegration Dlopen DomHex Eigen Fltk GMP Gmm Hxt Jpeg Kbipack Lapack[petsc] MathEx Med Mesh Metis Mmg Mpeg Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP[Homebrew] OptHom P4est PETSc Parasolid ParasolidSTEP Parser Plugins Png Post QuadTri Solver TetGen/BR TouchBar Voro++ Zlib; FLTK version: 1.4.0; PETSc version: 3.14.4 (complex arithmtic); OCC version: 7.6.0; MED version: 4.1.0; Packaged by: geuzaine; Web site: https://gmsh.info; Issue tracker: https://gitlab.onelab.info/gmsh/gmsh/issues"}@*
+Default value: @code{"Version: 4.8.0-git-392ddd331; License: GNU General Public License; Build OS: MacOSX-sdk; Build date: 20210301; Build host: MBP-Christophe; Build options: 64Bit ALGLIB ANN Bamg Blossom Cairo Cgns DIntegration Dlopen DomHex Eigen Fltk GMP Gmm Hxt Jpeg Kbipack MathEx Med Mesh Metis Mmg Mpeg Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP OptHom Parasolid ParasolidSTEP Parser Plugins Png Post QuadTri Solver TetGen/BR TouchBar Voro++ Zlib; FLTK version: 1.4.0; OCC version: 7.6.0; MED version: 4.1.0; Packaged by: geuzaine; Web site: https://gmsh.info; Issue tracker: https://gitlab.onelab.info/gmsh/gmsh/issues"}@*
 Saved in: @code{-}
 
 @item General.BuildOptions
 Gmsh build options (read-only)@*
-Default value: @code{"64Bit ALGLIB ANN Bamg Blas[petsc] Blossom Cairo Cgns DIntegration Dlopen DomHex Eigen Fltk GMP Gmm Hxt Jpeg Kbipack Lapack[petsc] MathEx Med Mesh Metis Mmg Mpeg Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP[Homebrew] OptHom P4est PETSc Parasolid ParasolidSTEP Parser Plugins Png Post QuadTri Solver TetGen/BR TouchBar Voro++ Zlib"}@*
+Default value: @code{"64Bit ALGLIB ANN Bamg Blossom Cairo Cgns DIntegration Dlopen DomHex Eigen Fltk GMP Gmm Hxt Jpeg Kbipack MathEx Med Mesh Metis Mmg Mpeg Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP OptHom Parasolid ParasolidSTEP Parser Plugins Png Post QuadTri Solver TetGen/BR TouchBar Voro++ Zlib"}@*
 Saved in: @code{-}
 
 @item General.DefaultFileName
@@ -168,7 +168,7 @@ Saved in: @code{General.SessionFileName}
 
 @item General.Version
 Gmsh version (read-only)@*
-Default value: @code{"4.8.0-git-e3eb5cdb2"}@*
+Default value: @code{"4.8.0-git-392ddd331"}@*
 Saved in: @code{-}
 
 @item General.WatchFilePattern
diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi
index 91e08e5f0085669618855d2b03d0cdf0f3187c76..3efc3587f74a043dad22138bebffb4390a28dc73 100644
--- a/doc/texinfo/opt_mesh.texi
+++ b/doc/texinfo/opt_mesh.texi
@@ -236,6 +236,16 @@ Maximum angle between edges/faces within layers of BL triangles/tets for the det
 Default value: @code{0.523599}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Mesh.IgnoreParametrization
+Skip parametrization section when reading meshes in the MSH4 format.@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.IgnorePeriodicity
+Skip periodic node section and skip periodic boundary alignement step when reading meshes in the MSH2 format.@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Mesh.LabelSampling
 Label sampling rate (display one label every `LabelSampling' elements)@*
 Default value: @code{1}@*
@@ -421,86 +431,6 @@ Import MED meshes in the current model, even if several MED mesh names exist@*
 Default value: @code{0}@*
 Saved in: @code{General.OptionsFileName}
 
-@item Mesh.PartitionHexWeight
-Weight of hexahedral element for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionLineWeight
-Weight of line element for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionPrismWeight
-Weight of prismatic element (wedge) for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionPyramidWeight
-Weight of pyramidal element for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionQuadWeight
-Weight of quadrangle for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionTrihedronWeight
-Weight of trihedron element for METIS load balancing (-1: automatic)@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionTetWeight
-Weight of tetrahedral element for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionTriWeight
-Weight of triangle element for METIS load balancing (-1: automatic)@*
-Default value: @code{-1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionCreateTopology
-Create boundary representation of partitions@*
-Default value: @code{1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionCreatePhysicals
-Create physical groups for partitions, based on existing physical groups@*
-Default value: @code{1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionCreateGhostCells
-Create ghost cells, i.e. create for each partition a ghost entity containing elements connected to neighboring partitions by at least one node.@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionSplitMeshFiles
-Write one file for each mesh partition@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionTopologyFile
-Write a .pro file with the partition topology@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionOldStyleMsh2
-Write partitioned meshes in MSH2 format using old style (i.e. by not referencing new partitioned entities, except on partition boundaries), for backward compatibility@*
-Default value: @code{1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.PartitionConvertMsh2
-When reading partitioned meshes in MSH2 format, create new partition entities@*
-Default value: @code{1}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.ReparamMaxTriangles
-Maximum number of triangles in a single parametrization patch@*
-Default value: @code{250000}@*
-Saved in: @code{General.OptionsFileName}
-
 @item Mesh.NbHexahedra
 Number of hexahedra in the current mesh (read-only)@*
 Default value: @code{0}@*
@@ -596,6 +526,86 @@ Optimize the mesh using Netgen to improve the quality of tetrahedral elements@*
 Default value: @code{0}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Mesh.PartitionHexWeight
+Weight of hexahedral element for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionLineWeight
+Weight of line element for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionPrismWeight
+Weight of prismatic element (wedge) for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionPyramidWeight
+Weight of pyramidal element for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionQuadWeight
+Weight of quadrangle for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionTrihedronWeight
+Weight of trihedron element for METIS load balancing (-1: automatic)@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionTetWeight
+Weight of tetrahedral element for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionTriWeight
+Weight of triangle element for METIS load balancing (-1: automatic)@*
+Default value: @code{-1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionCreateTopology
+Create boundary representation of partitions@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionCreatePhysicals
+Create physical groups for partitions, based on existing physical groups@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionCreateGhostCells
+Create ghost cells, i.e. create for each partition a ghost entity containing elements connected to neighboring partitions by at least one node.@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionSplitMeshFiles
+Write one file for each mesh partition@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionTopologyFile
+Write a .pro file with the partition topology@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionOldStyleMsh2
+Write partitioned meshes in MSH2 format using old style (i.e. by not referencing new partitioned entities, except on partition boundaries), for backward compatibility@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PartitionConvertMsh2
+When reading partitioned meshes in MSH2 format, create new partition entities@*
+Default value: @code{1}@*
+Saved in: @code{General.OptionsFileName}
+
+@item Mesh.PreserveNumberingMsh2
+Preserve element numbering in MSH2 format (will break meshes with multiple physical groups for a single elementary entity)@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Mesh.Prisms
 Display mesh prisms?@*
 Default value: @code{1}@*
@@ -656,18 +666,8 @@ Seed of pseudo-random number generator@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
-@item Mesh.PreserveNumberingMsh2
-Preserve element numbering in MSH2 format (will break meshes with multiple physical groups for a single elementary entity)@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.IgnoreParametrization
-Skip parametrization section when reading meshes in the MSH4 format.@*
-Default value: @code{0}@*
-Saved in: @code{General.OptionsFileName}
-
-@item Mesh.IgnorePeriodicity
-Skip periodic node section and skip periodic boundary alignement step when reading meshes in the MSH2 format.@*
+@item Mesh.ReadGroupsOfElements
+Read groups of elements in UNV meshes (this will discard the elementary entity tags inferred from the element section)@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
@@ -711,6 +711,11 @@ Renumber nodes and elements in a continuous sequence after mesh generation@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Mesh.ReparamMaxTriangles
+Maximum number of triangles in a single parametrization patch@*
+Default value: @code{250000}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Mesh.SaveAll
 Save all elements, even if they don't belong to physical groups (for some mesh formats, this removes physical groups altogether)@*
 Default value: @code{0}@*
@@ -732,7 +737,7 @@ Default value: @code{0}@*
 Saved in: @code{General.OptionsFileName}
 
 @item Mesh.SaveGroupsOfElements
-Save groups of elements for each physical group (for INP mesh format)@*
+Save groups of elements for each physical group (for UNV and INP mesh format)@*
 Default value: @code{1}@*
 Saved in: @code{General.OptionsFileName}
 
diff --git a/doc/texinfo/version.texi b/doc/texinfo/version.texi
index 8ee7f59b92047c8d7c2bdad711f9d20329438fb1..0f54b62333de475377a6e1f544ed3911ec371cc5 100644
--- a/doc/texinfo/version.texi
+++ b/doc/texinfo/version.texi
@@ -1,4 +1,4 @@
 @c This file was generated by cmake: do not edit manually!
 
-@set GMSH-VERSION 4.8.0 (development version)
+@set GMSH-VERSION 4.8.1 (development version)
 @set GITLAB-PREFIX https://gitlab.onelab.info/gmsh/gmsh/blob/master
diff --git a/tutorial/c++/t1.cpp b/tutorial/c++/t1.cpp
index 43a9e2c2124df6ced2a8c21f2cbaa4c109df18c9..1d5f1d61c336456fd0be1ac699e47b4f1e73971b 100644
--- a/tutorial/c++/t1.cpp
+++ b/tutorial/c++/t1.cpp
@@ -145,8 +145,8 @@ int main(int argc, char **argv)
   // `.msh4' extension.
 
   // To visualize the model we can run the graphical user interface with
-  // `gmsh::fltk::run()'. Here we run it only if the "-nopopup" is not provided
-  // in the command line arguments:
+  // `gmsh::fltk::run()'. Here we run it only if "-nopopup" is not provided in
+  // the command line arguments:
   std::set<std::string> args(argv, argv + argc);
   if(!args.count("-nopopup")) gmsh::fltk::run();
 
diff --git a/tutorial/c++/t10.cpp b/tutorial/c++/t10.cpp
index ad3d3a9dc6615733d3617aa74c6a4e4c926984e7..fe5701cd55a3bb709668ca69fb550d3da550de88 100644
--- a/tutorial/c++/t10.cpp
+++ b/tutorial/c++/t10.cpp
@@ -95,13 +95,13 @@ int main(int argc, char **argv)
   gmsh::model::mesh::field::setNumber(6, "XMax", 0.6);
   gmsh::model::mesh::field::setNumber(6, "YMin", 0.3);
   gmsh::model::mesh::field::setNumber(6, "YMax", 0.6);
+  gmsh::model::mesh::field::setNumber(6, "Thickness", 0.3);
 
   // Many other types of fields are available: see the reference manual for a
   // complete list. You can also create fields directly in the graphical user
   // interface by selecting `Define->Size fields' in the `Mesh' module.
 
-  // Finally, let's use the minimum of all the fields as the background mesh
-  // field:
+  // Let's use the minimum of all the fields as the background mesh field:
   gmsh::model::mesh::field::add("Min", 7);
   gmsh::model::mesh::field::setNumbers(7, "FieldsList", {2, 3, 5, 6});
 
@@ -141,6 +141,14 @@ int main(int argc, char **argv)
 
   // This will prevent over-refinement due to small mesh sizes on the boundary.
 
+  // Finally, while the default "Frontal-Delaunay" 2D meshing algorithm
+  // (Mesh.Algorithm = 6) usually leads to the highest quality meshes, the
+  // "Delaunay" algorithm (Mesh.Algorithm = 5) will handle complex mesh size
+  // fields better - in particular size fields with large element size
+  // gradients:
+
+  gmsh::option::setNumber("Mesh.Algorithm", 5);
+
   gmsh::model::mesh::generate(2);
   gmsh::write("t10.msh");
 
diff --git a/tutorial/python/t1.py b/tutorial/python/t1.py
index 50e42ef85a03dd528acbbc4412ec17f186adda81..3ea52a0a9a5c5f4bf7d905299bb37812964af7d0 100644
--- a/tutorial/python/t1.py
+++ b/tutorial/python/t1.py
@@ -144,8 +144,8 @@ gmsh.write("t1.msh")
 # extension.
 
 # To visualize the model we can run the graphical user interface with
-# `gmsh.fltk.run()'. Here we run it only if the "-nopopup" is not provided in
-# the command line arguments:
+# `gmsh.fltk.run()'. Here we run it only if "-nopopup" is not provided in the
+# command line arguments:
 if '-nopopup' not in sys.argv:
     gmsh.fltk.run()
 
diff --git a/tutorial/python/t10.py b/tutorial/python/t10.py
index d0702c8c6687116a4e319af496a4f2d14f5cf5be..de5808d79c81ebe1bd817058e1846c901d8dc0bf 100644
--- a/tutorial/python/t10.py
+++ b/tutorial/python/t10.py
@@ -89,12 +89,13 @@ gmsh.model.mesh.field.setNumber(6, "XMin", 0.3)
 gmsh.model.mesh.field.setNumber(6, "XMax", 0.6)
 gmsh.model.mesh.field.setNumber(6, "YMin", 0.3)
 gmsh.model.mesh.field.setNumber(6, "YMax", 0.6)
+gmsh.model.mesh.field.setNumber(6, "Thickness", 0.3)
 
 # Many other types of fields are available: see the reference manual for a
 # complete list. You can also create fields directly in the graphical user
 # interface by selecting `Define->Size fields' in the `Mesh' module.
 
-# Finally, let's use the minimum of all the fields as the background mesh field:
+# Let's use the minimum of all the fields as the background mesh field:
 gmsh.model.mesh.field.add("Min", 7)
 gmsh.model.mesh.field.setNumbers(7, "FieldsList", [2, 3, 5, 6])
 
@@ -132,6 +133,13 @@ gmsh.option.setNumber("Mesh.MeshSizeFromCurvature", 0)
 
 # This will prevent over-refinement due to small mesh sizes on the boundary.
 
+# Finally, while the default "Frontal-Delaunay" 2D meshing algorithm
+# (Mesh.Algorithm = 6) usually leads to the highest quality meshes, the
+# "Delaunay" algorithm (Mesh.Algorithm = 5) will handle complex mesh size fields
+# better - in particular size fields with large element size gradients:
+
+gmsh.option.setNumber("Mesh.Algorithm", 5)
+
 gmsh.model.mesh.generate(2)
 gmsh.write("t10.msh")
 
diff --git a/tutorial/t10.geo b/tutorial/t10.geo
index 4b14edafe56e8a05b16205bdaa3c9399078020cd..685245a75840d85fec97c5a708fd7626ac4b59e1 100644
--- a/tutorial/t10.geo
+++ b/tutorial/t10.geo
@@ -74,13 +74,13 @@ Field[6].XMin = 0.3;
 Field[6].XMax = 0.6;
 Field[6].YMin = 0.3;
 Field[6].YMax = 0.6;
+Field[6].Thickness = 0.3;
 
 // Many other types of fields are available: see the reference manual for a
 // complete list. You can also create fields directly in the graphical user
 // interface by selecting `Define->Size fields' in the `Mesh' module.
 
-// Finally, let's use the minimum of all the fields as the background mesh size
-// field
+// Let's use the minimum of all the fields as the background mesh size field
 Field[7] = Min;
 Field[7].FieldsList = {2, 3, 5, 6};
 Background Field = 7;
@@ -109,3 +109,10 @@ Mesh.MeshSizeFromPoints = 0;
 Mesh.MeshSizeFromCurvature = 0;
 
 // This will prevent over-refinement due to small mesh sizes on the boundary.
+
+// Finally, while the default "Frontal-Delaunay" 2D meshing algorithm
+// (Mesh.Algorithm = 6) usually leads to the highest quality meshes, the
+// "Delaunay" algorithm (Mesh.Algorithm = 5) will handle complex mesh size
+// fields better - in particular size fields with large element size gradients:
+
+Mesh.Algorithm = 5;
diff --git a/utils/docker/Dockerfile.ubuntu20.04 b/utils/docker/Dockerfile.ubuntu20.04
index 6d2ed143c8526a8a4386b98bb849c686f16d99ad..bf14c3c066c1c93f76bc0d8f72e7ca386694adb7 100644
--- a/utils/docker/Dockerfile.ubuntu20.04
+++ b/utils/docker/Dockerfile.ubuntu20.04
@@ -2,19 +2,21 @@ FROM ubuntu:20.04
 
 ENV DEBIAN_FRONTEND noninteractive
 
-RUN apt-get update && apt-get install -y apt-utils git curl cmake g++ gfortran python3 python3-numpy python3-scipy python3-pip swig clang-tidy emacs-nox valgrind texlive texlive-latex-recommended texinfo libreoffice fonts-cmu petsc-dev slepc-dev python3-dev libopenblas-dev libfltk1.3-dev libfreetype6-dev libgl1-mesa-dev libxi-dev libxmu-dev mesa-common-dev tcl-dev tk-dev libhdf5-dev libcgns-dev libxft-dev libxinerama-dev libxcursor-dev libxfixes-dev libocct-foundation-dev libocct-data-exchange-dev libocct-ocaf-dev libopenmpi-dev libboost-dev && apt-get clean
+RUN apt-get update && apt-get install -y apt-utils git curl cmake g++ gfortran python3 python3-numpy python3-scipy python3-pip swig clang-tidy emacs-nox valgrind texlive texlive-latex-recommended texinfo libreoffice fonts-cmu petsc-dev slepc-dev python3-dev libopenblas-dev libfltk1.3-dev libfreetype6-dev libgl1-mesa-dev libxi-dev libxmu-dev mesa-common-dev tcl-dev tk-dev libhdf5-dev libcgns-dev libxft-dev libxinerama-dev libxcursor-dev libxfixes-dev libocct-foundation-dev libocct-data-exchange-dev libocct-ocaf-dev libopenmpi-dev libboost-dev cargo clang gcovr && apt-get clean
 
 RUN pip3 install twine
 
 # to convert a .fodt document, simply run
 # soffice --headless --convert-to pdf Tutorials.fodt
 
-RUN apt-get update && apt-get install -y cargo && apt-get clean
 RUN cargo install --root /opt/cargo mdbook --version "^0.3.7"
 
 # mmg
 RUN git clone https://github.com/MmgTools/mmg.git && cd mmg && mkdir build && cd build && cmake -DBUILD_SHARED_LIBS=1 .. && make -j8 && make install && cd .. && rm -rf mmg
 
+# libomp with ThreadSanitizer support (see https://gitlab.onelab.info/gmsh/gmsh/-/issues/1250)
+RUN git clone https://github.com/llvm/llvm-project && cd llvm-project && mkdir build && cd build && cmake -DLIBOMP_TSAN_SUPPORT=1 ../openmp && cmake --build . --target install
+
 # "docker build --build-arg REBUILD_GMSH=somethingnew"
 ARG REBUILD_GMSH=