From d14ab9c91afacbbdcdfcc486bb3f2202a45b4a02 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 16 Nov 2021 11:53:45 +0100 Subject: [PATCH 001/144] add detection of triple lines from labeled images for tet meshing with features --- Mesh_3/examples/Mesh_3/CMakeLists.txt | 4 + ...sh_3D_image_with_detection_of_features.cpp | 265 + .../triple_lines_extraction/cases_table.h | 6596 +++++++++++++++++ .../triple_lines_extraction/combinations.h | 69 + .../triple_lines_extraction/coordinates.h | 33 + .../Mesh_3/triple_lines_extraction/cube.h | 38 + .../triple_lines_extraction/cube_isometries.h | 61 + .../triple_lines_extraction/triple_lines.h | 654 ++ 8 files changed, 7720 insertions(+) create mode 100644 Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h diff --git a/Mesh_3/examples/Mesh_3/CMakeLists.txt b/Mesh_3/examples/Mesh_3/CMakeLists.txt index 6f848c2c657..4e4cedd998b 100644 --- a/Mesh_3/examples/Mesh_3/CMakeLists.txt +++ b/Mesh_3/examples/Mesh_3/CMakeLists.txt @@ -137,6 +137,9 @@ if(TARGET CGAL::CGAL_ImageIO) create_single_source_cgal_program("mesh_3D_image_with_features.cpp") target_link_libraries(mesh_3D_image_with_features PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("mesh_3D_image_with_detection_of_features.cpp") + target_link_libraries(mesh_3D_image_with_detection_of_features PUBLIC CGAL::Eigen3_support) + if(CGAL_ImageIO_USE_ZLIB) create_single_source_cgal_program("mesh_optimization_example.cpp") target_link_libraries(mesh_optimization_example PUBLIC CGAL::Eigen3_support) @@ -195,6 +198,7 @@ if(CGAL_ACTIVATE_CONCURRENT_MESH_3 AND TARGET CGAL::TBB_support) mesh_3D_image_with_custom_initialization mesh_3D_gray_image_with_custom_initialization mesh_3D_image_with_features + mesh_3D_image_with_detection_of_features mesh_implicit_domains mesh_implicit_sphere mesh_implicit_sphere_variable_size diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp new file mode 100644 index 00000000000..94da314be65 --- /dev/null +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -0,0 +1,265 @@ +#include +#include + +#include +#include +#include + +#include +#include + +/// [Domain definition] +#include +#include +#include + +#include +#include +#include +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef CGAL::Labeled_mesh_domain_3 Image_domain; +typedef CGAL::Mesh_domain_with_polyline_features_3 Mesh_domain; +/// [Domain definition] + +#ifdef CGAL_CONCURRENT_MESH_3 +typedef CGAL::Parallel_tag Concurrency_tag; +#else +typedef CGAL::Sequential_tag Concurrency_tag; +#endif + +// Triangulation +typedef CGAL::Mesh_triangulation_3::type Tr; + +typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + +// Criteria +typedef CGAL::Mesh_criteria_3 Mesh_criteria; + +// To avoid verbose function and named parameters call +using namespace CGAL::parameters; + +/// [Add 1D features] +#include "read_polylines.h" +#include // undocumented header + +typedef K::Point_3 Point_3; +typedef K::Vector_3 Vector_3; +typedef std::vector Polyline; +typedef std::vector Polylines; + +typedef Polylines(*create_polylines_fct)(const int /* prec */); + +typedef Point_3 P; + +#include + + +// Protect the intersection of the object with the box of the image, +// by declaring 1D-features. Note that `CGAL::polylines_to_protect` is +// not documented. +bool add_1D_features(const CGAL::Image_3& image, + Mesh_domain& domain) +{ + typedef unsigned char Word_type; + + Polylines features_inside; + + const double vx = image.vx(); + const double vy = image.vy(); + const double vz = image.vz(); + const double dist_bound = (std::min)(vx, + (std::min)(vy, vz)) / 256; + const double sq_dist_bound = dist_bound * dist_bound; + + const std::size_t xdim = image.xdim(); + const std::size_t ydim = image.ydim(); + const std::size_t zdim = image.zdim(); + + using CGAL::IMAGEIO::static_evaluate; + + typedef CGAL::Delaunay_triangulation_3 Del; + Del triangulation; + Del::Cell_handle start_cell; + + for (std::size_t k = 0, end_k = zdim - 1; k < end_k; ++k) + for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) + for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) + { + const K::Vector_3 translation{ i * vx, j * vy, k * vz }; + const Cube cube = { + static_evaluate(image.image(), i , j , k), + static_evaluate(image.image(), i + 1, j , k), + static_evaluate(image.image(), i , j + 1, k), + static_evaluate(image.image(), i + 1, j + 1, k), + static_evaluate(image.image(), i , j , k + 1), + static_evaluate(image.image(), i + 1, j , k + 1), + static_evaluate(image.image(), i , j + 1, k + 1), + static_evaluate(image.image(), i + 1, j + 1, k + 1), + }; /// TODO: optimize the access to the image data + bool monocolor = cube[0] == cube[1]; + for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); + if (monocolor) continue; + + std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, + INT_MIN, INT_MIN, INT_MIN, INT_MIN }; + std::array color_transformation; + std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); + int nb_color = 0; + for (int i = 0; i < 8; ++i) { + if (color_transformation[cube[i]] == INT_MIN) { + color_transformation[cube[i]] = nb_color; + inv_color_transformation[nb_color] = cube[i]; + ++nb_color; + } + } + if (nb_color > 3) { + CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); + continue; + } + Cube reference_cube = { + (unsigned char)(color_transformation[cube[0]]), + (unsigned char)(color_transformation[cube[1]]), + (unsigned char)(color_transformation[cube[2]]), + (unsigned char)(color_transformation[cube[3]]), + (unsigned char)(color_transformation[cube[4]]), + (unsigned char)(color_transformation[cube[5]]), + (unsigned char)(color_transformation[cube[6]]), + (unsigned char)(color_transformation[cube[7]]), + }; + auto case_it = find_case(cases, reference_cube); + using std::end; + const bool case_found = (case_it != end(cases)); + if (case_found) reference_cube = combinations[(*case_it)[8]]; + else { +// std::cerr << "Warning: case not found: " << reference_cube << '\n'; + CGAL_error(); + }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Cube " << cube << std::endl; + std::cerr << "reference cube " << reference_cube << std::endl; + std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + auto fct_it = create_polylines_fcts.find(reference_cube); + if (fct_it != create_polylines_fcts.end()) { +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + Polylines cube_features = (fct_it->second)(10); + if (case_found) { + const Permutation& transformation = cube_isometries[(*case_it)[9]]; + Coordinates a1 = coordinates[transformation[0]]; + Coordinates u = coordinates[transformation[1]] - a1; + Coordinates v = coordinates[transformation[2]] - a1; + Coordinates w = coordinates[transformation[4]] - a1; + const Point_3 pa{ a1[0], a1[1], a1[2] }; + const Vector_3 vu{ u[0], u[1], u[2] }; + const Vector_3 vv{ v[0], v[1], v[2] }; + const Vector_3 vw{ w[0], w[1], w[2] }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "pa: " << pa << "\n"; + std::cerr << "vu: " << vu << "\n"; + std::cerr << "vv: " << vv << "\n"; + std::cerr << "vw: " << vw << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + for (auto& polyline : cube_features) { + for (auto& point : polyline) { + point = pa + + point.x() * vu + + point.y() * vv + + point.z() * vw; + point = { vx * point.x(), + vy * point.y(), + vz * point.z(), }; + point = point + translation; + } + for (int i = 0; i < 2; ++i) { + K::Point_3& extremity = (i == 0) ? polyline.front() : polyline.back(); + Del::Vertex_handle vh = triangulation.nearest_vertex(extremity, start_cell); + if (Del::Vertex_handle() != vh) { + if (squared_distance(vh->point(), extremity) < sq_dist_bound) { + extremity = vh->point(); + } + } + vh = triangulation.insert(extremity, start_cell); + start_cell = vh->cell(); + } + features_inside.push_back(std::move(polyline)); + } // end loop on polylines + } // end case where the transformation is not the identity + } // end if the reference_cube has polylines + } + + // call the split_graph_into_polylines, to create long polylines from the + // short polylines that were generated per voxel. + Polylines new_polylines_inside; + CGAL::polylines_to_protect(new_polylines_inside, + features_inside.begin(), + features_inside.end()); + + std::vector > polylines_on_bbox; + CGAL::polylines_to_protect(image, polylines_on_bbox, + new_polylines_inside.begin(), + new_polylines_inside.end()); + + domain.add_features(polylines_on_bbox.begin(), polylines_on_bbox.end()); + + // It is very important that the polylines from the file `lines_fname` + // contain only polylines in the inside of the box of the image. + domain.add_features(new_polylines_inside.begin(), new_polylines_inside.end()); + + std::ofstream output_polylines("out-generated.polylines.txt"); + output_polylines.precision(17); + for (auto poly : boost::range::join(polylines_on_bbox, new_polylines_inside)) { + output_polylines << poly.size(); + for (auto p : poly) output_polylines << " " << p; + output_polylines << std::endl; + } + + return true; +} +/// [Add 1D features] + +int main(int argc, char* argv[]) +{ + const std::string fname = (argc>1)?argv[1]:CGAL::data_file_path("images/420.inr"); + // Loads image + CGAL::Image_3 image; + if(!image.read(fname)){ + std::cerr << "Error: Cannot read file " << fname << std::endl; + return EXIT_FAILURE; + } + + // Domain + Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image); + + /// Declare 1D-features, see above [Call add_1D_features] + if(!add_1D_features(image, domain)) { + return EXIT_FAILURE; + } + /// [Call add_1D_features] + + CGAL::Bbox_3 bbox = domain.bbox(); + double diag = CGAL::sqrt((bbox.xmax() - bbox.xmin()) * (bbox.xmax() - bbox.xmin()) + (bbox.ymax() - bbox.ymin()) * (bbox.ymax() - bbox.ymin()) + (bbox.zmax() - bbox.zmin()) * (bbox.zmax() - bbox.zmin())); + double sizing_default = diag * 0.05; + + /// Note that `edge_size` is needed with 1D-features [Mesh criteria] + Mesh_criteria criteria(edge_size = sizing_default, + facet_angle = 30, facet_size = sizing_default, facet_distance = sizing_default / 10, + facet_topology = CGAL::FACET_VERTICES_ON_SAME_SURFACE_PATCH, + cell_radius_edge_ratio = 0, cell_size = 0 + ); + /// [Mesh criteria] + + // Meshing + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, + CGAL::parameters::no_exude(), + CGAL::parameters::no_perturb()); + + // Output + CGAL::dump_c3t3(c3t3, "out"); + + return 0; +} diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h new file mode 100644 index 00000000000..48f366ebfb5 --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -0,0 +1,6596 @@ +#ifndef CASES_TABLES_H +#define CASES_TABLES_H + +#include +#include +#include +#include +#include + +typedef std::array Combination; +typedef boost::hash Hash_combination; + +using Cases = std::array[6561]; + +auto find_case(const Cases& cases, Combination comb) { + using std::begin; + using std::end; + return std::lower_bound(begin(cases), end(cases), + std::array{ + comb[0], + comb[1], + comb[2], + comb[3], + comb[4], + comb[5], + comb[6], + comb[7], + 0, + 0 + }); +}; +const Cases cases = { +{ {0,0,0,0,0,0,0,0, 0, 0} }, +{ {0,0,0,0,0,0,0,1, 1, 0} }, +{ {0,0,0,0,0,0,0,2, 1, 0} }, +{ {0,0,0,0,0,0,1,0, 1, 1} }, +{ {0,0,0,0,0,0,1,1, 2, 0} }, +{ {0,0,0,0,0,0,1,2, 3, 0} }, +{ {0,0,0,0,0,0,2,0, 1, 1} }, +{ {0,0,0,0,0,0,2,1, 3, 1} }, +{ {0,0,0,0,0,0,2,2, 2, 0} }, +{ {0,0,0,0,0,1,0,0, 1, 6} }, +{ {0,0,0,0,0,1,0,1, 2, 18} }, +{ {0,0,0,0,0,1,0,2, 3, 19} }, +{ {0,0,0,0,0,1,1,0, 4, 0} }, +{ {0,0,0,0,0,1,1,1, 5, 0} }, +{ {0,0,0,0,0,1,1,2, 6, 0} }, +{ {0,0,0,0,0,1,2,0, 7, 0} }, +{ {0,0,0,0,0,1,2,1, 8, 0} }, +{ {0,0,0,0,0,1,2,2, 8, 19} }, +{ {0,0,0,0,0,2,0,0, 1, 6} }, +{ {0,0,0,0,0,2,0,1, 3, 18} }, +{ {0,0,0,0,0,2,0,2, 2, 18} }, +{ {0,0,0,0,0,2,1,0, 7, 16} }, +{ {0,0,0,0,0,2,1,1, 8, 19} }, +{ {0,0,0,0,0,2,1,2, 8, 0} }, +{ {0,0,0,0,0,2,2,0, 4, 0} }, +{ {0,0,0,0,0,2,2,1, 6, 0} }, +{ {0,0,0,0,0,2,2,2, 5, 0} }, +{ {0,0,0,0,1,0,0,0, 1, 7} }, +{ {0,0,0,0,1,0,0,1, 4, 1} }, +{ {0,0,0,0,1,0,0,2, 7, 1} }, +{ {0,0,0,0,1,0,1,0, 2, 15} }, +{ {0,0,0,0,1,0,1,1, 5, 1} }, +{ {0,0,0,0,1,0,1,2, 8, 1} }, +{ {0,0,0,0,1,0,2,0, 3, 14} }, +{ {0,0,0,0,1,0,2,1, 6, 1} }, +{ {0,0,0,0,1,0,2,2, 8, 14} }, +{ {0,0,0,0,1,1,0,0, 2, 6} }, +{ {0,0,0,0,1,1,0,1, 5, 18} }, +{ {0,0,0,0,1,1,0,2, 8, 18} }, +{ {0,0,0,0,1,1,1,0, 5, 15} }, +{ {0,0,0,0,1,1,1,1, 9, 0} }, +{ {0,0,0,0,1,1,1,2, 10, 0} }, +{ {0,0,0,0,1,1,2,0, 8, 15} }, +{ {0,0,0,0,1,1,2,1, 10, 1} }, +{ {0,0,0,0,1,1,2,2, 11, 0} }, +{ {0,0,0,0,1,2,0,0, 3, 6} }, +{ {0,0,0,0,1,2,0,1, 6, 18} }, +{ {0,0,0,0,1,2,0,2, 8, 17} }, +{ {0,0,0,0,1,2,1,0, 8, 16} }, +{ {0,0,0,0,1,2,1,1, 10, 18} }, +{ {0,0,0,0,1,2,1,2, 11, 18} }, +{ {0,0,0,0,1,2,2,0, 6, 15} }, +{ {0,0,0,0,1,2,2,1, 12, 0} }, +{ {0,0,0,0,1,2,2,2, 10, 15} }, +{ {0,0,0,0,2,0,0,0, 1, 7} }, +{ {0,0,0,0,2,0,0,1, 7, 17} }, +{ {0,0,0,0,2,0,0,2, 4, 1} }, +{ {0,0,0,0,2,0,1,0, 3, 15} }, +{ {0,0,0,0,2,0,1,1, 8, 14} }, +{ {0,0,0,0,2,0,1,2, 6, 1} }, +{ {0,0,0,0,2,0,2,0, 2, 15} }, +{ {0,0,0,0,2,0,2,1, 8, 1} }, +{ {0,0,0,0,2,0,2,2, 5, 1} }, +{ {0,0,0,0,2,1,0,0, 3, 7} }, +{ {0,0,0,0,2,1,0,1, 8, 17} }, +{ {0,0,0,0,2,1,0,2, 6, 18} }, +{ {0,0,0,0,2,1,1,0, 6, 15} }, +{ {0,0,0,0,2,1,1,1, 10, 15} }, +{ {0,0,0,0,2,1,1,2, 12, 1} }, +{ {0,0,0,0,2,1,2,0, 8, 16} }, +{ {0,0,0,0,2,1,2,1, 11, 15} }, +{ {0,0,0,0,2,1,2,2, 10, 18} }, +{ {0,0,0,0,2,2,0,0, 2, 6} }, +{ {0,0,0,0,2,2,0,1, 8, 18} }, +{ {0,0,0,0,2,2,0,2, 5, 18} }, +{ {0,0,0,0,2,2,1,0, 8, 15} }, +{ {0,0,0,0,2,2,1,1, 11, 16} }, +{ {0,0,0,0,2,2,1,2, 10, 1} }, +{ {0,0,0,0,2,2,2,0, 5, 15} }, +{ {0,0,0,0,2,2,2,1, 10, 0} }, +{ {0,0,0,0,2,2,2,2, 9, 0} }, +{ {0,0,0,1,0,0,0,0, 1, 2} }, +{ {0,0,0,1,0,0,0,1, 2, 12} }, +{ {0,0,0,1,0,0,0,2, 3, 13} }, +{ {0,0,0,1,0,0,1,0, 4, 3} }, +{ {0,0,0,1,0,0,1,1, 5, 21} }, +{ {0,0,0,1,0,0,1,2, 6, 21} }, +{ {0,0,0,1,0,0,2,0, 7, 21} }, +{ {0,0,0,1,0,0,2,1, 8, 21} }, +{ {0,0,0,1,0,0,2,2, 8, 32} }, +{ {0,0,0,1,0,1,0,0, 4, 13} }, +{ {0,0,0,1,0,1,0,1, 5, 13} }, +{ {0,0,0,1,0,1,0,2, 6, 13} }, +{ {0,0,0,1,0,1,1,0, 13, 0} }, +{ {0,0,0,1,0,1,1,1, 14, 0} }, +{ {0,0,0,1,0,1,1,2, 15, 0} }, +{ {0,0,0,1,0,1,2,0, 16, 0} }, +{ {0,0,0,1,0,1,2,1, 17, 0} }, +{ {0,0,0,1,0,1,2,2, 18, 0} }, +{ {0,0,0,1,0,2,0,0, 7, 27} }, +{ {0,0,0,1,0,2,0,1, 8, 40} }, +{ {0,0,0,1,0,2,0,2, 8, 13} }, +{ {0,0,0,1,0,2,1,0, 16, 19} }, +{ {0,0,0,1,0,2,1,1, 17, 19} }, +{ {0,0,0,1,0,2,1,2, 18, 19} }, +{ {0,0,0,1,0,2,2,0, 16, 13} }, +{ {0,0,0,1,0,2,2,1, 18, 13} }, +{ {0,0,0,1,0,2,2,2, 17, 13} }, +{ {0,0,0,1,1,0,0,0, 19, 0} }, +{ {0,0,0,1,1,0,0,1, 20, 0} }, +{ {0,0,0,1,1,0,0,2, 21, 0} }, +{ {0,0,0,1,1,0,1,0, 20, 20} }, +{ {0,0,0,1,1,0,1,1, 22, 0} }, +{ {0,0,0,1,1,0,1,2, 23, 0} }, +{ {0,0,0,1,1,0,2,0, 21, 20} }, +{ {0,0,0,1,1,0,2,1, 23, 20} }, +{ {0,0,0,1,1,0,2,2, 24, 0} }, +{ {0,0,0,1,1,1,0,0, 20, 26} }, +{ {0,0,0,1,1,1,0,1, 22, 19} }, +{ {0,0,0,1,1,1,0,2, 23, 19} }, +{ {0,0,0,1,1,1,1,0, 25, 0} }, +{ {0,0,0,1,1,1,1,1, 5, 5} }, +{ {0,0,0,1,1,1,1,2, 26, 0} }, +{ {0,0,0,1,1,1,2,0, 27, 0} }, +{ {0,0,0,1,1,1,2,1, 28, 0} }, +{ {0,0,0,1,1,1,2,2, 29, 0} }, +{ {0,0,0,1,1,2,0,0, 21, 26} }, +{ {0,0,0,1,1,2,0,1, 23, 41} }, +{ {0,0,0,1,1,2,0,2, 24, 19} }, +{ {0,0,0,1,1,2,1,0, 27, 19} }, +{ {0,0,0,1,1,2,1,1, 28, 19} }, +{ {0,0,0,1,1,2,1,2, 29, 19} }, +{ {0,0,0,1,1,2,2,0, 30, 0} }, +{ {0,0,0,1,1,2,2,1, 31, 0} }, +{ {0,0,0,1,1,2,2,2, 32, 0} }, +{ {0,0,0,1,2,0,0,0, 33, 0} }, +{ {0,0,0,1,2,0,0,1, 34, 0} }, +{ {0,0,0,1,2,0,0,2, 35, 0} }, +{ {0,0,0,1,2,0,1,0, 35, 20} }, +{ {0,0,0,1,2,0,1,1, 28, 39} }, +{ {0,0,0,1,2,0,1,2, 36, 0} }, +{ {0,0,0,1,2,0,2,0, 34, 20} }, +{ {0,0,0,1,2,0,2,1, 37, 0} }, +{ {0,0,0,1,2,0,2,2, 28, 29} }, +{ {0,0,0,1,2,1,0,0, 35, 26} }, +{ {0,0,0,1,2,1,0,1, 28, 22} }, +{ {0,0,0,1,2,1,0,2, 36, 19} }, +{ {0,0,0,1,2,1,1,0, 38, 0} }, +{ {0,0,0,1,2,1,1,1, 17, 22} }, +{ {0,0,0,1,2,1,1,2, 39, 0} }, +{ {0,0,0,1,2,1,2,0, 40, 0} }, +{ {0,0,0,1,2,1,2,1, 41, 0} }, +{ {0,0,0,1,2,1,2,2, 42, 0} }, +{ {0,0,0,1,2,2,0,0, 34, 26} }, +{ {0,0,0,1,2,2,0,1, 37, 19} }, +{ {0,0,0,1,2,2,0,2, 28, 10} }, +{ {0,0,0,1,2,2,1,0, 40, 19} }, +{ {0,0,0,1,2,2,1,1, 41, 19} }, +{ {0,0,0,1,2,2,1,2, 42, 19} }, +{ {0,0,0,1,2,2,2,0, 26, 11} }, +{ {0,0,0,1,2,2,2,1, 43, 0} }, +{ {0,0,0,1,2,2,2,2, 10, 11} }, +{ {0,0,0,2,0,0,0,0, 1, 2} }, +{ {0,0,0,2,0,0,0,1, 3, 12} }, +{ {0,0,0,2,0,0,0,2, 2, 12} }, +{ {0,0,0,2,0,0,1,0, 7, 3} }, +{ {0,0,0,2,0,0,1,1, 8, 32} }, +{ {0,0,0,2,0,0,1,2, 8, 21} }, +{ {0,0,0,2,0,0,2,0, 4, 3} }, +{ {0,0,0,2,0,0,2,1, 6, 21} }, +{ {0,0,0,2,0,0,2,2, 5, 21} }, +{ {0,0,0,2,0,1,0,0, 7, 13} }, +{ {0,0,0,2,0,1,0,1, 8, 13} }, +{ {0,0,0,2,0,1,0,2, 8, 40} }, +{ {0,0,0,2,0,1,1,0, 16, 13} }, +{ {0,0,0,2,0,1,1,1, 17, 13} }, +{ {0,0,0,2,0,1,1,2, 18, 13} }, +{ {0,0,0,2,0,1,2,0, 16, 19} }, +{ {0,0,0,2,0,1,2,1, 18, 19} }, +{ {0,0,0,2,0,1,2,2, 17, 19} }, +{ {0,0,0,2,0,2,0,0, 4, 13} }, +{ {0,0,0,2,0,2,0,1, 6, 13} }, +{ {0,0,0,2,0,2,0,2, 5, 13} }, +{ {0,0,0,2,0,2,1,0, 16, 0} }, +{ {0,0,0,2,0,2,1,1, 18, 0} }, +{ {0,0,0,2,0,2,1,2, 17, 0} }, +{ {0,0,0,2,0,2,2,0, 13, 0} }, +{ {0,0,0,2,0,2,2,1, 15, 0} }, +{ {0,0,0,2,0,2,2,2, 14, 0} }, +{ {0,0,0,2,1,0,0,0, 33, 5} }, +{ {0,0,0,2,1,0,0,1, 35, 0} }, +{ {0,0,0,2,1,0,0,2, 34, 0} }, +{ {0,0,0,2,1,0,1,0, 34, 20} }, +{ {0,0,0,2,1,0,1,1, 28, 29} }, +{ {0,0,0,2,1,0,1,2, 37, 20} }, +{ {0,0,0,2,1,0,2,0, 35, 20} }, +{ {0,0,0,2,1,0,2,1, 36, 20} }, +{ {0,0,0,2,1,0,2,2, 28, 39} }, +{ {0,0,0,2,1,1,0,0, 34, 26} }, +{ {0,0,0,2,1,1,0,1, 28, 10} }, +{ {0,0,0,2,1,1,0,2, 37, 41} }, +{ {0,0,0,2,1,1,1,0, 26, 11} }, +{ {0,0,0,2,1,1,1,1, 10, 11} }, +{ {0,0,0,2,1,1,1,2, 43, 0} }, +{ {0,0,0,2,1,1,2,0, 40, 19} }, +{ {0,0,0,2,1,1,2,1, 42, 19} }, +{ {0,0,0,2,1,1,2,2, 41, 19} }, +{ {0,0,0,2,1,2,0,0, 35, 26} }, +{ {0,0,0,2,1,2,0,1, 36, 41} }, +{ {0,0,0,2,1,2,0,2, 28, 22} }, +{ {0,0,0,2,1,2,1,0, 40, 0} }, +{ {0,0,0,2,1,2,1,1, 42, 0} }, +{ {0,0,0,2,1,2,1,2, 41, 0} }, +{ {0,0,0,2,1,2,2,0, 38, 0} }, +{ {0,0,0,2,1,2,2,1, 39, 0} }, +{ {0,0,0,2,1,2,2,2, 17, 22} }, +{ {0,0,0,2,2,0,0,0, 19, 0} }, +{ {0,0,0,2,2,0,0,1, 21, 0} }, +{ {0,0,0,2,2,0,0,2, 20, 0} }, +{ {0,0,0,2,2,0,1,0, 21, 20} }, +{ {0,0,0,2,2,0,1,1, 24, 0} }, +{ {0,0,0,2,2,0,1,2, 23, 20} }, +{ {0,0,0,2,2,0,2,0, 20, 20} }, +{ {0,0,0,2,2,0,2,1, 23, 0} }, +{ {0,0,0,2,2,0,2,2, 22, 0} }, +{ {0,0,0,2,2,1,0,0, 21, 26} }, +{ {0,0,0,2,2,1,0,1, 24, 19} }, +{ {0,0,0,2,2,1,0,2, 23, 41} }, +{ {0,0,0,2,2,1,1,0, 30, 0} }, +{ {0,0,0,2,2,1,1,1, 32, 0} }, +{ {0,0,0,2,2,1,1,2, 31, 0} }, +{ {0,0,0,2,2,1,2,0, 27, 19} }, +{ {0,0,0,2,2,1,2,1, 29, 19} }, +{ {0,0,0,2,2,1,2,2, 28, 19} }, +{ {0,0,0,2,2,2,0,0, 20, 26} }, +{ {0,0,0,2,2,2,0,1, 23, 19} }, +{ {0,0,0,2,2,2,0,2, 22, 19} }, +{ {0,0,0,2,2,2,1,0, 27, 0} }, +{ {0,0,0,2,2,2,1,1, 29, 0} }, +{ {0,0,0,2,2,2,1,2, 28, 0} }, +{ {0,0,0,2,2,2,2,0, 25, 0} }, +{ {0,0,0,2,2,2,2,1, 26, 0} }, +{ {0,0,0,2,2,2,2,2, 5, 5} }, +{ {0,0,1,0,0,0,0,0, 1, 3} }, +{ {0,0,1,0,0,0,0,1, 4, 2} }, +{ {0,0,1,0,0,0,0,2, 7, 20} }, +{ {0,0,1,0,0,0,1,0, 2, 9} }, +{ {0,0,1,0,0,0,1,1, 5, 20} }, +{ {0,0,1,0,0,0,1,2, 8, 20} }, +{ {0,0,1,0,0,0,2,0, 3, 8} }, +{ {0,0,1,0,0,0,2,1, 6, 20} }, +{ {0,0,1,0,0,0,2,2, 8, 43} }, +{ {0,0,1,0,0,1,0,0, 19, 1} }, +{ {0,0,1,0,0,1,0,1, 20, 21} }, +{ {0,0,1,0,0,1,0,2, 21, 21} }, +{ {0,0,1,0,0,1,1,0, 20, 1} }, +{ {0,0,1,0,0,1,1,1, 22, 1} }, +{ {0,0,1,0,0,1,1,2, 23, 21} }, +{ {0,0,1,0,0,1,2,0, 21, 1} }, +{ {0,0,1,0,0,1,2,1, 23, 1} }, +{ {0,0,1,0,0,1,2,2, 24, 1} }, +{ {0,0,1,0,0,2,0,0, 33, 1} }, +{ {0,0,1,0,0,2,0,1, 35, 21} }, +{ {0,0,1,0,0,2,0,2, 34, 21} }, +{ {0,0,1,0,0,2,1,0, 34, 1} }, +{ {0,0,1,0,0,2,1,1, 28, 44} }, +{ {0,0,1,0,0,2,1,2, 37, 1} }, +{ {0,0,1,0,0,2,2,0, 35, 1} }, +{ {0,0,1,0,0,2,2,1, 36, 1} }, +{ {0,0,1,0,0,2,2,2, 28, 30} }, +{ {0,0,1,0,1,0,0,0, 4, 8} }, +{ {0,0,1,0,1,0,0,1, 13, 1} }, +{ {0,0,1,0,1,0,0,2, 16, 1} }, +{ {0,0,1,0,1,0,1,0, 5, 8} }, +{ {0,0,1,0,1,0,1,1, 14, 1} }, +{ {0,0,1,0,1,0,1,2, 17, 1} }, +{ {0,0,1,0,1,0,2,0, 6, 8} }, +{ {0,0,1,0,1,0,2,1, 15, 1} }, +{ {0,0,1,0,1,0,2,2, 18, 1} }, +{ {0,0,1,0,1,1,0,0, 20, 23} }, +{ {0,0,1,0,1,1,0,1, 25, 1} }, +{ {0,0,1,0,1,1,0,2, 27, 1} }, +{ {0,0,1,0,1,1,1,0, 22, 14} }, +{ {0,0,1,0,1,1,1,1, 5, 4} }, +{ {0,0,1,0,1,1,1,2, 28, 1} }, +{ {0,0,1,0,1,1,2,0, 23, 14} }, +{ {0,0,1,0,1,1,2,1, 26, 1} }, +{ {0,0,1,0,1,1,2,2, 29, 1} }, +{ {0,0,1,0,1,2,0,0, 35, 23} }, +{ {0,0,1,0,1,2,0,1, 38, 1} }, +{ {0,0,1,0,1,2,0,2, 40, 1} }, +{ {0,0,1,0,1,2,1,0, 28, 27} }, +{ {0,0,1,0,1,2,1,1, 17, 27} }, +{ {0,0,1,0,1,2,1,2, 41, 1} }, +{ {0,0,1,0,1,2,2,0, 36, 14} }, +{ {0,0,1,0,1,2,2,1, 39, 1} }, +{ {0,0,1,0,1,2,2,2, 42, 1} }, +{ {0,0,1,0,2,0,0,0, 7, 22} }, +{ {0,0,1,0,2,0,0,1, 16, 14} }, +{ {0,0,1,0,2,0,0,2, 16, 8} }, +{ {0,0,1,0,2,0,1,0, 8, 35} }, +{ {0,0,1,0,2,0,1,1, 17, 14} }, +{ {0,0,1,0,2,0,1,2, 18, 8} }, +{ {0,0,1,0,2,0,2,0, 8, 8} }, +{ {0,0,1,0,2,0,2,1, 18, 14} }, +{ {0,0,1,0,2,0,2,2, 17, 8} }, +{ {0,0,1,0,2,1,0,0, 21, 23} }, +{ {0,0,1,0,2,1,0,1, 27, 14} }, +{ {0,0,1,0,2,1,0,2, 30, 1} }, +{ {0,0,1,0,2,1,1,0, 23, 34} }, +{ {0,0,1,0,2,1,1,1, 28, 14} }, +{ {0,0,1,0,2,1,1,2, 31, 1} }, +{ {0,0,1,0,2,1,2,0, 24, 14} }, +{ {0,0,1,0,2,1,2,1, 29, 14} }, +{ {0,0,1,0,2,1,2,2, 32, 1} }, +{ {0,0,1,0,2,2,0,0, 34, 23} }, +{ {0,0,1,0,2,2,0,1, 40, 14} }, +{ {0,0,1,0,2,2,0,2, 26, 10} }, +{ {0,0,1,0,2,2,1,0, 37, 14} }, +{ {0,0,1,0,2,2,1,1, 41, 14} }, +{ {0,0,1,0,2,2,1,2, 43, 1} }, +{ {0,0,1,0,2,2,2,0, 28, 11} }, +{ {0,0,1,0,2,2,2,1, 42, 14} }, +{ {0,0,1,0,2,2,2,2, 10, 10} }, +{ {0,0,1,1,0,0,0,0, 2, 2} }, +{ {0,0,1,1,0,0,0,1, 5, 2} }, +{ {0,0,1,1,0,0,0,2, 8, 33} }, +{ {0,0,1,1,0,0,1,0, 5, 3} }, +{ {0,0,1,1,0,0,1,1, 9, 2} }, +{ {0,0,1,1,0,0,1,2, 10, 21} }, +{ {0,0,1,1,0,0,2,0, 8, 42} }, +{ {0,0,1,1,0,0,2,1, 10, 20} }, +{ {0,0,1,1,0,0,2,2, 11, 20} }, +{ {0,0,1,1,0,1,0,0, 20, 12} }, +{ {0,0,1,1,0,1,0,1, 22, 12} }, +{ {0,0,1,1,0,1,0,2, 23, 32} }, +{ {0,0,1,1,0,1,1,0, 25, 21} }, +{ {0,0,1,1,0,1,1,1, 5, 24} }, +{ {0,0,1,1,0,1,1,2, 26, 21} }, +{ {0,0,1,1,0,1,2,0, 27, 21} }, +{ {0,0,1,1,0,1,2,1, 28, 21} }, +{ {0,0,1,1,0,1,2,2, 29, 21} }, +{ {0,0,1,1,0,2,0,0, 34, 12} }, +{ {0,0,1,1,0,2,0,1, 28, 7} }, +{ {0,0,1,1,0,2,0,2, 37, 12} }, +{ {0,0,1,1,0,2,1,0, 26, 6} }, +{ {0,0,1,1,0,2,1,1, 10, 6} }, +{ {0,0,1,1,0,2,1,2, 43, 21} }, +{ {0,0,1,1,0,2,2,0, 40, 32} }, +{ {0,0,1,1,0,2,2,1, 42, 32} }, +{ {0,0,1,1,0,2,2,2, 41, 32} }, +{ {0,0,1,1,1,0,0,0, 20, 9} }, +{ {0,0,1,1,1,0,0,1, 25, 20} }, +{ {0,0,1,1,1,0,0,2, 27, 20} }, +{ {0,0,1,1,1,0,1,0, 22, 9} }, +{ {0,0,1,1,1,0,1,1, 5, 25} }, +{ {0,0,1,1,1,0,1,2, 28, 20} }, +{ {0,0,1,1,1,0,2,0, 23, 43} }, +{ {0,0,1,1,1,0,2,1, 26, 20} }, +{ {0,0,1,1,1,0,2,2, 29, 20} }, +{ {0,0,1,1,1,1,0,0, 44, 0} }, +{ {0,0,1,1,1,1,0,1, 20, 22} }, +{ {0,0,1,1,1,1,0,2, 45, 0} }, +{ {0,0,1,1,1,1,1,0, 20, 27} }, +{ {0,0,1,1,1,1,1,1, 2, 4} }, +{ {0,0,1,1,1,1,1,2, 34, 27} }, +{ {0,0,1,1,1,1,2,0, 45, 1} }, +{ {0,0,1,1,1,1,2,1, 34, 22} }, +{ {0,0,1,1,1,1,2,2, 46, 0} }, +{ {0,0,1,1,1,2,0,0, 45, 6} }, +{ {0,0,1,1,1,2,0,1, 27, 7} }, +{ {0,0,1,1,1,2,0,2, 47, 0} }, +{ {0,0,1,1,1,2,1,0, 23, 45} }, +{ {0,0,1,1,1,2,1,1, 8, 44} }, +{ {0,0,1,1,1,2,1,2, 37, 27} }, +{ {0,0,1,1,1,2,2,0, 48, 0} }, +{ {0,0,1,1,1,2,2,1, 40, 38} }, +{ {0,0,1,1,1,2,2,2, 29, 5} }, +{ {0,0,1,1,2,0,0,0, 34, 9} }, +{ {0,0,1,1,2,0,0,1, 26, 7} }, +{ {0,0,1,1,2,0,0,2, 40, 43} }, +{ {0,0,1,1,2,0,1,0, 28, 6} }, +{ {0,0,1,1,2,0,1,1, 10, 7} }, +{ {0,0,1,1,2,0,1,2, 42, 43} }, +{ {0,0,1,1,2,0,2,0, 37, 9} }, +{ {0,0,1,1,2,0,2,1, 43, 20} }, +{ {0,0,1,1,2,0,2,2, 41, 43} }, +{ {0,0,1,1,2,1,0,0, 45, 7} }, +{ {0,0,1,1,2,1,0,1, 23, 38} }, +{ {0,0,1,1,2,1,0,2, 48, 1} }, +{ {0,0,1,1,2,1,1,0, 27, 6} }, +{ {0,0,1,1,2,1,1,1, 8, 39} }, +{ {0,0,1,1,2,1,1,2, 40, 45} }, +{ {0,0,1,1,2,1,2,0, 47, 1} }, +{ {0,0,1,1,2,1,2,1, 37, 22} }, +{ {0,0,1,1,2,1,2,2, 29, 4} }, +{ {0,0,1,1,2,2,0,0, 46, 6} }, +{ {0,0,1,1,2,2,0,1, 29, 7} }, +{ {0,0,1,1,2,2,0,2, 29, 10} }, +{ {0,0,1,1,2,2,1,0, 29, 6} }, +{ {0,0,1,1,2,2,1,1, 11, 6} }, +{ {0,0,1,1,2,2,1,2, 41, 45} }, +{ {0,0,1,1,2,2,2,0, 29, 11} }, +{ {0,0,1,1,2,2,2,1, 41, 38} }, +{ {0,0,1,1,2,2,2,2, 11, 10} }, +{ {0,0,1,2,0,0,0,0, 3, 2} }, +{ {0,0,1,2,0,0,0,1, 6, 2} }, +{ {0,0,1,2,0,0,0,2, 8, 2} }, +{ {0,0,1,2,0,0,1,0, 8, 3} }, +{ {0,0,1,2,0,0,1,1, 10, 2} }, +{ {0,0,1,2,0,0,1,2, 11, 33} }, +{ {0,0,1,2,0,0,2,0, 6, 3} }, +{ {0,0,1,2,0,0,2,1, 12, 3} }, +{ {0,0,1,2,0,0,2,2, 10, 3} }, +{ {0,0,1,2,0,1,0,0, 21, 12} }, +{ {0,0,1,2,0,1,0,1, 23, 12} }, +{ {0,0,1,2,0,1,0,2, 24, 12} }, +{ {0,0,1,2,0,1,1,0, 27, 32} }, +{ {0,0,1,2,0,1,1,1, 28, 32} }, +{ {0,0,1,2,0,1,1,2, 29, 32} }, +{ {0,0,1,2,0,1,2,0, 30, 21} }, +{ {0,0,1,2,0,1,2,1, 31, 21} }, +{ {0,0,1,2,0,1,2,2, 32, 21} }, +{ {0,0,1,2,0,2,0,0, 35, 12} }, +{ {0,0,1,2,0,2,0,1, 36, 12} }, +{ {0,0,1,2,0,2,0,2, 28, 37} }, +{ {0,0,1,2,0,2,1,0, 40, 21} }, +{ {0,0,1,2,0,2,1,1, 42, 21} }, +{ {0,0,1,2,0,2,1,2, 41, 21} }, +{ {0,0,1,2,0,2,2,0, 38, 21} }, +{ {0,0,1,2,0,2,2,1, 39, 21} }, +{ {0,0,1,2,0,2,2,2, 17, 30} }, +{ {0,0,1,2,1,0,0,0, 35, 9} }, +{ {0,0,1,2,1,0,0,1, 38, 20} }, +{ {0,0,1,2,1,0,0,2, 40, 20} }, +{ {0,0,1,2,1,0,1,0, 28, 46} }, +{ {0,0,1,2,1,0,1,1, 17, 29} }, +{ {0,0,1,2,1,0,1,2, 41, 20} }, +{ {0,0,1,2,1,0,2,0, 36, 43} }, +{ {0,0,1,2,1,0,2,1, 39, 20} }, +{ {0,0,1,2,1,0,2,2, 42, 20} }, +{ {0,0,1,2,1,1,0,0, 45, 2} }, +{ {0,0,1,2,1,1,0,1, 27, 10} }, +{ {0,0,1,2,1,1,0,2, 47, 21} }, +{ {0,0,1,2,1,1,1,0, 23, 28} }, +{ {0,0,1,2,1,1,1,1, 8, 29} }, +{ {0,0,1,2,1,1,1,2, 37, 46} }, +{ {0,0,1,2,1,1,2,0, 48, 21} }, +{ {0,0,1,2,1,1,2,1, 40, 31} }, +{ {0,0,1,2,1,1,2,2, 29, 24} }, +{ {0,0,1,2,1,2,0,0, 49, 0} }, +{ {0,0,1,2,1,2,0,1, 50, 0} }, +{ {0,0,1,2,1,2,0,2, 31, 22} }, +{ {0,0,1,2,1,2,1,0, 31, 27} }, +{ {0,0,1,2,1,2,1,1, 18, 4} }, +{ {0,0,1,2,1,2,1,2, 43, 27} }, +{ {0,0,1,2,1,2,2,0, 50, 1} }, +{ {0,0,1,2,1,2,2,1, 51, 0} }, +{ {0,0,1,2,1,2,2,2, 18, 5} }, +{ {0,0,1,2,2,0,0,0, 21, 9} }, +{ {0,0,1,2,2,0,0,1, 30, 20} }, +{ {0,0,1,2,2,0,0,2, 27, 43} }, +{ {0,0,1,2,2,0,1,0, 24, 9} }, +{ {0,0,1,2,2,0,1,1, 32, 20} }, +{ {0,0,1,2,2,0,1,2, 29, 43} }, +{ {0,0,1,2,2,0,2,0, 23, 9} }, +{ {0,0,1,2,2,0,2,1, 31, 20} }, +{ {0,0,1,2,2,0,2,2, 28, 43} }, +{ {0,0,1,2,2,1,0,0, 52, 0} }, +{ {0,0,1,2,2,1,0,1, 53, 0} }, +{ {0,0,1,2,2,1,0,2, 53, 21} }, +{ {0,0,1,2,2,1,1,0, 53, 20} }, +{ {0,0,1,2,2,1,1,1, 24, 5} }, +{ {0,0,1,2,2,1,1,2, 47, 44} }, +{ {0,0,1,2,2,1,2,0, 53, 1} }, +{ {0,0,1,2,2,1,2,1, 47, 30} }, +{ {0,0,1,2,2,1,2,2, 24, 4} }, +{ {0,0,1,2,2,2,0,0, 45, 3} }, +{ {0,0,1,2,2,2,0,1, 48, 20} }, +{ {0,0,1,2,2,2,0,2, 23, 31} }, +{ {0,0,1,2,2,2,1,0, 47, 20} }, +{ {0,0,1,2,2,2,1,1, 29, 25} }, +{ {0,0,1,2,2,2,1,2, 37, 37} }, +{ {0,0,1,2,2,2,2,0, 27, 11} }, +{ {0,0,1,2,2,2,2,1, 40, 28} }, +{ {0,0,1,2,2,2,2,2, 8, 30} }, +{ {0,0,2,0,0,0,0,0, 1, 3} }, +{ {0,0,2,0,0,0,0,1, 7, 2} }, +{ {0,0,2,0,0,0,0,2, 4, 2} }, +{ {0,0,2,0,0,0,1,0, 3, 9} }, +{ {0,0,2,0,0,0,1,1, 8, 43} }, +{ {0,0,2,0,0,0,1,2, 6, 20} }, +{ {0,0,2,0,0,0,2,0, 2, 9} }, +{ {0,0,2,0,0,0,2,1, 8, 20} }, +{ {0,0,2,0,0,0,2,2, 5, 20} }, +{ {0,0,2,0,0,1,0,0, 33, 4} }, +{ {0,0,2,0,0,1,0,1, 34, 21} }, +{ {0,0,2,0,0,1,0,2, 35, 21} }, +{ {0,0,2,0,0,1,1,0, 35, 1} }, +{ {0,0,2,0,0,1,1,1, 28, 30} }, +{ {0,0,2,0,0,1,1,2, 36, 21} }, +{ {0,0,2,0,0,1,2,0, 34, 1} }, +{ {0,0,2,0,0,1,2,1, 37, 21} }, +{ {0,0,2,0,0,1,2,2, 28, 44} }, +{ {0,0,2,0,0,2,0,0, 19, 1} }, +{ {0,0,2,0,0,2,0,1, 21, 21} }, +{ {0,0,2,0,0,2,0,2, 20, 21} }, +{ {0,0,2,0,0,2,1,0, 21, 1} }, +{ {0,0,2,0,0,2,1,1, 24, 1} }, +{ {0,0,2,0,0,2,1,2, 23, 1} }, +{ {0,0,2,0,0,2,2,0, 20, 1} }, +{ {0,0,2,0,0,2,2,1, 23, 21} }, +{ {0,0,2,0,0,2,2,2, 22, 1} }, +{ {0,0,2,0,1,0,0,0, 7, 8} }, +{ {0,0,2,0,1,0,0,1, 16, 8} }, +{ {0,0,2,0,1,0,0,2, 16, 14} }, +{ {0,0,2,0,1,0,1,0, 8, 8} }, +{ {0,0,2,0,1,0,1,1, 17, 8} }, +{ {0,0,2,0,1,0,1,2, 18, 14} }, +{ {0,0,2,0,1,0,2,0, 8, 35} }, +{ {0,0,2,0,1,0,2,1, 18, 8} }, +{ {0,0,2,0,1,0,2,2, 17, 14} }, +{ {0,0,2,0,1,1,0,0, 34, 23} }, +{ {0,0,2,0,1,1,0,1, 26, 10} }, +{ {0,0,2,0,1,1,0,2, 40, 14} }, +{ {0,0,2,0,1,1,1,0, 28, 11} }, +{ {0,0,2,0,1,1,1,1, 10, 10} }, +{ {0,0,2,0,1,1,1,2, 42, 14} }, +{ {0,0,2,0,1,1,2,0, 37, 34} }, +{ {0,0,2,0,1,1,2,1, 43, 1} }, +{ {0,0,2,0,1,1,2,2, 41, 14} }, +{ {0,0,2,0,1,2,0,0, 21, 23} }, +{ {0,0,2,0,1,2,0,1, 30, 1} }, +{ {0,0,2,0,1,2,0,2, 27, 14} }, +{ {0,0,2,0,1,2,1,0, 24, 14} }, +{ {0,0,2,0,1,2,1,1, 32, 1} }, +{ {0,0,2,0,1,2,1,2, 29, 14} }, +{ {0,0,2,0,1,2,2,0, 23, 34} }, +{ {0,0,2,0,1,2,2,1, 31, 1} }, +{ {0,0,2,0,1,2,2,2, 28, 14} }, +{ {0,0,2,0,2,0,0,0, 4, 8} }, +{ {0,0,2,0,2,0,0,1, 16, 1} }, +{ {0,0,2,0,2,0,0,2, 13, 1} }, +{ {0,0,2,0,2,0,1,0, 6, 8} }, +{ {0,0,2,0,2,0,1,1, 18, 1} }, +{ {0,0,2,0,2,0,1,2, 15, 1} }, +{ {0,0,2,0,2,0,2,0, 5, 8} }, +{ {0,0,2,0,2,0,2,1, 17, 1} }, +{ {0,0,2,0,2,0,2,2, 14, 1} }, +{ {0,0,2,0,2,1,0,0, 35, 23} }, +{ {0,0,2,0,2,1,0,1, 40, 1} }, +{ {0,0,2,0,2,1,0,2, 38, 1} }, +{ {0,0,2,0,2,1,1,0, 36, 34} }, +{ {0,0,2,0,2,1,1,1, 42, 1} }, +{ {0,0,2,0,2,1,1,2, 39, 1} }, +{ {0,0,2,0,2,1,2,0, 28, 27} }, +{ {0,0,2,0,2,1,2,1, 41, 1} }, +{ {0,0,2,0,2,1,2,2, 17, 27} }, +{ {0,0,2,0,2,2,0,0, 20, 23} }, +{ {0,0,2,0,2,2,0,1, 27, 1} }, +{ {0,0,2,0,2,2,0,2, 25, 1} }, +{ {0,0,2,0,2,2,1,0, 23, 14} }, +{ {0,0,2,0,2,2,1,1, 29, 1} }, +{ {0,0,2,0,2,2,1,2, 26, 1} }, +{ {0,0,2,0,2,2,2,0, 22, 14} }, +{ {0,0,2,0,2,2,2,1, 28, 1} }, +{ {0,0,2,0,2,2,2,2, 5, 4} }, +{ {0,0,2,1,0,0,0,0, 3, 3} }, +{ {0,0,2,1,0,0,0,1, 8, 2} }, +{ {0,0,2,1,0,0,0,2, 6, 2} }, +{ {0,0,2,1,0,0,1,0, 6, 3} }, +{ {0,0,2,1,0,0,1,1, 10, 3} }, +{ {0,0,2,1,0,0,1,2, 12, 2} }, +{ {0,0,2,1,0,0,2,0, 8, 3} }, +{ {0,0,2,1,0,0,2,1, 11, 42} }, +{ {0,0,2,1,0,0,2,2, 10, 2} }, +{ {0,0,2,1,0,1,0,0, 35, 12} }, +{ {0,0,2,1,0,1,0,1, 28, 37} }, +{ {0,0,2,1,0,1,0,2, 36, 32} }, +{ {0,0,2,1,0,1,1,0, 38, 21} }, +{ {0,0,2,1,0,1,1,1, 17, 30} }, +{ {0,0,2,1,0,1,1,2, 39, 21} }, +{ {0,0,2,1,0,1,2,0, 40, 21} }, +{ {0,0,2,1,0,1,2,1, 41, 21} }, +{ {0,0,2,1,0,1,2,2, 42, 21} }, +{ {0,0,2,1,0,2,0,0, 21, 12} }, +{ {0,0,2,1,0,2,0,1, 24, 12} }, +{ {0,0,2,1,0,2,0,2, 23, 12} }, +{ {0,0,2,1,0,2,1,0, 30, 21} }, +{ {0,0,2,1,0,2,1,1, 32, 21} }, +{ {0,0,2,1,0,2,1,2, 31, 21} }, +{ {0,0,2,1,0,2,2,0, 27, 32} }, +{ {0,0,2,1,0,2,2,1, 29, 32} }, +{ {0,0,2,1,0,2,2,2, 28, 32} }, +{ {0,0,2,1,1,0,0,0, 21, 9} }, +{ {0,0,2,1,1,0,0,1, 27, 43} }, +{ {0,0,2,1,1,0,0,2, 30, 20} }, +{ {0,0,2,1,1,0,1,0, 23, 9} }, +{ {0,0,2,1,1,0,1,1, 28, 43} }, +{ {0,0,2,1,1,0,1,2, 31, 20} }, +{ {0,0,2,1,1,0,2,0, 24, 9} }, +{ {0,0,2,1,1,0,2,1, 29, 43} }, +{ {0,0,2,1,1,0,2,2, 32, 20} }, +{ {0,0,2,1,1,1,0,0, 45, 3} }, +{ {0,0,2,1,1,1,0,1, 23, 31} }, +{ {0,0,2,1,1,1,0,2, 48, 20} }, +{ {0,0,2,1,1,1,1,0, 27, 11} }, +{ {0,0,2,1,1,1,1,1, 8, 30} }, +{ {0,0,2,1,1,1,1,2, 40, 28} }, +{ {0,0,2,1,1,1,2,0, 47, 20} }, +{ {0,0,2,1,1,1,2,1, 37, 37} }, +{ {0,0,2,1,1,1,2,2, 29, 25} }, +{ {0,0,2,1,1,2,0,0, 52, 1} }, +{ {0,0,2,1,1,2,0,1, 53, 21} }, +{ {0,0,2,1,1,2,0,2, 53, 0} }, +{ {0,0,2,1,1,2,1,0, 53, 1} }, +{ {0,0,2,1,1,2,1,1, 24, 4} }, +{ {0,0,2,1,1,2,1,2, 47, 29} }, +{ {0,0,2,1,1,2,2,0, 53, 20} }, +{ {0,0,2,1,1,2,2,1, 47, 39} }, +{ {0,0,2,1,1,2,2,2, 24, 5} }, +{ {0,0,2,1,2,0,0,0, 35, 9} }, +{ {0,0,2,1,2,0,0,1, 40, 20} }, +{ {0,0,2,1,2,0,0,2, 38, 20} }, +{ {0,0,2,1,2,0,1,0, 36, 9} }, +{ {0,0,2,1,2,0,1,1, 42, 20} }, +{ {0,0,2,1,2,0,1,2, 39, 20} }, +{ {0,0,2,1,2,0,2,0, 28, 46} }, +{ {0,0,2,1,2,0,2,1, 41, 20} }, +{ {0,0,2,1,2,0,2,2, 17, 29} }, +{ {0,0,2,1,2,1,0,0, 49, 1} }, +{ {0,0,2,1,2,1,0,1, 31, 22} }, +{ {0,0,2,1,2,1,0,2, 50, 0} }, +{ {0,0,2,1,2,1,1,0, 50, 1} }, +{ {0,0,2,1,2,1,1,1, 18, 5} }, +{ {0,0,2,1,2,1,1,2, 51, 1} }, +{ {0,0,2,1,2,1,2,0, 31, 27} }, +{ {0,0,2,1,2,1,2,1, 43, 22} }, +{ {0,0,2,1,2,1,2,2, 18, 4} }, +{ {0,0,2,1,2,2,0,0, 45, 2} }, +{ {0,0,2,1,2,2,0,1, 47, 21} }, +{ {0,0,2,1,2,2,0,2, 27, 10} }, +{ {0,0,2,1,2,2,1,0, 48, 21} }, +{ {0,0,2,1,2,2,1,1, 29, 24} }, +{ {0,0,2,1,2,2,1,2, 40, 31} }, +{ {0,0,2,1,2,2,2,0, 23, 28} }, +{ {0,0,2,1,2,2,2,1, 37, 46} }, +{ {0,0,2,1,2,2,2,2, 8, 29} }, +{ {0,0,2,2,0,0,0,0, 2, 2} }, +{ {0,0,2,2,0,0,0,1, 8, 33} }, +{ {0,0,2,2,0,0,0,2, 5, 2} }, +{ {0,0,2,2,0,0,1,0, 8, 42} }, +{ {0,0,2,2,0,0,1,1, 11, 2} }, +{ {0,0,2,2,0,0,1,2, 10, 20} }, +{ {0,0,2,2,0,0,2,0, 5, 3} }, +{ {0,0,2,2,0,0,2,1, 10, 21} }, +{ {0,0,2,2,0,0,2,2, 9, 2} }, +{ {0,0,2,2,0,1,0,0, 34, 12} }, +{ {0,0,2,2,0,1,0,1, 37, 32} }, +{ {0,0,2,2,0,1,0,2, 28, 7} }, +{ {0,0,2,2,0,1,1,0, 40, 32} }, +{ {0,0,2,2,0,1,1,1, 41, 32} }, +{ {0,0,2,2,0,1,1,2, 42, 32} }, +{ {0,0,2,2,0,1,2,0, 26, 6} }, +{ {0,0,2,2,0,1,2,1, 43, 21} }, +{ {0,0,2,2,0,1,2,2, 10, 6} }, +{ {0,0,2,2,0,2,0,0, 20, 12} }, +{ {0,0,2,2,0,2,0,1, 23, 32} }, +{ {0,0,2,2,0,2,0,2, 22, 12} }, +{ {0,0,2,2,0,2,1,0, 27, 21} }, +{ {0,0,2,2,0,2,1,1, 29, 21} }, +{ {0,0,2,2,0,2,1,2, 28, 21} }, +{ {0,0,2,2,0,2,2,0, 25, 21} }, +{ {0,0,2,2,0,2,2,1, 26, 21} }, +{ {0,0,2,2,0,2,2,2, 5, 24} }, +{ {0,0,2,2,1,0,0,0, 34, 9} }, +{ {0,0,2,2,1,0,0,1, 40, 43} }, +{ {0,0,2,2,1,0,0,2, 26, 7} }, +{ {0,0,2,2,1,0,1,0, 37, 43} }, +{ {0,0,2,2,1,0,1,1, 41, 43} }, +{ {0,0,2,2,1,0,1,2, 43, 20} }, +{ {0,0,2,2,1,0,2,0, 28, 6} }, +{ {0,0,2,2,1,0,2,1, 42, 43} }, +{ {0,0,2,2,1,0,2,2, 10, 7} }, +{ {0,0,2,2,1,1,0,0, 46, 2} }, +{ {0,0,2,2,1,1,0,1, 29, 10} }, +{ {0,0,2,2,1,1,0,2, 29, 7} }, +{ {0,0,2,2,1,1,1,0, 29, 11} }, +{ {0,0,2,2,1,1,1,1, 11, 10} }, +{ {0,0,2,2,1,1,1,2, 41, 28} }, +{ {0,0,2,2,1,1,2,0, 29, 6} }, +{ {0,0,2,2,1,1,2,1, 41, 31} }, +{ {0,0,2,2,1,1,2,2, 11, 6} }, +{ {0,0,2,2,1,2,0,0, 45, 7} }, +{ {0,0,2,2,1,2,0,1, 48, 1} }, +{ {0,0,2,2,1,2,0,2, 23, 38} }, +{ {0,0,2,2,1,2,1,0, 47, 1} }, +{ {0,0,2,2,1,2,1,1, 29, 4} }, +{ {0,0,2,2,1,2,1,2, 37, 22} }, +{ {0,0,2,2,1,2,2,0, 27, 6} }, +{ {0,0,2,2,1,2,2,1, 40, 45} }, +{ {0,0,2,2,1,2,2,2, 8, 39} }, +{ {0,0,2,2,2,0,0,0, 20, 9} }, +{ {0,0,2,2,2,0,0,1, 27, 20} }, +{ {0,0,2,2,2,0,0,2, 25, 20} }, +{ {0,0,2,2,2,0,1,0, 23, 43} }, +{ {0,0,2,2,2,0,1,1, 29, 20} }, +{ {0,0,2,2,2,0,1,2, 26, 20} }, +{ {0,0,2,2,2,0,2,0, 22, 9} }, +{ {0,0,2,2,2,0,2,1, 28, 20} }, +{ {0,0,2,2,2,0,2,2, 5, 25} }, +{ {0,0,2,2,2,1,0,0, 45, 6} }, +{ {0,0,2,2,2,1,0,1, 47, 0} }, +{ {0,0,2,2,2,1,0,2, 27, 7} }, +{ {0,0,2,2,2,1,1,0, 48, 0} }, +{ {0,0,2,2,2,1,1,1, 29, 5} }, +{ {0,0,2,2,2,1,1,2, 40, 38} }, +{ {0,0,2,2,2,1,2,0, 23, 45} }, +{ {0,0,2,2,2,1,2,1, 37, 27} }, +{ {0,0,2,2,2,1,2,2, 8, 44} }, +{ {0,0,2,2,2,2,0,0, 44, 0} }, +{ {0,0,2,2,2,2,0,1, 45, 0} }, +{ {0,0,2,2,2,2,0,2, 20, 22} }, +{ {0,0,2,2,2,2,1,0, 45, 1} }, +{ {0,0,2,2,2,2,1,1, 46, 0} }, +{ {0,0,2,2,2,2,1,2, 34, 22} }, +{ {0,0,2,2,2,2,2,0, 20, 27} }, +{ {0,0,2,2,2,2,2,1, 34, 27} }, +{ {0,0,2,2,2,2,2,2, 2, 4} }, +{ {0,1,0,0,0,0,0,0, 1, 4} }, +{ {0,1,0,0,0,0,0,1, 4, 12} }, +{ {0,1,0,0,0,0,0,2, 7, 12} }, +{ {0,1,0,0,0,0,1,0, 19, 7} }, +{ {0,1,0,0,0,0,1,1, 20, 13} }, +{ {0,1,0,0,0,0,1,2, 21, 13} }, +{ {0,1,0,0,0,0,2,0, 33, 2} }, +{ {0,1,0,0,0,0,2,1, 35, 13} }, +{ {0,1,0,0,0,0,2,2, 34, 13} }, +{ {0,1,0,0,0,1,0,0, 2, 27} }, +{ {0,1,0,0,0,1,0,1, 5, 26} }, +{ {0,1,0,0,0,1,0,2, 8, 41} }, +{ {0,1,0,0,0,1,1,0, 20, 18} }, +{ {0,1,0,0,0,1,1,1, 22, 18} }, +{ {0,1,0,0,0,1,1,2, 23, 40} }, +{ {0,1,0,0,0,1,2,0, 34, 18} }, +{ {0,1,0,0,0,1,2,1, 28, 9} }, +{ {0,1,0,0,0,1,2,2, 37, 18} }, +{ {0,1,0,0,0,2,0,0, 3, 26} }, +{ {0,1,0,0,0,2,0,1, 6, 26} }, +{ {0,1,0,0,0,2,0,2, 8, 26} }, +{ {0,1,0,0,0,2,1,0, 21, 18} }, +{ {0,1,0,0,0,2,1,1, 23, 18} }, +{ {0,1,0,0,0,2,1,2, 24, 18} }, +{ {0,1,0,0,0,2,2,0, 35, 18} }, +{ {0,1,0,0,0,2,2,1, 36, 18} }, +{ {0,1,0,0,0,2,2,2, 28, 5} }, +{ {0,1,0,0,1,0,0,0, 4, 6} }, +{ {0,1,0,0,1,0,0,1, 13, 6} }, +{ {0,1,0,0,1,0,0,2, 16, 18} }, +{ {0,1,0,0,1,0,1,0, 20, 7} }, +{ {0,1,0,0,1,0,1,1, 25, 18} }, +{ {0,1,0,0,1,0,1,2, 27, 18} }, +{ {0,1,0,0,1,0,2,0, 35, 7} }, +{ {0,1,0,0,1,0,2,1, 38, 18} }, +{ {0,1,0,0,1,0,2,2, 40, 18} }, +{ {0,1,0,0,1,1,0,0, 5, 6} }, +{ {0,1,0,0,1,1,0,1, 14, 6} }, +{ {0,1,0,0,1,1,0,2, 17, 18} }, +{ {0,1,0,0,1,1,1,0, 22, 7} }, +{ {0,1,0,0,1,1,1,1, 5, 10} }, +{ {0,1,0,0,1,1,1,2, 28, 18} }, +{ {0,1,0,0,1,1,2,0, 28, 42} }, +{ {0,1,0,0,1,1,2,1, 17, 9} }, +{ {0,1,0,0,1,1,2,2, 41, 18} }, +{ {0,1,0,0,1,2,0,0, 6, 6} }, +{ {0,1,0,0,1,2,0,1, 15, 6} }, +{ {0,1,0,0,1,2,0,2, 18, 18} }, +{ {0,1,0,0,1,2,1,0, 23, 17} }, +{ {0,1,0,0,1,2,1,1, 26, 18} }, +{ {0,1,0,0,1,2,1,2, 29, 18} }, +{ {0,1,0,0,1,2,2,0, 36, 17} }, +{ {0,1,0,0,1,2,2,1, 39, 18} }, +{ {0,1,0,0,1,2,2,2, 42, 18} }, +{ {0,1,0,0,2,0,0,0, 7, 6} }, +{ {0,1,0,0,2,0,0,1, 16, 6} }, +{ {0,1,0,0,2,0,0,2, 16, 26} }, +{ {0,1,0,0,2,0,1,0, 21, 7} }, +{ {0,1,0,0,2,0,1,1, 27, 17} }, +{ {0,1,0,0,2,0,1,2, 30, 18} }, +{ {0,1,0,0,2,0,2,0, 34, 7} }, +{ {0,1,0,0,2,0,2,1, 40, 17} }, +{ {0,1,0,0,2,0,2,2, 26, 4} }, +{ {0,1,0,0,2,1,0,0, 8, 6} }, +{ {0,1,0,0,2,1,0,1, 17, 6} }, +{ {0,1,0,0,2,1,0,2, 18, 26} }, +{ {0,1,0,0,2,1,1,0, 23, 7} }, +{ {0,1,0,0,2,1,1,1, 28, 17} }, +{ {0,1,0,0,2,1,1,2, 31, 18} }, +{ {0,1,0,0,2,1,2,0, 37, 17} }, +{ {0,1,0,0,2,1,2,1, 41, 17} }, +{ {0,1,0,0,2,1,2,2, 43, 18} }, +{ {0,1,0,0,2,2,0,0, 8, 45} }, +{ {0,1,0,0,2,2,0,1, 18, 6} }, +{ {0,1,0,0,2,2,0,2, 17, 26} }, +{ {0,1,0,0,2,2,1,0, 24, 7} }, +{ {0,1,0,0,2,2,1,1, 29, 17} }, +{ {0,1,0,0,2,2,1,2, 32, 18} }, +{ {0,1,0,0,2,2,2,0, 28, 28} }, +{ {0,1,0,0,2,2,2,1, 42, 17} }, +{ {0,1,0,0,2,2,2,2, 10, 4} }, +{ {0,1,0,1,0,0,0,0, 2, 28} }, +{ {0,1,0,1,0,0,0,1, 5, 12} }, +{ {0,1,0,1,0,0,0,2, 8, 12} }, +{ {0,1,0,1,0,0,1,0, 20, 2} }, +{ {0,1,0,1,0,0,1,1, 22, 13} }, +{ {0,1,0,1,0,0,1,2, 23, 13} }, +{ {0,1,0,1,0,0,2,0, 34, 2} }, +{ {0,1,0,1,0,0,2,1, 28, 34} }, +{ {0,1,0,1,0,0,2,2, 37, 33} }, +{ {0,1,0,1,0,1,0,0, 5, 27} }, +{ {0,1,0,1,0,1,0,1, 9, 12} }, +{ {0,1,0,1,0,1,0,2, 10, 13} }, +{ {0,1,0,1,0,1,1,0, 25, 13} }, +{ {0,1,0,1,0,1,1,1, 5, 22} }, +{ {0,1,0,1,0,1,1,2, 26, 13} }, +{ {0,1,0,1,0,1,2,0, 26, 8} }, +{ {0,1,0,1,0,1,2,1, 10, 8} }, +{ {0,1,0,1,0,1,2,2, 43, 13} }, +{ {0,1,0,1,0,2,0,0, 8, 27} }, +{ {0,1,0,1,0,2,0,1, 10, 26} }, +{ {0,1,0,1,0,2,0,2, 11, 40} }, +{ {0,1,0,1,0,2,1,0, 27, 40} }, +{ {0,1,0,1,0,2,1,1, 28, 40} }, +{ {0,1,0,1,0,2,1,2, 29, 40} }, +{ {0,1,0,1,0,2,2,0, 40, 13} }, +{ {0,1,0,1,0,2,2,1, 42, 13} }, +{ {0,1,0,1,0,2,2,2, 41, 13} }, +{ {0,1,0,1,1,0,0,0, 20, 25} }, +{ {0,1,0,1,1,0,0,1, 25, 26} }, +{ {0,1,0,1,1,0,0,2, 27, 41} }, +{ {0,1,0,1,1,0,1,0, 44, 18} }, +{ {0,1,0,1,1,0,1,1, 20, 24} }, +{ {0,1,0,1,1,0,1,2, 45, 19} }, +{ {0,1,0,1,1,0,2,0, 45, 14} }, +{ {0,1,0,1,1,0,2,1, 27, 34} }, +{ {0,1,0,1,1,0,2,2, 47, 19} }, +{ {0,1,0,1,1,1,0,0, 22, 26} }, +{ {0,1,0,1,1,1,0,1, 5, 9} }, +{ {0,1,0,1,1,1,0,2, 28, 41} }, +{ {0,1,0,1,1,1,1,0, 20, 3} }, +{ {0,1,0,1,1,1,1,1, 2, 31} }, +{ {0,1,0,1,1,1,1,2, 34, 3} }, +{ {0,1,0,1,1,1,2,0, 23, 8} }, +{ {0,1,0,1,1,1,2,1, 8, 9} }, +{ {0,1,0,1,1,1,2,2, 37, 42} }, +{ {0,1,0,1,1,2,0,0, 23, 26} }, +{ {0,1,0,1,1,2,0,1, 26, 26} }, +{ {0,1,0,1,1,2,0,2, 29, 41} }, +{ {0,1,0,1,1,2,1,0, 45, 18} }, +{ {0,1,0,1,1,2,1,1, 34, 24} }, +{ {0,1,0,1,1,2,1,2, 46, 18} }, +{ {0,1,0,1,1,2,2,0, 48, 19} }, +{ {0,1,0,1,1,2,2,1, 40, 23} }, +{ {0,1,0,1,1,2,2,2, 29, 30} }, +{ {0,1,0,1,2,0,0,0, 34, 25} }, +{ {0,1,0,1,2,0,0,1, 26, 23} }, +{ {0,1,0,1,2,0,0,2, 40, 26} }, +{ {0,1,0,1,2,0,1,0, 45, 15} }, +{ {0,1,0,1,2,0,1,1, 23, 23} }, +{ {0,1,0,1,2,0,1,2, 48, 18} }, +{ {0,1,0,1,2,0,2,0, 46, 15} }, +{ {0,1,0,1,2,0,2,1, 29, 34} }, +{ {0,1,0,1,2,0,2,2, 29, 29} }, +{ {0,1,0,1,2,1,0,0, 28, 35} }, +{ {0,1,0,1,2,1,0,1, 10, 23} }, +{ {0,1,0,1,2,1,0,2, 42, 26} }, +{ {0,1,0,1,2,1,1,0, 27, 35} }, +{ {0,1,0,1,2,1,1,1, 8, 22} }, +{ {0,1,0,1,2,1,1,2, 40, 8} }, +{ {0,1,0,1,2,1,2,0, 29, 35} }, +{ {0,1,0,1,2,1,2,1, 11, 35} }, +{ {0,1,0,1,2,1,2,2, 41, 8} }, +{ {0,1,0,1,2,2,0,0, 37, 44} }, +{ {0,1,0,1,2,2,0,1, 43, 26} }, +{ {0,1,0,1,2,2,0,2, 41, 26} }, +{ {0,1,0,1,2,2,1,0, 47, 18} }, +{ {0,1,0,1,2,2,1,1, 37, 39} }, +{ {0,1,0,1,2,2,1,2, 29, 31} }, +{ {0,1,0,1,2,2,2,0, 29, 28} }, +{ {0,1,0,1,2,2,2,1, 41, 23} }, +{ {0,1,0,1,2,2,2,2, 11, 28} }, +{ {0,1,0,2,0,0,0,0, 3, 28} }, +{ {0,1,0,2,0,0,0,1, 6, 12} }, +{ {0,1,0,2,0,0,0,2, 8, 47} }, +{ {0,1,0,2,0,0,1,0, 21, 2} }, +{ {0,1,0,2,0,0,1,1, 23, 33} }, +{ {0,1,0,2,0,0,1,2, 24, 13} }, +{ {0,1,0,2,0,0,2,0, 35, 2} }, +{ {0,1,0,2,0,0,2,1, 36, 33} }, +{ {0,1,0,2,0,0,2,2, 28, 24} }, +{ {0,1,0,2,0,1,0,0, 8, 46} }, +{ {0,1,0,2,0,1,0,1, 10, 12} }, +{ {0,1,0,2,0,1,0,2, 11, 12} }, +{ {0,1,0,2,0,1,1,0, 27, 13} }, +{ {0,1,0,2,0,1,1,1, 28, 13} }, +{ {0,1,0,2,0,1,1,2, 29, 13} }, +{ {0,1,0,2,0,1,2,0, 40, 40} }, +{ {0,1,0,2,0,1,2,1, 42, 40} }, +{ {0,1,0,2,0,1,2,2, 41, 40} }, +{ {0,1,0,2,0,2,0,0, 6, 27} }, +{ {0,1,0,2,0,2,0,1, 12, 13} }, +{ {0,1,0,2,0,2,0,2, 10, 27} }, +{ {0,1,0,2,0,2,1,0, 30, 13} }, +{ {0,1,0,2,0,2,1,1, 31, 13} }, +{ {0,1,0,2,0,2,1,2, 32, 13} }, +{ {0,1,0,2,0,2,2,0, 38, 13} }, +{ {0,1,0,2,0,2,2,1, 39, 13} }, +{ {0,1,0,2,0,2,2,2, 17, 5} }, +{ {0,1,0,2,1,0,0,0, 35, 25} }, +{ {0,1,0,2,1,0,0,1, 38, 26} }, +{ {0,1,0,2,1,0,0,2, 40, 41} }, +{ {0,1,0,2,1,0,1,0, 45, 28} }, +{ {0,1,0,2,1,0,1,1, 27, 29} }, +{ {0,1,0,2,1,0,1,2, 47, 40} }, +{ {0,1,0,2,1,0,2,0, 49, 19} }, +{ {0,1,0,2,1,0,2,1, 50, 19} }, +{ {0,1,0,2,1,0,2,2, 31, 24} }, +{ {0,1,0,2,1,1,0,0, 28, 3} }, +{ {0,1,0,2,1,1,0,1, 17, 3} }, +{ {0,1,0,2,1,1,0,2, 41, 41} }, +{ {0,1,0,2,1,1,1,0, 23, 11} }, +{ {0,1,0,2,1,1,1,1, 8, 10} }, +{ {0,1,0,2,1,1,1,2, 37, 3} }, +{ {0,1,0,2,1,1,2,0, 31, 3} }, +{ {0,1,0,2,1,1,2,1, 18, 31} }, +{ {0,1,0,2,1,1,2,2, 43, 3} }, +{ {0,1,0,2,1,2,0,0, 36, 26} }, +{ {0,1,0,2,1,2,0,1, 39, 26} }, +{ {0,1,0,2,1,2,0,2, 42, 41} }, +{ {0,1,0,2,1,2,1,0, 48, 40} }, +{ {0,1,0,2,1,2,1,1, 40, 4} }, +{ {0,1,0,2,1,2,1,2, 29, 37} }, +{ {0,1,0,2,1,2,2,0, 50, 18} }, +{ {0,1,0,2,1,2,2,1, 51, 19} }, +{ {0,1,0,2,1,2,2,2, 18, 30} }, +{ {0,1,0,2,2,0,0,0, 21, 25} }, +{ {0,1,0,2,2,0,0,1, 30, 26} }, +{ {0,1,0,2,2,0,0,2, 27, 26} }, +{ {0,1,0,2,2,0,1,0, 52, 19} }, +{ {0,1,0,2,2,0,1,1, 53, 19} }, +{ {0,1,0,2,2,0,1,2, 53, 40} }, +{ {0,1,0,2,2,0,2,0, 45, 29} }, +{ {0,1,0,2,2,0,2,1, 48, 41} }, +{ {0,1,0,2,2,0,2,2, 23, 4} }, +{ {0,1,0,2,2,1,0,0, 24, 26} }, +{ {0,1,0,2,2,1,0,1, 32, 26} }, +{ {0,1,0,2,2,1,0,2, 29, 26} }, +{ {0,1,0,2,2,1,1,0, 53, 41} }, +{ {0,1,0,2,2,1,1,1, 24, 30} }, +{ {0,1,0,2,2,1,1,2, 47, 9} }, +{ {0,1,0,2,2,1,2,0, 47, 41} }, +{ {0,1,0,2,2,1,2,1, 29, 36} }, +{ {0,1,0,2,2,1,2,2, 37, 24} }, +{ {0,1,0,2,2,2,0,0, 23, 44} }, +{ {0,1,0,2,2,2,0,1, 31, 26} }, +{ {0,1,0,2,2,2,0,2, 28, 26} }, +{ {0,1,0,2,2,2,1,0, 53, 18} }, +{ {0,1,0,2,2,2,1,1, 47, 5} }, +{ {0,1,0,2,2,2,1,2, 24, 31} }, +{ {0,1,0,2,2,2,2,0, 27, 28} }, +{ {0,1,0,2,2,2,2,1, 40, 11} }, +{ {0,1,0,2,2,2,2,2, 8, 5} }, +{ {0,1,1,0,0,0,0,0, 4, 5} }, +{ {0,1,1,0,0,0,0,1, 13, 2} }, +{ {0,1,1,0,0,0,0,2, 16, 12} }, +{ {0,1,1,0,0,0,1,0, 20, 10} }, +{ {0,1,1,0,0,0,1,1, 25, 2} }, +{ {0,1,1,0,0,0,1,2, 27, 33} }, +{ {0,1,1,0,0,0,2,0, 35, 10} }, +{ {0,1,1,0,0,0,2,1, 38, 2} }, +{ {0,1,1,0,0,0,2,2, 40, 33} }, +{ {0,1,1,0,0,1,0,0, 20, 4} }, +{ {0,1,1,0,0,1,0,1, 25, 12} }, +{ {0,1,1,0,0,1,0,2, 27, 12} }, +{ {0,1,1,0,0,1,1,0, 44, 12} }, +{ {0,1,1,0,0,1,1,1, 20, 5} }, +{ {0,1,1,0,0,1,1,2, 45, 13} }, +{ {0,1,1,0,0,1,2,0, 45, 8} }, +{ {0,1,1,0,0,1,2,1, 27, 9} }, +{ {0,1,1,0,0,1,2,2, 47, 32} }, +{ {0,1,1,0,0,2,0,0, 35, 4} }, +{ {0,1,1,0,0,2,0,1, 38, 12} }, +{ {0,1,1,0,0,2,0,2, 40, 12} }, +{ {0,1,1,0,0,2,1,0, 45, 26} }, +{ {0,1,1,0,0,2,1,1, 27, 44} }, +{ {0,1,1,0,0,2,1,2, 47, 13} }, +{ {0,1,1,0,0,2,2,0, 49, 13} }, +{ {0,1,1,0,0,2,2,1, 50, 13} }, +{ {0,1,1,0,0,2,2,2, 31, 5} }, +{ {0,1,1,0,1,0,0,0, 13, 5} }, +{ {0,1,1,0,1,0,0,1, 54, 0} }, +{ {0,1,1,0,1,0,0,2, 55, 0} }, +{ {0,1,1,0,1,0,1,0, 25, 22} }, +{ {0,1,1,0,1,0,1,1, 13, 4} }, +{ {0,1,1,0,1,0,1,2, 38, 27} }, +{ {0,1,1,0,1,0,2,0, 38, 22} }, +{ {0,1,1,0,1,0,2,1, 55, 1} }, +{ {0,1,1,0,1,0,2,2, 51, 5} }, +{ {0,1,1,0,1,1,0,0, 25, 24} }, +{ {0,1,1,0,1,1,0,1, 13, 3} }, +{ {0,1,1,0,1,1,0,2, 38, 3} }, +{ {0,1,1,0,1,1,1,0, 20, 11} }, +{ {0,1,1,0,1,1,1,1, 4, 4} }, +{ {0,1,1,0,1,1,1,2, 35, 11} }, +{ {0,1,1,0,1,1,2,0, 27, 42} }, +{ {0,1,1,0,1,1,2,1, 16, 9} }, +{ {0,1,1,0,1,1,2,2, 40, 42} }, +{ {0,1,1,0,1,2,0,0, 38, 24} }, +{ {0,1,1,0,1,2,0,1, 55, 6} }, +{ {0,1,1,0,1,2,0,2, 51, 30} }, +{ {0,1,1,0,1,2,1,0, 27, 27} }, +{ {0,1,1,0,1,2,1,1, 16, 27} }, +{ {0,1,1,0,1,2,1,2, 40, 27} }, +{ {0,1,1,0,1,2,2,0, 50, 23} }, +{ {0,1,1,0,1,2,2,1, 56, 0} }, +{ {0,1,1,0,1,2,2,2, 39, 5} }, +{ {0,1,1,0,2,0,0,0, 16, 22} }, +{ {0,1,1,0,2,0,0,1, 55, 7} }, +{ {0,1,1,0,2,0,0,2, 56, 1} }, +{ {0,1,1,0,2,0,1,0, 27, 22} }, +{ {0,1,1,0,2,0,1,1, 38, 25} }, +{ {0,1,1,0,2,0,1,2, 50, 26} }, +{ {0,1,1,0,2,0,2,0, 40, 22} }, +{ {0,1,1,0,2,0,2,1, 51, 28} }, +{ {0,1,1,0,2,0,2,2, 39, 4} }, +{ {0,1,1,0,2,1,0,0, 27, 39} }, +{ {0,1,1,0,2,1,0,1, 38, 9} }, +{ {0,1,1,0,2,1,0,2, 50, 8} }, +{ {0,1,1,0,2,1,1,0, 45, 23} }, +{ {0,1,1,0,2,1,1,1, 35, 5} }, +{ {0,1,1,0,2,1,1,2, 49, 8} }, +{ {0,1,1,0,2,1,2,0, 47, 23} }, +{ {0,1,1,0,2,1,2,1, 40, 9} }, +{ {0,1,1,0,2,1,2,2, 31, 4} }, +{ {0,1,1,0,2,2,0,0, 40, 39} }, +{ {0,1,1,0,2,2,0,1, 51, 2} }, +{ {0,1,1,0,2,2,0,2, 39, 10} }, +{ {0,1,1,0,2,2,1,0, 47, 38} }, +{ {0,1,1,0,2,2,1,1, 40, 44} }, +{ {0,1,1,0,2,2,1,2, 31, 10} }, +{ {0,1,1,0,2,2,2,0, 31, 11} }, +{ {0,1,1,0,2,2,2,1, 39, 11} }, +{ {0,1,1,0,2,2,2,2, 12, 5} }, +{ {0,1,1,1,0,0,0,0, 5, 11} }, +{ {0,1,1,1,0,0,0,1, 14, 2} }, +{ {0,1,1,1,0,0,0,2, 17, 12} }, +{ {0,1,1,1,0,0,1,0, 22, 2} }, +{ {0,1,1,1,0,0,1,1, 5, 7} }, +{ {0,1,1,1,0,0,1,2, 28, 33} }, +{ {0,1,1,1,0,0,2,0, 28, 15} }, +{ {0,1,1,1,0,0,2,1, 17, 15} }, +{ {0,1,1,1,0,0,2,2, 41, 33} }, +{ {0,1,1,1,0,1,0,0, 22, 29} }, +{ {0,1,1,1,0,1,0,1, 5, 23} }, +{ {0,1,1,1,0,1,0,2, 28, 12} }, +{ {0,1,1,1,0,1,1,0, 20, 15} }, +{ {0,1,1,1,0,1,1,1, 2, 22} }, +{ {0,1,1,1,0,1,1,2, 34, 15} }, +{ {0,1,1,1,0,1,2,0, 23, 35} }, +{ {0,1,1,1,0,1,2,1, 8, 34} }, +{ {0,1,1,1,0,1,2,2, 37, 15} }, +{ {0,1,1,1,0,2,0,0, 28, 16} }, +{ {0,1,1,1,0,2,0,1, 17, 7} }, +{ {0,1,1,1,0,2,0,2, 41, 12} }, +{ {0,1,1,1,0,2,1,0, 23, 6} }, +{ {0,1,1,1,0,2,1,1, 8, 7} }, +{ {0,1,1,1,0,2,1,2, 37, 16} }, +{ {0,1,1,1,0,2,2,0, 31, 15} }, +{ {0,1,1,1,0,2,2,1, 18, 23} }, +{ {0,1,1,1,0,2,2,2, 43, 15} }, +{ {0,1,1,1,1,0,0,0, 25, 5} }, +{ {0,1,1,1,1,0,0,1, 13, 7} }, +{ {0,1,1,1,1,0,0,2, 38, 15} }, +{ {0,1,1,1,1,0,1,0, 20, 6} }, +{ {0,1,1,1,1,0,1,1, 4, 7} }, +{ {0,1,1,1,1,0,1,2, 35, 6} }, +{ {0,1,1,1,1,0,2,0, 27, 15} }, +{ {0,1,1,1,1,0,2,1, 16, 15} }, +{ {0,1,1,1,1,0,2,2, 40, 15} }, +{ {0,1,1,1,1,1,0,0, 20, 8} }, +{ {0,1,1,1,1,1,0,1, 4, 9} }, +{ {0,1,1,1,1,1,0,2, 35, 8} }, +{ {0,1,1,1,1,1,1,0, 19, 6} }, +{ {0,1,1,1,1,1,1,1, 1, 5} }, +{ {0,1,1,1,1,1,1,2, 33, 3} }, +{ {0,1,1,1,1,1,2,0, 21, 8} }, +{ {0,1,1,1,1,1,2,1, 7, 9} }, +{ {0,1,1,1,1,1,2,2, 34, 8} }, +{ {0,1,1,1,1,2,0,0, 27, 16} }, +{ {0,1,1,1,1,2,0,1, 16, 7} }, +{ {0,1,1,1,1,2,0,2, 40, 16} }, +{ {0,1,1,1,1,2,1,0, 21, 6} }, +{ {0,1,1,1,1,2,1,1, 7, 7} }, +{ {0,1,1,1,1,2,1,2, 34, 6} }, +{ {0,1,1,1,1,2,2,0, 30, 15} }, +{ {0,1,1,1,1,2,2,1, 16, 23} }, +{ {0,1,1,1,1,2,2,2, 26, 5} }, +{ {0,1,1,1,2,0,0,0, 26, 15} }, +{ {0,1,1,1,2,0,0,1, 15, 7} }, +{ {0,1,1,1,2,0,0,2, 39, 15} }, +{ {0,1,1,1,2,0,1,0, 23, 16} }, +{ {0,1,1,1,2,0,1,1, 6, 7} }, +{ {0,1,1,1,2,0,1,2, 36, 16} }, +{ {0,1,1,1,2,0,2,0, 29, 15} }, +{ {0,1,1,1,2,0,2,1, 18, 15} }, +{ {0,1,1,1,2,0,2,2, 42, 15} }, +{ {0,1,1,1,2,1,0,0, 23, 15} }, +{ {0,1,1,1,2,1,0,1, 6, 23} }, +{ {0,1,1,1,2,1,0,2, 36, 15} }, +{ {0,1,1,1,2,1,1,0, 21, 15} }, +{ {0,1,1,1,2,1,1,1, 3, 23} }, +{ {0,1,1,1,2,1,1,2, 35, 15} }, +{ {0,1,1,1,2,1,2,0, 24, 15} }, +{ {0,1,1,1,2,1,2,1, 8, 23} }, +{ {0,1,1,1,2,1,2,2, 28, 4} }, +{ {0,1,1,1,2,2,0,0, 29, 16} }, +{ {0,1,1,1,2,2,0,1, 18, 7} }, +{ {0,1,1,1,2,2,0,2, 42, 16} }, +{ {0,1,1,1,2,2,1,0, 24, 6} }, +{ {0,1,1,1,2,2,1,1, 8, 38} }, +{ {0,1,1,1,2,2,1,2, 28, 31} }, +{ {0,1,1,1,2,2,2,0, 32, 15} }, +{ {0,1,1,1,2,2,2,1, 17, 23} }, +{ {0,1,1,1,2,2,2,2, 10, 5} }, +{ {0,1,1,2,0,0,0,0, 6, 11} }, +{ {0,1,1,2,0,0,0,1, 15, 2} }, +{ {0,1,1,2,0,0,0,2, 18, 12} }, +{ {0,1,1,2,0,0,1,0, 23, 2} }, +{ {0,1,1,2,0,0,1,1, 26, 2} }, +{ {0,1,1,2,0,0,1,2, 29, 33} }, +{ {0,1,1,2,0,0,2,0, 36, 2} }, +{ {0,1,1,2,0,0,2,1, 39, 2} }, +{ {0,1,1,2,0,0,2,2, 42, 33} }, +{ {0,1,1,2,0,1,0,0, 23, 47} }, +{ {0,1,1,2,0,1,0,1, 26, 12} }, +{ {0,1,1,2,0,1,0,2, 29, 12} }, +{ {0,1,1,2,0,1,1,0, 45, 12} }, +{ {0,1,1,2,0,1,1,1, 34, 5} }, +{ {0,1,1,2,0,1,1,2, 46, 12} }, +{ {0,1,1,2,0,1,2,0, 48, 32} }, +{ {0,1,1,2,0,1,2,1, 40, 36} }, +{ {0,1,1,2,0,1,2,2, 29, 39} }, +{ {0,1,1,2,0,2,0,0, 36, 47} }, +{ {0,1,1,2,0,2,0,1, 39, 12} }, +{ {0,1,1,2,0,2,0,2, 42, 12} }, +{ {0,1,1,2,0,2,1,0, 48, 13} }, +{ {0,1,1,2,0,2,1,1, 40, 25} }, +{ {0,1,1,2,0,2,1,2, 29, 22} }, +{ {0,1,1,2,0,2,2,0, 50, 12} }, +{ {0,1,1,2,0,2,2,1, 51, 13} }, +{ {0,1,1,2,0,2,2,2, 18, 22} }, +{ {0,1,1,2,1,0,0,0, 38, 5} }, +{ {0,1,1,2,1,0,0,1, 55, 2} }, +{ {0,1,1,2,1,0,0,2, 51, 22} }, +{ {0,1,1,2,1,0,1,0, 27, 46} }, +{ {0,1,1,2,1,0,1,1, 16, 29} }, +{ {0,1,1,2,1,0,1,2, 40, 46} }, +{ {0,1,1,2,1,0,2,0, 50, 31} }, +{ {0,1,1,2,1,0,2,1, 56, 3} }, +{ {0,1,1,2,1,0,2,2, 39, 24} }, +{ {0,1,1,2,1,1,0,0, 27, 3} }, +{ {0,1,1,2,1,1,0,1, 16, 3} }, +{ {0,1,1,2,1,1,0,2, 40, 3} }, +{ {0,1,1,2,1,1,1,0, 21, 11} }, +{ {0,1,1,2,1,1,1,1, 7, 10} }, +{ {0,1,1,2,1,1,1,2, 34, 11} }, +{ {0,1,1,2,1,1,2,0, 30, 3} }, +{ {0,1,1,2,1,1,2,1, 16, 31} }, +{ {0,1,1,2,1,1,2,2, 26, 24} }, +{ {0,1,1,2,1,2,0,0, 50, 4} }, +{ {0,1,1,2,1,2,0,1, 56, 13} }, +{ {0,1,1,2,1,2,0,2, 39, 22} }, +{ {0,1,1,2,1,2,1,0, 30, 27} }, +{ {0,1,1,2,1,2,1,1, 16, 4} }, +{ {0,1,1,2,1,2,1,2, 26, 22} }, +{ {0,1,1,2,1,2,2,0, 57, 0} }, +{ {0,1,1,2,1,2,2,1, 55, 5} }, +{ {0,1,1,2,1,2,2,2, 15, 5} }, +{ {0,1,1,2,2,0,0,0, 30, 5} }, +{ {0,1,1,2,2,0,0,1, 57, 2} }, +{ {0,1,1,2,2,0,0,2, 50, 22} }, +{ {0,1,1,2,2,0,1,0, 53, 36} }, +{ {0,1,1,2,2,0,1,1, 30, 25} }, +{ {0,1,1,2,2,0,1,2, 48, 44} }, +{ {0,1,1,2,2,0,2,0, 48, 30} }, +{ {0,1,1,2,2,0,2,1, 50, 29} }, +{ {0,1,1,2,2,0,2,2, 36, 4} }, +{ {0,1,1,2,2,1,0,0, 53, 25} }, +{ {0,1,1,2,2,1,0,1, 30, 9} }, +{ {0,1,1,2,2,1,0,2, 48, 9} }, +{ {0,1,1,2,2,1,1,0, 52, 9} }, +{ {0,1,1,2,2,1,1,1, 21, 5} }, +{ {0,1,1,2,2,1,1,2, 45, 22} }, +{ {0,1,1,2,2,1,2,0, 53, 8} }, +{ {0,1,1,2,2,1,2,1, 27, 36} }, +{ {0,1,1,2,2,1,2,2, 23, 24} }, +{ {0,1,1,2,2,2,0,0, 48, 5} }, +{ {0,1,1,2,2,2,0,1, 50, 3} }, +{ {0,1,1,2,2,2,0,2, 36, 31} }, +{ {0,1,1,2,2,2,1,0, 53, 45} }, +{ {0,1,1,2,2,2,1,1, 27, 25} }, +{ {0,1,1,2,2,2,1,2, 23, 37} }, +{ {0,1,1,2,2,2,2,0, 30, 11} }, +{ {0,1,1,2,2,2,2,1, 38, 11} }, +{ {0,1,1,2,2,2,2,2, 6, 5} }, +{ {0,1,2,0,0,0,0,0, 7, 11} }, +{ {0,1,2,0,0,0,0,1, 16, 2} }, +{ {0,1,2,0,0,0,0,2, 16, 28} }, +{ {0,1,2,0,0,0,1,0, 21, 10} }, +{ {0,1,2,0,0,0,1,1, 27, 2} }, +{ {0,1,2,0,0,0,1,2, 30, 2} }, +{ {0,1,2,0,0,0,2,0, 34, 10} }, +{ {0,1,2,0,0,0,2,1, 40, 2} }, +{ {0,1,2,0,0,0,2,2, 26, 25} }, +{ {0,1,2,0,0,1,0,0, 34, 4} }, +{ {0,1,2,0,0,1,0,1, 26, 9} }, +{ {0,1,2,0,0,1,0,2, 40, 47} }, +{ {0,1,2,0,0,1,1,0, 45, 9} }, +{ {0,1,2,0,0,1,1,1, 23, 36} }, +{ {0,1,2,0,0,1,1,2, 48, 33} }, +{ {0,1,2,0,0,1,2,0, 46, 9} }, +{ {0,1,2,0,0,1,2,1, 29, 9} }, +{ {0,1,2,0,0,1,2,2, 29, 44} }, +{ {0,1,2,0,0,2,0,0, 21, 4} }, +{ {0,1,2,0,0,2,0,1, 30, 12} }, +{ {0,1,2,0,0,2,0,2, 27, 47} }, +{ {0,1,2,0,0,2,1,0, 52, 12} }, +{ {0,1,2,0,0,2,1,1, 53, 32} }, +{ {0,1,2,0,0,2,1,2, 53, 13} }, +{ {0,1,2,0,0,2,2,0, 45, 27} }, +{ {0,1,2,0,0,2,2,1, 48, 12} }, +{ {0,1,2,0,0,2,2,2, 23, 25} }, +{ {0,1,2,0,1,0,0,0, 16, 30} }, +{ {0,1,2,0,1,0,0,1, 55, 3} }, +{ {0,1,2,0,1,0,0,2, 56, 2} }, +{ {0,1,2,0,1,0,1,0, 27, 37} }, +{ {0,1,2,0,1,0,1,1, 38, 4} }, +{ {0,1,2,0,1,0,1,2, 50, 28} }, +{ {0,1,2,0,1,0,2,0, 40, 37} }, +{ {0,1,2,0,1,0,2,1, 51, 26} }, +{ {0,1,2,0,1,0,2,2, 39, 25} }, +{ {0,1,2,0,1,1,0,0, 26, 3} }, +{ {0,1,2,0,1,1,0,1, 15, 3} }, +{ {0,1,2,0,1,1,0,2, 39, 3} }, +{ {0,1,2,0,1,1,1,0, 23, 3} }, +{ {0,1,2,0,1,1,1,1, 6, 10} }, +{ {0,1,2,0,1,1,1,2, 36, 3} }, +{ {0,1,2,0,1,1,2,0, 29, 42} }, +{ {0,1,2,0,1,1,2,1, 18, 9} }, +{ {0,1,2,0,1,1,2,2, 42, 42} }, +{ {0,1,2,0,1,2,0,0, 30, 24} }, +{ {0,1,2,0,1,2,0,1, 57, 6} }, +{ {0,1,2,0,1,2,0,2, 50, 30} }, +{ {0,1,2,0,1,2,1,0, 53, 23} }, +{ {0,1,2,0,1,2,1,1, 30, 4} }, +{ {0,1,2,0,1,2,1,2, 48, 29} }, +{ {0,1,2,0,1,2,2,0, 48, 39} }, +{ {0,1,2,0,1,2,2,1, 50, 27} }, +{ {0,1,2,0,1,2,2,2, 36, 25} }, +{ {0,1,2,0,2,0,0,0, 16, 5} }, +{ {0,1,2,0,2,0,0,1, 56, 8} }, +{ {0,1,2,0,2,0,0,2, 55, 4} }, +{ {0,1,2,0,2,0,1,0, 30, 22} }, +{ {0,1,2,0,2,0,1,1, 50, 5} }, +{ {0,1,2,0,2,0,1,2, 57, 1} }, +{ {0,1,2,0,2,0,2,0, 26, 27} }, +{ {0,1,2,0,2,0,2,1, 39, 27} }, +{ {0,1,2,0,2,0,2,2, 15, 4} }, +{ {0,1,2,0,2,1,0,0, 40, 24} }, +{ {0,1,2,0,2,1,0,1, 39, 9} }, +{ {0,1,2,0,2,1,0,2, 51, 8} }, +{ {0,1,2,0,2,1,1,0, 48, 22} }, +{ {0,1,2,0,2,1,1,1, 36, 36} }, +{ {0,1,2,0,2,1,1,2, 50, 9} }, +{ {0,1,2,0,2,1,2,0, 29, 27} }, +{ {0,1,2,0,2,1,2,1, 42, 9} }, +{ {0,1,2,0,2,1,2,2, 18, 27} }, +{ {0,1,2,0,2,2,0,0, 27, 24} }, +{ {0,1,2,0,2,2,0,1, 50, 2} }, +{ {0,1,2,0,2,2,0,2, 38, 10} }, +{ {0,1,2,0,2,2,1,0, 53, 38} }, +{ {0,1,2,0,2,2,1,1, 48, 4} }, +{ {0,1,2,0,2,2,1,2, 30, 10} }, +{ {0,1,2,0,2,2,2,0, 23, 46} }, +{ {0,1,2,0,2,2,2,1, 36, 46} }, +{ {0,1,2,0,2,2,2,2, 6, 4} }, +{ {0,1,2,1,0,0,0,0, 8, 11} }, +{ {0,1,2,1,0,0,0,1, 17, 2} }, +{ {0,1,2,1,0,0,0,2, 18, 28} }, +{ {0,1,2,1,0,0,1,0, 23, 10} }, +{ {0,1,2,1,0,0,1,1, 28, 2} }, +{ {0,1,2,1,0,0,1,2, 31, 2} }, +{ {0,1,2,1,0,0,2,0, 37, 2} }, +{ {0,1,2,1,0,0,2,1, 41, 2} }, +{ {0,1,2,1,0,0,2,2, 43, 2} }, +{ {0,1,2,1,0,1,0,0, 28, 8} }, +{ {0,1,2,1,0,1,0,1, 10, 9} }, +{ {0,1,2,1,0,1,0,2, 42, 47} }, +{ {0,1,2,1,0,1,1,0, 27, 8} }, +{ {0,1,2,1,0,1,1,1, 8, 37} }, +{ {0,1,2,1,0,1,1,2, 40, 35} }, +{ {0,1,2,1,0,1,2,0, 29, 8} }, +{ {0,1,2,1,0,1,2,1, 11, 9} }, +{ {0,1,2,1,0,1,2,2, 41, 35} }, +{ {0,1,2,1,0,2,0,0, 24, 29} }, +{ {0,1,2,1,0,2,0,1, 32, 12} }, +{ {0,1,2,1,0,2,0,2, 29, 47} }, +{ {0,1,2,1,0,2,1,0, 53, 12} }, +{ {0,1,2,1,0,2,1,1, 24, 23} }, +{ {0,1,2,1,0,2,1,2, 47, 34} }, +{ {0,1,2,1,0,2,2,0, 47, 12} }, +{ {0,1,2,1,0,2,2,1, 29, 23} }, +{ {0,1,2,1,0,2,2,2, 37, 5} }, +{ {0,1,2,1,1,0,0,0, 27, 30} }, +{ {0,1,2,1,1,0,0,1, 38, 23} }, +{ {0,1,2,1,1,0,0,2, 50, 14} }, +{ {0,1,2,1,1,0,1,0, 45, 31} }, +{ {0,1,2,1,1,0,1,1, 35, 24} }, +{ {0,1,2,1,1,0,1,2, 49, 14} }, +{ {0,1,2,1,1,0,2,0, 47, 36} }, +{ {0,1,2,1,1,0,2,1, 40, 34} }, +{ {0,1,2,1,1,0,2,2, 31, 25} }, +{ {0,1,2,1,1,1,0,0, 23, 42} }, +{ {0,1,2,1,1,1,0,1, 6, 9} }, +{ {0,1,2,1,1,1,0,2, 36, 42} }, +{ {0,1,2,1,1,1,1,0, 21, 3} }, +{ {0,1,2,1,1,1,1,1, 3, 31} }, +{ {0,1,2,1,1,1,1,2, 35, 3} }, +{ {0,1,2,1,1,1,2,0, 24, 8} }, +{ {0,1,2,1,1,1,2,1, 8, 36} }, +{ {0,1,2,1,1,1,2,2, 28, 25} }, +{ {0,1,2,1,1,2,0,0, 53, 4} }, +{ {0,1,2,1,1,2,0,1, 30, 23} }, +{ {0,1,2,1,1,2,0,2, 48, 34} }, +{ {0,1,2,1,1,2,1,0, 52, 14} }, +{ {0,1,2,1,1,2,1,1, 21, 24} }, +{ {0,1,2,1,1,2,1,2, 45, 30} }, +{ {0,1,2,1,1,2,2,0, 53, 35} }, +{ {0,1,2,1,1,2,2,1, 27, 23} }, +{ {0,1,2,1,1,2,2,2, 23, 5} }, +{ {0,1,2,1,2,0,0,0, 40, 5} }, +{ {0,1,2,1,2,0,0,1, 39, 23} }, +{ {0,1,2,1,2,0,0,2, 51, 14} }, +{ {0,1,2,1,2,0,1,0, 48, 37} }, +{ {0,1,2,1,2,0,1,1, 36, 23} }, +{ {0,1,2,1,2,0,1,2, 50, 15} }, +{ {0,1,2,1,2,0,2,0, 29, 46} }, +{ {0,1,2,1,2,0,2,1, 42, 34} }, +{ {0,1,2,1,2,0,2,2, 18, 29} }, +{ {0,1,2,1,2,1,0,0, 31, 8} }, +{ {0,1,2,1,2,1,0,1, 12, 8} }, +{ {0,1,2,1,2,1,0,2, 39, 8} }, +{ {0,1,2,1,2,1,1,0, 30, 8} }, +{ {0,1,2,1,2,1,1,1, 6, 22} }, +{ {0,1,2,1,2,1,1,2, 38, 8} }, +{ {0,1,2,1,2,1,2,0, 32, 8} }, +{ {0,1,2,1,2,1,2,1, 10, 22} }, +{ {0,1,2,1,2,1,2,2, 17, 4} }, +{ {0,1,2,1,2,2,0,0, 47, 4} }, +{ {0,1,2,1,2,2,0,1, 31, 23} }, +{ {0,1,2,1,2,2,0,2, 40, 10} }, +{ {0,1,2,1,2,2,1,0, 53, 15} }, +{ {0,1,2,1,2,2,1,1, 23, 39} }, +{ {0,1,2,1,2,2,1,2, 27, 31} }, +{ {0,1,2,1,2,2,2,0, 24, 28} }, +{ {0,1,2,1,2,2,2,1, 28, 23} }, +{ {0,1,2,1,2,2,2,2, 8, 4} }, +{ {0,1,2,2,0,0,0,0, 8, 28} }, +{ {0,1,2,2,0,0,0,1, 18, 2} }, +{ {0,1,2,2,0,0,0,2, 17, 28} }, +{ {0,1,2,2,0,0,1,0, 24, 2} }, +{ {0,1,2,2,0,0,1,1, 29, 2} }, +{ {0,1,2,2,0,0,1,2, 32, 2} }, +{ {0,1,2,2,0,0,2,0, 28, 45} }, +{ {0,1,2,2,0,0,2,1, 42, 2} }, +{ {0,1,2,2,0,0,2,2, 10, 25} }, +{ {0,1,2,2,0,1,0,0, 37, 29} }, +{ {0,1,2,2,0,1,0,1, 43, 12} }, +{ {0,1,2,2,0,1,0,2, 41, 47} }, +{ {0,1,2,2,0,1,1,0, 47, 33} }, +{ {0,1,2,2,0,1,1,1, 37, 30} }, +{ {0,1,2,2,0,1,1,2, 29, 38} }, +{ {0,1,2,2,0,1,2,0, 29, 45} }, +{ {0,1,2,2,0,1,2,1, 41, 36} }, +{ {0,1,2,2,0,1,2,2, 11, 44} }, +{ {0,1,2,2,0,2,0,0, 23, 29} }, +{ {0,1,2,2,0,2,0,1, 31, 12} }, +{ {0,1,2,2,0,2,0,2, 28, 47} }, +{ {0,1,2,2,0,2,1,0, 53, 33} }, +{ {0,1,2,2,0,2,1,1, 47, 24} }, +{ {0,1,2,2,0,2,1,2, 24, 22} }, +{ {0,1,2,2,0,2,2,0, 27, 45} }, +{ {0,1,2,2,0,2,2,1, 40, 6} }, +{ {0,1,2,2,0,2,2,2, 8, 24} }, +{ {0,1,2,2,1,0,0,0, 40, 30} }, +{ {0,1,2,2,1,0,0,1, 51, 6} }, +{ {0,1,2,2,1,0,0,2, 39, 7} }, +{ {0,1,2,2,1,0,1,0, 47, 31} }, +{ {0,1,2,2,1,0,1,1, 40, 29} }, +{ {0,1,2,2,1,0,1,2, 31, 7} }, +{ {0,1,2,2,1,0,2,0, 31, 6} }, +{ {0,1,2,2,1,0,2,1, 39, 6} }, +{ {0,1,2,2,1,0,2,2, 12, 6} }, +{ {0,1,2,2,1,1,0,0, 29, 3} }, +{ {0,1,2,2,1,1,0,1, 18, 3} }, +{ {0,1,2,2,1,1,0,2, 42, 3} }, +{ {0,1,2,2,1,1,1,0, 24, 3} }, +{ {0,1,2,2,1,1,1,1, 8, 31} }, +{ {0,1,2,2,1,1,1,2, 28, 38} }, +{ {0,1,2,2,1,1,2,0, 32, 3} }, +{ {0,1,2,2,1,1,2,1, 17, 31} }, +{ {0,1,2,2,1,1,2,2, 10, 24} }, +{ {0,1,2,2,1,2,0,0, 48, 24} }, +{ {0,1,2,2,1,2,0,1, 50, 7} }, +{ {0,1,2,2,1,2,0,2, 36, 38} }, +{ {0,1,2,2,1,2,1,0, 53, 28} }, +{ {0,1,2,2,1,2,1,1, 27, 4} }, +{ {0,1,2,2,1,2,1,2, 23, 22} }, +{ {0,1,2,2,1,2,2,0, 30, 6} }, +{ {0,1,2,2,1,2,2,1, 38, 6} }, +{ {0,1,2,2,1,2,2,2, 6, 24} }, +{ {0,1,2,2,2,0,0,0, 27, 5} }, +{ {0,1,2,2,2,0,0,1, 50, 6} }, +{ {0,1,2,2,2,0,0,2, 38, 7} }, +{ {0,1,2,2,2,0,1,0, 53, 31} }, +{ {0,1,2,2,2,0,1,1, 48, 25} }, +{ {0,1,2,2,2,0,1,2, 30, 7} }, +{ {0,1,2,2,2,0,2,0, 23, 27} }, +{ {0,1,2,2,2,0,2,1, 36, 27} }, +{ {0,1,2,2,2,0,2,2, 6, 25} }, +{ {0,1,2,2,2,1,0,0, 47, 25} }, +{ {0,1,2,2,2,1,0,1, 31, 9} }, +{ {0,1,2,2,2,1,0,2, 40, 7} }, +{ {0,1,2,2,2,1,1,0, 53, 42} }, +{ {0,1,2,2,2,1,1,1, 23, 30} }, +{ {0,1,2,2,2,1,1,2, 27, 38} }, +{ {0,1,2,2,2,1,2,0, 24, 27} }, +{ {0,1,2,2,2,1,2,1, 28, 36} }, +{ {0,1,2,2,2,1,2,2, 8, 25} }, +{ {0,1,2,2,2,2,0,0, 45, 4} }, +{ {0,1,2,2,2,2,0,1, 49, 6} }, +{ {0,1,2,2,2,2,0,2, 35, 22} }, +{ {0,1,2,2,2,2,1,0, 52, 7} }, +{ {0,1,2,2,2,2,1,1, 45, 5} }, +{ {0,1,2,2,2,2,1,2, 21, 22} }, +{ {0,1,2,2,2,2,2,0, 21, 27} }, +{ {0,1,2,2,2,2,2,1, 35, 27} }, +{ {0,1,2,2,2,2,2,2, 3, 4} }, +{ {0,2,0,0,0,0,0,0, 1, 4} }, +{ {0,2,0,0,0,0,0,1, 7, 26} }, +{ {0,2,0,0,0,0,0,2, 4, 12} }, +{ {0,2,0,0,0,0,1,0, 33, 7} }, +{ {0,2,0,0,0,0,1,1, 34, 13} }, +{ {0,2,0,0,0,0,1,2, 35, 13} }, +{ {0,2,0,0,0,0,2,0, 19, 7} }, +{ {0,2,0,0,0,0,2,1, 21, 13} }, +{ {0,2,0,0,0,0,2,2, 20, 13} }, +{ {0,2,0,0,0,1,0,0, 3, 27} }, +{ {0,2,0,0,0,1,0,1, 8, 26} }, +{ {0,2,0,0,0,1,0,2, 6, 26} }, +{ {0,2,0,0,0,1,1,0, 35, 18} }, +{ {0,2,0,0,0,1,1,1, 28, 5} }, +{ {0,2,0,0,0,1,1,2, 36, 40} }, +{ {0,2,0,0,0,1,2,0, 21, 18} }, +{ {0,2,0,0,0,1,2,1, 24, 18} }, +{ {0,2,0,0,0,1,2,2, 23, 18} }, +{ {0,2,0,0,0,2,0,0, 2, 27} }, +{ {0,2,0,0,0,2,0,1, 8, 41} }, +{ {0,2,0,0,0,2,0,2, 5, 26} }, +{ {0,2,0,0,0,2,1,0, 34, 18} }, +{ {0,2,0,0,0,2,1,1, 37, 40} }, +{ {0,2,0,0,0,2,1,2, 28, 9} }, +{ {0,2,0,0,0,2,2,0, 20, 18} }, +{ {0,2,0,0,0,2,2,1, 23, 40} }, +{ {0,2,0,0,0,2,2,2, 22, 18} }, +{ {0,2,0,0,1,0,0,0, 7, 24} }, +{ {0,2,0,0,1,0,0,1, 16, 26} }, +{ {0,2,0,0,1,0,0,2, 16, 6} }, +{ {0,2,0,0,1,0,1,0, 34, 7} }, +{ {0,2,0,0,1,0,1,1, 26, 4} }, +{ {0,2,0,0,1,0,1,2, 40, 17} }, +{ {0,2,0,0,1,0,2,0, 21, 7} }, +{ {0,2,0,0,1,0,2,1, 30, 18} }, +{ {0,2,0,0,1,0,2,2, 27, 17} }, +{ {0,2,0,0,1,1,0,0, 8, 45} }, +{ {0,2,0,0,1,1,0,1, 17, 26} }, +{ {0,2,0,0,1,1,0,2, 18, 6} }, +{ {0,2,0,0,1,1,1,0, 28, 28} }, +{ {0,2,0,0,1,1,1,1, 10, 4} }, +{ {0,2,0,0,1,1,1,2, 42, 17} }, +{ {0,2,0,0,1,1,2,0, 24, 7} }, +{ {0,2,0,0,1,1,2,1, 32, 18} }, +{ {0,2,0,0,1,1,2,2, 29, 17} }, +{ {0,2,0,0,1,2,0,0, 8, 6} }, +{ {0,2,0,0,1,2,0,1, 18, 26} }, +{ {0,2,0,0,1,2,0,2, 17, 6} }, +{ {0,2,0,0,1,2,1,0, 37, 7} }, +{ {0,2,0,0,1,2,1,1, 43, 18} }, +{ {0,2,0,0,1,2,1,2, 41, 17} }, +{ {0,2,0,0,1,2,2,0, 23, 7} }, +{ {0,2,0,0,1,2,2,1, 31, 18} }, +{ {0,2,0,0,1,2,2,2, 28, 17} }, +{ {0,2,0,0,2,0,0,0, 4, 6} }, +{ {0,2,0,0,2,0,0,1, 16, 18} }, +{ {0,2,0,0,2,0,0,2, 13, 6} }, +{ {0,2,0,0,2,0,1,0, 35, 7} }, +{ {0,2,0,0,2,0,1,1, 40, 18} }, +{ {0,2,0,0,2,0,1,2, 38, 18} }, +{ {0,2,0,0,2,0,2,0, 20, 7} }, +{ {0,2,0,0,2,0,2,1, 27, 18} }, +{ {0,2,0,0,2,0,2,2, 25, 18} }, +{ {0,2,0,0,2,1,0,0, 6, 6} }, +{ {0,2,0,0,2,1,0,1, 18, 18} }, +{ {0,2,0,0,2,1,0,2, 15, 6} }, +{ {0,2,0,0,2,1,1,0, 36, 7} }, +{ {0,2,0,0,2,1,1,1, 42, 18} }, +{ {0,2,0,0,2,1,1,2, 39, 18} }, +{ {0,2,0,0,2,1,2,0, 23, 17} }, +{ {0,2,0,0,2,1,2,1, 29, 18} }, +{ {0,2,0,0,2,1,2,2, 26, 18} }, +{ {0,2,0,0,2,2,0,0, 5, 6} }, +{ {0,2,0,0,2,2,0,1, 17, 18} }, +{ {0,2,0,0,2,2,0,2, 14, 6} }, +{ {0,2,0,0,2,2,1,0, 28, 42} }, +{ {0,2,0,0,2,2,1,1, 41, 18} }, +{ {0,2,0,0,2,2,1,2, 17, 9} }, +{ {0,2,0,0,2,2,2,0, 22, 7} }, +{ {0,2,0,0,2,2,2,1, 28, 18} }, +{ {0,2,0,0,2,2,2,2, 5, 10} }, +{ {0,2,0,1,0,0,0,0, 3, 29} }, +{ {0,2,0,1,0,0,0,1, 8, 47} }, +{ {0,2,0,1,0,0,0,2, 6, 12} }, +{ {0,2,0,1,0,0,1,0, 35, 2} }, +{ {0,2,0,1,0,0,1,1, 28, 24} }, +{ {0,2,0,1,0,0,1,2, 36, 13} }, +{ {0,2,0,1,0,0,2,0, 21, 2} }, +{ {0,2,0,1,0,0,2,1, 24, 13} }, +{ {0,2,0,1,0,0,2,2, 23, 33} }, +{ {0,2,0,1,0,1,0,0, 6, 27} }, +{ {0,2,0,1,0,1,0,1, 10, 27} }, +{ {0,2,0,1,0,1,0,2, 12, 12} }, +{ {0,2,0,1,0,1,1,0, 38, 13} }, +{ {0,2,0,1,0,1,1,1, 17, 5} }, +{ {0,2,0,1,0,1,1,2, 39, 13} }, +{ {0,2,0,1,0,1,2,0, 30, 13} }, +{ {0,2,0,1,0,1,2,1, 32, 13} }, +{ {0,2,0,1,0,1,2,2, 31, 13} }, +{ {0,2,0,1,0,2,0,0, 8, 46} }, +{ {0,2,0,1,0,2,0,1, 11, 27} }, +{ {0,2,0,1,0,2,0,2, 10, 12} }, +{ {0,2,0,1,0,2,1,0, 40, 40} }, +{ {0,2,0,1,0,2,1,1, 41, 40} }, +{ {0,2,0,1,0,2,1,2, 42, 40} }, +{ {0,2,0,1,0,2,2,0, 27, 13} }, +{ {0,2,0,1,0,2,2,1, 29, 13} }, +{ {0,2,0,1,0,2,2,2, 28, 13} }, +{ {0,2,0,1,1,0,0,0, 21, 25} }, +{ {0,2,0,1,1,0,0,1, 27, 26} }, +{ {0,2,0,1,1,0,0,2, 30, 26} }, +{ {0,2,0,1,1,0,1,0, 45, 29} }, +{ {0,2,0,1,1,0,1,1, 23, 4} }, +{ {0,2,0,1,1,0,1,2, 48, 41} }, +{ {0,2,0,1,1,0,2,0, 52, 18} }, +{ {0,2,0,1,1,0,2,1, 53, 40} }, +{ {0,2,0,1,1,0,2,2, 53, 19} }, +{ {0,2,0,1,1,1,0,0, 23, 44} }, +{ {0,2,0,1,1,1,0,1, 28, 26} }, +{ {0,2,0,1,1,1,0,2, 31, 26} }, +{ {0,2,0,1,1,1,1,0, 27, 28} }, +{ {0,2,0,1,1,1,1,1, 8, 5} }, +{ {0,2,0,1,1,1,1,2, 40, 11} }, +{ {0,2,0,1,1,1,2,0, 53, 18} }, +{ {0,2,0,1,1,1,2,1, 24, 31} }, +{ {0,2,0,1,1,1,2,2, 47, 10} }, +{ {0,2,0,1,1,2,0,0, 24, 26} }, +{ {0,2,0,1,1,2,0,1, 29, 26} }, +{ {0,2,0,1,1,2,0,2, 32, 26} }, +{ {0,2,0,1,1,2,1,0, 47, 41} }, +{ {0,2,0,1,1,2,1,1, 37, 24} }, +{ {0,2,0,1,1,2,1,2, 29, 36} }, +{ {0,2,0,1,1,2,2,0, 53, 41} }, +{ {0,2,0,1,1,2,2,1, 47, 22} }, +{ {0,2,0,1,1,2,2,2, 24, 30} }, +{ {0,2,0,1,2,0,0,0, 35, 25} }, +{ {0,2,0,1,2,0,0,1, 40, 41} }, +{ {0,2,0,1,2,0,0,2, 38, 26} }, +{ {0,2,0,1,2,0,1,0, 49, 18} }, +{ {0,2,0,1,2,0,1,1, 31, 24} }, +{ {0,2,0,1,2,0,1,2, 50, 19} }, +{ {0,2,0,1,2,0,2,0, 45, 28} }, +{ {0,2,0,1,2,0,2,1, 47, 40} }, +{ {0,2,0,1,2,0,2,2, 27, 29} }, +{ {0,2,0,1,2,1,0,0, 36, 44} }, +{ {0,2,0,1,2,1,0,1, 42, 41} }, +{ {0,2,0,1,2,1,0,2, 39, 26} }, +{ {0,2,0,1,2,1,1,0, 50, 18} }, +{ {0,2,0,1,2,1,1,1, 18, 30} }, +{ {0,2,0,1,2,1,1,2, 51, 18} }, +{ {0,2,0,1,2,1,2,0, 48, 40} }, +{ {0,2,0,1,2,1,2,1, 29, 37} }, +{ {0,2,0,1,2,1,2,2, 40, 4} }, +{ {0,2,0,1,2,2,0,0, 28, 3} }, +{ {0,2,0,1,2,2,0,1, 41, 41} }, +{ {0,2,0,1,2,2,0,2, 17, 3} }, +{ {0,2,0,1,2,2,1,0, 31, 3} }, +{ {0,2,0,1,2,2,1,1, 43, 24} }, +{ {0,2,0,1,2,2,1,2, 18, 31} }, +{ {0,2,0,1,2,2,2,0, 23, 11} }, +{ {0,2,0,1,2,2,2,1, 37, 3} }, +{ {0,2,0,1,2,2,2,2, 8, 10} }, +{ {0,2,0,2,0,0,0,0, 2, 28} }, +{ {0,2,0,2,0,0,0,1, 8, 12} }, +{ {0,2,0,2,0,0,0,2, 5, 12} }, +{ {0,2,0,2,0,0,1,0, 34, 2} }, +{ {0,2,0,2,0,0,1,1, 37, 13} }, +{ {0,2,0,2,0,0,1,2, 28, 34} }, +{ {0,2,0,2,0,0,2,0, 20, 2} }, +{ {0,2,0,2,0,0,2,1, 23, 13} }, +{ {0,2,0,2,0,0,2,2, 22, 13} }, +{ {0,2,0,2,0,1,0,0, 8, 27} }, +{ {0,2,0,2,0,1,0,1, 11, 46} }, +{ {0,2,0,2,0,1,0,2, 10, 26} }, +{ {0,2,0,2,0,1,1,0, 40, 13} }, +{ {0,2,0,2,0,1,1,1, 41, 13} }, +{ {0,2,0,2,0,1,1,2, 42, 13} }, +{ {0,2,0,2,0,1,2,0, 27, 40} }, +{ {0,2,0,2,0,1,2,1, 29, 40} }, +{ {0,2,0,2,0,1,2,2, 28, 40} }, +{ {0,2,0,2,0,2,0,0, 5, 27} }, +{ {0,2,0,2,0,2,0,1, 10, 13} }, +{ {0,2,0,2,0,2,0,2, 9, 12} }, +{ {0,2,0,2,0,2,1,0, 26, 8} }, +{ {0,2,0,2,0,2,1,1, 43, 13} }, +{ {0,2,0,2,0,2,1,2, 10, 8} }, +{ {0,2,0,2,0,2,2,0, 25, 13} }, +{ {0,2,0,2,0,2,2,1, 26, 13} }, +{ {0,2,0,2,0,2,2,2, 5, 22} }, +{ {0,2,0,2,1,0,0,0, 34, 25} }, +{ {0,2,0,2,1,0,0,1, 40, 26} }, +{ {0,2,0,2,1,0,0,2, 26, 23} }, +{ {0,2,0,2,1,0,1,0, 46, 28} }, +{ {0,2,0,2,1,0,1,1, 29, 29} }, +{ {0,2,0,2,1,0,1,2, 29, 34} }, +{ {0,2,0,2,1,0,2,0, 45, 15} }, +{ {0,2,0,2,1,0,2,1, 48, 18} }, +{ {0,2,0,2,1,0,2,2, 23, 23} }, +{ {0,2,0,2,1,1,0,0, 37, 26} }, +{ {0,2,0,2,1,1,0,1, 41, 26} }, +{ {0,2,0,2,1,1,0,2, 43, 26} }, +{ {0,2,0,2,1,1,1,0, 29, 28} }, +{ {0,2,0,2,1,1,1,1, 11, 28} }, +{ {0,2,0,2,1,1,1,2, 41, 11} }, +{ {0,2,0,2,1,1,2,0, 47, 18} }, +{ {0,2,0,2,1,1,2,1, 29, 31} }, +{ {0,2,0,2,1,1,2,2, 37, 39} }, +{ {0,2,0,2,1,2,0,0, 28, 35} }, +{ {0,2,0,2,1,2,0,1, 42, 26} }, +{ {0,2,0,2,1,2,0,2, 10, 23} }, +{ {0,2,0,2,1,2,1,0, 29, 35} }, +{ {0,2,0,2,1,2,1,1, 41, 4} }, +{ {0,2,0,2,1,2,1,2, 11, 35} }, +{ {0,2,0,2,1,2,2,0, 27, 35} }, +{ {0,2,0,2,1,2,2,1, 40, 8} }, +{ {0,2,0,2,1,2,2,2, 8, 22} }, +{ {0,2,0,2,2,0,0,0, 20, 25} }, +{ {0,2,0,2,2,0,0,1, 27, 41} }, +{ {0,2,0,2,2,0,0,2, 25, 26} }, +{ {0,2,0,2,2,0,1,0, 45, 14} }, +{ {0,2,0,2,2,0,1,1, 47, 19} }, +{ {0,2,0,2,2,0,1,2, 27, 34} }, +{ {0,2,0,2,2,0,2,0, 44, 18} }, +{ {0,2,0,2,2,0,2,1, 45, 19} }, +{ {0,2,0,2,2,0,2,2, 20, 24} }, +{ {0,2,0,2,2,1,0,0, 23, 26} }, +{ {0,2,0,2,2,1,0,1, 29, 41} }, +{ {0,2,0,2,2,1,0,2, 26, 26} }, +{ {0,2,0,2,2,1,1,0, 48, 19} }, +{ {0,2,0,2,2,1,1,1, 29, 30} }, +{ {0,2,0,2,2,1,1,2, 40, 23} }, +{ {0,2,0,2,2,1,2,0, 45, 18} }, +{ {0,2,0,2,2,1,2,1, 46, 18} }, +{ {0,2,0,2,2,1,2,2, 34, 24} }, +{ {0,2,0,2,2,2,0,0, 22, 26} }, +{ {0,2,0,2,2,2,0,1, 28, 41} }, +{ {0,2,0,2,2,2,0,2, 5, 9} }, +{ {0,2,0,2,2,2,1,0, 23, 8} }, +{ {0,2,0,2,2,2,1,1, 37, 42} }, +{ {0,2,0,2,2,2,1,2, 8, 9} }, +{ {0,2,0,2,2,2,2,0, 20, 3} }, +{ {0,2,0,2,2,2,2,1, 34, 3} }, +{ {0,2,0,2,2,2,2,2, 2, 31} }, +{ {0,2,1,0,0,0,0,0, 7, 5} }, +{ {0,2,1,0,0,0,0,1, 16, 28} }, +{ {0,2,1,0,0,0,0,2, 16, 2} }, +{ {0,2,1,0,0,0,1,0, 34, 10} }, +{ {0,2,1,0,0,0,1,1, 26, 25} }, +{ {0,2,1,0,0,0,1,2, 40, 2} }, +{ {0,2,1,0,0,0,2,0, 21, 10} }, +{ {0,2,1,0,0,0,2,1, 30, 2} }, +{ {0,2,1,0,0,0,2,2, 27, 2} }, +{ {0,2,1,0,0,1,0,0, 21, 4} }, +{ {0,2,1,0,0,1,0,1, 27, 47} }, +{ {0,2,1,0,0,1,0,2, 30, 12} }, +{ {0,2,1,0,0,1,1,0, 45, 27} }, +{ {0,2,1,0,0,1,1,1, 23, 25} }, +{ {0,2,1,0,0,1,1,2, 48, 12} }, +{ {0,2,1,0,0,1,2,0, 52, 13} }, +{ {0,2,1,0,0,1,2,1, 53, 13} }, +{ {0,2,1,0,0,1,2,2, 53, 32} }, +{ {0,2,1,0,0,2,0,0, 34, 4} }, +{ {0,2,1,0,0,2,0,1, 40, 47} }, +{ {0,2,1,0,0,2,0,2, 26, 9} }, +{ {0,2,1,0,0,2,1,0, 46, 27} }, +{ {0,2,1,0,0,2,1,1, 29, 44} }, +{ {0,2,1,0,0,2,1,2, 29, 9} }, +{ {0,2,1,0,0,2,2,0, 45, 9} }, +{ {0,2,1,0,0,2,2,1, 48, 33} }, +{ {0,2,1,0,0,2,2,2, 23, 36} }, +{ {0,2,1,0,1,0,0,0, 16, 5} }, +{ {0,2,1,0,1,0,0,1, 55, 4} }, +{ {0,2,1,0,1,0,0,2, 56, 12} }, +{ {0,2,1,0,1,0,1,0, 26, 27} }, +{ {0,2,1,0,1,0,1,1, 15, 4} }, +{ {0,2,1,0,1,0,1,2, 39, 27} }, +{ {0,2,1,0,1,0,2,0, 30, 22} }, +{ {0,2,1,0,1,0,2,1, 57, 1} }, +{ {0,2,1,0,1,0,2,2, 50, 5} }, +{ {0,2,1,0,1,1,0,0, 27, 24} }, +{ {0,2,1,0,1,1,0,1, 38, 10} }, +{ {0,2,1,0,1,1,0,2, 50, 2} }, +{ {0,2,1,0,1,1,1,0, 23, 46} }, +{ {0,2,1,0,1,1,1,1, 6, 4} }, +{ {0,2,1,0,1,1,1,2, 36, 46} }, +{ {0,2,1,0,1,1,2,0, 53, 38} }, +{ {0,2,1,0,1,1,2,1, 30, 10} }, +{ {0,2,1,0,1,1,2,2, 48, 10} }, +{ {0,2,1,0,1,2,0,0, 40, 24} }, +{ {0,2,1,0,1,2,0,1, 51, 8} }, +{ {0,2,1,0,1,2,0,2, 39, 9} }, +{ {0,2,1,0,1,2,1,0, 29, 27} }, +{ {0,2,1,0,1,2,1,1, 18, 27} }, +{ {0,2,1,0,1,2,1,2, 42, 27} }, +{ {0,2,1,0,1,2,2,0, 48, 22} }, +{ {0,2,1,0,1,2,2,1, 50, 9} }, +{ {0,2,1,0,1,2,2,2, 36, 36} }, +{ {0,2,1,0,2,0,0,0, 16, 30} }, +{ {0,2,1,0,2,0,0,1, 56, 6} }, +{ {0,2,1,0,2,0,0,2, 55, 3} }, +{ {0,2,1,0,2,0,1,0, 40, 37} }, +{ {0,2,1,0,2,0,1,1, 39, 25} }, +{ {0,2,1,0,2,0,1,2, 51, 26} }, +{ {0,2,1,0,2,0,2,0, 27, 37} }, +{ {0,2,1,0,2,0,2,1, 50, 28} }, +{ {0,2,1,0,2,0,2,2, 38, 4} }, +{ {0,2,1,0,2,1,0,0, 30, 24} }, +{ {0,2,1,0,2,1,0,1, 50, 30} }, +{ {0,2,1,0,2,1,0,2, 57, 6} }, +{ {0,2,1,0,2,1,1,0, 48, 39} }, +{ {0,2,1,0,2,1,1,1, 36, 25} }, +{ {0,2,1,0,2,1,1,2, 50, 27} }, +{ {0,2,1,0,2,1,2,0, 53, 23} }, +{ {0,2,1,0,2,1,2,1, 48, 31} }, +{ {0,2,1,0,2,1,2,2, 30, 4} }, +{ {0,2,1,0,2,2,0,0, 26, 3} }, +{ {0,2,1,0,2,2,0,1, 39, 3} }, +{ {0,2,1,0,2,2,0,2, 15, 3} }, +{ {0,2,1,0,2,2,1,0, 29, 42} }, +{ {0,2,1,0,2,2,1,1, 42, 44} }, +{ {0,2,1,0,2,2,1,2, 18, 9} }, +{ {0,2,1,0,2,2,2,0, 23, 3} }, +{ {0,2,1,0,2,2,2,1, 36, 3} }, +{ {0,2,1,0,2,2,2,2, 6, 10} }, +{ {0,2,1,1,0,0,0,0, 8, 28} }, +{ {0,2,1,1,0,0,0,1, 17, 28} }, +{ {0,2,1,1,0,0,0,2, 18, 2} }, +{ {0,2,1,1,0,0,1,0, 28, 45} }, +{ {0,2,1,1,0,0,1,1, 10, 25} }, +{ {0,2,1,1,0,0,1,2, 42, 2} }, +{ {0,2,1,1,0,0,2,0, 24, 2} }, +{ {0,2,1,1,0,0,2,1, 32, 2} }, +{ {0,2,1,1,0,0,2,2, 29, 2} }, +{ {0,2,1,1,0,1,0,0, 23, 29} }, +{ {0,2,1,1,0,1,0,1, 28, 47} }, +{ {0,2,1,1,0,1,0,2, 31, 12} }, +{ {0,2,1,1,0,1,1,0, 27, 45} }, +{ {0,2,1,1,0,1,1,1, 8, 24} }, +{ {0,2,1,1,0,1,1,2, 40, 6} }, +{ {0,2,1,1,0,1,2,0, 53, 33} }, +{ {0,2,1,1,0,1,2,1, 24, 22} }, +{ {0,2,1,1,0,1,2,2, 47, 7} }, +{ {0,2,1,1,0,2,0,0, 37, 47} }, +{ {0,2,1,1,0,2,0,1, 41, 47} }, +{ {0,2,1,1,0,2,0,2, 43, 12} }, +{ {0,2,1,1,0,2,1,0, 29, 45} }, +{ {0,2,1,1,0,2,1,1, 11, 44} }, +{ {0,2,1,1,0,2,1,2, 41, 6} }, +{ {0,2,1,1,0,2,2,0, 47, 33} }, +{ {0,2,1,1,0,2,2,1, 29, 38} }, +{ {0,2,1,1,0,2,2,2, 37, 30} }, +{ {0,2,1,1,1,0,0,0, 27, 5} }, +{ {0,2,1,1,1,0,0,1, 38, 7} }, +{ {0,2,1,1,1,0,0,2, 50, 6} }, +{ {0,2,1,1,1,0,1,0, 23, 27} }, +{ {0,2,1,1,1,0,1,1, 6, 25} }, +{ {0,2,1,1,1,0,1,2, 36, 27} }, +{ {0,2,1,1,1,0,2,0, 53, 31} }, +{ {0,2,1,1,1,0,2,1, 30, 7} }, +{ {0,2,1,1,1,0,2,2, 48, 7} }, +{ {0,2,1,1,1,1,0,0, 45, 4} }, +{ {0,2,1,1,1,1,0,1, 35, 22} }, +{ {0,2,1,1,1,1,0,2, 49, 6} }, +{ {0,2,1,1,1,1,1,0, 21, 27} }, +{ {0,2,1,1,1,1,1,1, 3, 4} }, +{ {0,2,1,1,1,1,1,2, 35, 27} }, +{ {0,2,1,1,1,1,2,0, 52, 7} }, +{ {0,2,1,1,1,1,2,1, 21, 22} }, +{ {0,2,1,1,1,1,2,2, 45, 5} }, +{ {0,2,1,1,1,2,0,0, 47, 25} }, +{ {0,2,1,1,1,2,0,1, 40, 7} }, +{ {0,2,1,1,1,2,0,2, 31, 9} }, +{ {0,2,1,1,1,2,1,0, 24, 27} }, +{ {0,2,1,1,1,2,1,1, 8, 25} }, +{ {0,2,1,1,1,2,1,2, 28, 36} }, +{ {0,2,1,1,1,2,2,0, 53, 6} }, +{ {0,2,1,1,1,2,2,1, 27, 38} }, +{ {0,2,1,1,1,2,2,2, 23, 30} }, +{ {0,2,1,1,2,0,0,0, 40, 30} }, +{ {0,2,1,1,2,0,0,1, 39, 7} }, +{ {0,2,1,1,2,0,0,2, 51, 6} }, +{ {0,2,1,1,2,0,1,0, 31, 6} }, +{ {0,2,1,1,2,0,1,1, 12, 6} }, +{ {0,2,1,1,2,0,1,2, 39, 6} }, +{ {0,2,1,1,2,0,2,0, 47, 31} }, +{ {0,2,1,1,2,0,2,1, 31, 7} }, +{ {0,2,1,1,2,0,2,2, 40, 29} }, +{ {0,2,1,1,2,1,0,0, 48, 24} }, +{ {0,2,1,1,2,1,0,1, 36, 38} }, +{ {0,2,1,1,2,1,0,2, 50, 7} }, +{ {0,2,1,1,2,1,1,0, 30, 6} }, +{ {0,2,1,1,2,1,1,1, 6, 24} }, +{ {0,2,1,1,2,1,1,2, 38, 6} }, +{ {0,2,1,1,2,1,2,0, 53, 16} }, +{ {0,2,1,1,2,1,2,1, 23, 22} }, +{ {0,2,1,1,2,1,2,2, 27, 4} }, +{ {0,2,1,1,2,2,0,0, 29, 3} }, +{ {0,2,1,1,2,2,0,1, 42, 7} }, +{ {0,2,1,1,2,2,0,2, 18, 3} }, +{ {0,2,1,1,2,2,1,0, 32, 6} }, +{ {0,2,1,1,2,2,1,1, 10, 24} }, +{ {0,2,1,1,2,2,1,2, 17, 31} }, +{ {0,2,1,1,2,2,2,0, 24, 3} }, +{ {0,2,1,1,2,2,2,1, 28, 38} }, +{ {0,2,1,1,2,2,2,2, 8, 31} }, +{ {0,2,1,2,0,0,0,0, 8, 11} }, +{ {0,2,1,2,0,0,0,1, 18, 28} }, +{ {0,2,1,2,0,0,0,2, 17, 2} }, +{ {0,2,1,2,0,0,1,0, 37, 10} }, +{ {0,2,1,2,0,0,1,1, 43, 2} }, +{ {0,2,1,2,0,0,1,2, 41, 2} }, +{ {0,2,1,2,0,0,2,0, 23, 10} }, +{ {0,2,1,2,0,0,2,1, 31, 2} }, +{ {0,2,1,2,0,0,2,2, 28, 2} }, +{ {0,2,1,2,0,1,0,0, 24, 29} }, +{ {0,2,1,2,0,1,0,1, 29, 47} }, +{ {0,2,1,2,0,1,0,2, 32, 12} }, +{ {0,2,1,2,0,1,1,0, 47, 12} }, +{ {0,2,1,2,0,1,1,1, 37, 5} }, +{ {0,2,1,2,0,1,1,2, 29, 23} }, +{ {0,2,1,2,0,1,2,0, 53, 12} }, +{ {0,2,1,2,0,1,2,1, 47, 37} }, +{ {0,2,1,2,0,1,2,2, 24, 23} }, +{ {0,2,1,2,0,2,0,0, 28, 8} }, +{ {0,2,1,2,0,2,0,1, 42, 47} }, +{ {0,2,1,2,0,2,0,2, 10, 9} }, +{ {0,2,1,2,0,2,1,0, 29, 8} }, +{ {0,2,1,2,0,2,1,1, 41, 25} }, +{ {0,2,1,2,0,2,1,2, 11, 9} }, +{ {0,2,1,2,0,2,2,0, 27, 8} }, +{ {0,2,1,2,0,2,2,1, 40, 35} }, +{ {0,2,1,2,0,2,2,2, 8, 37} }, +{ {0,2,1,2,1,0,0,0, 40, 5} }, +{ {0,2,1,2,1,0,0,1, 51, 14} }, +{ {0,2,1,2,1,0,0,2, 39, 23} }, +{ {0,2,1,2,1,0,1,0, 29, 46} }, +{ {0,2,1,2,1,0,1,1, 18, 29} }, +{ {0,2,1,2,1,0,1,2, 42, 46} }, +{ {0,2,1,2,1,0,2,0, 48, 37} }, +{ {0,2,1,2,1,0,2,1, 50, 15} }, +{ {0,2,1,2,1,0,2,2, 36, 23} }, +{ {0,2,1,2,1,1,0,0, 47, 4} }, +{ {0,2,1,2,1,1,0,1, 40, 10} }, +{ {0,2,1,2,1,1,0,2, 31, 23} }, +{ {0,2,1,2,1,1,1,0, 24, 28} }, +{ {0,2,1,2,1,1,1,1, 8, 4} }, +{ {0,2,1,2,1,1,1,2, 28, 23} }, +{ {0,2,1,2,1,1,2,0, 53, 11} }, +{ {0,2,1,2,1,1,2,1, 27, 31} }, +{ {0,2,1,2,1,1,2,2, 23, 39} }, +{ {0,2,1,2,1,2,0,0, 31, 8} }, +{ {0,2,1,2,1,2,0,1, 39, 8} }, +{ {0,2,1,2,1,2,0,2, 12, 8} }, +{ {0,2,1,2,1,2,1,0, 32, 27} }, +{ {0,2,1,2,1,2,1,1, 17, 4} }, +{ {0,2,1,2,1,2,1,2, 10, 22} }, +{ {0,2,1,2,1,2,2,0, 30, 8} }, +{ {0,2,1,2,1,2,2,1, 38, 8} }, +{ {0,2,1,2,1,2,2,2, 6, 22} }, +{ {0,2,1,2,2,0,0,0, 27, 30} }, +{ {0,2,1,2,2,0,0,1, 50, 14} }, +{ {0,2,1,2,2,0,0,2, 38, 23} }, +{ {0,2,1,2,2,0,1,0, 47, 36} }, +{ {0,2,1,2,2,0,1,1, 31, 25} }, +{ {0,2,1,2,2,0,1,2, 40, 34} }, +{ {0,2,1,2,2,0,2,0, 45, 31} }, +{ {0,2,1,2,2,0,2,1, 49, 14} }, +{ {0,2,1,2,2,0,2,2, 35, 24} }, +{ {0,2,1,2,2,1,0,0, 53, 4} }, +{ {0,2,1,2,2,1,0,1, 48, 36} }, +{ {0,2,1,2,2,1,0,2, 30, 23} }, +{ {0,2,1,2,2,1,1,0, 53, 27} }, +{ {0,2,1,2,2,1,1,1, 23, 5} }, +{ {0,2,1,2,2,1,1,2, 27, 23} }, +{ {0,2,1,2,2,1,2,0, 52, 14} }, +{ {0,2,1,2,2,1,2,1, 45, 30} }, +{ {0,2,1,2,2,1,2,2, 21, 24} }, +{ {0,2,1,2,2,2,0,0, 23, 42} }, +{ {0,2,1,2,2,2,0,1, 36, 42} }, +{ {0,2,1,2,2,2,0,2, 6, 9} }, +{ {0,2,1,2,2,2,1,0, 24, 8} }, +{ {0,2,1,2,2,2,1,1, 28, 25} }, +{ {0,2,1,2,2,2,1,2, 8, 36} }, +{ {0,2,1,2,2,2,2,0, 21, 3} }, +{ {0,2,1,2,2,2,2,1, 35, 3} }, +{ {0,2,1,2,2,2,2,2, 3, 31} }, +{ {0,2,2,0,0,0,0,0, 4, 5} }, +{ {0,2,2,0,0,0,0,1, 16, 12} }, +{ {0,2,2,0,0,0,0,2, 13, 2} }, +{ {0,2,2,0,0,0,1,0, 35, 10} }, +{ {0,2,2,0,0,0,1,1, 40, 33} }, +{ {0,2,2,0,0,0,1,2, 38, 2} }, +{ {0,2,2,0,0,0,2,0, 20, 10} }, +{ {0,2,2,0,0,0,2,1, 27, 33} }, +{ {0,2,2,0,0,0,2,2, 25, 2} }, +{ {0,2,2,0,0,1,0,0, 35, 4} }, +{ {0,2,2,0,0,1,0,1, 40, 12} }, +{ {0,2,2,0,0,1,0,2, 38, 12} }, +{ {0,2,2,0,0,1,1,0, 49, 12} }, +{ {0,2,2,0,0,1,1,1, 31, 5} }, +{ {0,2,2,0,0,1,1,2, 50, 13} }, +{ {0,2,2,0,0,1,2,0, 45, 26} }, +{ {0,2,2,0,0,1,2,1, 47, 13} }, +{ {0,2,2,0,0,1,2,2, 27, 44} }, +{ {0,2,2,0,0,2,0,0, 20, 4} }, +{ {0,2,2,0,0,2,0,1, 27, 12} }, +{ {0,2,2,0,0,2,0,2, 25, 12} }, +{ {0,2,2,0,0,2,1,0, 45, 8} }, +{ {0,2,2,0,0,2,1,1, 47, 32} }, +{ {0,2,2,0,0,2,1,2, 27, 9} }, +{ {0,2,2,0,0,2,2,0, 44, 12} }, +{ {0,2,2,0,0,2,2,1, 45, 13} }, +{ {0,2,2,0,0,2,2,2, 20, 5} }, +{ {0,2,2,0,1,0,0,0, 16, 22} }, +{ {0,2,2,0,1,0,0,1, 56, 5} }, +{ {0,2,2,0,1,0,0,2, 55, 7} }, +{ {0,2,2,0,1,0,1,0, 40, 22} }, +{ {0,2,2,0,1,0,1,1, 39, 4} }, +{ {0,2,2,0,1,0,1,2, 51, 28} }, +{ {0,2,2,0,1,0,2,0, 27, 22} }, +{ {0,2,2,0,1,0,2,1, 50, 26} }, +{ {0,2,2,0,1,0,2,2, 38, 25} }, +{ {0,2,2,0,1,1,0,0, 40, 39} }, +{ {0,2,2,0,1,1,0,1, 39, 10} }, +{ {0,2,2,0,1,1,0,2, 51, 2} }, +{ {0,2,2,0,1,1,1,0, 31, 11} }, +{ {0,2,2,0,1,1,1,1, 12, 5} }, +{ {0,2,2,0,1,1,1,2, 39, 11} }, +{ {0,2,2,0,1,1,2,0, 47, 38} }, +{ {0,2,2,0,1,1,2,1, 31, 10} }, +{ {0,2,2,0,1,1,2,2, 40, 44} }, +{ {0,2,2,0,1,2,0,0, 27, 39} }, +{ {0,2,2,0,1,2,0,1, 50, 8} }, +{ {0,2,2,0,1,2,0,2, 38, 9} }, +{ {0,2,2,0,1,2,1,0, 47, 23} }, +{ {0,2,2,0,1,2,1,1, 31, 4} }, +{ {0,2,2,0,1,2,1,2, 40, 9} }, +{ {0,2,2,0,1,2,2,0, 45, 23} }, +{ {0,2,2,0,1,2,2,1, 49, 8} }, +{ {0,2,2,0,1,2,2,2, 35, 5} }, +{ {0,2,2,0,2,0,0,0, 13, 5} }, +{ {0,2,2,0,2,0,0,1, 55, 0} }, +{ {0,2,2,0,2,0,0,2, 54, 0} }, +{ {0,2,2,0,2,0,1,0, 38, 22} }, +{ {0,2,2,0,2,0,1,1, 51, 5} }, +{ {0,2,2,0,2,0,1,2, 55, 1} }, +{ {0,2,2,0,2,0,2,0, 25, 22} }, +{ {0,2,2,0,2,0,2,1, 38, 27} }, +{ {0,2,2,0,2,0,2,2, 13, 4} }, +{ {0,2,2,0,2,1,0,0, 38, 24} }, +{ {0,2,2,0,2,1,0,1, 51, 30} }, +{ {0,2,2,0,2,1,0,2, 55, 6} }, +{ {0,2,2,0,2,1,1,0, 50, 23} }, +{ {0,2,2,0,2,1,1,1, 39, 5} }, +{ {0,2,2,0,2,1,1,2, 56, 0} }, +{ {0,2,2,0,2,1,2,0, 27, 27} }, +{ {0,2,2,0,2,1,2,1, 40, 27} }, +{ {0,2,2,0,2,1,2,2, 16, 27} }, +{ {0,2,2,0,2,2,0,0, 25, 24} }, +{ {0,2,2,0,2,2,0,1, 38, 3} }, +{ {0,2,2,0,2,2,0,2, 13, 3} }, +{ {0,2,2,0,2,2,1,0, 27, 42} }, +{ {0,2,2,0,2,2,1,1, 40, 42} }, +{ {0,2,2,0,2,2,1,2, 16, 9} }, +{ {0,2,2,0,2,2,2,0, 20, 11} }, +{ {0,2,2,0,2,2,2,1, 35, 11} }, +{ {0,2,2,0,2,2,2,2, 4, 4} }, +{ {0,2,2,1,0,0,0,0, 6, 11} }, +{ {0,2,2,1,0,0,0,1, 18, 12} }, +{ {0,2,2,1,0,0,0,2, 15, 2} }, +{ {0,2,2,1,0,0,1,0, 36, 10} }, +{ {0,2,2,1,0,0,1,1, 42, 33} }, +{ {0,2,2,1,0,0,1,2, 39, 2} }, +{ {0,2,2,1,0,0,2,0, 23, 2} }, +{ {0,2,2,1,0,0,2,1, 29, 33} }, +{ {0,2,2,1,0,0,2,2, 26, 2} }, +{ {0,2,2,1,0,1,0,0, 36, 29} }, +{ {0,2,2,1,0,1,0,1, 42, 12} }, +{ {0,2,2,1,0,1,0,2, 39, 12} }, +{ {0,2,2,1,0,1,1,0, 50, 12} }, +{ {0,2,2,1,0,1,1,1, 18, 22} }, +{ {0,2,2,1,0,1,1,2, 51, 12} }, +{ {0,2,2,1,0,1,2,0, 48, 13} }, +{ {0,2,2,1,0,1,2,1, 29, 22} }, +{ {0,2,2,1,0,1,2,2, 40, 25} }, +{ {0,2,2,1,0,2,0,0, 23, 47} }, +{ {0,2,2,1,0,2,0,1, 29, 12} }, +{ {0,2,2,1,0,2,0,2, 26, 12} }, +{ {0,2,2,1,0,2,1,0, 48, 32} }, +{ {0,2,2,1,0,2,1,1, 29, 39} }, +{ {0,2,2,1,0,2,1,2, 40, 36} }, +{ {0,2,2,1,0,2,2,0, 45, 12} }, +{ {0,2,2,1,0,2,2,1, 46, 12} }, +{ {0,2,2,1,0,2,2,2, 34, 5} }, +{ {0,2,2,1,1,0,0,0, 30, 5} }, +{ {0,2,2,1,1,0,0,1, 50, 22} }, +{ {0,2,2,1,1,0,0,2, 57, 2} }, +{ {0,2,2,1,1,0,1,0, 48, 30} }, +{ {0,2,2,1,1,0,1,1, 36, 4} }, +{ {0,2,2,1,1,0,1,2, 50, 29} }, +{ {0,2,2,1,1,0,2,0, 53, 36} }, +{ {0,2,2,1,1,0,2,1, 48, 38} }, +{ {0,2,2,1,1,0,2,2, 30, 25} }, +{ {0,2,2,1,1,1,0,0, 48, 5} }, +{ {0,2,2,1,1,1,0,1, 36, 31} }, +{ {0,2,2,1,1,1,0,2, 50, 3} }, +{ {0,2,2,1,1,1,1,0, 30, 11} }, +{ {0,2,2,1,1,1,1,1, 6, 5} }, +{ {0,2,2,1,1,1,1,2, 38, 11} }, +{ {0,2,2,1,1,1,2,0, 53, 3} }, +{ {0,2,2,1,1,1,2,1, 23, 37} }, +{ {0,2,2,1,1,1,2,2, 27, 25} }, +{ {0,2,2,1,1,2,0,0, 53, 25} }, +{ {0,2,2,1,1,2,0,1, 48, 23} }, +{ {0,2,2,1,1,2,0,2, 30, 9} }, +{ {0,2,2,1,1,2,1,0, 53, 46} }, +{ {0,2,2,1,1,2,1,1, 23, 24} }, +{ {0,2,2,1,1,2,1,2, 27, 36} }, +{ {0,2,2,1,1,2,2,0, 52, 9} }, +{ {0,2,2,1,1,2,2,1, 45, 22} }, +{ {0,2,2,1,1,2,2,2, 21, 5} }, +{ {0,2,2,1,2,0,0,0, 38, 5} }, +{ {0,2,2,1,2,0,0,1, 51, 22} }, +{ {0,2,2,1,2,0,0,2, 55, 2} }, +{ {0,2,2,1,2,0,1,0, 50, 31} }, +{ {0,2,2,1,2,0,1,1, 39, 24} }, +{ {0,2,2,1,2,0,1,2, 56, 3} }, +{ {0,2,2,1,2,0,2,0, 27, 46} }, +{ {0,2,2,1,2,0,2,1, 40, 46} }, +{ {0,2,2,1,2,0,2,2, 16, 29} }, +{ {0,2,2,1,2,1,0,0, 50, 4} }, +{ {0,2,2,1,2,1,0,1, 39, 22} }, +{ {0,2,2,1,2,1,0,2, 56, 13} }, +{ {0,2,2,1,2,1,1,0, 57, 5} }, +{ {0,2,2,1,2,1,1,1, 15, 5} }, +{ {0,2,2,1,2,1,1,2, 55, 5} }, +{ {0,2,2,1,2,1,2,0, 30, 27} }, +{ {0,2,2,1,2,1,2,1, 26, 22} }, +{ {0,2,2,1,2,1,2,2, 16, 4} }, +{ {0,2,2,1,2,2,0,0, 27, 3} }, +{ {0,2,2,1,2,2,0,1, 40, 3} }, +{ {0,2,2,1,2,2,0,2, 16, 3} }, +{ {0,2,2,1,2,2,1,0, 30, 3} }, +{ {0,2,2,1,2,2,1,1, 26, 24} }, +{ {0,2,2,1,2,2,1,2, 16, 31} }, +{ {0,2,2,1,2,2,2,0, 21, 11} }, +{ {0,2,2,1,2,2,2,1, 34, 11} }, +{ {0,2,2,1,2,2,2,2, 7, 10} }, +{ {0,2,2,2,0,0,0,0, 5, 11} }, +{ {0,2,2,2,0,0,0,1, 17, 12} }, +{ {0,2,2,2,0,0,0,2, 14, 2} }, +{ {0,2,2,2,0,0,1,0, 28, 15} }, +{ {0,2,2,2,0,0,1,1, 41, 33} }, +{ {0,2,2,2,0,0,1,2, 17, 15} }, +{ {0,2,2,2,0,0,2,0, 22, 2} }, +{ {0,2,2,2,0,0,2,1, 28, 33} }, +{ {0,2,2,2,0,0,2,2, 5, 7} }, +{ {0,2,2,2,0,1,0,0, 28, 16} }, +{ {0,2,2,2,0,1,0,1, 41, 12} }, +{ {0,2,2,2,0,1,0,2, 17, 7} }, +{ {0,2,2,2,0,1,1,0, 31, 15} }, +{ {0,2,2,2,0,1,1,1, 43, 5} }, +{ {0,2,2,2,0,1,1,2, 18, 23} }, +{ {0,2,2,2,0,1,2,0, 23, 6} }, +{ {0,2,2,2,0,1,2,1, 37, 16} }, +{ {0,2,2,2,0,1,2,2, 8, 7} }, +{ {0,2,2,2,0,2,0,0, 22, 29} }, +{ {0,2,2,2,0,2,0,1, 28, 12} }, +{ {0,2,2,2,0,2,0,2, 5, 23} }, +{ {0,2,2,2,0,2,1,0, 23, 35} }, +{ {0,2,2,2,0,2,1,1, 37, 15} }, +{ {0,2,2,2,0,2,1,2, 8, 34} }, +{ {0,2,2,2,0,2,2,0, 20, 15} }, +{ {0,2,2,2,0,2,2,1, 34, 15} }, +{ {0,2,2,2,0,2,2,2, 2, 22} }, +{ {0,2,2,2,1,0,0,0, 26, 15} }, +{ {0,2,2,2,1,0,0,1, 39, 15} }, +{ {0,2,2,2,1,0,0,2, 15, 7} }, +{ {0,2,2,2,1,0,1,0, 29, 15} }, +{ {0,2,2,2,1,0,1,1, 42, 29} }, +{ {0,2,2,2,1,0,1,2, 18, 15} }, +{ {0,2,2,2,1,0,2,0, 23, 16} }, +{ {0,2,2,2,1,0,2,1, 36, 16} }, +{ {0,2,2,2,1,0,2,2, 6, 7} }, +{ {0,2,2,2,1,1,0,0, 29, 16} }, +{ {0,2,2,2,1,1,0,1, 42, 10} }, +{ {0,2,2,2,1,1,0,2, 18, 7} }, +{ {0,2,2,2,1,1,1,0, 32, 11} }, +{ {0,2,2,2,1,1,1,1, 10, 5} }, +{ {0,2,2,2,1,1,1,2, 17, 23} }, +{ {0,2,2,2,1,1,2,0, 24, 6} }, +{ {0,2,2,2,1,1,2,1, 28, 31} }, +{ {0,2,2,2,1,1,2,2, 8, 38} }, +{ {0,2,2,2,1,2,0,0, 23, 15} }, +{ {0,2,2,2,1,2,0,1, 36, 15} }, +{ {0,2,2,2,1,2,0,2, 6, 23} }, +{ {0,2,2,2,1,2,1,0, 24, 15} }, +{ {0,2,2,2,1,2,1,1, 28, 4} }, +{ {0,2,2,2,1,2,1,2, 8, 23} }, +{ {0,2,2,2,1,2,2,0, 21, 15} }, +{ {0,2,2,2,1,2,2,1, 35, 15} }, +{ {0,2,2,2,1,2,2,2, 3, 23} }, +{ {0,2,2,2,2,0,0,0, 25, 5} }, +{ {0,2,2,2,2,0,0,1, 38, 15} }, +{ {0,2,2,2,2,0,0,2, 13, 7} }, +{ {0,2,2,2,2,0,1,0, 27, 15} }, +{ {0,2,2,2,2,0,1,1, 40, 15} }, +{ {0,2,2,2,2,0,1,2, 16, 15} }, +{ {0,2,2,2,2,0,2,0, 20, 6} }, +{ {0,2,2,2,2,0,2,1, 35, 6} }, +{ {0,2,2,2,2,0,2,2, 4, 7} }, +{ {0,2,2,2,2,1,0,0, 27, 16} }, +{ {0,2,2,2,2,1,0,1, 40, 16} }, +{ {0,2,2,2,2,1,0,2, 16, 7} }, +{ {0,2,2,2,2,1,1,0, 30, 15} }, +{ {0,2,2,2,2,1,1,1, 26, 5} }, +{ {0,2,2,2,2,1,1,2, 16, 23} }, +{ {0,2,2,2,2,1,2,0, 21, 6} }, +{ {0,2,2,2,2,1,2,1, 34, 6} }, +{ {0,2,2,2,2,1,2,2, 7, 7} }, +{ {0,2,2,2,2,2,0,0, 20, 8} }, +{ {0,2,2,2,2,2,0,1, 35, 8} }, +{ {0,2,2,2,2,2,0,2, 4, 9} }, +{ {0,2,2,2,2,2,1,0, 21, 8} }, +{ {0,2,2,2,2,2,1,1, 34, 8} }, +{ {0,2,2,2,2,2,1,2, 7, 9} }, +{ {0,2,2,2,2,2,2,0, 19, 6} }, +{ {0,2,2,2,2,2,2,1, 33, 3} }, +{ {0,2,2,2,2,2,2,2, 1, 5} }, +{ {1,0,0,0,0,0,0,0, 1, 5} }, +{ {1,0,0,0,0,0,0,1, 19, 6} }, +{ {1,0,0,0,0,0,0,2, 33, 3} }, +{ {1,0,0,0,0,0,1,0, 4, 9} }, +{ {1,0,0,0,0,0,1,1, 20, 8} }, +{ {1,0,0,0,0,0,1,2, 35, 8} }, +{ {1,0,0,0,0,0,2,0, 7, 9} }, +{ {1,0,0,0,0,0,2,1, 21, 8} }, +{ {1,0,0,0,0,0,2,2, 34, 8} }, +{ {1,0,0,0,0,1,0,0, 4, 7} }, +{ {1,0,0,0,0,1,0,1, 20, 6} }, +{ {1,0,0,0,0,1,0,2, 35, 6} }, +{ {1,0,0,0,0,1,1,0, 13, 7} }, +{ {1,0,0,0,0,1,1,1, 25, 15} }, +{ {1,0,0,0,0,1,1,2, 38, 15} }, +{ {1,0,0,0,0,1,2,0, 16, 15} }, +{ {1,0,0,0,0,1,2,1, 27, 15} }, +{ {1,0,0,0,0,1,2,2, 40, 15} }, +{ {1,0,0,0,0,2,0,0, 7, 7} }, +{ {1,0,0,0,0,2,0,1, 21, 6} }, +{ {1,0,0,0,0,2,0,2, 34, 6} }, +{ {1,0,0,0,0,2,1,0, 16, 7} }, +{ {1,0,0,0,0,2,1,1, 27, 16} }, +{ {1,0,0,0,0,2,1,2, 40, 16} }, +{ {1,0,0,0,0,2,2,0, 16, 23} }, +{ {1,0,0,0,0,2,2,1, 30, 15} }, +{ {1,0,0,0,0,2,2,2, 26, 5} }, +{ {1,0,0,0,1,0,0,0, 2, 22} }, +{ {1,0,0,0,1,0,0,1, 20, 15} }, +{ {1,0,0,0,1,0,0,2, 34, 15} }, +{ {1,0,0,0,1,0,1,0, 5, 23} }, +{ {1,0,0,0,1,0,1,1, 22, 15} }, +{ {1,0,0,0,1,0,1,2, 28, 12} }, +{ {1,0,0,0,1,0,2,0, 8, 34} }, +{ {1,0,0,0,1,0,2,1, 23, 35} }, +{ {1,0,0,0,1,0,2,2, 37, 15} }, +{ {1,0,0,0,1,1,0,0, 5, 7} }, +{ {1,0,0,0,1,1,0,1, 22, 6} }, +{ {1,0,0,0,1,1,0,2, 28, 33} }, +{ {1,0,0,0,1,1,1,0, 14, 7} }, +{ {1,0,0,0,1,1,1,1, 5, 11} }, +{ {1,0,0,0,1,1,1,2, 17, 12} }, +{ {1,0,0,0,1,1,2,0, 17, 15} }, +{ {1,0,0,0,1,1,2,1, 28, 15} }, +{ {1,0,0,0,1,1,2,2, 41, 15} }, +{ {1,0,0,0,1,2,0,0, 8, 7} }, +{ {1,0,0,0,1,2,0,1, 23, 6} }, +{ {1,0,0,0,1,2,0,2, 37, 16} }, +{ {1,0,0,0,1,2,1,0, 17, 7} }, +{ {1,0,0,0,1,2,1,1, 28, 16} }, +{ {1,0,0,0,1,2,1,2, 41, 16} }, +{ {1,0,0,0,1,2,2,0, 18, 23} }, +{ {1,0,0,0,1,2,2,1, 31, 15} }, +{ {1,0,0,0,1,2,2,2, 43, 15} }, +{ {1,0,0,0,2,0,0,0, 3, 23} }, +{ {1,0,0,0,2,0,0,1, 21, 15} }, +{ {1,0,0,0,2,0,0,2, 35, 15} }, +{ {1,0,0,0,2,0,1,0, 6, 23} }, +{ {1,0,0,0,2,0,1,1, 23, 15} }, +{ {1,0,0,0,2,0,1,2, 36, 15} }, +{ {1,0,0,0,2,0,2,0, 8, 23} }, +{ {1,0,0,0,2,0,2,1, 24, 15} }, +{ {1,0,0,0,2,0,2,2, 28, 4} }, +{ {1,0,0,0,2,1,0,0, 6, 7} }, +{ {1,0,0,0,2,1,0,1, 23, 16} }, +{ {1,0,0,0,2,1,0,2, 36, 16} }, +{ {1,0,0,0,2,1,1,0, 15, 7} }, +{ {1,0,0,0,2,1,1,1, 26, 15} }, +{ {1,0,0,0,2,1,1,2, 39, 15} }, +{ {1,0,0,0,2,1,2,0, 18, 15} }, +{ {1,0,0,0,2,1,2,1, 29, 15} }, +{ {1,0,0,0,2,1,2,2, 42, 15} }, +{ {1,0,0,0,2,2,0,0, 8, 38} }, +{ {1,0,0,0,2,2,0,1, 24, 6} }, +{ {1,0,0,0,2,2,0,2, 28, 31} }, +{ {1,0,0,0,2,2,1,0, 18, 7} }, +{ {1,0,0,0,2,2,1,1, 29, 16} }, +{ {1,0,0,0,2,2,1,2, 42, 16} }, +{ {1,0,0,0,2,2,2,0, 17, 23} }, +{ {1,0,0,0,2,2,2,1, 32, 15} }, +{ {1,0,0,0,2,2,2,2, 10, 5} }, +{ {1,0,0,1,0,0,0,0, 4, 4} }, +{ {1,0,0,1,0,0,0,1, 20, 11} }, +{ {1,0,0,1,0,0,0,2, 35, 11} }, +{ {1,0,0,1,0,0,1,0, 13, 3} }, +{ {1,0,0,1,0,0,1,1, 25, 3} }, +{ {1,0,0,1,0,0,1,2, 38, 3} }, +{ {1,0,0,1,0,0,2,0, 16, 9} }, +{ {1,0,0,1,0,0,2,1, 27, 42} }, +{ {1,0,0,1,0,0,2,2, 40, 42} }, +{ {1,0,0,1,0,1,0,0, 13, 4} }, +{ {1,0,0,1,0,1,0,1, 25, 27} }, +{ {1,0,0,1,0,1,0,2, 38, 27} }, +{ {1,0,0,1,0,1,1,0, 54, 1} }, +{ {1,0,0,1,0,1,1,1, 13, 5} }, +{ {1,0,0,1,0,1,1,2, 55, 0} }, +{ {1,0,0,1,0,1,2,0, 55, 1} }, +{ {1,0,0,1,0,1,2,1, 38, 22} }, +{ {1,0,0,1,0,1,2,2, 51, 4} }, +{ {1,0,0,1,0,2,0,0, 16, 27} }, +{ {1,0,0,1,0,2,0,1, 27, 27} }, +{ {1,0,0,1,0,2,0,2, 40, 27} }, +{ {1,0,0,1,0,2,1,0, 55, 6} }, +{ {1,0,0,1,0,2,1,1, 38, 24} }, +{ {1,0,0,1,0,2,1,2, 51, 31} }, +{ {1,0,0,1,0,2,2,0, 56, 0} }, +{ {1,0,0,1,0,2,2,1, 50, 23} }, +{ {1,0,0,1,0,2,2,2, 39, 5} }, +{ {1,0,0,1,1,0,0,0, 20, 5} }, +{ {1,0,0,1,1,0,0,1, 44, 9} }, +{ {1,0,0,1,1,0,0,2, 45, 13} }, +{ {1,0,0,1,1,0,1,0, 25, 9} }, +{ {1,0,0,1,1,0,1,1, 20, 4} }, +{ {1,0,0,1,1,0,1,2, 27, 12} }, +{ {1,0,0,1,1,0,2,0, 27, 9} }, +{ {1,0,0,1,1,0,2,1, 45, 8} }, +{ {1,0,0,1,1,0,2,2, 47, 43} }, +{ {1,0,0,1,1,1,0,0, 25, 25} }, +{ {1,0,0,1,1,1,0,1, 20, 10} }, +{ {1,0,0,1,1,1,0,2, 27, 33} }, +{ {1,0,0,1,1,1,1,0, 13, 2} }, +{ {1,0,0,1,1,1,1,1, 4, 5} }, +{ {1,0,0,1,1,1,1,2, 16, 12} }, +{ {1,0,0,1,1,1,2,0, 38, 2} }, +{ {1,0,0,1,1,1,2,1, 35, 10} }, +{ {1,0,0,1,1,1,2,2, 40, 33} }, +{ {1,0,0,1,1,2,0,0, 27, 44} }, +{ {1,0,0,1,1,2,0,1, 45, 26} }, +{ {1,0,0,1,1,2,0,2, 47, 26} }, +{ {1,0,0,1,1,2,1,0, 38, 12} }, +{ {1,0,0,1,1,2,1,1, 35, 4} }, +{ {1,0,0,1,1,2,1,2, 40, 12} }, +{ {1,0,0,1,1,2,2,0, 50, 13} }, +{ {1,0,0,1,1,2,2,1, 49, 13} }, +{ {1,0,0,1,1,2,2,2, 31, 5} }, +{ {1,0,0,1,2,0,0,0, 35, 5} }, +{ {1,0,0,1,2,0,0,1, 45, 23} }, +{ {1,0,0,1,2,0,0,2, 49, 8} }, +{ {1,0,0,1,2,0,1,0, 38, 9} }, +{ {1,0,0,1,2,0,1,1, 27, 39} }, +{ {1,0,0,1,2,0,1,2, 50, 8} }, +{ {1,0,0,1,2,0,2,0, 40, 9} }, +{ {1,0,0,1,2,0,2,1, 47, 8} }, +{ {1,0,0,1,2,0,2,2, 31, 4} }, +{ {1,0,0,1,2,1,0,0, 38, 25} }, +{ {1,0,0,1,2,1,0,1, 27, 22} }, +{ {1,0,0,1,2,1,0,2, 50, 26} }, +{ {1,0,0,1,2,1,1,0, 55, 7} }, +{ {1,0,0,1,2,1,1,1, 16, 22} }, +{ {1,0,0,1,2,1,1,2, 56, 1} }, +{ {1,0,0,1,2,1,2,0, 51, 29} }, +{ {1,0,0,1,2,1,2,1, 40, 22} }, +{ {1,0,0,1,2,1,2,2, 39, 4} }, +{ {1,0,0,1,2,2,0,0, 40, 44} }, +{ {1,0,0,1,2,2,0,1, 47, 45} }, +{ {1,0,0,1,2,2,0,2, 31, 10} }, +{ {1,0,0,1,2,2,1,0, 51, 3} }, +{ {1,0,0,1,2,2,1,1, 40, 39} }, +{ {1,0,0,1,2,2,1,2, 39, 10} }, +{ {1,0,0,1,2,2,2,0, 39, 11} }, +{ {1,0,0,1,2,2,2,1, 31, 11} }, +{ {1,0,0,1,2,2,2,2, 12, 4} }, +{ {1,0,0,2,0,0,0,0, 7, 10} }, +{ {1,0,0,2,0,0,0,1, 21, 11} }, +{ {1,0,0,2,0,0,0,2, 34, 11} }, +{ {1,0,0,2,0,0,1,0, 16, 3} }, +{ {1,0,0,2,0,0,1,1, 27, 3} }, +{ {1,0,0,2,0,0,1,2, 40, 3} }, +{ {1,0,0,2,0,0,2,0, 16, 31} }, +{ {1,0,0,2,0,0,2,1, 30, 3} }, +{ {1,0,0,2,0,0,2,2, 26, 24} }, +{ {1,0,0,2,0,1,0,0, 16, 29} }, +{ {1,0,0,2,0,1,0,1, 27, 46} }, +{ {1,0,0,2,0,1,0,2, 40, 46} }, +{ {1,0,0,2,0,1,1,0, 55, 2} }, +{ {1,0,0,2,0,1,1,1, 38, 5} }, +{ {1,0,0,2,0,1,1,2, 51, 23} }, +{ {1,0,0,2,0,1,2,0, 56, 3} }, +{ {1,0,0,2,0,1,2,1, 50, 31} }, +{ {1,0,0,2,0,1,2,2, 39, 24} }, +{ {1,0,0,2,0,2,0,0, 16, 4} }, +{ {1,0,0,2,0,2,0,1, 30, 27} }, +{ {1,0,0,2,0,2,0,2, 26, 22} }, +{ {1,0,0,2,0,2,1,0, 56, 13} }, +{ {1,0,0,2,0,2,1,1, 50, 4} }, +{ {1,0,0,2,0,2,1,2, 39, 22} }, +{ {1,0,0,2,0,2,2,0, 55, 5} }, +{ {1,0,0,2,0,2,2,1, 57, 0} }, +{ {1,0,0,2,0,2,2,2, 15, 5} }, +{ {1,0,0,2,1,0,0,0, 34, 5} }, +{ {1,0,0,2,1,0,0,1, 45, 12} }, +{ {1,0,0,2,1,0,0,2, 46, 12} }, +{ {1,0,0,2,1,0,1,0, 26, 12} }, +{ {1,0,0,2,1,0,1,1, 23, 47} }, +{ {1,0,0,2,1,0,1,2, 29, 12} }, +{ {1,0,0,2,1,0,2,0, 40, 36} }, +{ {1,0,0,2,1,0,2,1, 48, 42} }, +{ {1,0,0,2,1,0,2,2, 29, 39} }, +{ {1,0,0,2,1,1,0,0, 26, 2} }, +{ {1,0,0,2,1,1,0,1, 23, 2} }, +{ {1,0,0,2,1,1,0,2, 29, 33} }, +{ {1,0,0,2,1,1,1,0, 15, 2} }, +{ {1,0,0,2,1,1,1,1, 6, 11} }, +{ {1,0,0,2,1,1,1,2, 18, 12} }, +{ {1,0,0,2,1,1,2,0, 39, 2} }, +{ {1,0,0,2,1,1,2,1, 36, 2} }, +{ {1,0,0,2,1,1,2,2, 42, 33} }, +{ {1,0,0,2,1,2,0,0, 40, 25} }, +{ {1,0,0,2,1,2,0,1, 48, 27} }, +{ {1,0,0,2,1,2,0,2, 29, 22} }, +{ {1,0,0,2,1,2,1,0, 39, 12} }, +{ {1,0,0,2,1,2,1,1, 36, 47} }, +{ {1,0,0,2,1,2,1,2, 42, 12} }, +{ {1,0,0,2,1,2,2,0, 51, 13} }, +{ {1,0,0,2,1,2,2,1, 50, 12} }, +{ {1,0,0,2,1,2,2,2, 18, 22} }, +{ {1,0,0,2,2,0,0,0, 21, 5} }, +{ {1,0,0,2,2,0,0,1, 52, 9} }, +{ {1,0,0,2,2,0,0,2, 45, 22} }, +{ {1,0,0,2,2,0,1,0, 30, 9} }, +{ {1,0,0,2,2,0,1,1, 53, 43} }, +{ {1,0,0,2,2,0,1,2, 48, 9} }, +{ {1,0,0,2,2,0,2,0, 27, 36} }, +{ {1,0,0,2,2,0,2,1, 53, 8} }, +{ {1,0,0,2,2,0,2,2, 23, 24} }, +{ {1,0,0,2,2,1,0,0, 30, 25} }, +{ {1,0,0,2,2,1,0,1, 53, 26} }, +{ {1,0,0,2,2,1,0,2, 48, 44} }, +{ {1,0,0,2,2,1,1,0, 57, 7} }, +{ {1,0,0,2,2,1,1,1, 30, 5} }, +{ {1,0,0,2,2,1,1,2, 50, 22} }, +{ {1,0,0,2,2,1,2,0, 50, 29} }, +{ {1,0,0,2,2,1,2,1, 48, 30} }, +{ {1,0,0,2,2,1,2,2, 36, 24} }, +{ {1,0,0,2,2,2,0,0, 27, 25} }, +{ {1,0,0,2,2,2,0,1, 53, 45} }, +{ {1,0,0,2,2,2,0,2, 23, 37} }, +{ {1,0,0,2,2,2,1,0, 50, 3} }, +{ {1,0,0,2,2,2,1,1, 48, 5} }, +{ {1,0,0,2,2,2,1,2, 36, 37} }, +{ {1,0,0,2,2,2,2,0, 38, 11} }, +{ {1,0,0,2,2,2,2,1, 30, 11} }, +{ {1,0,0,2,2,2,2,2, 6, 5} }, +{ {1,0,1,0,0,0,0,0, 2, 31} }, +{ {1,0,1,0,0,0,0,1, 20, 3} }, +{ {1,0,1,0,0,0,0,2, 34, 3} }, +{ {1,0,1,0,0,0,1,0, 5, 9} }, +{ {1,0,1,0,0,0,1,1, 22, 8} }, +{ {1,0,1,0,0,0,1,2, 28, 41} }, +{ {1,0,1,0,0,0,2,0, 8, 9} }, +{ {1,0,1,0,0,0,2,1, 23, 8} }, +{ {1,0,1,0,0,0,2,2, 37, 42} }, +{ {1,0,1,0,0,1,0,0, 20, 24} }, +{ {1,0,1,0,0,1,0,1, 44, 15} }, +{ {1,0,1,0,0,1,0,2, 45, 19} }, +{ {1,0,1,0,0,1,1,0, 25, 23} }, +{ {1,0,1,0,0,1,1,1, 20, 25} }, +{ {1,0,1,0,0,1,1,2, 27, 41} }, +{ {1,0,1,0,0,1,2,0, 27, 34} }, +{ {1,0,1,0,0,1,2,1, 45, 14} }, +{ {1,0,1,0,0,1,2,2, 47, 14} }, +{ {1,0,1,0,0,2,0,0, 34, 24} }, +{ {1,0,1,0,0,2,0,1, 45, 18} }, +{ {1,0,1,0,0,2,0,2, 46, 18} }, +{ {1,0,1,0,0,2,1,0, 26, 26} }, +{ {1,0,1,0,0,2,1,1, 23, 26} }, +{ {1,0,1,0,0,2,1,2, 29, 41} }, +{ {1,0,1,0,0,2,2,0, 40, 23} }, +{ {1,0,1,0,0,2,2,1, 48, 15} }, +{ {1,0,1,0,0,2,2,2, 29, 30} }, +{ {1,0,1,0,1,0,0,0, 5, 22} }, +{ {1,0,1,0,1,0,0,1, 25, 8} }, +{ {1,0,1,0,1,0,0,2, 26, 13} }, +{ {1,0,1,0,1,0,1,0, 9, 9} }, +{ {1,0,1,0,1,0,1,1, 5, 27} }, +{ {1,0,1,0,1,0,1,2, 10, 13} }, +{ {1,0,1,0,1,0,2,0, 10, 8} }, +{ {1,0,1,0,1,0,2,1, 26, 8} }, +{ {1,0,1,0,1,0,2,2, 43, 8} }, +{ {1,0,1,0,1,1,0,0, 22, 23} }, +{ {1,0,1,0,1,1,0,1, 20, 2} }, +{ {1,0,1,0,1,1,0,2, 23, 13} }, +{ {1,0,1,0,1,1,1,0, 5, 12} }, +{ {1,0,1,0,1,1,1,1, 2, 28} }, +{ {1,0,1,0,1,1,1,2, 8, 12} }, +{ {1,0,1,0,1,1,2,0, 28, 34} }, +{ {1,0,1,0,1,1,2,1, 34, 2} }, +{ {1,0,1,0,1,1,2,2, 37, 33} }, +{ {1,0,1,0,1,2,0,0, 28, 40} }, +{ {1,0,1,0,1,2,0,1, 27, 40} }, +{ {1,0,1,0,1,2,0,2, 29, 40} }, +{ {1,0,1,0,1,2,1,0, 10, 26} }, +{ {1,0,1,0,1,2,1,1, 8, 27} }, +{ {1,0,1,0,1,2,1,2, 11, 40} }, +{ {1,0,1,0,1,2,2,0, 42, 23} }, +{ {1,0,1,0,1,2,2,1, 40, 13} }, +{ {1,0,1,0,1,2,2,2, 41, 13} }, +{ {1,0,1,0,2,0,0,0, 8, 22} }, +{ {1,0,1,0,2,0,0,1, 27, 35} }, +{ {1,0,1,0,2,0,0,2, 40, 8} }, +{ {1,0,1,0,2,0,1,0, 10, 23} }, +{ {1,0,1,0,2,0,1,1, 28, 35} }, +{ {1,0,1,0,2,0,1,2, 42, 8} }, +{ {1,0,1,0,2,0,2,0, 11, 35} }, +{ {1,0,1,0,2,0,2,1, 29, 35} }, +{ {1,0,1,0,2,0,2,2, 41, 8} }, +{ {1,0,1,0,2,1,0,0, 23, 23} }, +{ {1,0,1,0,2,1,0,1, 45, 15} }, +{ {1,0,1,0,2,1,0,2, 48, 14} }, +{ {1,0,1,0,2,1,1,0, 26, 23} }, +{ {1,0,1,0,2,1,1,1, 34, 25} }, +{ {1,0,1,0,2,1,1,2, 40, 26} }, +{ {1,0,1,0,2,1,2,0, 29, 34} }, +{ {1,0,1,0,2,1,2,1, 46, 15} }, +{ {1,0,1,0,2,1,2,2, 29, 29} }, +{ {1,0,1,0,2,2,0,0, 37, 39} }, +{ {1,0,1,0,2,2,0,1, 47, 15} }, +{ {1,0,1,0,2,2,0,2, 29, 31} }, +{ {1,0,1,0,2,2,1,0, 43, 23} }, +{ {1,0,1,0,2,2,1,1, 37, 44} }, +{ {1,0,1,0,2,2,1,2, 41, 26} }, +{ {1,0,1,0,2,2,2,0, 41, 23} }, +{ {1,0,1,0,2,2,2,1, 29, 28} }, +{ {1,0,1,0,2,2,2,2, 11, 31} }, +{ {1,0,1,1,0,0,0,0, 5, 10} }, +{ {1,0,1,1,0,0,0,1, 22, 3} }, +{ {1,0,1,1,0,0,0,2, 28, 18} }, +{ {1,0,1,1,0,0,1,0, 14, 3} }, +{ {1,0,1,1,0,0,1,1, 5, 6} }, +{ {1,0,1,1,0,0,1,2, 17, 18} }, +{ {1,0,1,1,0,0,2,0, 17, 9} }, +{ {1,0,1,1,0,0,2,1, 28, 42} }, +{ {1,0,1,1,0,0,2,2, 41, 42} }, +{ {1,0,1,1,0,1,0,0, 25, 4} }, +{ {1,0,1,1,0,1,0,1, 20, 7} }, +{ {1,0,1,1,0,1,0,2, 27, 18} }, +{ {1,0,1,1,0,1,1,0, 13, 6} }, +{ {1,0,1,1,0,1,1,1, 4, 6} }, +{ {1,0,1,1,0,1,1,2, 16, 18} }, +{ {1,0,1,1,0,1,2,0, 38, 18} }, +{ {1,0,1,1,0,1,2,1, 35, 7} }, +{ {1,0,1,1,0,1,2,2, 40, 18} }, +{ {1,0,1,1,0,2,0,0, 26, 18} }, +{ {1,0,1,1,0,2,0,1, 23, 17} }, +{ {1,0,1,1,0,2,0,2, 29, 18} }, +{ {1,0,1,1,0,2,1,0, 15, 6} }, +{ {1,0,1,1,0,2,1,1, 6, 6} }, +{ {1,0,1,1,0,2,1,2, 18, 18} }, +{ {1,0,1,1,0,2,2,0, 39, 18} }, +{ {1,0,1,1,0,2,2,1, 36, 17} }, +{ {1,0,1,1,0,2,2,2, 42, 18} }, +{ {1,0,1,1,1,0,0,0, 22, 30} }, +{ {1,0,1,1,1,0,0,1, 20, 18} }, +{ {1,0,1,1,1,0,0,2, 23, 40} }, +{ {1,0,1,1,1,0,1,0, 5, 26} }, +{ {1,0,1,1,1,0,1,1, 2, 27} }, +{ {1,0,1,1,1,0,1,2, 8, 41} }, +{ {1,0,1,1,1,0,2,0, 28, 9} }, +{ {1,0,1,1,1,0,2,1, 34, 18} }, +{ {1,0,1,1,1,0,2,2, 37, 18} }, +{ {1,0,1,1,1,1,0,0, 20, 13} }, +{ {1,0,1,1,1,1,0,1, 19, 7} }, +{ {1,0,1,1,1,1,0,2, 21, 13} }, +{ {1,0,1,1,1,1,1,0, 4, 12} }, +{ {1,0,1,1,1,1,1,1, 1, 4} }, +{ {1,0,1,1,1,1,1,2, 7, 12} }, +{ {1,0,1,1,1,1,2,0, 35, 13} }, +{ {1,0,1,1,1,1,2,1, 33, 2} }, +{ {1,0,1,1,1,1,2,2, 34, 13} }, +{ {1,0,1,1,1,2,0,0, 23, 18} }, +{ {1,0,1,1,1,2,0,1, 21, 18} }, +{ {1,0,1,1,1,2,0,2, 24, 18} }, +{ {1,0,1,1,1,2,1,0, 6, 26} }, +{ {1,0,1,1,1,2,1,1, 3, 26} }, +{ {1,0,1,1,1,2,1,2, 8, 26} }, +{ {1,0,1,1,1,2,2,0, 36, 18} }, +{ {1,0,1,1,1,2,2,1, 35, 18} }, +{ {1,0,1,1,1,2,2,2, 28, 5} }, +{ {1,0,1,1,2,0,0,0, 28, 17} }, +{ {1,0,1,1,2,0,0,1, 23, 7} }, +{ {1,0,1,1,2,0,0,2, 31, 18} }, +{ {1,0,1,1,2,0,1,0, 17, 6} }, +{ {1,0,1,1,2,0,1,1, 8, 6} }, +{ {1,0,1,1,2,0,1,2, 18, 26} }, +{ {1,0,1,1,2,0,2,0, 41, 9} }, +{ {1,0,1,1,2,0,2,1, 37, 17} }, +{ {1,0,1,1,2,0,2,2, 43, 18} }, +{ {1,0,1,1,2,1,0,0, 27, 17} }, +{ {1,0,1,1,2,1,0,1, 21, 7} }, +{ {1,0,1,1,2,1,0,2, 30, 18} }, +{ {1,0,1,1,2,1,1,0, 16, 6} }, +{ {1,0,1,1,2,1,1,1, 7, 6} }, +{ {1,0,1,1,2,1,1,2, 16, 26} }, +{ {1,0,1,1,2,1,2,0, 40, 17} }, +{ {1,0,1,1,2,1,2,1, 34, 7} }, +{ {1,0,1,1,2,1,2,2, 26, 4} }, +{ {1,0,1,1,2,2,0,0, 29, 17} }, +{ {1,0,1,1,2,2,0,1, 24, 7} }, +{ {1,0,1,1,2,2,0,2, 32, 18} }, +{ {1,0,1,1,2,2,1,0, 18, 6} }, +{ {1,0,1,1,2,2,1,1, 8, 45} }, +{ {1,0,1,1,2,2,1,2, 17, 26} }, +{ {1,0,1,1,2,2,2,0, 42, 17} }, +{ {1,0,1,1,2,2,2,1, 28, 28} }, +{ {1,0,1,1,2,2,2,2, 10, 4} }, +{ {1,0,1,2,0,0,0,0, 8, 10} }, +{ {1,0,1,2,0,0,0,1, 23, 11} }, +{ {1,0,1,2,0,0,0,2, 37, 3} }, +{ {1,0,1,2,0,0,1,0, 17, 3} }, +{ {1,0,1,2,0,0,1,1, 28, 3} }, +{ {1,0,1,2,0,0,1,2, 41, 3} }, +{ {1,0,1,2,0,0,2,0, 18, 31} }, +{ {1,0,1,2,0,0,2,1, 31, 3} }, +{ {1,0,1,2,0,0,2,2, 43, 3} }, +{ {1,0,1,2,0,1,0,0, 27, 29} }, +{ {1,0,1,2,0,1,0,1, 45, 28} }, +{ {1,0,1,2,0,1,0,2, 47, 47} }, +{ {1,0,1,2,0,1,1,0, 38, 26} }, +{ {1,0,1,2,0,1,1,1, 35, 25} }, +{ {1,0,1,2,0,1,1,2, 40, 41} }, +{ {1,0,1,2,0,1,2,0, 50, 19} }, +{ {1,0,1,2,0,1,2,1, 49, 19} }, +{ {1,0,1,2,0,1,2,2, 31, 24} }, +{ {1,0,1,2,0,2,0,0, 40, 4} }, +{ {1,0,1,2,0,2,0,1, 48, 46} }, +{ {1,0,1,2,0,2,0,2, 29, 37} }, +{ {1,0,1,2,0,2,1,0, 39, 26} }, +{ {1,0,1,2,0,2,1,1, 36, 26} }, +{ {1,0,1,2,0,2,1,2, 42, 41} }, +{ {1,0,1,2,0,2,2,0, 51, 19} }, +{ {1,0,1,2,0,2,2,1, 50, 18} }, +{ {1,0,1,2,0,2,2,2, 18, 30} }, +{ {1,0,1,2,1,0,0,0, 28, 13} }, +{ {1,0,1,2,1,0,0,1, 27, 13} }, +{ {1,0,1,2,1,0,0,2, 29, 13} }, +{ {1,0,1,2,1,0,1,0, 10, 12} }, +{ {1,0,1,2,1,0,1,1, 8, 46} }, +{ {1,0,1,2,1,0,1,2, 11, 12} }, +{ {1,0,1,2,1,0,2,0, 42, 36} }, +{ {1,0,1,2,1,0,2,1, 40, 40} }, +{ {1,0,1,2,1,0,2,2, 41, 40} }, +{ {1,0,1,2,1,1,0,0, 23, 33} }, +{ {1,0,1,2,1,1,0,1, 21, 2} }, +{ {1,0,1,2,1,1,0,2, 24, 13} }, +{ {1,0,1,2,1,1,1,0, 6, 12} }, +{ {1,0,1,2,1,1,1,1, 3, 28} }, +{ {1,0,1,2,1,1,1,2, 8, 47} }, +{ {1,0,1,2,1,1,2,0, 36, 33} }, +{ {1,0,1,2,1,1,2,1, 35, 2} }, +{ {1,0,1,2,1,1,2,2, 28, 24} }, +{ {1,0,1,2,1,2,0,0, 31, 13} }, +{ {1,0,1,2,1,2,0,1, 30, 13} }, +{ {1,0,1,2,1,2,0,2, 32, 13} }, +{ {1,0,1,2,1,2,1,0, 12, 13} }, +{ {1,0,1,2,1,2,1,1, 6, 27} }, +{ {1,0,1,2,1,2,1,2, 10, 27} }, +{ {1,0,1,2,1,2,2,0, 39, 13} }, +{ {1,0,1,2,1,2,2,1, 38, 13} }, +{ {1,0,1,2,1,2,2,2, 17, 5} }, +{ {1,0,1,2,2,0,0,0, 24, 30} }, +{ {1,0,1,2,2,0,0,1, 53, 9} }, +{ {1,0,1,2,2,0,0,2, 47, 9} }, +{ {1,0,1,2,2,0,1,0, 32, 9} }, +{ {1,0,1,2,2,0,1,1, 24, 26} }, +{ {1,0,1,2,2,0,1,2, 29, 26} }, +{ {1,0,1,2,2,0,2,0, 29, 36} }, +{ {1,0,1,2,2,0,2,1, 47, 41} }, +{ {1,0,1,2,2,0,2,2, 37, 4} }, +{ {1,0,1,2,2,1,0,0, 53, 5} }, +{ {1,0,1,2,2,1,0,1, 52, 19} }, +{ {1,0,1,2,2,1,0,2, 53, 40} }, +{ {1,0,1,2,2,1,1,0, 30, 26} }, +{ {1,0,1,2,2,1,1,1, 21, 25} }, +{ {1,0,1,2,2,1,1,2, 27, 26} }, +{ {1,0,1,2,2,1,2,0, 48, 41} }, +{ {1,0,1,2,2,1,2,1, 45, 29} }, +{ {1,0,1,2,2,1,2,2, 23, 4} }, +{ {1,0,1,2,2,2,0,0, 47, 5} }, +{ {1,0,1,2,2,2,0,1, 53, 18} }, +{ {1,0,1,2,2,2,0,2, 24, 31} }, +{ {1,0,1,2,2,2,1,0, 31, 26} }, +{ {1,0,1,2,2,2,1,1, 23, 44} }, +{ {1,0,1,2,2,2,1,2, 28, 26} }, +{ {1,0,1,2,2,2,2,0, 40, 11} }, +{ {1,0,1,2,2,2,2,1, 27, 28} }, +{ {1,0,1,2,2,2,2,2, 8, 5} }, +{ {1,0,2,0,0,0,0,0, 3, 31} }, +{ {1,0,2,0,0,0,0,1, 21, 3} }, +{ {1,0,2,0,0,0,0,2, 35, 3} }, +{ {1,0,2,0,0,0,1,0, 6, 9} }, +{ {1,0,2,0,0,0,1,1, 23, 42} }, +{ {1,0,2,0,0,0,1,2, 36, 42} }, +{ {1,0,2,0,0,0,2,0, 8, 36} }, +{ {1,0,2,0,0,0,2,1, 24, 8} }, +{ {1,0,2,0,0,0,2,2, 28, 25} }, +{ {1,0,2,0,0,1,0,0, 35, 24} }, +{ {1,0,2,0,0,1,0,1, 45, 31} }, +{ {1,0,2,0,0,1,0,2, 49, 14} }, +{ {1,0,2,0,0,1,1,0, 38, 23} }, +{ {1,0,2,0,0,1,1,1, 27, 30} }, +{ {1,0,2,0,0,1,1,2, 50, 14} }, +{ {1,0,2,0,0,1,2,0, 40, 34} }, +{ {1,0,2,0,0,1,2,1, 47, 35} }, +{ {1,0,2,0,0,1,2,2, 31, 25} }, +{ {1,0,2,0,0,2,0,0, 21, 24} }, +{ {1,0,2,0,0,2,0,1, 52, 14} }, +{ {1,0,2,0,0,2,0,2, 45, 30} }, +{ {1,0,2,0,0,2,1,0, 30, 23} }, +{ {1,0,2,0,0,2,1,1, 53, 14} }, +{ {1,0,2,0,0,2,1,2, 48, 34} }, +{ {1,0,2,0,0,2,2,0, 27, 23} }, +{ {1,0,2,0,0,2,2,1, 53, 35} }, +{ {1,0,2,0,0,2,2,2, 23, 5} }, +{ {1,0,2,0,1,0,0,0, 8, 37} }, +{ {1,0,2,0,1,0,0,1, 27, 8} }, +{ {1,0,2,0,1,0,0,2, 40, 35} }, +{ {1,0,2,0,1,0,1,0, 10, 9} }, +{ {1,0,2,0,1,0,1,1, 28, 8} }, +{ {1,0,2,0,1,0,1,2, 42, 35} }, +{ {1,0,2,0,1,0,2,0, 11, 9} }, +{ {1,0,2,0,1,0,2,1, 29, 8} }, +{ {1,0,2,0,1,0,2,2, 41, 35} }, +{ {1,0,2,0,1,1,0,0, 28, 2} }, +{ {1,0,2,0,1,1,0,1, 23, 10} }, +{ {1,0,2,0,1,1,0,2, 31, 2} }, +{ {1,0,2,0,1,1,1,0, 17, 2} }, +{ {1,0,2,0,1,1,1,1, 8, 11} }, +{ {1,0,2,0,1,1,1,2, 18, 28} }, +{ {1,0,2,0,1,1,2,0, 41, 34} }, +{ {1,0,2,0,1,1,2,1, 37, 2} }, +{ {1,0,2,0,1,1,2,2, 43, 2} }, +{ {1,0,2,0,1,2,0,0, 24, 23} }, +{ {1,0,2,0,1,2,0,1, 53, 34} }, +{ {1,0,2,0,1,2,0,2, 47, 34} }, +{ {1,0,2,0,1,2,1,0, 32, 23} }, +{ {1,0,2,0,1,2,1,1, 24, 29} }, +{ {1,0,2,0,1,2,1,2, 29, 47} }, +{ {1,0,2,0,1,2,2,0, 29, 23} }, +{ {1,0,2,0,1,2,2,1, 47, 12} }, +{ {1,0,2,0,1,2,2,2, 37, 25} }, +{ {1,0,2,0,2,0,0,0, 6, 22} }, +{ {1,0,2,0,2,0,0,1, 30, 8} }, +{ {1,0,2,0,2,0,0,2, 38, 8} }, +{ {1,0,2,0,2,0,1,0, 12, 8} }, +{ {1,0,2,0,2,0,1,1, 31, 8} }, +{ {1,0,2,0,2,0,1,2, 39, 8} }, +{ {1,0,2,0,2,0,2,0, 10, 22} }, +{ {1,0,2,0,2,0,2,1, 32, 8} }, +{ {1,0,2,0,2,0,2,2, 17, 4} }, +{ {1,0,2,0,2,1,0,0, 36, 23} }, +{ {1,0,2,0,2,1,0,1, 48, 35} }, +{ {1,0,2,0,2,1,0,2, 50, 15} }, +{ {1,0,2,0,2,1,1,0, 39, 23} }, +{ {1,0,2,0,2,1,1,1, 40, 5} }, +{ {1,0,2,0,2,1,1,2, 51, 14} }, +{ {1,0,2,0,2,1,2,0, 42, 34} }, +{ {1,0,2,0,2,1,2,1, 29, 46} }, +{ {1,0,2,0,2,1,2,2, 18, 29} }, +{ {1,0,2,0,2,2,0,0, 23, 39} }, +{ {1,0,2,0,2,2,0,1, 53, 15} }, +{ {1,0,2,0,2,2,0,2, 27, 31} }, +{ {1,0,2,0,2,2,1,0, 31, 23} }, +{ {1,0,2,0,2,2,1,1, 47, 4} }, +{ {1,0,2,0,2,2,1,2, 40, 10} }, +{ {1,0,2,0,2,2,2,0, 28, 23} }, +{ {1,0,2,0,2,2,2,1, 24, 28} }, +{ {1,0,2,0,2,2,2,2, 8, 4} }, +{ {1,0,2,1,0,0,0,0, 6, 10} }, +{ {1,0,2,1,0,0,0,1, 23, 3} }, +{ {1,0,2,1,0,0,0,2, 36, 3} }, +{ {1,0,2,1,0,0,1,0, 15, 3} }, +{ {1,0,2,1,0,0,1,1, 26, 3} }, +{ {1,0,2,1,0,0,1,2, 39, 3} }, +{ {1,0,2,1,0,0,2,0, 18, 9} }, +{ {1,0,2,1,0,0,2,1, 29, 42} }, +{ {1,0,2,1,0,0,2,2, 42, 42} }, +{ {1,0,2,1,0,1,0,0, 38, 4} }, +{ {1,0,2,1,0,1,0,1, 27, 37} }, +{ {1,0,2,1,0,1,0,2, 50, 28} }, +{ {1,0,2,1,0,1,1,0, 55, 3} }, +{ {1,0,2,1,0,1,1,1, 16, 30} }, +{ {1,0,2,1,0,1,1,2, 56, 2} }, +{ {1,0,2,1,0,1,2,0, 51, 27} }, +{ {1,0,2,1,0,1,2,1, 40, 37} }, +{ {1,0,2,1,0,1,2,2, 39, 25} }, +{ {1,0,2,1,0,2,0,0, 30, 4} }, +{ {1,0,2,1,0,2,0,1, 53, 47} }, +{ {1,0,2,1,0,2,0,2, 48, 29} }, +{ {1,0,2,1,0,2,1,0, 57, 3} }, +{ {1,0,2,1,0,2,1,1, 30, 24} }, +{ {1,0,2,1,0,2,1,2, 50, 30} }, +{ {1,0,2,1,0,2,2,0, 50, 27} }, +{ {1,0,2,1,0,2,2,1, 48, 39} }, +{ {1,0,2,1,0,2,2,2, 36, 5} }, +{ {1,0,2,1,1,0,0,0, 23, 36} }, +{ {1,0,2,1,1,0,0,1, 45, 9} }, +{ {1,0,2,1,1,0,0,2, 48, 43} }, +{ {1,0,2,1,1,0,1,0, 26, 9} }, +{ {1,0,2,1,1,0,1,1, 34, 4} }, +{ {1,0,2,1,1,0,1,2, 40, 47} }, +{ {1,0,2,1,1,0,2,0, 29, 9} }, +{ {1,0,2,1,1,0,2,1, 46, 9} }, +{ {1,0,2,1,1,0,2,2, 29, 44} }, +{ {1,0,2,1,1,1,0,0, 27, 2} }, +{ {1,0,2,1,1,1,0,1, 21, 10} }, +{ {1,0,2,1,1,1,0,2, 30, 2} }, +{ {1,0,2,1,1,1,1,0, 16, 2} }, +{ {1,0,2,1,1,1,1,1, 7, 11} }, +{ {1,0,2,1,1,1,1,2, 16, 28} }, +{ {1,0,2,1,1,1,2,0, 40, 2} }, +{ {1,0,2,1,1,1,2,1, 34, 10} }, +{ {1,0,2,1,1,1,2,2, 26, 25} }, +{ {1,0,2,1,1,2,0,0, 53, 24} }, +{ {1,0,2,1,1,2,0,1, 52, 12} }, +{ {1,0,2,1,1,2,0,2, 53, 13} }, +{ {1,0,2,1,1,2,1,0, 30, 12} }, +{ {1,0,2,1,1,2,1,1, 21, 4} }, +{ {1,0,2,1,1,2,1,2, 27, 47} }, +{ {1,0,2,1,1,2,2,0, 48, 12} }, +{ {1,0,2,1,1,2,2,1, 45, 27} }, +{ {1,0,2,1,1,2,2,2, 23, 25} }, +{ {1,0,2,1,2,0,0,0, 36, 36} }, +{ {1,0,2,1,2,0,0,1, 48, 8} }, +{ {1,0,2,1,2,0,0,2, 50, 9} }, +{ {1,0,2,1,2,0,1,0, 39, 9} }, +{ {1,0,2,1,2,0,1,1, 40, 24} }, +{ {1,0,2,1,2,0,1,2, 51, 8} }, +{ {1,0,2,1,2,0,2,0, 42, 9} }, +{ {1,0,2,1,2,0,2,1, 29, 27} }, +{ {1,0,2,1,2,0,2,2, 18, 27} }, +{ {1,0,2,1,2,1,0,0, 50, 5} }, +{ {1,0,2,1,2,1,0,1, 30, 22} }, +{ {1,0,2,1,2,1,0,2, 57, 1} }, +{ {1,0,2,1,2,1,1,0, 56, 8} }, +{ {1,0,2,1,2,1,1,1, 16, 5} }, +{ {1,0,2,1,2,1,1,2, 55, 4} }, +{ {1,0,2,1,2,1,2,0, 39, 27} }, +{ {1,0,2,1,2,1,2,1, 26, 27} }, +{ {1,0,2,1,2,1,2,2, 15, 4} }, +{ {1,0,2,1,2,2,0,0, 48, 4} }, +{ {1,0,2,1,2,2,0,1, 53, 38} }, +{ {1,0,2,1,2,2,0,2, 30, 10} }, +{ {1,0,2,1,2,2,1,0, 50, 2} }, +{ {1,0,2,1,2,2,1,1, 27, 24} }, +{ {1,0,2,1,2,2,1,2, 38, 10} }, +{ {1,0,2,1,2,2,2,0, 36, 28} }, +{ {1,0,2,1,2,2,2,1, 23, 46} }, +{ {1,0,2,1,2,2,2,2, 6, 4} }, +{ {1,0,2,2,0,0,0,0, 8, 31} }, +{ {1,0,2,2,0,0,0,1, 24, 3} }, +{ {1,0,2,2,0,0,0,2, 28, 38} }, +{ {1,0,2,2,0,0,1,0, 18, 3} }, +{ {1,0,2,2,0,0,1,1, 29, 3} }, +{ {1,0,2,2,0,0,1,2, 42, 3} }, +{ {1,0,2,2,0,0,2,0, 17, 31} }, +{ {1,0,2,2,0,0,2,1, 32, 3} }, +{ {1,0,2,2,0,0,2,2, 10, 24} }, +{ {1,0,2,2,0,1,0,0, 40, 29} }, +{ {1,0,2,2,0,1,0,1, 47, 28} }, +{ {1,0,2,2,0,1,0,2, 31, 7} }, +{ {1,0,2,2,0,1,1,0, 51, 7} }, +{ {1,0,2,2,0,1,1,1, 40, 30} }, +{ {1,0,2,2,0,1,1,2, 39, 7} }, +{ {1,0,2,2,0,1,2,0, 39, 6} }, +{ {1,0,2,2,0,1,2,1, 31, 6} }, +{ {1,0,2,2,0,1,2,2, 12, 7} }, +{ {1,0,2,2,0,2,0,0, 27, 4} }, +{ {1,0,2,2,0,2,0,1, 53, 28} }, +{ {1,0,2,2,0,2,0,2, 23, 22} }, +{ {1,0,2,2,0,2,1,0, 50, 7} }, +{ {1,0,2,2,0,2,1,1, 48, 24} }, +{ {1,0,2,2,0,2,1,2, 36, 22} }, +{ {1,0,2,2,0,2,2,0, 38, 6} }, +{ {1,0,2,2,0,2,2,1, 30, 6} }, +{ {1,0,2,2,0,2,2,2, 6, 24} }, +{ {1,0,2,2,1,0,0,0, 37, 30} }, +{ {1,0,2,2,1,0,0,1, 47, 42} }, +{ {1,0,2,2,1,0,0,2, 29, 38} }, +{ {1,0,2,2,1,0,1,0, 43, 9} }, +{ {1,0,2,2,1,0,1,1, 37, 29} }, +{ {1,0,2,2,1,0,1,2, 41, 47} }, +{ {1,0,2,2,1,0,2,0, 41, 36} }, +{ {1,0,2,2,1,0,2,1, 29, 45} }, +{ {1,0,2,2,1,0,2,2, 11, 39} }, +{ {1,0,2,2,1,1,0,0, 29, 2} }, +{ {1,0,2,2,1,1,0,1, 24, 2} }, +{ {1,0,2,2,1,1,0,2, 32, 2} }, +{ {1,0,2,2,1,1,1,0, 18, 2} }, +{ {1,0,2,2,1,1,1,1, 8, 28} }, +{ {1,0,2,2,1,1,1,2, 17, 28} }, +{ {1,0,2,2,1,1,2,0, 42, 2} }, +{ {1,0,2,2,1,1,2,1, 28, 45} }, +{ {1,0,2,2,1,1,2,2, 10, 25} }, +{ {1,0,2,2,1,2,0,0, 47, 24} }, +{ {1,0,2,2,1,2,0,1, 53, 33} }, +{ {1,0,2,2,1,2,0,2, 24, 22} }, +{ {1,0,2,2,1,2,1,0, 31, 12} }, +{ {1,0,2,2,1,2,1,1, 23, 29} }, +{ {1,0,2,2,1,2,1,2, 28, 47} }, +{ {1,0,2,2,1,2,2,0, 40, 6} }, +{ {1,0,2,2,1,2,2,1, 27, 45} }, +{ {1,0,2,2,1,2,2,2, 8, 24} }, +{ {1,0,2,2,2,0,0,0, 23, 30} }, +{ {1,0,2,2,2,0,0,1, 53, 42} }, +{ {1,0,2,2,2,0,0,2, 27, 38} }, +{ {1,0,2,2,2,0,1,0, 31, 9} }, +{ {1,0,2,2,2,0,1,1, 47, 25} }, +{ {1,0,2,2,2,0,1,2, 40, 7} }, +{ {1,0,2,2,2,0,2,0, 28, 36} }, +{ {1,0,2,2,2,0,2,1, 24, 27} }, +{ {1,0,2,2,2,0,2,2, 8, 25} }, +{ {1,0,2,2,2,1,0,0, 48, 25} }, +{ {1,0,2,2,2,1,0,1, 53, 31} }, +{ {1,0,2,2,2,1,0,2, 30, 7} }, +{ {1,0,2,2,2,1,1,0, 50, 6} }, +{ {1,0,2,2,2,1,1,1, 27, 5} }, +{ {1,0,2,2,2,1,1,2, 38, 7} }, +{ {1,0,2,2,2,1,2,0, 36, 45} }, +{ {1,0,2,2,2,1,2,1, 23, 27} }, +{ {1,0,2,2,2,1,2,2, 6, 25} }, +{ {1,0,2,2,2,2,0,0, 45, 5} }, +{ {1,0,2,2,2,2,0,1, 52, 6} }, +{ {1,0,2,2,2,2,0,2, 21, 22} }, +{ {1,0,2,2,2,2,1,0, 49, 7} }, +{ {1,0,2,2,2,2,1,1, 45, 4} }, +{ {1,0,2,2,2,2,1,2, 35, 22} }, +{ {1,0,2,2,2,2,2,0, 35, 27} }, +{ {1,0,2,2,2,2,2,1, 21, 27} }, +{ {1,0,2,2,2,2,2,2, 3, 5} }, +{ {1,1,0,0,0,0,0,0, 2, 4} }, +{ {1,1,0,0,0,0,0,1, 20, 27} }, +{ {1,1,0,0,0,0,0,2, 34, 27} }, +{ {1,1,0,0,0,0,1,0, 20, 22} }, +{ {1,1,0,0,0,0,1,1, 44, 6} }, +{ {1,1,0,0,0,0,1,2, 45, 0} }, +{ {1,1,0,0,0,0,2,0, 34, 22} }, +{ {1,1,0,0,0,0,2,1, 45, 1} }, +{ {1,1,0,0,0,0,2,2, 46, 0} }, +{ {1,1,0,0,0,1,0,0, 5, 25} }, +{ {1,1,0,0,0,1,0,1, 22, 27} }, +{ {1,1,0,0,0,1,0,2, 28, 20} }, +{ {1,1,0,0,0,1,1,0, 25, 7} }, +{ {1,1,0,0,0,1,1,1, 20, 9} }, +{ {1,1,0,0,0,1,1,2, 27, 20} }, +{ {1,1,0,0,0,1,2,0, 26, 20} }, +{ {1,1,0,0,0,1,2,1, 23, 43} }, +{ {1,1,0,0,0,1,2,2, 29, 20} }, +{ {1,1,0,0,0,2,0,0, 8, 44} }, +{ {1,1,0,0,0,2,0,1, 23, 45} }, +{ {1,1,0,0,0,2,0,2, 37, 27} }, +{ {1,1,0,0,0,2,1,0, 27, 7} }, +{ {1,1,0,0,0,2,1,1, 45, 6} }, +{ {1,1,0,0,0,2,1,2, 47, 17} }, +{ {1,1,0,0,0,2,2,0, 40, 38} }, +{ {1,1,0,0,0,2,2,1, 48, 16} }, +{ {1,1,0,0,0,2,2,2, 29, 5} }, +{ {1,1,0,0,1,0,0,0, 5, 24} }, +{ {1,1,0,0,1,0,0,1, 25, 6} }, +{ {1,1,0,0,1,0,0,2, 26, 21} }, +{ {1,1,0,0,1,0,1,0, 22, 22} }, +{ {1,1,0,0,1,0,1,1, 20, 12} }, +{ {1,1,0,0,1,0,1,2, 23, 32} }, +{ {1,1,0,0,1,0,2,0, 28, 21} }, +{ {1,1,0,0,1,0,2,1, 27, 21} }, +{ {1,1,0,0,1,0,2,2, 29, 21} }, +{ {1,1,0,0,1,1,0,0, 9, 6} }, +{ {1,1,0,0,1,1,0,1, 5, 3} }, +{ {1,1,0,0,1,1,0,2, 10, 21} }, +{ {1,1,0,0,1,1,1,0, 5, 2} }, +{ {1,1,0,0,1,1,1,1, 2, 2} }, +{ {1,1,0,0,1,1,1,2, 8, 33} }, +{ {1,1,0,0,1,1,2,0, 10, 20} }, +{ {1,1,0,0,1,1,2,1, 8, 42} }, +{ {1,1,0,0,1,1,2,2, 11, 20} }, +{ {1,1,0,0,1,2,0,0, 10, 6} }, +{ {1,1,0,0,1,2,0,1, 26, 6} }, +{ {1,1,0,0,1,2,0,2, 43, 6} }, +{ {1,1,0,0,1,2,1,0, 28, 7} }, +{ {1,1,0,0,1,2,1,1, 34, 12} }, +{ {1,1,0,0,1,2,1,2, 37, 12} }, +{ {1,1,0,0,1,2,2,0, 42, 38} }, +{ {1,1,0,0,1,2,2,1, 40, 32} }, +{ {1,1,0,0,1,2,2,2, 41, 32} }, +{ {1,1,0,0,2,0,0,0, 8, 39} }, +{ {1,1,0,0,2,0,0,1, 27, 6} }, +{ {1,1,0,0,2,0,0,2, 40, 45} }, +{ {1,1,0,0,2,0,1,0, 23, 38} }, +{ {1,1,0,0,2,0,1,1, 45, 7} }, +{ {1,1,0,0,2,0,1,2, 48, 17} }, +{ {1,1,0,0,2,0,2,0, 37, 22} }, +{ {1,1,0,0,2,0,2,1, 47, 16} }, +{ {1,1,0,0,2,0,2,2, 29, 4} }, +{ {1,1,0,0,2,1,0,0, 10, 7} }, +{ {1,1,0,0,2,1,0,1, 28, 6} }, +{ {1,1,0,0,2,1,0,2, 42, 45} }, +{ {1,1,0,0,2,1,1,0, 26, 7} }, +{ {1,1,0,0,2,1,1,1, 34, 9} }, +{ {1,1,0,0,2,1,1,2, 40, 43} }, +{ {1,1,0,0,2,1,2,0, 43, 7} }, +{ {1,1,0,0,2,1,2,1, 37, 9} }, +{ {1,1,0,0,2,1,2,2, 41, 43} }, +{ {1,1,0,0,2,2,0,0, 11, 6} }, +{ {1,1,0,0,2,2,0,1, 29, 6} }, +{ {1,1,0,0,2,2,0,2, 41, 45} }, +{ {1,1,0,0,2,2,1,0, 29, 7} }, +{ {1,1,0,0,2,2,1,1, 46, 6} }, +{ {1,1,0,0,2,2,1,2, 29, 10} }, +{ {1,1,0,0,2,2,2,0, 41, 38} }, +{ {1,1,0,0,2,2,2,1, 29, 11} }, +{ {1,1,0,0,2,2,2,2, 11, 4} }, +{ {1,1,0,1,0,0,0,0, 5, 4} }, +{ {1,1,0,1,0,0,0,1, 22, 28} }, +{ {1,1,0,1,0,0,0,2, 28, 1} }, +{ {1,1,0,1,0,0,1,0, 25, 10} }, +{ {1,1,0,1,0,0,1,1, 20, 23} }, +{ {1,1,0,1,0,0,1,2, 27, 1} }, +{ {1,1,0,1,0,0,2,0, 26, 1} }, +{ {1,1,0,1,0,0,2,1, 23, 14} }, +{ {1,1,0,1,0,0,2,2, 29, 1} }, +{ {1,1,0,1,0,1,0,0, 14, 4} }, +{ {1,1,0,1,0,1,0,1, 5, 8} }, +{ {1,1,0,1,0,1,0,2, 17, 1} }, +{ {1,1,0,1,0,1,1,0, 13, 1} }, +{ {1,1,0,1,0,1,1,1, 4, 8} }, +{ {1,1,0,1,0,1,1,2, 16, 1} }, +{ {1,1,0,1,0,1,2,0, 15, 1} }, +{ {1,1,0,1,0,1,2,1, 6, 8} }, +{ {1,1,0,1,0,1,2,2, 18, 1} }, +{ {1,1,0,1,0,2,0,0, 17, 27} }, +{ {1,1,0,1,0,2,0,1, 28, 27} }, +{ {1,1,0,1,0,2,0,2, 41, 27} }, +{ {1,1,0,1,0,2,1,0, 38, 1} }, +{ {1,1,0,1,0,2,1,1, 35, 23} }, +{ {1,1,0,1,0,2,1,2, 40, 1} }, +{ {1,1,0,1,0,2,2,0, 39, 1} }, +{ {1,1,0,1,0,2,2,1, 36, 14} }, +{ {1,1,0,1,0,2,2,2, 42, 1} }, +{ {1,1,0,1,1,0,0,0, 22, 5} }, +{ {1,1,0,1,1,0,0,1, 20, 1} }, +{ {1,1,0,1,1,0,0,2, 23, 21} }, +{ {1,1,0,1,1,0,1,0, 20, 21} }, +{ {1,1,0,1,1,0,1,1, 19, 1} }, +{ {1,1,0,1,1,0,1,2, 21, 21} }, +{ {1,1,0,1,1,0,2,0, 23, 1} }, +{ {1,1,0,1,1,0,2,1, 21, 1} }, +{ {1,1,0,1,1,0,2,2, 24, 1} }, +{ {1,1,0,1,1,1,0,0, 5, 20} }, +{ {1,1,0,1,1,1,0,1, 2, 9} }, +{ {1,1,0,1,1,1,0,2, 8, 20} }, +{ {1,1,0,1,1,1,1,0, 4, 2} }, +{ {1,1,0,1,1,1,1,1, 1, 3} }, +{ {1,1,0,1,1,1,1,2, 7, 20} }, +{ {1,1,0,1,1,1,2,0, 6, 20} }, +{ {1,1,0,1,1,1,2,1, 3, 8} }, +{ {1,1,0,1,1,1,2,2, 8, 43} }, +{ {1,1,0,1,1,2,0,0, 28, 44} }, +{ {1,1,0,1,1,2,0,1, 34, 1} }, +{ {1,1,0,1,1,2,0,2, 37, 1} }, +{ {1,1,0,1,1,2,1,0, 35, 21} }, +{ {1,1,0,1,1,2,1,1, 33, 1} }, +{ {1,1,0,1,1,2,1,2, 34, 21} }, +{ {1,1,0,1,1,2,2,0, 36, 1} }, +{ {1,1,0,1,1,2,2,1, 35, 1} }, +{ {1,1,0,1,1,2,2,2, 28, 30} }, +{ {1,1,0,1,2,0,0,0, 28, 14} }, +{ {1,1,0,1,2,0,0,1, 23, 34} }, +{ {1,1,0,1,2,0,0,2, 31, 1} }, +{ {1,1,0,1,2,0,1,0, 27, 14} }, +{ {1,1,0,1,2,0,1,1, 21, 23} }, +{ {1,1,0,1,2,0,1,2, 30, 1} }, +{ {1,1,0,1,2,0,2,0, 29, 14} }, +{ {1,1,0,1,2,0,2,1, 24, 14} }, +{ {1,1,0,1,2,0,2,2, 32, 1} }, +{ {1,1,0,1,2,1,0,0, 17, 14} }, +{ {1,1,0,1,2,1,0,1, 8, 35} }, +{ {1,1,0,1,2,1,0,2, 18, 8} }, +{ {1,1,0,1,2,1,1,0, 16, 14} }, +{ {1,1,0,1,2,1,1,1, 7, 22} }, +{ {1,1,0,1,2,1,1,2, 16, 8} }, +{ {1,1,0,1,2,1,2,0, 18, 14} }, +{ {1,1,0,1,2,1,2,1, 8, 8} }, +{ {1,1,0,1,2,1,2,2, 17, 8} }, +{ {1,1,0,1,2,2,0,0, 41, 44} }, +{ {1,1,0,1,2,2,0,1, 37, 14} }, +{ {1,1,0,1,2,2,0,2, 43, 1} }, +{ {1,1,0,1,2,2,1,0, 40, 14} }, +{ {1,1,0,1,2,2,1,1, 34, 23} }, +{ {1,1,0,1,2,2,1,2, 26, 10} }, +{ {1,1,0,1,2,2,2,0, 42, 14} }, +{ {1,1,0,1,2,2,2,1, 28, 11} }, +{ {1,1,0,1,2,2,2,2, 10, 10} }, +{ {1,1,0,2,0,0,0,0, 8, 29} }, +{ {1,1,0,2,0,0,0,1, 23, 28} }, +{ {1,1,0,2,0,0,0,2, 37, 46} }, +{ {1,1,0,2,0,0,1,0, 27, 10} }, +{ {1,1,0,2,0,0,1,1, 45, 2} }, +{ {1,1,0,2,0,0,1,2, 47, 2} }, +{ {1,1,0,2,0,0,2,0, 40, 31} }, +{ {1,1,0,2,0,0,2,1, 48, 3} }, +{ {1,1,0,2,0,0,2,2, 29, 24} }, +{ {1,1,0,2,0,1,0,0, 17, 29} }, +{ {1,1,0,2,0,1,0,1, 28, 46} }, +{ {1,1,0,2,0,1,0,2, 41, 46} }, +{ {1,1,0,2,0,1,1,0, 38, 20} }, +{ {1,1,0,2,0,1,1,1, 35, 9} }, +{ {1,1,0,2,0,1,1,2, 40, 20} }, +{ {1,1,0,2,0,1,2,0, 39, 20} }, +{ {1,1,0,2,0,1,2,1, 36, 43} }, +{ {1,1,0,2,0,1,2,2, 42, 20} }, +{ {1,1,0,2,0,2,0,0, 18, 4} }, +{ {1,1,0,2,0,2,0,1, 31, 27} }, +{ {1,1,0,2,0,2,0,2, 43, 27} }, +{ {1,1,0,2,0,2,1,0, 50, 0} }, +{ {1,1,0,2,0,2,1,1, 49, 0} }, +{ {1,1,0,2,0,2,1,2, 31, 22} }, +{ {1,1,0,2,0,2,2,0, 51, 0} }, +{ {1,1,0,2,0,2,2,1, 50, 1} }, +{ {1,1,0,2,0,2,2,2, 18, 5} }, +{ {1,1,0,2,1,0,0,0, 28, 32} }, +{ {1,1,0,2,1,0,0,1, 27, 32} }, +{ {1,1,0,2,1,0,0,2, 29, 32} }, +{ {1,1,0,2,1,0,1,0, 23, 12} }, +{ {1,1,0,2,1,0,1,1, 21, 12} }, +{ {1,1,0,2,1,0,1,2, 24, 12} }, +{ {1,1,0,2,1,0,2,0, 31, 21} }, +{ {1,1,0,2,1,0,2,1, 30, 21} }, +{ {1,1,0,2,1,0,2,2, 32, 21} }, +{ {1,1,0,2,1,1,0,0, 10, 2} }, +{ {1,1,0,2,1,1,0,1, 8, 3} }, +{ {1,1,0,2,1,1,0,2, 11, 33} }, +{ {1,1,0,2,1,1,1,0, 6, 2} }, +{ {1,1,0,2,1,1,1,1, 3, 2} }, +{ {1,1,0,2,1,1,1,2, 8, 2} }, +{ {1,1,0,2,1,1,2,0, 12, 3} }, +{ {1,1,0,2,1,1,2,1, 6, 3} }, +{ {1,1,0,2,1,1,2,2, 10, 3} }, +{ {1,1,0,2,1,2,0,0, 42, 25} }, +{ {1,1,0,2,1,2,0,1, 40, 21} }, +{ {1,1,0,2,1,2,0,2, 41, 21} }, +{ {1,1,0,2,1,2,1,0, 36, 12} }, +{ {1,1,0,2,1,2,1,1, 35, 12} }, +{ {1,1,0,2,1,2,1,2, 28, 37} }, +{ {1,1,0,2,1,2,2,0, 39, 21} }, +{ {1,1,0,2,1,2,2,1, 38, 21} }, +{ {1,1,0,2,1,2,2,2, 17, 30} }, +{ {1,1,0,2,2,0,0,0, 24, 5} }, +{ {1,1,0,2,2,0,0,1, 53, 44} }, +{ {1,1,0,2,2,0,0,2, 47, 44} }, +{ {1,1,0,2,2,0,1,0, 53, 30} }, +{ {1,1,0,2,2,0,1,1, 52, 0} }, +{ {1,1,0,2,2,0,1,2, 53, 21} }, +{ {1,1,0,2,2,0,2,0, 47, 30} }, +{ {1,1,0,2,2,0,2,1, 53, 1} }, +{ {1,1,0,2,2,0,2,2, 24, 4} }, +{ {1,1,0,2,2,1,0,0, 32, 25} }, +{ {1,1,0,2,2,1,0,1, 24, 9} }, +{ {1,1,0,2,2,1,0,2, 29, 43} }, +{ {1,1,0,2,2,1,1,0, 30, 20} }, +{ {1,1,0,2,2,1,1,1, 21, 9} }, +{ {1,1,0,2,2,1,1,2, 27, 43} }, +{ {1,1,0,2,2,1,2,0, 31, 20} }, +{ {1,1,0,2,2,1,2,1, 23, 9} }, +{ {1,1,0,2,2,1,2,2, 28, 43} }, +{ {1,1,0,2,2,2,0,0, 29, 25} }, +{ {1,1,0,2,2,2,0,1, 47, 20} }, +{ {1,1,0,2,2,2,0,2, 37, 31} }, +{ {1,1,0,2,2,2,1,0, 48, 20} }, +{ {1,1,0,2,2,2,1,1, 45, 3} }, +{ {1,1,0,2,2,2,1,2, 23, 31} }, +{ {1,1,0,2,2,2,2,0, 40, 28} }, +{ {1,1,0,2,2,2,2,1, 27, 11} }, +{ {1,1,0,2,2,2,2,2, 8, 30} }, +{ {1,1,1,0,0,0,0,0, 5, 5} }, +{ {1,1,1,0,0,0,0,1, 25, 11} }, +{ {1,1,1,0,0,0,0,2, 26, 0} }, +{ {1,1,1,0,0,0,1,0, 22, 31} }, +{ {1,1,1,0,0,0,1,1, 20, 26} }, +{ {1,1,1,0,0,0,1,2, 23, 19} }, +{ {1,1,1,0,0,0,2,0, 28, 0} }, +{ {1,1,1,0,0,0,2,1, 27, 0} }, +{ {1,1,1,0,0,0,2,2, 29, 0} }, +{ {1,1,1,0,0,1,0,0, 22, 4} }, +{ {1,1,1,0,0,1,0,1, 20, 20} }, +{ {1,1,1,0,0,1,0,2, 23, 0} }, +{ {1,1,1,0,0,1,1,0, 20, 0} }, +{ {1,1,1,0,0,1,1,1, 19, 0} }, +{ {1,1,1,0,0,1,1,2, 21, 0} }, +{ {1,1,1,0,0,1,2,0, 23, 20} }, +{ {1,1,1,0,0,1,2,1, 21, 20} }, +{ {1,1,1,0,0,1,2,2, 24, 0} }, +{ {1,1,1,0,0,2,0,0, 28, 19} }, +{ {1,1,1,0,0,2,0,1, 27, 19} }, +{ {1,1,1,0,0,2,0,2, 29, 19} }, +{ {1,1,1,0,0,2,1,0, 23, 41} }, +{ {1,1,1,0,0,2,1,1, 21, 26} }, +{ {1,1,1,0,0,2,1,2, 24, 19} }, +{ {1,1,1,0,0,2,2,0, 31, 0} }, +{ {1,1,1,0,0,2,2,1, 30, 0} }, +{ {1,1,1,0,0,2,2,2, 32, 0} }, +{ {1,1,1,0,1,0,0,0, 14, 5} }, +{ {1,1,1,0,1,0,0,1, 13, 0} }, +{ {1,1,1,0,1,0,0,2, 15, 0} }, +{ {1,1,1,0,1,0,1,0, 5, 13} }, +{ {1,1,1,0,1,0,1,1, 4, 13} }, +{ {1,1,1,0,1,0,1,2, 6, 13} }, +{ {1,1,1,0,1,0,2,0, 17, 0} }, +{ {1,1,1,0,1,0,2,1, 16, 0} }, +{ {1,1,1,0,1,0,2,2, 18, 0} }, +{ {1,1,1,0,1,1,0,0, 5, 21} }, +{ {1,1,1,0,1,1,0,1, 4, 3} }, +{ {1,1,1,0,1,1,0,2, 6, 21} }, +{ {1,1,1,0,1,1,1,0, 2, 12} }, +{ {1,1,1,0,1,1,1,1, 1, 2} }, +{ {1,1,1,0,1,1,1,2, 3, 13} }, +{ {1,1,1,0,1,1,2,0, 8, 21} }, +{ {1,1,1,0,1,1,2,1, 7, 21} }, +{ {1,1,1,0,1,1,2,2, 8, 32} }, +{ {1,1,1,0,1,2,0,0, 17, 19} }, +{ {1,1,1,0,1,2,0,1, 16, 19} }, +{ {1,1,1,0,1,2,0,2, 18, 19} }, +{ {1,1,1,0,1,2,1,0, 8, 40} }, +{ {1,1,1,0,1,2,1,1, 7, 27} }, +{ {1,1,1,0,1,2,1,2, 8, 13} }, +{ {1,1,1,0,1,2,2,0, 18, 13} }, +{ {1,1,1,0,1,2,2,1, 16, 13} }, +{ {1,1,1,0,1,2,2,2, 17, 13} }, +{ {1,1,1,0,2,0,0,0, 17, 22} }, +{ {1,1,1,0,2,0,0,1, 38, 0} }, +{ {1,1,1,0,2,0,0,2, 39, 0} }, +{ {1,1,1,0,2,0,1,0, 28, 22} }, +{ {1,1,1,0,2,0,1,1, 35, 26} }, +{ {1,1,1,0,2,0,1,2, 36, 19} }, +{ {1,1,1,0,2,0,2,0, 41, 22} }, +{ {1,1,1,0,2,0,2,1, 40, 0} }, +{ {1,1,1,0,2,0,2,2, 42, 0} }, +{ {1,1,1,0,2,1,0,0, 28, 39} }, +{ {1,1,1,0,2,1,0,1, 35, 20} }, +{ {1,1,1,0,2,1,0,2, 36, 0} }, +{ {1,1,1,0,2,1,1,0, 34, 0} }, +{ {1,1,1,0,2,1,1,1, 33, 0} }, +{ {1,1,1,0,2,1,1,2, 35, 0} }, +{ {1,1,1,0,2,1,2,0, 37, 0} }, +{ {1,1,1,0,2,1,2,1, 34, 20} }, +{ {1,1,1,0,2,1,2,2, 28, 29} }, +{ {1,1,1,0,2,2,0,0, 41, 39} }, +{ {1,1,1,0,2,2,0,1, 40, 19} }, +{ {1,1,1,0,2,2,0,2, 42, 19} }, +{ {1,1,1,0,2,2,1,0, 37, 19} }, +{ {1,1,1,0,2,2,1,1, 34, 26} }, +{ {1,1,1,0,2,2,1,2, 28, 10} }, +{ {1,1,1,0,2,2,2,0, 43, 0} }, +{ {1,1,1,0,2,2,2,1, 26, 11} }, +{ {1,1,1,0,2,2,2,2, 10, 11} }, +{ {1,1,1,1,0,0,0,0, 9, 4} }, +{ {1,1,1,1,0,0,0,1, 5, 15} }, +{ {1,1,1,1,0,0,0,2, 10, 0} }, +{ {1,1,1,1,0,0,1,0, 5, 18} }, +{ {1,1,1,1,0,0,1,1, 2, 6} }, +{ {1,1,1,1,0,0,1,2, 8, 18} }, +{ {1,1,1,1,0,0,2,0, 10, 1} }, +{ {1,1,1,1,0,0,2,1, 8, 15} }, +{ {1,1,1,1,0,0,2,2, 11, 0} }, +{ {1,1,1,1,0,1,0,0, 5, 1} }, +{ {1,1,1,1,0,1,0,1, 2, 15} }, +{ {1,1,1,1,0,1,0,2, 8, 1} }, +{ {1,1,1,1,0,1,1,0, 4, 1} }, +{ {1,1,1,1,0,1,1,1, 1, 7} }, +{ {1,1,1,1,0,1,1,2, 7, 1} }, +{ {1,1,1,1,0,1,2,0, 6, 1} }, +{ {1,1,1,1,0,1,2,1, 3, 14} }, +{ {1,1,1,1,0,1,2,2, 8, 14} }, +{ {1,1,1,1,0,2,0,0, 10, 18} }, +{ {1,1,1,1,0,2,0,1, 8, 16} }, +{ {1,1,1,1,0,2,0,2, 11, 18} }, +{ {1,1,1,1,0,2,1,0, 6, 18} }, +{ {1,1,1,1,0,2,1,1, 3, 6} }, +{ {1,1,1,1,0,2,1,2, 8, 17} }, +{ {1,1,1,1,0,2,2,0, 12, 0} }, +{ {1,1,1,1,0,2,2,1, 6, 15} }, +{ {1,1,1,1,0,2,2,2, 10, 15} }, +{ {1,1,1,1,1,0,0,0, 5, 0} }, +{ {1,1,1,1,1,0,0,1, 4, 0} }, +{ {1,1,1,1,1,0,0,2, 6, 0} }, +{ {1,1,1,1,1,0,1,0, 2, 18} }, +{ {1,1,1,1,1,0,1,1, 1, 6} }, +{ {1,1,1,1,1,0,1,2, 3, 19} }, +{ {1,1,1,1,1,0,2,0, 8, 0} }, +{ {1,1,1,1,1,0,2,1, 7, 0} }, +{ {1,1,1,1,1,0,2,2, 8, 19} }, +{ {1,1,1,1,1,1,0,0, 2, 0} }, +{ {1,1,1,1,1,1,0,1, 1, 1} }, +{ {1,1,1,1,1,1,0,2, 3, 0} }, +{ {1,1,1,1,1,1,1,0, 1, 0} }, +{ {1,1,1,1,1,1,1,1, 0, 0} }, +{ {1,1,1,1,1,1,1,2, 1, 0} }, +{ {1,1,1,1,1,1,2,0, 3, 1} }, +{ {1,1,1,1,1,1,2,1, 1, 1} }, +{ {1,1,1,1,1,1,2,2, 2, 0} }, +{ {1,1,1,1,1,2,0,0, 8, 19} }, +{ {1,1,1,1,1,2,0,1, 7, 16} }, +{ {1,1,1,1,1,2,0,2, 8, 0} }, +{ {1,1,1,1,1,2,1,0, 3, 18} }, +{ {1,1,1,1,1,2,1,1, 1, 6} }, +{ {1,1,1,1,1,2,1,2, 2, 18} }, +{ {1,1,1,1,1,2,2,0, 6, 0} }, +{ {1,1,1,1,1,2,2,1, 4, 0} }, +{ {1,1,1,1,1,2,2,2, 5, 0} }, +{ {1,1,1,1,2,0,0,0, 10, 15} }, +{ {1,1,1,1,2,0,0,1, 6, 15} }, +{ {1,1,1,1,2,0,0,2, 12, 1} }, +{ {1,1,1,1,2,0,1,0, 8, 17} }, +{ {1,1,1,1,2,0,1,1, 3, 7} }, +{ {1,1,1,1,2,0,1,2, 6, 18} }, +{ {1,1,1,1,2,0,2,0, 11, 15} }, +{ {1,1,1,1,2,0,2,1, 8, 16} }, +{ {1,1,1,1,2,0,2,2, 10, 18} }, +{ {1,1,1,1,2,1,0,0, 8, 14} }, +{ {1,1,1,1,2,1,0,1, 3, 15} }, +{ {1,1,1,1,2,1,0,2, 6, 1} }, +{ {1,1,1,1,2,1,1,0, 7, 17} }, +{ {1,1,1,1,2,1,1,1, 1, 7} }, +{ {1,1,1,1,2,1,1,2, 4, 1} }, +{ {1,1,1,1,2,1,2,0, 8, 1} }, +{ {1,1,1,1,2,1,2,1, 2, 15} }, +{ {1,1,1,1,2,1,2,2, 5, 1} }, +{ {1,1,1,1,2,2,0,0, 11, 16} }, +{ {1,1,1,1,2,2,0,1, 8, 15} }, +{ {1,1,1,1,2,2,0,2, 10, 1} }, +{ {1,1,1,1,2,2,1,0, 8, 18} }, +{ {1,1,1,1,2,2,1,1, 2, 6} }, +{ {1,1,1,1,2,2,1,2, 5, 18} }, +{ {1,1,1,1,2,2,2,0, 10, 0} }, +{ {1,1,1,1,2,2,2,1, 5, 15} }, +{ {1,1,1,1,2,2,2,2, 9, 0} }, +{ {1,1,1,2,0,0,0,0, 10, 11} }, +{ {1,1,1,2,0,0,0,1, 26, 11} }, +{ {1,1,1,2,0,0,0,2, 43, 11} }, +{ {1,1,1,2,0,0,1,0, 28, 10} }, +{ {1,1,1,2,0,0,1,1, 34, 26} }, +{ {1,1,1,2,0,0,1,2, 37, 41} }, +{ {1,1,1,2,0,0,2,0, 42, 31} }, +{ {1,1,1,2,0,0,2,1, 40, 19} }, +{ {1,1,1,2,0,0,2,2, 41, 19} }, +{ {1,1,1,2,0,1,0,0, 28, 29} }, +{ {1,1,1,2,0,1,0,1, 34, 20} }, +{ {1,1,1,2,0,1,0,2, 37, 20} }, +{ {1,1,1,2,0,1,1,0, 35, 0} }, +{ {1,1,1,2,0,1,1,1, 33, 5} }, +{ {1,1,1,2,0,1,1,2, 34, 0} }, +{ {1,1,1,2,0,1,2,0, 36, 20} }, +{ {1,1,1,2,0,1,2,1, 35, 20} }, +{ {1,1,1,2,0,1,2,2, 28, 39} }, +{ {1,1,1,2,0,2,0,0, 42, 4} }, +{ {1,1,1,2,0,2,0,1, 40, 0} }, +{ {1,1,1,2,0,2,0,2, 41, 0} }, +{ {1,1,1,2,0,2,1,0, 36, 41} }, +{ {1,1,1,2,0,2,1,1, 35, 26} }, +{ {1,1,1,2,0,2,1,2, 28, 22} }, +{ {1,1,1,2,0,2,2,0, 39, 0} }, +{ {1,1,1,2,0,2,2,1, 38, 0} }, +{ {1,1,1,2,0,2,2,2, 17, 22} }, +{ {1,1,1,2,1,0,0,0, 17, 13} }, +{ {1,1,1,2,1,0,0,1, 16, 13} }, +{ {1,1,1,2,1,0,0,2, 18, 13} }, +{ {1,1,1,2,1,0,1,0, 8, 13} }, +{ {1,1,1,2,1,0,1,1, 7, 13} }, +{ {1,1,1,2,1,0,1,2, 8, 40} }, +{ {1,1,1,2,1,0,2,0, 18, 19} }, +{ {1,1,1,2,1,0,2,1, 16, 19} }, +{ {1,1,1,2,1,0,2,2, 17, 19} }, +{ {1,1,1,2,1,1,0,0, 8, 32} }, +{ {1,1,1,2,1,1,0,1, 7, 3} }, +{ {1,1,1,2,1,1,0,2, 8, 21} }, +{ {1,1,1,2,1,1,1,0, 3, 12} }, +{ {1,1,1,2,1,1,1,1, 1, 2} }, +{ {1,1,1,2,1,1,1,2, 2, 12} }, +{ {1,1,1,2,1,1,2,0, 6, 21} }, +{ {1,1,1,2,1,1,2,1, 4, 3} }, +{ {1,1,1,2,1,1,2,2, 5, 21} }, +{ {1,1,1,2,1,2,0,0, 18, 0} }, +{ {1,1,1,2,1,2,0,1, 16, 0} }, +{ {1,1,1,2,1,2,0,2, 17, 0} }, +{ {1,1,1,2,1,2,1,0, 6, 13} }, +{ {1,1,1,2,1,2,1,1, 4, 13} }, +{ {1,1,1,2,1,2,1,2, 5, 13} }, +{ {1,1,1,2,1,2,2,0, 15, 0} }, +{ {1,1,1,2,1,2,2,1, 13, 0} }, +{ {1,1,1,2,1,2,2,2, 14, 0} }, +{ {1,1,1,2,2,0,0,0, 32, 5} }, +{ {1,1,1,2,2,0,0,1, 30, 0} }, +{ {1,1,1,2,2,0,0,2, 31, 0} }, +{ {1,1,1,2,2,0,1,0, 24, 19} }, +{ {1,1,1,2,2,0,1,1, 21, 26} }, +{ {1,1,1,2,2,0,1,2, 23, 41} }, +{ {1,1,1,2,2,0,2,0, 29, 19} }, +{ {1,1,1,2,2,0,2,1, 27, 19} }, +{ {1,1,1,2,2,0,2,2, 28, 19} }, +{ {1,1,1,2,2,1,0,0, 24, 0} }, +{ {1,1,1,2,2,1,0,1, 21, 20} }, +{ {1,1,1,2,2,1,0,2, 23, 20} }, +{ {1,1,1,2,2,1,1,0, 21, 0} }, +{ {1,1,1,2,2,1,1,1, 19, 0} }, +{ {1,1,1,2,2,1,1,2, 20, 0} }, +{ {1,1,1,2,2,1,2,0, 23, 0} }, +{ {1,1,1,2,2,1,2,1, 20, 20} }, +{ {1,1,1,2,2,1,2,2, 22, 0} }, +{ {1,1,1,2,2,2,0,0, 29, 0} }, +{ {1,1,1,2,2,2,0,1, 27, 0} }, +{ {1,1,1,2,2,2,0,2, 28, 0} }, +{ {1,1,1,2,2,2,1,0, 23, 19} }, +{ {1,1,1,2,2,2,1,1, 20, 26} }, +{ {1,1,1,2,2,2,1,2, 22, 19} }, +{ {1,1,1,2,2,2,2,0, 26, 0} }, +{ {1,1,1,2,2,2,2,1, 25, 0} }, +{ {1,1,1,2,2,2,2,2, 5, 5} }, +{ {1,1,2,0,0,0,0,0, 8, 30} }, +{ {1,1,2,0,0,0,0,1, 27, 11} }, +{ {1,1,2,0,0,0,0,2, 40, 28} }, +{ {1,1,2,0,0,0,1,0, 23, 31} }, +{ {1,1,2,0,0,0,1,1, 45, 3} }, +{ {1,1,2,0,0,0,1,2, 48, 2} }, +{ {1,1,2,0,0,0,2,0, 37, 37} }, +{ {1,1,2,0,0,0,2,1, 47, 3} }, +{ {1,1,2,0,0,0,2,2, 29, 25} }, +{ {1,1,2,0,0,1,0,0, 28, 43} }, +{ {1,1,2,0,0,1,0,1, 23, 9} }, +{ {1,1,2,0,0,1,0,2, 31, 20} }, +{ {1,1,2,0,0,1,1,0, 27, 43} }, +{ {1,1,2,0,0,1,1,1, 21, 9} }, +{ {1,1,2,0,0,1,1,2, 30, 20} }, +{ {1,1,2,0,0,1,2,0, 29, 43} }, +{ {1,1,2,0,0,1,2,1, 24, 9} }, +{ {1,1,2,0,0,1,2,2, 32, 20} }, +{ {1,1,2,0,0,2,0,0, 24, 4} }, +{ {1,1,2,0,0,2,0,1, 53, 29} }, +{ {1,1,2,0,0,2,0,2, 47, 29} }, +{ {1,1,2,0,0,2,1,0, 53, 39} }, +{ {1,1,2,0,0,2,1,1, 52, 1} }, +{ {1,1,2,0,0,2,1,2, 53, 0} }, +{ {1,1,2,0,0,2,2,0, 47, 39} }, +{ {1,1,2,0,0,2,2,1, 53, 20} }, +{ {1,1,2,0,0,2,2,2, 24, 5} }, +{ {1,1,2,0,1,0,0,0, 17, 30} }, +{ {1,1,2,0,1,0,0,1, 38, 21} }, +{ {1,1,2,0,1,0,0,2, 39, 21} }, +{ {1,1,2,0,1,0,1,0, 28, 37} }, +{ {1,1,2,0,1,0,1,1, 35, 12} }, +{ {1,1,2,0,1,0,1,2, 36, 32} }, +{ {1,1,2,0,1,0,2,0, 41, 37} }, +{ {1,1,2,0,1,0,2,1, 40, 21} }, +{ {1,1,2,0,1,0,2,2, 42, 21} }, +{ {1,1,2,0,1,1,0,0, 10, 3} }, +{ {1,1,2,0,1,1,0,1, 6, 3} }, +{ {1,1,2,0,1,1,0,2, 12, 2} }, +{ {1,1,2,0,1,1,1,0, 8, 2} }, +{ {1,1,2,0,1,1,1,1, 3, 3} }, +{ {1,1,2,0,1,1,1,2, 6, 2} }, +{ {1,1,2,0,1,1,2,0, 11, 42} }, +{ {1,1,2,0,1,1,2,1, 8, 3} }, +{ {1,1,2,0,1,1,2,2, 10, 2} }, +{ {1,1,2,0,1,2,0,0, 32, 24} }, +{ {1,1,2,0,1,2,0,1, 30, 21} }, +{ {1,1,2,0,1,2,0,2, 31, 21} }, +{ {1,1,2,0,1,2,1,0, 24, 12} }, +{ {1,1,2,0,1,2,1,1, 21, 12} }, +{ {1,1,2,0,1,2,1,2, 23, 12} }, +{ {1,1,2,0,1,2,2,0, 29, 32} }, +{ {1,1,2,0,1,2,2,1, 27, 32} }, +{ {1,1,2,0,1,2,2,2, 28, 32} }, +{ {1,1,2,0,2,0,0,0, 18, 5} }, +{ {1,1,2,0,2,0,0,1, 50, 1} }, +{ {1,1,2,0,2,0,0,2, 51, 1} }, +{ {1,1,2,0,2,0,1,0, 31, 22} }, +{ {1,1,2,0,2,0,1,1, 49, 1} }, +{ {1,1,2,0,2,0,1,2, 50, 0} }, +{ {1,1,2,0,2,0,2,0, 43, 22} }, +{ {1,1,2,0,2,0,2,1, 31, 27} }, +{ {1,1,2,0,2,0,2,2, 18, 4} }, +{ {1,1,2,0,2,1,0,0, 42, 24} }, +{ {1,1,2,0,2,1,0,1, 36, 9} }, +{ {1,1,2,0,2,1,0,2, 39, 20} }, +{ {1,1,2,0,2,1,1,0, 40, 20} }, +{ {1,1,2,0,2,1,1,1, 35, 9} }, +{ {1,1,2,0,2,1,1,2, 38, 20} }, +{ {1,1,2,0,2,1,2,0, 41, 20} }, +{ {1,1,2,0,2,1,2,1, 28, 46} }, +{ {1,1,2,0,2,1,2,2, 17, 29} }, +{ {1,1,2,0,2,2,0,0, 29, 24} }, +{ {1,1,2,0,2,2,0,1, 48, 21} }, +{ {1,1,2,0,2,2,0,2, 40, 31} }, +{ {1,1,2,0,2,2,1,0, 47, 21} }, +{ {1,1,2,0,2,2,1,1, 45, 2} }, +{ {1,1,2,0,2,2,1,2, 27, 10} }, +{ {1,1,2,0,2,2,2,0, 37, 28} }, +{ {1,1,2,0,2,2,2,1, 23, 28} }, +{ {1,1,2,0,2,2,2,2, 8, 29} }, +{ {1,1,2,1,0,0,0,0, 10, 10} }, +{ {1,1,2,1,0,0,0,1, 28, 11} }, +{ {1,1,2,1,0,0,0,2, 42, 28} }, +{ {1,1,2,1,0,0,1,0, 26, 10} }, +{ {1,1,2,1,0,0,1,1, 34, 23} }, +{ {1,1,2,1,0,0,1,2, 40, 14} }, +{ {1,1,2,1,0,0,2,0, 43, 10} }, +{ {1,1,2,1,0,0,2,1, 37, 34} }, +{ {1,1,2,1,0,0,2,2, 41, 14} }, +{ {1,1,2,1,0,1,0,0, 17, 8} }, +{ {1,1,2,1,0,1,0,1, 8, 8} }, +{ {1,1,2,1,0,1,0,2, 18, 14} }, +{ {1,1,2,1,0,1,1,0, 16, 8} }, +{ {1,1,2,1,0,1,1,1, 7, 8} }, +{ {1,1,2,1,0,1,1,2, 16, 14} }, +{ {1,1,2,1,0,1,2,0, 18, 8} }, +{ {1,1,2,1,0,1,2,1, 8, 35} }, +{ {1,1,2,1,0,1,2,2, 17, 14} }, +{ {1,1,2,1,0,2,0,0, 32, 4} }, +{ {1,1,2,1,0,2,0,1, 24, 14} }, +{ {1,1,2,1,0,2,0,2, 29, 14} }, +{ {1,1,2,1,0,2,1,0, 30, 1} }, +{ {1,1,2,1,0,2,1,1, 21, 23} }, +{ {1,1,2,1,0,2,1,2, 27, 14} }, +{ {1,1,2,1,0,2,2,0, 31, 1} }, +{ {1,1,2,1,0,2,2,1, 23, 34} }, +{ {1,1,2,1,0,2,2,2, 28, 14} }, +{ {1,1,2,1,1,0,0,0, 28, 30} }, +{ {1,1,2,1,1,0,0,1, 35, 1} }, +{ {1,1,2,1,1,0,0,2, 36, 21} }, +{ {1,1,2,1,1,0,1,0, 34, 21} }, +{ {1,1,2,1,1,0,1,1, 33, 4} }, +{ {1,1,2,1,1,0,1,2, 35, 21} }, +{ {1,1,2,1,1,0,2,0, 37, 21} }, +{ {1,1,2,1,1,0,2,1, 34, 1} }, +{ {1,1,2,1,1,0,2,2, 28, 44} }, +{ {1,1,2,1,1,1,0,0, 8, 43} }, +{ {1,1,2,1,1,1,0,1, 3, 9} }, +{ {1,1,2,1,1,1,0,2, 6, 20} }, +{ {1,1,2,1,1,1,1,0, 7, 2} }, +{ {1,1,2,1,1,1,1,1, 1, 3} }, +{ {1,1,2,1,1,1,1,2, 4, 2} }, +{ {1,1,2,1,1,1,2,0, 8, 20} }, +{ {1,1,2,1,1,1,2,1, 2, 9} }, +{ {1,1,2,1,1,1,2,2, 5, 20} }, +{ {1,1,2,1,1,2,0,0, 24, 1} }, +{ {1,1,2,1,1,2,0,1, 21, 1} }, +{ {1,1,2,1,1,2,0,2, 23, 1} }, +{ {1,1,2,1,1,2,1,0, 21, 21} }, +{ {1,1,2,1,1,2,1,1, 19, 1} }, +{ {1,1,2,1,1,2,1,2, 20, 21} }, +{ {1,1,2,1,1,2,2,0, 23, 21} }, +{ {1,1,2,1,1,2,2,1, 20, 1} }, +{ {1,1,2,1,1,2,2,2, 22, 1} }, +{ {1,1,2,1,2,0,0,0, 42, 5} }, +{ {1,1,2,1,2,0,0,1, 36, 34} }, +{ {1,1,2,1,2,0,0,2, 39, 1} }, +{ {1,1,2,1,2,0,1,0, 40, 1} }, +{ {1,1,2,1,2,0,1,1, 35, 23} }, +{ {1,1,2,1,2,0,1,2, 38, 1} }, +{ {1,1,2,1,2,0,2,0, 41, 1} }, +{ {1,1,2,1,2,0,2,1, 28, 27} }, +{ {1,1,2,1,2,0,2,2, 17, 27} }, +{ {1,1,2,1,2,1,0,0, 18, 1} }, +{ {1,1,2,1,2,1,0,1, 6, 8} }, +{ {1,1,2,1,2,1,0,2, 15, 1} }, +{ {1,1,2,1,2,1,1,0, 16, 1} }, +{ {1,1,2,1,2,1,1,1, 4, 8} }, +{ {1,1,2,1,2,1,1,2, 13, 1} }, +{ {1,1,2,1,2,1,2,0, 17, 1} }, +{ {1,1,2,1,2,1,2,1, 5, 8} }, +{ {1,1,2,1,2,1,2,2, 14, 1} }, +{ {1,1,2,1,2,2,0,0, 29, 1} }, +{ {1,1,2,1,2,2,0,1, 23, 14} }, +{ {1,1,2,1,2,2,0,2, 26, 1} }, +{ {1,1,2,1,2,2,1,0, 27, 1} }, +{ {1,1,2,1,2,2,1,1, 20, 23} }, +{ {1,1,2,1,2,2,1,2, 25, 1} }, +{ {1,1,2,1,2,2,2,0, 28, 1} }, +{ {1,1,2,1,2,2,2,1, 22, 14} }, +{ {1,1,2,1,2,2,2,2, 5, 4} }, +{ {1,1,2,2,0,0,0,0, 11, 10} }, +{ {1,1,2,2,0,0,0,1, 29, 11} }, +{ {1,1,2,2,0,0,0,2, 41, 28} }, +{ {1,1,2,2,0,0,1,0, 29, 10} }, +{ {1,1,2,2,0,0,1,1, 46, 2} }, +{ {1,1,2,2,0,0,1,2, 29, 7} }, +{ {1,1,2,2,0,0,2,0, 41, 31} }, +{ {1,1,2,2,0,0,2,1, 29, 6} }, +{ {1,1,2,2,0,0,2,2, 11, 24} }, +{ {1,1,2,2,0,1,0,0, 41, 29} }, +{ {1,1,2,2,0,1,0,1, 37, 43} }, +{ {1,1,2,2,0,1,0,2, 43, 20} }, +{ {1,1,2,2,0,1,1,0, 40, 43} }, +{ {1,1,2,2,0,1,1,1, 34, 9} }, +{ {1,1,2,2,0,1,1,2, 26, 7} }, +{ {1,1,2,2,0,1,2,0, 42, 43} }, +{ {1,1,2,2,0,1,2,1, 28, 6} }, +{ {1,1,2,2,0,1,2,2, 10, 7} }, +{ {1,1,2,2,0,2,0,0, 29, 4} }, +{ {1,1,2,2,0,2,0,1, 47, 1} }, +{ {1,1,2,2,0,2,0,2, 37, 38} }, +{ {1,1,2,2,0,2,1,0, 48, 1} }, +{ {1,1,2,2,0,2,1,1, 45, 7} }, +{ {1,1,2,2,0,2,1,2, 23, 38} }, +{ {1,1,2,2,0,2,2,0, 40, 45} }, +{ {1,1,2,2,0,2,2,1, 27, 6} }, +{ {1,1,2,2,0,2,2,2, 8, 39} }, +{ {1,1,2,2,1,0,0,0, 41, 30} }, +{ {1,1,2,2,1,0,0,1, 40, 32} }, +{ {1,1,2,2,1,0,0,2, 42, 32} }, +{ {1,1,2,2,1,0,1,0, 37, 32} }, +{ {1,1,2,2,1,0,1,1, 34, 12} }, +{ {1,1,2,2,1,0,1,2, 28, 7} }, +{ {1,1,2,2,1,0,2,0, 43, 21} }, +{ {1,1,2,2,1,0,2,1, 26, 6} }, +{ {1,1,2,2,1,0,2,2, 10, 6} }, +{ {1,1,2,2,1,1,0,0, 11, 2} }, +{ {1,1,2,2,1,1,0,1, 8, 42} }, +{ {1,1,2,2,1,1,0,2, 10, 20} }, +{ {1,1,2,2,1,1,1,0, 8, 33} }, +{ {1,1,2,2,1,1,1,1, 2, 2} }, +{ {1,1,2,2,1,1,1,2, 5, 2} }, +{ {1,1,2,2,1,1,2,0, 10, 21} }, +{ {1,1,2,2,1,1,2,1, 5, 3} }, +{ {1,1,2,2,1,1,2,2, 9, 2} }, +{ {1,1,2,2,1,2,0,0, 29, 21} }, +{ {1,1,2,2,1,2,0,1, 27, 21} }, +{ {1,1,2,2,1,2,0,2, 28, 21} }, +{ {1,1,2,2,1,2,1,0, 23, 32} }, +{ {1,1,2,2,1,2,1,1, 20, 12} }, +{ {1,1,2,2,1,2,1,2, 22, 12} }, +{ {1,1,2,2,1,2,2,0, 26, 21} }, +{ {1,1,2,2,1,2,2,1, 25, 21} }, +{ {1,1,2,2,1,2,2,2, 5, 24} }, +{ {1,1,2,2,2,0,0,0, 29, 5} }, +{ {1,1,2,2,2,0,0,1, 48, 0} }, +{ {1,1,2,2,2,0,0,2, 40, 38} }, +{ {1,1,2,2,2,0,1,0, 47, 0} }, +{ {1,1,2,2,2,0,1,1, 45, 6} }, +{ {1,1,2,2,2,0,1,2, 27, 7} }, +{ {1,1,2,2,2,0,2,0, 37, 45} }, +{ {1,1,2,2,2,0,2,1, 23, 45} }, +{ {1,1,2,2,2,0,2,2, 8, 44} }, +{ {1,1,2,2,2,1,0,0, 29, 20} }, +{ {1,1,2,2,2,1,0,1, 23, 43} }, +{ {1,1,2,2,2,1,0,2, 26, 20} }, +{ {1,1,2,2,2,1,1,0, 27, 20} }, +{ {1,1,2,2,2,1,1,1, 20, 9} }, +{ {1,1,2,2,2,1,1,2, 25, 20} }, +{ {1,1,2,2,2,1,2,0, 28, 20} }, +{ {1,1,2,2,2,1,2,1, 22, 9} }, +{ {1,1,2,2,2,1,2,2, 5, 25} }, +{ {1,1,2,2,2,2,0,0, 46, 4} }, +{ {1,1,2,2,2,2,0,1, 45, 1} }, +{ {1,1,2,2,2,2,0,2, 34, 22} }, +{ {1,1,2,2,2,2,1,0, 45, 0} }, +{ {1,1,2,2,2,2,1,1, 44, 0} }, +{ {1,1,2,2,2,2,1,2, 20, 22} }, +{ {1,1,2,2,2,2,2,0, 34, 27} }, +{ {1,1,2,2,2,2,2,1, 20, 27} }, +{ {1,1,2,2,2,2,2,2, 2, 4} }, +{ {1,2,0,0,0,0,0,0, 3, 4} }, +{ {1,2,0,0,0,0,0,1, 21, 27} }, +{ {1,2,0,0,0,0,0,2, 35, 27} }, +{ {1,2,0,0,0,0,1,0, 35, 22} }, +{ {1,2,0,0,0,0,1,1, 45, 4} }, +{ {1,2,0,0,0,0,1,2, 49, 6} }, +{ {1,2,0,0,0,0,2,0, 21, 22} }, +{ {1,2,0,0,0,0,2,1, 52, 7} }, +{ {1,2,0,0,0,0,2,2, 45, 5} }, +{ {1,2,0,0,0,1,0,0, 6, 25} }, +{ {1,2,0,0,0,1,0,1, 23, 27} }, +{ {1,2,0,0,0,1,0,2, 36, 27} }, +{ {1,2,0,0,0,1,1,0, 38, 7} }, +{ {1,2,0,0,0,1,1,1, 27, 5} }, +{ {1,2,0,0,0,1,1,2, 50, 6} }, +{ {1,2,0,0,0,1,2,0, 30, 7} }, +{ {1,2,0,0,0,1,2,1, 53, 17} }, +{ {1,2,0,0,0,1,2,2, 48, 7} }, +{ {1,2,0,0,0,2,0,0, 8, 25} }, +{ {1,2,0,0,0,2,0,1, 24, 27} }, +{ {1,2,0,0,0,2,0,2, 28, 36} }, +{ {1,2,0,0,0,2,1,0, 40, 7} }, +{ {1,2,0,0,0,2,1,1, 47, 6} }, +{ {1,2,0,0,0,2,1,2, 31, 9} }, +{ {1,2,0,0,0,2,2,0, 27, 38} }, +{ {1,2,0,0,0,2,2,1, 53, 6} }, +{ {1,2,0,0,0,2,2,2, 23, 30} }, +{ {1,2,0,0,1,0,0,0, 8, 24} }, +{ {1,2,0,0,1,0,0,1, 27, 45} }, +{ {1,2,0,0,1,0,0,2, 40, 6} }, +{ {1,2,0,0,1,0,1,0, 28, 47} }, +{ {1,2,0,0,1,0,1,1, 23, 29} }, +{ {1,2,0,0,1,0,1,2, 31, 12} }, +{ {1,2,0,0,1,0,2,0, 24, 22} }, +{ {1,2,0,0,1,0,2,1, 53, 7} }, +{ {1,2,0,0,1,0,2,2, 47, 7} }, +{ {1,2,0,0,1,1,0,0, 10, 25} }, +{ {1,2,0,0,1,1,0,1, 28, 45} }, +{ {1,2,0,0,1,1,0,2, 42, 6} }, +{ {1,2,0,0,1,1,1,0, 17, 28} }, +{ {1,2,0,0,1,1,1,1, 8, 28} }, +{ {1,2,0,0,1,1,1,2, 18, 2} }, +{ {1,2,0,0,1,1,2,0, 32, 7} }, +{ {1,2,0,0,1,1,2,1, 24, 2} }, +{ {1,2,0,0,1,1,2,2, 29, 2} }, +{ {1,2,0,0,1,2,0,0, 11, 44} }, +{ {1,2,0,0,1,2,0,1, 29, 45} }, +{ {1,2,0,0,1,2,0,2, 41, 6} }, +{ {1,2,0,0,1,2,1,0, 41, 7} }, +{ {1,2,0,0,1,2,1,1, 37, 47} }, +{ {1,2,0,0,1,2,1,2, 43, 12} }, +{ {1,2,0,0,1,2,2,0, 29, 38} }, +{ {1,2,0,0,1,2,2,1, 47, 33} }, +{ {1,2,0,0,1,2,2,2, 37, 36} }, +{ {1,2,0,0,2,0,0,0, 6, 24} }, +{ {1,2,0,0,2,0,0,1, 30, 6} }, +{ {1,2,0,0,2,0,0,2, 38, 6} }, +{ {1,2,0,0,2,0,1,0, 36, 38} }, +{ {1,2,0,0,2,0,1,1, 48, 6} }, +{ {1,2,0,0,2,0,1,2, 50, 7} }, +{ {1,2,0,0,2,0,2,0, 23, 22} }, +{ {1,2,0,0,2,0,2,1, 53, 16} }, +{ {1,2,0,0,2,0,2,2, 27, 4} }, +{ {1,2,0,0,2,1,0,0, 12, 6} }, +{ {1,2,0,0,2,1,0,1, 31, 6} }, +{ {1,2,0,0,2,1,0,2, 39, 6} }, +{ {1,2,0,0,2,1,1,0, 39, 7} }, +{ {1,2,0,0,2,1,1,1, 40, 30} }, +{ {1,2,0,0,2,1,1,2, 51, 6} }, +{ {1,2,0,0,2,1,2,0, 31, 7} }, +{ {1,2,0,0,2,1,2,1, 47, 31} }, +{ {1,2,0,0,2,1,2,2, 40, 29} }, +{ {1,2,0,0,2,2,0,0, 10, 24} }, +{ {1,2,0,0,2,2,0,1, 32, 6} }, +{ {1,2,0,0,2,2,0,2, 17, 31} }, +{ {1,2,0,0,2,2,1,0, 42, 7} }, +{ {1,2,0,0,2,2,1,1, 29, 3} }, +{ {1,2,0,0,2,2,1,2, 18, 3} }, +{ {1,2,0,0,2,2,2,0, 28, 38} }, +{ {1,2,0,0,2,2,2,1, 24, 3} }, +{ {1,2,0,0,2,2,2,2, 8, 31} }, +{ {1,2,0,1,0,0,0,0, 6, 4} }, +{ {1,2,0,1,0,0,0,1, 23, 46} }, +{ {1,2,0,1,0,0,0,2, 36, 46} }, +{ {1,2,0,1,0,0,1,0, 38, 10} }, +{ {1,2,0,1,0,0,1,1, 27, 24} }, +{ {1,2,0,1,0,0,1,2, 50, 2} }, +{ {1,2,0,1,0,0,2,0, 30, 10} }, +{ {1,2,0,1,0,0,2,1, 53, 2} }, +{ {1,2,0,1,0,0,2,2, 48, 10} }, +{ {1,2,0,1,0,1,0,0, 15, 4} }, +{ {1,2,0,1,0,1,0,1, 26, 27} }, +{ {1,2,0,1,0,1,0,2, 39, 27} }, +{ {1,2,0,1,0,1,1,0, 55, 4} }, +{ {1,2,0,1,0,1,1,1, 16, 5} }, +{ {1,2,0,1,0,1,1,2, 56, 12} }, +{ {1,2,0,1,0,1,2,0, 57, 4} }, +{ {1,2,0,1,0,1,2,1, 30, 22} }, +{ {1,2,0,1,0,1,2,2, 50, 5} }, +{ {1,2,0,1,0,2,0,0, 18, 27} }, +{ {1,2,0,1,0,2,0,1, 29, 27} }, +{ {1,2,0,1,0,2,0,2, 42, 27} }, +{ {1,2,0,1,0,2,1,0, 51, 9} }, +{ {1,2,0,1,0,2,1,1, 40, 24} }, +{ {1,2,0,1,0,2,1,2, 39, 9} }, +{ {1,2,0,1,0,2,2,0, 50, 9} }, +{ {1,2,0,1,0,2,2,1, 48, 22} }, +{ {1,2,0,1,0,2,2,2, 36, 30} }, +{ {1,2,0,1,1,0,0,0, 23, 25} }, +{ {1,2,0,1,1,0,0,1, 45, 27} }, +{ {1,2,0,1,1,0,0,2, 48, 26} }, +{ {1,2,0,1,1,0,1,0, 27, 47} }, +{ {1,2,0,1,1,0,1,1, 21, 4} }, +{ {1,2,0,1,1,0,1,2, 30, 12} }, +{ {1,2,0,1,1,0,2,0, 53, 37} }, +{ {1,2,0,1,1,0,2,1, 52, 13} }, +{ {1,2,0,1,1,0,2,2, 53, 32} }, +{ {1,2,0,1,1,1,0,0, 26, 25} }, +{ {1,2,0,1,1,1,0,1, 34, 10} }, +{ {1,2,0,1,1,1,0,2, 40, 2} }, +{ {1,2,0,1,1,1,1,0, 16, 28} }, +{ {1,2,0,1,1,1,1,1, 7, 5} }, +{ {1,2,0,1,1,1,1,2, 16, 2} }, +{ {1,2,0,1,1,1,2,0, 30, 2} }, +{ {1,2,0,1,1,1,2,1, 21, 10} }, +{ {1,2,0,1,1,1,2,2, 27, 2} }, +{ {1,2,0,1,1,2,0,0, 29, 44} }, +{ {1,2,0,1,1,2,0,1, 46, 27} }, +{ {1,2,0,1,1,2,0,2, 29, 9} }, +{ {1,2,0,1,1,2,1,0, 40, 47} }, +{ {1,2,0,1,1,2,1,1, 34, 4} }, +{ {1,2,0,1,1,2,1,2, 26, 9} }, +{ {1,2,0,1,1,2,2,0, 48, 33} }, +{ {1,2,0,1,1,2,2,1, 45, 9} }, +{ {1,2,0,1,1,2,2,2, 23, 36} }, +{ {1,2,0,1,2,0,0,0, 36, 25} }, +{ {1,2,0,1,2,0,0,1, 48, 45} }, +{ {1,2,0,1,2,0,0,2, 50, 27} }, +{ {1,2,0,1,2,0,1,0, 50, 30} }, +{ {1,2,0,1,2,0,1,1, 30, 24} }, +{ {1,2,0,1,2,0,1,2, 57, 6} }, +{ {1,2,0,1,2,0,2,0, 48, 31} }, +{ {1,2,0,1,2,0,2,1, 53, 23} }, +{ {1,2,0,1,2,0,2,2, 30, 4} }, +{ {1,2,0,1,2,1,0,0, 39, 25} }, +{ {1,2,0,1,2,1,0,1, 40, 37} }, +{ {1,2,0,1,2,1,0,2, 51, 26} }, +{ {1,2,0,1,2,1,1,0, 56, 6} }, +{ {1,2,0,1,2,1,1,1, 16, 30} }, +{ {1,2,0,1,2,1,1,2, 55, 3} }, +{ {1,2,0,1,2,1,2,0, 50, 28} }, +{ {1,2,0,1,2,1,2,1, 27, 37} }, +{ {1,2,0,1,2,1,2,2, 38, 4} }, +{ {1,2,0,1,2,2,0,0, 42, 44} }, +{ {1,2,0,1,2,2,0,1, 29, 42} }, +{ {1,2,0,1,2,2,0,2, 18, 9} }, +{ {1,2,0,1,2,2,1,0, 39, 3} }, +{ {1,2,0,1,2,2,1,1, 26, 3} }, +{ {1,2,0,1,2,2,1,2, 15, 3} }, +{ {1,2,0,1,2,2,2,0, 36, 11} }, +{ {1,2,0,1,2,2,2,1, 23, 3} }, +{ {1,2,0,1,2,2,2,2, 6, 10} }, +{ {1,2,0,2,0,0,0,0, 8, 4} }, +{ {1,2,0,2,0,0,0,1, 24, 28} }, +{ {1,2,0,2,0,0,0,2, 28, 23} }, +{ {1,2,0,2,0,0,1,0, 40, 10} }, +{ {1,2,0,2,0,0,1,1, 47, 11} }, +{ {1,2,0,2,0,0,1,2, 31, 23} }, +{ {1,2,0,2,0,0,2,0, 27, 31} }, +{ {1,2,0,2,0,0,2,1, 53, 11} }, +{ {1,2,0,2,0,0,2,2, 23, 39} }, +{ {1,2,0,2,0,1,0,0, 18, 29} }, +{ {1,2,0,2,0,1,0,1, 29, 46} }, +{ {1,2,0,2,0,1,0,2, 42, 46} }, +{ {1,2,0,2,0,1,1,0, 51, 15} }, +{ {1,2,0,2,0,1,1,1, 40, 5} }, +{ {1,2,0,2,0,1,1,2, 39, 23} }, +{ {1,2,0,2,0,1,2,0, 50, 15} }, +{ {1,2,0,2,0,1,2,1, 48, 37} }, +{ {1,2,0,2,0,1,2,2, 36, 39} }, +{ {1,2,0,2,0,2,0,0, 17, 4} }, +{ {1,2,0,2,0,2,0,1, 32, 27} }, +{ {1,2,0,2,0,2,0,2, 10, 22} }, +{ {1,2,0,2,0,2,1,0, 39, 8} }, +{ {1,2,0,2,0,2,1,1, 31, 8} }, +{ {1,2,0,2,0,2,1,2, 12, 9} }, +{ {1,2,0,2,0,2,2,0, 38, 8} }, +{ {1,2,0,2,0,2,2,1, 30, 8} }, +{ {1,2,0,2,0,2,2,2, 6, 22} }, +{ {1,2,0,2,1,0,0,0, 37, 5} }, +{ {1,2,0,2,1,0,0,1, 47, 27} }, +{ {1,2,0,2,1,0,0,2, 29, 23} }, +{ {1,2,0,2,1,0,1,0, 29, 47} }, +{ {1,2,0,2,1,0,1,1, 24, 29} }, +{ {1,2,0,2,1,0,1,2, 32, 12} }, +{ {1,2,0,2,1,0,2,0, 47, 37} }, +{ {1,2,0,2,1,0,2,1, 53, 12} }, +{ {1,2,0,2,1,0,2,2, 24, 23} }, +{ {1,2,0,2,1,1,0,0, 43, 25} }, +{ {1,2,0,2,1,1,0,1, 37, 10} }, +{ {1,2,0,2,1,1,0,2, 41, 2} }, +{ {1,2,0,2,1,1,1,0, 18, 28} }, +{ {1,2,0,2,1,1,1,1, 8, 11} }, +{ {1,2,0,2,1,1,1,2, 17, 2} }, +{ {1,2,0,2,1,1,2,0, 31, 2} }, +{ {1,2,0,2,1,1,2,1, 23, 10} }, +{ {1,2,0,2,1,1,2,2, 28, 2} }, +{ {1,2,0,2,1,2,0,0, 41, 25} }, +{ {1,2,0,2,1,2,0,1, 29, 8} }, +{ {1,2,0,2,1,2,0,2, 11, 22} }, +{ {1,2,0,2,1,2,1,0, 42, 47} }, +{ {1,2,0,2,1,2,1,1, 28, 8} }, +{ {1,2,0,2,1,2,1,2, 10, 9} }, +{ {1,2,0,2,1,2,2,0, 40, 35} }, +{ {1,2,0,2,1,2,2,1, 27, 8} }, +{ {1,2,0,2,1,2,2,2, 8, 37} }, +{ {1,2,0,2,2,0,0,0, 23, 5} }, +{ {1,2,0,2,2,0,0,1, 53, 27} }, +{ {1,2,0,2,2,0,0,2, 27, 23} }, +{ {1,2,0,2,2,0,1,0, 48, 36} }, +{ {1,2,0,2,2,0,1,1, 53, 4} }, +{ {1,2,0,2,2,0,1,2, 30, 23} }, +{ {1,2,0,2,2,0,2,0, 45, 30} }, +{ {1,2,0,2,2,0,2,1, 52, 15} }, +{ {1,2,0,2,2,0,2,2, 21, 24} }, +{ {1,2,0,2,2,1,0,0, 31, 25} }, +{ {1,2,0,2,2,1,0,1, 47, 36} }, +{ {1,2,0,2,2,1,0,2, 40, 34} }, +{ {1,2,0,2,2,1,1,0, 50, 14} }, +{ {1,2,0,2,2,1,1,1, 27, 30} }, +{ {1,2,0,2,2,1,1,2, 38, 23} }, +{ {1,2,0,2,2,1,2,0, 49, 15} }, +{ {1,2,0,2,2,1,2,1, 45, 31} }, +{ {1,2,0,2,2,1,2,2, 35, 24} }, +{ {1,2,0,2,2,2,0,0, 28, 25} }, +{ {1,2,0,2,2,2,0,1, 24, 8} }, +{ {1,2,0,2,2,2,0,2, 8, 36} }, +{ {1,2,0,2,2,2,1,0, 36, 8} }, +{ {1,2,0,2,2,2,1,1, 23, 42} }, +{ {1,2,0,2,2,2,1,2, 6, 9} }, +{ {1,2,0,2,2,2,2,0, 35, 3} }, +{ {1,2,0,2,2,2,2,1, 21, 3} }, +{ {1,2,0,2,2,2,2,2, 3, 30} }, +{ {1,2,1,0,0,0,0,0, 8, 5} }, +{ {1,2,1,0,0,0,0,1, 27, 28} }, +{ {1,2,1,0,0,0,0,2, 40, 11} }, +{ {1,2,1,0,0,0,1,0, 28, 26} }, +{ {1,2,1,0,0,0,1,1, 23, 44} }, +{ {1,2,1,0,0,0,1,2, 31, 26} }, +{ {1,2,1,0,0,0,2,0, 24, 31} }, +{ {1,2,1,0,0,0,2,1, 53, 10} }, +{ {1,2,1,0,0,0,2,2, 47, 10} }, +{ {1,2,1,0,0,1,0,0, 23, 4} }, +{ {1,2,1,0,0,1,0,1, 45, 29} }, +{ {1,2,1,0,0,1,0,2, 48, 47} }, +{ {1,2,1,0,0,1,1,0, 27, 26} }, +{ {1,2,1,0,0,1,1,1, 21, 25} }, +{ {1,2,1,0,0,1,1,2, 30, 26} }, +{ {1,2,1,0,0,1,2,0, 53, 22} }, +{ {1,2,1,0,0,1,2,1, 52, 18} }, +{ {1,2,1,0,0,1,2,2, 53, 19} }, +{ {1,2,1,0,0,2,0,0, 37, 24} }, +{ {1,2,1,0,0,2,0,1, 47, 46} }, +{ {1,2,1,0,0,2,0,2, 29, 36} }, +{ {1,2,1,0,0,2,1,0, 29, 26} }, +{ {1,2,1,0,0,2,1,1, 24, 26} }, +{ {1,2,1,0,0,2,1,2, 32, 26} }, +{ {1,2,1,0,0,2,2,0, 47, 22} }, +{ {1,2,1,0,0,2,2,1, 53, 41} }, +{ {1,2,1,0,0,2,2,2, 24, 30} }, +{ {1,2,1,0,1,0,0,0, 17, 5} }, +{ {1,2,1,0,1,0,0,1, 38, 13} }, +{ {1,2,1,0,1,0,0,2, 39, 13} }, +{ {1,2,1,0,1,0,1,0, 10, 27} }, +{ {1,2,1,0,1,0,1,1, 6, 27} }, +{ {1,2,1,0,1,0,1,2, 12, 12} }, +{ {1,2,1,0,1,0,2,0, 32, 22} }, +{ {1,2,1,0,1,0,2,1, 30, 13} }, +{ {1,2,1,0,1,0,2,2, 31, 13} }, +{ {1,2,1,0,1,1,0,0, 28, 24} }, +{ {1,2,1,0,1,1,0,1, 35, 2} }, +{ {1,2,1,0,1,1,0,2, 36, 13} }, +{ {1,2,1,0,1,1,1,0, 8, 47} }, +{ {1,2,1,0,1,1,1,1, 3, 29} }, +{ {1,2,1,0,1,1,1,2, 6, 12} }, +{ {1,2,1,0,1,1,2,0, 24, 13} }, +{ {1,2,1,0,1,1,2,1, 21, 2} }, +{ {1,2,1,0,1,1,2,2, 23, 33} }, +{ {1,2,1,0,1,2,0,0, 41, 24} }, +{ {1,2,1,0,1,2,0,1, 40, 40} }, +{ {1,2,1,0,1,2,0,2, 42, 40} }, +{ {1,2,1,0,1,2,1,0, 11, 27} }, +{ {1,2,1,0,1,2,1,1, 8, 46} }, +{ {1,2,1,0,1,2,1,2, 10, 12} }, +{ {1,2,1,0,1,2,2,0, 29, 13} }, +{ {1,2,1,0,1,2,2,1, 27, 13} }, +{ {1,2,1,0,1,2,2,2, 28, 13} }, +{ {1,2,1,0,2,0,0,0, 18, 30} }, +{ {1,2,1,0,2,0,0,1, 50, 18} }, +{ {1,2,1,0,2,0,0,2, 51, 18} }, +{ {1,2,1,0,2,0,1,0, 42, 37} }, +{ {1,2,1,0,2,0,1,1, 36, 44} }, +{ {1,2,1,0,2,0,1,2, 39, 26} }, +{ {1,2,1,0,2,0,2,0, 29, 37} }, +{ {1,2,1,0,2,0,2,1, 48, 40} }, +{ {1,2,1,0,2,0,2,2, 40, 4} }, +{ {1,2,1,0,2,1,0,0, 31, 24} }, +{ {1,2,1,0,2,1,0,1, 49, 18} }, +{ {1,2,1,0,2,1,0,2, 50, 19} }, +{ {1,2,1,0,2,1,1,0, 40, 41} }, +{ {1,2,1,0,2,1,1,1, 35, 25} }, +{ {1,2,1,0,2,1,1,2, 38, 26} }, +{ {1,2,1,0,2,1,2,0, 47, 40} }, +{ {1,2,1,0,2,1,2,1, 45, 28} }, +{ {1,2,1,0,2,1,2,2, 27, 29} }, +{ {1,2,1,0,2,2,0,0, 43, 24} }, +{ {1,2,1,0,2,2,0,1, 31, 3} }, +{ {1,2,1,0,2,2,0,2, 18, 31} }, +{ {1,2,1,0,2,2,1,0, 41, 41} }, +{ {1,2,1,0,2,2,1,1, 28, 3} }, +{ {1,2,1,0,2,2,1,2, 17, 3} }, +{ {1,2,1,0,2,2,2,0, 37, 11} }, +{ {1,2,1,0,2,2,2,1, 23, 11} }, +{ {1,2,1,0,2,2,2,2, 8, 10} }, +{ {1,2,1,1,0,0,0,0, 10, 4} }, +{ {1,2,1,1,0,0,0,1, 28, 28} }, +{ {1,2,1,1,0,0,0,2, 42, 11} }, +{ {1,2,1,1,0,0,1,0, 17, 26} }, +{ {1,2,1,1,0,0,1,1, 8, 45} }, +{ {1,2,1,1,0,0,1,2, 18, 6} }, +{ {1,2,1,1,0,0,2,0, 32, 10} }, +{ {1,2,1,1,0,0,2,1, 24, 7} }, +{ {1,2,1,1,0,0,2,2, 29, 17} }, +{ {1,2,1,1,0,1,0,0, 26, 4} }, +{ {1,2,1,1,0,1,0,1, 34, 7} }, +{ {1,2,1,1,0,1,0,2, 40, 17} }, +{ {1,2,1,1,0,1,1,0, 16, 26} }, +{ {1,2,1,1,0,1,1,1, 7, 24} }, +{ {1,2,1,1,0,1,1,2, 16, 6} }, +{ {1,2,1,1,0,1,2,0, 30, 18} }, +{ {1,2,1,1,0,1,2,1, 21, 7} }, +{ {1,2,1,1,0,1,2,2, 27, 17} }, +{ {1,2,1,1,0,2,0,0, 43, 4} }, +{ {1,2,1,1,0,2,0,1, 37, 7} }, +{ {1,2,1,1,0,2,0,2, 41, 17} }, +{ {1,2,1,1,0,2,1,0, 18, 26} }, +{ {1,2,1,1,0,2,1,1, 8, 6} }, +{ {1,2,1,1,0,2,1,2, 17, 6} }, +{ {1,2,1,1,0,2,2,0, 31, 18} }, +{ {1,2,1,1,0,2,2,1, 23, 7} }, +{ {1,2,1,1,0,2,2,2, 28, 17} }, +{ {1,2,1,1,1,0,0,0, 28, 5} }, +{ {1,2,1,1,1,0,0,1, 35, 18} }, +{ {1,2,1,1,1,0,0,2, 36, 40} }, +{ {1,2,1,1,1,0,1,0, 8, 26} }, +{ {1,2,1,1,1,0,1,1, 3, 27} }, +{ {1,2,1,1,1,0,1,2, 6, 26} }, +{ {1,2,1,1,1,0,2,0, 24, 18} }, +{ {1,2,1,1,1,0,2,1, 21, 18} }, +{ {1,2,1,1,1,0,2,2, 23, 18} }, +{ {1,2,1,1,1,1,0,0, 34, 13} }, +{ {1,2,1,1,1,1,0,1, 33, 7} }, +{ {1,2,1,1,1,1,0,2, 35, 13} }, +{ {1,2,1,1,1,1,1,0, 7, 26} }, +{ {1,2,1,1,1,1,1,1, 1, 4} }, +{ {1,2,1,1,1,1,1,2, 4, 12} }, +{ {1,2,1,1,1,1,2,0, 21, 13} }, +{ {1,2,1,1,1,1,2,1, 19, 7} }, +{ {1,2,1,1,1,1,2,2, 20, 13} }, +{ {1,2,1,1,1,2,0,0, 37, 40} }, +{ {1,2,1,1,1,2,0,1, 34, 18} }, +{ {1,2,1,1,1,2,0,2, 28, 9} }, +{ {1,2,1,1,1,2,1,0, 8, 41} }, +{ {1,2,1,1,1,2,1,1, 2, 27} }, +{ {1,2,1,1,1,2,1,2, 5, 26} }, +{ {1,2,1,1,1,2,2,0, 23, 40} }, +{ {1,2,1,1,1,2,2,1, 20, 18} }, +{ {1,2,1,1,1,2,2,2, 22, 18} }, +{ {1,2,1,1,2,0,0,0, 42, 30} }, +{ {1,2,1,1,2,0,0,1, 36, 7} }, +{ {1,2,1,1,2,0,0,2, 39, 18} }, +{ {1,2,1,1,2,0,1,0, 18, 18} }, +{ {1,2,1,1,2,0,1,1, 6, 6} }, +{ {1,2,1,1,2,0,1,2, 15, 6} }, +{ {1,2,1,1,2,0,2,0, 29, 18} }, +{ {1,2,1,1,2,0,2,1, 23, 17} }, +{ {1,2,1,1,2,0,2,2, 26, 18} }, +{ {1,2,1,1,2,1,0,0, 40, 18} }, +{ {1,2,1,1,2,1,0,1, 35, 7} }, +{ {1,2,1,1,2,1,0,2, 38, 18} }, +{ {1,2,1,1,2,1,1,0, 16, 18} }, +{ {1,2,1,1,2,1,1,1, 4, 6} }, +{ {1,2,1,1,2,1,1,2, 13, 6} }, +{ {1,2,1,1,2,1,2,0, 27, 18} }, +{ {1,2,1,1,2,1,2,1, 20, 7} }, +{ {1,2,1,1,2,1,2,2, 25, 18} }, +{ {1,2,1,1,2,2,0,0, 41, 18} }, +{ {1,2,1,1,2,2,0,1, 28, 42} }, +{ {1,2,1,1,2,2,0,2, 17, 9} }, +{ {1,2,1,1,2,2,1,0, 17, 18} }, +{ {1,2,1,1,2,2,1,1, 5, 6} }, +{ {1,2,1,1,2,2,1,2, 14, 6} }, +{ {1,2,1,1,2,2,2,0, 28, 18} }, +{ {1,2,1,1,2,2,2,1, 22, 7} }, +{ {1,2,1,1,2,2,2,2, 5, 10} }, +{ {1,2,1,2,0,0,0,0, 11, 28} }, +{ {1,2,1,2,0,0,0,1, 29, 28} }, +{ {1,2,1,2,0,0,0,2, 41, 11} }, +{ {1,2,1,2,0,0,1,0, 41, 10} }, +{ {1,2,1,2,0,0,1,1, 37, 26} }, +{ {1,2,1,2,0,0,1,2, 43, 26} }, +{ {1,2,1,2,0,0,2,0, 29, 31} }, +{ {1,2,1,2,0,0,2,1, 47, 18} }, +{ {1,2,1,2,0,0,2,2, 37, 23} }, +{ {1,2,1,2,0,1,0,0, 29, 29} }, +{ {1,2,1,2,0,1,0,1, 46, 28} }, +{ {1,2,1,2,0,1,0,2, 29, 34} }, +{ {1,2,1,2,0,1,1,0, 40, 26} }, +{ {1,2,1,2,0,1,1,1, 34, 25} }, +{ {1,2,1,2,0,1,1,2, 26, 23} }, +{ {1,2,1,2,0,1,2,0, 48, 18} }, +{ {1,2,1,2,0,1,2,1, 45, 15} }, +{ {1,2,1,2,0,1,2,2, 23, 23} }, +{ {1,2,1,2,0,2,0,0, 41, 4} }, +{ {1,2,1,2,0,2,0,1, 29, 35} }, +{ {1,2,1,2,0,2,0,2, 11, 37} }, +{ {1,2,1,2,0,2,1,0, 42, 26} }, +{ {1,2,1,2,0,2,1,1, 28, 35} }, +{ {1,2,1,2,0,2,1,2, 10, 23} }, +{ {1,2,1,2,0,2,2,0, 40, 8} }, +{ {1,2,1,2,0,2,2,1, 27, 35} }, +{ {1,2,1,2,0,2,2,2, 8, 22} }, +{ {1,2,1,2,1,0,0,0, 41, 5} }, +{ {1,2,1,2,1,0,0,1, 40, 13} }, +{ {1,2,1,2,1,0,0,2, 42, 13} }, +{ {1,2,1,2,1,0,1,0, 11, 46} }, +{ {1,2,1,2,1,0,1,1, 8, 27} }, +{ {1,2,1,2,1,0,1,2, 10, 26} }, +{ {1,2,1,2,1,0,2,0, 29, 40} }, +{ {1,2,1,2,1,0,2,1, 27, 40} }, +{ {1,2,1,2,1,0,2,2, 28, 40} }, +{ {1,2,1,2,1,1,0,0, 37, 13} }, +{ {1,2,1,2,1,1,0,1, 34, 2} }, +{ {1,2,1,2,1,1,0,2, 28, 34} }, +{ {1,2,1,2,1,1,1,0, 8, 12} }, +{ {1,2,1,2,1,1,1,1, 2, 28} }, +{ {1,2,1,2,1,1,1,2, 5, 12} }, +{ {1,2,1,2,1,1,2,0, 23, 13} }, +{ {1,2,1,2,1,1,2,1, 20, 2} }, +{ {1,2,1,2,1,1,2,2, 22, 13} }, +{ {1,2,1,2,1,2,0,0, 43, 13} }, +{ {1,2,1,2,1,2,0,1, 26, 8} }, +{ {1,2,1,2,1,2,0,2, 10, 8} }, +{ {1,2,1,2,1,2,1,0, 10, 13} }, +{ {1,2,1,2,1,2,1,1, 5, 27} }, +{ {1,2,1,2,1,2,1,2, 9, 12} }, +{ {1,2,1,2,1,2,2,0, 26, 13} }, +{ {1,2,1,2,1,2,2,1, 25, 13} }, +{ {1,2,1,2,1,2,2,2, 5, 22} }, +{ {1,2,1,2,2,0,0,0, 29, 30} }, +{ {1,2,1,2,2,0,0,1, 48, 19} }, +{ {1,2,1,2,2,0,0,2, 40, 23} }, +{ {1,2,1,2,2,0,1,0, 29, 41} }, +{ {1,2,1,2,2,0,1,1, 23, 26} }, +{ {1,2,1,2,2,0,1,2, 26, 26} }, +{ {1,2,1,2,2,0,2,0, 46, 31} }, +{ {1,2,1,2,2,0,2,1, 45, 18} }, +{ {1,2,1,2,2,0,2,2, 34, 24} }, +{ {1,2,1,2,2,1,0,0, 47, 19} }, +{ {1,2,1,2,2,1,0,1, 45, 14} }, +{ {1,2,1,2,2,1,0,2, 27, 34} }, +{ {1,2,1,2,2,1,1,0, 27, 41} }, +{ {1,2,1,2,2,1,1,1, 20, 25} }, +{ {1,2,1,2,2,1,1,2, 25, 26} }, +{ {1,2,1,2,2,1,2,0, 45, 19} }, +{ {1,2,1,2,2,1,2,1, 44, 18} }, +{ {1,2,1,2,2,1,2,2, 20, 24} }, +{ {1,2,1,2,2,2,0,0, 37, 8} }, +{ {1,2,1,2,2,2,0,1, 23, 8} }, +{ {1,2,1,2,2,2,0,2, 8, 9} }, +{ {1,2,1,2,2,2,1,0, 28, 41} }, +{ {1,2,1,2,2,2,1,1, 22, 26} }, +{ {1,2,1,2,2,2,1,2, 5, 9} }, +{ {1,2,1,2,2,2,2,0, 34, 3} }, +{ {1,2,1,2,2,2,2,1, 20, 3} }, +{ {1,2,1,2,2,2,2,2, 2, 31} }, +{ {1,2,2,0,0,0,0,0, 6, 5} }, +{ {1,2,2,0,0,0,0,1, 30, 11} }, +{ {1,2,2,0,0,0,0,2, 38, 11} }, +{ {1,2,2,0,0,0,1,0, 36, 31} }, +{ {1,2,2,0,0,0,1,1, 48, 11} }, +{ {1,2,2,0,0,0,1,2, 50, 3} }, +{ {1,2,2,0,0,0,2,0, 23, 37} }, +{ {1,2,2,0,0,0,2,1, 53, 3} }, +{ {1,2,2,0,0,0,2,2, 27, 25} }, +{ {1,2,2,0,0,1,0,0, 36, 4} }, +{ {1,2,2,0,0,1,0,1, 48, 28} }, +{ {1,2,2,0,0,1,0,2, 50, 29} }, +{ {1,2,2,0,0,1,1,0, 50, 22} }, +{ {1,2,2,0,0,1,1,1, 30, 5} }, +{ {1,2,2,0,0,1,1,2, 57, 2} }, +{ {1,2,2,0,0,1,2,0, 48, 38} }, +{ {1,2,2,0,0,1,2,1, 53, 36} }, +{ {1,2,2,0,0,1,2,2, 30, 25} }, +{ {1,2,2,0,0,2,0,0, 23, 24} }, +{ {1,2,2,0,0,2,0,1, 53, 46} }, +{ {1,2,2,0,0,2,0,2, 27, 36} }, +{ {1,2,2,0,0,2,1,0, 48, 23} }, +{ {1,2,2,0,0,2,1,1, 53, 25} }, +{ {1,2,2,0,0,2,1,2, 30, 9} }, +{ {1,2,2,0,0,2,2,0, 45, 22} }, +{ {1,2,2,0,0,2,2,1, 52, 8} }, +{ {1,2,2,0,0,2,2,2, 21, 5} }, +{ {1,2,2,0,1,0,0,0, 18, 22} }, +{ {1,2,2,0,1,0,0,1, 50, 12} }, +{ {1,2,2,0,1,0,0,2, 51, 12} }, +{ {1,2,2,0,1,0,1,0, 42, 22} }, +{ {1,2,2,0,1,0,1,1, 36, 29} }, +{ {1,2,2,0,1,0,1,2, 39, 12} }, +{ {1,2,2,0,1,0,2,0, 29, 22} }, +{ {1,2,2,0,1,0,2,1, 48, 13} }, +{ {1,2,2,0,1,0,2,2, 40, 25} }, +{ {1,2,2,0,1,1,0,0, 42, 39} }, +{ {1,2,2,0,1,1,0,1, 36, 10} }, +{ {1,2,2,0,1,1,0,2, 39, 2} }, +{ {1,2,2,0,1,1,1,0, 18, 12} }, +{ {1,2,2,0,1,1,1,1, 6, 11} }, +{ {1,2,2,0,1,1,1,2, 15, 2} }, +{ {1,2,2,0,1,1,2,0, 29, 33} }, +{ {1,2,2,0,1,1,2,1, 23, 2} }, +{ {1,2,2,0,1,1,2,2, 26, 2} }, +{ {1,2,2,0,1,2,0,0, 29, 39} }, +{ {1,2,2,0,1,2,0,1, 48, 32} }, +{ {1,2,2,0,1,2,0,2, 40, 36} }, +{ {1,2,2,0,1,2,1,0, 29, 12} }, +{ {1,2,2,0,1,2,1,1, 23, 47} }, +{ {1,2,2,0,1,2,1,2, 26, 12} }, +{ {1,2,2,0,1,2,2,0, 46, 22} }, +{ {1,2,2,0,1,2,2,1, 45, 12} }, +{ {1,2,2,0,1,2,2,2, 34, 5} }, +{ {1,2,2,0,2,0,0,0, 15, 5} }, +{ {1,2,2,0,2,0,0,1, 57, 5} }, +{ {1,2,2,0,2,0,0,2, 55, 5} }, +{ {1,2,2,0,2,0,1,0, 39, 22} }, +{ {1,2,2,0,2,0,1,1, 50, 4} }, +{ {1,2,2,0,2,0,1,2, 56, 9} }, +{ {1,2,2,0,2,0,2,0, 26, 22} }, +{ {1,2,2,0,2,0,2,1, 30, 27} }, +{ {1,2,2,0,2,0,2,2, 16, 4} }, +{ {1,2,2,0,2,1,0,0, 39, 24} }, +{ {1,2,2,0,2,1,0,1, 50, 31} }, +{ {1,2,2,0,2,1,0,2, 56, 7} }, +{ {1,2,2,0,2,1,1,0, 51, 22} }, +{ {1,2,2,0,2,1,1,1, 38, 5} }, +{ {1,2,2,0,2,1,1,2, 55, 2} }, +{ {1,2,2,0,2,1,2,0, 40, 46} }, +{ {1,2,2,0,2,1,2,1, 27, 46} }, +{ {1,2,2,0,2,1,2,2, 16, 29} }, +{ {1,2,2,0,2,2,0,0, 26, 24} }, +{ {1,2,2,0,2,2,0,1, 30, 3} }, +{ {1,2,2,0,2,2,0,2, 16, 31} }, +{ {1,2,2,0,2,2,1,0, 40, 3} }, +{ {1,2,2,0,2,2,1,1, 27, 3} }, +{ {1,2,2,0,2,2,1,2, 16, 3} }, +{ {1,2,2,0,2,2,2,0, 34, 11} }, +{ {1,2,2,0,2,2,2,1, 21, 11} }, +{ {1,2,2,0,2,2,2,2, 7, 4} }, +{ {1,2,2,1,0,0,0,0, 12, 5} }, +{ {1,2,2,1,0,0,0,1, 31, 11} }, +{ {1,2,2,1,0,0,0,2, 39, 11} }, +{ {1,2,2,1,0,0,1,0, 39, 10} }, +{ {1,2,2,1,0,0,1,1, 40, 39} }, +{ {1,2,2,1,0,0,1,2, 51, 2} }, +{ {1,2,2,1,0,0,2,0, 31, 10} }, +{ {1,2,2,1,0,0,2,1, 47, 38} }, +{ {1,2,2,1,0,0,2,2, 40, 44} }, +{ {1,2,2,1,0,1,0,0, 39, 4} }, +{ {1,2,2,1,0,1,0,1, 40, 22} }, +{ {1,2,2,1,0,1,0,2, 51, 28} }, +{ {1,2,2,1,0,1,1,0, 56, 5} }, +{ {1,2,2,1,0,1,1,1, 16, 22} }, +{ {1,2,2,1,0,1,1,2, 55, 7} }, +{ {1,2,2,1,0,1,2,0, 50, 26} }, +{ {1,2,2,1,0,1,2,1, 27, 22} }, +{ {1,2,2,1,0,1,2,2, 38, 25} }, +{ {1,2,2,1,0,2,0,0, 31, 4} }, +{ {1,2,2,1,0,2,0,1, 47, 23} }, +{ {1,2,2,1,0,2,0,2, 40, 9} }, +{ {1,2,2,1,0,2,1,0, 50, 8} }, +{ {1,2,2,1,0,2,1,1, 27, 39} }, +{ {1,2,2,1,0,2,1,2, 38, 9} }, +{ {1,2,2,1,0,2,2,0, 49, 9} }, +{ {1,2,2,1,0,2,2,1, 45, 23} }, +{ {1,2,2,1,0,2,2,2, 35, 5} }, +{ {1,2,2,1,1,0,0,0, 31, 5} }, +{ {1,2,2,1,1,0,0,1, 49, 12} }, +{ {1,2,2,1,1,0,0,2, 50, 13} }, +{ {1,2,2,1,1,0,1,0, 40, 12} }, +{ {1,2,2,1,1,0,1,1, 35, 4} }, +{ {1,2,2,1,1,0,1,2, 38, 12} }, +{ {1,2,2,1,1,0,2,0, 47, 13} }, +{ {1,2,2,1,1,0,2,1, 45, 26} }, +{ {1,2,2,1,1,0,2,2, 27, 44} }, +{ {1,2,2,1,1,1,0,0, 40, 33} }, +{ {1,2,2,1,1,1,0,1, 35, 10} }, +{ {1,2,2,1,1,1,0,2, 38, 2} }, +{ {1,2,2,1,1,1,1,0, 16, 12} }, +{ {1,2,2,1,1,1,1,1, 4, 5} }, +{ {1,2,2,1,1,1,1,2, 13, 2} }, +{ {1,2,2,1,1,1,2,0, 27, 33} }, +{ {1,2,2,1,1,1,2,1, 20, 10} }, +{ {1,2,2,1,1,1,2,2, 25, 2} }, +{ {1,2,2,1,1,2,0,0, 47, 32} }, +{ {1,2,2,1,1,2,0,1, 45, 8} }, +{ {1,2,2,1,1,2,0,2, 27, 9} }, +{ {1,2,2,1,1,2,1,0, 27, 12} }, +{ {1,2,2,1,1,2,1,1, 20, 4} }, +{ {1,2,2,1,1,2,1,2, 25, 12} }, +{ {1,2,2,1,1,2,2,0, 45, 13} }, +{ {1,2,2,1,1,2,2,1, 44, 12} }, +{ {1,2,2,1,1,2,2,2, 20, 5} }, +{ {1,2,2,1,2,0,0,0, 39, 5} }, +{ {1,2,2,1,2,0,0,1, 50, 23} }, +{ {1,2,2,1,2,0,0,2, 56, 4} }, +{ {1,2,2,1,2,0,1,0, 51, 30} }, +{ {1,2,2,1,2,0,1,1, 38, 24} }, +{ {1,2,2,1,2,0,1,2, 55, 6} }, +{ {1,2,2,1,2,0,2,0, 40, 27} }, +{ {1,2,2,1,2,0,2,1, 27, 27} }, +{ {1,2,2,1,2,0,2,2, 16, 27} }, +{ {1,2,2,1,2,1,0,0, 51, 5} }, +{ {1,2,2,1,2,1,0,1, 38, 22} }, +{ {1,2,2,1,2,1,0,2, 55, 1} }, +{ {1,2,2,1,2,1,1,0, 55, 0} }, +{ {1,2,2,1,2,1,1,1, 13, 5} }, +{ {1,2,2,1,2,1,1,2, 54, 0} }, +{ {1,2,2,1,2,1,2,0, 38, 27} }, +{ {1,2,2,1,2,1,2,1, 25, 22} }, +{ {1,2,2,1,2,1,2,2, 13, 4} }, +{ {1,2,2,1,2,2,0,0, 40, 42} }, +{ {1,2,2,1,2,2,0,1, 27, 42} }, +{ {1,2,2,1,2,2,0,2, 16, 9} }, +{ {1,2,2,1,2,2,1,0, 38, 3} }, +{ {1,2,2,1,2,2,1,1, 25, 24} }, +{ {1,2,2,1,2,2,1,2, 13, 3} }, +{ {1,2,2,1,2,2,2,0, 35, 11} }, +{ {1,2,2,1,2,2,2,1, 20, 11} }, +{ {1,2,2,1,2,2,2,2, 4, 4} }, +{ {1,2,2,2,0,0,0,0, 10, 5} }, +{ {1,2,2,2,0,0,0,1, 32, 11} }, +{ {1,2,2,2,0,0,0,2, 17, 23} }, +{ {1,2,2,2,0,0,1,0, 42, 10} }, +{ {1,2,2,2,0,0,1,1, 29, 16} }, +{ {1,2,2,2,0,0,1,2, 18, 7} }, +{ {1,2,2,2,0,0,2,0, 28, 31} }, +{ {1,2,2,2,0,0,2,1, 24, 6} }, +{ {1,2,2,2,0,0,2,2, 8, 38} }, +{ {1,2,2,2,0,1,0,0, 42, 29} }, +{ {1,2,2,2,0,1,0,1, 29, 15} }, +{ {1,2,2,2,0,1,0,2, 18, 15} }, +{ {1,2,2,2,0,1,1,0, 39, 15} }, +{ {1,2,2,2,0,1,1,1, 26, 15} }, +{ {1,2,2,2,0,1,1,2, 15, 7} }, +{ {1,2,2,2,0,1,2,0, 36, 6} }, +{ {1,2,2,2,0,1,2,1, 23, 16} }, +{ {1,2,2,2,0,1,2,2, 6, 7} }, +{ {1,2,2,2,0,2,0,0, 28, 4} }, +{ {1,2,2,2,0,2,0,1, 24, 15} }, +{ {1,2,2,2,0,2,0,2, 8, 23} }, +{ {1,2,2,2,0,2,1,0, 36, 35} }, +{ {1,2,2,2,0,2,1,1, 23, 15} }, +{ {1,2,2,2,0,2,1,2, 6, 23} }, +{ {1,2,2,2,0,2,2,0, 35, 15} }, +{ {1,2,2,2,0,2,2,1, 21, 15} }, +{ {1,2,2,2,0,2,2,2, 3, 22} }, +{ {1,2,2,2,1,0,0,0, 43, 5} }, +{ {1,2,2,2,1,0,0,1, 31, 15} }, +{ {1,2,2,2,1,0,0,2, 18, 23} }, +{ {1,2,2,2,1,0,1,0, 41, 12} }, +{ {1,2,2,2,1,0,1,1, 28, 16} }, +{ {1,2,2,2,1,0,1,2, 17, 7} }, +{ {1,2,2,2,1,0,2,0, 37, 6} }, +{ {1,2,2,2,1,0,2,1, 23, 6} }, +{ {1,2,2,2,1,0,2,2, 8, 7} }, +{ {1,2,2,2,1,1,0,0, 41, 33} }, +{ {1,2,2,2,1,1,0,1, 28, 15} }, +{ {1,2,2,2,1,1,0,2, 17, 15} }, +{ {1,2,2,2,1,1,1,0, 17, 12} }, +{ {1,2,2,2,1,1,1,1, 5, 11} }, +{ {1,2,2,2,1,1,1,2, 14, 2} }, +{ {1,2,2,2,1,1,2,0, 28, 33} }, +{ {1,2,2,2,1,1,2,1, 22, 2} }, +{ {1,2,2,2,1,1,2,2, 5, 7} }, +{ {1,2,2,2,1,2,0,0, 37, 35} }, +{ {1,2,2,2,1,2,0,1, 23, 35} }, +{ {1,2,2,2,1,2,0,2, 8, 34} }, +{ {1,2,2,2,1,2,1,0, 28, 12} }, +{ {1,2,2,2,1,2,1,1, 22, 29} }, +{ {1,2,2,2,1,2,1,2, 5, 23} }, +{ {1,2,2,2,1,2,2,0, 34, 15} }, +{ {1,2,2,2,1,2,2,1, 20, 15} }, +{ {1,2,2,2,1,2,2,2, 2, 22} }, +{ {1,2,2,2,2,0,0,0, 26, 5} }, +{ {1,2,2,2,2,0,0,1, 30, 15} }, +{ {1,2,2,2,2,0,0,2, 16, 23} }, +{ {1,2,2,2,2,0,1,0, 40, 16} }, +{ {1,2,2,2,2,0,1,1, 27, 16} }, +{ {1,2,2,2,2,0,1,2, 16, 7} }, +{ {1,2,2,2,2,0,2,0, 34, 6} }, +{ {1,2,2,2,2,0,2,1, 21, 6} }, +{ {1,2,2,2,2,0,2,2, 7, 25} }, +{ {1,2,2,2,2,1,0,0, 40, 15} }, +{ {1,2,2,2,2,1,0,1, 27, 15} }, +{ {1,2,2,2,2,1,0,2, 16, 15} }, +{ {1,2,2,2,2,1,1,0, 38, 15} }, +{ {1,2,2,2,2,1,1,1, 25, 5} }, +{ {1,2,2,2,2,1,1,2, 13, 7} }, +{ {1,2,2,2,2,1,2,0, 35, 6} }, +{ {1,2,2,2,2,1,2,1, 20, 6} }, +{ {1,2,2,2,2,1,2,2, 4, 7} }, +{ {1,2,2,2,2,2,0,0, 34, 8} }, +{ {1,2,2,2,2,2,0,1, 21, 8} }, +{ {1,2,2,2,2,2,0,2, 7, 23} }, +{ {1,2,2,2,2,2,1,0, 35, 8} }, +{ {1,2,2,2,2,2,1,1, 20, 8} }, +{ {1,2,2,2,2,2,1,2, 4, 9} }, +{ {1,2,2,2,2,2,2,0, 33, 6} }, +{ {1,2,2,2,2,2,2,1, 19, 6} }, +{ {1,2,2,2,2,2,2,2, 1, 5} }, +{ {2,0,0,0,0,0,0,0, 1, 5} }, +{ {2,0,0,0,0,0,0,1, 33, 6} }, +{ {2,0,0,0,0,0,0,2, 19, 6} }, +{ {2,0,0,0,0,0,1,0, 7, 23} }, +{ {2,0,0,0,0,0,1,1, 34, 8} }, +{ {2,0,0,0,0,0,1,2, 21, 8} }, +{ {2,0,0,0,0,0,2,0, 4, 9} }, +{ {2,0,0,0,0,0,2,1, 35, 8} }, +{ {2,0,0,0,0,0,2,2, 20, 8} }, +{ {2,0,0,0,0,1,0,0, 7, 25} }, +{ {2,0,0,0,0,1,0,1, 34, 6} }, +{ {2,0,0,0,0,1,0,2, 21, 6} }, +{ {2,0,0,0,0,1,1,0, 16, 23} }, +{ {2,0,0,0,0,1,1,1, 26, 5} }, +{ {2,0,0,0,0,1,1,2, 30, 15} }, +{ {2,0,0,0,0,1,2,0, 16, 7} }, +{ {2,0,0,0,0,1,2,1, 40, 16} }, +{ {2,0,0,0,0,1,2,2, 27, 16} }, +{ {2,0,0,0,0,2,0,0, 4, 7} }, +{ {2,0,0,0,0,2,0,1, 35, 6} }, +{ {2,0,0,0,0,2,0,2, 20, 6} }, +{ {2,0,0,0,0,2,1,0, 16, 15} }, +{ {2,0,0,0,0,2,1,1, 40, 15} }, +{ {2,0,0,0,0,2,1,2, 27, 15} }, +{ {2,0,0,0,0,2,2,0, 13, 7} }, +{ {2,0,0,0,0,2,2,1, 38, 15} }, +{ {2,0,0,0,0,2,2,2, 25, 15} }, +{ {2,0,0,0,1,0,0,0, 3, 22} }, +{ {2,0,0,0,1,0,0,1, 35, 15} }, +{ {2,0,0,0,1,0,0,2, 21, 15} }, +{ {2,0,0,0,1,0,1,0, 8, 23} }, +{ {2,0,0,0,1,0,1,1, 28, 4} }, +{ {2,0,0,0,1,0,1,2, 24, 15} }, +{ {2,0,0,0,1,0,2,0, 6, 23} }, +{ {2,0,0,0,1,0,2,1, 36, 35} }, +{ {2,0,0,0,1,0,2,2, 23, 15} }, +{ {2,0,0,0,1,1,0,0, 8, 38} }, +{ {2,0,0,0,1,1,0,1, 28, 31} }, +{ {2,0,0,0,1,1,0,2, 24, 6} }, +{ {2,0,0,0,1,1,1,0, 17, 23} }, +{ {2,0,0,0,1,1,1,1, 10, 5} }, +{ {2,0,0,0,1,1,1,2, 32, 15} }, +{ {2,0,0,0,1,1,2,0, 18, 7} }, +{ {2,0,0,0,1,1,2,1, 42, 16} }, +{ {2,0,0,0,1,1,2,2, 29, 16} }, +{ {2,0,0,0,1,2,0,0, 6, 7} }, +{ {2,0,0,0,1,2,0,1, 36, 6} }, +{ {2,0,0,0,1,2,0,2, 23, 16} }, +{ {2,0,0,0,1,2,1,0, 18, 15} }, +{ {2,0,0,0,1,2,1,1, 42, 15} }, +{ {2,0,0,0,1,2,1,2, 29, 15} }, +{ {2,0,0,0,1,2,2,0, 15, 7} }, +{ {2,0,0,0,1,2,2,1, 39, 15} }, +{ {2,0,0,0,1,2,2,2, 26, 15} }, +{ {2,0,0,0,2,0,0,0, 2, 22} }, +{ {2,0,0,0,2,0,0,1, 34, 15} }, +{ {2,0,0,0,2,0,0,2, 20, 15} }, +{ {2,0,0,0,2,0,1,0, 8, 34} }, +{ {2,0,0,0,2,0,1,1, 37, 35} }, +{ {2,0,0,0,2,0,1,2, 23, 35} }, +{ {2,0,0,0,2,0,2,0, 5, 23} }, +{ {2,0,0,0,2,0,2,1, 28, 12} }, +{ {2,0,0,0,2,0,2,2, 22, 15} }, +{ {2,0,0,0,2,1,0,0, 8, 7} }, +{ {2,0,0,0,2,1,0,1, 37, 6} }, +{ {2,0,0,0,2,1,0,2, 23, 6} }, +{ {2,0,0,0,2,1,1,0, 18, 23} }, +{ {2,0,0,0,2,1,1,1, 43, 15} }, +{ {2,0,0,0,2,1,1,2, 31, 15} }, +{ {2,0,0,0,2,1,2,0, 17, 7} }, +{ {2,0,0,0,2,1,2,1, 41, 16} }, +{ {2,0,0,0,2,1,2,2, 28, 16} }, +{ {2,0,0,0,2,2,0,0, 5, 7} }, +{ {2,0,0,0,2,2,0,1, 28, 33} }, +{ {2,0,0,0,2,2,0,2, 22, 6} }, +{ {2,0,0,0,2,2,1,0, 17, 15} }, +{ {2,0,0,0,2,2,1,1, 41, 15} }, +{ {2,0,0,0,2,2,1,2, 28, 15} }, +{ {2,0,0,0,2,2,2,0, 14, 7} }, +{ {2,0,0,0,2,2,2,1, 17, 12} }, +{ {2,0,0,0,2,2,2,2, 5, 11} }, +{ {2,0,0,1,0,0,0,0, 7, 4} }, +{ {2,0,0,1,0,0,0,1, 34, 11} }, +{ {2,0,0,1,0,0,0,2, 21, 11} }, +{ {2,0,0,1,0,0,1,0, 16, 31} }, +{ {2,0,0,1,0,0,1,1, 26, 24} }, +{ {2,0,0,1,0,0,1,2, 30, 3} }, +{ {2,0,0,1,0,0,2,0, 16, 3} }, +{ {2,0,0,1,0,0,2,1, 40, 3} }, +{ {2,0,0,1,0,0,2,2, 27, 3} }, +{ {2,0,0,1,0,1,0,0, 16, 4} }, +{ {2,0,0,1,0,1,0,1, 26, 22} }, +{ {2,0,0,1,0,1,0,2, 30, 27} }, +{ {2,0,0,1,0,1,1,0, 55, 5} }, +{ {2,0,0,1,0,1,1,1, 15, 5} }, +{ {2,0,0,1,0,1,1,2, 57, 0} }, +{ {2,0,0,1,0,1,2,0, 56, 9} }, +{ {2,0,0,1,0,1,2,1, 39, 22} }, +{ {2,0,0,1,0,1,2,2, 50, 4} }, +{ {2,0,0,1,0,2,0,0, 16, 29} }, +{ {2,0,0,1,0,2,0,1, 40, 46} }, +{ {2,0,0,1,0,2,0,2, 27, 46} }, +{ {2,0,0,1,0,2,1,0, 56, 7} }, +{ {2,0,0,1,0,2,1,1, 39, 24} }, +{ {2,0,0,1,0,2,1,2, 50, 31} }, +{ {2,0,0,1,0,2,2,0, 55, 2} }, +{ {2,0,0,1,0,2,2,1, 51, 23} }, +{ {2,0,0,1,0,2,2,2, 38, 5} }, +{ {2,0,0,1,1,0,0,0, 21, 5} }, +{ {2,0,0,1,1,0,0,1, 45, 22} }, +{ {2,0,0,1,1,0,0,2, 52, 8} }, +{ {2,0,0,1,1,0,1,0, 27, 36} }, +{ {2,0,0,1,1,0,1,1, 23, 24} }, +{ {2,0,0,1,1,0,1,2, 53, 8} }, +{ {2,0,0,1,1,0,2,0, 30, 9} }, +{ {2,0,0,1,1,0,2,1, 48, 9} }, +{ {2,0,0,1,1,0,2,2, 53, 43} }, +{ {2,0,0,1,1,1,0,0, 27, 25} }, +{ {2,0,0,1,1,1,0,1, 23, 37} }, +{ {2,0,0,1,1,1,0,2, 53, 45} }, +{ {2,0,0,1,1,1,1,0, 38, 11} }, +{ {2,0,0,1,1,1,1,1, 6, 5} }, +{ {2,0,0,1,1,1,1,2, 30, 11} }, +{ {2,0,0,1,1,1,2,0, 50, 3} }, +{ {2,0,0,1,1,1,2,1, 36, 37} }, +{ {2,0,0,1,1,1,2,2, 48, 11} }, +{ {2,0,0,1,1,2,0,0, 30, 25} }, +{ {2,0,0,1,1,2,0,1, 48, 44} }, +{ {2,0,0,1,1,2,0,2, 53, 26} }, +{ {2,0,0,1,1,2,1,0, 50, 29} }, +{ {2,0,0,1,1,2,1,1, 36, 24} }, +{ {2,0,0,1,1,2,1,2, 48, 28} }, +{ {2,0,0,1,1,2,2,0, 57, 7} }, +{ {2,0,0,1,1,2,2,1, 50, 22} }, +{ {2,0,0,1,1,2,2,2, 30, 5} }, +{ {2,0,0,1,2,0,0,0, 34, 5} }, +{ {2,0,0,1,2,0,0,1, 46, 22} }, +{ {2,0,0,1,2,0,0,2, 45, 12} }, +{ {2,0,0,1,2,0,1,0, 40, 36} }, +{ {2,0,0,1,2,0,1,1, 29, 39} }, +{ {2,0,0,1,2,0,1,2, 48, 42} }, +{ {2,0,0,1,2,0,2,0, 26, 12} }, +{ {2,0,0,1,2,0,2,1, 29, 12} }, +{ {2,0,0,1,2,0,2,2, 23, 47} }, +{ {2,0,0,1,2,1,0,0, 40, 25} }, +{ {2,0,0,1,2,1,0,1, 29, 22} }, +{ {2,0,0,1,2,1,0,2, 48, 27} }, +{ {2,0,0,1,2,1,1,0, 51, 13} }, +{ {2,0,0,1,2,1,1,1, 18, 22} }, +{ {2,0,0,1,2,1,1,2, 50, 12} }, +{ {2,0,0,1,2,1,2,0, 39, 12} }, +{ {2,0,0,1,2,1,2,1, 42, 22} }, +{ {2,0,0,1,2,1,2,2, 36, 47} }, +{ {2,0,0,1,2,2,0,0, 26, 2} }, +{ {2,0,0,1,2,2,0,1, 29, 33} }, +{ {2,0,0,1,2,2,0,2, 23, 2} }, +{ {2,0,0,1,2,2,1,0, 39, 2} }, +{ {2,0,0,1,2,2,1,1, 42, 39} }, +{ {2,0,0,1,2,2,1,2, 36, 2} }, +{ {2,0,0,1,2,2,2,0, 15, 2} }, +{ {2,0,0,1,2,2,2,1, 18, 12} }, +{ {2,0,0,1,2,2,2,2, 6, 11} }, +{ {2,0,0,2,0,0,0,0, 4, 4} }, +{ {2,0,0,2,0,0,0,1, 35, 11} }, +{ {2,0,0,2,0,0,0,2, 20, 11} }, +{ {2,0,0,2,0,0,1,0, 16, 9} }, +{ {2,0,0,2,0,0,1,1, 40, 42} }, +{ {2,0,0,2,0,0,1,2, 27, 42} }, +{ {2,0,0,2,0,0,2,0, 13, 3} }, +{ {2,0,0,2,0,0,2,1, 38, 3} }, +{ {2,0,0,2,0,0,2,2, 25, 3} }, +{ {2,0,0,2,0,1,0,0, 16, 27} }, +{ {2,0,0,2,0,1,0,1, 40, 27} }, +{ {2,0,0,2,0,1,0,2, 27, 27} }, +{ {2,0,0,2,0,1,1,0, 56, 4} }, +{ {2,0,0,2,0,1,1,1, 39, 5} }, +{ {2,0,0,2,0,1,1,2, 50, 23} }, +{ {2,0,0,2,0,1,2,0, 55, 6} }, +{ {2,0,0,2,0,1,2,1, 51, 31} }, +{ {2,0,0,2,0,1,2,2, 38, 24} }, +{ {2,0,0,2,0,2,0,0, 13, 4} }, +{ {2,0,0,2,0,2,0,1, 38, 27} }, +{ {2,0,0,2,0,2,0,2, 25, 27} }, +{ {2,0,0,2,0,2,1,0, 55, 1} }, +{ {2,0,0,2,0,2,1,1, 51, 4} }, +{ {2,0,0,2,0,2,1,2, 38, 22} }, +{ {2,0,0,2,0,2,2,0, 54, 1} }, +{ {2,0,0,2,0,2,2,1, 55, 0} }, +{ {2,0,0,2,0,2,2,2, 13, 5} }, +{ {2,0,0,2,1,0,0,0, 35, 5} }, +{ {2,0,0,2,1,0,0,1, 49, 9} }, +{ {2,0,0,2,1,0,0,2, 45, 23} }, +{ {2,0,0,2,1,0,1,0, 40, 9} }, +{ {2,0,0,2,1,0,1,1, 31, 4} }, +{ {2,0,0,2,1,0,1,2, 47, 8} }, +{ {2,0,0,2,1,0,2,0, 38, 9} }, +{ {2,0,0,2,1,0,2,1, 50, 8} }, +{ {2,0,0,2,1,0,2,2, 27, 39} }, +{ {2,0,0,2,1,1,0,0, 40, 44} }, +{ {2,0,0,2,1,1,0,1, 31, 10} }, +{ {2,0,0,2,1,1,0,2, 47, 45} }, +{ {2,0,0,2,1,1,1,0, 39, 11} }, +{ {2,0,0,2,1,1,1,1, 12, 4} }, +{ {2,0,0,2,1,1,1,2, 31, 11} }, +{ {2,0,0,2,1,1,2,0, 51, 3} }, +{ {2,0,0,2,1,1,2,1, 39, 10} }, +{ {2,0,0,2,1,1,2,2, 40, 39} }, +{ {2,0,0,2,1,2,0,0, 38, 25} }, +{ {2,0,0,2,1,2,0,1, 50, 26} }, +{ {2,0,0,2,1,2,0,2, 27, 22} }, +{ {2,0,0,2,1,2,1,0, 51, 29} }, +{ {2,0,0,2,1,2,1,1, 39, 4} }, +{ {2,0,0,2,1,2,1,2, 40, 22} }, +{ {2,0,0,2,1,2,2,0, 55, 7} }, +{ {2,0,0,2,1,2,2,1, 56, 1} }, +{ {2,0,0,2,1,2,2,2, 16, 22} }, +{ {2,0,0,2,2,0,0,0, 20, 5} }, +{ {2,0,0,2,2,0,0,1, 45, 13} }, +{ {2,0,0,2,2,0,0,2, 44, 9} }, +{ {2,0,0,2,2,0,1,0, 27, 9} }, +{ {2,0,0,2,2,0,1,1, 47, 43} }, +{ {2,0,0,2,2,0,1,2, 45, 8} }, +{ {2,0,0,2,2,0,2,0, 25, 9} }, +{ {2,0,0,2,2,0,2,1, 27, 12} }, +{ {2,0,0,2,2,0,2,2, 20, 4} }, +{ {2,0,0,2,2,1,0,0, 27, 44} }, +{ {2,0,0,2,2,1,0,1, 47, 26} }, +{ {2,0,0,2,2,1,0,2, 45, 26} }, +{ {2,0,0,2,2,1,1,0, 50, 13} }, +{ {2,0,0,2,2,1,1,1, 31, 5} }, +{ {2,0,0,2,2,1,1,2, 49, 13} }, +{ {2,0,0,2,2,1,2,0, 38, 12} }, +{ {2,0,0,2,2,1,2,1, 40, 12} }, +{ {2,0,0,2,2,1,2,2, 35, 4} }, +{ {2,0,0,2,2,2,0,0, 25, 25} }, +{ {2,0,0,2,2,2,0,1, 27, 33} }, +{ {2,0,0,2,2,2,0,2, 20, 10} }, +{ {2,0,0,2,2,2,1,0, 38, 2} }, +{ {2,0,0,2,2,2,1,1, 40, 33} }, +{ {2,0,0,2,2,2,1,2, 35, 10} }, +{ {2,0,0,2,2,2,2,0, 13, 2} }, +{ {2,0,0,2,2,2,2,1, 16, 12} }, +{ {2,0,0,2,2,2,2,2, 4, 5} }, +{ {2,0,1,0,0,0,0,0, 3, 30} }, +{ {2,0,1,0,0,0,0,1, 35, 3} }, +{ {2,0,1,0,0,0,0,2, 21, 3} }, +{ {2,0,1,0,0,0,1,0, 8, 36} }, +{ {2,0,1,0,0,0,1,1, 28, 25} }, +{ {2,0,1,0,0,0,1,2, 24, 8} }, +{ {2,0,1,0,0,0,2,0, 6, 9} }, +{ {2,0,1,0,0,0,2,1, 36, 8} }, +{ {2,0,1,0,0,0,2,2, 23, 42} }, +{ {2,0,1,0,0,1,0,0, 21, 24} }, +{ {2,0,1,0,0,1,0,1, 45, 30} }, +{ {2,0,1,0,0,1,0,2, 52, 15} }, +{ {2,0,1,0,0,1,1,0, 27, 23} }, +{ {2,0,1,0,0,1,1,1, 23, 5} }, +{ {2,0,1,0,0,1,1,2, 53, 35} }, +{ {2,0,1,0,0,1,2,0, 30, 23} }, +{ {2,0,1,0,0,1,2,1, 48, 34} }, +{ {2,0,1,0,0,1,2,2, 53, 14} }, +{ {2,0,1,0,0,2,0,0, 35, 24} }, +{ {2,0,1,0,0,2,0,1, 49, 15} }, +{ {2,0,1,0,0,2,0,2, 45, 31} }, +{ {2,0,1,0,0,2,1,0, 40, 34} }, +{ {2,0,1,0,0,2,1,1, 31, 25} }, +{ {2,0,1,0,0,2,1,2, 47, 35} }, +{ {2,0,1,0,0,2,2,0, 38, 23} }, +{ {2,0,1,0,0,2,2,1, 50, 14} }, +{ {2,0,1,0,0,2,2,2, 27, 30} }, +{ {2,0,1,0,1,0,0,0, 6, 22} }, +{ {2,0,1,0,1,0,0,1, 38, 8} }, +{ {2,0,1,0,1,0,0,2, 30, 8} }, +{ {2,0,1,0,1,0,1,0, 10, 22} }, +{ {2,0,1,0,1,0,1,1, 17, 4} }, +{ {2,0,1,0,1,0,1,2, 32, 8} }, +{ {2,0,1,0,1,0,2,0, 12, 9} }, +{ {2,0,1,0,1,0,2,1, 39, 8} }, +{ {2,0,1,0,1,0,2,2, 31, 8} }, +{ {2,0,1,0,1,1,0,0, 23, 39} }, +{ {2,0,1,0,1,1,0,1, 27, 31} }, +{ {2,0,1,0,1,1,0,2, 53, 15} }, +{ {2,0,1,0,1,1,1,0, 28, 23} }, +{ {2,0,1,0,1,1,1,1, 8, 4} }, +{ {2,0,1,0,1,1,1,2, 24, 28} }, +{ {2,0,1,0,1,1,2,0, 31, 23} }, +{ {2,0,1,0,1,1,2,1, 40, 10} }, +{ {2,0,1,0,1,1,2,2, 47, 11} }, +{ {2,0,1,0,1,2,0,0, 36, 39} }, +{ {2,0,1,0,1,2,0,1, 50, 15} }, +{ {2,0,1,0,1,2,0,2, 48, 35} }, +{ {2,0,1,0,1,2,1,0, 42, 34} }, +{ {2,0,1,0,1,2,1,1, 18, 29} }, +{ {2,0,1,0,1,2,1,2, 29, 46} }, +{ {2,0,1,0,1,2,2,0, 39, 23} }, +{ {2,0,1,0,1,2,2,1, 51, 15} }, +{ {2,0,1,0,1,2,2,2, 40, 5} }, +{ {2,0,1,0,2,0,0,0, 8, 37} }, +{ {2,0,1,0,2,0,0,1, 40, 35} }, +{ {2,0,1,0,2,0,0,2, 27, 8} }, +{ {2,0,1,0,2,0,1,0, 11, 22} }, +{ {2,0,1,0,2,0,1,1, 41, 35} }, +{ {2,0,1,0,2,0,1,2, 29, 8} }, +{ {2,0,1,0,2,0,2,0, 10, 9} }, +{ {2,0,1,0,2,0,2,1, 42, 35} }, +{ {2,0,1,0,2,0,2,2, 28, 8} }, +{ {2,0,1,0,2,1,0,0, 24, 23} }, +{ {2,0,1,0,2,1,0,1, 47, 34} }, +{ {2,0,1,0,2,1,0,2, 53, 34} }, +{ {2,0,1,0,2,1,1,0, 29, 23} }, +{ {2,0,1,0,2,1,1,1, 37, 25} }, +{ {2,0,1,0,2,1,1,2, 47, 27} }, +{ {2,0,1,0,2,1,2,0, 32, 23} }, +{ {2,0,1,0,2,1,2,1, 29, 47} }, +{ {2,0,1,0,2,1,2,2, 24, 29} }, +{ {2,0,1,0,2,2,0,0, 28, 2} }, +{ {2,0,1,0,2,2,0,1, 31, 2} }, +{ {2,0,1,0,2,2,0,2, 23, 10} }, +{ {2,0,1,0,2,2,1,0, 41, 34} }, +{ {2,0,1,0,2,2,1,1, 43, 25} }, +{ {2,0,1,0,2,2,1,2, 37, 2} }, +{ {2,0,1,0,2,2,2,0, 17, 2} }, +{ {2,0,1,0,2,2,2,1, 18, 28} }, +{ {2,0,1,0,2,2,2,2, 8, 11} }, +{ {2,0,1,1,0,0,0,0, 8, 31} }, +{ {2,0,1,1,0,0,0,1, 28, 38} }, +{ {2,0,1,1,0,0,0,2, 24, 3} }, +{ {2,0,1,1,0,0,1,0, 17, 31} }, +{ {2,0,1,1,0,0,1,1, 10, 24} }, +{ {2,0,1,1,0,0,1,2, 32, 3} }, +{ {2,0,1,1,0,0,2,0, 18, 3} }, +{ {2,0,1,1,0,0,2,1, 42, 3} }, +{ {2,0,1,1,0,0,2,2, 29, 3} }, +{ {2,0,1,1,0,1,0,0, 27, 4} }, +{ {2,0,1,1,0,1,0,1, 23, 22} }, +{ {2,0,1,1,0,1,0,2, 53, 28} }, +{ {2,0,1,1,0,1,1,0, 38, 6} }, +{ {2,0,1,1,0,1,1,1, 6, 24} }, +{ {2,0,1,1,0,1,1,2, 30, 6} }, +{ {2,0,1,1,0,1,2,0, 50, 7} }, +{ {2,0,1,1,0,1,2,1, 36, 22} }, +{ {2,0,1,1,0,1,2,2, 48, 6} }, +{ {2,0,1,1,0,2,0,0, 40, 29} }, +{ {2,0,1,1,0,2,0,1, 31, 7} }, +{ {2,0,1,1,0,2,0,2, 47, 28} }, +{ {2,0,1,1,0,2,1,0, 39, 6} }, +{ {2,0,1,1,0,2,1,1, 12, 7} }, +{ {2,0,1,1,0,2,1,2, 31, 6} }, +{ {2,0,1,1,0,2,2,0, 51, 7} }, +{ {2,0,1,1,0,2,2,1, 39, 7} }, +{ {2,0,1,1,0,2,2,2, 40, 30} }, +{ {2,0,1,1,1,0,0,0, 23, 30} }, +{ {2,0,1,1,1,0,0,1, 27, 38} }, +{ {2,0,1,1,1,0,0,2, 53, 42} }, +{ {2,0,1,1,1,0,1,0, 28, 36} }, +{ {2,0,1,1,1,0,1,1, 8, 25} }, +{ {2,0,1,1,1,0,1,2, 24, 27} }, +{ {2,0,1,1,1,0,2,0, 31, 9} }, +{ {2,0,1,1,1,0,2,1, 40, 7} }, +{ {2,0,1,1,1,0,2,2, 47, 6} }, +{ {2,0,1,1,1,1,0,0, 45, 5} }, +{ {2,0,1,1,1,1,0,1, 21, 22} }, +{ {2,0,1,1,1,1,0,2, 52, 6} }, +{ {2,0,1,1,1,1,1,0, 35, 27} }, +{ {2,0,1,1,1,1,1,1, 3, 5} }, +{ {2,0,1,1,1,1,1,2, 21, 27} }, +{ {2,0,1,1,1,1,2,0, 49, 7} }, +{ {2,0,1,1,1,1,2,1, 35, 22} }, +{ {2,0,1,1,1,1,2,2, 45, 4} }, +{ {2,0,1,1,1,2,0,0, 48, 25} }, +{ {2,0,1,1,1,2,0,1, 30, 7} }, +{ {2,0,1,1,1,2,0,2, 53, 17} }, +{ {2,0,1,1,1,2,1,0, 36, 45} }, +{ {2,0,1,1,1,2,1,1, 6, 25} }, +{ {2,0,1,1,1,2,1,2, 23, 27} }, +{ {2,0,1,1,1,2,2,0, 50, 6} }, +{ {2,0,1,1,1,2,2,1, 38, 7} }, +{ {2,0,1,1,1,2,2,2, 27, 5} }, +{ {2,0,1,1,2,0,0,0, 37, 36} }, +{ {2,0,1,1,2,0,0,1, 29, 38} }, +{ {2,0,1,1,2,0,0,2, 47, 42} }, +{ {2,0,1,1,2,0,1,0, 41, 36} }, +{ {2,0,1,1,2,0,1,1, 11, 39} }, +{ {2,0,1,1,2,0,1,2, 29, 45} }, +{ {2,0,1,1,2,0,2,0, 43, 9} }, +{ {2,0,1,1,2,0,2,1, 41, 7} }, +{ {2,0,1,1,2,0,2,2, 37, 29} }, +{ {2,0,1,1,2,1,0,0, 47, 24} }, +{ {2,0,1,1,2,1,0,1, 24, 22} }, +{ {2,0,1,1,2,1,0,2, 53, 7} }, +{ {2,0,1,1,2,1,1,0, 40, 6} }, +{ {2,0,1,1,2,1,1,1, 8, 24} }, +{ {2,0,1,1,2,1,1,2, 27, 45} }, +{ {2,0,1,1,2,1,2,0, 31, 12} }, +{ {2,0,1,1,2,1,2,1, 28, 47} }, +{ {2,0,1,1,2,1,2,2, 23, 29} }, +{ {2,0,1,1,2,2,0,0, 29, 2} }, +{ {2,0,1,1,2,2,0,1, 32, 7} }, +{ {2,0,1,1,2,2,0,2, 24, 2} }, +{ {2,0,1,1,2,2,1,0, 42, 6} }, +{ {2,0,1,1,2,2,1,1, 10, 25} }, +{ {2,0,1,1,2,2,1,2, 28, 45} }, +{ {2,0,1,1,2,2,2,0, 18, 2} }, +{ {2,0,1,1,2,2,2,1, 17, 28} }, +{ {2,0,1,1,2,2,2,2, 8, 28} }, +{ {2,0,1,2,0,0,0,0, 6, 10} }, +{ {2,0,1,2,0,0,0,1, 36, 11} }, +{ {2,0,1,2,0,0,0,2, 23, 3} }, +{ {2,0,1,2,0,0,1,0, 18, 9} }, +{ {2,0,1,2,0,0,1,1, 42, 42} }, +{ {2,0,1,2,0,0,1,2, 29, 42} }, +{ {2,0,1,2,0,0,2,0, 15, 3} }, +{ {2,0,1,2,0,0,2,1, 39, 3} }, +{ {2,0,1,2,0,0,2,2, 26, 3} }, +{ {2,0,1,2,0,1,0,0, 30, 4} }, +{ {2,0,1,2,0,1,0,1, 48, 29} }, +{ {2,0,1,2,0,1,0,2, 53, 47} }, +{ {2,0,1,2,0,1,1,0, 50, 27} }, +{ {2,0,1,2,0,1,1,1, 36, 5} }, +{ {2,0,1,2,0,1,1,2, 48, 45} }, +{ {2,0,1,2,0,1,2,0, 57, 3} }, +{ {2,0,1,2,0,1,2,1, 50, 30} }, +{ {2,0,1,2,0,1,2,2, 30, 24} }, +{ {2,0,1,2,0,2,0,0, 38, 4} }, +{ {2,0,1,2,0,2,0,1, 50, 28} }, +{ {2,0,1,2,0,2,0,2, 27, 37} }, +{ {2,0,1,2,0,2,1,0, 51, 27} }, +{ {2,0,1,2,0,2,1,1, 39, 25} }, +{ {2,0,1,2,0,2,1,2, 40, 37} }, +{ {2,0,1,2,0,2,2,0, 55, 3} }, +{ {2,0,1,2,0,2,2,1, 56, 2} }, +{ {2,0,1,2,0,2,2,2, 16, 30} }, +{ {2,0,1,2,1,0,0,0, 36, 30} }, +{ {2,0,1,2,1,0,0,1, 50, 9} }, +{ {2,0,1,2,1,0,0,2, 48, 8} }, +{ {2,0,1,2,1,0,1,0, 42, 9} }, +{ {2,0,1,2,1,0,1,1, 18, 27} }, +{ {2,0,1,2,1,0,1,2, 29, 27} }, +{ {2,0,1,2,1,0,2,0, 39, 9} }, +{ {2,0,1,2,1,0,2,1, 51, 9} }, +{ {2,0,1,2,1,0,2,2, 40, 24} }, +{ {2,0,1,2,1,1,0,0, 48, 4} }, +{ {2,0,1,2,1,1,0,1, 30, 10} }, +{ {2,0,1,2,1,1,0,2, 53, 2} }, +{ {2,0,1,2,1,1,1,0, 36, 28} }, +{ {2,0,1,2,1,1,1,1, 6, 4} }, +{ {2,0,1,2,1,1,1,2, 23, 46} }, +{ {2,0,1,2,1,1,2,0, 50, 2} }, +{ {2,0,1,2,1,1,2,1, 38, 10} }, +{ {2,0,1,2,1,1,2,2, 27, 24} }, +{ {2,0,1,2,1,2,0,0, 50, 5} }, +{ {2,0,1,2,1,2,0,1, 57, 4} }, +{ {2,0,1,2,1,2,0,2, 30, 22} }, +{ {2,0,1,2,1,2,1,0, 39, 27} }, +{ {2,0,1,2,1,2,1,1, 15, 4} }, +{ {2,0,1,2,1,2,1,2, 26, 27} }, +{ {2,0,1,2,1,2,2,0, 56, 8} }, +{ {2,0,1,2,1,2,2,1, 55, 4} }, +{ {2,0,1,2,1,2,2,2, 16, 5} }, +{ {2,0,1,2,2,0,0,0, 23, 36} }, +{ {2,0,1,2,2,0,0,1, 48, 43} }, +{ {2,0,1,2,2,0,0,2, 45, 9} }, +{ {2,0,1,2,2,0,1,0, 29, 9} }, +{ {2,0,1,2,2,0,1,1, 29, 44} }, +{ {2,0,1,2,2,0,1,2, 46, 9} }, +{ {2,0,1,2,2,0,2,0, 26, 9} }, +{ {2,0,1,2,2,0,2,1, 40, 47} }, +{ {2,0,1,2,2,0,2,2, 34, 4} }, +{ {2,0,1,2,2,1,0,0, 53, 24} }, +{ {2,0,1,2,2,1,0,1, 53, 37} }, +{ {2,0,1,2,2,1,0,2, 52, 12} }, +{ {2,0,1,2,2,1,1,0, 48, 26} }, +{ {2,0,1,2,2,1,1,1, 23, 25} }, +{ {2,0,1,2,2,1,1,2, 45, 27} }, +{ {2,0,1,2,2,1,2,0, 30, 12} }, +{ {2,0,1,2,2,1,2,1, 27, 47} }, +{ {2,0,1,2,2,1,2,2, 21, 4} }, +{ {2,0,1,2,2,2,0,0, 27, 2} }, +{ {2,0,1,2,2,2,0,1, 30, 2} }, +{ {2,0,1,2,2,2,0,2, 21, 10} }, +{ {2,0,1,2,2,2,1,0, 40, 2} }, +{ {2,0,1,2,2,2,1,1, 26, 25} }, +{ {2,0,1,2,2,2,1,2, 34, 10} }, +{ {2,0,1,2,2,2,2,0, 16, 2} }, +{ {2,0,1,2,2,2,2,1, 16, 28} }, +{ {2,0,1,2,2,2,2,2, 7, 11} }, +{ {2,0,2,0,0,0,0,0, 2, 31} }, +{ {2,0,2,0,0,0,0,1, 34, 3} }, +{ {2,0,2,0,0,0,0,2, 20, 3} }, +{ {2,0,2,0,0,0,1,0, 8, 9} }, +{ {2,0,2,0,0,0,1,1, 37, 8} }, +{ {2,0,2,0,0,0,1,2, 23, 8} }, +{ {2,0,2,0,0,0,2,0, 5, 9} }, +{ {2,0,2,0,0,0,2,1, 28, 41} }, +{ {2,0,2,0,0,0,2,2, 22, 8} }, +{ {2,0,2,0,0,1,0,0, 34, 24} }, +{ {2,0,2,0,0,1,0,1, 46, 31} }, +{ {2,0,2,0,0,1,0,2, 45, 18} }, +{ {2,0,2,0,0,1,1,0, 40, 23} }, +{ {2,0,2,0,0,1,1,1, 29, 30} }, +{ {2,0,2,0,0,1,1,2, 48, 15} }, +{ {2,0,2,0,0,1,2,0, 26, 26} }, +{ {2,0,2,0,0,1,2,1, 29, 41} }, +{ {2,0,2,0,0,1,2,2, 23, 26} }, +{ {2,0,2,0,0,2,0,0, 20, 24} }, +{ {2,0,2,0,0,2,0,1, 45, 19} }, +{ {2,0,2,0,0,2,0,2, 44, 15} }, +{ {2,0,2,0,0,2,1,0, 27, 34} }, +{ {2,0,2,0,0,2,1,1, 47, 14} }, +{ {2,0,2,0,0,2,1,2, 45, 14} }, +{ {2,0,2,0,0,2,2,0, 25, 23} }, +{ {2,0,2,0,0,2,2,1, 27, 41} }, +{ {2,0,2,0,0,2,2,2, 20, 25} }, +{ {2,0,2,0,1,0,0,0, 8, 22} }, +{ {2,0,2,0,1,0,0,1, 40, 8} }, +{ {2,0,2,0,1,0,0,2, 27, 35} }, +{ {2,0,2,0,1,0,1,0, 11, 37} }, +{ {2,0,2,0,1,0,1,1, 41, 8} }, +{ {2,0,2,0,1,0,1,2, 29, 35} }, +{ {2,0,2,0,1,0,2,0, 10, 23} }, +{ {2,0,2,0,1,0,2,1, 42, 8} }, +{ {2,0,2,0,1,0,2,2, 28, 35} }, +{ {2,0,2,0,1,1,0,0, 37, 23} }, +{ {2,0,2,0,1,1,0,1, 29, 31} }, +{ {2,0,2,0,1,1,0,2, 47, 15} }, +{ {2,0,2,0,1,1,1,0, 41, 23} }, +{ {2,0,2,0,1,1,1,1, 11, 31} }, +{ {2,0,2,0,1,1,1,2, 29, 28} }, +{ {2,0,2,0,1,1,2,0, 43, 23} }, +{ {2,0,2,0,1,1,2,1, 41, 10} }, +{ {2,0,2,0,1,1,2,2, 37, 44} }, +{ {2,0,2,0,1,2,0,0, 23, 23} }, +{ {2,0,2,0,1,2,0,1, 48, 14} }, +{ {2,0,2,0,1,2,0,2, 45, 15} }, +{ {2,0,2,0,1,2,1,0, 29, 34} }, +{ {2,0,2,0,1,2,1,1, 29, 29} }, +{ {2,0,2,0,1,2,1,2, 46, 15} }, +{ {2,0,2,0,1,2,2,0, 26, 23} }, +{ {2,0,2,0,1,2,2,1, 40, 26} }, +{ {2,0,2,0,1,2,2,2, 34, 25} }, +{ {2,0,2,0,2,0,0,0, 5, 22} }, +{ {2,0,2,0,2,0,0,1, 26, 13} }, +{ {2,0,2,0,2,0,0,2, 25, 8} }, +{ {2,0,2,0,2,0,1,0, 10, 8} }, +{ {2,0,2,0,2,0,1,1, 43, 8} }, +{ {2,0,2,0,2,0,1,2, 26, 8} }, +{ {2,0,2,0,2,0,2,0, 9, 9} }, +{ {2,0,2,0,2,0,2,1, 10, 13} }, +{ {2,0,2,0,2,0,2,2, 5, 27} }, +{ {2,0,2,0,2,1,0,0, 28, 40} }, +{ {2,0,2,0,2,1,0,1, 29, 40} }, +{ {2,0,2,0,2,1,0,2, 27, 40} }, +{ {2,0,2,0,2,1,1,0, 42, 23} }, +{ {2,0,2,0,2,1,1,1, 41, 5} }, +{ {2,0,2,0,2,1,1,2, 40, 13} }, +{ {2,0,2,0,2,1,2,0, 10, 26} }, +{ {2,0,2,0,2,1,2,1, 11, 40} }, +{ {2,0,2,0,2,1,2,2, 8, 27} }, +{ {2,0,2,0,2,2,0,0, 22, 23} }, +{ {2,0,2,0,2,2,0,1, 23, 13} }, +{ {2,0,2,0,2,2,0,2, 20, 2} }, +{ {2,0,2,0,2,2,1,0, 28, 34} }, +{ {2,0,2,0,2,2,1,1, 37, 33} }, +{ {2,0,2,0,2,2,1,2, 34, 2} }, +{ {2,0,2,0,2,2,2,0, 5, 12} }, +{ {2,0,2,0,2,2,2,1, 8, 12} }, +{ {2,0,2,0,2,2,2,2, 2, 28} }, +{ {2,0,2,1,0,0,0,0, 8, 10} }, +{ {2,0,2,1,0,0,0,1, 37, 11} }, +{ {2,0,2,1,0,0,0,2, 23, 11} }, +{ {2,0,2,1,0,0,1,0, 18, 31} }, +{ {2,0,2,1,0,0,1,1, 43, 3} }, +{ {2,0,2,1,0,0,1,2, 31, 3} }, +{ {2,0,2,1,0,0,2,0, 17, 3} }, +{ {2,0,2,1,0,0,2,1, 41, 3} }, +{ {2,0,2,1,0,0,2,2, 28, 3} }, +{ {2,0,2,1,0,1,0,0, 40, 4} }, +{ {2,0,2,1,0,1,0,1, 29, 37} }, +{ {2,0,2,1,0,1,0,2, 48, 46} }, +{ {2,0,2,1,0,1,1,0, 51, 19} }, +{ {2,0,2,1,0,1,1,1, 18, 30} }, +{ {2,0,2,1,0,1,1,2, 50, 18} }, +{ {2,0,2,1,0,1,2,0, 39, 26} }, +{ {2,0,2,1,0,1,2,1, 42, 37} }, +{ {2,0,2,1,0,1,2,2, 36, 26} }, +{ {2,0,2,1,0,2,0,0, 27, 29} }, +{ {2,0,2,1,0,2,0,1, 47, 47} }, +{ {2,0,2,1,0,2,0,2, 45, 28} }, +{ {2,0,2,1,0,2,1,0, 50, 19} }, +{ {2,0,2,1,0,2,1,1, 31, 24} }, +{ {2,0,2,1,0,2,1,2, 49, 19} }, +{ {2,0,2,1,0,2,2,0, 38, 26} }, +{ {2,0,2,1,0,2,2,1, 40, 41} }, +{ {2,0,2,1,0,2,2,2, 35, 25} }, +{ {2,0,2,1,1,0,0,0, 24, 30} }, +{ {2,0,2,1,1,0,0,1, 47, 9} }, +{ {2,0,2,1,1,0,0,2, 53, 9} }, +{ {2,0,2,1,1,0,1,0, 29, 36} }, +{ {2,0,2,1,1,0,1,1, 37, 4} }, +{ {2,0,2,1,1,0,1,2, 47, 46} }, +{ {2,0,2,1,1,0,2,0, 32, 9} }, +{ {2,0,2,1,1,0,2,1, 29, 26} }, +{ {2,0,2,1,1,0,2,2, 24, 26} }, +{ {2,0,2,1,1,1,0,0, 47, 5} }, +{ {2,0,2,1,1,1,0,1, 24, 31} }, +{ {2,0,2,1,1,1,0,2, 53, 10} }, +{ {2,0,2,1,1,1,1,0, 40, 11} }, +{ {2,0,2,1,1,1,1,1, 8, 5} }, +{ {2,0,2,1,1,1,1,2, 27, 28} }, +{ {2,0,2,1,1,1,2,0, 31, 26} }, +{ {2,0,2,1,1,1,2,1, 28, 26} }, +{ {2,0,2,1,1,1,2,2, 23, 44} }, +{ {2,0,2,1,1,2,0,0, 53, 5} }, +{ {2,0,2,1,1,2,0,1, 53, 22} }, +{ {2,0,2,1,1,2,0,2, 52, 19} }, +{ {2,0,2,1,1,2,1,0, 48, 47} }, +{ {2,0,2,1,1,2,1,1, 23, 4} }, +{ {2,0,2,1,1,2,1,2, 45, 29} }, +{ {2,0,2,1,1,2,2,0, 30, 26} }, +{ {2,0,2,1,1,2,2,1, 27, 26} }, +{ {2,0,2,1,1,2,2,2, 21, 25} }, +{ {2,0,2,1,2,0,0,0, 28, 13} }, +{ {2,0,2,1,2,0,0,1, 29, 13} }, +{ {2,0,2,1,2,0,0,2, 27, 13} }, +{ {2,0,2,1,2,0,1,0, 42, 36} }, +{ {2,0,2,1,2,0,1,1, 41, 24} }, +{ {2,0,2,1,2,0,1,2, 40, 40} }, +{ {2,0,2,1,2,0,2,0, 10, 12} }, +{ {2,0,2,1,2,0,2,1, 11, 12} }, +{ {2,0,2,1,2,0,2,2, 8, 46} }, +{ {2,0,2,1,2,1,0,0, 31, 13} }, +{ {2,0,2,1,2,1,0,1, 32, 22} }, +{ {2,0,2,1,2,1,0,2, 30, 13} }, +{ {2,0,2,1,2,1,1,0, 39, 13} }, +{ {2,0,2,1,2,1,1,1, 17, 5} }, +{ {2,0,2,1,2,1,1,2, 38, 13} }, +{ {2,0,2,1,2,1,2,0, 12, 13} }, +{ {2,0,2,1,2,1,2,1, 10, 27} }, +{ {2,0,2,1,2,1,2,2, 6, 27} }, +{ {2,0,2,1,2,2,0,0, 23, 33} }, +{ {2,0,2,1,2,2,0,1, 24, 13} }, +{ {2,0,2,1,2,2,0,2, 21, 2} }, +{ {2,0,2,1,2,2,1,0, 36, 33} }, +{ {2,0,2,1,2,2,1,1, 28, 24} }, +{ {2,0,2,1,2,2,1,2, 35, 2} }, +{ {2,0,2,1,2,2,2,0, 6, 12} }, +{ {2,0,2,1,2,2,2,1, 8, 47} }, +{ {2,0,2,1,2,2,2,2, 3, 28} }, +{ {2,0,2,2,0,0,0,0, 5, 10} }, +{ {2,0,2,2,0,0,0,1, 28, 18} }, +{ {2,0,2,2,0,0,0,2, 22, 3} }, +{ {2,0,2,2,0,0,1,0, 17, 9} }, +{ {2,0,2,2,0,0,1,1, 41, 42} }, +{ {2,0,2,2,0,0,1,2, 28, 42} }, +{ {2,0,2,2,0,0,2,0, 14, 3} }, +{ {2,0,2,2,0,0,2,1, 17, 18} }, +{ {2,0,2,2,0,0,2,2, 5, 6} }, +{ {2,0,2,2,0,1,0,0, 26, 18} }, +{ {2,0,2,2,0,1,0,1, 29, 18} }, +{ {2,0,2,2,0,1,0,2, 23, 17} }, +{ {2,0,2,2,0,1,1,0, 39, 18} }, +{ {2,0,2,2,0,1,1,1, 42, 30} }, +{ {2,0,2,2,0,1,1,2, 36, 17} }, +{ {2,0,2,2,0,1,2,0, 15, 6} }, +{ {2,0,2,2,0,1,2,1, 18, 18} }, +{ {2,0,2,2,0,1,2,2, 6, 6} }, +{ {2,0,2,2,0,2,0,0, 25, 4} }, +{ {2,0,2,2,0,2,0,1, 27, 18} }, +{ {2,0,2,2,0,2,0,2, 20, 7} }, +{ {2,0,2,2,0,2,1,0, 38, 18} }, +{ {2,0,2,2,0,2,1,1, 40, 18} }, +{ {2,0,2,2,0,2,1,2, 35, 7} }, +{ {2,0,2,2,0,2,2,0, 13, 6} }, +{ {2,0,2,2,0,2,2,1, 16, 18} }, +{ {2,0,2,2,0,2,2,2, 4, 6} }, +{ {2,0,2,2,1,0,0,0, 28, 17} }, +{ {2,0,2,2,1,0,0,1, 31, 18} }, +{ {2,0,2,2,1,0,0,2, 23, 7} }, +{ {2,0,2,2,1,0,1,0, 41, 9} }, +{ {2,0,2,2,1,0,1,1, 43, 4} }, +{ {2,0,2,2,1,0,1,2, 37, 17} }, +{ {2,0,2,2,1,0,2,0, 17, 6} }, +{ {2,0,2,2,1,0,2,1, 18, 26} }, +{ {2,0,2,2,1,0,2,2, 8, 6} }, +{ {2,0,2,2,1,1,0,0, 29, 17} }, +{ {2,0,2,2,1,1,0,1, 32, 10} }, +{ {2,0,2,2,1,1,0,2, 24, 7} }, +{ {2,0,2,2,1,1,1,0, 42, 11} }, +{ {2,0,2,2,1,1,1,1, 10, 4} }, +{ {2,0,2,2,1,1,1,2, 28, 28} }, +{ {2,0,2,2,1,1,2,0, 18, 6} }, +{ {2,0,2,2,1,1,2,1, 17, 26} }, +{ {2,0,2,2,1,1,2,2, 8, 45} }, +{ {2,0,2,2,1,2,0,0, 27, 17} }, +{ {2,0,2,2,1,2,0,1, 30, 18} }, +{ {2,0,2,2,1,2,0,2, 21, 7} }, +{ {2,0,2,2,1,2,1,0, 40, 17} }, +{ {2,0,2,2,1,2,1,1, 26, 4} }, +{ {2,0,2,2,1,2,1,2, 34, 7} }, +{ {2,0,2,2,1,2,2,0, 16, 6} }, +{ {2,0,2,2,1,2,2,1, 16, 26} }, +{ {2,0,2,2,1,2,2,2, 7, 6} }, +{ {2,0,2,2,2,0,0,0, 22, 30} }, +{ {2,0,2,2,2,0,0,1, 23, 40} }, +{ {2,0,2,2,2,0,0,2, 20, 18} }, +{ {2,0,2,2,2,0,1,0, 28, 9} }, +{ {2,0,2,2,2,0,1,1, 37, 18} }, +{ {2,0,2,2,2,0,1,2, 34, 18} }, +{ {2,0,2,2,2,0,2,0, 5, 26} }, +{ {2,0,2,2,2,0,2,1, 8, 41} }, +{ {2,0,2,2,2,0,2,2, 2, 27} }, +{ {2,0,2,2,2,1,0,0, 23, 18} }, +{ {2,0,2,2,2,1,0,1, 24, 18} }, +{ {2,0,2,2,2,1,0,2, 21, 18} }, +{ {2,0,2,2,2,1,1,0, 36, 18} }, +{ {2,0,2,2,2,1,1,1, 28, 5} }, +{ {2,0,2,2,2,1,1,2, 35, 18} }, +{ {2,0,2,2,2,1,2,0, 6, 26} }, +{ {2,0,2,2,2,1,2,1, 8, 26} }, +{ {2,0,2,2,2,1,2,2, 3, 26} }, +{ {2,0,2,2,2,2,0,0, 20, 13} }, +{ {2,0,2,2,2,2,0,1, 21, 13} }, +{ {2,0,2,2,2,2,0,2, 19, 7} }, +{ {2,0,2,2,2,2,1,0, 35, 13} }, +{ {2,0,2,2,2,2,1,1, 34, 13} }, +{ {2,0,2,2,2,2,1,2, 33, 2} }, +{ {2,0,2,2,2,2,2,0, 4, 12} }, +{ {2,0,2,2,2,2,2,1, 7, 12} }, +{ {2,0,2,2,2,2,2,2, 1, 4} }, +{ {2,1,0,0,0,0,0,0, 3, 5} }, +{ {2,1,0,0,0,0,0,1, 35, 27} }, +{ {2,1,0,0,0,0,0,2, 21, 27} }, +{ {2,1,0,0,0,0,1,0, 21, 22} }, +{ {2,1,0,0,0,0,1,1, 45, 5} }, +{ {2,1,0,0,0,0,1,2, 52, 6} }, +{ {2,1,0,0,0,0,2,0, 35, 22} }, +{ {2,1,0,0,0,0,2,1, 49, 7} }, +{ {2,1,0,0,0,0,2,2, 45, 4} }, +{ {2,1,0,0,0,1,0,0, 8, 25} }, +{ {2,1,0,0,0,1,0,1, 28, 36} }, +{ {2,1,0,0,0,1,0,2, 24, 27} }, +{ {2,1,0,0,0,1,1,0, 27, 38} }, +{ {2,1,0,0,0,1,1,1, 23, 30} }, +{ {2,1,0,0,0,1,1,2, 53, 6} }, +{ {2,1,0,0,0,1,2,0, 40, 7} }, +{ {2,1,0,0,0,1,2,1, 31, 9} }, +{ {2,1,0,0,0,1,2,2, 47, 6} }, +{ {2,1,0,0,0,2,0,0, 6, 25} }, +{ {2,1,0,0,0,2,0,1, 36, 45} }, +{ {2,1,0,0,0,2,0,2, 23, 27} }, +{ {2,1,0,0,0,2,1,0, 30, 7} }, +{ {2,1,0,0,0,2,1,1, 48, 7} }, +{ {2,1,0,0,0,2,1,2, 53, 17} }, +{ {2,1,0,0,0,2,2,0, 38, 7} }, +{ {2,1,0,0,0,2,2,1, 50, 6} }, +{ {2,1,0,0,0,2,2,2, 27, 5} }, +{ {2,1,0,0,1,0,0,0, 6, 24} }, +{ {2,1,0,0,1,0,0,1, 38, 6} }, +{ {2,1,0,0,1,0,0,2, 30, 6} }, +{ {2,1,0,0,1,0,1,0, 23, 22} }, +{ {2,1,0,0,1,0,1,1, 27, 4} }, +{ {2,1,0,0,1,0,1,2, 53, 16} }, +{ {2,1,0,0,1,0,2,0, 36, 22} }, +{ {2,1,0,0,1,0,2,1, 50, 7} }, +{ {2,1,0,0,1,0,2,2, 48, 6} }, +{ {2,1,0,0,1,1,0,0, 10, 24} }, +{ {2,1,0,0,1,1,0,1, 17, 31} }, +{ {2,1,0,0,1,1,0,2, 32, 6} }, +{ {2,1,0,0,1,1,1,0, 28, 38} }, +{ {2,1,0,0,1,1,1,1, 8, 31} }, +{ {2,1,0,0,1,1,1,2, 24, 3} }, +{ {2,1,0,0,1,1,2,0, 42, 7} }, +{ {2,1,0,0,1,1,2,1, 18, 3} }, +{ {2,1,0,0,1,1,2,2, 29, 3} }, +{ {2,1,0,0,1,2,0,0, 12, 7} }, +{ {2,1,0,0,1,2,0,1, 39, 6} }, +{ {2,1,0,0,1,2,0,2, 31, 6} }, +{ {2,1,0,0,1,2,1,0, 31, 7} }, +{ {2,1,0,0,1,2,1,1, 40, 29} }, +{ {2,1,0,0,1,2,1,2, 47, 28} }, +{ {2,1,0,0,1,2,2,0, 39, 7} }, +{ {2,1,0,0,1,2,2,1, 51, 7} }, +{ {2,1,0,0,1,2,2,2, 40, 30} }, +{ {2,1,0,0,2,0,0,0, 8, 24} }, +{ {2,1,0,0,2,0,0,1, 40, 6} }, +{ {2,1,0,0,2,0,0,2, 27, 45} }, +{ {2,1,0,0,2,0,1,0, 24, 22} }, +{ {2,1,0,0,2,0,1,1, 47, 7} }, +{ {2,1,0,0,2,0,1,2, 53, 7} }, +{ {2,1,0,0,2,0,2,0, 28, 47} }, +{ {2,1,0,0,2,0,2,1, 31, 12} }, +{ {2,1,0,0,2,0,2,2, 23, 29} }, +{ {2,1,0,0,2,1,0,0, 11, 39} }, +{ {2,1,0,0,2,1,0,1, 41, 6} }, +{ {2,1,0,0,2,1,0,2, 29, 45} }, +{ {2,1,0,0,2,1,1,0, 29, 38} }, +{ {2,1,0,0,2,1,1,1, 37, 36} }, +{ {2,1,0,0,2,1,1,2, 47, 42} }, +{ {2,1,0,0,2,1,2,0, 41, 7} }, +{ {2,1,0,0,2,1,2,1, 43, 9} }, +{ {2,1,0,0,2,1,2,2, 37, 47} }, +{ {2,1,0,0,2,2,0,0, 10, 25} }, +{ {2,1,0,0,2,2,0,1, 42, 6} }, +{ {2,1,0,0,2,2,0,2, 28, 45} }, +{ {2,1,0,0,2,2,1,0, 32, 7} }, +{ {2,1,0,0,2,2,1,1, 29, 2} }, +{ {2,1,0,0,2,2,1,2, 24, 2} }, +{ {2,1,0,0,2,2,2,0, 17, 28} }, +{ {2,1,0,0,2,2,2,1, 18, 2} }, +{ {2,1,0,0,2,2,2,2, 8, 28} }, +{ {2,1,0,1,0,0,0,0, 8, 4} }, +{ {2,1,0,1,0,0,0,1, 28, 23} }, +{ {2,1,0,1,0,0,0,2, 24, 28} }, +{ {2,1,0,1,0,0,1,0, 27, 31} }, +{ {2,1,0,1,0,0,1,1, 23, 39} }, +{ {2,1,0,1,0,0,1,2, 53, 11} }, +{ {2,1,0,1,0,0,2,0, 40, 10} }, +{ {2,1,0,1,0,0,2,1, 31, 23} }, +{ {2,1,0,1,0,0,2,2, 47, 11} }, +{ {2,1,0,1,0,1,0,0, 17, 4} }, +{ {2,1,0,1,0,1,0,1, 10, 22} }, +{ {2,1,0,1,0,1,0,2, 32, 27} }, +{ {2,1,0,1,0,1,1,0, 38, 8} }, +{ {2,1,0,1,0,1,1,1, 6, 22} }, +{ {2,1,0,1,0,1,1,2, 30, 8} }, +{ {2,1,0,1,0,1,2,0, 39, 8} }, +{ {2,1,0,1,0,1,2,1, 12, 9} }, +{ {2,1,0,1,0,1,2,2, 31, 8} }, +{ {2,1,0,1,0,2,0,0, 18, 29} }, +{ {2,1,0,1,0,2,0,1, 42, 46} }, +{ {2,1,0,1,0,2,0,2, 29, 46} }, +{ {2,1,0,1,0,2,1,0, 50, 15} }, +{ {2,1,0,1,0,2,1,1, 36, 39} }, +{ {2,1,0,1,0,2,1,2, 48, 35} }, +{ {2,1,0,1,0,2,2,0, 51, 15} }, +{ {2,1,0,1,0,2,2,1, 39, 23} }, +{ {2,1,0,1,0,2,2,2, 40, 5} }, +{ {2,1,0,1,1,0,0,0, 23, 5} }, +{ {2,1,0,1,1,0,0,1, 27, 23} }, +{ {2,1,0,1,1,0,0,2, 53, 27} }, +{ {2,1,0,1,1,0,1,0, 45, 30} }, +{ {2,1,0,1,1,0,1,1, 21, 24} }, +{ {2,1,0,1,1,0,1,2, 52, 15} }, +{ {2,1,0,1,1,0,2,0, 48, 36} }, +{ {2,1,0,1,1,0,2,1, 30, 23} }, +{ {2,1,0,1,1,0,2,2, 53, 14} }, +{ {2,1,0,1,1,1,0,0, 28, 25} }, +{ {2,1,0,1,1,1,0,1, 8, 36} }, +{ {2,1,0,1,1,1,0,2, 24, 8} }, +{ {2,1,0,1,1,1,1,0, 35, 3} }, +{ {2,1,0,1,1,1,1,1, 3, 30} }, +{ {2,1,0,1,1,1,1,2, 21, 3} }, +{ {2,1,0,1,1,1,2,0, 36, 8} }, +{ {2,1,0,1,1,1,2,1, 6, 9} }, +{ {2,1,0,1,1,1,2,2, 23, 42} }, +{ {2,1,0,1,1,2,0,0, 31, 25} }, +{ {2,1,0,1,1,2,0,1, 40, 34} }, +{ {2,1,0,1,1,2,0,2, 47, 35} }, +{ {2,1,0,1,1,2,1,0, 49, 15} }, +{ {2,1,0,1,1,2,1,1, 35, 24} }, +{ {2,1,0,1,1,2,1,2, 45, 31} }, +{ {2,1,0,1,1,2,2,0, 50, 14} }, +{ {2,1,0,1,1,2,2,1, 38, 23} }, +{ {2,1,0,1,1,2,2,2, 27, 30} }, +{ {2,1,0,1,2,0,0,0, 37, 25} }, +{ {2,1,0,1,2,0,0,1, 29, 23} }, +{ {2,1,0,1,2,0,0,2, 47, 27} }, +{ {2,1,0,1,2,0,1,0, 47, 37} }, +{ {2,1,0,1,2,0,1,1, 24, 23} }, +{ {2,1,0,1,2,0,1,2, 53, 34} }, +{ {2,1,0,1,2,0,2,0, 29, 47} }, +{ {2,1,0,1,2,0,2,1, 32, 23} }, +{ {2,1,0,1,2,0,2,2, 24, 29} }, +{ {2,1,0,1,2,1,0,0, 41, 25} }, +{ {2,1,0,1,2,1,0,1, 11, 22} }, +{ {2,1,0,1,2,1,0,2, 29, 8} }, +{ {2,1,0,1,2,1,1,0, 40, 35} }, +{ {2,1,0,1,2,1,1,1, 8, 37} }, +{ {2,1,0,1,2,1,1,2, 27, 8} }, +{ {2,1,0,1,2,1,2,0, 42, 35} }, +{ {2,1,0,1,2,1,2,1, 10, 9} }, +{ {2,1,0,1,2,1,2,2, 28, 8} }, +{ {2,1,0,1,2,2,0,0, 43, 25} }, +{ {2,1,0,1,2,2,0,1, 41, 34} }, +{ {2,1,0,1,2,2,0,2, 37, 10} }, +{ {2,1,0,1,2,2,1,0, 31, 2} }, +{ {2,1,0,1,2,2,1,1, 28, 2} }, +{ {2,1,0,1,2,2,1,2, 23, 10} }, +{ {2,1,0,1,2,2,2,0, 18, 28} }, +{ {2,1,0,1,2,2,2,1, 17, 2} }, +{ {2,1,0,1,2,2,2,2, 8, 11} }, +{ {2,1,0,2,0,0,0,0, 6, 4} }, +{ {2,1,0,2,0,0,0,1, 36, 28} }, +{ {2,1,0,2,0,0,0,2, 23, 46} }, +{ {2,1,0,2,0,0,1,0, 30, 10} }, +{ {2,1,0,2,0,0,1,1, 48, 10} }, +{ {2,1,0,2,0,0,1,2, 53, 2} }, +{ {2,1,0,2,0,0,2,0, 38, 10} }, +{ {2,1,0,2,0,0,2,1, 50, 2} }, +{ {2,1,0,2,0,0,2,2, 27, 24} }, +{ {2,1,0,2,0,1,0,0, 18, 27} }, +{ {2,1,0,2,0,1,0,1, 42, 27} }, +{ {2,1,0,2,0,1,0,2, 29, 27} }, +{ {2,1,0,2,0,1,1,0, 50, 9} }, +{ {2,1,0,2,0,1,1,1, 36, 30} }, +{ {2,1,0,2,0,1,1,2, 48, 8} }, +{ {2,1,0,2,0,1,2,0, 51, 9} }, +{ {2,1,0,2,0,1,2,1, 39, 9} }, +{ {2,1,0,2,0,1,2,2, 40, 24} }, +{ {2,1,0,2,0,2,0,0, 15, 4} }, +{ {2,1,0,2,0,2,0,1, 39, 27} }, +{ {2,1,0,2,0,2,0,2, 26, 27} }, +{ {2,1,0,2,0,2,1,0, 57, 4} }, +{ {2,1,0,2,0,2,1,1, 50, 5} }, +{ {2,1,0,2,0,2,1,2, 30, 22} }, +{ {2,1,0,2,0,2,2,0, 55, 4} }, +{ {2,1,0,2,0,2,2,1, 56, 12} }, +{ {2,1,0,2,0,2,2,2, 16, 5} }, +{ {2,1,0,2,1,0,0,0, 36, 5} }, +{ {2,1,0,2,1,0,0,1, 50, 27} }, +{ {2,1,0,2,1,0,0,2, 48, 45} }, +{ {2,1,0,2,1,0,1,0, 48, 31} }, +{ {2,1,0,2,1,0,1,1, 30, 4} }, +{ {2,1,0,2,1,0,1,2, 53, 47} }, +{ {2,1,0,2,1,0,2,0, 50, 30} }, +{ {2,1,0,2,1,0,2,1, 57, 3} }, +{ {2,1,0,2,1,0,2,2, 30, 24} }, +{ {2,1,0,2,1,1,0,0, 42, 44} }, +{ {2,1,0,2,1,1,0,1, 18, 9} }, +{ {2,1,0,2,1,1,0,2, 29, 42} }, +{ {2,1,0,2,1,1,1,0, 36, 11} }, +{ {2,1,0,2,1,1,1,1, 6, 10} }, +{ {2,1,0,2,1,1,1,2, 23, 3} }, +{ {2,1,0,2,1,1,2,0, 39, 3} }, +{ {2,1,0,2,1,1,2,1, 15, 3} }, +{ {2,1,0,2,1,1,2,2, 26, 3} }, +{ {2,1,0,2,1,2,0,0, 39, 25} }, +{ {2,1,0,2,1,2,0,1, 51, 27} }, +{ {2,1,0,2,1,2,0,2, 40, 37} }, +{ {2,1,0,2,1,2,1,0, 50, 28} }, +{ {2,1,0,2,1,2,1,1, 38, 4} }, +{ {2,1,0,2,1,2,1,2, 27, 37} }, +{ {2,1,0,2,1,2,2,0, 56, 6} }, +{ {2,1,0,2,1,2,2,1, 55, 3} }, +{ {2,1,0,2,1,2,2,2, 16, 30} }, +{ {2,1,0,2,2,0,0,0, 23, 25} }, +{ {2,1,0,2,2,0,0,1, 48, 26} }, +{ {2,1,0,2,2,0,0,2, 45, 27} }, +{ {2,1,0,2,2,0,1,0, 53, 37} }, +{ {2,1,0,2,2,0,1,1, 53, 24} }, +{ {2,1,0,2,2,0,1,2, 52, 13} }, +{ {2,1,0,2,2,0,2,0, 27, 47} }, +{ {2,1,0,2,2,0,2,1, 30, 12} }, +{ {2,1,0,2,2,0,2,2, 21, 4} }, +{ {2,1,0,2,2,1,0,0, 29, 44} }, +{ {2,1,0,2,2,1,0,1, 29, 9} }, +{ {2,1,0,2,2,1,0,2, 46, 27} }, +{ {2,1,0,2,2,1,1,0, 48, 43} }, +{ {2,1,0,2,2,1,1,1, 23, 36} }, +{ {2,1,0,2,2,1,1,2, 45, 9} }, +{ {2,1,0,2,2,1,2,0, 40, 47} }, +{ {2,1,0,2,2,1,2,1, 26, 9} }, +{ {2,1,0,2,2,1,2,2, 34, 4} }, +{ {2,1,0,2,2,2,0,0, 26, 25} }, +{ {2,1,0,2,2,2,0,1, 40, 2} }, +{ {2,1,0,2,2,2,0,2, 34, 10} }, +{ {2,1,0,2,2,2,1,0, 30, 2} }, +{ {2,1,0,2,2,2,1,1, 27, 2} }, +{ {2,1,0,2,2,2,1,2, 21, 10} }, +{ {2,1,0,2,2,2,2,0, 16, 28} }, +{ {2,1,0,2,2,2,2,1, 16, 2} }, +{ {2,1,0,2,2,2,2,2, 7, 5} }, +{ {2,1,1,0,0,0,0,0, 6, 5} }, +{ {2,1,1,0,0,0,0,1, 38, 11} }, +{ {2,1,1,0,0,0,0,2, 30, 11} }, +{ {2,1,1,0,0,0,1,0, 23, 37} }, +{ {2,1,1,0,0,0,1,1, 27, 25} }, +{ {2,1,1,0,0,0,1,2, 53, 3} }, +{ {2,1,1,0,0,0,2,0, 36, 37} }, +{ {2,1,1,0,0,0,2,1, 50, 3} }, +{ {2,1,1,0,0,0,2,2, 48, 11} }, +{ {2,1,1,0,0,1,0,0, 23, 24} }, +{ {2,1,1,0,0,1,0,1, 27, 36} }, +{ {2,1,1,0,0,1,0,2, 53, 46} }, +{ {2,1,1,0,0,1,1,0, 45, 22} }, +{ {2,1,1,0,0,1,1,1, 21, 5} }, +{ {2,1,1,0,0,1,1,2, 52, 8} }, +{ {2,1,1,0,0,1,2,0, 48, 23} }, +{ {2,1,1,0,0,1,2,1, 30, 9} }, +{ {2,1,1,0,0,1,2,2, 53, 43} }, +{ {2,1,1,0,0,2,0,0, 36, 24} }, +{ {2,1,1,0,0,2,0,1, 50, 29} }, +{ {2,1,1,0,0,2,0,2, 48, 28} }, +{ {2,1,1,0,0,2,1,0, 48, 38} }, +{ {2,1,1,0,0,2,1,1, 30, 25} }, +{ {2,1,1,0,0,2,1,2, 53, 26} }, +{ {2,1,1,0,0,2,2,0, 50, 22} }, +{ {2,1,1,0,0,2,2,1, 57, 7} }, +{ {2,1,1,0,0,2,2,2, 30, 5} }, +{ {2,1,1,0,1,0,0,0, 15, 5} }, +{ {2,1,1,0,1,0,0,1, 55, 5} }, +{ {2,1,1,0,1,0,0,2, 57, 5} }, +{ {2,1,1,0,1,0,1,0, 26, 22} }, +{ {2,1,1,0,1,0,1,1, 16, 4} }, +{ {2,1,1,0,1,0,1,2, 30, 27} }, +{ {2,1,1,0,1,0,2,0, 39, 22} }, +{ {2,1,1,0,1,0,2,1, 56, 9} }, +{ {2,1,1,0,1,0,2,2, 50, 4} }, +{ {2,1,1,0,1,1,0,0, 26, 24} }, +{ {2,1,1,0,1,1,0,1, 16, 31} }, +{ {2,1,1,0,1,1,0,2, 30, 3} }, +{ {2,1,1,0,1,1,1,0, 34, 11} }, +{ {2,1,1,0,1,1,1,1, 7, 4} }, +{ {2,1,1,0,1,1,1,2, 21, 11} }, +{ {2,1,1,0,1,1,2,0, 40, 3} }, +{ {2,1,1,0,1,1,2,1, 16, 3} }, +{ {2,1,1,0,1,1,2,2, 27, 3} }, +{ {2,1,1,0,1,2,0,0, 39, 24} }, +{ {2,1,1,0,1,2,0,1, 56, 7} }, +{ {2,1,1,0,1,2,0,2, 50, 31} }, +{ {2,1,1,0,1,2,1,0, 40, 46} }, +{ {2,1,1,0,1,2,1,1, 16, 29} }, +{ {2,1,1,0,1,2,1,2, 27, 46} }, +{ {2,1,1,0,1,2,2,0, 51, 23} }, +{ {2,1,1,0,1,2,2,1, 55, 2} }, +{ {2,1,1,0,1,2,2,2, 38, 5} }, +{ {2,1,1,0,2,0,0,0, 18, 22} }, +{ {2,1,1,0,2,0,0,1, 51, 12} }, +{ {2,1,1,0,2,0,0,2, 50, 12} }, +{ {2,1,1,0,2,0,1,0, 29, 22} }, +{ {2,1,1,0,2,0,1,1, 40, 25} }, +{ {2,1,1,0,2,0,1,2, 48, 27} }, +{ {2,1,1,0,2,0,2,0, 42, 22} }, +{ {2,1,1,0,2,0,2,1, 39, 12} }, +{ {2,1,1,0,2,0,2,2, 36, 29} }, +{ {2,1,1,0,2,1,0,0, 29, 39} }, +{ {2,1,1,0,2,1,0,1, 40, 36} }, +{ {2,1,1,0,2,1,0,2, 48, 42} }, +{ {2,1,1,0,2,1,1,0, 46, 22} }, +{ {2,1,1,0,2,1,1,1, 34, 5} }, +{ {2,1,1,0,2,1,1,2, 45, 12} }, +{ {2,1,1,0,2,1,2,0, 29, 12} }, +{ {2,1,1,0,2,1,2,1, 26, 12} }, +{ {2,1,1,0,2,1,2,2, 23, 47} }, +{ {2,1,1,0,2,2,0,0, 42, 39} }, +{ {2,1,1,0,2,2,0,1, 39, 2} }, +{ {2,1,1,0,2,2,0,2, 36, 10} }, +{ {2,1,1,0,2,2,1,0, 29, 33} }, +{ {2,1,1,0,2,2,1,1, 26, 2} }, +{ {2,1,1,0,2,2,1,2, 23, 2} }, +{ {2,1,1,0,2,2,2,0, 18, 12} }, +{ {2,1,1,0,2,2,2,1, 15, 2} }, +{ {2,1,1,0,2,2,2,2, 6, 11} }, +{ {2,1,1,1,0,0,0,0, 10, 5} }, +{ {2,1,1,1,0,0,0,1, 17, 23} }, +{ {2,1,1,1,0,0,0,2, 32, 11} }, +{ {2,1,1,1,0,0,1,0, 28, 31} }, +{ {2,1,1,1,0,0,1,1, 8, 38} }, +{ {2,1,1,1,0,0,1,2, 24, 6} }, +{ {2,1,1,1,0,0,2,0, 42, 10} }, +{ {2,1,1,1,0,0,2,1, 18, 7} }, +{ {2,1,1,1,0,0,2,2, 29, 16} }, +{ {2,1,1,1,0,1,0,0, 28, 4} }, +{ {2,1,1,1,0,1,0,1, 8, 23} }, +{ {2,1,1,1,0,1,0,2, 24, 15} }, +{ {2,1,1,1,0,1,1,0, 35, 15} }, +{ {2,1,1,1,0,1,1,1, 3, 22} }, +{ {2,1,1,1,0,1,1,2, 21, 15} }, +{ {2,1,1,1,0,1,2,0, 36, 35} }, +{ {2,1,1,1,0,1,2,1, 6, 23} }, +{ {2,1,1,1,0,1,2,2, 23, 15} }, +{ {2,1,1,1,0,2,0,0, 42, 29} }, +{ {2,1,1,1,0,2,0,1, 18, 15} }, +{ {2,1,1,1,0,2,0,2, 29, 15} }, +{ {2,1,1,1,0,2,1,0, 36, 6} }, +{ {2,1,1,1,0,2,1,1, 6, 7} }, +{ {2,1,1,1,0,2,1,2, 23, 16} }, +{ {2,1,1,1,0,2,2,0, 39, 15} }, +{ {2,1,1,1,0,2,2,1, 15, 7} }, +{ {2,1,1,1,0,2,2,2, 26, 15} }, +{ {2,1,1,1,1,0,0,0, 26, 5} }, +{ {2,1,1,1,1,0,0,1, 16, 23} }, +{ {2,1,1,1,1,0,0,2, 30, 15} }, +{ {2,1,1,1,1,0,1,0, 34, 6} }, +{ {2,1,1,1,1,0,1,1, 7, 25} }, +{ {2,1,1,1,1,0,1,2, 21, 6} }, +{ {2,1,1,1,1,0,2,0, 40, 16} }, +{ {2,1,1,1,1,0,2,1, 16, 7} }, +{ {2,1,1,1,1,0,2,2, 27, 16} }, +{ {2,1,1,1,1,1,0,0, 34, 8} }, +{ {2,1,1,1,1,1,0,1, 7, 23} }, +{ {2,1,1,1,1,1,0,2, 21, 8} }, +{ {2,1,1,1,1,1,1,0, 33, 6} }, +{ {2,1,1,1,1,1,1,1, 1, 5} }, +{ {2,1,1,1,1,1,1,2, 19, 6} }, +{ {2,1,1,1,1,1,2,0, 35, 8} }, +{ {2,1,1,1,1,1,2,1, 4, 9} }, +{ {2,1,1,1,1,1,2,2, 20, 8} }, +{ {2,1,1,1,1,2,0,0, 40, 15} }, +{ {2,1,1,1,1,2,0,1, 16, 15} }, +{ {2,1,1,1,1,2,0,2, 27, 15} }, +{ {2,1,1,1,1,2,1,0, 35, 6} }, +{ {2,1,1,1,1,2,1,1, 4, 7} }, +{ {2,1,1,1,1,2,1,2, 20, 6} }, +{ {2,1,1,1,1,2,2,0, 38, 15} }, +{ {2,1,1,1,1,2,2,1, 13, 7} }, +{ {2,1,1,1,1,2,2,2, 25, 15} }, +{ {2,1,1,1,2,0,0,0, 43, 5} }, +{ {2,1,1,1,2,0,0,1, 18, 23} }, +{ {2,1,1,1,2,0,0,2, 31, 15} }, +{ {2,1,1,1,2,0,1,0, 37, 6} }, +{ {2,1,1,1,2,0,1,1, 8, 7} }, +{ {2,1,1,1,2,0,1,2, 23, 6} }, +{ {2,1,1,1,2,0,2,0, 41, 16} }, +{ {2,1,1,1,2,0,2,1, 17, 7} }, +{ {2,1,1,1,2,0,2,2, 28, 16} }, +{ {2,1,1,1,2,1,0,0, 37, 35} }, +{ {2,1,1,1,2,1,0,1, 8, 34} }, +{ {2,1,1,1,2,1,0,2, 23, 35} }, +{ {2,1,1,1,2,1,1,0, 34, 15} }, +{ {2,1,1,1,2,1,1,1, 2, 22} }, +{ {2,1,1,1,2,1,1,2, 20, 15} }, +{ {2,1,1,1,2,1,2,0, 28, 12} }, +{ {2,1,1,1,2,1,2,1, 5, 23} }, +{ {2,1,1,1,2,1,2,2, 22, 15} }, +{ {2,1,1,1,2,2,0,0, 41, 15} }, +{ {2,1,1,1,2,2,0,1, 17, 15} }, +{ {2,1,1,1,2,2,0,2, 28, 15} }, +{ {2,1,1,1,2,2,1,0, 28, 33} }, +{ {2,1,1,1,2,2,1,1, 5, 7} }, +{ {2,1,1,1,2,2,1,2, 22, 6} }, +{ {2,1,1,1,2,2,2,0, 17, 12} }, +{ {2,1,1,1,2,2,2,1, 14, 7} }, +{ {2,1,1,1,2,2,2,2, 5, 11} }, +{ {2,1,1,2,0,0,0,0, 12, 4} }, +{ {2,1,1,2,0,0,0,1, 39, 11} }, +{ {2,1,1,2,0,0,0,2, 31, 11} }, +{ {2,1,1,2,0,0,1,0, 31, 10} }, +{ {2,1,1,2,0,0,1,1, 40, 44} }, +{ {2,1,1,2,0,0,1,2, 47, 45} }, +{ {2,1,1,2,0,0,2,0, 39, 10} }, +{ {2,1,1,2,0,0,2,1, 51, 3} }, +{ {2,1,1,2,0,0,2,2, 40, 39} }, +{ {2,1,1,2,0,1,0,0, 31, 4} }, +{ {2,1,1,2,0,1,0,1, 40, 9} }, +{ {2,1,1,2,0,1,0,2, 47, 8} }, +{ {2,1,1,2,0,1,1,0, 49, 9} }, +{ {2,1,1,2,0,1,1,1, 35, 5} }, +{ {2,1,1,2,0,1,1,2, 45, 23} }, +{ {2,1,1,2,0,1,2,0, 50, 8} }, +{ {2,1,1,2,0,1,2,1, 38, 9} }, +{ {2,1,1,2,0,1,2,2, 27, 39} }, +{ {2,1,1,2,0,2,0,0, 39, 4} }, +{ {2,1,1,2,0,2,0,1, 51, 29} }, +{ {2,1,1,2,0,2,0,2, 40, 22} }, +{ {2,1,1,2,0,2,1,0, 50, 26} }, +{ {2,1,1,2,0,2,1,1, 38, 25} }, +{ {2,1,1,2,0,2,1,2, 27, 22} }, +{ {2,1,1,2,0,2,2,0, 56, 5} }, +{ {2,1,1,2,0,2,2,1, 55, 7} }, +{ {2,1,1,2,0,2,2,2, 16, 22} }, +{ {2,1,1,2,1,0,0,0, 39, 5} }, +{ {2,1,1,2,1,0,0,1, 56, 4} }, +{ {2,1,1,2,1,0,0,2, 50, 23} }, +{ {2,1,1,2,1,0,1,0, 40, 27} }, +{ {2,1,1,2,1,0,1,1, 16, 27} }, +{ {2,1,1,2,1,0,1,2, 27, 27} }, +{ {2,1,1,2,1,0,2,0, 51, 31} }, +{ {2,1,1,2,1,0,2,1, 55, 6} }, +{ {2,1,1,2,1,0,2,2, 38, 24} }, +{ {2,1,1,2,1,1,0,0, 40, 42} }, +{ {2,1,1,2,1,1,0,1, 16, 9} }, +{ {2,1,1,2,1,1,0,2, 27, 42} }, +{ {2,1,1,2,1,1,1,0, 35, 11} }, +{ {2,1,1,2,1,1,1,1, 4, 4} }, +{ {2,1,1,2,1,1,1,2, 20, 11} }, +{ {2,1,1,2,1,1,2,0, 38, 3} }, +{ {2,1,1,2,1,1,2,1, 13, 3} }, +{ {2,1,1,2,1,1,2,2, 25, 3} }, +{ {2,1,1,2,1,2,0,0, 51, 4} }, +{ {2,1,1,2,1,2,0,1, 55, 1} }, +{ {2,1,1,2,1,2,0,2, 38, 22} }, +{ {2,1,1,2,1,2,1,0, 38, 27} }, +{ {2,1,1,2,1,2,1,1, 13, 4} }, +{ {2,1,1,2,1,2,1,2, 25, 27} }, +{ {2,1,1,2,1,2,2,0, 55, 0} }, +{ {2,1,1,2,1,2,2,1, 54, 1} }, +{ {2,1,1,2,1,2,2,2, 13, 5} }, +{ {2,1,1,2,2,0,0,0, 31, 5} }, +{ {2,1,1,2,2,0,0,1, 50, 13} }, +{ {2,1,1,2,2,0,0,2, 49, 12} }, +{ {2,1,1,2,2,0,1,0, 47, 26} }, +{ {2,1,1,2,2,0,1,1, 27, 44} }, +{ {2,1,1,2,2,0,1,2, 45, 26} }, +{ {2,1,1,2,2,0,2,0, 40, 12} }, +{ {2,1,1,2,2,0,2,1, 38, 12} }, +{ {2,1,1,2,2,0,2,2, 35, 4} }, +{ {2,1,1,2,2,1,0,0, 47, 43} }, +{ {2,1,1,2,2,1,0,1, 27, 9} }, +{ {2,1,1,2,2,1,0,2, 45, 8} }, +{ {2,1,1,2,2,1,1,0, 45, 13} }, +{ {2,1,1,2,2,1,1,1, 20, 5} }, +{ {2,1,1,2,2,1,1,2, 44, 9} }, +{ {2,1,1,2,2,1,2,0, 27, 12} }, +{ {2,1,1,2,2,1,2,1, 25, 9} }, +{ {2,1,1,2,2,1,2,2, 20, 4} }, +{ {2,1,1,2,2,2,0,0, 40, 33} }, +{ {2,1,1,2,2,2,0,1, 38, 2} }, +{ {2,1,1,2,2,2,0,2, 35, 10} }, +{ {2,1,1,2,2,2,1,0, 27, 33} }, +{ {2,1,1,2,2,2,1,1, 25, 25} }, +{ {2,1,1,2,2,2,1,2, 20, 10} }, +{ {2,1,1,2,2,2,2,0, 16, 12} }, +{ {2,1,1,2,2,2,2,1, 13, 2} }, +{ {2,1,1,2,2,2,2,2, 4, 5} }, +{ {2,1,2,0,0,0,0,0, 8, 5} }, +{ {2,1,2,0,0,0,0,1, 40, 11} }, +{ {2,1,2,0,0,0,0,2, 27, 28} }, +{ {2,1,2,0,0,0,1,0, 24, 31} }, +{ {2,1,2,0,0,0,1,1, 47, 10} }, +{ {2,1,2,0,0,0,1,2, 53, 10} }, +{ {2,1,2,0,0,0,2,0, 28, 26} }, +{ {2,1,2,0,0,0,2,1, 31, 26} }, +{ {2,1,2,0,0,0,2,2, 23, 44} }, +{ {2,1,2,0,0,1,0,0, 37, 4} }, +{ {2,1,2,0,0,1,0,1, 29, 36} }, +{ {2,1,2,0,0,1,0,2, 47, 46} }, +{ {2,1,2,0,0,1,1,0, 47, 22} }, +{ {2,1,2,0,0,1,1,1, 24, 30} }, +{ {2,1,2,0,0,1,1,2, 53, 9} }, +{ {2,1,2,0,0,1,2,0, 29, 26} }, +{ {2,1,2,0,0,1,2,1, 32, 9} }, +{ {2,1,2,0,0,1,2,2, 24, 26} }, +{ {2,1,2,0,0,2,0,0, 23, 4} }, +{ {2,1,2,0,0,2,0,1, 48, 47} }, +{ {2,1,2,0,0,2,0,2, 45, 29} }, +{ {2,1,2,0,0,2,1,0, 53, 22} }, +{ {2,1,2,0,0,2,1,1, 53, 5} }, +{ {2,1,2,0,0,2,1,2, 52, 18} }, +{ {2,1,2,0,0,2,2,0, 27, 26} }, +{ {2,1,2,0,0,2,2,1, 30, 26} }, +{ {2,1,2,0,0,2,2,2, 21, 25} }, +{ {2,1,2,0,1,0,0,0, 18, 30} }, +{ {2,1,2,0,1,0,0,1, 51, 18} }, +{ {2,1,2,0,1,0,0,2, 50, 18} }, +{ {2,1,2,0,1,0,1,0, 29, 37} }, +{ {2,1,2,0,1,0,1,1, 40, 4} }, +{ {2,1,2,0,1,0,1,2, 48, 46} }, +{ {2,1,2,0,1,0,2,0, 42, 37} }, +{ {2,1,2,0,1,0,2,1, 39, 26} }, +{ {2,1,2,0,1,0,2,2, 36, 44} }, +{ {2,1,2,0,1,1,0,0, 43, 24} }, +{ {2,1,2,0,1,1,0,1, 18, 31} }, +{ {2,1,2,0,1,1,0,2, 31, 3} }, +{ {2,1,2,0,1,1,1,0, 37, 11} }, +{ {2,1,2,0,1,1,1,1, 8, 10} }, +{ {2,1,2,0,1,1,1,2, 23, 11} }, +{ {2,1,2,0,1,1,2,0, 41, 3} }, +{ {2,1,2,0,1,1,2,1, 17, 3} }, +{ {2,1,2,0,1,1,2,2, 28, 3} }, +{ {2,1,2,0,1,2,0,0, 31, 24} }, +{ {2,1,2,0,1,2,0,1, 50, 19} }, +{ {2,1,2,0,1,2,0,2, 49, 18} }, +{ {2,1,2,0,1,2,1,0, 47, 47} }, +{ {2,1,2,0,1,2,1,1, 27, 29} }, +{ {2,1,2,0,1,2,1,2, 45, 28} }, +{ {2,1,2,0,1,2,2,0, 40, 41} }, +{ {2,1,2,0,1,2,2,1, 38, 26} }, +{ {2,1,2,0,1,2,2,2, 35, 25} }, +{ {2,1,2,0,2,0,0,0, 17, 5} }, +{ {2,1,2,0,2,0,0,1, 39, 13} }, +{ {2,1,2,0,2,0,0,2, 38, 13} }, +{ {2,1,2,0,2,0,1,0, 32, 22} }, +{ {2,1,2,0,2,0,1,1, 31, 13} }, +{ {2,1,2,0,2,0,1,2, 30, 13} }, +{ {2,1,2,0,2,0,2,0, 10, 27} }, +{ {2,1,2,0,2,0,2,1, 12, 12} }, +{ {2,1,2,0,2,0,2,2, 6, 27} }, +{ {2,1,2,0,2,1,0,0, 41, 24} }, +{ {2,1,2,0,2,1,0,1, 42, 36} }, +{ {2,1,2,0,2,1,0,2, 40, 40} }, +{ {2,1,2,0,2,1,1,0, 29, 13} }, +{ {2,1,2,0,2,1,1,1, 28, 13} }, +{ {2,1,2,0,2,1,1,2, 27, 13} }, +{ {2,1,2,0,2,1,2,0, 11, 27} }, +{ {2,1,2,0,2,1,2,1, 10, 12} }, +{ {2,1,2,0,2,1,2,2, 8, 46} }, +{ {2,1,2,0,2,2,0,0, 28, 24} }, +{ {2,1,2,0,2,2,0,1, 36, 13} }, +{ {2,1,2,0,2,2,0,2, 35, 2} }, +{ {2,1,2,0,2,2,1,0, 24, 13} }, +{ {2,1,2,0,2,2,1,1, 23, 33} }, +{ {2,1,2,0,2,2,1,2, 21, 2} }, +{ {2,1,2,0,2,2,2,0, 8, 47} }, +{ {2,1,2,0,2,2,2,1, 6, 12} }, +{ {2,1,2,0,2,2,2,2, 3, 29} }, +{ {2,1,2,1,0,0,0,0, 11, 31} }, +{ {2,1,2,1,0,0,0,1, 41, 11} }, +{ {2,1,2,1,0,0,0,2, 29, 28} }, +{ {2,1,2,1,0,0,1,0, 29, 31} }, +{ {2,1,2,1,0,0,1,1, 37, 23} }, +{ {2,1,2,1,0,0,1,2, 47, 15} }, +{ {2,1,2,1,0,0,2,0, 41, 10} }, +{ {2,1,2,1,0,0,2,1, 43, 23} }, +{ {2,1,2,1,0,0,2,2, 37, 26} }, +{ {2,1,2,1,0,1,0,0, 41, 4} }, +{ {2,1,2,1,0,1,0,1, 11, 37} }, +{ {2,1,2,1,0,1,0,2, 29, 35} }, +{ {2,1,2,1,0,1,1,0, 40, 8} }, +{ {2,1,2,1,0,1,1,1, 8, 22} }, +{ {2,1,2,1,0,1,1,2, 27, 35} }, +{ {2,1,2,1,0,1,2,0, 42, 8} }, +{ {2,1,2,1,0,1,2,1, 10, 23} }, +{ {2,1,2,1,0,1,2,2, 28, 35} }, +{ {2,1,2,1,0,2,0,0, 29, 29} }, +{ {2,1,2,1,0,2,0,1, 29, 34} }, +{ {2,1,2,1,0,2,0,2, 46, 28} }, +{ {2,1,2,1,0,2,1,0, 48, 14} }, +{ {2,1,2,1,0,2,1,1, 23, 23} }, +{ {2,1,2,1,0,2,1,2, 45, 15} }, +{ {2,1,2,1,0,2,2,0, 40, 26} }, +{ {2,1,2,1,0,2,2,1, 26, 23} }, +{ {2,1,2,1,0,2,2,2, 34, 25} }, +{ {2,1,2,1,1,0,0,0, 29, 30} }, +{ {2,1,2,1,1,0,0,1, 40, 23} }, +{ {2,1,2,1,1,0,0,2, 48, 15} }, +{ {2,1,2,1,1,0,1,0, 46, 31} }, +{ {2,1,2,1,1,0,1,1, 34, 24} }, +{ {2,1,2,1,1,0,1,2, 45, 18} }, +{ {2,1,2,1,1,0,2,0, 29, 41} }, +{ {2,1,2,1,1,0,2,1, 26, 26} }, +{ {2,1,2,1,1,0,2,2, 23, 26} }, +{ {2,1,2,1,1,1,0,0, 37, 8} }, +{ {2,1,2,1,1,1,0,1, 8, 9} }, +{ {2,1,2,1,1,1,0,2, 23, 8} }, +{ {2,1,2,1,1,1,1,0, 34, 3} }, +{ {2,1,2,1,1,1,1,1, 2, 31} }, +{ {2,1,2,1,1,1,1,2, 20, 3} }, +{ {2,1,2,1,1,1,2,0, 28, 41} }, +{ {2,1,2,1,1,1,2,1, 5, 9} }, +{ {2,1,2,1,1,1,2,2, 22, 8} }, +{ {2,1,2,1,1,2,0,0, 47, 14} }, +{ {2,1,2,1,1,2,0,1, 27, 34} }, +{ {2,1,2,1,1,2,0,2, 45, 14} }, +{ {2,1,2,1,1,2,1,0, 45, 19} }, +{ {2,1,2,1,1,2,1,1, 20, 24} }, +{ {2,1,2,1,1,2,1,2, 44, 15} }, +{ {2,1,2,1,1,2,2,0, 27, 41} }, +{ {2,1,2,1,1,2,2,1, 25, 23} }, +{ {2,1,2,1,1,2,2,2, 20, 25} }, +{ {2,1,2,1,2,0,0,0, 41, 5} }, +{ {2,1,2,1,2,0,0,1, 42, 23} }, +{ {2,1,2,1,2,0,0,2, 40, 13} }, +{ {2,1,2,1,2,0,1,0, 29, 40} }, +{ {2,1,2,1,2,0,1,1, 28, 40} }, +{ {2,1,2,1,2,0,1,2, 27, 40} }, +{ {2,1,2,1,2,0,2,0, 11, 46} }, +{ {2,1,2,1,2,0,2,1, 10, 26} }, +{ {2,1,2,1,2,0,2,2, 8, 27} }, +{ {2,1,2,1,2,1,0,0, 43, 8} }, +{ {2,1,2,1,2,1,0,1, 10, 8} }, +{ {2,1,2,1,2,1,0,2, 26, 8} }, +{ {2,1,2,1,2,1,1,0, 26, 13} }, +{ {2,1,2,1,2,1,1,1, 5, 22} }, +{ {2,1,2,1,2,1,1,2, 25, 8} }, +{ {2,1,2,1,2,1,2,0, 10, 13} }, +{ {2,1,2,1,2,1,2,1, 9, 9} }, +{ {2,1,2,1,2,1,2,2, 5, 27} }, +{ {2,1,2,1,2,2,0,0, 37, 13} }, +{ {2,1,2,1,2,2,0,1, 28, 34} }, +{ {2,1,2,1,2,2,0,2, 34, 2} }, +{ {2,1,2,1,2,2,1,0, 23, 13} }, +{ {2,1,2,1,2,2,1,1, 22, 23} }, +{ {2,1,2,1,2,2,1,2, 20, 2} }, +{ {2,1,2,1,2,2,2,0, 8, 12} }, +{ {2,1,2,1,2,2,2,1, 5, 12} }, +{ {2,1,2,1,2,2,2,2, 2, 28} }, +{ {2,1,2,2,0,0,0,0, 10, 4} }, +{ {2,1,2,2,0,0,0,1, 42, 11} }, +{ {2,1,2,2,0,0,0,2, 28, 28} }, +{ {2,1,2,2,0,0,1,0, 32, 10} }, +{ {2,1,2,2,0,0,1,1, 29, 17} }, +{ {2,1,2,2,0,0,1,2, 24, 7} }, +{ {2,1,2,2,0,0,2,0, 17, 26} }, +{ {2,1,2,2,0,0,2,1, 18, 6} }, +{ {2,1,2,2,0,0,2,2, 8, 45} }, +{ {2,1,2,2,0,1,0,0, 43, 4} }, +{ {2,1,2,2,0,1,0,1, 41, 9} }, +{ {2,1,2,2,0,1,0,2, 37, 7} }, +{ {2,1,2,2,0,1,1,0, 31, 18} }, +{ {2,1,2,2,0,1,1,1, 28, 17} }, +{ {2,1,2,2,0,1,1,2, 23, 7} }, +{ {2,1,2,2,0,1,2,0, 18, 26} }, +{ {2,1,2,2,0,1,2,1, 17, 6} }, +{ {2,1,2,2,0,1,2,2, 8, 6} }, +{ {2,1,2,2,0,2,0,0, 26, 4} }, +{ {2,1,2,2,0,2,0,1, 40, 17} }, +{ {2,1,2,2,0,2,0,2, 34, 7} }, +{ {2,1,2,2,0,2,1,0, 30, 18} }, +{ {2,1,2,2,0,2,1,1, 27, 17} }, +{ {2,1,2,2,0,2,1,2, 21, 7} }, +{ {2,1,2,2,0,2,2,0, 16, 26} }, +{ {2,1,2,2,0,2,2,1, 16, 6} }, +{ {2,1,2,2,0,2,2,2, 7, 24} }, +{ {2,1,2,2,1,0,0,0, 42, 30} }, +{ {2,1,2,2,1,0,0,1, 39, 18} }, +{ {2,1,2,2,1,0,0,2, 36, 7} }, +{ {2,1,2,2,1,0,1,0, 29, 18} }, +{ {2,1,2,2,1,0,1,1, 26, 18} }, +{ {2,1,2,2,1,0,1,2, 23, 17} }, +{ {2,1,2,2,1,0,2,0, 18, 18} }, +{ {2,1,2,2,1,0,2,1, 15, 6} }, +{ {2,1,2,2,1,0,2,2, 6, 6} }, +{ {2,1,2,2,1,1,0,0, 41, 42} }, +{ {2,1,2,2,1,1,0,1, 17, 9} }, +{ {2,1,2,2,1,1,0,2, 28, 42} }, +{ {2,1,2,2,1,1,1,0, 28, 18} }, +{ {2,1,2,2,1,1,1,1, 5, 10} }, +{ {2,1,2,2,1,1,1,2, 22, 3} }, +{ {2,1,2,2,1,1,2,0, 17, 18} }, +{ {2,1,2,2,1,1,2,1, 14, 3} }, +{ {2,1,2,2,1,1,2,2, 5, 6} }, +{ {2,1,2,2,1,2,0,0, 40, 18} }, +{ {2,1,2,2,1,2,0,1, 38, 18} }, +{ {2,1,2,2,1,2,0,2, 35, 7} }, +{ {2,1,2,2,1,2,1,0, 27, 18} }, +{ {2,1,2,2,1,2,1,1, 25, 4} }, +{ {2,1,2,2,1,2,1,2, 20, 7} }, +{ {2,1,2,2,1,2,2,0, 16, 18} }, +{ {2,1,2,2,1,2,2,1, 13, 6} }, +{ {2,1,2,2,1,2,2,2, 4, 6} }, +{ {2,1,2,2,2,0,0,0, 28, 5} }, +{ {2,1,2,2,2,0,0,1, 36, 40} }, +{ {2,1,2,2,2,0,0,2, 35, 18} }, +{ {2,1,2,2,2,0,1,0, 24, 18} }, +{ {2,1,2,2,2,0,1,1, 23, 18} }, +{ {2,1,2,2,2,0,1,2, 21, 18} }, +{ {2,1,2,2,2,0,2,0, 8, 26} }, +{ {2,1,2,2,2,0,2,1, 6, 26} }, +{ {2,1,2,2,2,0,2,2, 3, 27} }, +{ {2,1,2,2,2,1,0,0, 37, 40} }, +{ {2,1,2,2,2,1,0,1, 28, 9} }, +{ {2,1,2,2,2,1,0,2, 34, 18} }, +{ {2,1,2,2,2,1,1,0, 23, 40} }, +{ {2,1,2,2,2,1,1,1, 22, 30} }, +{ {2,1,2,2,2,1,1,2, 20, 18} }, +{ {2,1,2,2,2,1,2,0, 8, 41} }, +{ {2,1,2,2,2,1,2,1, 5, 26} }, +{ {2,1,2,2,2,1,2,2, 2, 27} }, +{ {2,1,2,2,2,2,0,0, 34, 13} }, +{ {2,1,2,2,2,2,0,1, 35, 13} }, +{ {2,1,2,2,2,2,0,2, 33, 7} }, +{ {2,1,2,2,2,2,1,0, 21, 13} }, +{ {2,1,2,2,2,2,1,1, 20, 13} }, +{ {2,1,2,2,2,2,1,2, 19, 7} }, +{ {2,1,2,2,2,2,2,0, 7, 26} }, +{ {2,1,2,2,2,2,2,1, 4, 12} }, +{ {2,1,2,2,2,2,2,2, 1, 4} }, +{ {2,2,0,0,0,0,0,0, 2, 4} }, +{ {2,2,0,0,0,0,0,1, 34, 27} }, +{ {2,2,0,0,0,0,0,2, 20, 27} }, +{ {2,2,0,0,0,0,1,0, 34, 22} }, +{ {2,2,0,0,0,0,1,1, 46, 4} }, +{ {2,2,0,0,0,0,1,2, 45, 1} }, +{ {2,2,0,0,0,0,2,0, 20, 22} }, +{ {2,2,0,0,0,0,2,1, 45, 0} }, +{ {2,2,0,0,0,0,2,2, 44, 6} }, +{ {2,2,0,0,0,1,0,0, 8, 44} }, +{ {2,2,0,0,0,1,0,1, 37, 45} }, +{ {2,2,0,0,0,1,0,2, 23, 45} }, +{ {2,2,0,0,0,1,1,0, 40, 38} }, +{ {2,2,0,0,0,1,1,1, 29, 5} }, +{ {2,2,0,0,0,1,1,2, 48, 16} }, +{ {2,2,0,0,0,1,2,0, 27, 7} }, +{ {2,2,0,0,0,1,2,1, 47, 17} }, +{ {2,2,0,0,0,1,2,2, 45, 6} }, +{ {2,2,0,0,0,2,0,0, 5, 25} }, +{ {2,2,0,0,0,2,0,1, 28, 20} }, +{ {2,2,0,0,0,2,0,2, 22, 27} }, +{ {2,2,0,0,0,2,1,0, 26, 20} }, +{ {2,2,0,0,0,2,1,1, 29, 20} }, +{ {2,2,0,0,0,2,1,2, 23, 43} }, +{ {2,2,0,0,0,2,2,0, 25, 7} }, +{ {2,2,0,0,0,2,2,1, 27, 20} }, +{ {2,2,0,0,0,2,2,2, 20, 9} }, +{ {2,2,0,0,1,0,0,0, 8, 39} }, +{ {2,2,0,0,1,0,0,1, 40, 45} }, +{ {2,2,0,0,1,0,0,2, 27, 6} }, +{ {2,2,0,0,1,0,1,0, 37, 38} }, +{ {2,2,0,0,1,0,1,1, 29, 4} }, +{ {2,2,0,0,1,0,1,2, 47, 16} }, +{ {2,2,0,0,1,0,2,0, 23, 38} }, +{ {2,2,0,0,1,0,2,1, 48, 17} }, +{ {2,2,0,0,1,0,2,2, 45, 7} }, +{ {2,2,0,0,1,1,0,0, 11, 24} }, +{ {2,2,0,0,1,1,0,1, 41, 45} }, +{ {2,2,0,0,1,1,0,2, 29, 6} }, +{ {2,2,0,0,1,1,1,0, 41, 38} }, +{ {2,2,0,0,1,1,1,1, 11, 4} }, +{ {2,2,0,0,1,1,1,2, 29, 11} }, +{ {2,2,0,0,1,1,2,0, 29, 7} }, +{ {2,2,0,0,1,1,2,1, 29, 10} }, +{ {2,2,0,0,1,1,2,2, 46, 6} }, +{ {2,2,0,0,1,2,0,0, 10, 7} }, +{ {2,2,0,0,1,2,0,1, 42, 45} }, +{ {2,2,0,0,1,2,0,2, 28, 6} }, +{ {2,2,0,0,1,2,1,0, 43, 7} }, +{ {2,2,0,0,1,2,1,1, 41, 29} }, +{ {2,2,0,0,1,2,1,2, 37, 9} }, +{ {2,2,0,0,1,2,2,0, 26, 7} }, +{ {2,2,0,0,1,2,2,1, 40, 43} }, +{ {2,2,0,0,1,2,2,2, 34, 9} }, +{ {2,2,0,0,2,0,0,0, 5, 24} }, +{ {2,2,0,0,2,0,0,1, 26, 21} }, +{ {2,2,0,0,2,0,0,2, 25, 6} }, +{ {2,2,0,0,2,0,1,0, 28, 21} }, +{ {2,2,0,0,2,0,1,1, 29, 21} }, +{ {2,2,0,0,2,0,1,2, 27, 21} }, +{ {2,2,0,0,2,0,2,0, 22, 22} }, +{ {2,2,0,0,2,0,2,1, 23, 32} }, +{ {2,2,0,0,2,0,2,2, 20, 12} }, +{ {2,2,0,0,2,1,0,0, 10, 6} }, +{ {2,2,0,0,2,1,0,1, 43, 6} }, +{ {2,2,0,0,2,1,0,2, 26, 6} }, +{ {2,2,0,0,2,1,1,0, 42, 38} }, +{ {2,2,0,0,2,1,1,1, 41, 30} }, +{ {2,2,0,0,2,1,1,2, 40, 32} }, +{ {2,2,0,0,2,1,2,0, 28, 7} }, +{ {2,2,0,0,2,1,2,1, 37, 12} }, +{ {2,2,0,0,2,1,2,2, 34, 12} }, +{ {2,2,0,0,2,2,0,0, 9, 6} }, +{ {2,2,0,0,2,2,0,1, 10, 21} }, +{ {2,2,0,0,2,2,0,2, 5, 3} }, +{ {2,2,0,0,2,2,1,0, 10, 20} }, +{ {2,2,0,0,2,2,1,1, 11, 20} }, +{ {2,2,0,0,2,2,1,2, 8, 42} }, +{ {2,2,0,0,2,2,2,0, 5, 2} }, +{ {2,2,0,0,2,2,2,1, 8, 33} }, +{ {2,2,0,0,2,2,2,2, 2, 2} }, +{ {2,2,0,1,0,0,0,0, 8, 29} }, +{ {2,2,0,1,0,0,0,1, 37, 28} }, +{ {2,2,0,1,0,0,0,2, 23, 28} }, +{ {2,2,0,1,0,0,1,0, 40, 31} }, +{ {2,2,0,1,0,0,1,1, 29, 24} }, +{ {2,2,0,1,0,0,1,2, 48, 3} }, +{ {2,2,0,1,0,0,2,0, 27, 10} }, +{ {2,2,0,1,0,0,2,1, 47, 2} }, +{ {2,2,0,1,0,0,2,2, 45, 2} }, +{ {2,2,0,1,0,1,0,0, 18, 4} }, +{ {2,2,0,1,0,1,0,1, 43, 27} }, +{ {2,2,0,1,0,1,0,2, 31, 27} }, +{ {2,2,0,1,0,1,1,0, 51, 0} }, +{ {2,2,0,1,0,1,1,1, 18, 5} }, +{ {2,2,0,1,0,1,1,2, 50, 1} }, +{ {2,2,0,1,0,1,2,0, 50, 0} }, +{ {2,2,0,1,0,1,2,1, 31, 22} }, +{ {2,2,0,1,0,1,2,2, 49, 0} }, +{ {2,2,0,1,0,2,0,0, 17, 29} }, +{ {2,2,0,1,0,2,0,1, 41, 46} }, +{ {2,2,0,1,0,2,0,2, 28, 46} }, +{ {2,2,0,1,0,2,1,0, 39, 20} }, +{ {2,2,0,1,0,2,1,1, 42, 24} }, +{ {2,2,0,1,0,2,1,2, 36, 43} }, +{ {2,2,0,1,0,2,2,0, 38, 20} }, +{ {2,2,0,1,0,2,2,1, 40, 20} }, +{ {2,2,0,1,0,2,2,2, 35, 9} }, +{ {2,2,0,1,1,0,0,0, 24, 5} }, +{ {2,2,0,1,1,0,0,1, 47, 44} }, +{ {2,2,0,1,1,0,0,2, 53, 44} }, +{ {2,2,0,1,1,0,1,0, 47, 30} }, +{ {2,2,0,1,1,0,1,1, 24, 4} }, +{ {2,2,0,1,1,0,1,2, 53, 29} }, +{ {2,2,0,1,1,0,2,0, 53, 30} }, +{ {2,2,0,1,1,0,2,1, 53, 39} }, +{ {2,2,0,1,1,0,2,2, 52, 0} }, +{ {2,2,0,1,1,1,0,0, 29, 25} }, +{ {2,2,0,1,1,1,0,1, 37, 31} }, +{ {2,2,0,1,1,1,0,2, 47, 3} }, +{ {2,2,0,1,1,1,1,0, 40, 28} }, +{ {2,2,0,1,1,1,1,1, 8, 30} }, +{ {2,2,0,1,1,1,1,2, 27, 11} }, +{ {2,2,0,1,1,1,2,0, 48, 2} }, +{ {2,2,0,1,1,1,2,1, 23, 31} }, +{ {2,2,0,1,1,1,2,2, 45, 3} }, +{ {2,2,0,1,1,2,0,0, 32, 25} }, +{ {2,2,0,1,1,2,0,1, 29, 43} }, +{ {2,2,0,1,1,2,0,2, 24, 9} }, +{ {2,2,0,1,1,2,1,0, 31, 20} }, +{ {2,2,0,1,1,2,1,1, 28, 43} }, +{ {2,2,0,1,1,2,1,2, 23, 9} }, +{ {2,2,0,1,1,2,2,0, 30, 20} }, +{ {2,2,0,1,1,2,2,1, 27, 43} }, +{ {2,2,0,1,1,2,2,2, 21, 9} }, +{ {2,2,0,1,2,0,0,0, 28, 32} }, +{ {2,2,0,1,2,0,0,1, 29, 32} }, +{ {2,2,0,1,2,0,0,2, 27, 32} }, +{ {2,2,0,1,2,0,1,0, 31, 21} }, +{ {2,2,0,1,2,0,1,1, 32, 24} }, +{ {2,2,0,1,2,0,1,2, 30, 21} }, +{ {2,2,0,1,2,0,2,0, 23, 12} }, +{ {2,2,0,1,2,0,2,1, 24, 12} }, +{ {2,2,0,1,2,0,2,2, 21, 12} }, +{ {2,2,0,1,2,1,0,0, 42, 25} }, +{ {2,2,0,1,2,1,0,1, 41, 37} }, +{ {2,2,0,1,2,1,0,2, 40, 21} }, +{ {2,2,0,1,2,1,1,0, 39, 21} }, +{ {2,2,0,1,2,1,1,1, 17, 30} }, +{ {2,2,0,1,2,1,1,2, 38, 21} }, +{ {2,2,0,1,2,1,2,0, 36, 12} }, +{ {2,2,0,1,2,1,2,1, 28, 37} }, +{ {2,2,0,1,2,1,2,2, 35, 12} }, +{ {2,2,0,1,2,2,0,0, 10, 2} }, +{ {2,2,0,1,2,2,0,1, 11, 33} }, +{ {2,2,0,1,2,2,0,2, 8, 3} }, +{ {2,2,0,1,2,2,1,0, 12, 3} }, +{ {2,2,0,1,2,2,1,1, 10, 3} }, +{ {2,2,0,1,2,2,1,2, 6, 3} }, +{ {2,2,0,1,2,2,2,0, 6, 2} }, +{ {2,2,0,1,2,2,2,1, 8, 2} }, +{ {2,2,0,1,2,2,2,2, 3, 2} }, +{ {2,2,0,2,0,0,0,0, 5, 4} }, +{ {2,2,0,2,0,0,0,1, 28, 1} }, +{ {2,2,0,2,0,0,0,2, 22, 28} }, +{ {2,2,0,2,0,0,1,0, 26, 1} }, +{ {2,2,0,2,0,0,1,1, 29, 1} }, +{ {2,2,0,2,0,0,1,2, 23, 14} }, +{ {2,2,0,2,0,0,2,0, 25, 10} }, +{ {2,2,0,2,0,0,2,1, 27, 1} }, +{ {2,2,0,2,0,0,2,2, 20, 23} }, +{ {2,2,0,2,0,1,0,0, 17, 27} }, +{ {2,2,0,2,0,1,0,1, 41, 27} }, +{ {2,2,0,2,0,1,0,2, 28, 27} }, +{ {2,2,0,2,0,1,1,0, 39, 1} }, +{ {2,2,0,2,0,1,1,1, 42, 5} }, +{ {2,2,0,2,0,1,1,2, 36, 14} }, +{ {2,2,0,2,0,1,2,0, 38, 1} }, +{ {2,2,0,2,0,1,2,1, 40, 1} }, +{ {2,2,0,2,0,1,2,2, 35, 23} }, +{ {2,2,0,2,0,2,0,0, 14, 4} }, +{ {2,2,0,2,0,2,0,1, 17, 1} }, +{ {2,2,0,2,0,2,0,2, 5, 8} }, +{ {2,2,0,2,0,2,1,0, 15, 1} }, +{ {2,2,0,2,0,2,1,1, 18, 1} }, +{ {2,2,0,2,0,2,1,2, 6, 8} }, +{ {2,2,0,2,0,2,2,0, 13, 1} }, +{ {2,2,0,2,0,2,2,1, 16, 1} }, +{ {2,2,0,2,0,2,2,2, 4, 8} }, +{ {2,2,0,2,1,0,0,0, 28, 14} }, +{ {2,2,0,2,1,0,0,1, 31, 1} }, +{ {2,2,0,2,1,0,0,2, 23, 34} }, +{ {2,2,0,2,1,0,1,0, 29, 14} }, +{ {2,2,0,2,1,0,1,1, 32, 4} }, +{ {2,2,0,2,1,0,1,2, 24, 14} }, +{ {2,2,0,2,1,0,2,0, 27, 14} }, +{ {2,2,0,2,1,0,2,1, 30, 1} }, +{ {2,2,0,2,1,0,2,2, 21, 23} }, +{ {2,2,0,2,1,1,0,0, 41, 44} }, +{ {2,2,0,2,1,1,0,1, 43, 10} }, +{ {2,2,0,2,1,1,0,2, 37, 14} }, +{ {2,2,0,2,1,1,1,0, 42, 28} }, +{ {2,2,0,2,1,1,1,1, 10, 10} }, +{ {2,2,0,2,1,1,1,2, 28, 11} }, +{ {2,2,0,2,1,1,2,0, 40, 14} }, +{ {2,2,0,2,1,1,2,1, 26, 10} }, +{ {2,2,0,2,1,1,2,2, 34, 23} }, +{ {2,2,0,2,1,2,0,0, 17, 14} }, +{ {2,2,0,2,1,2,0,1, 18, 8} }, +{ {2,2,0,2,1,2,0,2, 8, 35} }, +{ {2,2,0,2,1,2,1,0, 18, 14} }, +{ {2,2,0,2,1,2,1,1, 17, 8} }, +{ {2,2,0,2,1,2,1,2, 8, 8} }, +{ {2,2,0,2,1,2,2,0, 16, 14} }, +{ {2,2,0,2,1,2,2,1, 16, 8} }, +{ {2,2,0,2,1,2,2,2, 7, 22} }, +{ {2,2,0,2,2,0,0,0, 22, 5} }, +{ {2,2,0,2,2,0,0,1, 23, 21} }, +{ {2,2,0,2,2,0,0,2, 20, 1} }, +{ {2,2,0,2,2,0,1,0, 23, 1} }, +{ {2,2,0,2,2,0,1,1, 24, 1} }, +{ {2,2,0,2,2,0,1,2, 21, 1} }, +{ {2,2,0,2,2,0,2,0, 20, 21} }, +{ {2,2,0,2,2,0,2,1, 21, 21} }, +{ {2,2,0,2,2,0,2,2, 19, 1} }, +{ {2,2,0,2,2,1,0,0, 28, 44} }, +{ {2,2,0,2,2,1,0,1, 37, 1} }, +{ {2,2,0,2,2,1,0,2, 34, 1} }, +{ {2,2,0,2,2,1,1,0, 36, 1} }, +{ {2,2,0,2,2,1,1,1, 28, 30} }, +{ {2,2,0,2,2,1,1,2, 35, 1} }, +{ {2,2,0,2,2,1,2,0, 35, 21} }, +{ {2,2,0,2,2,1,2,1, 34, 21} }, +{ {2,2,0,2,2,1,2,2, 33, 1} }, +{ {2,2,0,2,2,2,0,0, 5, 20} }, +{ {2,2,0,2,2,2,0,1, 8, 20} }, +{ {2,2,0,2,2,2,0,2, 2, 9} }, +{ {2,2,0,2,2,2,1,0, 6, 20} }, +{ {2,2,0,2,2,2,1,1, 8, 43} }, +{ {2,2,0,2,2,2,1,2, 3, 8} }, +{ {2,2,0,2,2,2,2,0, 4, 2} }, +{ {2,2,0,2,2,2,2,1, 7, 20} }, +{ {2,2,0,2,2,2,2,2, 1, 3} }, +{ {2,2,1,0,0,0,0,0, 8, 30} }, +{ {2,2,1,0,0,0,0,1, 40, 28} }, +{ {2,2,1,0,0,0,0,2, 27, 11} }, +{ {2,2,1,0,0,0,1,0, 37, 31} }, +{ {2,2,1,0,0,0,1,1, 29, 25} }, +{ {2,2,1,0,0,0,1,2, 47, 3} }, +{ {2,2,1,0,0,0,2,0, 23, 31} }, +{ {2,2,1,0,0,0,2,1, 48, 2} }, +{ {2,2,1,0,0,0,2,2, 45, 3} }, +{ {2,2,1,0,0,1,0,0, 24, 4} }, +{ {2,2,1,0,0,1,0,1, 47, 29} }, +{ {2,2,1,0,0,1,0,2, 53, 29} }, +{ {2,2,1,0,0,1,1,0, 47, 39} }, +{ {2,2,1,0,0,1,1,1, 24, 5} }, +{ {2,2,1,0,0,1,1,2, 53, 44} }, +{ {2,2,1,0,0,1,2,0, 53, 39} }, +{ {2,2,1,0,0,1,2,1, 53, 30} }, +{ {2,2,1,0,0,1,2,2, 52, 1} }, +{ {2,2,1,0,0,2,0,0, 28, 43} }, +{ {2,2,1,0,0,2,0,1, 31, 20} }, +{ {2,2,1,0,0,2,0,2, 23, 9} }, +{ {2,2,1,0,0,2,1,0, 29, 43} }, +{ {2,2,1,0,0,2,1,1, 32, 25} }, +{ {2,2,1,0,0,2,1,2, 24, 9} }, +{ {2,2,1,0,0,2,2,0, 27, 43} }, +{ {2,2,1,0,0,2,2,1, 30, 20} }, +{ {2,2,1,0,0,2,2,2, 21, 9} }, +{ {2,2,1,0,1,0,0,0, 18, 5} }, +{ {2,2,1,0,1,0,0,1, 51, 1} }, +{ {2,2,1,0,1,0,0,2, 50, 1} }, +{ {2,2,1,0,1,0,1,0, 43, 22} }, +{ {2,2,1,0,1,0,1,1, 18, 4} }, +{ {2,2,1,0,1,0,1,2, 31, 27} }, +{ {2,2,1,0,1,0,2,0, 31, 22} }, +{ {2,2,1,0,1,0,2,1, 50, 0} }, +{ {2,2,1,0,1,0,2,2, 49, 1} }, +{ {2,2,1,0,1,1,0,0, 29, 24} }, +{ {2,2,1,0,1,1,0,1, 40, 31} }, +{ {2,2,1,0,1,1,0,2, 48, 3} }, +{ {2,2,1,0,1,1,1,0, 37, 28} }, +{ {2,2,1,0,1,1,1,1, 8, 29} }, +{ {2,2,1,0,1,1,1,2, 23, 28} }, +{ {2,2,1,0,1,1,2,0, 47, 2} }, +{ {2,2,1,0,1,1,2,1, 27, 10} }, +{ {2,2,1,0,1,1,2,2, 45, 2} }, +{ {2,2,1,0,1,2,0,0, 42, 24} }, +{ {2,2,1,0,1,2,0,1, 39, 20} }, +{ {2,2,1,0,1,2,0,2, 36, 9} }, +{ {2,2,1,0,1,2,1,0, 41, 46} }, +{ {2,2,1,0,1,2,1,1, 17, 29} }, +{ {2,2,1,0,1,2,1,2, 28, 46} }, +{ {2,2,1,0,1,2,2,0, 40, 20} }, +{ {2,2,1,0,1,2,2,1, 38, 20} }, +{ {2,2,1,0,1,2,2,2, 35, 9} }, +{ {2,2,1,0,2,0,0,0, 17, 30} }, +{ {2,2,1,0,2,0,0,1, 39, 21} }, +{ {2,2,1,0,2,0,0,2, 38, 21} }, +{ {2,2,1,0,2,0,1,0, 41, 37} }, +{ {2,2,1,0,2,0,1,1, 42, 25} }, +{ {2,2,1,0,2,0,1,2, 40, 21} }, +{ {2,2,1,0,2,0,2,0, 28, 37} }, +{ {2,2,1,0,2,0,2,1, 36, 32} }, +{ {2,2,1,0,2,0,2,2, 35, 12} }, +{ {2,2,1,0,2,1,0,0, 32, 24} }, +{ {2,2,1,0,2,1,0,1, 31, 21} }, +{ {2,2,1,0,2,1,0,2, 30, 21} }, +{ {2,2,1,0,2,1,1,0, 29, 32} }, +{ {2,2,1,0,2,1,1,1, 28, 32} }, +{ {2,2,1,0,2,1,1,2, 27, 32} }, +{ {2,2,1,0,2,1,2,0, 24, 12} }, +{ {2,2,1,0,2,1,2,1, 23, 12} }, +{ {2,2,1,0,2,1,2,2, 21, 12} }, +{ {2,2,1,0,2,2,0,0, 10, 3} }, +{ {2,2,1,0,2,2,0,1, 12, 2} }, +{ {2,2,1,0,2,2,0,2, 6, 3} }, +{ {2,2,1,0,2,2,1,0, 11, 42} }, +{ {2,2,1,0,2,2,1,1, 10, 2} }, +{ {2,2,1,0,2,2,1,2, 8, 3} }, +{ {2,2,1,0,2,2,2,0, 8, 2} }, +{ {2,2,1,0,2,2,2,1, 6, 2} }, +{ {2,2,1,0,2,2,2,2, 3, 3} }, +{ {2,2,1,1,0,0,0,0, 11, 4} }, +{ {2,2,1,1,0,0,0,1, 41, 28} }, +{ {2,2,1,1,0,0,0,2, 29, 11} }, +{ {2,2,1,1,0,0,1,0, 41, 31} }, +{ {2,2,1,1,0,0,1,1, 11, 24} }, +{ {2,2,1,1,0,0,1,2, 29, 6} }, +{ {2,2,1,1,0,0,2,0, 29, 10} }, +{ {2,2,1,1,0,0,2,1, 29, 7} }, +{ {2,2,1,1,0,0,2,2, 46, 2} }, +{ {2,2,1,1,0,1,0,0, 29, 4} }, +{ {2,2,1,1,0,1,0,1, 37, 38} }, +{ {2,2,1,1,0,1,0,2, 47, 16} }, +{ {2,2,1,1,0,1,1,0, 40, 45} }, +{ {2,2,1,1,0,1,1,1, 8, 39} }, +{ {2,2,1,1,0,1,1,2, 27, 6} }, +{ {2,2,1,1,0,1,2,0, 48, 17} }, +{ {2,2,1,1,0,1,2,1, 23, 38} }, +{ {2,2,1,1,0,1,2,2, 45, 7} }, +{ {2,2,1,1,0,2,0,0, 41, 29} }, +{ {2,2,1,1,0,2,0,1, 43, 7} }, +{ {2,2,1,1,0,2,0,2, 37, 43} }, +{ {2,2,1,1,0,2,1,0, 42, 45} }, +{ {2,2,1,1,0,2,1,1, 10, 7} }, +{ {2,2,1,1,0,2,1,2, 28, 6} }, +{ {2,2,1,1,0,2,2,0, 40, 43} }, +{ {2,2,1,1,0,2,2,1, 26, 7} }, +{ {2,2,1,1,0,2,2,2, 34, 9} }, +{ {2,2,1,1,1,0,0,0, 29, 5} }, +{ {2,2,1,1,1,0,0,1, 40, 38} }, +{ {2,2,1,1,1,0,0,2, 48, 16} }, +{ {2,2,1,1,1,0,1,0, 37, 45} }, +{ {2,2,1,1,1,0,1,1, 8, 44} }, +{ {2,2,1,1,1,0,1,2, 23, 45} }, +{ {2,2,1,1,1,0,2,0, 47, 17} }, +{ {2,2,1,1,1,0,2,1, 27, 7} }, +{ {2,2,1,1,1,0,2,2, 45, 6} }, +{ {2,2,1,1,1,1,0,0, 46, 4} }, +{ {2,2,1,1,1,1,0,1, 34, 22} }, +{ {2,2,1,1,1,1,0,2, 45, 1} }, +{ {2,2,1,1,1,1,1,0, 34, 27} }, +{ {2,2,1,1,1,1,1,1, 2, 4} }, +{ {2,2,1,1,1,1,1,2, 20, 27} }, +{ {2,2,1,1,1,1,2,0, 45, 0} }, +{ {2,2,1,1,1,1,2,1, 20, 22} }, +{ {2,2,1,1,1,1,2,2, 44, 6} }, +{ {2,2,1,1,1,2,0,0, 29, 20} }, +{ {2,2,1,1,1,2,0,1, 26, 20} }, +{ {2,2,1,1,1,2,0,2, 23, 43} }, +{ {2,2,1,1,1,2,1,0, 28, 20} }, +{ {2,2,1,1,1,2,1,1, 5, 25} }, +{ {2,2,1,1,1,2,1,2, 22, 27} }, +{ {2,2,1,1,1,2,2,0, 27, 20} }, +{ {2,2,1,1,1,2,2,1, 25, 7} }, +{ {2,2,1,1,1,2,2,2, 20, 9} }, +{ {2,2,1,1,2,0,0,0, 41, 30} }, +{ {2,2,1,1,2,0,0,1, 42, 38} }, +{ {2,2,1,1,2,0,0,2, 40, 32} }, +{ {2,2,1,1,2,0,1,0, 43, 6} }, +{ {2,2,1,1,2,0,1,1, 10, 6} }, +{ {2,2,1,1,2,0,1,2, 26, 6} }, +{ {2,2,1,1,2,0,2,0, 37, 32} }, +{ {2,2,1,1,2,0,2,1, 28, 7} }, +{ {2,2,1,1,2,0,2,2, 34, 12} }, +{ {2,2,1,1,2,1,0,0, 29, 21} }, +{ {2,2,1,1,2,1,0,1, 28, 21} }, +{ {2,2,1,1,2,1,0,2, 27, 21} }, +{ {2,2,1,1,2,1,1,0, 26, 21} }, +{ {2,2,1,1,2,1,1,1, 5, 24} }, +{ {2,2,1,1,2,1,1,2, 25, 6} }, +{ {2,2,1,1,2,1,2,0, 23, 32} }, +{ {2,2,1,1,2,1,2,1, 22, 22} }, +{ {2,2,1,1,2,1,2,2, 20, 12} }, +{ {2,2,1,1,2,2,0,0, 11, 2} }, +{ {2,2,1,1,2,2,0,1, 10, 20} }, +{ {2,2,1,1,2,2,0,2, 8, 42} }, +{ {2,2,1,1,2,2,1,0, 10, 21} }, +{ {2,2,1,1,2,2,1,1, 9, 6} }, +{ {2,2,1,1,2,2,1,2, 5, 3} }, +{ {2,2,1,1,2,2,2,0, 8, 33} }, +{ {2,2,1,1,2,2,2,1, 5, 2} }, +{ {2,2,1,1,2,2,2,2, 2, 2} }, +{ {2,2,1,2,0,0,0,0, 10, 10} }, +{ {2,2,1,2,0,0,0,1, 42, 28} }, +{ {2,2,1,2,0,0,0,2, 28, 11} }, +{ {2,2,1,2,0,0,1,0, 43, 10} }, +{ {2,2,1,2,0,0,1,1, 41, 44} }, +{ {2,2,1,2,0,0,1,2, 37, 34} }, +{ {2,2,1,2,0,0,2,0, 26, 10} }, +{ {2,2,1,2,0,0,2,1, 40, 14} }, +{ {2,2,1,2,0,0,2,2, 34, 23} }, +{ {2,2,1,2,0,1,0,0, 32, 4} }, +{ {2,2,1,2,0,1,0,1, 29, 14} }, +{ {2,2,1,2,0,1,0,2, 24, 14} }, +{ {2,2,1,2,0,1,1,0, 31, 1} }, +{ {2,2,1,2,0,1,1,1, 28, 14} }, +{ {2,2,1,2,0,1,1,2, 23, 34} }, +{ {2,2,1,2,0,1,2,0, 30, 1} }, +{ {2,2,1,2,0,1,2,1, 27, 14} }, +{ {2,2,1,2,0,1,2,2, 21, 23} }, +{ {2,2,1,2,0,2,0,0, 17, 8} }, +{ {2,2,1,2,0,2,0,1, 18, 14} }, +{ {2,2,1,2,0,2,0,2, 8, 8} }, +{ {2,2,1,2,0,2,1,0, 18, 8} }, +{ {2,2,1,2,0,2,1,1, 17, 14} }, +{ {2,2,1,2,0,2,1,2, 8, 35} }, +{ {2,2,1,2,0,2,2,0, 16, 8} }, +{ {2,2,1,2,0,2,2,1, 16, 14} }, +{ {2,2,1,2,0,2,2,2, 7, 8} }, +{ {2,2,1,2,1,0,0,0, 42, 5} }, +{ {2,2,1,2,1,0,0,1, 39, 1} }, +{ {2,2,1,2,1,0,0,2, 36, 34} }, +{ {2,2,1,2,1,0,1,0, 41, 27} }, +{ {2,2,1,2,1,0,1,1, 17, 27} }, +{ {2,2,1,2,1,0,1,2, 28, 27} }, +{ {2,2,1,2,1,0,2,0, 40, 1} }, +{ {2,2,1,2,1,0,2,1, 38, 1} }, +{ {2,2,1,2,1,0,2,2, 35, 23} }, +{ {2,2,1,2,1,1,0,0, 29, 1} }, +{ {2,2,1,2,1,1,0,1, 26, 1} }, +{ {2,2,1,2,1,1,0,2, 23, 14} }, +{ {2,2,1,2,1,1,1,0, 28, 1} }, +{ {2,2,1,2,1,1,1,1, 5, 4} }, +{ {2,2,1,2,1,1,1,2, 22, 28} }, +{ {2,2,1,2,1,1,2,0, 27, 1} }, +{ {2,2,1,2,1,1,2,1, 25, 10} }, +{ {2,2,1,2,1,1,2,2, 20, 23} }, +{ {2,2,1,2,1,2,0,0, 18, 1} }, +{ {2,2,1,2,1,2,0,1, 15, 1} }, +{ {2,2,1,2,1,2,0,2, 6, 8} }, +{ {2,2,1,2,1,2,1,0, 17, 1} }, +{ {2,2,1,2,1,2,1,1, 14, 4} }, +{ {2,2,1,2,1,2,1,2, 5, 8} }, +{ {2,2,1,2,1,2,2,0, 16, 1} }, +{ {2,2,1,2,1,2,2,1, 13, 1} }, +{ {2,2,1,2,1,2,2,2, 4, 8} }, +{ {2,2,1,2,2,0,0,0, 28, 30} }, +{ {2,2,1,2,2,0,0,1, 36, 21} }, +{ {2,2,1,2,2,0,0,2, 35, 1} }, +{ {2,2,1,2,2,0,1,0, 37, 21} }, +{ {2,2,1,2,2,0,1,1, 28, 44} }, +{ {2,2,1,2,2,0,1,2, 34, 1} }, +{ {2,2,1,2,2,0,2,0, 34, 21} }, +{ {2,2,1,2,2,0,2,1, 35, 21} }, +{ {2,2,1,2,2,0,2,2, 33, 4} }, +{ {2,2,1,2,2,1,0,0, 24, 1} }, +{ {2,2,1,2,2,1,0,1, 23, 1} }, +{ {2,2,1,2,2,1,0,2, 21, 1} }, +{ {2,2,1,2,2,1,1,0, 23, 21} }, +{ {2,2,1,2,2,1,1,1, 22, 5} }, +{ {2,2,1,2,2,1,1,2, 20, 1} }, +{ {2,2,1,2,2,1,2,0, 21, 21} }, +{ {2,2,1,2,2,1,2,1, 20, 21} }, +{ {2,2,1,2,2,1,2,2, 19, 1} }, +{ {2,2,1,2,2,2,0,0, 8, 43} }, +{ {2,2,1,2,2,2,0,1, 6, 20} }, +{ {2,2,1,2,2,2,0,2, 3, 9} }, +{ {2,2,1,2,2,2,1,0, 8, 20} }, +{ {2,2,1,2,2,2,1,1, 5, 20} }, +{ {2,2,1,2,2,2,1,2, 2, 9} }, +{ {2,2,1,2,2,2,2,0, 7, 2} }, +{ {2,2,1,2,2,2,2,1, 4, 2} }, +{ {2,2,1,2,2,2,2,2, 1, 3} }, +{ {2,2,2,0,0,0,0,0, 5, 5} }, +{ {2,2,2,0,0,0,0,1, 26, 0} }, +{ {2,2,2,0,0,0,0,2, 25, 11} }, +{ {2,2,2,0,0,0,1,0, 28, 0} }, +{ {2,2,2,0,0,0,1,1, 29, 0} }, +{ {2,2,2,0,0,0,1,2, 27, 0} }, +{ {2,2,2,0,0,0,2,0, 22, 31} }, +{ {2,2,2,0,0,0,2,1, 23, 19} }, +{ {2,2,2,0,0,0,2,2, 20, 26} }, +{ {2,2,2,0,0,1,0,0, 28, 19} }, +{ {2,2,2,0,0,1,0,1, 29, 19} }, +{ {2,2,2,0,0,1,0,2, 27, 19} }, +{ {2,2,2,0,0,1,1,0, 31, 0} }, +{ {2,2,2,0,0,1,1,1, 32, 5} }, +{ {2,2,2,0,0,1,1,2, 30, 0} }, +{ {2,2,2,0,0,1,2,0, 23, 41} }, +{ {2,2,2,0,0,1,2,1, 24, 19} }, +{ {2,2,2,0,0,1,2,2, 21, 26} }, +{ {2,2,2,0,0,2,0,0, 22, 4} }, +{ {2,2,2,0,0,2,0,1, 23, 0} }, +{ {2,2,2,0,0,2,0,2, 20, 20} }, +{ {2,2,2,0,0,2,1,0, 23, 20} }, +{ {2,2,2,0,0,2,1,1, 24, 0} }, +{ {2,2,2,0,0,2,1,2, 21, 20} }, +{ {2,2,2,0,0,2,2,0, 20, 0} }, +{ {2,2,2,0,0,2,2,1, 21, 0} }, +{ {2,2,2,0,0,2,2,2, 19, 0} }, +{ {2,2,2,0,1,0,0,0, 17, 22} }, +{ {2,2,2,0,1,0,0,1, 39, 0} }, +{ {2,2,2,0,1,0,0,2, 38, 0} }, +{ {2,2,2,0,1,0,1,0, 41, 22} }, +{ {2,2,2,0,1,0,1,1, 42, 4} }, +{ {2,2,2,0,1,0,1,2, 40, 0} }, +{ {2,2,2,0,1,0,2,0, 28, 22} }, +{ {2,2,2,0,1,0,2,1, 36, 19} }, +{ {2,2,2,0,1,0,2,2, 35, 26} }, +{ {2,2,2,0,1,1,0,0, 41, 39} }, +{ {2,2,2,0,1,1,0,1, 42, 31} }, +{ {2,2,2,0,1,1,0,2, 40, 19} }, +{ {2,2,2,0,1,1,1,0, 43, 11} }, +{ {2,2,2,0,1,1,1,1, 10, 11} }, +{ {2,2,2,0,1,1,1,2, 26, 11} }, +{ {2,2,2,0,1,1,2,0, 37, 19} }, +{ {2,2,2,0,1,1,2,1, 28, 10} }, +{ {2,2,2,0,1,1,2,2, 34, 26} }, +{ {2,2,2,0,1,2,0,0, 28, 39} }, +{ {2,2,2,0,1,2,0,1, 36, 0} }, +{ {2,2,2,0,1,2,0,2, 35, 20} }, +{ {2,2,2,0,1,2,1,0, 37, 0} }, +{ {2,2,2,0,1,2,1,1, 28, 29} }, +{ {2,2,2,0,1,2,1,2, 34, 20} }, +{ {2,2,2,0,1,2,2,0, 34, 0} }, +{ {2,2,2,0,1,2,2,1, 35, 0} }, +{ {2,2,2,0,1,2,2,2, 33, 0} }, +{ {2,2,2,0,2,0,0,0, 14, 5} }, +{ {2,2,2,0,2,0,0,1, 15, 0} }, +{ {2,2,2,0,2,0,0,2, 13, 0} }, +{ {2,2,2,0,2,0,1,0, 17, 0} }, +{ {2,2,2,0,2,0,1,1, 18, 0} }, +{ {2,2,2,0,2,0,1,2, 16, 0} }, +{ {2,2,2,0,2,0,2,0, 5, 13} }, +{ {2,2,2,0,2,0,2,1, 6, 13} }, +{ {2,2,2,0,2,0,2,2, 4, 13} }, +{ {2,2,2,0,2,1,0,0, 17, 19} }, +{ {2,2,2,0,2,1,0,1, 18, 19} }, +{ {2,2,2,0,2,1,0,2, 16, 19} }, +{ {2,2,2,0,2,1,1,0, 18, 13} }, +{ {2,2,2,0,2,1,1,1, 17, 13} }, +{ {2,2,2,0,2,1,1,2, 16, 13} }, +{ {2,2,2,0,2,1,2,0, 8, 40} }, +{ {2,2,2,0,2,1,2,1, 8, 13} }, +{ {2,2,2,0,2,1,2,2, 7, 27} }, +{ {2,2,2,0,2,2,0,0, 5, 21} }, +{ {2,2,2,0,2,2,0,1, 6, 21} }, +{ {2,2,2,0,2,2,0,2, 4, 3} }, +{ {2,2,2,0,2,2,1,0, 8, 21} }, +{ {2,2,2,0,2,2,1,1, 8, 32} }, +{ {2,2,2,0,2,2,1,2, 7, 21} }, +{ {2,2,2,0,2,2,2,0, 2, 12} }, +{ {2,2,2,0,2,2,2,1, 3, 13} }, +{ {2,2,2,0,2,2,2,2, 1, 2} }, +{ {2,2,2,1,0,0,0,0, 10, 11} }, +{ {2,2,2,1,0,0,0,1, 43, 11} }, +{ {2,2,2,1,0,0,0,2, 26, 11} }, +{ {2,2,2,1,0,0,1,0, 42, 31} }, +{ {2,2,2,1,0,0,1,1, 41, 39} }, +{ {2,2,2,1,0,0,1,2, 40, 19} }, +{ {2,2,2,1,0,0,2,0, 28, 10} }, +{ {2,2,2,1,0,0,2,1, 37, 41} }, +{ {2,2,2,1,0,0,2,2, 34, 26} }, +{ {2,2,2,1,0,1,0,0, 42, 4} }, +{ {2,2,2,1,0,1,0,1, 41, 22} }, +{ {2,2,2,1,0,1,0,2, 40, 0} }, +{ {2,2,2,1,0,1,1,0, 39, 0} }, +{ {2,2,2,1,0,1,1,1, 17, 22} }, +{ {2,2,2,1,0,1,1,2, 38, 0} }, +{ {2,2,2,1,0,1,2,0, 36, 41} }, +{ {2,2,2,1,0,1,2,1, 28, 22} }, +{ {2,2,2,1,0,1,2,2, 35, 26} }, +{ {2,2,2,1,0,2,0,0, 28, 29} }, +{ {2,2,2,1,0,2,0,1, 37, 20} }, +{ {2,2,2,1,0,2,0,2, 34, 20} }, +{ {2,2,2,1,0,2,1,0, 36, 20} }, +{ {2,2,2,1,0,2,1,1, 28, 39} }, +{ {2,2,2,1,0,2,1,2, 35, 20} }, +{ {2,2,2,1,0,2,2,0, 35, 0} }, +{ {2,2,2,1,0,2,2,1, 34, 0} }, +{ {2,2,2,1,0,2,2,2, 33, 5} }, +{ {2,2,2,1,1,0,0,0, 32, 5} }, +{ {2,2,2,1,1,0,0,1, 31, 0} }, +{ {2,2,2,1,1,0,0,2, 30, 0} }, +{ {2,2,2,1,1,0,1,0, 29, 19} }, +{ {2,2,2,1,1,0,1,1, 28, 19} }, +{ {2,2,2,1,1,0,1,2, 27, 19} }, +{ {2,2,2,1,1,0,2,0, 24, 19} }, +{ {2,2,2,1,1,0,2,1, 23, 41} }, +{ {2,2,2,1,1,0,2,2, 21, 26} }, +{ {2,2,2,1,1,1,0,0, 29, 0} }, +{ {2,2,2,1,1,1,0,1, 28, 0} }, +{ {2,2,2,1,1,1,0,2, 27, 0} }, +{ {2,2,2,1,1,1,1,0, 26, 0} }, +{ {2,2,2,1,1,1,1,1, 5, 5} }, +{ {2,2,2,1,1,1,1,2, 25, 11} }, +{ {2,2,2,1,1,1,2,0, 23, 19} }, +{ {2,2,2,1,1,1,2,1, 22, 31} }, +{ {2,2,2,1,1,1,2,2, 20, 26} }, +{ {2,2,2,1,1,2,0,0, 24, 0} }, +{ {2,2,2,1,1,2,0,1, 23, 20} }, +{ {2,2,2,1,1,2,0,2, 21, 20} }, +{ {2,2,2,1,1,2,1,0, 23, 0} }, +{ {2,2,2,1,1,2,1,1, 22, 4} }, +{ {2,2,2,1,1,2,1,2, 20, 20} }, +{ {2,2,2,1,1,2,2,0, 21, 0} }, +{ {2,2,2,1,1,2,2,1, 20, 0} }, +{ {2,2,2,1,1,2,2,2, 19, 0} }, +{ {2,2,2,1,2,0,0,0, 17, 13} }, +{ {2,2,2,1,2,0,0,1, 18, 13} }, +{ {2,2,2,1,2,0,0,2, 16, 13} }, +{ {2,2,2,1,2,0,1,0, 18, 19} }, +{ {2,2,2,1,2,0,1,1, 17, 19} }, +{ {2,2,2,1,2,0,1,2, 16, 19} }, +{ {2,2,2,1,2,0,2,0, 8, 13} }, +{ {2,2,2,1,2,0,2,1, 8, 40} }, +{ {2,2,2,1,2,0,2,2, 7, 13} }, +{ {2,2,2,1,2,1,0,0, 18, 0} }, +{ {2,2,2,1,2,1,0,1, 17, 0} }, +{ {2,2,2,1,2,1,0,2, 16, 0} }, +{ {2,2,2,1,2,1,1,0, 15, 0} }, +{ {2,2,2,1,2,1,1,1, 14, 5} }, +{ {2,2,2,1,2,1,1,2, 13, 0} }, +{ {2,2,2,1,2,1,2,0, 6, 13} }, +{ {2,2,2,1,2,1,2,1, 5, 13} }, +{ {2,2,2,1,2,1,2,2, 4, 13} }, +{ {2,2,2,1,2,2,0,0, 8, 32} }, +{ {2,2,2,1,2,2,0,1, 8, 21} }, +{ {2,2,2,1,2,2,0,2, 7, 3} }, +{ {2,2,2,1,2,2,1,0, 6, 21} }, +{ {2,2,2,1,2,2,1,1, 5, 21} }, +{ {2,2,2,1,2,2,1,2, 4, 3} }, +{ {2,2,2,1,2,2,2,0, 3, 12} }, +{ {2,2,2,1,2,2,2,1, 2, 12} }, +{ {2,2,2,1,2,2,2,2, 1, 2} }, +{ {2,2,2,2,0,0,0,0, 9, 4} }, +{ {2,2,2,2,0,0,0,1, 10, 0} }, +{ {2,2,2,2,0,0,0,2, 5, 15} }, +{ {2,2,2,2,0,0,1,0, 10, 1} }, +{ {2,2,2,2,0,0,1,1, 11, 0} }, +{ {2,2,2,2,0,0,1,2, 8, 15} }, +{ {2,2,2,2,0,0,2,0, 5, 18} }, +{ {2,2,2,2,0,0,2,1, 8, 18} }, +{ {2,2,2,2,0,0,2,2, 2, 6} }, +{ {2,2,2,2,0,1,0,0, 10, 18} }, +{ {2,2,2,2,0,1,0,1, 11, 18} }, +{ {2,2,2,2,0,1,0,2, 8, 16} }, +{ {2,2,2,2,0,1,1,0, 12, 0} }, +{ {2,2,2,2,0,1,1,1, 10, 15} }, +{ {2,2,2,2,0,1,1,2, 6, 15} }, +{ {2,2,2,2,0,1,2,0, 6, 18} }, +{ {2,2,2,2,0,1,2,1, 8, 17} }, +{ {2,2,2,2,0,1,2,2, 3, 6} }, +{ {2,2,2,2,0,2,0,0, 5, 1} }, +{ {2,2,2,2,0,2,0,1, 8, 1} }, +{ {2,2,2,2,0,2,0,2, 2, 15} }, +{ {2,2,2,2,0,2,1,0, 6, 1} }, +{ {2,2,2,2,0,2,1,1, 8, 14} }, +{ {2,2,2,2,0,2,1,2, 3, 14} }, +{ {2,2,2,2,0,2,2,0, 4, 1} }, +{ {2,2,2,2,0,2,2,1, 7, 1} }, +{ {2,2,2,2,0,2,2,2, 1, 7} }, +{ {2,2,2,2,1,0,0,0, 10, 15} }, +{ {2,2,2,2,1,0,0,1, 12, 1} }, +{ {2,2,2,2,1,0,0,2, 6, 15} }, +{ {2,2,2,2,1,0,1,0, 11, 15} }, +{ {2,2,2,2,1,0,1,1, 10, 18} }, +{ {2,2,2,2,1,0,1,2, 8, 16} }, +{ {2,2,2,2,1,0,2,0, 8, 17} }, +{ {2,2,2,2,1,0,2,1, 6, 18} }, +{ {2,2,2,2,1,0,2,2, 3, 7} }, +{ {2,2,2,2,1,1,0,0, 11, 16} }, +{ {2,2,2,2,1,1,0,1, 10, 1} }, +{ {2,2,2,2,1,1,0,2, 8, 15} }, +{ {2,2,2,2,1,1,1,0, 10, 0} }, +{ {2,2,2,2,1,1,1,1, 9, 4} }, +{ {2,2,2,2,1,1,1,2, 5, 15} }, +{ {2,2,2,2,1,1,2,0, 8, 18} }, +{ {2,2,2,2,1,1,2,1, 5, 18} }, +{ {2,2,2,2,1,1,2,2, 2, 6} }, +{ {2,2,2,2,1,2,0,0, 8, 14} }, +{ {2,2,2,2,1,2,0,1, 6, 1} }, +{ {2,2,2,2,1,2,0,2, 3, 15} }, +{ {2,2,2,2,1,2,1,0, 8, 1} }, +{ {2,2,2,2,1,2,1,1, 5, 1} }, +{ {2,2,2,2,1,2,1,2, 2, 15} }, +{ {2,2,2,2,1,2,2,0, 7, 17} }, +{ {2,2,2,2,1,2,2,1, 4, 1} }, +{ {2,2,2,2,1,2,2,2, 1, 7} }, +{ {2,2,2,2,2,0,0,0, 5, 0} }, +{ {2,2,2,2,2,0,0,1, 6, 0} }, +{ {2,2,2,2,2,0,0,2, 4, 0} }, +{ {2,2,2,2,2,0,1,0, 8, 0} }, +{ {2,2,2,2,2,0,1,1, 8, 19} }, +{ {2,2,2,2,2,0,1,2, 7, 0} }, +{ {2,2,2,2,2,0,2,0, 2, 18} }, +{ {2,2,2,2,2,0,2,1, 3, 19} }, +{ {2,2,2,2,2,0,2,2, 1, 6} }, +{ {2,2,2,2,2,1,0,0, 8, 19} }, +{ {2,2,2,2,2,1,0,1, 8, 0} }, +{ {2,2,2,2,2,1,0,2, 7, 16} }, +{ {2,2,2,2,2,1,1,0, 6, 0} }, +{ {2,2,2,2,2,1,1,1, 5, 0} }, +{ {2,2,2,2,2,1,1,2, 4, 0} }, +{ {2,2,2,2,2,1,2,0, 3, 18} }, +{ {2,2,2,2,2,1,2,1, 2, 18} }, +{ {2,2,2,2,2,1,2,2, 1, 6} }, +{ {2,2,2,2,2,2,0,0, 2, 0} }, +{ {2,2,2,2,2,2,0,1, 3, 0} }, +{ {2,2,2,2,2,2,0,2, 1, 1} }, +{ {2,2,2,2,2,2,1,0, 3, 1} }, +{ {2,2,2,2,2,2,1,1, 2, 0} }, +{ {2,2,2,2,2,2,1,2, 1, 1} }, +{ {2,2,2,2,2,2,2,0, 1, 0} }, +{ {2,2,2,2,2,2,2,1, 1, 0} }, +{ {2,2,2,2,2,2,2,2, 0, 0} }, +}; + +#endif // CASES_TABLE_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h new file mode 100644 index 00000000000..de722c9794e --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -0,0 +1,69 @@ +#ifndef COMBINATIONS_H +#define COMBINATIONS_H + +#include + +typedef std::array Cube; + +const Cube combinations[] = { +0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1, +0,0,0,0,0,0,1,1, +0,0,0,0,0,0,1,2, +0,0,0,0,0,1,1,0, +0,0,0,0,0,1,1,1, +0,0,0,0,0,1,1,2, +0,0,0,0,0,1,2,0, +0,0,0,0,0,1,2,1, +0,0,0,0,1,1,1,1, +0,0,0,0,1,1,1,2, +0,0,0,0,1,1,2,2, +0,0,0,0,1,2,2,1, +0,0,0,1,0,1,1,0, +0,0,0,1,0,1,1,1, +0,0,0,1,0,1,1,2, +0,0,0,1,0,1,2,0, +0,0,0,1,0,1,2,1, +0,0,0,1,0,1,2,2, +0,0,0,1,1,0,0,0, +0,0,0,1,1,0,0,1, +0,0,0,1,1,0,0,2, +0,0,0,1,1,0,1,1, +0,0,0,1,1,0,1,2, +0,0,0,1,1,0,2,2, +0,0,0,1,1,1,1,0, +0,0,0,1,1,1,1,2, +0,0,0,1,1,1,2,0, +0,0,0,1,1,1,2,1, +0,0,0,1,1,1,2,2, +0,0,0,1,1,2,2,0, +0,0,0,1,1,2,2,1, +0,0,0,1,1,2,2,2, +0,0,0,1,2,0,0,0, +0,0,0,1,2,0,0,1, +0,0,0,1,2,0,0,2, +0,0,0,1,2,0,1,2, +0,0,0,1,2,0,2,1, +0,0,0,1,2,1,1,0, +0,0,0,1,2,1,1,2, +0,0,0,1,2,1,2,0, +0,0,0,1,2,1,2,1, +0,0,0,1,2,1,2,2, +0,0,0,1,2,2,2,1, +0,0,1,1,1,1,0,0, +0,0,1,1,1,1,0,2, +0,0,1,1,1,1,2,2, +0,0,1,1,1,2,0,2, +0,0,1,1,1,2,2,0, +0,0,1,2,1,2,0,0, +0,0,1,2,1,2,0,1, +0,0,1,2,1,2,2,1, +0,0,1,2,2,1,0,0, +0,0,1,2,2,1,0,1, +0,1,1,0,1,0,0,1, +0,1,1,0,1,0,0,2, +0,1,1,0,1,2,2,1, +0,1,1,2,1,2,2,0, +}; + +#endif // COMBINATIONS_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h new file mode 100644 index 00000000000..7347b7ef1e3 --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -0,0 +1,33 @@ +#ifndef COORDINATES_H +#define COORDINATES_H + +#include + +typedef std::array Coordinates; +constexpr Coordinates coordinates[8] = { 0, 0, 0, + 1, 0, 0, + 0, 1, 0, + 1, 1, 0, + 0, 0, 1, + 1, 0, 1, + 0, 1, 1, + 1, 1, 1 }; + +Coordinates operator-(Coordinates b, Coordinates a) { + return { b[0]-a[0], b[1]-a[1], b[2]-a[2] }; +} + +Coordinates cross(Coordinates a, Coordinates 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] }; +} + +Coordinates square(Coordinates c) { + return { c[0]*c[0], c[1]*c[1], c[2]*c[2] }; +} + +int dist(Coordinates a, Coordinates b) { + auto s = square(b - a); + return s[0] + s[1] + s[2]; +} + +#endif // COORDINATES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h new file mode 100644 index 00000000000..b4e0b7c1545 --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h @@ -0,0 +1,38 @@ +#ifndef CUBE_H +#define CUBE_H + +#include +#include +#include +#include + +typedef std::array Cube; + +inline constexpr Cube convert_to_cube(unsigned int n) { + assert(n < (1<<24)); + return { + (unsigned char)((n & 070000000)>>21), (unsigned char)((n & 007000000)>>18), + (unsigned char)((n & 000700000)>>15), (unsigned char)((n & 000070000)>>12), + (unsigned char)((n & 000007000)>> 9), (unsigned char)((n & 000000700)>> 6), + (unsigned char)((n & 000000070)>> 3), (unsigned char)((n & 000000007)>> 0), + }; +} + +// User-defined literal operator. Given an integer in octal notation, like +// 01234567, gives the cube with the same colors. For example, `01234567_c` +// is `Cube{0, 1, 2, 3, 4, 5, 6, 7}`. +inline constexpr Cube operator"" _c ( unsigned long long n ) +{ + assert(n < (1<<24)); + return convert_to_cube(unsigned(n)); +} + +inline std::string config_name(const Cube cube) { + std::stringstream filename_prefix_ss; + for(int j = 0; j < 8; ++j) { + filename_prefix_ss << int(cube[j]); + } + return filename_prefix_ss.str(); +} + +#endif // CUBE_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h new file mode 100644 index 00000000000..797a7c17d4e --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -0,0 +1,61 @@ +#ifndef CUBE_ISOMETRIES_H +#define CUBE_ISOMETRIES_H + +#include + +typedef std::array Permutation; + +Permutation cube_isometries[] = { +0,1,2,3,4,5,6,7, +1,0,3,2,5,4,7,6, +4,5,0,1,6,7,2,3, +5,4,1,0,7,6,3,2, +6,7,4,5,2,3,0,1, +7,6,5,4,3,2,1,0, +2,3,6,7,0,1,4,5, +3,2,7,6,1,0,5,4, +1,5,3,7,0,4,2,6, +5,1,7,3,4,0,6,2, +5,4,7,6,1,0,3,2, +4,5,6,7,0,1,2,3, +4,0,6,2,5,1,7,3, +0,4,2,6,1,5,3,7, +1,3,0,2,5,7,4,6, +3,1,2,0,7,5,6,4, +3,2,1,0,7,6,5,4, +2,3,0,1,6,7,4,5, +2,0,3,1,6,4,7,5, +0,2,1,3,4,6,5,7, +1,0,5,4,3,2,7,6, +0,1,4,5,2,3,6,7, +7,3,5,1,6,2,4,0, +3,7,1,5,2,6,0,4, +7,6,3,2,5,4,1,0, +6,7,2,3,4,5,0,1, +2,6,0,4,3,7,1,5, +6,2,4,0,7,3,5,1, +4,6,5,7,0,2,1,3, +6,4,7,5,2,0,3,1, +7,5,6,4,3,1,2,0, +5,7,4,6,1,3,0,2, +0,4,1,5,2,6,3,7, +4,0,5,1,6,2,7,3, +3,1,7,5,2,0,6,4, +1,3,5,7,0,2,4,6, +5,7,1,3,4,6,0,2, +7,5,3,1,6,4,2,0, +3,7,2,6,1,5,0,4, +7,3,6,2,5,1,4,0, +0,2,4,6,1,3,5,7, +2,0,6,4,3,1,7,5, +5,1,4,0,7,3,6,2, +1,5,0,4,3,7,2,6, +6,2,7,3,4,0,5,1, +2,6,3,7,0,4,1,5, +6,4,2,0,7,5,3,1, +4,6,0,2,5,7,1,3, +}; + +constexpr int num_isometries = 48; + +#endif // CUBE_ISOMETRIES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h new file mode 100644 index 00000000000..9c8ff863a8e --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -0,0 +1,654 @@ +#ifndef TRIPLE_LIGNES_H +#define TRIPLE_LIGNES_H + +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_3 Point_3; +typedef Point_3 P; +typedef std::vector Polyline; +typedef std::vector Polylines; + +typedef Polylines (*create_polylines_fct)(const int /* prec */); + + +#include +#include + +#include + +//extern boost::unordered_map create_polylines_fcts; + +template +Polyline create_polyline(const double start, + const double end, + P starting_point, + P ending_point, + Functor f, + const int prec) +{ + Polyline poly; + poly.reserve(prec + 1); + poly.push_back(std::move(starting_point)); +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "new poly\n"; + std::cerr << " poly.push_back(" << poly.back() << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + const double step = (end - start) / prec; + const double stop = end - step / 2; + const bool step_is_positive = (step > 0); + for (double t = start + step; + (step_is_positive ? t < stop : t > stop); + t += step) + { + poly.push_back(f(t)); +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << " poly.push_back(" << poly.back() << ")\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + } + poly.push_back(std::move(ending_point)); +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << " poly.push_back(" << poly.back() << ")\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + return poly; +} + +template +Polyline create_polyline(const double start, + const double end, + P starting_point, + Functor f, + const int prec) +{ + return create_polyline(start, end, starting_point, f(end), f, prec); +} + +template +Polyline create_polyline(const double start, + const double end, + Functor f, + const int prec) +{ + return create_polyline(start, end, f(start), f(end), f, prec); +} + + +/* + c6 ------- c7 + /| /| + / | / | + / | / | + c4 ------- c5 | + | c2 ----|-- c3 + | / | / + | / | / + |/ |/ + c0 ------- c1 + + ci = color at the corner + + The coordinates of the unit cube are given by: + + for(int z = 0; z <=1 ; ++z) + for(int y = 0; y <=1 ; ++y) + for(int x = 0; x <=1 ; ++x) + cube.emplace_back(x, y, z); +*/ + + +// +// One internal corner +// + + // 00001221 + // corner is (1/2,1/2,2/3) + // curve_1 : x=1/2, y=[0,1/2], z=2/3 + // curve_1' : x=1/2, y=[1/2,1], z=2/3 + // curve_2 : x=[0,1/2], y=1/2, z=2/3 + // curve_2' : x=[1/2,1], y=1/2, z=2/3 + // curve_3 : x=1/2, y=1/2, z=[2/3,1] +Polylines poly00001221(const int /* no sampling for segments */) +{ + P corner{ 1. / 2, 1. / 2, 2. / 3 }; + P a{ 1. / 2, 0, 2. / 3 }; + P b{ 1. / 2, 1, 2. / 3 }; + P c{ 0, 1. / 2, 2. / 3 }; + P d{ 1, 1. / 2, 2. / 3 }; + P e{ 1, 1. / 2, 1 }; + + return + { + { a, corner}, // segment curve_1 + { corner, b}, // segment curve_1' + { corner, c}, // segment curve_2 + { corner, d}, // segment curve_2' + { corner, e}, // segment curve_3 + }; +} +// 00111202 +// corner is (1/2,1/2,2/3) +// curve_1 : x=1/2,y=[0,1/2],z=2/3 +// curve_1' : x=1/2,y=[1/2,1],z=2/3 +// curve_2 : x=1/(3*z),y=1/2,z=[2/3,1] +// ADDED curve_2' : x=1/(3*z),y=1/2,z=[1/3,2/3] +// curve_3 : x=(2*z−1)/z,y=1/2, z=[1/2,2/3] +// REMOVED curve_3' : x=(2*z−1)/z,y=1/2, z=[2/3,1] +Polylines poly00111202(const int prec = 10) +{ + P a{ 1. / 2, 0. , 2. / 3 }; + P corner{ 1. / 2, 1. / 2, 2. / 3 }; + P b{ 1. / 2, 1. , 2. / 3 }; + + auto f_curve_2 = [](double z) { return P(1. / (3 * z), 1. / 2, z); }; + auto f_curve_3 = [](double z) { return P((2. * z - 1) / z, 1. / 2, z); }; + + return + { + { a, corner}, // segment curve_1 + { corner, b}, // segment curve_1' + create_polyline(2. / 3, 1 , corner, f_curve_2, prec), // curve_2 + create_polyline(2. / 3, 1. / 3, corner, f_curve_2, prec), // curve_2' ADDED + create_polyline(2. / 3, 1. / 2, corner, f_curve_3, prec), // curve_3 + // create_polyline(2./3, 1. , corner, f_curve_3, prec), // curve_3' REMOVED + }; +} + +// 01101001 +// corner is (1/2,1/2,1/2) +// curve_1 : x=1/2, y=1/2, z=[0,1/2] +// curve_1' : x=1/2, y=1/2, z=[1/2,1] +// curve_2 : x=1/2, y=[0,1/2], z=1/2 +// curve_2' : x=1/2, y=[1/2,1], z=1/2 +// curve_3 : x=[0,1/2], y=1/2, z=1/2 +// curve_3' : x=[1/2,1], y=1/2, z=1/2 +Polylines poly01101001(const int /* no sampling for segments */) +{ + P corner{ 1. / 2, 1. / 2, 1. / 2 }; + P a{ 1. / 2, 1. / 2, 0 }; + P b{ 1. / 2, 1. / 2, 1 }; + P c{ 1. / 2, 0, 1. / 2 }; + P d{ 1. / 2, 1, 1. / 2 }; + P e{ 0, 1. / 2, 1. / 2 }; + P f{ 1, 1. / 2, 1. / 2 }; + + return + { + { a, corner}, // segment curve_1 + { corner, b}, // segment curve_1' + { corner, c}, // segment curve_2 + { corner, d}, // segment curve_2' + { corner, e}, // segment curve_3 + { corner, f}, // segment curve_3' + }; +} + +// +// Two curves +// +Polylines poly00011022(const int prec = 10) +{ + // x = (3*z^2-2*z)/(3*z^2-1), y = 1/(3*z), z = [1/3,1/2] + // x = (3*z^2-2*z)/(3*z^2-1), y = 1/(3*z), z = [2/3,1] + auto f = [](double z) {return P(z * (3 * z - 2) / (3 * z * z - 1), + 1 / (3 * z), + z); }; + return { + create_polyline(1. / 3, 1. / 2, f, prec), + create_polyline(2. / 3, 1. , f, prec), + }; +} + +// 00011221 +// curve_1 : x = ]1/2,1], y = (3 * x * x - sqrt(9 * x * x * x * x - 30 * x * x * x + 45 * x * x - 24 * x + 4) + 3 * x - 2)/(6 * x * (2 * x - 1)), z = 1./(3*x+3*y-6*x*y) +// point limit x = 1/2, y = 0, z = 2/3 +// curve_2 : x = ]0,1/3], y = (3 * x * x + sqrt(9 * x * x * x * x - 30 * x * x * x + 45 * x * x - 24 * x + 4) + 3 * x - 2)/(6 * x * (2 * x - 1)), z = 1./(3*x+3*y-6*x*y) +// point limit x = 0, y = 1/2, z = 2/3 +Polylines poly00011221(const int prec = 10) +{ + auto sq_exp = [](double x) { + return sqrt(9 * x * x * x * x - 30 * x * x * x + 45 * x * x - 24 * x + 4); + }; + auto y1 = [sq_exp](double x) { return (3 * x * x - sq_exp(x) + 3 * x - 2) / (6 * x * (2 * x - 1)); }; + P corner1 = { 1. / 2, 0, 2. / 3 }; + auto y2 = [sq_exp](double x) { return (3 * x * x + sq_exp(x) + 3 * x - 2) / (6 * x * (2 * x - 1)); }; + P corner2 = { 0, 1. / 2, 2. / 3 }; + auto z = [](double x, double y) { return 1. / (3 * x + 3 * y - 6 * x * y); }; + return { + create_polyline(1. / 2, 1, corner1, + [y1, z](double x) { return P(x, y1(x), z(x, y1(x))); }, + prec), + create_polyline(0, 1. / 3, corner2, + [y2, z](double x) { return P(x, y2(x), z(x, y2(x))); }, + prec) + }; +} + +// 00011222 +// curve_1 : x = ]1/2,1[, y = (3 * x * x - sqrt(9 * x * x * x * x - 18 * x * x * x + 25 *x * x - 16 * x + 4) + x - 2)/(6 * (x - 1) * x), z = 1./(3*x+3*y-3*x*y) +// point limit x = 1/2, y = 1, z=1/3 +// point limit x = 1, y = 1/2, z=1/3 +// curve_2 : x = ]0,1/2], y = (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 *x * x - 16 * x + 4) + x - 2)/(6 * (x - 1) * x), z = 1./(3*x+3*y-3*x*y) +// point limit x = 0, y=1/2, z=2/3 +Polylines poly00011222(const int prec = 10) +{ + auto sq_exp = [](double x) { + return sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4); + }; + auto y1 = [sq_exp](double x) { return (3 * x * x - sq_exp(x) + x - 2) / (6 * (x - 1) * x); }; + P corner1 = { 1. / 2, 1, 1. / 3 }; + P corner1_bis = { 1, 1. / 2, 1. / 3 }; + auto y2 = [sq_exp](double x) { return (3 * x * x + sq_exp(x) + x - 2) / (6 * (x - 1) * x); }; + P corner2 = { 0, 1. / 2, 2. / 3 }; + auto z = [](double x, double y) { return 1. / (3 * x + 3 * y - 3 * x * y); }; + return { + create_polyline(1. / 2, 1, corner1, corner1_bis, + [y1, z](double x) { return P(x, y1(x), z(x, y1(x))); }, + prec), + create_polyline(0, 1. / 2, corner2, + [y2, z](double x) { return P(x, y2(x), z(x, y2(x))); }, + prec) + }; +} + +// 00121200 +// curve_1 : x = 1/2, y = (3*z-2)/(6*z-3), z = [0,1/3] +// curve_1' : x = 1/2, y = (3*z-2)/(6*z-3), z = [2/3,1] +Polylines poly00121200(const int prec = 10) +{ + auto y = [](double z) { return (3 * z - 2) / (6 * z - 3); }; + return { + create_polyline(0, 1. / 3, + [y](double z) { return P(1. / 2, y(z), z); }, + prec), + create_polyline(2. / 3, 1, + [y](double z) { return P(1. / 2, y(z), z); }, + prec) + }; +} + +// 00121221 +// curve_1 : x = 1/2, y = (3*z-2)/(3*z-3), z = [0,2/3] +// curve_2 : x = 1/2, y = z/(3*z-1), z = [1/2,1] +Polylines poly00121221(const int prec = 10) +{ + auto y1 = [](double z) { return (3 * z - 2) / (3 * z - 3); }; + auto y2 = [](double z) { return z / (3 * z - 1); }; + return { + create_polyline(0, 2. / 3, + [y1](double z) { return P(1. / 2, y1(z), z); }, + prec), + create_polyline(1. / 2, 1, + [y2](double z) { return P(1. / 2, y2(z), z); }, + prec) + }; +} + +// 00122100 +// curve_1 : x = 1/2, y = (3*z-2)/(6*z-3), z = [0,1/3] +// curve_1' : x = 1/2, y = (3*z-2)/(6*z-3), z = [2/3,1] +Polylines poly00122100(const int prec = 10) +{ + auto y = [](double z) { return (3 * z - 2) / (6 * z - 3); }; + return { + create_polyline(0, 1. / 3, + [y](double z) { return P(1. / 2, y(z), z); }, + prec), + create_polyline(2. / 3, 1, + [y](double z) { return P(1. / 2, y(z), z); }, + prec) + }; +} + +// 00122101 +// curve_1 : x = [1/3,1/2] , y = (-sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 5 x + 3)/(6 (x - 1)^2), x^2 - 3 x + 1!=0, +// z = (-sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 7 x + 3)/(6 (x^2 - 3 x + 1)) +// curve_2 : x = [1./2,1[ , y = ( sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 5 x + 3)/(6 (x - 1)^2), +// z = ( sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 7 x + 3)/(6 (x^2 - 3 x + 1)) +// point limit of curve_2 when x -> 1 x = 1, y = 1/2, z = 1/3 +Polylines poly00122101(const int prec = 10) +{ + auto sq_exp = [](double x) { + return sqrt(24 * x * x * x - 35 * x * x + 18 * x - 3); + }; + auto y1 = [sq_exp](double x) { return (-sq_exp(x) - 5 * x + 3) / (6 * CGAL::square(x - 1)); }; + auto z1 = [sq_exp](double x) { return (-sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; + auto y2 = [sq_exp](double x) { return (sq_exp(x) - 5 * x + 3) / (6 * CGAL::square(x - 1)); }; + auto z2 = [sq_exp](double x) { return (sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; + P corner{ 1., .5, 1. / 3 }; + return { + create_polyline(1. / 3, 1. / 2, + [y1, z1](double x) { return P(x, y1(x), z1(x)); }, + prec), + create_polyline(1., 1. / 2, corner, + [y2, z2](double x) { return P(x, y2(x), z2(x)); }, + prec), + }; +} + +// +// One curve +// +Polylines poly00000012(const int prec = 10) +{ + // curve : x = 1/2, y = 2/(3*z), z = [2/3,1] + return { create_polyline(2. / 3, 1., + [](double z) { return P(0.5, 2. / (3. * z), z); }, + prec) }; +} + +// 00000112 +// x =[1/2,1], y = x/(3 * x - 1), z = (3 * x - 1)/(3 * x * x) +Polylines poly00000112(const int prec = 10) +{ + return { create_polyline(1. / 2, 1, + [](double x) { return P(x, x / (3 * x - 1), (3 * x - 1) / (3 * x * x)); }, + prec) }; +} + +// 00000121 +// curve : x = 1/(3*z), y = 1/(3*z-1), z = [2/3,1] +Polylines poly00000121(const int prec = 10) +{ + return { create_polyline(2. / 3, 1, + [](double z) { return P(1 / (3 * z), 1 / (3 * z - 1), z); }, + prec) }; +} + +// 00001112 +// curve : x = 1/(2*y), y = [1/2, 1],z = 2/3 +Polylines poly00001112(const int prec = 10) +{ + return { create_polyline(1. / 2, 1, + [](double y) { return P(1 / (2 * y), y, 2. / 3); }, + prec) }; +} + +// 00001122 +// curve : x = [0,1], y = 1/2, z = 2/3 +Polylines poly00001122(const int prec = 10) +{ + return { create_polyline(0, 1, + [](double x) { return P(x, 1. / 2, 2. / 3); }, + prec) }; +} + +// 00010121 +// curve : x =y * z / (z+y), y = ((3 * z * z - 1) - sqrt(CGAL::square(1 - 3 * z * z) - 12 * (z - 1) * z * z))/(6 * (z - 1) * z), z=[1,1/2[ +// point limit = (1/3, 1/2, 1) +Polylines poly00010121(const int prec = 10) +{ + auto y = [](double z) { return ((3 * z * z - 1) - sqrt(CGAL::square(1 - 3 * z * z) - 12 * (z - 1) * z * z)) / (6 * (z - 1) * z); }; + auto x = [](double y, double z) { return y * z / (z + y); }; + P corner(1. / 3, 1. / 2, 1); + return { create_polyline(1, 1. / 2, corner, + [x, y](double z) { return P(x(y(z), z), y(z), z); }, + prec) }; +} + +// 00010122 +// curve : x = z/(3*z^2-2*z+1), y = 1/(3*z), z = [1/3,1] +Polylines poly00010122(const int prec = 10) +{ + return { create_polyline(1. / 3, 1, + [](double z) { return P(z / (3 * z * z - 2 * z + 1), 1. / (3 * z), z); }, + prec) }; +} +// 00011002 +// curve : x = (y+1)/(4*y-1), y = [2/3,1], z = 1/2 +Polylines poly00011002(const int prec = 10) +{ + return { create_polyline(2. / 3, 1, + [](double y) { return P((y + 1) / (4 * y - 1), y, 1. / 2); }, + prec) }; +} +// 00011012 +// curve : x = (3*z^2-2*z+1)/(3*z^2), y = z/(3*z^2-2*z+1), z = [1/2, 1] +Polylines poly00011012(const int prec = 10) +{ + return { create_polyline(1. / 2, 1, + [](double z) { return P((3 * z * z - 2 * z + 1) / (3 * z * z), z / (3 * z * z - 2 * z + 1), z); }, + prec) }; +} +// 00011110 +// curve : x = 1/(2*y), y = [1/2,1], z = 1/2 +Polylines poly00011110(const int prec = 10) +{ + return { create_polyline(1. / 2, 1, + [](double y) { return P(1. / (2 * y), y, 1. / 2); }, + prec) }; +} +// 00011120 +// curve : x = (3*z^2-2*z)/(3*z^2-1), y = (3*z^2-1)/(6*z^2-3*z), z = [2/3,1] +Polylines poly00011120(const int prec = 10) +{ + return { create_polyline(2. / 3, 1, + [](double z) { return P((3 * z * z - 2 * z) / (3 * z * z - 1), (3 * z * z - 1) / (6 * z * z - 3 * z), z); }, + prec) }; +} +// 00011121 +// curve : x = (3*z^2-2*z)/(3*z^2-z-1), y = (3*z^2-z-1)/(3*z^2-3*z), z =[1/2,2./3] +Polylines poly00011121(const int prec = 10) +{ + return { create_polyline(1. / 2, 2. / 3, + [](double z) { return P((3 * z * z - 2 * z) / (3 * z * z - z - 1), (3 * z * z - z - 1) / (3 * z * z - 3 * z), z); }, + prec) }; +} +// 00011122 +// curve : x = (3*z*z-2*z)/(z-1),y = 1/(3*z),z = [1/3, 2/3] +// +Polylines poly00011122(const int prec = 10) +{ + return { create_polyline(1. / 3,2. / 3, + [](double z) { return P((3 * z * z - 2 * z) / (z - 1), 1 / (3 * z), z); }, + prec) }; +} + +// 00011220 +// curve : x=[0,1/2], y = (2 * x - 1)/(3 * x - 2), z = (2 * (x^2 - 2 * x + 1))/(5 * x^2 - 7 * x + 3) +Polylines poly00011220(const int prec = 10) +{ + return { create_polyline(0, 1. / 2, + [](double x) { return P(x, (2 * x - 1) / (3 * x - 2), (2 * (x * x - 2 * x + 1)) / (5 * x * x - 7 * x + 3)); }, + prec) }; +} +// 00012002 +// curve_1 : x = [2/3,1], y = (3 * x*x + sqrt(9 * x*x*x*x - 24 * x*x*x + 30 * x*x - 12 * x + 1) - 1)/(6 * x * (2 * x - 1)), z = 1 - 1./(3*x*y) +Polylines poly00012002(const int prec = 10) +{ + auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 24 * x * x * x + 30 * x * x - 12 * x + 1) - 1) / (6 * x * (2 * x - 1)); }; + return { create_polyline(2. / 3, 1, + [y](double x) { return P(x, y(x), 1 - 1. / (3 * x * y(x))); }, + prec) }; +} +// 00012012 +// curve_1 : x = [0, 1/2[ , y = 1./(-6*x*z+3*x+3*z), z = (3 *x*x + sqrt(9 *x*x*x*x - 18 *x*x*x + 25 *x*x - 16 * x + 4) - 7 * x + 2)/(6 *(x - 1) * (2 * x - 1)) +// curve_1 : x = ]1/2,1[, y = 1./(-6*x*z+3*x+3*z), z = (3 *x*x + sqrt(9 *x*x*x*x - 18 *x*x*x + 25 *x*x - 16 * x + 4) - 7 * x + 2)/(6 *(x - 1) * (2 * x - 1)) +// point limit x = 1, y = 2/3, z = 1/2 +// point limit x = 1/2, y= 2./3, z = 2./3); +// +Polylines poly00012012(const int prec = 10) +{ + auto y = [](double x, double z) { return 1. / (-6 * x * z + 3 * x + 3 * z); }; + auto z = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) - 7 * x + 2) / (6 * (x - 1) * (2 * x - 1)); }; + P corner1(1. / 2, 2. / 3, 2. / 3); + P corner2(1, 2. / 3, 1. / 2); + return { create_polyline(1. / 2, 0, corner1, + [y, z](double x) { return P(x, y(x, z(x)), z(x)); }, + prec), + create_polyline(1. / 2, 1, corner1, corner2, + [y, z](double x) { return P(x, y(x, z(x)), z(x)); }, + prec) + }; +} +// 00012021 +// curve : x = (3*z-1)/(3*z), y = z/(3*z-1), z = [1/2,1] +Polylines poly00012021(const int prec = 10) +{ + return { create_polyline(1. / 2, 1, + [](double z) { return P((3 * z - 1) / (3 * z), z / (3 * z - 1), z); }, + prec) }; +} +// 00012110 +// curve : x=]0,1/2], y = (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) + x - 2)/(6 * (x - 1) * x), z = (3*x*y-1)/(9*x*y-3*x-3*y) +// point limit : x = 0, y = 1/2, z = 2/3 +// +Polylines poly00012110(const int prec = 10) +{ + auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) + x - 2) / (6 * (x - 1) * x); }; + auto z = [](double x, double y) { return (3 * x * y - 1) / (9 * x * y - 3 * x - 3 * y); }; + P corner(0, 1. / 2, 2. / 3); + return { create_polyline(0, 1. / 2, corner, + [y, z](double x) { return P(x, y(x), z(x, y(x))); }, + prec) }; +} +// 00012112 +// x = ]0,1/2[, y = (3 * x*x + sqrt(9 * x * x * x * x - 36 * x * x * x + 40 * x * x - 20 * x + 4) + 2 * x - 2)/(6 * x * (2 * x - 1)), z = (3*x*y-1)/(9*x*y-3*x-3*y) +// point limit x = 0, y = 1/2, z = 2/3 +// point limit x = 1/2, y = 0, z = 2/3 +// +Polylines poly00012112(const int prec = 10) +{ + auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 36 * x * x * x + 40 * x * x - 20 * x + 4) + 2 * x - 2) / (6 * x * (2 * x - 1)); }; + auto z = [](double x, double y) { return (3 * x * y - 1) / (9 * x * y - 3 * x - 3 * y); }; + P corner1(0, 1. / 2, 2. / 3); + P corner2(1. / 2, 0, 2. / 3); + return { create_polyline(0, 1. / 2, corner1, corner2, + [y, z](double x) { return P(x, y(x), z(x, y(x))); }, + prec) }; +} + +// 00012120 +// curve : x = (3*z-1)/(3*z), y = (3*z^2-2*z)/(6*z^2-5*z+1), z = [2/3,1] +Polylines poly00012120(const int prec = 10) +{ + return { create_polyline(2. / 3, 1, + [](double z) { return P((3 * z - 1) / (3 * z), (3 * z * z - 2 * z) / (6 * z * z - 5 * z + 1), z); }, + prec) }; +} +// +// 00012121 +// curve : x = (3*z-1)/(3*z), y = (3*z^2-2*z)/(3*z^2-4*z+1), z = [1/2,2/3] +Polylines poly00012121(const int prec = 10) +{ + return { create_polyline(1. / 2, 2. / 3, + [](double z) { return P((3 * z - 1) / (3 * z), (3 * z * z - 2 * z) / (3 * z * z - 4 * z + 1), z); }, + prec) }; +} +// 00012122 +// curve : x = (6*z^2-6*z+1)/(3*z^2-3*z), y = (3*z^2-2*z)/(6*z^2-6*z+1), z = [1/3,2/3] +Polylines poly00012122(const int prec = 10) +{ + auto x = [](double z) { return (6 * z * z - 6 * z + 1) / (3 * z * z - 3 * z); }; + auto y = [](double z) { return (3 * z * z - 2 * z) / (6 * z * z - 6 * z + 1); }; + return { create_polyline(1. / 3, 2. / 3, + [x,y](double z) { return P(x(z), y(z), z); }, + prec) }; +} +// 00012221 +// curve : x = 1/(3*y),y = [1/3,1],z = 1/2 +Polylines poly00012221(const int prec = 10) +{ + return { create_polyline(1. / 3, 1, + [](double y) { return P(1. / (3 * y),y , 1. / 2); }, + prec) }; +} + +// 00111100 +// curve : x = [0,1], y = 1/2, z = 1/2 +Polylines poly00111100(const int prec = 10) +{ + return { create_polyline(0, 1, + [](double x) { return P(x , 1. / 2, 1. / 2); }, + prec) }; +} + +// 00111102 +// curve : x = (2*z-1)/(3*z^2-z), y = (3*z-1)/(6*z-3), z = [2/3,1] +Polylines poly00111102(const int prec = 10) +{ + return { create_polyline(2. / 3, 1, + [](double z) { return P((2 * z - 1) / (3 * z * z - z), (3 * z - 1) / (6 * z - 3), z); }, + prec) }; +} + +// 00111220 +// segment 1/2 0 2/3 1/2 1 2/3 +Polylines poly00111220(const int /*not needed for a segment*/) +{ + return { { P(1. / 2, 0, 2. / 3), P(1. / 2, 1, 2. / 3) } }; +} + +// 00121201 +// curve_1 : x =[1/2, 2/3], y = (-sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2), z = ( sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2) +// curve_2 : x =[1/2, 2/3], y = ( sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2), z = (-sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2) +// point 0 1/2 1/2 +Polylines poly00121201(const int prec = 10) +{ + auto sq_exp = [](double x) { + return sqrt(-24 * x * x * x + 37 * x * x - 20 * x + 4); + }; + auto y = [sq_exp](double x) { return (-sq_exp(x) + 5 * x - 2) / (6 * x * x); }; + auto z = [sq_exp](double x) { return (sq_exp(x) + 5 * x - 2) / (6 * x * x); }; + P corner{ 2. / 3, y(2. / 3), z(2. / 3) }; + return { + create_polyline(2. / 3, 1. / 2, corner, + [y, z](double x) { return P(x, y(x), z(x)); }, + prec), + create_polyline(2. / 3, 1. / 2, corner, + [y, z](double x) { return P(x, z(x), y(x)); }, + prec), + // { P(0., .5, .5), P(0., .5, .5) } + }; +} + + +#include +#include + +boost::unordered_map create_polylines_fcts{ + // One internal corner + { 00001221_c, poly00001221 } , + { 00111202_c, poly00111202 } , + { 01101001_c, poly01101001 } , + // Two curves + { 00011022_c, poly00011022 } , + { 00011221_c, poly00011221 } , + { 00011222_c, poly00011222 } , + { 00121200_c, poly00121200 } , + { 00121221_c, poly00121221 } , + { 00122100_c, poly00122100 } , + { 00122101_c, poly00122101 } , + // One curve + { 00000012_c, poly00000012 } , + { 00000112_c, poly00000112 } , + { 00000121_c, poly00000121 } , + { 00001112_c, poly00001112 } , + { 00001122_c, poly00001122 } , + { 00010121_c, poly00010121 } , + { 00010122_c, poly00010122 } , + { 00011002_c, poly00011002 } , + { 00011012_c, poly00011012 } , + { 00011110_c, poly00011110 } , + { 00011120_c, poly00011120 } , + { 00011121_c, poly00011121 } , + { 00011122_c, poly00011122 } , + { 00011220_c, poly00011220 } , + { 00012002_c, poly00012002 } , + { 00012012_c, poly00012012 } , + { 00012021_c, poly00012021 } , + { 00012110_c, poly00012110 } , + { 00012112_c, poly00012112 } , + { 00012120_c, poly00012120 } , + { 00012121_c, poly00012121 } , + { 00012122_c, poly00012122 } , + { 00012221_c, poly00012221 } , + { 00111100_c, poly00111100 } , + { 00111102_c, poly00111102 } , + { 00111220_c, poly00111220 } , + { 00121201_c, poly00121201 } +}; + + + +#endif // TRIPLE_LIGNES_H From 097897182d471d18314f96fb5c828bb882aa963c Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 16 Nov 2021 14:37:03 +0100 Subject: [PATCH 002/144] add missing license --- .../include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h | 2 ++ .../include/CGAL/Mesh_3/triple_lines_extraction/combinations.h | 2 ++ .../include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h | 2 ++ Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h | 2 ++ .../CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h | 2 ++ .../include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h | 2 ++ 6 files changed, 12 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h index 48f366ebfb5..fc7e8670169 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -1,6 +1,8 @@ #ifndef CASES_TABLES_H #define CASES_TABLES_H +#include + #include #include #include diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index de722c9794e..be0bf59c45a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -1,6 +1,8 @@ #ifndef COMBINATIONS_H #define COMBINATIONS_H +#include + #include typedef std::array Cube; diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h index 7347b7ef1e3..ac0c019009e 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -1,6 +1,8 @@ #ifndef COORDINATES_H #define COORDINATES_H +#include + #include typedef std::array Coordinates; diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h index b4e0b7c1545..0c164defd39 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h @@ -1,6 +1,8 @@ #ifndef CUBE_H #define CUBE_H +#include + #include #include #include diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index 797a7c17d4e..b0f53a2456c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -1,6 +1,8 @@ #ifndef CUBE_ISOMETRIES_H #define CUBE_ISOMETRIES_H +#include + #include typedef std::array Permutation; diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 9c8ff863a8e..72de2684427 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -1,6 +1,8 @@ #ifndef TRIPLE_LIGNES_H #define TRIPLE_LIGNES_H +#include + #include #include From cc97d1015f1a71f65d94d2deac5b50f928bc6f7f Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 16 Nov 2021 17:14:15 +0100 Subject: [PATCH 003/144] start refactoring --- ...sh_3D_image_with_detection_of_features.cpp | 8 +- .../triple_lines_extraction/triple_lines.h | 134 ++++++++++-------- 2 files changed, 76 insertions(+), 66 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index 94da314be65..7ef88f08410 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -50,9 +50,6 @@ typedef K::Vector_3 Vector_3; typedef std::vector Polyline; typedef std::vector Polylines; -typedef Polylines(*create_polylines_fct)(const int /* prec */); - -typedef Point_3 P; #include @@ -64,6 +61,7 @@ bool add_1D_features(const CGAL::Image_3& image, Mesh_domain& domain) { typedef unsigned char Word_type; + CGAL::Mesh_3::Triple_line_extractor lines; Polylines features_inside; @@ -142,8 +140,8 @@ bool add_1D_features(const CGAL::Image_3& image, std::cerr << "reference cube " << reference_cube << std::endl; std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; #endif // CGAL_DEBUG_TRIPLE_LINES - auto fct_it = create_polylines_fcts.find(reference_cube); - if (fct_it != create_polylines_fcts.end()) { + auto fct_it = lines.create_polylines_fcts.find(reference_cube); + if (fct_it != lines.create_polylines_fcts.end()) { #ifdef CGAL_DEBUG_TRIPLE_LINES std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; #endif // CGAL_DEBUG_TRIPLE_LINES diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 72de2684427..48eaee195a0 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -1,35 +1,36 @@ -#ifndef TRIPLE_LIGNES_H -#define TRIPLE_LIGNES_H +#ifndef CGAL_MESH_3_TRIPLE_LINES_H +#define CGAL_MESH_3_TRIPLE_LINES_H #include #include -#include - -typedef CGAL::Exact_predicates_inexact_constructions_kernel K; -typedef K::Point_3 Point_3; -typedef Point_3 P; -typedef std::vector Polyline; -typedef std::vector Polylines; - -typedef Polylines (*create_polylines_fct)(const int /* prec */); +#include +#include #include #include -#include +#include -//extern boost::unordered_map create_polylines_fcts; +namespace CGAL +{ +namespace Mesh_3 +{ + +using K = CGAL::Exact_predicates_inexact_constructions_kernel; +using P = CGAL::Point_3; +using Polylines = std::vector >; template -Polyline create_polyline(const double start, +std::vector

create_polyline(const double start, const double end, P starting_point, P ending_point, Functor f, const int prec) { + using Polyline = std::vector

; Polyline poly; poly.reserve(prec + 1); poly.push_back(std::move(starting_point)); @@ -57,7 +58,7 @@ Polyline create_polyline(const double start, } template -Polyline create_polyline(const double start, +std::vector

create_polyline(const double start, const double end, P starting_point, Functor f, @@ -67,7 +68,7 @@ Polyline create_polyline(const double start, } template -Polyline create_polyline(const double start, +std::vector

create_polyline(const double start, const double end, Functor f, const int prec) @@ -605,52 +606,63 @@ Polylines poly00121201(const int prec = 10) } -#include -#include +template +class Triple_line_extractor +{ + using P = Point; + using Polyline = std::vector

; + using Polylines = std::vector; -boost::unordered_map create_polylines_fcts{ - // One internal corner - { 00001221_c, poly00001221 } , - { 00111202_c, poly00111202 } , - { 01101001_c, poly01101001 } , - // Two curves - { 00011022_c, poly00011022 } , - { 00011221_c, poly00011221 } , - { 00011222_c, poly00011222 } , - { 00121200_c, poly00121200 } , - { 00121221_c, poly00121221 } , - { 00122100_c, poly00122100 } , - { 00122101_c, poly00122101 } , - // One curve - { 00000012_c, poly00000012 } , - { 00000112_c, poly00000112 } , - { 00000121_c, poly00000121 } , - { 00001112_c, poly00001112 } , - { 00001122_c, poly00001122 } , - { 00010121_c, poly00010121 } , - { 00010122_c, poly00010122 } , - { 00011002_c, poly00011002 } , - { 00011012_c, poly00011012 } , - { 00011110_c, poly00011110 } , - { 00011120_c, poly00011120 } , - { 00011121_c, poly00011121 } , - { 00011122_c, poly00011122 } , - { 00011220_c, poly00011220 } , - { 00012002_c, poly00012002 } , - { 00012012_c, poly00012012 } , - { 00012021_c, poly00012021 } , - { 00012110_c, poly00012110 } , - { 00012112_c, poly00012112 } , - { 00012120_c, poly00012120 } , - { 00012121_c, poly00012121 } , - { 00012122_c, poly00012122 } , - { 00012221_c, poly00012221 } , - { 00111100_c, poly00111100 } , - { 00111102_c, poly00111102 } , - { 00111220_c, poly00111220 } , - { 00121201_c, poly00121201 } -}; + typedef Polylines(*create_polylines_fct)(const int /* prec */); +public: + boost::unordered_map create_polylines_fcts { + // One internal corner + { 00001221_c, CGAL::Mesh_3::poly00001221 } , + { 00111202_c, CGAL::Mesh_3::poly00111202 } , + { 01101001_c, CGAL::Mesh_3::poly01101001 } , + // Two curves + { 00011022_c, CGAL::Mesh_3::poly00011022 } , + { 00011221_c, CGAL::Mesh_3::poly00011221 } , + { 00011222_c, CGAL::Mesh_3::poly00011222 } , + { 00121200_c, CGAL::Mesh_3::poly00121200 } , + { 00121221_c, CGAL::Mesh_3::poly00121221 } , + { 00122100_c, CGAL::Mesh_3::poly00122100 } , + { 00122101_c, CGAL::Mesh_3::poly00122101 } , + // One curve + { 00000012_c, CGAL::Mesh_3::poly00000012 } , + { 00000112_c, CGAL::Mesh_3::poly00000112 } , + { 00000121_c, CGAL::Mesh_3::poly00000121 } , + { 00001112_c, CGAL::Mesh_3::poly00001112 } , + { 00001122_c, CGAL::Mesh_3::poly00001122 } , + { 00010121_c, CGAL::Mesh_3::poly00010121 } , + { 00010122_c, CGAL::Mesh_3::poly00010122 } , + { 00011002_c, CGAL::Mesh_3::poly00011002 } , + { 00011012_c, CGAL::Mesh_3::poly00011012 } , + { 00011110_c, CGAL::Mesh_3::poly00011110 } , + { 00011120_c, CGAL::Mesh_3::poly00011120 } , + { 00011121_c, CGAL::Mesh_3::poly00011121 } , + { 00011122_c, CGAL::Mesh_3::poly00011122 } , + { 00011220_c, CGAL::Mesh_3::poly00011220 } , + { 00012002_c, CGAL::Mesh_3::poly00012002 } , + { 00012012_c, CGAL::Mesh_3::poly00012012 } , + { 00012021_c, CGAL::Mesh_3::poly00012021 } , + { 00012110_c, CGAL::Mesh_3::poly00012110 } , + { 00012112_c, CGAL::Mesh_3::poly00012112 } , + { 00012120_c, CGAL::Mesh_3::poly00012120 } , + { 00012121_c, CGAL::Mesh_3::poly00012121 } , + { 00012122_c, CGAL::Mesh_3::poly00012122 } , + { 00012221_c, CGAL::Mesh_3::poly00012221 } , + { 00111100_c, CGAL::Mesh_3::poly00111100 } , + { 00111102_c, CGAL::Mesh_3::poly00111102 } , + { 00111220_c, CGAL::Mesh_3::poly00111220 } , + { 00121201_c, CGAL::Mesh_3::poly00121201 } + }; -#endif // TRIPLE_LIGNES_H +};//class Triple_line_extractor +}//namespace Mesh_3 +}//namespace CGAL + + +#endif // CGAL_MESH_3_TRIPLE_LINES_H From 47046a0ec4b51c38b8b128aca6c2815f4c4cf3d5 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 16 Nov 2021 17:41:51 +0100 Subject: [PATCH 004/144] fix indentation --- ...sh_3D_image_with_detection_of_features.cpp | 225 +++++++++--------- 1 file changed, 112 insertions(+), 113 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index 7ef88f08410..c708bd25c43 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -68,8 +68,7 @@ bool add_1D_features(const CGAL::Image_3& image, const double vx = image.vx(); const double vy = image.vy(); const double vz = image.vz(); - const double dist_bound = (std::min)(vx, - (std::min)(vy, vz)) / 256; + const double dist_bound = (std::min)(vx, (std::min)(vy, vz)) / 256; const double sq_dist_bound = dist_bound * dist_bound; const std::size_t xdim = image.xdim(); @@ -83,124 +82,124 @@ bool add_1D_features(const CGAL::Image_3& image, Del::Cell_handle start_cell; for (std::size_t k = 0, end_k = zdim - 1; k < end_k; ++k) - for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) - for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) - { - const K::Vector_3 translation{ i * vx, j * vy, k * vz }; - const Cube cube = { - static_evaluate(image.image(), i , j , k), - static_evaluate(image.image(), i + 1, j , k), - static_evaluate(image.image(), i , j + 1, k), - static_evaluate(image.image(), i + 1, j + 1, k), - static_evaluate(image.image(), i , j , k + 1), - static_evaluate(image.image(), i + 1, j , k + 1), - static_evaluate(image.image(), i , j + 1, k + 1), - static_evaluate(image.image(), i + 1, j + 1, k + 1), - }; /// TODO: optimize the access to the image data - bool monocolor = cube[0] == cube[1]; - for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); - if (monocolor) continue; + for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) + for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) + { + const K::Vector_3 translation{ i * vx, j * vy, k * vz }; + const Cube cube = { + static_evaluate(image.image(), i , j , k), + static_evaluate(image.image(), i + 1, j , k), + static_evaluate(image.image(), i , j + 1, k), + static_evaluate(image.image(), i + 1, j + 1, k), + static_evaluate(image.image(), i , j , k + 1), + static_evaluate(image.image(), i + 1, j , k + 1), + static_evaluate(image.image(), i , j + 1, k + 1), + static_evaluate(image.image(), i + 1, j + 1, k + 1), + }; /// TODO: optimize the access to the image data + bool monocolor = cube[0] == cube[1]; + for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); + if (monocolor) continue; - std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, - INT_MIN, INT_MIN, INT_MIN, INT_MIN }; - std::array color_transformation; - std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); - int nb_color = 0; - for (int i = 0; i < 8; ++i) { - if (color_transformation[cube[i]] == INT_MIN) { - color_transformation[cube[i]] = nb_color; - inv_color_transformation[nb_color] = cube[i]; - ++nb_color; - } - } - if (nb_color > 3) { - CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); - continue; - } - Cube reference_cube = { - (unsigned char)(color_transformation[cube[0]]), - (unsigned char)(color_transformation[cube[1]]), - (unsigned char)(color_transformation[cube[2]]), - (unsigned char)(color_transformation[cube[3]]), - (unsigned char)(color_transformation[cube[4]]), - (unsigned char)(color_transformation[cube[5]]), - (unsigned char)(color_transformation[cube[6]]), - (unsigned char)(color_transformation[cube[7]]), - }; - auto case_it = find_case(cases, reference_cube); - using std::end; - const bool case_found = (case_it != end(cases)); - if (case_found) reference_cube = combinations[(*case_it)[8]]; - else { -// std::cerr << "Warning: case not found: " << reference_cube << '\n'; - CGAL_error(); - }; -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Cube " << cube << std::endl; - std::cerr << "reference cube " << reference_cube << std::endl; - std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - auto fct_it = lines.create_polylines_fcts.find(reference_cube); - if (fct_it != lines.create_polylines_fcts.end()) { -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - Polylines cube_features = (fct_it->second)(10); - if (case_found) { - const Permutation& transformation = cube_isometries[(*case_it)[9]]; - Coordinates a1 = coordinates[transformation[0]]; - Coordinates u = coordinates[transformation[1]] - a1; - Coordinates v = coordinates[transformation[2]] - a1; - Coordinates w = coordinates[transformation[4]] - a1; - const Point_3 pa{ a1[0], a1[1], a1[2] }; - const Vector_3 vu{ u[0], u[1], u[2] }; - const Vector_3 vv{ v[0], v[1], v[2] }; - const Vector_3 vw{ w[0], w[1], w[2] }; -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "pa: " << pa << "\n"; - std::cerr << "vu: " << vu << "\n"; - std::cerr << "vv: " << vv << "\n"; - std::cerr << "vw: " << vw << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - for (auto& polyline : cube_features) { - for (auto& point : polyline) { - point = pa - + point.x() * vu - + point.y() * vv - + point.z() * vw; - point = { vx * point.x(), - vy * point.y(), - vz * point.z(), }; - point = point + translation; - } - for (int i = 0; i < 2; ++i) { - K::Point_3& extremity = (i == 0) ? polyline.front() : polyline.back(); - Del::Vertex_handle vh = triangulation.nearest_vertex(extremity, start_cell); - if (Del::Vertex_handle() != vh) { - if (squared_distance(vh->point(), extremity) < sq_dist_bound) { - extremity = vh->point(); - } - } - vh = triangulation.insert(extremity, start_cell); - start_cell = vh->cell(); - } - features_inside.push_back(std::move(polyline)); - } // end loop on polylines - } // end case where the transformation is not the identity - } // end if the reference_cube has polylines + std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, + INT_MIN, INT_MIN, INT_MIN, INT_MIN }; + std::array color_transformation; + std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); + int nb_color = 0; + for (int i = 0; i < 8; ++i) { + if (color_transformation[cube[i]] == INT_MIN) { + color_transformation[cube[i]] = nb_color; + inv_color_transformation[nb_color] = cube[i]; + ++nb_color; } + } + if (nb_color > 3) { + CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); + continue; + } + Cube reference_cube = { + (unsigned char)(color_transformation[cube[0]]), + (unsigned char)(color_transformation[cube[1]]), + (unsigned char)(color_transformation[cube[2]]), + (unsigned char)(color_transformation[cube[3]]), + (unsigned char)(color_transformation[cube[4]]), + (unsigned char)(color_transformation[cube[5]]), + (unsigned char)(color_transformation[cube[6]]), + (unsigned char)(color_transformation[cube[7]]), + }; + auto case_it = find_case(cases, reference_cube); + using std::end; + const bool case_found = (case_it != end(cases)); + if (case_found) reference_cube = combinations[(*case_it)[8]]; + else { + //std::cerr << "Warning: case not found: " << reference_cube << '\n'; + CGAL_error(); + }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Cube " << cube << std::endl; + std::cerr << "reference cube " << reference_cube << std::endl; + std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + auto fct_it = lines.create_polylines_fcts.find(reference_cube); + if (fct_it != lines.create_polylines_fcts.end()) { +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + Polylines cube_features = (fct_it->second)(10); + if (case_found) { + const Permutation& transformation = cube_isometries[(*case_it)[9]]; + Coordinates a1 = coordinates[transformation[0]]; + Coordinates u = coordinates[transformation[1]] - a1; + Coordinates v = coordinates[transformation[2]] - a1; + Coordinates w = coordinates[transformation[4]] - a1; + const Point_3 pa{ a1[0], a1[1], a1[2] }; + const Vector_3 vu{ u[0], u[1], u[2] }; + const Vector_3 vv{ v[0], v[1], v[2] }; + const Vector_3 vw{ w[0], w[1], w[2] }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "pa: " << pa << "\n"; + std::cerr << "vu: " << vu << "\n"; + std::cerr << "vv: " << vv << "\n"; + std::cerr << "vw: " << vw << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + for (auto& polyline : cube_features) { + for (auto& point : polyline) { + point = pa + + point.x() * vu + + point.y() * vv + + point.z() * vw; + point = { vx * point.x(), + vy * point.y(), + vz * point.z(), }; + point = point + translation; + } + for (int i = 0; i < 2; ++i) { + K::Point_3& extremity = (i == 0) ? polyline.front() : polyline.back(); + Del::Vertex_handle vh = triangulation.nearest_vertex(extremity, start_cell); + if (Del::Vertex_handle() != vh) { + if (squared_distance(vh->point(), extremity) < sq_dist_bound) { + extremity = vh->point(); + } + } + vh = triangulation.insert(extremity, start_cell); + start_cell = vh->cell(); + } + features_inside.push_back(std::move(polyline)); + } // end loop on polylines + } // end case where the transformation is not the identity + } // end if the reference_cube has polylines + } // call the split_graph_into_polylines, to create long polylines from the // short polylines that were generated per voxel. Polylines new_polylines_inside; CGAL::polylines_to_protect(new_polylines_inside, - features_inside.begin(), - features_inside.end()); + features_inside.begin(), + features_inside.end()); std::vector > polylines_on_bbox; CGAL::polylines_to_protect(image, polylines_on_bbox, - new_polylines_inside.begin(), - new_polylines_inside.end()); + new_polylines_inside.begin(), + new_polylines_inside.end()); domain.add_features(polylines_on_bbox.begin(), polylines_on_bbox.end()); @@ -211,9 +210,9 @@ bool add_1D_features(const CGAL::Image_3& image, std::ofstream output_polylines("out-generated.polylines.txt"); output_polylines.precision(17); for (auto poly : boost::range::join(polylines_on_bbox, new_polylines_inside)) { - output_polylines << poly.size(); - for (auto p : poly) output_polylines << " " << p; - output_polylines << std::endl; + output_polylines << poly.size(); + for (auto p : poly) output_polylines << " " << p; + output_polylines << std::endl; } return true; From ee436bc05069522b45298ae535e38111ee65906b Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 18 Nov 2021 15:42:29 +0100 Subject: [PATCH 005/144] apply missing translation (tx, ty, tz) --- .../Mesh_3/mesh_3D_image_with_detection_of_features.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index c708bd25c43..83923476a41 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -75,6 +75,10 @@ bool add_1D_features(const CGAL::Image_3& image, const std::size_t ydim = image.ydim(); const std::size_t zdim = image.zdim(); + const double tx = image.tx(); + const double ty = image.ty(); + const double tz = image.tz(); + using CGAL::IMAGEIO::static_evaluate; typedef CGAL::Delaunay_triangulation_3 Del; @@ -85,7 +89,9 @@ bool add_1D_features(const CGAL::Image_3& image, for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) { - const K::Vector_3 translation{ i * vx, j * vy, k * vz }; + const K::Vector_3 translation{ i * vx + tx, + j * vy + ty, + k * vz + tz }; const Cube cube = { static_evaluate(image.image(), i , j , k), static_evaluate(image.image(), i + 1, j , k), From 7d9ea520320c4f0f8ffc1fb050235ba64651e381 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 2 May 2022 17:31:27 +0200 Subject: [PATCH 006/144] move triple lines detection code to new header --- ...sh_3D_image_with_detection_of_features.cpp | 197 +------------- .../include/CGAL/Mesh_3/detect_triple_lines.h | 253 ++++++++++++++++++ .../triple_lines_extraction/coordinates.h | 35 --- 3 files changed, 258 insertions(+), 227 deletions(-) create mode 100644 Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h delete mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index 83923476a41..b93978d8cb5 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -12,12 +12,7 @@ #include #include #include - -#include -#include -#include -#include -#include +#include typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Labeled_mesh_domain_3 Image_domain; @@ -41,192 +36,10 @@ typedef CGAL::Mesh_criteria_3 Mesh_criteria; // To avoid verbose function and named parameters call using namespace CGAL::parameters; -/// [Add 1D features] -#include "read_polylines.h" -#include // undocumented header - -typedef K::Point_3 Point_3; -typedef K::Vector_3 Vector_3; -typedef std::vector Polyline; -typedef std::vector Polylines; - - -#include - - -// Protect the intersection of the object with the box of the image, -// by declaring 1D-features. Note that `CGAL::polylines_to_protect` is -// not documented. -bool add_1D_features(const CGAL::Image_3& image, - Mesh_domain& domain) -{ - typedef unsigned char Word_type; - CGAL::Mesh_3::Triple_line_extractor lines; - - Polylines features_inside; - - const double vx = image.vx(); - const double vy = image.vy(); - const double vz = image.vz(); - const double dist_bound = (std::min)(vx, (std::min)(vy, vz)) / 256; - const double sq_dist_bound = dist_bound * dist_bound; - - const std::size_t xdim = image.xdim(); - const std::size_t ydim = image.ydim(); - const std::size_t zdim = image.zdim(); - - const double tx = image.tx(); - const double ty = image.ty(); - const double tz = image.tz(); - - using CGAL::IMAGEIO::static_evaluate; - - typedef CGAL::Delaunay_triangulation_3 Del; - Del triangulation; - Del::Cell_handle start_cell; - - for (std::size_t k = 0, end_k = zdim - 1; k < end_k; ++k) - for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) - for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) - { - const K::Vector_3 translation{ i * vx + tx, - j * vy + ty, - k * vz + tz }; - const Cube cube = { - static_evaluate(image.image(), i , j , k), - static_evaluate(image.image(), i + 1, j , k), - static_evaluate(image.image(), i , j + 1, k), - static_evaluate(image.image(), i + 1, j + 1, k), - static_evaluate(image.image(), i , j , k + 1), - static_evaluate(image.image(), i + 1, j , k + 1), - static_evaluate(image.image(), i , j + 1, k + 1), - static_evaluate(image.image(), i + 1, j + 1, k + 1), - }; /// TODO: optimize the access to the image data - bool monocolor = cube[0] == cube[1]; - for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); - if (monocolor) continue; - - std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, - INT_MIN, INT_MIN, INT_MIN, INT_MIN }; - std::array color_transformation; - std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); - int nb_color = 0; - for (int i = 0; i < 8; ++i) { - if (color_transformation[cube[i]] == INT_MIN) { - color_transformation[cube[i]] = nb_color; - inv_color_transformation[nb_color] = cube[i]; - ++nb_color; - } - } - if (nb_color > 3) { - CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); - continue; - } - Cube reference_cube = { - (unsigned char)(color_transformation[cube[0]]), - (unsigned char)(color_transformation[cube[1]]), - (unsigned char)(color_transformation[cube[2]]), - (unsigned char)(color_transformation[cube[3]]), - (unsigned char)(color_transformation[cube[4]]), - (unsigned char)(color_transformation[cube[5]]), - (unsigned char)(color_transformation[cube[6]]), - (unsigned char)(color_transformation[cube[7]]), - }; - auto case_it = find_case(cases, reference_cube); - using std::end; - const bool case_found = (case_it != end(cases)); - if (case_found) reference_cube = combinations[(*case_it)[8]]; - else { - //std::cerr << "Warning: case not found: " << reference_cube << '\n'; - CGAL_error(); - }; -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Cube " << cube << std::endl; - std::cerr << "reference cube " << reference_cube << std::endl; - std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - auto fct_it = lines.create_polylines_fcts.find(reference_cube); - if (fct_it != lines.create_polylines_fcts.end()) { -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - Polylines cube_features = (fct_it->second)(10); - if (case_found) { - const Permutation& transformation = cube_isometries[(*case_it)[9]]; - Coordinates a1 = coordinates[transformation[0]]; - Coordinates u = coordinates[transformation[1]] - a1; - Coordinates v = coordinates[transformation[2]] - a1; - Coordinates w = coordinates[transformation[4]] - a1; - const Point_3 pa{ a1[0], a1[1], a1[2] }; - const Vector_3 vu{ u[0], u[1], u[2] }; - const Vector_3 vv{ v[0], v[1], v[2] }; - const Vector_3 vw{ w[0], w[1], w[2] }; -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "pa: " << pa << "\n"; - std::cerr << "vu: " << vu << "\n"; - std::cerr << "vv: " << vv << "\n"; - std::cerr << "vw: " << vw << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - for (auto& polyline : cube_features) { - for (auto& point : polyline) { - point = pa - + point.x() * vu - + point.y() * vv - + point.z() * vw; - point = { vx * point.x(), - vy * point.y(), - vz * point.z(), }; - point = point + translation; - } - for (int i = 0; i < 2; ++i) { - K::Point_3& extremity = (i == 0) ? polyline.front() : polyline.back(); - Del::Vertex_handle vh = triangulation.nearest_vertex(extremity, start_cell); - if (Del::Vertex_handle() != vh) { - if (squared_distance(vh->point(), extremity) < sq_dist_bound) { - extremity = vh->point(); - } - } - vh = triangulation.insert(extremity, start_cell); - start_cell = vh->cell(); - } - features_inside.push_back(std::move(polyline)); - } // end loop on polylines - } // end case where the transformation is not the identity - } // end if the reference_cube has polylines - } - - // call the split_graph_into_polylines, to create long polylines from the - // short polylines that were generated per voxel. - Polylines new_polylines_inside; - CGAL::polylines_to_protect(new_polylines_inside, - features_inside.begin(), - features_inside.end()); - - std::vector > polylines_on_bbox; - CGAL::polylines_to_protect(image, polylines_on_bbox, - new_polylines_inside.begin(), - new_polylines_inside.end()); - - domain.add_features(polylines_on_bbox.begin(), polylines_on_bbox.end()); - - // It is very important that the polylines from the file `lines_fname` - // contain only polylines in the inside of the box of the image. - domain.add_features(new_polylines_inside.begin(), new_polylines_inside.end()); - - std::ofstream output_polylines("out-generated.polylines.txt"); - output_polylines.precision(17); - for (auto poly : boost::range::join(polylines_on_bbox, new_polylines_inside)) { - output_polylines << poly.size(); - for (auto p : poly) output_polylines << " " << p; - output_polylines << std::endl; - } - - return true; -} -/// [Add 1D features] - int main(int argc, char* argv[]) { + typedef unsigned char Word_type; + const std::string fname = (argc>1)?argv[1]:CGAL::data_file_path("images/420.inr"); // Loads image CGAL::Image_3 image; @@ -238,8 +51,8 @@ int main(int argc, char* argv[]) // Domain Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image); - /// Declare 1D-features, see above [Call add_1D_features] - if(!add_1D_features(image, domain)) { + /// Declare 1D-features, see above [Call detect_triple_lines] + if(!CGAL::Mesh_3::detect_triple_lines(image, domain)) { return EXIT_FAILURE; } /// [Call add_1D_features] diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h new file mode 100644 index 00000000000..ba980b91586 --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -0,0 +1,253 @@ +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot, Jane Tournois +// +//****************************************************************************** +// +//****************************************************************************** + +#ifndef CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H +#define CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H + +#include +#include +#include +#include + +#include // undocumented header + +#include +#include + +#ifdef CGAL_DEBUG_TRIPLE_LINES +#include +#endif + +namespace CGAL +{ +namespace Mesh_3 +{ +//namespace internal +//{ + using Coordinates = std::array; + constexpr Coordinates coordinates[8] = { 0, 0, 0, + 1, 0, 0, + 0, 1, 0, + 1, 1, 0, + 0, 0, 1, + 1, 0, 1, + 0, 1, 1, + 1, 1, 1 }; + + Coordinates operator-(Coordinates b, Coordinates a) { + return { b[0] - a[0], b[1] - a[1], b[2] - a[2] }; + } + + Coordinates cross(Coordinates a, Coordinates 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] }; + } + + Coordinates square(Coordinates c) { + return { c[0] * c[0], c[1] * c[1], c[2] * c[2] }; + } + + int dist(Coordinates a, Coordinates b) { + auto s = square(b - a); + return s[0] + s[1] + s[2]; + } +//}// + +// Protect the intersection of the object with the box of the image, +// by declaring 1D-features. Note that `CGAL::polylines_to_protect` is +// not documented. +template +bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) +{ + typedef unsigned char Word_type; + + using Gt = typename Mesh_domain::R; + using Point_3 = typename Gt::Point_3; + using Vector_3 = typename Gt::Vector_3; + using Polyline_type = std::vector; + using Polylines = std::vector; + + CGAL::Mesh_3::Triple_line_extractor lines; + + Polylines features_inside; + + const double vx = image.vx(); + const double vy = image.vy(); + const double vz = image.vz(); + const double dist_bound = (std::min)(vx, (std::min)(vy, vz)) / 256; + const double sq_dist_bound = dist_bound * dist_bound; + + const std::size_t xdim = image.xdim(); + const std::size_t ydim = image.ydim(); + const std::size_t zdim = image.zdim(); + + const double tx = image.tx(); + const double ty = image.ty(); + const double tz = image.tz(); + + using CGAL::IMAGEIO::static_evaluate; + + using Del = CGAL::Delaunay_triangulation_3; + using Cell_handle = typename Del::Cell_handle; + using Vertex_handle = typename Del::Vertex_handle; + Del triangulation; + Cell_handle start_cell; + + for (std::size_t k = 0, end_k = zdim - 1; k < end_k; ++k) + for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) + for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) + { + Vector_3 translation{ i * vx + tx, + j * vy + ty, + k * vz + tz }; + const Cube cube = { + static_evaluate(image.image(), i , j , k), + static_evaluate(image.image(), i + 1, j , k), + static_evaluate(image.image(), i , j + 1, k), + static_evaluate(image.image(), i + 1, j + 1, k), + static_evaluate(image.image(), i , j , k + 1), + static_evaluate(image.image(), i + 1, j , k + 1), + static_evaluate(image.image(), i , j + 1, k + 1), + static_evaluate(image.image(), i + 1, j + 1, k + 1), + }; /// TODO: optimize the access to the image data + bool monocolor = cube[0] == cube[1]; + for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); + if (monocolor) continue; + + std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, + INT_MIN, INT_MIN, INT_MIN, INT_MIN }; + std::array color_transformation; + std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); + int nb_color = 0; + for (int i = 0; i < 8; ++i) { + if (color_transformation[cube[i]] == INT_MIN) { + color_transformation[cube[i]] = nb_color; + inv_color_transformation[nb_color] = cube[i]; + ++nb_color; + } + } + if (nb_color > 3) { + CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); + continue; + } + Cube reference_cube = { + (unsigned char)(color_transformation[cube[0]]), + (unsigned char)(color_transformation[cube[1]]), + (unsigned char)(color_transformation[cube[2]]), + (unsigned char)(color_transformation[cube[3]]), + (unsigned char)(color_transformation[cube[4]]), + (unsigned char)(color_transformation[cube[5]]), + (unsigned char)(color_transformation[cube[6]]), + (unsigned char)(color_transformation[cube[7]]), + }; + auto case_it = find_case(cases, reference_cube); + using std::end; + const bool case_found = (case_it != end(cases)); + if (case_found) reference_cube = combinations[(*case_it)[8]]; + else { + //std::cerr << "Warning: case not found: " << reference_cube << '\n'; + CGAL_error(); + }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Cube " << cube << std::endl; + std::cerr << "reference cube " << reference_cube << std::endl; + std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + auto fct_it = lines.create_polylines_fcts.find(reference_cube); + if (fct_it != lines.create_polylines_fcts.end()) { +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + Polylines cube_features = (fct_it->second)(10); + if (case_found) { + const Permutation& transformation = cube_isometries[(*case_it)[9]]; + Coordinates a1 = coordinates[transformation[0]]; + Coordinates u = coordinates[transformation[1]] - a1; + Coordinates v = coordinates[transformation[2]] - a1; + Coordinates w = coordinates[transformation[4]] - a1; + const Point_3 pa{ a1[0], a1[1], a1[2] }; + const Vector_3 vu{ u[0], u[1], u[2] }; + const Vector_3 vv{ v[0], v[1], v[2] }; + const Vector_3 vw{ w[0], w[1], w[2] }; +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::cerr << "pa: " << pa << "\n"; + std::cerr << "vu: " << vu << "\n"; + std::cerr << "vv: " << vv << "\n"; + std::cerr << "vw: " << vw << "\n"; +#endif // CGAL_DEBUG_TRIPLE_LINES + for (auto& polyline : cube_features) { + for (auto& point : polyline) { + point = pa + + point.x() * vu + + point.y() * vv + + point.z() * vw; + point = { vx * point.x(), + vy * point.y(), + vz * point.z(), }; + point = point + translation; + } + for (int i = 0; i < 2; ++i) { + Point_3& extremity = (i == 0) ? polyline.front() : polyline.back(); + Vertex_handle vh = triangulation.nearest_vertex(extremity, start_cell); + if (Vertex_handle() != vh) { + if (squared_distance(vh->point(), extremity) < sq_dist_bound) { + extremity = vh->point(); + } + } + vh = triangulation.insert(extremity, start_cell); + start_cell = vh->cell(); + } + features_inside.push_back(std::move(polyline)); + } // end loop on polylines + } // end case where the transformation is not the identity + } // end if the reference_cube has polylines + } + + // call the split_graph_into_polylines, to create long polylines from the + // short polylines that were generated per voxel. + Polylines new_polylines_inside; + CGAL::polylines_to_protect(new_polylines_inside, + features_inside.begin(), + features_inside.end()); + + std::vector > polylines_on_bbox; + CGAL::polylines_to_protect(image, polylines_on_bbox, + new_polylines_inside.begin(), + new_polylines_inside.end()); + + domain.add_features(polylines_on_bbox.begin(), polylines_on_bbox.end()); + + // It is very important that the polylines from the file `lines_fname` + // contain only polylines in the inside of the box of the image. + domain.add_features(new_polylines_inside.begin(), new_polylines_inside.end()); + +#ifdef CGAL_DEBUG_TRIPLE_LINES + std::ofstream output_polylines("out-generated.polylines.txt"); + output_polylines.precision(17); + for (auto poly : boost::range::join(polylines_on_bbox, new_polylines_inside)) { + output_polylines << poly.size(); + for (auto p : poly) output_polylines << " " << p; + output_polylines << std::endl; + } +#endif + + return true; +} + +}//end namespace Mesh_3 +}//end namespace CGAL + + +#endif //CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h deleted file mode 100644 index ac0c019009e..00000000000 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef COORDINATES_H -#define COORDINATES_H - -#include - -#include - -typedef std::array Coordinates; -constexpr Coordinates coordinates[8] = { 0, 0, 0, - 1, 0, 0, - 0, 1, 0, - 1, 1, 0, - 0, 0, 1, - 1, 0, 1, - 0, 1, 1, - 1, 1, 1 }; - -Coordinates operator-(Coordinates b, Coordinates a) { - return { b[0]-a[0], b[1]-a[1], b[2]-a[2] }; -} - -Coordinates cross(Coordinates a, Coordinates 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] }; -} - -Coordinates square(Coordinates c) { - return { c[0]*c[0], c[1]*c[1], c[2]*c[2] }; -} - -int dist(Coordinates a, Coordinates b) { - auto s = square(b - a); - return s[0] + s[1] + s[2]; -} - -#endif // COORDINATES_H From a5563fc5fcd19e7009a46cbae43ce6927fae4a72 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 3 May 2022 11:32:18 +0200 Subject: [PATCH 007/144] move code back to internal header --- .../include/CGAL/Mesh_3/detect_triple_lines.h | 49 ++++----------- .../triple_lines_extraction/coordinates.h | 62 +++++++++++++++++++ 2 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index ba980b91586..c35accaaa3a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -14,15 +14,16 @@ // //****************************************************************************** -#ifndef CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H -#define CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H +#ifndef CGAL_MESH_3_DETECT_TRIPLE_LINES_H +#define CGAL_MESH_3_DETECT_TRIPLE_LINES_H +#include #include #include #include #include -#include // undocumented header +#include #include #include @@ -35,35 +36,6 @@ namespace CGAL { namespace Mesh_3 { -//namespace internal -//{ - using Coordinates = std::array; - constexpr Coordinates coordinates[8] = { 0, 0, 0, - 1, 0, 0, - 0, 1, 0, - 1, 1, 0, - 0, 0, 1, - 1, 0, 1, - 0, 1, 1, - 1, 1, 1 }; - - Coordinates operator-(Coordinates b, Coordinates a) { - return { b[0] - a[0], b[1] - a[1], b[2] - a[2] }; - } - - Coordinates cross(Coordinates a, Coordinates 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] }; - } - - Coordinates square(Coordinates c) { - return { c[0] * c[0], c[1] * c[1], c[2] * c[2] }; - } - - int dist(Coordinates a, Coordinates b) { - auto s = square(b - a); - return s[0] + s[1] + s[2]; - } -//}// // Protect the intersection of the object with the box of the image, // by declaring 1D-features. Note that `CGAL::polylines_to_protect` is @@ -173,10 +145,13 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) Polylines cube_features = (fct_it->second)(10); if (case_found) { const Permutation& transformation = cube_isometries[(*case_it)[9]]; - Coordinates a1 = coordinates[transformation[0]]; - Coordinates u = coordinates[transformation[1]] - a1; - Coordinates v = coordinates[transformation[2]] - a1; - Coordinates w = coordinates[transformation[4]] - a1; + + using Coord = internal::Coordinates; + Coord a1 = internal::coordinates[transformation[0]]; + Coord u = internal::minus(internal::coordinates[transformation[1]], a1); + Coord v = internal::minus(internal::coordinates[transformation[2]], a1); + Coord w = internal::minus(internal::coordinates[transformation[4]], a1); + const Point_3 pa{ a1[0], a1[1], a1[2] }; const Vector_3 vu{ u[0], u[1], u[2] }; const Vector_3 vv{ v[0], v[1], v[2] }; @@ -250,4 +225,4 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) }//end namespace CGAL -#endif //CGAL_MESH_3_ADD_TRIPLE_LINE_FEATURES_H +#endif //CGAL_MESH_3_DETECT_TRIPLE_LINES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h new file mode 100644 index 00000000000..2dbcd0e8a70 --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -0,0 +1,62 @@ +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot +// +//****************************************************************************** +// +//****************************************************************************** + + +#ifndef CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H +#define CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H + +#include + +#include + +namespace CGAL +{ +namespace Mesh_3 +{ +namespace internal +{ + using Coordinates = std::array; + constexpr Coordinates coordinates[8] = { 0, 0, 0, + 1, 0, 0, + 0, 1, 0, + 1, 1, 0, + 0, 0, 1, + 1, 0, 1, + 0, 1, 1, + 1, 1, 1 }; + + Coordinates minus(const Coordinates& b, const Coordinates& a) { + return { b[0] - a[0], b[1] - a[1], b[2] - a[2] }; + } + + Coordinates cross(Coordinates a, Coordinates 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] }; + } + + Coordinates square(Coordinates c) { + return { c[0] * c[0], c[1] * c[1], c[2] * c[2] }; + } + + int dist(Coordinates a, Coordinates b) { + auto s = square(minus(b, a)); + return s[0] + s[1] + s[2]; + } + +}//end namespace internal +}//end namespace Mesh_3 +}//end namespace CGAL + +#endif // CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H From 23d828820678699a2e96e12f6d7022bcfa4efdfd Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 3 May 2022 11:38:01 +0200 Subject: [PATCH 008/144] add license header and namespaces --- .../include/CGAL/Mesh_3/detect_triple_lines.h | 4 +- .../triple_lines_extraction/combinations.h | 156 +++++++++++------- 2 files changed, 95 insertions(+), 65 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index c35accaaa3a..7e979b934e3 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -84,6 +84,8 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) Vector_3 translation{ i * vx + tx, j * vy + ty, k * vz + tz }; + + using Cube = internal::Cube; const Cube cube = { static_evaluate(image.image(), i , j , k), static_evaluate(image.image(), i + 1, j , k), @@ -127,7 +129,7 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) auto case_it = find_case(cases, reference_cube); using std::end; const bool case_found = (case_it != end(cases)); - if (case_found) reference_cube = combinations[(*case_it)[8]]; + if (case_found) reference_cube = internal::combinations[(*case_it)[8]]; else { //std::cerr << "Warning: case not found: " << reference_cube << '\n'; CGAL_error(); diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index be0bf59c45a..207df8c08cd 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -1,71 +1,99 @@ -#ifndef COMBINATIONS_H -#define COMBINATIONS_H +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot +// +//****************************************************************************** +// +//****************************************************************************** + + +#ifndef CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H +#define CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H #include #include -typedef std::array Cube; +namespace CGAL +{ +namespace Mesh_3 +{ +namespace internal +{ -const Cube combinations[] = { -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,1, -0,0,0,0,0,0,1,1, -0,0,0,0,0,0,1,2, -0,0,0,0,0,1,1,0, -0,0,0,0,0,1,1,1, -0,0,0,0,0,1,1,2, -0,0,0,0,0,1,2,0, -0,0,0,0,0,1,2,1, -0,0,0,0,1,1,1,1, -0,0,0,0,1,1,1,2, -0,0,0,0,1,1,2,2, -0,0,0,0,1,2,2,1, -0,0,0,1,0,1,1,0, -0,0,0,1,0,1,1,1, -0,0,0,1,0,1,1,2, -0,0,0,1,0,1,2,0, -0,0,0,1,0,1,2,1, -0,0,0,1,0,1,2,2, -0,0,0,1,1,0,0,0, -0,0,0,1,1,0,0,1, -0,0,0,1,1,0,0,2, -0,0,0,1,1,0,1,1, -0,0,0,1,1,0,1,2, -0,0,0,1,1,0,2,2, -0,0,0,1,1,1,1,0, -0,0,0,1,1,1,1,2, -0,0,0,1,1,1,2,0, -0,0,0,1,1,1,2,1, -0,0,0,1,1,1,2,2, -0,0,0,1,1,2,2,0, -0,0,0,1,1,2,2,1, -0,0,0,1,1,2,2,2, -0,0,0,1,2,0,0,0, -0,0,0,1,2,0,0,1, -0,0,0,1,2,0,0,2, -0,0,0,1,2,0,1,2, -0,0,0,1,2,0,2,1, -0,0,0,1,2,1,1,0, -0,0,0,1,2,1,1,2, -0,0,0,1,2,1,2,0, -0,0,0,1,2,1,2,1, -0,0,0,1,2,1,2,2, -0,0,0,1,2,2,2,1, -0,0,1,1,1,1,0,0, -0,0,1,1,1,1,0,2, -0,0,1,1,1,1,2,2, -0,0,1,1,1,2,0,2, -0,0,1,1,1,2,2,0, -0,0,1,2,1,2,0,0, -0,0,1,2,1,2,0,1, -0,0,1,2,1,2,2,1, -0,0,1,2,2,1,0,0, -0,0,1,2,2,1,0,1, -0,1,1,0,1,0,0,1, -0,1,1,0,1,0,0,2, -0,1,1,0,1,2,2,1, -0,1,1,2,1,2,2,0, -}; + typedef std::array Cube; -#endif // COMBINATIONS_H + const Cube combinations[] = { 0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,1, + 0,0,0,0,0,0,1,2, + 0,0,0,0,0,1,1,0, + 0,0,0,0,0,1,1,1, + 0,0,0,0,0,1,1,2, + 0,0,0,0,0,1,2,0, + 0,0,0,0,0,1,2,1, + 0,0,0,0,1,1,1,1, + 0,0,0,0,1,1,1,2, + 0,0,0,0,1,1,2,2, + 0,0,0,0,1,2,2,1, + 0,0,0,1,0,1,1,0, + 0,0,0,1,0,1,1,1, + 0,0,0,1,0,1,1,2, + 0,0,0,1,0,1,2,0, + 0,0,0,1,0,1,2,1, + 0,0,0,1,0,1,2,2, + 0,0,0,1,1,0,0,0, + 0,0,0,1,1,0,0,1, + 0,0,0,1,1,0,0,2, + 0,0,0,1,1,0,1,1, + 0,0,0,1,1,0,1,2, + 0,0,0,1,1,0,2,2, + 0,0,0,1,1,1,1,0, + 0,0,0,1,1,1,1,2, + 0,0,0,1,1,1,2,0, + 0,0,0,1,1,1,2,1, + 0,0,0,1,1,1,2,2, + 0,0,0,1,1,2,2,0, + 0,0,0,1,1,2,2,1, + 0,0,0,1,1,2,2,2, + 0,0,0,1,2,0,0,0, + 0,0,0,1,2,0,0,1, + 0,0,0,1,2,0,0,2, + 0,0,0,1,2,0,1,2, + 0,0,0,1,2,0,2,1, + 0,0,0,1,2,1,1,0, + 0,0,0,1,2,1,1,2, + 0,0,0,1,2,1,2,0, + 0,0,0,1,2,1,2,1, + 0,0,0,1,2,1,2,2, + 0,0,0,1,2,2,2,1, + 0,0,1,1,1,1,0,0, + 0,0,1,1,1,1,0,2, + 0,0,1,1,1,1,2,2, + 0,0,1,1,1,2,0,2, + 0,0,1,1,1,2,2,0, + 0,0,1,2,1,2,0,0, + 0,0,1,2,1,2,0,1, + 0,0,1,2,1,2,2,1, + 0,0,1,2,2,1,0,0, + 0,0,1,2,2,1,0,1, + 0,1,1,0,1,0,0,1, + 0,1,1,0,1,0,0,2, + 0,1,1,0,1,2,2,1, + 0,1,1,2,1,2,2,0, + }; + +}//end namespace internal +}//end namespace Mesh_3 +}//end namespace CGAL + + +#endif // CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H From 0e04ec9d5c9c8296cc4a54e7d99b039524d5de3f Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 3 May 2022 11:44:06 +0200 Subject: [PATCH 009/144] add word type as template parameter --- Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 7e979b934e3..6fdd1f7947b 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -40,11 +40,9 @@ namespace Mesh_3 // Protect the intersection of the object with the box of the image, // by declaring 1D-features. Note that `CGAL::polylines_to_protect` is // not documented. -template +template bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) { - typedef unsigned char Word_type; - using Gt = typename Mesh_domain::R; using Point_3 = typename Gt::Point_3; using Vector_3 = typename Gt::Vector_3; From 715295fdc80a1c7c2e7a42159fc5756a21148a3d Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 3 May 2022 16:09:37 +0200 Subject: [PATCH 010/144] add license headers, and add namespaces --- ...sh_3D_image_with_detection_of_features.cpp | 2 +- .../include/CGAL/Mesh_3/detect_triple_lines.h | 40 ++-- .../triple_lines_extraction/cases_table.h | 37 ++- .../triple_lines_extraction/combinations.h | 6 +- .../triple_lines_extraction/cube_isometries.h | 131 ++++++----- .../triple_lines_extraction/triple_lines.h | 221 +++++++++++------- 6 files changed, 266 insertions(+), 171 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index b93978d8cb5..b67b6f0109a 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -52,7 +52,7 @@ int main(int argc, char* argv[]) Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image); /// Declare 1D-features, see above [Call detect_triple_lines] - if(!CGAL::Mesh_3::detect_triple_lines(image, domain)) { + if(!CGAL::Mesh_3::detect_triple_lines(image, domain)) { return EXIT_FAILURE; } /// [Call add_1D_features] diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 6fdd1f7947b..0f156d26a8f 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -83,18 +83,18 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) j * vy + ty, k * vz + tz }; - using Cube = internal::Cube; + using Cube = std::array; const Cube cube = { - static_evaluate(image.image(), i , j , k), - static_evaluate(image.image(), i + 1, j , k), - static_evaluate(image.image(), i , j + 1, k), - static_evaluate(image.image(), i + 1, j + 1, k), - static_evaluate(image.image(), i , j , k + 1), - static_evaluate(image.image(), i + 1, j , k + 1), - static_evaluate(image.image(), i , j + 1, k + 1), - static_evaluate(image.image(), i + 1, j + 1, k + 1), + static_evaluate(image.image(), i , j , k), + static_evaluate(image.image(), i + 1, j , k), + static_evaluate(image.image(), i , j + 1, k), + static_evaluate(image.image(), i + 1, j + 1, k), + static_evaluate(image.image(), i , j , k + 1), + static_evaluate(image.image(), i + 1, j , k + 1), + static_evaluate(image.image(), i , j + 1, k + 1), + static_evaluate(image.image(), i + 1, j + 1, k + 1), }; /// TODO: optimize the access to the image data - bool monocolor = cube[0] == cube[1]; + bool monocolor = (cube[0] == cube[1]); for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); if (monocolor) continue; @@ -115,18 +115,18 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) continue; } Cube reference_cube = { - (unsigned char)(color_transformation[cube[0]]), - (unsigned char)(color_transformation[cube[1]]), - (unsigned char)(color_transformation[cube[2]]), - (unsigned char)(color_transformation[cube[3]]), - (unsigned char)(color_transformation[cube[4]]), - (unsigned char)(color_transformation[cube[5]]), - (unsigned char)(color_transformation[cube[6]]), - (unsigned char)(color_transformation[cube[7]]), + (Word_type)(color_transformation[cube[0]]), + (Word_type)(color_transformation[cube[1]]), + (Word_type)(color_transformation[cube[2]]), + (Word_type)(color_transformation[cube[3]]), + (Word_type)(color_transformation[cube[4]]), + (Word_type)(color_transformation[cube[5]]), + (Word_type)(color_transformation[cube[6]]), + (Word_type)(color_transformation[cube[7]]), }; - auto case_it = find_case(cases, reference_cube); + auto case_it = internal::find_case(internal::cases, reference_cube); using std::end; - const bool case_found = (case_it != end(cases)); + const bool case_found = (case_it != end(internal::cases)); if (case_found) reference_cube = internal::combinations[(*case_it)[8]]; else { //std::cerr << "Warning: case not found: " << reference_cube << '\n'; diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h index fc7e8670169..47a569aff53 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -1,5 +1,21 @@ -#ifndef CASES_TABLES_H -#define CASES_TABLES_H +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot +// +//****************************************************************************** +// +//****************************************************************************** + +#ifndef CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H +#define CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H #include @@ -9,8 +25,15 @@ #include #include -typedef std::array Combination; -typedef boost::hash Hash_combination; +namespace CGAL +{ +namespace Mesh_3 +{ +namespace internal +{ + +using Combination = std::array; +using Hash_combination = boost::hash; using Cases = std::array[6561]; @@ -6595,4 +6618,8 @@ const Cases cases = { { {2,2,2,2,2,2,2,2, 0, 0} }, }; -#endif // CASES_TABLE_H +}//end namespace internal +}//end namespace Mesh_3 +}//end namespace CGAL + +#endif // CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index 207df8c08cd..703c43d7538 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -28,10 +28,8 @@ namespace Mesh_3 { namespace internal { - - typedef std::array Cube; - - const Cube combinations[] = { 0,0,0,0,0,0,0,0, + const std::array combinations[] + = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,1,1, 0,0,0,0,0,0,1,2, diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index b0f53a2456c..be69b49e6c1 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -1,63 +1,86 @@ -#ifndef CUBE_ISOMETRIES_H -#define CUBE_ISOMETRIES_H +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot +// +//****************************************************************************** +// +//****************************************************************************** + +#ifndef CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H +#define CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H #include #include -typedef std::array Permutation; +namespace CGAL +{ +namespace Mesh_3 +{ + using Permutation = std::array; -Permutation cube_isometries[] = { -0,1,2,3,4,5,6,7, -1,0,3,2,5,4,7,6, -4,5,0,1,6,7,2,3, -5,4,1,0,7,6,3,2, -6,7,4,5,2,3,0,1, -7,6,5,4,3,2,1,0, -2,3,6,7,0,1,4,5, -3,2,7,6,1,0,5,4, -1,5,3,7,0,4,2,6, -5,1,7,3,4,0,6,2, -5,4,7,6,1,0,3,2, -4,5,6,7,0,1,2,3, -4,0,6,2,5,1,7,3, -0,4,2,6,1,5,3,7, -1,3,0,2,5,7,4,6, -3,1,2,0,7,5,6,4, -3,2,1,0,7,6,5,4, -2,3,0,1,6,7,4,5, -2,0,3,1,6,4,7,5, -0,2,1,3,4,6,5,7, -1,0,5,4,3,2,7,6, -0,1,4,5,2,3,6,7, -7,3,5,1,6,2,4,0, -3,7,1,5,2,6,0,4, -7,6,3,2,5,4,1,0, -6,7,2,3,4,5,0,1, -2,6,0,4,3,7,1,5, -6,2,4,0,7,3,5,1, -4,6,5,7,0,2,1,3, -6,4,7,5,2,0,3,1, -7,5,6,4,3,1,2,0, -5,7,4,6,1,3,0,2, -0,4,1,5,2,6,3,7, -4,0,5,1,6,2,7,3, -3,1,7,5,2,0,6,4, -1,3,5,7,0,2,4,6, -5,7,1,3,4,6,0,2, -7,5,3,1,6,4,2,0, -3,7,2,6,1,5,0,4, -7,3,6,2,5,1,4,0, -0,2,4,6,1,3,5,7, -2,0,6,4,3,1,7,5, -5,1,4,0,7,3,6,2, -1,5,0,4,3,7,2,6, -6,2,7,3,4,0,5,1, -2,6,3,7,0,4,1,5, -6,4,2,0,7,5,3,1, -4,6,0,2,5,7,1,3, -}; + Permutation cube_isometries[] = { + 0,1,2,3,4,5,6,7, + 1,0,3,2,5,4,7,6, + 4,5,0,1,6,7,2,3, + 5,4,1,0,7,6,3,2, + 6,7,4,5,2,3,0,1, + 7,6,5,4,3,2,1,0, + 2,3,6,7,0,1,4,5, + 3,2,7,6,1,0,5,4, + 1,5,3,7,0,4,2,6, + 5,1,7,3,4,0,6,2, + 5,4,7,6,1,0,3,2, + 4,5,6,7,0,1,2,3, + 4,0,6,2,5,1,7,3, + 0,4,2,6,1,5,3,7, + 1,3,0,2,5,7,4,6, + 3,1,2,0,7,5,6,4, + 3,2,1,0,7,6,5,4, + 2,3,0,1,6,7,4,5, + 2,0,3,1,6,4,7,5, + 0,2,1,3,4,6,5,7, + 1,0,5,4,3,2,7,6, + 0,1,4,5,2,3,6,7, + 7,3,5,1,6,2,4,0, + 3,7,1,5,2,6,0,4, + 7,6,3,2,5,4,1,0, + 6,7,2,3,4,5,0,1, + 2,6,0,4,3,7,1,5, + 6,2,4,0,7,3,5,1, + 4,6,5,7,0,2,1,3, + 6,4,7,5,2,0,3,1, + 7,5,6,4,3,1,2,0, + 5,7,4,6,1,3,0,2, + 0,4,1,5,2,6,3,7, + 4,0,5,1,6,2,7,3, + 3,1,7,5,2,0,6,4, + 1,3,5,7,0,2,4,6, + 5,7,1,3,4,6,0,2, + 7,5,3,1,6,4,2,0, + 3,7,2,6,1,5,0,4, + 7,3,6,2,5,1,4,0, + 0,2,4,6,1,3,5,7, + 2,0,6,4,3,1,7,5, + 5,1,4,0,7,3,6,2, + 1,5,0,4,3,7,2,6, + 6,2,7,3,4,0,5,1, + 2,6,3,7,0,4,1,5, + 6,4,2,0,7,5,3,1, + 4,6,0,2,5,7,1,3, + }; constexpr int num_isometries = 48; -#endif // CUBE_ISOMETRIES_H +}//end namespace Mesh_3 +}//end namespace CGAL + +#endif // CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 48eaee195a0..c87745a0a2a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -1,11 +1,25 @@ -#ifndef CGAL_MESH_3_TRIPLE_LINES_H +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot +// +//****************************************************************************** +// +//****************************************************************************** + + +#ifndef CGAL_MESH_3_TRIPLE_LINES_H #define CGAL_MESH_3_TRIPLE_LINES_H #include -#include -#include - #include #include @@ -18,11 +32,7 @@ namespace CGAL namespace Mesh_3 { -using K = CGAL::Exact_predicates_inexact_constructions_kernel; -using P = CGAL::Point_3; -using Polylines = std::vector >; - -template +template std::vector

create_polyline(const double start, const double end, P starting_point, @@ -57,7 +67,7 @@ std::vector

create_polyline(const double start, return poly; } -template +template std::vector

create_polyline(const double start, const double end, P starting_point, @@ -67,13 +77,13 @@ std::vector

create_polyline(const double start, return create_polyline(start, end, starting_point, f(end), f, prec); } -template +template std::vector

create_polyline(const double start, const double end, Functor f, const int prec) { - return create_polyline(start, end, f(start), f(end), f, prec); + return create_polyline

(start, end, f(start), f(end), f, prec); } @@ -111,7 +121,8 @@ std::vector

create_polyline(const double start, // curve_2 : x=[0,1/2], y=1/2, z=2/3 // curve_2' : x=[1/2,1], y=1/2, z=2/3 // curve_3 : x=1/2, y=1/2, z=[2/3,1] -Polylines poly00001221(const int /* no sampling for segments */) +template +std::vector> poly00001221(const int /* no sampling for segments */) { P corner{ 1. / 2, 1. / 2, 2. / 3 }; P a{ 1. / 2, 0, 2. / 3 }; @@ -137,7 +148,8 @@ Polylines poly00001221(const int /* no sampling for segments */) // ADDED curve_2' : x=1/(3*z),y=1/2,z=[1/3,2/3] // curve_3 : x=(2*z−1)/z,y=1/2, z=[1/2,2/3] // REMOVED curve_3' : x=(2*z−1)/z,y=1/2, z=[2/3,1] -Polylines poly00111202(const int prec = 10) +template +std::vector> poly00111202(const int prec = 10) { P a{ 1. / 2, 0. , 2. / 3 }; P corner{ 1. / 2, 1. / 2, 2. / 3 }; @@ -165,7 +177,8 @@ Polylines poly00111202(const int prec = 10) // curve_2' : x=1/2, y=[1/2,1], z=1/2 // curve_3 : x=[0,1/2], y=1/2, z=1/2 // curve_3' : x=[1/2,1], y=1/2, z=1/2 -Polylines poly01101001(const int /* no sampling for segments */) +template +std::vector> poly01101001(const int /* no sampling for segments */) { P corner{ 1. / 2, 1. / 2, 1. / 2 }; P a{ 1. / 2, 1. / 2, 0 }; @@ -189,7 +202,8 @@ Polylines poly01101001(const int /* no sampling for segments */) // // Two curves // -Polylines poly00011022(const int prec = 10) +template +std::vector> poly00011022(const int prec = 10) { // x = (3*z^2-2*z)/(3*z^2-1), y = 1/(3*z), z = [1/3,1/2] // x = (3*z^2-2*z)/(3*z^2-1), y = 1/(3*z), z = [2/3,1] @@ -197,8 +211,8 @@ Polylines poly00011022(const int prec = 10) 1 / (3 * z), z); }; return { - create_polyline(1. / 3, 1. / 2, f, prec), - create_polyline(2. / 3, 1. , f, prec), + create_polyline

(1. / 3, 1. / 2, f, prec), + create_polyline

(2. / 3, 1. , f, prec), }; } @@ -207,7 +221,8 @@ Polylines poly00011022(const int prec = 10) // point limit x = 1/2, y = 0, z = 2/3 // curve_2 : x = ]0,1/3], y = (3 * x * x + sqrt(9 * x * x * x * x - 30 * x * x * x + 45 * x * x - 24 * x + 4) + 3 * x - 2)/(6 * x * (2 * x - 1)), z = 1./(3*x+3*y-6*x*y) // point limit x = 0, y = 1/2, z = 2/3 -Polylines poly00011221(const int prec = 10) +template +std::vector> poly00011221(const int prec = 10) { auto sq_exp = [](double x) { return sqrt(9 * x * x * x * x - 30 * x * x * x + 45 * x * x - 24 * x + 4); @@ -233,7 +248,8 @@ Polylines poly00011221(const int prec = 10) // point limit x = 1, y = 1/2, z=1/3 // curve_2 : x = ]0,1/2], y = (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 *x * x - 16 * x + 4) + x - 2)/(6 * (x - 1) * x), z = 1./(3*x+3*y-3*x*y) // point limit x = 0, y=1/2, z=2/3 -Polylines poly00011222(const int prec = 10) +template +std::vector> poly00011222(const int prec = 10) { auto sq_exp = [](double x) { return sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4); @@ -257,14 +273,15 @@ Polylines poly00011222(const int prec = 10) // 00121200 // curve_1 : x = 1/2, y = (3*z-2)/(6*z-3), z = [0,1/3] // curve_1' : x = 1/2, y = (3*z-2)/(6*z-3), z = [2/3,1] -Polylines poly00121200(const int prec = 10) +template +std::vector> poly00121200(const int prec = 10) { auto y = [](double z) { return (3 * z - 2) / (6 * z - 3); }; return { - create_polyline(0, 1. / 3, + create_polyline

(0, 1. / 3, [y](double z) { return P(1. / 2, y(z), z); }, prec), - create_polyline(2. / 3, 1, + create_polyline

(2. / 3, 1, [y](double z) { return P(1. / 2, y(z), z); }, prec) }; @@ -273,15 +290,16 @@ Polylines poly00121200(const int prec = 10) // 00121221 // curve_1 : x = 1/2, y = (3*z-2)/(3*z-3), z = [0,2/3] // curve_2 : x = 1/2, y = z/(3*z-1), z = [1/2,1] -Polylines poly00121221(const int prec = 10) +template +std::vector> poly00121221(const int prec = 10) { auto y1 = [](double z) { return (3 * z - 2) / (3 * z - 3); }; auto y2 = [](double z) { return z / (3 * z - 1); }; return { - create_polyline(0, 2. / 3, + create_polyline

(0, 2. / 3, [y1](double z) { return P(1. / 2, y1(z), z); }, prec), - create_polyline(1. / 2, 1, + create_polyline

(1. / 2, 1, [y2](double z) { return P(1. / 2, y2(z), z); }, prec) }; @@ -290,14 +308,15 @@ Polylines poly00121221(const int prec = 10) // 00122100 // curve_1 : x = 1/2, y = (3*z-2)/(6*z-3), z = [0,1/3] // curve_1' : x = 1/2, y = (3*z-2)/(6*z-3), z = [2/3,1] -Polylines poly00122100(const int prec = 10) +template +std::vector> poly00122100(const int prec = 10) { auto y = [](double z) { return (3 * z - 2) / (6 * z - 3); }; return { - create_polyline(0, 1. / 3, + create_polyline

(0, 1. / 3, [y](double z) { return P(1. / 2, y(z), z); }, prec), - create_polyline(2. / 3, 1, + create_polyline

(2. / 3, 1, [y](double z) { return P(1. / 2, y(z), z); }, prec) }; @@ -309,7 +328,8 @@ Polylines poly00122100(const int prec = 10) // curve_2 : x = [1./2,1[ , y = ( sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 5 x + 3)/(6 (x - 1)^2), // z = ( sqrt(24 x^3 - 35 x^2 + 18 x - 3) - 7 x + 3)/(6 (x^2 - 3 x + 1)) // point limit of curve_2 when x -> 1 x = 1, y = 1/2, z = 1/3 -Polylines poly00122101(const int prec = 10) +template +std::vector> poly00122101(const int prec = 10) { auto sq_exp = [](double x) { return sqrt(24 * x * x * x - 35 * x * x + 18 * x - 3); @@ -320,10 +340,10 @@ Polylines poly00122101(const int prec = 10) auto z2 = [sq_exp](double x) { return (sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; P corner{ 1., .5, 1. / 3 }; return { - create_polyline(1. / 3, 1. / 2, + create_polyline

(1. / 3, 1. / 2, [y1, z1](double x) { return P(x, y1(x), z1(x)); }, prec), - create_polyline(1., 1. / 2, corner, + create_polyline

(1., 1. / 2, corner, [y2, z2](double x) { return P(x, y2(x), z2(x)); }, prec), }; @@ -332,46 +352,51 @@ Polylines poly00122101(const int prec = 10) // // One curve // -Polylines poly00000012(const int prec = 10) +template +std::vector> poly00000012(const int prec = 10) { // curve : x = 1/2, y = 2/(3*z), z = [2/3,1] - return { create_polyline(2. / 3, 1., + return { create_polyline

(2. / 3, 1., [](double z) { return P(0.5, 2. / (3. * z), z); }, prec) }; } // 00000112 // x =[1/2,1], y = x/(3 * x - 1), z = (3 * x - 1)/(3 * x * x) -Polylines poly00000112(const int prec = 10) +template +std::vector> poly00000112(const int prec = 10) { - return { create_polyline(1. / 2, 1, + return { create_polyline

(1. / 2, 1, [](double x) { return P(x, x / (3 * x - 1), (3 * x - 1) / (3 * x * x)); }, prec) }; } // 00000121 // curve : x = 1/(3*z), y = 1/(3*z-1), z = [2/3,1] -Polylines poly00000121(const int prec = 10) +template +std::vector> poly00000121(const int prec = 10) { - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [](double z) { return P(1 / (3 * z), 1 / (3 * z - 1), z); }, prec) }; } // 00001112 // curve : x = 1/(2*y), y = [1/2, 1],z = 2/3 -Polylines poly00001112(const int prec = 10) +template +std::vector> poly00001112(const int prec = 10) { - return { create_polyline(1. / 2, 1, + return { create_polyline

(1. / 2, 1, [](double y) { return P(1 / (2 * y), y, 2. / 3); }, prec) }; } // 00001122 // curve : x = [0,1], y = 1/2, z = 2/3 -Polylines poly00001122(const int prec = 10) +template +std::vector> poly00001122(const int prec = 10) { - return { create_polyline(0, 1, + return { create_polyline

(0, 1, [](double x) { return P(x, 1. / 2, 2. / 3); }, prec) }; } @@ -379,88 +404,98 @@ Polylines poly00001122(const int prec = 10) // 00010121 // curve : x =y * z / (z+y), y = ((3 * z * z - 1) - sqrt(CGAL::square(1 - 3 * z * z) - 12 * (z - 1) * z * z))/(6 * (z - 1) * z), z=[1,1/2[ // point limit = (1/3, 1/2, 1) -Polylines poly00010121(const int prec = 10) +template +std::vector> poly00010121(const int prec = 10) { auto y = [](double z) { return ((3 * z * z - 1) - sqrt(CGAL::square(1 - 3 * z * z) - 12 * (z - 1) * z * z)) / (6 * (z - 1) * z); }; auto x = [](double y, double z) { return y * z / (z + y); }; P corner(1. / 3, 1. / 2, 1); - return { create_polyline(1, 1. / 2, corner, + return { create_polyline

(1, 1. / 2, corner, [x, y](double z) { return P(x(y(z), z), y(z), z); }, prec) }; } // 00010122 // curve : x = z/(3*z^2-2*z+1), y = 1/(3*z), z = [1/3,1] -Polylines poly00010122(const int prec = 10) +template +std::vector> poly00010122(const int prec = 10) { - return { create_polyline(1. / 3, 1, + return { create_polyline

(1. / 3, 1, [](double z) { return P(z / (3 * z * z - 2 * z + 1), 1. / (3 * z), z); }, prec) }; } // 00011002 // curve : x = (y+1)/(4*y-1), y = [2/3,1], z = 1/2 -Polylines poly00011002(const int prec = 10) +template +std::vector> poly00011002(const int prec = 10) { - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [](double y) { return P((y + 1) / (4 * y - 1), y, 1. / 2); }, prec) }; } // 00011012 // curve : x = (3*z^2-2*z+1)/(3*z^2), y = z/(3*z^2-2*z+1), z = [1/2, 1] -Polylines poly00011012(const int prec = 10) +template +std::vector> poly00011012(const int prec = 10) { - return { create_polyline(1. / 2, 1, + return { create_polyline

(1. / 2, 1, [](double z) { return P((3 * z * z - 2 * z + 1) / (3 * z * z), z / (3 * z * z - 2 * z + 1), z); }, prec) }; } // 00011110 // curve : x = 1/(2*y), y = [1/2,1], z = 1/2 -Polylines poly00011110(const int prec = 10) +template +std::vector> poly00011110(const int prec = 10) { - return { create_polyline(1. / 2, 1, + return { create_polyline

(1. / 2, 1, [](double y) { return P(1. / (2 * y), y, 1. / 2); }, prec) }; } // 00011120 // curve : x = (3*z^2-2*z)/(3*z^2-1), y = (3*z^2-1)/(6*z^2-3*z), z = [2/3,1] -Polylines poly00011120(const int prec = 10) +template +std::vector> poly00011120(const int prec = 10) { - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [](double z) { return P((3 * z * z - 2 * z) / (3 * z * z - 1), (3 * z * z - 1) / (6 * z * z - 3 * z), z); }, prec) }; } // 00011121 // curve : x = (3*z^2-2*z)/(3*z^2-z-1), y = (3*z^2-z-1)/(3*z^2-3*z), z =[1/2,2./3] -Polylines poly00011121(const int prec = 10) +template +std::vector> poly00011121(const int prec = 10) { - return { create_polyline(1. / 2, 2. / 3, + return { create_polyline

(1. / 2, 2. / 3, [](double z) { return P((3 * z * z - 2 * z) / (3 * z * z - z - 1), (3 * z * z - z - 1) / (3 * z * z - 3 * z), z); }, prec) }; } // 00011122 // curve : x = (3*z*z-2*z)/(z-1),y = 1/(3*z),z = [1/3, 2/3] // -Polylines poly00011122(const int prec = 10) +template +std::vector> poly00011122(const int prec = 10) { - return { create_polyline(1. / 3,2. / 3, + return { create_polyline

(1. / 3,2. / 3, [](double z) { return P((3 * z * z - 2 * z) / (z - 1), 1 / (3 * z), z); }, prec) }; } // 00011220 // curve : x=[0,1/2], y = (2 * x - 1)/(3 * x - 2), z = (2 * (x^2 - 2 * x + 1))/(5 * x^2 - 7 * x + 3) -Polylines poly00011220(const int prec = 10) +template +std::vector> poly00011220(const int prec = 10) { - return { create_polyline(0, 1. / 2, + return { create_polyline

(0, 1. / 2, [](double x) { return P(x, (2 * x - 1) / (3 * x - 2), (2 * (x * x - 2 * x + 1)) / (5 * x * x - 7 * x + 3)); }, prec) }; } // 00012002 // curve_1 : x = [2/3,1], y = (3 * x*x + sqrt(9 * x*x*x*x - 24 * x*x*x + 30 * x*x - 12 * x + 1) - 1)/(6 * x * (2 * x - 1)), z = 1 - 1./(3*x*y) -Polylines poly00012002(const int prec = 10) +template +std::vector> poly00012002(const int prec = 10) { auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 24 * x * x * x + 30 * x * x - 12 * x + 1) - 1) / (6 * x * (2 * x - 1)); }; - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [y](double x) { return P(x, y(x), 1 - 1. / (3 * x * y(x))); }, prec) }; } @@ -470,25 +505,27 @@ Polylines poly00012002(const int prec = 10) // point limit x = 1, y = 2/3, z = 1/2 // point limit x = 1/2, y= 2./3, z = 2./3); // -Polylines poly00012012(const int prec = 10) +template +std::vector> poly00012012(const int prec = 10) { auto y = [](double x, double z) { return 1. / (-6 * x * z + 3 * x + 3 * z); }; auto z = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) - 7 * x + 2) / (6 * (x - 1) * (2 * x - 1)); }; P corner1(1. / 2, 2. / 3, 2. / 3); P corner2(1, 2. / 3, 1. / 2); - return { create_polyline(1. / 2, 0, corner1, + return { create_polyline

(1. / 2, 0, corner1, [y, z](double x) { return P(x, y(x, z(x)), z(x)); }, prec), - create_polyline(1. / 2, 1, corner1, corner2, + create_polyline

(1. / 2, 1, corner1, corner2, [y, z](double x) { return P(x, y(x, z(x)), z(x)); }, prec) }; } // 00012021 // curve : x = (3*z-1)/(3*z), y = z/(3*z-1), z = [1/2,1] -Polylines poly00012021(const int prec = 10) +template +std::vector> poly00012021(const int prec = 10) { - return { create_polyline(1. / 2, 1, + return { create_polyline

(1. / 2, 1, [](double z) { return P((3 * z - 1) / (3 * z), z / (3 * z - 1), z); }, prec) }; } @@ -496,12 +533,13 @@ Polylines poly00012021(const int prec = 10) // curve : x=]0,1/2], y = (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) + x - 2)/(6 * (x - 1) * x), z = (3*x*y-1)/(9*x*y-3*x-3*y) // point limit : x = 0, y = 1/2, z = 2/3 // -Polylines poly00012110(const int prec = 10) +template +std::vector> poly00012110(const int prec = 10) { auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 18 * x * x * x + 25 * x * x - 16 * x + 4) + x - 2) / (6 * (x - 1) * x); }; auto z = [](double x, double y) { return (3 * x * y - 1) / (9 * x * y - 3 * x - 3 * y); }; P corner(0, 1. / 2, 2. / 3); - return { create_polyline(0, 1. / 2, corner, + return { create_polyline

(0, 1. / 2, corner, [y, z](double x) { return P(x, y(x), z(x, y(x))); }, prec) }; } @@ -510,74 +548,82 @@ Polylines poly00012110(const int prec = 10) // point limit x = 0, y = 1/2, z = 2/3 // point limit x = 1/2, y = 0, z = 2/3 // -Polylines poly00012112(const int prec = 10) +template +std::vector> poly00012112(const int prec = 10) { auto y = [](double x) { return (3 * x * x + sqrt(9 * x * x * x * x - 36 * x * x * x + 40 * x * x - 20 * x + 4) + 2 * x - 2) / (6 * x * (2 * x - 1)); }; auto z = [](double x, double y) { return (3 * x * y - 1) / (9 * x * y - 3 * x - 3 * y); }; P corner1(0, 1. / 2, 2. / 3); P corner2(1. / 2, 0, 2. / 3); - return { create_polyline(0, 1. / 2, corner1, corner2, + return { create_polyline

(0, 1. / 2, corner1, corner2, [y, z](double x) { return P(x, y(x), z(x, y(x))); }, prec) }; } // 00012120 // curve : x = (3*z-1)/(3*z), y = (3*z^2-2*z)/(6*z^2-5*z+1), z = [2/3,1] -Polylines poly00012120(const int prec = 10) +template +std::vector> poly00012120(const int prec = 10) { - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [](double z) { return P((3 * z - 1) / (3 * z), (3 * z * z - 2 * z) / (6 * z * z - 5 * z + 1), z); }, prec) }; } // // 00012121 // curve : x = (3*z-1)/(3*z), y = (3*z^2-2*z)/(3*z^2-4*z+1), z = [1/2,2/3] -Polylines poly00012121(const int prec = 10) +template +std::vector> poly00012121(const int prec = 10) { - return { create_polyline(1. / 2, 2. / 3, + return { create_polyline

(1. / 2, 2. / 3, [](double z) { return P((3 * z - 1) / (3 * z), (3 * z * z - 2 * z) / (3 * z * z - 4 * z + 1), z); }, prec) }; } // 00012122 // curve : x = (6*z^2-6*z+1)/(3*z^2-3*z), y = (3*z^2-2*z)/(6*z^2-6*z+1), z = [1/3,2/3] -Polylines poly00012122(const int prec = 10) +template +std::vector> poly00012122(const int prec = 10) { auto x = [](double z) { return (6 * z * z - 6 * z + 1) / (3 * z * z - 3 * z); }; auto y = [](double z) { return (3 * z * z - 2 * z) / (6 * z * z - 6 * z + 1); }; - return { create_polyline(1. / 3, 2. / 3, + return { create_polyline

(1. / 3, 2. / 3, [x,y](double z) { return P(x(z), y(z), z); }, prec) }; } // 00012221 // curve : x = 1/(3*y),y = [1/3,1],z = 1/2 -Polylines poly00012221(const int prec = 10) +template +std::vector> poly00012221(const int prec = 10) { - return { create_polyline(1. / 3, 1, + return { create_polyline

(1. / 3, 1, [](double y) { return P(1. / (3 * y),y , 1. / 2); }, prec) }; } // 00111100 // curve : x = [0,1], y = 1/2, z = 1/2 -Polylines poly00111100(const int prec = 10) +template +std::vector> poly00111100(const int prec = 10) { - return { create_polyline(0, 1, + return { create_polyline

(0, 1, [](double x) { return P(x , 1. / 2, 1. / 2); }, prec) }; } // 00111102 // curve : x = (2*z-1)/(3*z^2-z), y = (3*z-1)/(6*z-3), z = [2/3,1] -Polylines poly00111102(const int prec = 10) +template +std::vector> poly00111102(const int prec = 10) { - return { create_polyline(2. / 3, 1, + return { create_polyline

(2. / 3, 1, [](double z) { return P((2 * z - 1) / (3 * z * z - z), (3 * z - 1) / (6 * z - 3), z); }, prec) }; } // 00111220 // segment 1/2 0 2/3 1/2 1 2/3 -Polylines poly00111220(const int /*not needed for a segment*/) +template +std::vector> poly00111220(const int /*not needed for a segment*/) { return { { P(1. / 2, 0, 2. / 3), P(1. / 2, 1, 2. / 3) } }; } @@ -586,7 +632,8 @@ Polylines poly00111220(const int /*not needed for a segment*/) // curve_1 : x =[1/2, 2/3], y = (-sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2), z = ( sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2) // curve_2 : x =[1/2, 2/3], y = ( sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2), z = (-sqrt(-24 * x^3 + 37 * x^2 - 20 * x + 4) + 5 * x - 2)/(6 * x^2) // point 0 1/2 1/2 -Polylines poly00121201(const int prec = 10) +template +std::vector> poly00121201(const int prec = 10) { auto sq_exp = [](double x) { return sqrt(-24 * x * x * x + 37 * x * x - 20 * x + 4); @@ -595,10 +642,10 @@ Polylines poly00121201(const int prec = 10) auto z = [sq_exp](double x) { return (sq_exp(x) + 5 * x - 2) / (6 * x * x); }; P corner{ 2. / 3, y(2. / 3), z(2. / 3) }; return { - create_polyline(2. / 3, 1. / 2, corner, + create_polyline

(2. / 3, 1. / 2, corner, [y, z](double x) { return P(x, y(x), z(x)); }, prec), - create_polyline(2. / 3, 1. / 2, corner, + create_polyline

(2. / 3, 1. / 2, corner, [y, z](double x) { return P(x, z(x), y(x)); }, prec), // { P(0., .5, .5), P(0., .5, .5) } From 106f9e7f92f6e5b3371cdeed25e897946c4ffb57 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 11:14:40 +0200 Subject: [PATCH 011/144] use std number types and add 64 bits word types --- CGAL_ImageIO/include/CGAL/ImageIO.h | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/CGAL_ImageIO/include/CGAL/ImageIO.h b/CGAL_ImageIO/include/CGAL/ImageIO.h index 9c6b4281cc6..7584fddac56 100644 --- a/CGAL_ImageIO/include/CGAL/ImageIO.h +++ b/CGAL_ImageIO/include/CGAL/ImageIO.h @@ -20,7 +20,7 @@ #include #include -#include // for uint32_t, etc. +#include // for uint32_t, etc. #ifdef CGAL_USE_ZLIB #include @@ -562,38 +562,50 @@ struct Word_type_generator template <> struct Word_type_generator { -// typedef boost::int8_t type; +// typedef std::int8_t type; typedef char type; }; template <> struct Word_type_generator { - typedef boost::uint8_t type; + typedef std::uint8_t type; }; template <> struct Word_type_generator { - typedef boost::int16_t type; + typedef std::int16_t type; }; template <> struct Word_type_generator { - typedef boost::uint16_t type; + typedef std::uint16_t type; }; template <> struct Word_type_generator { - typedef boost::int32_t type; + typedef std::int32_t type; }; template <> struct Word_type_generator { - typedef boost::uint32_t type; + typedef std::uint32_t type; +}; + +template <> +struct Word_type_generator +{ + typedef std::int64_t type; +}; + +template <> +struct Word_type_generator +{ + typedef std::uint64_t type; }; template From 018f9cc656c5c250641ac453a812676def51f117 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 12:20:24 +0200 Subject: [PATCH 012/144] make clear what should or should not be unsigned char get Word from Word_type, and use an unsigned integral type to be able to use it as an index in a table Separate the types Word_type and Word (convert from CGAL Image_3 labels into the Word format) --- .../include/CGAL/Mesh_3/detect_triple_lines.h | 93 +++++++++++-------- .../triple_lines_extraction/cases_table.h | 6 +- .../triple_lines_extraction/combinations.h | 2 +- .../Mesh_3/triple_lines_extraction/cube.h | 40 -------- .../triple_lines_extraction/cube_isometries.h | 5 +- .../triple_lines_extraction/triple_lines.h | 33 ++++++- .../triple_lines_extraction_helpers.h | 70 ++++++++++++++ 7 files changed, 161 insertions(+), 88 deletions(-) delete mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h create mode 100644 Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 0f156d26a8f..b0c292d2e89 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -22,6 +22,7 @@ #include #include #include +#include #include @@ -63,9 +64,9 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) const std::size_t ydim = image.ydim(); const std::size_t zdim = image.zdim(); - const double tx = image.tx(); - const double ty = image.ty(); - const double tz = image.tz(); + const float tx = image.tx(); + const float ty = image.ty(); + const float tz = image.tz(); using CGAL::IMAGEIO::static_evaluate; @@ -75,6 +76,16 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) Del triangulation; Cell_handle start_cell; + using Word //use unsigned integral Word type to use it as an index + = typename CGAL::IMAGEIO::Word_type_generator::type; + + using Color_transform = internal::Color_transformation_helper; + typename Color_transform::type color_transformation; + std::array inv_color_transformation; + + using Permutation = internal::Permutation; + using Coord = internal::Coordinates; + for (std::size_t k = 0, end_k = zdim - 1; k < end_k; ++k) for (std::size_t j = 0, end_j = ydim - 1; j < end_j; ++j) for (std::size_t i = 0, end_i = xdim - 1; i < end_i; ++i) @@ -83,28 +94,26 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) j * vy + ty, k * vz + tz }; - using Cube = std::array; - const Cube cube = { - static_evaluate(image.image(), i , j , k), - static_evaluate(image.image(), i + 1, j , k), - static_evaluate(image.image(), i , j + 1, k), - static_evaluate(image.image(), i + 1, j + 1, k), - static_evaluate(image.image(), i , j , k + 1), - static_evaluate(image.image(), i + 1, j , k + 1), - static_evaluate(image.image(), i , j + 1, k + 1), - static_evaluate(image.image(), i + 1, j + 1, k + 1), + const std::array cube = { + static_evaluate(image.image(), i , j , k), + static_evaluate(image.image(), i + 1, j , k), + static_evaluate(image.image(), i , j + 1, k), + static_evaluate(image.image(), i + 1, j + 1, k), + static_evaluate(image.image(), i , j , k + 1), + static_evaluate(image.image(), i + 1, j , k + 1), + static_evaluate(image.image(), i , j + 1, k + 1), + static_evaluate(image.image(), i + 1, j + 1, k + 1), }; /// TODO: optimize the access to the image data bool monocolor = (cube[0] == cube[1]); for (int i = 2; i < 8; ++i) monocolor = monocolor && (cube[0] == cube[i]); if (monocolor) continue; - std::array inv_color_transformation{ INT_MIN, INT_MIN, INT_MIN, INT_MIN, - INT_MIN, INT_MIN, INT_MIN, INT_MIN }; - std::array color_transformation; - std::fill(color_transformation.begin(), color_transformation.end(), INT_MIN); + Color_transform::reset(color_transformation); + int nb_color = 0; for (int i = 0; i < 8; ++i) { - if (color_transformation[cube[i]] == INT_MIN) { + if (!Color_transform::is_valid(color_transformation, cube[i])) + { color_transformation[cube[i]] = nb_color; inv_color_transformation[nb_color] = cube[i]; ++nb_color; @@ -114,39 +123,41 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) CGAL_warning_msg(nb_color > 3, "voxel with more than 3 colors"); continue; } - Cube reference_cube = { - (Word_type)(color_transformation[cube[0]]), - (Word_type)(color_transformation[cube[1]]), - (Word_type)(color_transformation[cube[2]]), - (Word_type)(color_transformation[cube[3]]), - (Word_type)(color_transformation[cube[4]]), - (Word_type)(color_transformation[cube[5]]), - (Word_type)(color_transformation[cube[6]]), - (Word_type)(color_transformation[cube[7]]), + std::array reference_cube = { + color_transformation[cube[0]], + color_transformation[cube[1]], + color_transformation[cube[2]], + color_transformation[cube[3]], + color_transformation[cube[4]], + color_transformation[cube[5]], + color_transformation[cube[6]], + color_transformation[cube[7]] }; auto case_it = internal::find_case(internal::cases, reference_cube); - using std::end; - const bool case_found = (case_it != end(internal::cases)); + const bool case_found = (case_it != std::end(internal::cases)); if (case_found) reference_cube = internal::combinations[(*case_it)[8]]; else { //std::cerr << "Warning: case not found: " << reference_cube << '\n'; CGAL_error(); }; #ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Cube " << cube << std::endl; - std::cerr << "reference cube " << reference_cube << std::endl; - std::cerr << " with transformation " << cube_isometries[(*case_it)[9]] << "\n"; + internal::debug_cerr("Cube", cube); + internal::debug_cerr("reference cube", reference_cube); + internal::debug_cerr("with transformation", internal::cube_isometries[(*case_it)[9]]); #endif // CGAL_DEBUG_TRIPLE_LINES - auto fct_it = lines.create_polylines_fcts.find(reference_cube); - if (fct_it != lines.create_polylines_fcts.end()) { -#ifdef CGAL_DEBUG_TRIPLE_LINES - std::cerr << "Using the function of " << Cube(fct_it->first) << "\n"; -#endif // CGAL_DEBUG_TRIPLE_LINES - Polylines cube_features = (fct_it->second)(10); - if (case_found) { - const Permutation& transformation = cube_isometries[(*case_it)[9]]; - using Coord = internal::Coordinates; + auto fct_it = lines.create_polylines_fcts.find(reference_cube); + if (fct_it != lines.create_polylines_fcts.end()) + { +#ifdef CGAL_DEBUG_TRIPLE_LINES + internal::debug_cerr("Using the function of", Cube(fct_it->first)); +#endif // CGAL_DEBUG_TRIPLE_LINES + + Polylines cube_features = (fct_it->second)(10); + if (case_found) + { + const Permutation& transformation = internal::cube_isometries[(*case_it)[9]]; + Coord a1 = internal::coordinates[transformation[0]]; Coord u = internal::minus(internal::coordinates[transformation[1]], a1); Coord v = internal::minus(internal::coordinates[transformation[2]], a1); diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h index 47a569aff53..1ea1e996a60 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -32,16 +32,16 @@ namespace Mesh_3 namespace internal { -using Combination = std::array; +using Combination = std::array; using Hash_combination = boost::hash; -using Cases = std::array[6561]; +using Cases = std::array[6561]; auto find_case(const Cases& cases, Combination comb) { using std::begin; using std::end; return std::lower_bound(begin(cases), end(cases), - std::array{ + std::array{ comb[0], comb[1], comb[2], diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index 703c43d7538..c541f1e8b80 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -28,7 +28,7 @@ namespace Mesh_3 { namespace internal { - const std::array combinations[] + const std::array combinations[] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,1,1, diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h deleted file mode 100644 index 0c164defd39..00000000000 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef CUBE_H -#define CUBE_H - -#include - -#include -#include -#include -#include - -typedef std::array Cube; - -inline constexpr Cube convert_to_cube(unsigned int n) { - assert(n < (1<<24)); - return { - (unsigned char)((n & 070000000)>>21), (unsigned char)((n & 007000000)>>18), - (unsigned char)((n & 000700000)>>15), (unsigned char)((n & 000070000)>>12), - (unsigned char)((n & 000007000)>> 9), (unsigned char)((n & 000000700)>> 6), - (unsigned char)((n & 000000070)>> 3), (unsigned char)((n & 000000007)>> 0), - }; -} - -// User-defined literal operator. Given an integer in octal notation, like -// 01234567, gives the cube with the same colors. For example, `01234567_c` -// is `Cube{0, 1, 2, 3, 4, 5, 6, 7}`. -inline constexpr Cube operator"" _c ( unsigned long long n ) -{ - assert(n < (1<<24)); - return convert_to_cube(unsigned(n)); -} - -inline std::string config_name(const Cube cube) { - std::stringstream filename_prefix_ss; - for(int j = 0; j < 8; ++j) { - filename_prefix_ss << int(cube[j]); - } - return filename_prefix_ss.str(); -} - -#endif // CUBE_H diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index be69b49e6c1..f57816b0435 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -25,7 +25,9 @@ namespace CGAL { namespace Mesh_3 { - using Permutation = std::array; +namespace internal +{ + using Permutation = std::array; Permutation cube_isometries[] = { 0,1,2,3,4,5,6,7, @@ -80,6 +82,7 @@ namespace Mesh_3 constexpr int num_isometries = 48; +}//end namespace internal }//end namespace Mesh_3 }//end namespace CGAL diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index c87745a0a2a..15833313c3d 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -20,8 +20,6 @@ #include -#include - #include #include @@ -652,6 +650,37 @@ std::vector> poly00121201(const int prec = 10) }; } +// Cube (begin definition) +using Cube = std::array; + +inline constexpr Cube convert_to_cube(unsigned int n) { + assert(n < (1 << 24)); + return { + (std::uint8_t)((n & 070000000) >> 21), (std::uint8_t)((n & 007000000) >> 18), + (std::uint8_t)((n & 000700000) >> 15), (std::uint8_t)((n & 000070000) >> 12), + (std::uint8_t)((n & 000007000) >> 9), (std::uint8_t)((n & 000000700) >> 6), + (std::uint8_t)((n & 000000070) >> 3), (std::uint8_t)((n & 000000007) >> 0), + }; +} + +// User-defined literal operator. Given an integer in octal notation, like +// 01234567, gives the cube with the same colors. For example, `01234567_c` +// is `Cube{0, 1, 2, 3, 4, 5, 6, 7}`. +inline constexpr Cube operator"" _c(unsigned long long n) +{ + assert(n < (1 << 24)); + return convert_to_cube(unsigned(n)); +} + +inline std::string config_name(const Cube cube) { + std::stringstream filename_prefix_ss; + for (int j = 0; j < 8; ++j) { + filename_prefix_ss << int(cube[j]); + } + return filename_prefix_ss.str(); +} +// Cube (end) + template class Triple_line_extractor diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h new file mode 100644 index 00000000000..eb42b7a696b --- /dev/null +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h @@ -0,0 +1,70 @@ +// Copyright (c) 2022 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sébastien Loriot, Jane Tournois +// +//****************************************************************************** +// +//****************************************************************************** + + +#ifndef CGAL_MESH_3_TRIPLE_LINES_HELPERS_H +#define CGAL_MESH_3_TRIPLE_LINES_HELPERS_H + +#include + +namespace CGAL +{ +namespace Mesh_3 +{ +namespace internal +{ + + template 1)> + struct Color_transformation_helper + { + using type = std::unordered_map; + static void reset(type& t) + { + t.clear(); + } + static bool is_valid(const type& t, const Word_type& w) + { + return t.find(w) != t.end(); + } + }; + template + struct Color_transformation_helper + { + using type = std::array; + static void reset(type& t) + { + std::fill(t.begin(), t.end(), 8/*invalid_word*/); + } + static bool is_valid(const type& t, const Word_type& w) + { + return t[w] != 8;/*invalid_word*/ + } + }; + + template + void debug_cerr(const char* title, const std::array& tab) + { + std::cerr << title << " ["; + for (const T& t : tab) + std::cout << (int)(t) << " "; + std::cout << "]" << std::endl; + } + +}//end namespace internal +}//end namespace Mesh_3 +}//end namespace CGAL + +#endif // CGAL_MESH_3_TRIPLE_LINES_HELPERS_H From 3eeffaee4e95eafbc8625759a88a700dcee0db3c Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 12:26:40 +0200 Subject: [PATCH 013/144] add missing license include --- Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index b0c292d2e89..3eaf9c4d3ec 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -17,6 +17,8 @@ #ifndef CGAL_MESH_3_DETECT_TRIPLE_LINES_H #define CGAL_MESH_3_DETECT_TRIPLE_LINES_H +#include + #include #include #include From 607b2e5d1959c9e9b9a7dfdb56c6f0d20a5993f2 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 12:40:09 +0200 Subject: [PATCH 014/144] =?UTF-8?q?remove=20=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h | 2 +- .../CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h | 2 +- .../include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h | 2 +- .../triple_lines_extraction/triple_lines_extraction_helpers.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 3eaf9c4d3ec..a73c768dd6c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot, Jane Tournois +// Author(s) : Sebastien Loriot, Jane Tournois // //****************************************************************************** // diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index f57816b0435..82b90d964b5 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot +// Author(s) : Sebastien Loriot // //****************************************************************************** // diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 15833313c3d..47bd6012039 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot +// Author(s) : Sebastien Loriot // //****************************************************************************** // diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h index eb42b7a696b..087cb9c3d2c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot, Jane Tournois +// Author(s) : Sebastien Loriot, Jane Tournois // //****************************************************************************** // From a538aa9523ed20ba7a9ced7a64436d08fb1949fb Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 13:53:09 +0200 Subject: [PATCH 015/144] =?UTF-8?q?remove=20more=20=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h | 2 +- .../include/CGAL/Mesh_3/triple_lines_extraction/combinations.h | 2 +- .../include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h index 1ea1e996a60..4bbc5fdcb44 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot +// Author(s) : Sebastien Loriot // //****************************************************************************** // diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index c541f1e8b80..0be115ed776 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot +// Author(s) : Sebastien Loriot // //****************************************************************************** // diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h index 2dbcd0e8a70..26c4d5e538c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -8,7 +8,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // -// Author(s) : Sébastien Loriot +// Author(s) : Sebastien Loriot // //****************************************************************************** // From cc9661171bec2c06760b8852a959be2a31e7430e Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 5 May 2022 15:40:27 +0200 Subject: [PATCH 016/144] add missing include --- .../include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 47bd6012039..b298656882d 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -20,6 +20,8 @@ #include +#include + #include #include From 8de92cf4ac6e5dacbfba0e4b70759f403da3b7a0 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Fri, 6 May 2022 15:51:07 +0200 Subject: [PATCH 017/144] int * CGAL::square() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes error error: no match for ‘operator*’ (operand types are ‘int’ and ‘CGAL::Null_functor::result_type’ {aka ‘CGAL::Null_tag’}) --- .../Mesh_3/triple_lines_extraction/triple_lines.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index b298656882d..3d378ceff15 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -334,10 +334,14 @@ std::vector> poly00122101(const int prec = 10) auto sq_exp = [](double x) { return sqrt(24 * x * x * x - 35 * x * x + 18 * x - 3); }; - auto y1 = [sq_exp](double x) { return (-sq_exp(x) - 5 * x + 3) / (6 * CGAL::square(x - 1)); }; - auto z1 = [sq_exp](double x) { return (-sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; - auto y2 = [sq_exp](double x) { return (sq_exp(x) - 5 * x + 3) / (6 * CGAL::square(x - 1)); }; - auto z2 = [sq_exp](double x) { return (sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; + auto y1 = [sq_exp](double x) + { return (-sq_exp(x) - 5 * x + 3) / (6 * (x - 1) * (x - 1)); }; + auto z1 = [sq_exp](double x) + { return (-sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; + auto y2 = [sq_exp](double x) + { return (sq_exp(x) - 5 * x + 3) / (6 * (x - 1) * (x - 1)); }; + auto z2 = [sq_exp](double x) + { return (sq_exp(x) - 7 * x + 3) / (6 * (x * x - 3 * x + 1)); }; P corner{ 1., .5, 1. / 3 }; return { create_polyline

(1. / 3, 1. / 2, From 588493c3c511f04c99478678cd72a19ce0c05288 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 9 May 2022 11:45:44 +0200 Subject: [PATCH 018/144] add missing 's' --- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 59808d44899..b981a855474 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -187,11 +187,11 @@ be a `CGAL::Image_3` object. corresponding to a pixel value. If this parameter is used, then the parameter `iso_value` is ignored. -

  • `parameter::value_outside` the value attached to voxels +
  • `parameters::value_outside` the value attached to voxels outside of the domain to be meshed. It should be lower than `iso_value`. Its default value is `0`. -
  • `parameter::relative_error_bound` is the relative error +
  • `parameters::relative_error_bound` is the relative error bound, relative to the diameter of the box of the image. Its default value is `FT(1e-3)`. @@ -239,10 +239,10 @@ and the voxels values are integers between 0 and 255). The weights image can be generated with `CGAL::Mesh_3::generate_label_weights()`. Its dimensions must be the same as the dimensions of `parameters::image`. -
  • `parameter::value_outside` the value attached to voxels +
  • `parameters::value_outside` the value attached to voxels outside of the domain to be meshed. Its default value is `0`. -
  • `parameter::relative_error_bound` is the relative error +
  • `parameters::relative_error_bound` is the relative error bound, relative to the diameter of the box of the image. Its default value is `FT(1e-3)`. From e80f628e2b8599b4ff4b82b3f4b235b16a2dafad Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 9 May 2022 12:50:58 +0200 Subject: [PATCH 019/144] add create_labeled_image_mesh_domain_with_features(image) and do not document the detect_triple_lines() function --- .../doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 17 +++++++++ ...sh_3D_image_with_detection_of_features.cpp | 15 ++++---- Mesh_3/include/CGAL/Labeled_mesh_domain_3.h | 35 +++++++++++++++++++ .../include/CGAL/Mesh_3/detect_triple_lines.h | 18 +++++++++- 4 files changed, 75 insertions(+), 10 deletions(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index b981a855474..07a9c7c2fca 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -263,6 +263,23 @@ static Labeled_mesh_domain_3 create_labeled_image_mesh_domain(A_i&...); +/* + \brief Construction from a 3D labeled image with detected triple lines. + +This static method is a named constructor. + +\cgalHeading{Example} + +From the example (\ref Mesh_3/mesh_3D_image_with_detection_of_features.cpp): + +\snippet Mesh_3/mesh_3D_image_with_detection_of_features.cpp Domain creation + +*/ +template +static +CGAL::Mesh_domain_with_polyline_features_3 +create_labeled_image_mesh_domain_with_features(A_i&...); + /// \name Deprecated constructors /// /// Those three constructors have been deprecated since CGAL-4.13, and diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index b67b6f0109a..070afefe618 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -1,3 +1,5 @@ +#define CGAL_DEBUG_TRIPLE_LINES + #include #include @@ -12,7 +14,6 @@ #include #include #include -#include typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Labeled_mesh_domain_3 Image_domain; @@ -48,14 +49,10 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } - // Domain - Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image); - - /// Declare 1D-features, see above [Call detect_triple_lines] - if(!CGAL::Mesh_3::detect_triple_lines(image, domain)) { - return EXIT_FAILURE; - } - /// [Call add_1D_features] + /// [Domain creation] + Mesh_domain domain + = Mesh_domain::create_labeled_image_mesh_domain_with_features(image); + /// [Domain creation] CGAL::Bbox_3 bbox = domain.bbox(); double diag = CGAL::sqrt((bbox.xmax() - bbox.xmin()) * (bbox.xmax() - bbox.xmin()) + (bbox.ymax() - bbox.ymin()) * (bbox.ymax() - bbox.ymin()) + (bbox.zmax() - bbox.zmin()) * (bbox.zmax() - bbox.zmin())); diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index 5acc5b01507..c438e1491cc 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -44,6 +44,10 @@ // support for implicit functions #include +// domain with features +#include +#include + #include #include #include @@ -471,6 +475,37 @@ CGAL_IGNORE_BOOST_PARAMETER_NAME_WARNINGS } } + BOOST_PARAMETER_MEMBER_FUNCTION( + (CGAL::Mesh_domain_with_polyline_features_3), + static create_labeled_image_mesh_domain_with_features, + parameters::tag, + (required + (image_, (const CGAL::Image_3&)) + ) + (optional + (relative_error_bound_, (const FT&), FT(1e-3)) + (value_outside_, *, 0) + (p_rng_, (CGAL::Random*), (CGAL::Random*)(0)) + (image_values_to_subdomain_indices_, *, Null_functor()) + (null_subdomain_index_, *, Null_functor()) + (construct_surface_patch_index_, *, Null_functor()) + ) + ) + { + namespace p = CGAL::parameters; + CGAL::Mesh_domain_with_polyline_features_3 domain + = create_labeled_image_mesh_domain(image_, + p::relative_error_bound = relative_error_bound_, + p::p_rng = p_rng_, + p::image_values_to_subdomain_indices = image_values_to_subdomain_indices_, + p::null_subdomain_index = null_subdomain_index_, + p::construct_surface_patch_index = construct_surface_patch_index_); + + CGAL::Mesh_3::detect_triple_lines(image_, domain); + + return domain; + } + BOOST_PARAMETER_MEMBER_FUNCTION( (Labeled_mesh_domain_3), static create_implicit_mesh_domain, diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index a73c768dd6c..913135591bf 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -19,6 +19,8 @@ #include +#include + #include #include #include @@ -44,7 +46,8 @@ namespace Mesh_3 // by declaring 1D-features. Note that `CGAL::polylines_to_protect` is // not documented. template -bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) +bool detect_triple_lines_with_know_word_type(const CGAL::Image_3& image, + Mesh_domain& domain) { using Gt = typename Mesh_domain::R; using Point_3 = typename Gt::Point_3; @@ -234,6 +237,19 @@ bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) return true; } +template +bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) +{ + CGAL_IMAGE_IO_CASE(image.image(), + return detect_triple_lines_with_know_word_type(image, domain) + ); + CGAL_error_msg("This place should never be reached, because it would mean " + "the image word type is a type that is not handled by " + "CGAL_ImageIO."); + return false; +} + + }//end namespace Mesh_3 }//end namespace CGAL From 102b79a6aa34cebc24a863547de5b70b92f30abe Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 11:31:25 +0200 Subject: [PATCH 020/144] fix missing brackets warning for clang --- .../triple_lines_extraction/combinations.h | 116 +++++++++--------- .../triple_lines_extraction/coordinates.h | 16 +-- .../triple_lines_extraction/cube_isometries.h | 96 +++++++-------- 3 files changed, 114 insertions(+), 114 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h index 0be115ed776..31da0168890 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h @@ -29,64 +29,64 @@ namespace Mesh_3 namespace internal { const std::array combinations[] - = { 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,1, - 0,0,0,0,0,0,1,1, - 0,0,0,0,0,0,1,2, - 0,0,0,0,0,1,1,0, - 0,0,0,0,0,1,1,1, - 0,0,0,0,0,1,1,2, - 0,0,0,0,0,1,2,0, - 0,0,0,0,0,1,2,1, - 0,0,0,0,1,1,1,1, - 0,0,0,0,1,1,1,2, - 0,0,0,0,1,1,2,2, - 0,0,0,0,1,2,2,1, - 0,0,0,1,0,1,1,0, - 0,0,0,1,0,1,1,1, - 0,0,0,1,0,1,1,2, - 0,0,0,1,0,1,2,0, - 0,0,0,1,0,1,2,1, - 0,0,0,1,0,1,2,2, - 0,0,0,1,1,0,0,0, - 0,0,0,1,1,0,0,1, - 0,0,0,1,1,0,0,2, - 0,0,0,1,1,0,1,1, - 0,0,0,1,1,0,1,2, - 0,0,0,1,1,0,2,2, - 0,0,0,1,1,1,1,0, - 0,0,0,1,1,1,1,2, - 0,0,0,1,1,1,2,0, - 0,0,0,1,1,1,2,1, - 0,0,0,1,1,1,2,2, - 0,0,0,1,1,2,2,0, - 0,0,0,1,1,2,2,1, - 0,0,0,1,1,2,2,2, - 0,0,0,1,2,0,0,0, - 0,0,0,1,2,0,0,1, - 0,0,0,1,2,0,0,2, - 0,0,0,1,2,0,1,2, - 0,0,0,1,2,0,2,1, - 0,0,0,1,2,1,1,0, - 0,0,0,1,2,1,1,2, - 0,0,0,1,2,1,2,0, - 0,0,0,1,2,1,2,1, - 0,0,0,1,2,1,2,2, - 0,0,0,1,2,2,2,1, - 0,0,1,1,1,1,0,0, - 0,0,1,1,1,1,0,2, - 0,0,1,1,1,1,2,2, - 0,0,1,1,1,2,0,2, - 0,0,1,1,1,2,2,0, - 0,0,1,2,1,2,0,0, - 0,0,1,2,1,2,0,1, - 0,0,1,2,1,2,2,1, - 0,0,1,2,2,1,0,0, - 0,0,1,2,2,1,0,1, - 0,1,1,0,1,0,0,1, - 0,1,1,0,1,0,0,2, - 0,1,1,0,1,2,2,1, - 0,1,1,2,1,2,2,0, + = { {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,1}, + {0,0,0,0,0,0,1,1}, + {0,0,0,0,0,0,1,2}, + {0,0,0,0,0,1,1,0}, + {0,0,0,0,0,1,1,1}, + {0,0,0,0,0,1,1,2}, + {0,0,0,0,0,1,2,0}, + {0,0,0,0,0,1,2,1}, + {0,0,0,0,1,1,1,1}, + {0,0,0,0,1,1,1,2}, + {0,0,0,0,1,1,2,2}, + {0,0,0,0,1,2,2,1}, + {0,0,0,1,0,1,1,0}, + {0,0,0,1,0,1,1,1}, + {0,0,0,1,0,1,1,2}, + {0,0,0,1,0,1,2,0}, + {0,0,0,1,0,1,2,1}, + {0,0,0,1,0,1,2,2}, + {0,0,0,1,1,0,0,0}, + {0,0,0,1,1,0,0,1}, + {0,0,0,1,1,0,0,2}, + {0,0,0,1,1,0,1,1}, + {0,0,0,1,1,0,1,2}, + {0,0,0,1,1,0,2,2}, + {0,0,0,1,1,1,1,0}, + {0,0,0,1,1,1,1,2}, + {0,0,0,1,1,1,2,0}, + {0,0,0,1,1,1,2,1}, + {0,0,0,1,1,1,2,2}, + {0,0,0,1,1,2,2,0}, + {0,0,0,1,1,2,2,1}, + {0,0,0,1,1,2,2,2}, + {0,0,0,1,2,0,0,0}, + {0,0,0,1,2,0,0,1}, + {0,0,0,1,2,0,0,2}, + {0,0,0,1,2,0,1,2}, + {0,0,0,1,2,0,2,1}, + {0,0,0,1,2,1,1,0}, + {0,0,0,1,2,1,1,2}, + {0,0,0,1,2,1,2,0}, + {0,0,0,1,2,1,2,1}, + {0,0,0,1,2,1,2,2}, + {0,0,0,1,2,2,2,1}, + {0,0,1,1,1,1,0,0}, + {0,0,1,1,1,1,0,2}, + {0,0,1,1,1,1,2,2}, + {0,0,1,1,1,2,0,2}, + {0,0,1,1,1,2,2,0}, + {0,0,1,2,1,2,0,0}, + {0,0,1,2,1,2,0,1}, + {0,0,1,2,1,2,2,1}, + {0,0,1,2,2,1,0,0}, + {0,0,1,2,2,1,0,1}, + {0,1,1,0,1,0,0,1}, + {0,1,1,0,1,0,0,2}, + {0,1,1,0,1,2,2,1}, + {0,1,1,2,1,2,2,0} }; }//end namespace internal diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h index 26c4d5e538c..19d10b205e9 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -29,14 +29,14 @@ namespace Mesh_3 namespace internal { using Coordinates = std::array; - constexpr Coordinates coordinates[8] = { 0, 0, 0, - 1, 0, 0, - 0, 1, 0, - 1, 1, 0, - 0, 0, 1, - 1, 0, 1, - 0, 1, 1, - 1, 1, 1 }; + constexpr Coordinates coordinates[8] = { {0, 0, 0}, + {1, 0, 0}, + {0, 1, 0}, + {1, 1, 0}, + {0, 0, 1}, + {1, 0, 1}, + {0, 1, 1}, + {1, 1, 1} }; Coordinates minus(const Coordinates& b, const Coordinates& a) { return { b[0] - a[0], b[1] - a[1], b[2] - a[2] }; diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index 82b90d964b5..317f0469b85 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -30,54 +30,54 @@ namespace internal using Permutation = std::array; Permutation cube_isometries[] = { - 0,1,2,3,4,5,6,7, - 1,0,3,2,5,4,7,6, - 4,5,0,1,6,7,2,3, - 5,4,1,0,7,6,3,2, - 6,7,4,5,2,3,0,1, - 7,6,5,4,3,2,1,0, - 2,3,6,7,0,1,4,5, - 3,2,7,6,1,0,5,4, - 1,5,3,7,0,4,2,6, - 5,1,7,3,4,0,6,2, - 5,4,7,6,1,0,3,2, - 4,5,6,7,0,1,2,3, - 4,0,6,2,5,1,7,3, - 0,4,2,6,1,5,3,7, - 1,3,0,2,5,7,4,6, - 3,1,2,0,7,5,6,4, - 3,2,1,0,7,6,5,4, - 2,3,0,1,6,7,4,5, - 2,0,3,1,6,4,7,5, - 0,2,1,3,4,6,5,7, - 1,0,5,4,3,2,7,6, - 0,1,4,5,2,3,6,7, - 7,3,5,1,6,2,4,0, - 3,7,1,5,2,6,0,4, - 7,6,3,2,5,4,1,0, - 6,7,2,3,4,5,0,1, - 2,6,0,4,3,7,1,5, - 6,2,4,0,7,3,5,1, - 4,6,5,7,0,2,1,3, - 6,4,7,5,2,0,3,1, - 7,5,6,4,3,1,2,0, - 5,7,4,6,1,3,0,2, - 0,4,1,5,2,6,3,7, - 4,0,5,1,6,2,7,3, - 3,1,7,5,2,0,6,4, - 1,3,5,7,0,2,4,6, - 5,7,1,3,4,6,0,2, - 7,5,3,1,6,4,2,0, - 3,7,2,6,1,5,0,4, - 7,3,6,2,5,1,4,0, - 0,2,4,6,1,3,5,7, - 2,0,6,4,3,1,7,5, - 5,1,4,0,7,3,6,2, - 1,5,0,4,3,7,2,6, - 6,2,7,3,4,0,5,1, - 2,6,3,7,0,4,1,5, - 6,4,2,0,7,5,3,1, - 4,6,0,2,5,7,1,3, + {0,1,2,3,4,5,6,7}, + {1,0,3,2,5,4,7,6}, + {4,5,0,1,6,7,2,3}, + {5,4,1,0,7,6,3,2}, + {6,7,4,5,2,3,0,1}, + {7,6,5,4,3,2,1,0}, + {2,3,6,7,0,1,4,5}, + {3,2,7,6,1,0,5,4}, + {1,5,3,7,0,4,2,6}, + {5,1,7,3,4,0,6,2}, + {5,4,7,6,1,0,3,2}, + {4,5,6,7,0,1,2,3}, + {4,0,6,2,5,1,7,3}, + {0,4,2,6,1,5,3,7}, + {1,3,0,2,5,7,4,6}, + {3,1,2,0,7,5,6,4}, + {3,2,1,0,7,6,5,4}, + {2,3,0,1,6,7,4,5}, + {2,0,3,1,6,4,7,5}, + {0,2,1,3,4,6,5,7}, + {1,0,5,4,3,2,7,6}, + {0,1,4,5,2,3,6,7}, + {7,3,5,1,6,2,4,0}, + {3,7,1,5,2,6,0,4}, + {7,6,3,2,5,4,1,0}, + {6,7,2,3,4,5,0,1}, + {2,6,0,4,3,7,1,5}, + {6,2,4,0,7,3,5,1}, + {4,6,5,7,0,2,1,3}, + {6,4,7,5,2,0,3,1}, + {7,5,6,4,3,1,2,0}, + {5,7,4,6,1,3,0,2}, + {0,4,1,5,2,6,3,7}, + {4,0,5,1,6,2,7,3}, + {3,1,7,5,2,0,6,4}, + {1,3,5,7,0,2,4,6}, + {5,7,1,3,4,6,0,2}, + {7,5,3,1,6,4,2,0}, + {3,7,2,6,1,5,0,4}, + {7,3,6,2,5,1,4,0}, + {0,2,4,6,1,3,5,7}, + {2,0,6,4,3,1,7,5}, + {5,1,4,0,7,3,6,2}, + {1,5,0,4,3,7,2,6}, + {6,2,7,3,4,0,5,1}, + {2,6,3,7,0,4,1,5}, + {6,4,2,0,7,5,3,1}, + {4,6,0,2,5,7,1,3} }; constexpr int num_isometries = 48; From 223ea3cf6e003f7fca40f440c4a46d837558a76b Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 11:41:39 +0200 Subject: [PATCH 021/144] move Null_subdomain_index up to have definitions in a valid order --- Mesh_3/include/CGAL/Labeled_mesh_domain_3.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index c438e1491cc..0949de5a9ff 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -46,7 +46,6 @@ // domain with features #include -#include #include #include @@ -56,6 +55,15 @@ #endif #include +namespace CGAL { + struct Null_subdomain_index { + template + bool operator()(const T& x) const { return 0 == x; } + }; +} + +#include //needs Null_subdomain_index + namespace CGAL { namespace Mesh_3 { namespace internal { @@ -128,11 +136,6 @@ namespace internal { } // end namespace CGAL::Mesh_3::internal } // end namespace CGAL::Mesh_3 -struct Null_subdomain_index { - template - bool operator()(const T& x) const { return 0 == x; } -}; - template struct Construct_pair_from_subdomain_indices { typedef std::pair result_type; From 755c403f94295c03ee06580fffc560caf1650095 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 14:29:01 +0200 Subject: [PATCH 022/144] remove useless template parameter --- Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 913135591bf..7ffac35a5b8 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -209,9 +209,9 @@ bool detect_triple_lines_with_know_word_type(const CGAL::Image_3& image, // call the split_graph_into_polylines, to create long polylines from the // short polylines that were generated per voxel. Polylines new_polylines_inside; - CGAL::polylines_to_protect(new_polylines_inside, - features_inside.begin(), - features_inside.end()); + CGAL::polylines_to_protect(new_polylines_inside, + features_inside.begin(), + features_inside.end()); std::vector > polylines_on_bbox; CGAL::polylines_to_protect(image, polylines_on_bbox, From dc01e8d431cfd02da404d928a1645c43092e0e51 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 15:57:38 +0200 Subject: [PATCH 023/144] add triple lines detection in demo --- .../Mesh_3/Mesh_3_plugin_cgal_code.cpp | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp index fecc73c41ea..57c345c961b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp @@ -359,35 +359,36 @@ Meshing_thread* cgal_code_mesh_3(const Image* pImage, } else #endif - { - p_domain = new Image_mesh_domain - (Image_mesh_domain::create_labeled_image_mesh_domain - (p::image = *pImage, - p::relative_error_bound = 1e-6, - p::construct_surface_patch_index = - [](int i, int j) { return (i * 1000 + j); } - ) - ); - } + if (protect_features) + { + if (polylines.empty()) + { + p_domain = new Image_mesh_domain + (Image_mesh_domain::create_labeled_image_mesh_domain_with_features + (p::image = *pImage, + p::relative_error_bound = 1e-6, + p::construct_surface_patch_index = + [](int i, int j) { return (i * 1000 + j); } + ) + ); + } + else + { + p_domain = new Image_mesh_domain + (Image_mesh_domain::create_labeled_image_mesh_domain_with_features + (p::image = *pImage, + p::relative_error_bound = 1e-6, + p::construct_surface_patch_index = + [](int i, int j) { return (i * 1000 + j); } + ) + ); + + // Insert edges in domain + p_domain->add_features(polylines.begin(), polylines.end()); + } + } - if(protect_features && polylines.empty()){ - std::vector > polylines_on_bbox; - CGAL_IMAGE_IO_CASE(pImage->image(), - { - typedef Word Image_word_type; - (CGAL::polylines_to_protect< - Bare_point, - Image_word_type>(*pImage, polylines_on_bbox)); - p_domain->add_features(polylines_on_bbox.begin(), - polylines_on_bbox.end()); - } - ); - } - if(! polylines.empty()){ - // Insert edge in domain - p_domain->add_features(polylines.begin(), polylines.end()); - } typedef ::Mesh_function Mesh_function; Mesh_function* p_mesh_function = new Mesh_function(p_new_item->c3t3(), From cc411375a597381a8a3b8b167295e18c891d7029 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 17:33:19 +0200 Subject: [PATCH 024/144] fix g++ compilation error --- Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h | 8 ++++---- .../triple_lines_extraction_helpers.h | 10 ++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h index 7ffac35a5b8..e12c9f0f4ff 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h @@ -146,16 +146,16 @@ bool detect_triple_lines_with_know_word_type(const CGAL::Image_3& image, CGAL_error(); }; #ifdef CGAL_DEBUG_TRIPLE_LINES - internal::debug_cerr("Cube", cube); - internal::debug_cerr("reference cube", reference_cube); - internal::debug_cerr("with transformation", internal::cube_isometries[(*case_it)[9]]); + CGAL::Mesh_3::internal::debug_cerr("Cube", cube); + CGAL::Mesh_3::internal::debug_cerr("reference cube", reference_cube); + CGAL::Mesh_3::internal::debug_cerr("with transformation", internal::cube_isometries[(*case_it)[9]]); #endif // CGAL_DEBUG_TRIPLE_LINES auto fct_it = lines.create_polylines_fcts.find(reference_cube); if (fct_it != lines.create_polylines_fcts.end()) { #ifdef CGAL_DEBUG_TRIPLE_LINES - internal::debug_cerr("Using the function of", Cube(fct_it->first)); + CGAL::Mesh_3::internal::debug_cerr("Using the function of", Cube(fct_it->first)); #endif // CGAL_DEBUG_TRIPLE_LINES Polylines cube_features = (fct_it->second)(10); diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h index 087cb9c3d2c..dfcc8ac17f1 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h @@ -20,6 +20,8 @@ #include +#include + namespace CGAL { namespace Mesh_3 @@ -54,12 +56,12 @@ namespace internal } }; - template - void debug_cerr(const char* title, const std::array& tab) + template + void debug_cerr(const char* title, const Array& tab) { std::cerr << title << " ["; - for (const T& t : tab) - std::cout << (int)(t) << " "; + for (const auto t : tab) + std::cout << std::to_string(t) << " "; std::cout << "]" << std::endl; } From ed8286307a6fa72d2090e557695bc4ba867ac8a6 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 10 May 2022 17:39:33 +0200 Subject: [PATCH 025/144] add missing inline's causing multiple definitions link errors in the demo --- .../CGAL/Mesh_3/triple_lines_extraction/cases_table.h | 2 +- .../CGAL/Mesh_3/triple_lines_extraction/coordinates.h | 8 ++++---- .../CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h index 4bbc5fdcb44..428c35c63b0 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h @@ -37,7 +37,7 @@ using Hash_combination = boost::hash; using Cases = std::array[6561]; -auto find_case(const Cases& cases, Combination comb) { +inline auto find_case(const Cases& cases, Combination comb) { using std::begin; using std::end; return std::lower_bound(begin(cases), end(cases), diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h index 19d10b205e9..5eecaec45be 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h @@ -38,19 +38,19 @@ namespace internal {0, 1, 1}, {1, 1, 1} }; - Coordinates minus(const Coordinates& b, const Coordinates& a) { + inline Coordinates minus(const Coordinates& b, const Coordinates& a) { return { b[0] - a[0], b[1] - a[1], b[2] - a[2] }; } - Coordinates cross(Coordinates a, Coordinates b) { + inline Coordinates cross(Coordinates a, Coordinates 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] }; } - Coordinates square(Coordinates c) { + inline Coordinates square(Coordinates c) { return { c[0] * c[0], c[1] * c[1], c[2] * c[2] }; } - int dist(Coordinates a, Coordinates b) { + inline int dist(Coordinates a, Coordinates b) { auto s = square(minus(b, a)); return s[0] + s[1] + s[2]; } diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h index 317f0469b85..1e00785103b 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h @@ -29,7 +29,7 @@ namespace internal { using Permutation = std::array; - Permutation cube_isometries[] = { + constexpr Permutation cube_isometries[] = { {0,1,2,3,4,5,6,7}, {1,0,3,2,5,4,7,6}, {4,5,0,1,6,7,2,3}, @@ -80,7 +80,7 @@ namespace internal {4,6,0,2,5,7,1,3} }; -constexpr int num_isometries = 48; + constexpr int num_isometries = 48; }//end namespace internal }//end namespace Mesh_3 From 781541b9e7f597406d370e952184374e80c20102 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 11:29:02 +0200 Subject: [PATCH 026/144] attempt to fix CI check_headers error --- Mesh_3/include/CGAL/Labeled_mesh_domain_3.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index 0949de5a9ff..20ff351f6c5 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -62,6 +62,7 @@ namespace CGAL { }; } +#include #include //needs Null_subdomain_index namespace CGAL { From 9fd17a85ddbe50e1dbfd0f70d554cdadfd661ceb Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 14:07:27 +0200 Subject: [PATCH 027/144] avoid circular includes --- Mesh_3/include/CGAL/Labeled_mesh_domain_3.h | 8 -------- Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h | 9 ++++++++- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index 20ff351f6c5..bf21f3719c6 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -55,14 +55,6 @@ #endif #include -namespace CGAL { - struct Null_subdomain_index { - template - bool operator()(const T& x) const { return 0 == x; } - }; -} - -#include #include //needs Null_subdomain_index namespace CGAL { diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index b59eb144d74..d959375ae3e 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -26,7 +26,7 @@ #include #include #include -#include // for CGAL::Null_subdomain_index + #include #include // for boost::prior #include @@ -34,6 +34,13 @@ #include #include +namespace CGAL { + struct Null_subdomain_index { + template + bool operator()(const T& x) const { return 0 == x; } + }; +} + namespace CGAL { namespace Mesh_3 { namespace internal { From b69fd9bf308bbfb1d6bdc37887c3826f0fe41ce8 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 15:17:38 +0200 Subject: [PATCH 028/144] add missing include header --- Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index d959375ae3e..dbffdb4c547 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -28,6 +28,8 @@ #include #include +#include + #include // for boost::prior #include From 773cfb6280139aae3c79214323bcbfd15a40502c Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 15:31:55 +0200 Subject: [PATCH 029/144] add doc for create_labeled_image_mesh_domain_with_features --- .../doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 07a9c7c2fca..197579374e2 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -266,7 +266,32 @@ create_labeled_image_mesh_domain(A_i&...); /* \brief Construction from a 3D labeled image with detected triple lines. -This static method is a named constructor. +This static method is a named constructor. It constructs a domain +described by a 3D labeled image, with automatically detected polyline features. +A 3D labeled image is a grid of voxels, where each voxel is associated +with an index (a subdomain index) characterizing the subdomain in which +the voxel lies. The domain to be discretized is the union of voxels +that have non-zero values. +The detected polyline features are a discretization of the 1D-curves that lie +at the intersection of 3 subdomains (including the outside). + +This constructor uses named parameters (from the Boost Parameter +Library). They can be specified in any order. + +\cgalHeading{Named Parameters} +The parameters are optional unless otherwise specified. +
      + +
    • `parameters::image` (mandatory) the input 3D image. Must +be a `CGAL::Image_3` object. + +
    • `parameters::value_outside` the value attached to voxels + outside of the domain to be meshed. Its default value is `0`. + +
    • `parameters::relative_error_bound` is the relative error + bound, relative to the diameter of the box of the image. Its default + value is `FT(1e-3)`.
    + \cgalHeading{Example} From 7ea58274478a8fa45300292508d4ef8cda8ca9a3 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 16:03:14 +0200 Subject: [PATCH 030/144] add test (failing) --- Mesh_3/test/Mesh_3/CMakeLists.txt | 1 + .../test_meshing_3D_image_with_features.cpp | 96 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp diff --git a/Mesh_3/test/Mesh_3/CMakeLists.txt b/Mesh_3/test/Mesh_3/CMakeLists.txt index 3f91ea357bd..08be8ade8ad 100644 --- a/Mesh_3/test/Mesh_3/CMakeLists.txt +++ b/Mesh_3/test/Mesh_3/CMakeLists.txt @@ -33,6 +33,7 @@ if ( CGAL_FOUND ) if(CGAL_ImageIO_USE_ZLIB) create_single_source_cgal_program( "test_meshing_3D_image.cpp" ) create_single_source_cgal_program( "test_meshing_3D_image_deprecated.cpp" ) + create_single_source_cgal_program( "test_meshing_3D_image_with_features.cpp" ) create_single_source_cgal_program( "test_meshing_3D_gray_image.cpp" ) create_single_source_cgal_program( "test_meshing_3D_gray_image_deprecated.cpp" ) else() diff --git a/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp b/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp new file mode 100644 index 00000000000..10f50c2081f --- /dev/null +++ b/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp @@ -0,0 +1,96 @@ +// Copyright (c) 2009 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Stephane Tayeb, Jane Tournois +// +//****************************************************************************** +// File Description : +//****************************************************************************** + +#define CGAL_DEBUG_TRIPLE_LINES + +#include "test_meshing_utilities.h" +#include +#include +#include +#include + +template +struct Image_tester : public Tester +{ +public: + void image() const + { + typedef CGAL::Image_3 Image; + typedef CGAL::Labeled_mesh_domain_3 Domain; + typedef CGAL::Mesh_domain_with_polyline_features_3 Mesh_domain; + + typedef typename CGAL::Mesh_triangulation_3< + Mesh_domain, + CGAL::Kernel_traits::Kernel, + Concurrency_tag>::type Tr; + typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + + typedef CGAL::Mesh_criteria_3 Mesh_criteria; + typedef typename Mesh_criteria::Facet_criteria Facet_criteria; + typedef typename Mesh_criteria::Cell_criteria Cell_criteria; + + //------------------------------------------------------- + // Data generation + //------------------------------------------------------- + Image image; + image.read(CGAL::data_file_path("images/liver.inr.gz")); + + std::cout << "\tSeed is\t" + << CGAL::get_default_random().get_seed() << std::endl; + Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain_with_features + (image, + 1e-9, + CGAL::parameters::p_rng = &CGAL::get_default_random()); + + // Set mesh criteria + Facet_criteria facet_criteria(25, 20*image.vx(), 5*image.vx()); + Cell_criteria cell_criteria(4, 25*image.vx()); + Mesh_criteria criteria(facet_criteria, cell_criteria); + + // Mesh generation + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, + CGAL::parameters::no_exude(), + CGAL::parameters::no_perturb()); + + c3t3.remove_isolated_vertices(); + + // Verify + this->verify_c3t3_volume(c3t3, 1772330*0.95, 1772330*1.05); + this->verify(c3t3,domain,criteria, Bissection_tag()); + + typedef typename Mesh_domain::Surface_patch_index Patch_id; + CGAL_static_assertion(CGAL::Output_rep::is_specialized); + CGAL_USE_TYPE(Patch_id); + } + +}; + + + +int main() +{ + Image_tester<> test_epic; + std::cerr << "Mesh generation from a 3D image:\n"; + test_epic.image(); + +#ifdef CGAL_LINKED_WITH_TBB + Image_tester test_epic_p; + std::cerr << "Parallel mesh generation from a 3D image:\n"; + test_epic_p.image(); +#endif + + return EXIT_SUCCESS; +} From ca085181ed972908dea2a052705abb9cb5043178 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 12 May 2022 16:03:25 +0200 Subject: [PATCH 031/144] doc example --- Mesh_3/doc/Mesh_3/examples.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Mesh_3/doc/Mesh_3/examples.txt b/Mesh_3/doc/Mesh_3/examples.txt index aa44908504c..b13c5a661f6 100644 --- a/Mesh_3/doc/Mesh_3/examples.txt +++ b/Mesh_3/doc/Mesh_3/examples.txt @@ -4,6 +4,7 @@ \example Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp \example Mesh_3/mesh_3D_image_with_features.cpp \example Mesh_3/mesh_3D_image_with_custom_initialization.cpp +\example Mesh_3/mesh_3D_image_with_detection_of_features.cpp \example Mesh_3/mesh_3D_weighted_image.cpp \example Mesh_3/random_labeled_image.h \example CGAL/Mesh_3/initialize_triangulation_from_gray_image.h From 96407d58ea034f96b4857d36d6a71781084238a0 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Fri, 13 May 2022 15:32:02 +0200 Subject: [PATCH 032/144] fix meshing of image with features in demo 3 options : - automatic detection of features - given polyline_item was not taken into account - no features --- .../Plugins/Mesh_3/Mesh_3_plugin.cpp | 51 ++++++++++++++----- .../Mesh_3/Mesh_3_plugin_cgal_code.cpp | 13 ++++- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index 6aa0571c8b9..926d1f23ebd 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -277,12 +277,16 @@ void Mesh_3_plugin::mesh_3_volume() mesh_3(Mesh_type::VOLUME); } -boost::optional Mesh_3_plugin::get_items_or_return_error_string() const { +boost::optional Mesh_3_plugin::get_items_or_return_error_string() const +{ using boost::get; items = {}; features_protection_available = false; item = nullptr; - for (int ind : scene->selectionIndices()) { + Scene_polylines_item* polylines_item = nullptr; + + for (int ind : scene->selectionIndices()) + { try { if (auto sm_item = qobject_cast(scene->item(ind))) { @@ -313,9 +317,11 @@ boost::optional Mesh_3_plugin::get_items_or_return_error_string() const return tr("An image items cannot be mixed with other items type"); } # endif - else if (auto polylines_item = - qobject_cast(scene->item(ind))) { - if (!items) items = Polyhedral_mesh_items{}; + else if (polylines_item = + qobject_cast(scene->item(ind))) + { + if (!items) + continue; auto poly_items_ptr = get(&*items); if(poly_items_ptr) { if (poly_items_ptr->polylines_item) { @@ -323,12 +329,16 @@ boost::optional Mesh_3_plugin::get_items_or_return_error_string() const } else { poly_items_ptr->polylines_item = polylines_item; } - } else { - auto image_items = get(*items); - if (image_items.polylines_item) { - return tr("Only one polyline item is accepted"); - } else { - image_items.polylines_item = polylines_item; + } + else { + if(auto image_items_ptr = get(&*items)) + { + if (image_items_ptr->polylines_item) { + return tr("Only one polyline item is accepted"); + } + else { + image_items_ptr->polylines_item = polylines_item; + } } } } @@ -341,6 +351,20 @@ boost::optional Mesh_3_plugin::get_items_or_return_error_string() const } } catch (const boost::bad_get&) { return tr("Wrong selection of items"); } } // end for loop on selected items + + //attach polylines_item to one or the other item + //if it could not be done in the for loop + //because of selection order + if (polylines_item != nullptr && items != boost::none) + { + auto poly_items_ptr = get(&*items); + auto image_items_ptr = get(&*items); + if(poly_items_ptr && poly_items_ptr == nullptr) + poly_items_ptr->polylines_item = polylines_item; + else if(image_items_ptr && image_items_ptr == nullptr) + image_items_ptr->polylines_item = polylines_item; + } + if (!items) { return tr("Selected objects can't be meshed"); } item = nullptr; features_protection_available = false; @@ -769,6 +793,9 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, # ifdef CGAL_MESH_3_DEMO_ACTIVATE_SEGMENTED_IMAGES case IMAGE_MESH_ITEMS: { const Image* pImage = image_item->image(); + auto& image_items = get(*items); + const auto img_polylines_item = image_items.polylines_item; + if (nullptr == pImage) { QMessageBox::critical(mw, tr(""), tr("ERROR: no data in selected item")); return; @@ -790,7 +817,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, thread = cgal_code_mesh_3( pImage, - (polylines_item == nullptr) ? plc : polylines_item->polylines, + (img_polylines_item == nullptr) ? plc : img_polylines_item->polylines, angle, facets_sizing, approx, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp index 57c345c961b..ae488d9a002 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp @@ -375,7 +375,7 @@ Meshing_thread* cgal_code_mesh_3(const Image* pImage, else { p_domain = new Image_mesh_domain - (Image_mesh_domain::create_labeled_image_mesh_domain_with_features + (Image_mesh_domain::create_labeled_image_mesh_domain (p::image = *pImage, p::relative_error_bound = 1e-6, p::construct_surface_patch_index = @@ -387,6 +387,17 @@ Meshing_thread* cgal_code_mesh_3(const Image* pImage, p_domain->add_features(polylines.begin(), polylines.end()); } } + else + { + p_domain = new Image_mesh_domain + (Image_mesh_domain::create_labeled_image_mesh_domain + (p::image = *pImage, + p::relative_error_bound = 1e-6, + p::construct_surface_patch_index = + [](int i, int j) { return (i * 1000 + j); } + ) + ); + } typedef ::Mesh_function Date: Fri, 13 May 2022 16:10:26 +0200 Subject: [PATCH 033/144] improve the test for create_labeled_image_mesh_domain_with_features --- .../test_meshing_3D_image_with_features.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp b/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp index 10f50c2081f..dd7c54e4238 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_3D_image_with_features.cpp @@ -14,8 +14,6 @@ // File Description : //****************************************************************************** -#define CGAL_DEBUG_TRIPLE_LINES - #include "test_meshing_utilities.h" #include #include @@ -39,8 +37,6 @@ public: typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; typedef CGAL::Mesh_criteria_3 Mesh_criteria; - typedef typename Mesh_criteria::Facet_criteria Facet_criteria; - typedef typename Mesh_criteria::Cell_criteria Cell_criteria; //------------------------------------------------------- // Data generation @@ -50,15 +46,20 @@ public: std::cout << "\tSeed is\t" << CGAL::get_default_random().get_seed() << std::endl; + + namespace p = CGAL::parameters; Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain_with_features - (image, - 1e-9, + (p::image = image, + p::relative_error_bound = 1e-9, CGAL::parameters::p_rng = &CGAL::get_default_random()); // Set mesh criteria - Facet_criteria facet_criteria(25, 20*image.vx(), 5*image.vx()); - Cell_criteria cell_criteria(4, 25*image.vx()); - Mesh_criteria criteria(facet_criteria, cell_criteria); + Mesh_criteria criteria(p::edge_size = 2 * image.vx(), + p::facet_angle = 30, + p::facet_size = 20 * image.vx(), + p::facet_distance = 5 * image.vx(), + p::cell_radius_edge_ratio = 3., + p::cell_size = 25 * image.vx()); // Mesh generation C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, From 6abf32ead4a8d0d531190c25170d9de1fb838315 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 16 May 2022 09:15:31 +0200 Subject: [PATCH 034/144] update CHANGES.md --- Installation/CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index fe158bf3002..9dfd6db3c6a 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -15,6 +15,10 @@ CGAL tetrahedral Delaunay refinement algorithm. - This new package wraps all the existing code that deals with a `MeshComplex_3InTriangulation_3` to describe 3D simplicial meshess, and makes the data structure independent from the tetrahedral mesh generation package. +### [Tetrahedral Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) + +- Added a mesh domain named constructor `CGAL::create_labeled_image_mesh_domain_with_features()` for automatic detection and protection +of triple lines extracted from labeled images for tetrahedral mesh generation. [Release 5.5](https://github.com/CGAL/cgal/releases/tag/v5.5) From 538f2001709d676cf66e3478629d4fe28b5363e1 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 16 May 2022 09:43:39 +0200 Subject: [PATCH 035/144] improve doc --- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 197579374e2..158c0b733bc 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -263,17 +263,24 @@ static Labeled_mesh_domain_3 create_labeled_image_mesh_domain(A_i&...); -/* +/*! \brief Construction from a 3D labeled image with detected triple lines. This static method is a named constructor. It constructs a domain described by a 3D labeled image, with automatically detected polyline features. + A 3D labeled image is a grid of voxels, where each voxel is associated with an index (a subdomain index) characterizing the subdomain in which the voxel lies. The domain to be discretized is the union of voxels that have non-zero values. + The detected polyline features are a discretization of the 1D-curves that lie -at the intersection of 3 subdomains (including the outside). +at the intersection of 3 subdomains (including the outside), each represented by a +different label in the input image. +This includes: +- internal polylines at the intersection of three subdomains, +- polylines at the intersection between two subdomains and the bounding box of the image, +- the bouding box edges when they are incident to "inner" voxels. This constructor uses named parameters (from the Boost Parameter Library). They can be specified in any order. From 2d4a64495d19494debd3e9c14224c140419d5952 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 16 May 2022 11:25:00 +0200 Subject: [PATCH 036/144] doc : add function to header of Labeled_mesh_domain_3 --- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 158c0b733bc..705061936b0 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -24,8 +24,10 @@ This class has a constructor taking a labeling function. It has also three static template member functions that act as named constructors:
    • `create_gray_image_mesh_domain()`, to create a domain from a 3D gray image, +
    • `create_implicit_mesh_domain()`, to create a domain from an implicit function,
    • `create_labeled_image_mesh_domain()`, to create a domain from a 3D labeled image, and -
    • `create_implicit_mesh_domain()`, to create a domain from an implicit function. +
    • `create_labeled_image_mesh_domain_with_features()`, to create a domain from a 3D labeled image +with automatically detected triple lines.
    \tparam BGT is a geometric traits class that provides @@ -305,7 +307,6 @@ be a `CGAL::Image_3` object. From the example (\ref Mesh_3/mesh_3D_image_with_detection_of_features.cpp): \snippet Mesh_3/mesh_3D_image_with_detection_of_features.cpp Domain creation - */ template static From a30f4fe644d9d58c675bd17f6fbffd4333f1f70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 7 Jun 2022 19:34:19 +0200 Subject: [PATCH 037/144] fix invalid endpoint --- .../include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h index 3d378ceff15..aff1a5cd666 100644 --- a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h @@ -129,7 +129,7 @@ std::vector> poly00001221(const int /* no sampling for segments * P b{ 1. / 2, 1, 2. / 3 }; P c{ 0, 1. / 2, 2. / 3 }; P d{ 1, 1. / 2, 2. / 3 }; - P e{ 1, 1. / 2, 1 }; + P e{ 1. / 2, 1. / 2, 1 }; return { From 149ee2abaacdd8b42070b2c10fab4661652f2bf1 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Fri, 10 Jun 2022 11:16:27 +0200 Subject: [PATCH 038/144] rename headers, internal functions and directory --- Mesh_3/include/CGAL/Labeled_mesh_domain_3.h | 5 +++-- ...ple_lines.h => detect_features_in_image.h} | 20 +++++++++---------- .../cases_table.h | 0 .../combinations.h | 0 .../coordinates.h | 0 .../cube_isometries.h | 0 .../features_detection.h} | 0 .../features_detection_helpers.h} | 0 8 files changed, 13 insertions(+), 12 deletions(-) rename Mesh_3/include/CGAL/Mesh_3/{detect_triple_lines.h => detect_features_in_image.h} (93%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction => features_detection}/cases_table.h (100%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction => features_detection}/combinations.h (100%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction => features_detection}/coordinates.h (100%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction => features_detection}/cube_isometries.h (100%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction/triple_lines.h => features_detection/features_detection.h} (100%) rename Mesh_3/include/CGAL/Mesh_3/{triple_lines_extraction/triple_lines_extraction_helpers.h => features_detection/features_detection_helpers.h} (100%) diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index bf21f3719c6..acaa5e4669e 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -36,6 +36,7 @@ #include #include +// support for `CGAL::Image_3` // support for `CGAL::Image_3` #include #include @@ -55,7 +56,7 @@ #endif #include -#include //needs Null_subdomain_index +#include //needs Null_subdomain_index namespace CGAL { namespace Mesh_3 { @@ -497,7 +498,7 @@ CGAL_IGNORE_BOOST_PARAMETER_NAME_WARNINGS p::null_subdomain_index = null_subdomain_index_, p::construct_surface_patch_index = construct_surface_patch_index_); - CGAL::Mesh_3::detect_triple_lines(image_, domain); + CGAL::Mesh_3::detect_features_in_image(image_, domain); return domain; } diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h similarity index 93% rename from Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h rename to Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h index e12c9f0f4ff..523bc9265f9 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_triple_lines.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h @@ -21,12 +21,12 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include @@ -46,8 +46,8 @@ namespace Mesh_3 // by declaring 1D-features. Note that `CGAL::polylines_to_protect` is // not documented. template -bool detect_triple_lines_with_know_word_type(const CGAL::Image_3& image, - Mesh_domain& domain) +bool detect_features_in_image_with_know_word_type(const CGAL::Image_3& image, + Mesh_domain& domain) { using Gt = typename Mesh_domain::R; using Point_3 = typename Gt::Point_3; @@ -238,10 +238,10 @@ bool detect_triple_lines_with_know_word_type(const CGAL::Image_3& image, } template -bool detect_triple_lines(const CGAL::Image_3& image, Mesh_domain& domain) +bool detect_features_in_image(const CGAL::Image_3& image, Mesh_domain& domain) { CGAL_IMAGE_IO_CASE(image.image(), - return detect_triple_lines_with_know_word_type(image, domain) + return detect_features_in_image_with_know_word_type(image, domain) ); CGAL_error_msg("This place should never be reached, because it would mean " "the image word type is a type that is not handled by " diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cases_table.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/combinations.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/coordinates.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/cube_isometries.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h diff --git a/Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h similarity index 100% rename from Mesh_3/include/CGAL/Mesh_3/triple_lines_extraction/triple_lines_extraction_helpers.h rename to Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h From 3a7a0e155c8ba60fc1e0629859b1d0e021898aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 13 Jun 2022 10:11:30 +0200 Subject: [PATCH 039/144] add all cases in the table + add placeholders for sampling curves of all cases. --- .../Mesh_3/features_detection/cases_table.h | 10703 ++++++---------- .../Mesh_3/features_detection/combinations.h | 141 +- .../features_detection/features_detection.h | 1764 ++- 3 files changed, 6004 insertions(+), 6604 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h index 428c35c63b0..1334125b484 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h @@ -35,7 +35,7 @@ namespace internal using Combination = std::array; using Hash_combination = boost::hash; -using Cases = std::array[6561]; +using Cases = std::array[4140]; inline auto find_case(const Cases& cases, Combination comb) { using std::begin; @@ -55,6567 +55,4146 @@ inline auto find_case(const Cases& cases, Combination comb) { }); }; const Cases cases = { -{ {0,0,0,0,0,0,0,0, 0, 0} }, -{ {0,0,0,0,0,0,0,1, 1, 0} }, -{ {0,0,0,0,0,0,0,2, 1, 0} }, -{ {0,0,0,0,0,0,1,0, 1, 1} }, -{ {0,0,0,0,0,0,1,1, 2, 0} }, -{ {0,0,0,0,0,0,1,2, 3, 0} }, -{ {0,0,0,0,0,0,2,0, 1, 1} }, -{ {0,0,0,0,0,0,2,1, 3, 1} }, -{ {0,0,0,0,0,0,2,2, 2, 0} }, -{ {0,0,0,0,0,1,0,0, 1, 6} }, -{ {0,0,0,0,0,1,0,1, 2, 18} }, -{ {0,0,0,0,0,1,0,2, 3, 19} }, -{ {0,0,0,0,0,1,1,0, 4, 0} }, -{ {0,0,0,0,0,1,1,1, 5, 0} }, -{ {0,0,0,0,0,1,1,2, 6, 0} }, -{ {0,0,0,0,0,1,2,0, 7, 0} }, -{ {0,0,0,0,0,1,2,1, 8, 0} }, -{ {0,0,0,0,0,1,2,2, 8, 19} }, -{ {0,0,0,0,0,2,0,0, 1, 6} }, -{ {0,0,0,0,0,2,0,1, 3, 18} }, -{ {0,0,0,0,0,2,0,2, 2, 18} }, -{ {0,0,0,0,0,2,1,0, 7, 16} }, -{ {0,0,0,0,0,2,1,1, 8, 19} }, -{ {0,0,0,0,0,2,1,2, 8, 0} }, -{ {0,0,0,0,0,2,2,0, 4, 0} }, -{ {0,0,0,0,0,2,2,1, 6, 0} }, -{ {0,0,0,0,0,2,2,2, 5, 0} }, -{ {0,0,0,0,1,0,0,0, 1, 7} }, -{ {0,0,0,0,1,0,0,1, 4, 1} }, -{ {0,0,0,0,1,0,0,2, 7, 1} }, -{ {0,0,0,0,1,0,1,0, 2, 15} }, -{ {0,0,0,0,1,0,1,1, 5, 1} }, -{ {0,0,0,0,1,0,1,2, 8, 1} }, -{ {0,0,0,0,1,0,2,0, 3, 14} }, -{ {0,0,0,0,1,0,2,1, 6, 1} }, -{ {0,0,0,0,1,0,2,2, 8, 14} }, -{ {0,0,0,0,1,1,0,0, 2, 6} }, -{ {0,0,0,0,1,1,0,1, 5, 18} }, -{ {0,0,0,0,1,1,0,2, 8, 18} }, -{ {0,0,0,0,1,1,1,0, 5, 15} }, -{ {0,0,0,0,1,1,1,1, 9, 0} }, -{ {0,0,0,0,1,1,1,2, 10, 0} }, -{ {0,0,0,0,1,1,2,0, 8, 15} }, -{ {0,0,0,0,1,1,2,1, 10, 1} }, -{ {0,0,0,0,1,1,2,2, 11, 0} }, -{ {0,0,0,0,1,2,0,0, 3, 6} }, -{ {0,0,0,0,1,2,0,1, 6, 18} }, -{ {0,0,0,0,1,2,0,2, 8, 17} }, -{ {0,0,0,0,1,2,1,0, 8, 16} }, -{ {0,0,0,0,1,2,1,1, 10, 18} }, -{ {0,0,0,0,1,2,1,2, 11, 18} }, -{ {0,0,0,0,1,2,2,0, 6, 15} }, -{ {0,0,0,0,1,2,2,1, 12, 0} }, -{ {0,0,0,0,1,2,2,2, 10, 15} }, -{ {0,0,0,0,2,0,0,0, 1, 7} }, -{ {0,0,0,0,2,0,0,1, 7, 17} }, -{ {0,0,0,0,2,0,0,2, 4, 1} }, -{ {0,0,0,0,2,0,1,0, 3, 15} }, -{ {0,0,0,0,2,0,1,1, 8, 14} }, -{ {0,0,0,0,2,0,1,2, 6, 1} }, -{ {0,0,0,0,2,0,2,0, 2, 15} }, -{ {0,0,0,0,2,0,2,1, 8, 1} }, -{ {0,0,0,0,2,0,2,2, 5, 1} }, -{ {0,0,0,0,2,1,0,0, 3, 7} }, -{ {0,0,0,0,2,1,0,1, 8, 17} }, -{ {0,0,0,0,2,1,0,2, 6, 18} }, -{ {0,0,0,0,2,1,1,0, 6, 15} }, -{ {0,0,0,0,2,1,1,1, 10, 15} }, -{ {0,0,0,0,2,1,1,2, 12, 1} }, -{ {0,0,0,0,2,1,2,0, 8, 16} }, -{ {0,0,0,0,2,1,2,1, 11, 15} }, -{ {0,0,0,0,2,1,2,2, 10, 18} }, -{ {0,0,0,0,2,2,0,0, 2, 6} }, -{ {0,0,0,0,2,2,0,1, 8, 18} }, -{ {0,0,0,0,2,2,0,2, 5, 18} }, -{ {0,0,0,0,2,2,1,0, 8, 15} }, -{ {0,0,0,0,2,2,1,1, 11, 16} }, -{ {0,0,0,0,2,2,1,2, 10, 1} }, -{ {0,0,0,0,2,2,2,0, 5, 15} }, -{ {0,0,0,0,2,2,2,1, 10, 0} }, -{ {0,0,0,0,2,2,2,2, 9, 0} }, -{ {0,0,0,1,0,0,0,0, 1, 2} }, -{ {0,0,0,1,0,0,0,1, 2, 12} }, -{ {0,0,0,1,0,0,0,2, 3, 13} }, -{ {0,0,0,1,0,0,1,0, 4, 3} }, -{ {0,0,0,1,0,0,1,1, 5, 21} }, -{ {0,0,0,1,0,0,1,2, 6, 21} }, -{ {0,0,0,1,0,0,2,0, 7, 21} }, -{ {0,0,0,1,0,0,2,1, 8, 21} }, -{ {0,0,0,1,0,0,2,2, 8, 32} }, -{ {0,0,0,1,0,1,0,0, 4, 13} }, -{ {0,0,0,1,0,1,0,1, 5, 13} }, -{ {0,0,0,1,0,1,0,2, 6, 13} }, -{ {0,0,0,1,0,1,1,0, 13, 0} }, -{ {0,0,0,1,0,1,1,1, 14, 0} }, -{ {0,0,0,1,0,1,1,2, 15, 0} }, -{ {0,0,0,1,0,1,2,0, 16, 0} }, -{ {0,0,0,1,0,1,2,1, 17, 0} }, -{ {0,0,0,1,0,1,2,2, 18, 0} }, -{ {0,0,0,1,0,2,0,0, 7, 27} }, -{ {0,0,0,1,0,2,0,1, 8, 40} }, -{ {0,0,0,1,0,2,0,2, 8, 13} }, -{ {0,0,0,1,0,2,1,0, 16, 19} }, -{ {0,0,0,1,0,2,1,1, 17, 19} }, -{ {0,0,0,1,0,2,1,2, 18, 19} }, -{ {0,0,0,1,0,2,2,0, 16, 13} }, -{ {0,0,0,1,0,2,2,1, 18, 13} }, -{ {0,0,0,1,0,2,2,2, 17, 13} }, -{ {0,0,0,1,1,0,0,0, 19, 0} }, -{ {0,0,0,1,1,0,0,1, 20, 0} }, -{ {0,0,0,1,1,0,0,2, 21, 0} }, -{ {0,0,0,1,1,0,1,0, 20, 20} }, -{ {0,0,0,1,1,0,1,1, 22, 0} }, -{ {0,0,0,1,1,0,1,2, 23, 0} }, -{ {0,0,0,1,1,0,2,0, 21, 20} }, -{ {0,0,0,1,1,0,2,1, 23, 20} }, -{ {0,0,0,1,1,0,2,2, 24, 0} }, -{ {0,0,0,1,1,1,0,0, 20, 26} }, -{ {0,0,0,1,1,1,0,1, 22, 19} }, -{ {0,0,0,1,1,1,0,2, 23, 19} }, -{ {0,0,0,1,1,1,1,0, 25, 0} }, -{ {0,0,0,1,1,1,1,1, 5, 5} }, -{ {0,0,0,1,1,1,1,2, 26, 0} }, -{ {0,0,0,1,1,1,2,0, 27, 0} }, -{ {0,0,0,1,1,1,2,1, 28, 0} }, -{ {0,0,0,1,1,1,2,2, 29, 0} }, -{ {0,0,0,1,1,2,0,0, 21, 26} }, -{ {0,0,0,1,1,2,0,1, 23, 41} }, -{ {0,0,0,1,1,2,0,2, 24, 19} }, -{ {0,0,0,1,1,2,1,0, 27, 19} }, -{ {0,0,0,1,1,2,1,1, 28, 19} }, -{ {0,0,0,1,1,2,1,2, 29, 19} }, -{ {0,0,0,1,1,2,2,0, 30, 0} }, -{ {0,0,0,1,1,2,2,1, 31, 0} }, -{ {0,0,0,1,1,2,2,2, 32, 0} }, -{ {0,0,0,1,2,0,0,0, 33, 0} }, -{ {0,0,0,1,2,0,0,1, 34, 0} }, -{ {0,0,0,1,2,0,0,2, 35, 0} }, -{ {0,0,0,1,2,0,1,0, 35, 20} }, -{ {0,0,0,1,2,0,1,1, 28, 39} }, -{ {0,0,0,1,2,0,1,2, 36, 0} }, -{ {0,0,0,1,2,0,2,0, 34, 20} }, -{ {0,0,0,1,2,0,2,1, 37, 0} }, -{ {0,0,0,1,2,0,2,2, 28, 29} }, -{ {0,0,0,1,2,1,0,0, 35, 26} }, -{ {0,0,0,1,2,1,0,1, 28, 22} }, -{ {0,0,0,1,2,1,0,2, 36, 19} }, -{ {0,0,0,1,2,1,1,0, 38, 0} }, -{ {0,0,0,1,2,1,1,1, 17, 22} }, -{ {0,0,0,1,2,1,1,2, 39, 0} }, -{ {0,0,0,1,2,1,2,0, 40, 0} }, -{ {0,0,0,1,2,1,2,1, 41, 0} }, -{ {0,0,0,1,2,1,2,2, 42, 0} }, -{ {0,0,0,1,2,2,0,0, 34, 26} }, -{ {0,0,0,1,2,2,0,1, 37, 19} }, -{ {0,0,0,1,2,2,0,2, 28, 10} }, -{ {0,0,0,1,2,2,1,0, 40, 19} }, -{ {0,0,0,1,2,2,1,1, 41, 19} }, -{ {0,0,0,1,2,2,1,2, 42, 19} }, -{ {0,0,0,1,2,2,2,0, 26, 11} }, -{ {0,0,0,1,2,2,2,1, 43, 0} }, -{ {0,0,0,1,2,2,2,2, 10, 11} }, -{ {0,0,0,2,0,0,0,0, 1, 2} }, -{ {0,0,0,2,0,0,0,1, 3, 12} }, -{ {0,0,0,2,0,0,0,2, 2, 12} }, -{ {0,0,0,2,0,0,1,0, 7, 3} }, -{ {0,0,0,2,0,0,1,1, 8, 32} }, -{ {0,0,0,2,0,0,1,2, 8, 21} }, -{ {0,0,0,2,0,0,2,0, 4, 3} }, -{ {0,0,0,2,0,0,2,1, 6, 21} }, -{ {0,0,0,2,0,0,2,2, 5, 21} }, -{ {0,0,0,2,0,1,0,0, 7, 13} }, -{ {0,0,0,2,0,1,0,1, 8, 13} }, -{ {0,0,0,2,0,1,0,2, 8, 40} }, -{ {0,0,0,2,0,1,1,0, 16, 13} }, -{ {0,0,0,2,0,1,1,1, 17, 13} }, -{ {0,0,0,2,0,1,1,2, 18, 13} }, -{ {0,0,0,2,0,1,2,0, 16, 19} }, -{ {0,0,0,2,0,1,2,1, 18, 19} }, -{ {0,0,0,2,0,1,2,2, 17, 19} }, -{ {0,0,0,2,0,2,0,0, 4, 13} }, -{ {0,0,0,2,0,2,0,1, 6, 13} }, -{ {0,0,0,2,0,2,0,2, 5, 13} }, -{ {0,0,0,2,0,2,1,0, 16, 0} }, -{ {0,0,0,2,0,2,1,1, 18, 0} }, -{ {0,0,0,2,0,2,1,2, 17, 0} }, -{ {0,0,0,2,0,2,2,0, 13, 0} }, -{ {0,0,0,2,0,2,2,1, 15, 0} }, -{ {0,0,0,2,0,2,2,2, 14, 0} }, -{ {0,0,0,2,1,0,0,0, 33, 5} }, -{ {0,0,0,2,1,0,0,1, 35, 0} }, -{ {0,0,0,2,1,0,0,2, 34, 0} }, -{ {0,0,0,2,1,0,1,0, 34, 20} }, -{ {0,0,0,2,1,0,1,1, 28, 29} }, -{ {0,0,0,2,1,0,1,2, 37, 20} }, -{ {0,0,0,2,1,0,2,0, 35, 20} }, -{ {0,0,0,2,1,0,2,1, 36, 20} }, -{ {0,0,0,2,1,0,2,2, 28, 39} }, -{ {0,0,0,2,1,1,0,0, 34, 26} }, -{ {0,0,0,2,1,1,0,1, 28, 10} }, -{ {0,0,0,2,1,1,0,2, 37, 41} }, -{ {0,0,0,2,1,1,1,0, 26, 11} }, -{ {0,0,0,2,1,1,1,1, 10, 11} }, -{ {0,0,0,2,1,1,1,2, 43, 0} }, -{ {0,0,0,2,1,1,2,0, 40, 19} }, -{ {0,0,0,2,1,1,2,1, 42, 19} }, -{ {0,0,0,2,1,1,2,2, 41, 19} }, -{ {0,0,0,2,1,2,0,0, 35, 26} }, -{ {0,0,0,2,1,2,0,1, 36, 41} }, -{ {0,0,0,2,1,2,0,2, 28, 22} }, -{ {0,0,0,2,1,2,1,0, 40, 0} }, -{ {0,0,0,2,1,2,1,1, 42, 0} }, -{ {0,0,0,2,1,2,1,2, 41, 0} }, -{ {0,0,0,2,1,2,2,0, 38, 0} }, -{ {0,0,0,2,1,2,2,1, 39, 0} }, -{ {0,0,0,2,1,2,2,2, 17, 22} }, -{ {0,0,0,2,2,0,0,0, 19, 0} }, -{ {0,0,0,2,2,0,0,1, 21, 0} }, -{ {0,0,0,2,2,0,0,2, 20, 0} }, -{ {0,0,0,2,2,0,1,0, 21, 20} }, -{ {0,0,0,2,2,0,1,1, 24, 0} }, -{ {0,0,0,2,2,0,1,2, 23, 20} }, -{ {0,0,0,2,2,0,2,0, 20, 20} }, -{ {0,0,0,2,2,0,2,1, 23, 0} }, -{ {0,0,0,2,2,0,2,2, 22, 0} }, -{ {0,0,0,2,2,1,0,0, 21, 26} }, -{ {0,0,0,2,2,1,0,1, 24, 19} }, -{ {0,0,0,2,2,1,0,2, 23, 41} }, -{ {0,0,0,2,2,1,1,0, 30, 0} }, -{ {0,0,0,2,2,1,1,1, 32, 0} }, -{ {0,0,0,2,2,1,1,2, 31, 0} }, -{ {0,0,0,2,2,1,2,0, 27, 19} }, -{ {0,0,0,2,2,1,2,1, 29, 19} }, -{ {0,0,0,2,2,1,2,2, 28, 19} }, -{ {0,0,0,2,2,2,0,0, 20, 26} }, -{ {0,0,0,2,2,2,0,1, 23, 19} }, -{ {0,0,0,2,2,2,0,2, 22, 19} }, -{ {0,0,0,2,2,2,1,0, 27, 0} }, -{ {0,0,0,2,2,2,1,1, 29, 0} }, -{ {0,0,0,2,2,2,1,2, 28, 0} }, -{ {0,0,0,2,2,2,2,0, 25, 0} }, -{ {0,0,0,2,2,2,2,1, 26, 0} }, -{ {0,0,0,2,2,2,2,2, 5, 5} }, -{ {0,0,1,0,0,0,0,0, 1, 3} }, -{ {0,0,1,0,0,0,0,1, 4, 2} }, -{ {0,0,1,0,0,0,0,2, 7, 20} }, -{ {0,0,1,0,0,0,1,0, 2, 9} }, -{ {0,0,1,0,0,0,1,1, 5, 20} }, -{ {0,0,1,0,0,0,1,2, 8, 20} }, -{ {0,0,1,0,0,0,2,0, 3, 8} }, -{ {0,0,1,0,0,0,2,1, 6, 20} }, -{ {0,0,1,0,0,0,2,2, 8, 43} }, -{ {0,0,1,0,0,1,0,0, 19, 1} }, -{ {0,0,1,0,0,1,0,1, 20, 21} }, -{ {0,0,1,0,0,1,0,2, 21, 21} }, -{ {0,0,1,0,0,1,1,0, 20, 1} }, -{ {0,0,1,0,0,1,1,1, 22, 1} }, -{ {0,0,1,0,0,1,1,2, 23, 21} }, -{ {0,0,1,0,0,1,2,0, 21, 1} }, -{ {0,0,1,0,0,1,2,1, 23, 1} }, -{ {0,0,1,0,0,1,2,2, 24, 1} }, -{ {0,0,1,0,0,2,0,0, 33, 1} }, -{ {0,0,1,0,0,2,0,1, 35, 21} }, -{ {0,0,1,0,0,2,0,2, 34, 21} }, -{ {0,0,1,0,0,2,1,0, 34, 1} }, -{ {0,0,1,0,0,2,1,1, 28, 44} }, -{ {0,0,1,0,0,2,1,2, 37, 1} }, -{ {0,0,1,0,0,2,2,0, 35, 1} }, -{ {0,0,1,0,0,2,2,1, 36, 1} }, -{ {0,0,1,0,0,2,2,2, 28, 30} }, -{ {0,0,1,0,1,0,0,0, 4, 8} }, -{ {0,0,1,0,1,0,0,1, 13, 1} }, -{ {0,0,1,0,1,0,0,2, 16, 1} }, -{ {0,0,1,0,1,0,1,0, 5, 8} }, -{ {0,0,1,0,1,0,1,1, 14, 1} }, -{ {0,0,1,0,1,0,1,2, 17, 1} }, -{ {0,0,1,0,1,0,2,0, 6, 8} }, -{ {0,0,1,0,1,0,2,1, 15, 1} }, -{ {0,0,1,0,1,0,2,2, 18, 1} }, -{ {0,0,1,0,1,1,0,0, 20, 23} }, -{ {0,0,1,0,1,1,0,1, 25, 1} }, -{ {0,0,1,0,1,1,0,2, 27, 1} }, -{ {0,0,1,0,1,1,1,0, 22, 14} }, -{ {0,0,1,0,1,1,1,1, 5, 4} }, -{ {0,0,1,0,1,1,1,2, 28, 1} }, -{ {0,0,1,0,1,1,2,0, 23, 14} }, -{ {0,0,1,0,1,1,2,1, 26, 1} }, -{ {0,0,1,0,1,1,2,2, 29, 1} }, -{ {0,0,1,0,1,2,0,0, 35, 23} }, -{ {0,0,1,0,1,2,0,1, 38, 1} }, -{ {0,0,1,0,1,2,0,2, 40, 1} }, -{ {0,0,1,0,1,2,1,0, 28, 27} }, -{ {0,0,1,0,1,2,1,1, 17, 27} }, -{ {0,0,1,0,1,2,1,2, 41, 1} }, -{ {0,0,1,0,1,2,2,0, 36, 14} }, -{ {0,0,1,0,1,2,2,1, 39, 1} }, -{ {0,0,1,0,1,2,2,2, 42, 1} }, -{ {0,0,1,0,2,0,0,0, 7, 22} }, -{ {0,0,1,0,2,0,0,1, 16, 14} }, -{ {0,0,1,0,2,0,0,2, 16, 8} }, -{ {0,0,1,0,2,0,1,0, 8, 35} }, -{ {0,0,1,0,2,0,1,1, 17, 14} }, -{ {0,0,1,0,2,0,1,2, 18, 8} }, -{ {0,0,1,0,2,0,2,0, 8, 8} }, -{ {0,0,1,0,2,0,2,1, 18, 14} }, -{ {0,0,1,0,2,0,2,2, 17, 8} }, -{ {0,0,1,0,2,1,0,0, 21, 23} }, -{ {0,0,1,0,2,1,0,1, 27, 14} }, -{ {0,0,1,0,2,1,0,2, 30, 1} }, -{ {0,0,1,0,2,1,1,0, 23, 34} }, -{ {0,0,1,0,2,1,1,1, 28, 14} }, -{ {0,0,1,0,2,1,1,2, 31, 1} }, -{ {0,0,1,0,2,1,2,0, 24, 14} }, -{ {0,0,1,0,2,1,2,1, 29, 14} }, -{ {0,0,1,0,2,1,2,2, 32, 1} }, -{ {0,0,1,0,2,2,0,0, 34, 23} }, -{ {0,0,1,0,2,2,0,1, 40, 14} }, -{ {0,0,1,0,2,2,0,2, 26, 10} }, -{ {0,0,1,0,2,2,1,0, 37, 14} }, -{ {0,0,1,0,2,2,1,1, 41, 14} }, -{ {0,0,1,0,2,2,1,2, 43, 1} }, -{ {0,0,1,0,2,2,2,0, 28, 11} }, -{ {0,0,1,0,2,2,2,1, 42, 14} }, -{ {0,0,1,0,2,2,2,2, 10, 10} }, -{ {0,0,1,1,0,0,0,0, 2, 2} }, -{ {0,0,1,1,0,0,0,1, 5, 2} }, -{ {0,0,1,1,0,0,0,2, 8, 33} }, -{ {0,0,1,1,0,0,1,0, 5, 3} }, -{ {0,0,1,1,0,0,1,1, 9, 2} }, -{ {0,0,1,1,0,0,1,2, 10, 21} }, -{ {0,0,1,1,0,0,2,0, 8, 42} }, -{ {0,0,1,1,0,0,2,1, 10, 20} }, -{ {0,0,1,1,0,0,2,2, 11, 20} }, -{ {0,0,1,1,0,1,0,0, 20, 12} }, -{ {0,0,1,1,0,1,0,1, 22, 12} }, -{ {0,0,1,1,0,1,0,2, 23, 32} }, -{ {0,0,1,1,0,1,1,0, 25, 21} }, -{ {0,0,1,1,0,1,1,1, 5, 24} }, -{ {0,0,1,1,0,1,1,2, 26, 21} }, -{ {0,0,1,1,0,1,2,0, 27, 21} }, -{ {0,0,1,1,0,1,2,1, 28, 21} }, -{ {0,0,1,1,0,1,2,2, 29, 21} }, -{ {0,0,1,1,0,2,0,0, 34, 12} }, -{ {0,0,1,1,0,2,0,1, 28, 7} }, -{ {0,0,1,1,0,2,0,2, 37, 12} }, -{ {0,0,1,1,0,2,1,0, 26, 6} }, -{ {0,0,1,1,0,2,1,1, 10, 6} }, -{ {0,0,1,1,0,2,1,2, 43, 21} }, -{ {0,0,1,1,0,2,2,0, 40, 32} }, -{ {0,0,1,1,0,2,2,1, 42, 32} }, -{ {0,0,1,1,0,2,2,2, 41, 32} }, -{ {0,0,1,1,1,0,0,0, 20, 9} }, -{ {0,0,1,1,1,0,0,1, 25, 20} }, -{ {0,0,1,1,1,0,0,2, 27, 20} }, -{ {0,0,1,1,1,0,1,0, 22, 9} }, -{ {0,0,1,1,1,0,1,1, 5, 25} }, -{ {0,0,1,1,1,0,1,2, 28, 20} }, -{ {0,0,1,1,1,0,2,0, 23, 43} }, -{ {0,0,1,1,1,0,2,1, 26, 20} }, -{ {0,0,1,1,1,0,2,2, 29, 20} }, -{ {0,0,1,1,1,1,0,0, 44, 0} }, -{ {0,0,1,1,1,1,0,1, 20, 22} }, -{ {0,0,1,1,1,1,0,2, 45, 0} }, -{ {0,0,1,1,1,1,1,0, 20, 27} }, -{ {0,0,1,1,1,1,1,1, 2, 4} }, -{ {0,0,1,1,1,1,1,2, 34, 27} }, -{ {0,0,1,1,1,1,2,0, 45, 1} }, -{ {0,0,1,1,1,1,2,1, 34, 22} }, -{ {0,0,1,1,1,1,2,2, 46, 0} }, -{ {0,0,1,1,1,2,0,0, 45, 6} }, -{ {0,0,1,1,1,2,0,1, 27, 7} }, -{ {0,0,1,1,1,2,0,2, 47, 0} }, -{ {0,0,1,1,1,2,1,0, 23, 45} }, -{ {0,0,1,1,1,2,1,1, 8, 44} }, -{ {0,0,1,1,1,2,1,2, 37, 27} }, -{ {0,0,1,1,1,2,2,0, 48, 0} }, -{ {0,0,1,1,1,2,2,1, 40, 38} }, -{ {0,0,1,1,1,2,2,2, 29, 5} }, -{ {0,0,1,1,2,0,0,0, 34, 9} }, -{ {0,0,1,1,2,0,0,1, 26, 7} }, -{ {0,0,1,1,2,0,0,2, 40, 43} }, -{ {0,0,1,1,2,0,1,0, 28, 6} }, -{ {0,0,1,1,2,0,1,1, 10, 7} }, -{ {0,0,1,1,2,0,1,2, 42, 43} }, -{ {0,0,1,1,2,0,2,0, 37, 9} }, -{ {0,0,1,1,2,0,2,1, 43, 20} }, -{ {0,0,1,1,2,0,2,2, 41, 43} }, -{ {0,0,1,1,2,1,0,0, 45, 7} }, -{ {0,0,1,1,2,1,0,1, 23, 38} }, -{ {0,0,1,1,2,1,0,2, 48, 1} }, -{ {0,0,1,1,2,1,1,0, 27, 6} }, -{ {0,0,1,1,2,1,1,1, 8, 39} }, -{ {0,0,1,1,2,1,1,2, 40, 45} }, -{ {0,0,1,1,2,1,2,0, 47, 1} }, -{ {0,0,1,1,2,1,2,1, 37, 22} }, -{ {0,0,1,1,2,1,2,2, 29, 4} }, -{ {0,0,1,1,2,2,0,0, 46, 6} }, -{ {0,0,1,1,2,2,0,1, 29, 7} }, -{ {0,0,1,1,2,2,0,2, 29, 10} }, -{ {0,0,1,1,2,2,1,0, 29, 6} }, -{ {0,0,1,1,2,2,1,1, 11, 6} }, -{ {0,0,1,1,2,2,1,2, 41, 45} }, -{ {0,0,1,1,2,2,2,0, 29, 11} }, -{ {0,0,1,1,2,2,2,1, 41, 38} }, -{ {0,0,1,1,2,2,2,2, 11, 10} }, -{ {0,0,1,2,0,0,0,0, 3, 2} }, -{ {0,0,1,2,0,0,0,1, 6, 2} }, -{ {0,0,1,2,0,0,0,2, 8, 2} }, -{ {0,0,1,2,0,0,1,0, 8, 3} }, -{ {0,0,1,2,0,0,1,1, 10, 2} }, -{ {0,0,1,2,0,0,1,2, 11, 33} }, -{ {0,0,1,2,0,0,2,0, 6, 3} }, -{ {0,0,1,2,0,0,2,1, 12, 3} }, -{ {0,0,1,2,0,0,2,2, 10, 3} }, -{ {0,0,1,2,0,1,0,0, 21, 12} }, -{ {0,0,1,2,0,1,0,1, 23, 12} }, -{ {0,0,1,2,0,1,0,2, 24, 12} }, -{ {0,0,1,2,0,1,1,0, 27, 32} }, -{ {0,0,1,2,0,1,1,1, 28, 32} }, -{ {0,0,1,2,0,1,1,2, 29, 32} }, -{ {0,0,1,2,0,1,2,0, 30, 21} }, -{ {0,0,1,2,0,1,2,1, 31, 21} }, -{ {0,0,1,2,0,1,2,2, 32, 21} }, -{ {0,0,1,2,0,2,0,0, 35, 12} }, -{ {0,0,1,2,0,2,0,1, 36, 12} }, -{ {0,0,1,2,0,2,0,2, 28, 37} }, -{ {0,0,1,2,0,2,1,0, 40, 21} }, -{ {0,0,1,2,0,2,1,1, 42, 21} }, -{ {0,0,1,2,0,2,1,2, 41, 21} }, -{ {0,0,1,2,0,2,2,0, 38, 21} }, -{ {0,0,1,2,0,2,2,1, 39, 21} }, -{ {0,0,1,2,0,2,2,2, 17, 30} }, -{ {0,0,1,2,1,0,0,0, 35, 9} }, -{ {0,0,1,2,1,0,0,1, 38, 20} }, -{ {0,0,1,2,1,0,0,2, 40, 20} }, -{ {0,0,1,2,1,0,1,0, 28, 46} }, -{ {0,0,1,2,1,0,1,1, 17, 29} }, -{ {0,0,1,2,1,0,1,2, 41, 20} }, -{ {0,0,1,2,1,0,2,0, 36, 43} }, -{ {0,0,1,2,1,0,2,1, 39, 20} }, -{ {0,0,1,2,1,0,2,2, 42, 20} }, -{ {0,0,1,2,1,1,0,0, 45, 2} }, -{ {0,0,1,2,1,1,0,1, 27, 10} }, -{ {0,0,1,2,1,1,0,2, 47, 21} }, -{ {0,0,1,2,1,1,1,0, 23, 28} }, -{ {0,0,1,2,1,1,1,1, 8, 29} }, -{ {0,0,1,2,1,1,1,2, 37, 46} }, -{ {0,0,1,2,1,1,2,0, 48, 21} }, -{ {0,0,1,2,1,1,2,1, 40, 31} }, -{ {0,0,1,2,1,1,2,2, 29, 24} }, -{ {0,0,1,2,1,2,0,0, 49, 0} }, -{ {0,0,1,2,1,2,0,1, 50, 0} }, -{ {0,0,1,2,1,2,0,2, 31, 22} }, -{ {0,0,1,2,1,2,1,0, 31, 27} }, -{ {0,0,1,2,1,2,1,1, 18, 4} }, -{ {0,0,1,2,1,2,1,2, 43, 27} }, -{ {0,0,1,2,1,2,2,0, 50, 1} }, -{ {0,0,1,2,1,2,2,1, 51, 0} }, -{ {0,0,1,2,1,2,2,2, 18, 5} }, -{ {0,0,1,2,2,0,0,0, 21, 9} }, -{ {0,0,1,2,2,0,0,1, 30, 20} }, -{ {0,0,1,2,2,0,0,2, 27, 43} }, -{ {0,0,1,2,2,0,1,0, 24, 9} }, -{ {0,0,1,2,2,0,1,1, 32, 20} }, -{ {0,0,1,2,2,0,1,2, 29, 43} }, -{ {0,0,1,2,2,0,2,0, 23, 9} }, -{ {0,0,1,2,2,0,2,1, 31, 20} }, -{ {0,0,1,2,2,0,2,2, 28, 43} }, -{ {0,0,1,2,2,1,0,0, 52, 0} }, -{ {0,0,1,2,2,1,0,1, 53, 0} }, -{ {0,0,1,2,2,1,0,2, 53, 21} }, -{ {0,0,1,2,2,1,1,0, 53, 20} }, -{ {0,0,1,2,2,1,1,1, 24, 5} }, -{ {0,0,1,2,2,1,1,2, 47, 44} }, -{ {0,0,1,2,2,1,2,0, 53, 1} }, -{ {0,0,1,2,2,1,2,1, 47, 30} }, -{ {0,0,1,2,2,1,2,2, 24, 4} }, -{ {0,0,1,2,2,2,0,0, 45, 3} }, -{ {0,0,1,2,2,2,0,1, 48, 20} }, -{ {0,0,1,2,2,2,0,2, 23, 31} }, -{ {0,0,1,2,2,2,1,0, 47, 20} }, -{ {0,0,1,2,2,2,1,1, 29, 25} }, -{ {0,0,1,2,2,2,1,2, 37, 37} }, -{ {0,0,1,2,2,2,2,0, 27, 11} }, -{ {0,0,1,2,2,2,2,1, 40, 28} }, -{ {0,0,1,2,2,2,2,2, 8, 30} }, -{ {0,0,2,0,0,0,0,0, 1, 3} }, -{ {0,0,2,0,0,0,0,1, 7, 2} }, -{ {0,0,2,0,0,0,0,2, 4, 2} }, -{ {0,0,2,0,0,0,1,0, 3, 9} }, -{ {0,0,2,0,0,0,1,1, 8, 43} }, -{ {0,0,2,0,0,0,1,2, 6, 20} }, -{ {0,0,2,0,0,0,2,0, 2, 9} }, -{ {0,0,2,0,0,0,2,1, 8, 20} }, -{ {0,0,2,0,0,0,2,2, 5, 20} }, -{ {0,0,2,0,0,1,0,0, 33, 4} }, -{ {0,0,2,0,0,1,0,1, 34, 21} }, -{ {0,0,2,0,0,1,0,2, 35, 21} }, -{ {0,0,2,0,0,1,1,0, 35, 1} }, -{ {0,0,2,0,0,1,1,1, 28, 30} }, -{ {0,0,2,0,0,1,1,2, 36, 21} }, -{ {0,0,2,0,0,1,2,0, 34, 1} }, -{ {0,0,2,0,0,1,2,1, 37, 21} }, -{ {0,0,2,0,0,1,2,2, 28, 44} }, -{ {0,0,2,0,0,2,0,0, 19, 1} }, -{ {0,0,2,0,0,2,0,1, 21, 21} }, -{ {0,0,2,0,0,2,0,2, 20, 21} }, -{ {0,0,2,0,0,2,1,0, 21, 1} }, -{ {0,0,2,0,0,2,1,1, 24, 1} }, -{ {0,0,2,0,0,2,1,2, 23, 1} }, -{ {0,0,2,0,0,2,2,0, 20, 1} }, -{ {0,0,2,0,0,2,2,1, 23, 21} }, -{ {0,0,2,0,0,2,2,2, 22, 1} }, -{ {0,0,2,0,1,0,0,0, 7, 8} }, -{ {0,0,2,0,1,0,0,1, 16, 8} }, -{ {0,0,2,0,1,0,0,2, 16, 14} }, -{ {0,0,2,0,1,0,1,0, 8, 8} }, -{ {0,0,2,0,1,0,1,1, 17, 8} }, -{ {0,0,2,0,1,0,1,2, 18, 14} }, -{ {0,0,2,0,1,0,2,0, 8, 35} }, -{ {0,0,2,0,1,0,2,1, 18, 8} }, -{ {0,0,2,0,1,0,2,2, 17, 14} }, -{ {0,0,2,0,1,1,0,0, 34, 23} }, -{ {0,0,2,0,1,1,0,1, 26, 10} }, -{ {0,0,2,0,1,1,0,2, 40, 14} }, -{ {0,0,2,0,1,1,1,0, 28, 11} }, -{ {0,0,2,0,1,1,1,1, 10, 10} }, -{ {0,0,2,0,1,1,1,2, 42, 14} }, -{ {0,0,2,0,1,1,2,0, 37, 34} }, -{ {0,0,2,0,1,1,2,1, 43, 1} }, -{ {0,0,2,0,1,1,2,2, 41, 14} }, -{ {0,0,2,0,1,2,0,0, 21, 23} }, -{ {0,0,2,0,1,2,0,1, 30, 1} }, -{ {0,0,2,0,1,2,0,2, 27, 14} }, -{ {0,0,2,0,1,2,1,0, 24, 14} }, -{ {0,0,2,0,1,2,1,1, 32, 1} }, -{ {0,0,2,0,1,2,1,2, 29, 14} }, -{ {0,0,2,0,1,2,2,0, 23, 34} }, -{ {0,0,2,0,1,2,2,1, 31, 1} }, -{ {0,0,2,0,1,2,2,2, 28, 14} }, -{ {0,0,2,0,2,0,0,0, 4, 8} }, -{ {0,0,2,0,2,0,0,1, 16, 1} }, -{ {0,0,2,0,2,0,0,2, 13, 1} }, -{ {0,0,2,0,2,0,1,0, 6, 8} }, -{ {0,0,2,0,2,0,1,1, 18, 1} }, -{ {0,0,2,0,2,0,1,2, 15, 1} }, -{ {0,0,2,0,2,0,2,0, 5, 8} }, -{ {0,0,2,0,2,0,2,1, 17, 1} }, -{ {0,0,2,0,2,0,2,2, 14, 1} }, -{ {0,0,2,0,2,1,0,0, 35, 23} }, -{ {0,0,2,0,2,1,0,1, 40, 1} }, -{ {0,0,2,0,2,1,0,2, 38, 1} }, -{ {0,0,2,0,2,1,1,0, 36, 34} }, -{ {0,0,2,0,2,1,1,1, 42, 1} }, -{ {0,0,2,0,2,1,1,2, 39, 1} }, -{ {0,0,2,0,2,1,2,0, 28, 27} }, -{ {0,0,2,0,2,1,2,1, 41, 1} }, -{ {0,0,2,0,2,1,2,2, 17, 27} }, -{ {0,0,2,0,2,2,0,0, 20, 23} }, -{ {0,0,2,0,2,2,0,1, 27, 1} }, -{ {0,0,2,0,2,2,0,2, 25, 1} }, -{ {0,0,2,0,2,2,1,0, 23, 14} }, -{ {0,0,2,0,2,2,1,1, 29, 1} }, -{ {0,0,2,0,2,2,1,2, 26, 1} }, -{ {0,0,2,0,2,2,2,0, 22, 14} }, -{ {0,0,2,0,2,2,2,1, 28, 1} }, -{ {0,0,2,0,2,2,2,2, 5, 4} }, -{ {0,0,2,1,0,0,0,0, 3, 3} }, -{ {0,0,2,1,0,0,0,1, 8, 2} }, -{ {0,0,2,1,0,0,0,2, 6, 2} }, -{ {0,0,2,1,0,0,1,0, 6, 3} }, -{ {0,0,2,1,0,0,1,1, 10, 3} }, -{ {0,0,2,1,0,0,1,2, 12, 2} }, -{ {0,0,2,1,0,0,2,0, 8, 3} }, -{ {0,0,2,1,0,0,2,1, 11, 42} }, -{ {0,0,2,1,0,0,2,2, 10, 2} }, -{ {0,0,2,1,0,1,0,0, 35, 12} }, -{ {0,0,2,1,0,1,0,1, 28, 37} }, -{ {0,0,2,1,0,1,0,2, 36, 32} }, -{ {0,0,2,1,0,1,1,0, 38, 21} }, -{ {0,0,2,1,0,1,1,1, 17, 30} }, -{ {0,0,2,1,0,1,1,2, 39, 21} }, -{ {0,0,2,1,0,1,2,0, 40, 21} }, -{ {0,0,2,1,0,1,2,1, 41, 21} }, -{ {0,0,2,1,0,1,2,2, 42, 21} }, -{ {0,0,2,1,0,2,0,0, 21, 12} }, -{ {0,0,2,1,0,2,0,1, 24, 12} }, -{ {0,0,2,1,0,2,0,2, 23, 12} }, -{ {0,0,2,1,0,2,1,0, 30, 21} }, -{ {0,0,2,1,0,2,1,1, 32, 21} }, -{ {0,0,2,1,0,2,1,2, 31, 21} }, -{ {0,0,2,1,0,2,2,0, 27, 32} }, -{ {0,0,2,1,0,2,2,1, 29, 32} }, -{ {0,0,2,1,0,2,2,2, 28, 32} }, -{ {0,0,2,1,1,0,0,0, 21, 9} }, -{ {0,0,2,1,1,0,0,1, 27, 43} }, -{ {0,0,2,1,1,0,0,2, 30, 20} }, -{ {0,0,2,1,1,0,1,0, 23, 9} }, -{ {0,0,2,1,1,0,1,1, 28, 43} }, -{ {0,0,2,1,1,0,1,2, 31, 20} }, -{ {0,0,2,1,1,0,2,0, 24, 9} }, -{ {0,0,2,1,1,0,2,1, 29, 43} }, -{ {0,0,2,1,1,0,2,2, 32, 20} }, -{ {0,0,2,1,1,1,0,0, 45, 3} }, -{ {0,0,2,1,1,1,0,1, 23, 31} }, -{ {0,0,2,1,1,1,0,2, 48, 20} }, -{ {0,0,2,1,1,1,1,0, 27, 11} }, -{ {0,0,2,1,1,1,1,1, 8, 30} }, -{ {0,0,2,1,1,1,1,2, 40, 28} }, -{ {0,0,2,1,1,1,2,0, 47, 20} }, -{ {0,0,2,1,1,1,2,1, 37, 37} }, -{ {0,0,2,1,1,1,2,2, 29, 25} }, -{ {0,0,2,1,1,2,0,0, 52, 1} }, -{ {0,0,2,1,1,2,0,1, 53, 21} }, -{ {0,0,2,1,1,2,0,2, 53, 0} }, -{ {0,0,2,1,1,2,1,0, 53, 1} }, -{ {0,0,2,1,1,2,1,1, 24, 4} }, -{ {0,0,2,1,1,2,1,2, 47, 29} }, -{ {0,0,2,1,1,2,2,0, 53, 20} }, -{ {0,0,2,1,1,2,2,1, 47, 39} }, -{ {0,0,2,1,1,2,2,2, 24, 5} }, -{ {0,0,2,1,2,0,0,0, 35, 9} }, -{ {0,0,2,1,2,0,0,1, 40, 20} }, -{ {0,0,2,1,2,0,0,2, 38, 20} }, -{ {0,0,2,1,2,0,1,0, 36, 9} }, -{ {0,0,2,1,2,0,1,1, 42, 20} }, -{ {0,0,2,1,2,0,1,2, 39, 20} }, -{ {0,0,2,1,2,0,2,0, 28, 46} }, -{ {0,0,2,1,2,0,2,1, 41, 20} }, -{ {0,0,2,1,2,0,2,2, 17, 29} }, -{ {0,0,2,1,2,1,0,0, 49, 1} }, -{ {0,0,2,1,2,1,0,1, 31, 22} }, -{ {0,0,2,1,2,1,0,2, 50, 0} }, -{ {0,0,2,1,2,1,1,0, 50, 1} }, -{ {0,0,2,1,2,1,1,1, 18, 5} }, -{ {0,0,2,1,2,1,1,2, 51, 1} }, -{ {0,0,2,1,2,1,2,0, 31, 27} }, -{ {0,0,2,1,2,1,2,1, 43, 22} }, -{ {0,0,2,1,2,1,2,2, 18, 4} }, -{ {0,0,2,1,2,2,0,0, 45, 2} }, -{ {0,0,2,1,2,2,0,1, 47, 21} }, -{ {0,0,2,1,2,2,0,2, 27, 10} }, -{ {0,0,2,1,2,2,1,0, 48, 21} }, -{ {0,0,2,1,2,2,1,1, 29, 24} }, -{ {0,0,2,1,2,2,1,2, 40, 31} }, -{ {0,0,2,1,2,2,2,0, 23, 28} }, -{ {0,0,2,1,2,2,2,1, 37, 46} }, -{ {0,0,2,1,2,2,2,2, 8, 29} }, -{ {0,0,2,2,0,0,0,0, 2, 2} }, -{ {0,0,2,2,0,0,0,1, 8, 33} }, -{ {0,0,2,2,0,0,0,2, 5, 2} }, -{ {0,0,2,2,0,0,1,0, 8, 42} }, -{ {0,0,2,2,0,0,1,1, 11, 2} }, -{ {0,0,2,2,0,0,1,2, 10, 20} }, -{ {0,0,2,2,0,0,2,0, 5, 3} }, -{ {0,0,2,2,0,0,2,1, 10, 21} }, -{ {0,0,2,2,0,0,2,2, 9, 2} }, -{ {0,0,2,2,0,1,0,0, 34, 12} }, -{ {0,0,2,2,0,1,0,1, 37, 32} }, -{ {0,0,2,2,0,1,0,2, 28, 7} }, -{ {0,0,2,2,0,1,1,0, 40, 32} }, -{ {0,0,2,2,0,1,1,1, 41, 32} }, -{ {0,0,2,2,0,1,1,2, 42, 32} }, -{ {0,0,2,2,0,1,2,0, 26, 6} }, -{ {0,0,2,2,0,1,2,1, 43, 21} }, -{ {0,0,2,2,0,1,2,2, 10, 6} }, -{ {0,0,2,2,0,2,0,0, 20, 12} }, -{ {0,0,2,2,0,2,0,1, 23, 32} }, -{ {0,0,2,2,0,2,0,2, 22, 12} }, -{ {0,0,2,2,0,2,1,0, 27, 21} }, -{ {0,0,2,2,0,2,1,1, 29, 21} }, -{ {0,0,2,2,0,2,1,2, 28, 21} }, -{ {0,0,2,2,0,2,2,0, 25, 21} }, -{ {0,0,2,2,0,2,2,1, 26, 21} }, -{ {0,0,2,2,0,2,2,2, 5, 24} }, -{ {0,0,2,2,1,0,0,0, 34, 9} }, -{ {0,0,2,2,1,0,0,1, 40, 43} }, -{ {0,0,2,2,1,0,0,2, 26, 7} }, -{ {0,0,2,2,1,0,1,0, 37, 43} }, -{ {0,0,2,2,1,0,1,1, 41, 43} }, -{ {0,0,2,2,1,0,1,2, 43, 20} }, -{ {0,0,2,2,1,0,2,0, 28, 6} }, -{ {0,0,2,2,1,0,2,1, 42, 43} }, -{ {0,0,2,2,1,0,2,2, 10, 7} }, -{ {0,0,2,2,1,1,0,0, 46, 2} }, -{ {0,0,2,2,1,1,0,1, 29, 10} }, -{ {0,0,2,2,1,1,0,2, 29, 7} }, -{ {0,0,2,2,1,1,1,0, 29, 11} }, -{ {0,0,2,2,1,1,1,1, 11, 10} }, -{ {0,0,2,2,1,1,1,2, 41, 28} }, -{ {0,0,2,2,1,1,2,0, 29, 6} }, -{ {0,0,2,2,1,1,2,1, 41, 31} }, -{ {0,0,2,2,1,1,2,2, 11, 6} }, -{ {0,0,2,2,1,2,0,0, 45, 7} }, -{ {0,0,2,2,1,2,0,1, 48, 1} }, -{ {0,0,2,2,1,2,0,2, 23, 38} }, -{ {0,0,2,2,1,2,1,0, 47, 1} }, -{ {0,0,2,2,1,2,1,1, 29, 4} }, -{ {0,0,2,2,1,2,1,2, 37, 22} }, -{ {0,0,2,2,1,2,2,0, 27, 6} }, -{ {0,0,2,2,1,2,2,1, 40, 45} }, -{ {0,0,2,2,1,2,2,2, 8, 39} }, -{ {0,0,2,2,2,0,0,0, 20, 9} }, -{ {0,0,2,2,2,0,0,1, 27, 20} }, -{ {0,0,2,2,2,0,0,2, 25, 20} }, -{ {0,0,2,2,2,0,1,0, 23, 43} }, -{ {0,0,2,2,2,0,1,1, 29, 20} }, -{ {0,0,2,2,2,0,1,2, 26, 20} }, -{ {0,0,2,2,2,0,2,0, 22, 9} }, -{ {0,0,2,2,2,0,2,1, 28, 20} }, -{ {0,0,2,2,2,0,2,2, 5, 25} }, -{ {0,0,2,2,2,1,0,0, 45, 6} }, -{ {0,0,2,2,2,1,0,1, 47, 0} }, -{ {0,0,2,2,2,1,0,2, 27, 7} }, -{ {0,0,2,2,2,1,1,0, 48, 0} }, -{ {0,0,2,2,2,1,1,1, 29, 5} }, -{ {0,0,2,2,2,1,1,2, 40, 38} }, -{ {0,0,2,2,2,1,2,0, 23, 45} }, -{ {0,0,2,2,2,1,2,1, 37, 27} }, -{ {0,0,2,2,2,1,2,2, 8, 44} }, -{ {0,0,2,2,2,2,0,0, 44, 0} }, -{ {0,0,2,2,2,2,0,1, 45, 0} }, -{ {0,0,2,2,2,2,0,2, 20, 22} }, -{ {0,0,2,2,2,2,1,0, 45, 1} }, -{ {0,0,2,2,2,2,1,1, 46, 0} }, -{ {0,0,2,2,2,2,1,2, 34, 22} }, -{ {0,0,2,2,2,2,2,0, 20, 27} }, -{ {0,0,2,2,2,2,2,1, 34, 27} }, -{ {0,0,2,2,2,2,2,2, 2, 4} }, -{ {0,1,0,0,0,0,0,0, 1, 4} }, -{ {0,1,0,0,0,0,0,1, 4, 12} }, -{ {0,1,0,0,0,0,0,2, 7, 12} }, -{ {0,1,0,0,0,0,1,0, 19, 7} }, -{ {0,1,0,0,0,0,1,1, 20, 13} }, -{ {0,1,0,0,0,0,1,2, 21, 13} }, -{ {0,1,0,0,0,0,2,0, 33, 2} }, -{ {0,1,0,0,0,0,2,1, 35, 13} }, -{ {0,1,0,0,0,0,2,2, 34, 13} }, -{ {0,1,0,0,0,1,0,0, 2, 27} }, -{ {0,1,0,0,0,1,0,1, 5, 26} }, -{ {0,1,0,0,0,1,0,2, 8, 41} }, -{ {0,1,0,0,0,1,1,0, 20, 18} }, -{ {0,1,0,0,0,1,1,1, 22, 18} }, -{ {0,1,0,0,0,1,1,2, 23, 40} }, -{ {0,1,0,0,0,1,2,0, 34, 18} }, -{ {0,1,0,0,0,1,2,1, 28, 9} }, -{ {0,1,0,0,0,1,2,2, 37, 18} }, -{ {0,1,0,0,0,2,0,0, 3, 26} }, -{ {0,1,0,0,0,2,0,1, 6, 26} }, -{ {0,1,0,0,0,2,0,2, 8, 26} }, -{ {0,1,0,0,0,2,1,0, 21, 18} }, -{ {0,1,0,0,0,2,1,1, 23, 18} }, -{ {0,1,0,0,0,2,1,2, 24, 18} }, -{ {0,1,0,0,0,2,2,0, 35, 18} }, -{ {0,1,0,0,0,2,2,1, 36, 18} }, -{ {0,1,0,0,0,2,2,2, 28, 5} }, -{ {0,1,0,0,1,0,0,0, 4, 6} }, -{ {0,1,0,0,1,0,0,1, 13, 6} }, -{ {0,1,0,0,1,0,0,2, 16, 18} }, -{ {0,1,0,0,1,0,1,0, 20, 7} }, -{ {0,1,0,0,1,0,1,1, 25, 18} }, -{ {0,1,0,0,1,0,1,2, 27, 18} }, -{ {0,1,0,0,1,0,2,0, 35, 7} }, -{ {0,1,0,0,1,0,2,1, 38, 18} }, -{ {0,1,0,0,1,0,2,2, 40, 18} }, -{ {0,1,0,0,1,1,0,0, 5, 6} }, -{ {0,1,0,0,1,1,0,1, 14, 6} }, -{ {0,1,0,0,1,1,0,2, 17, 18} }, -{ {0,1,0,0,1,1,1,0, 22, 7} }, -{ {0,1,0,0,1,1,1,1, 5, 10} }, -{ {0,1,0,0,1,1,1,2, 28, 18} }, -{ {0,1,0,0,1,1,2,0, 28, 42} }, -{ {0,1,0,0,1,1,2,1, 17, 9} }, -{ {0,1,0,0,1,1,2,2, 41, 18} }, -{ {0,1,0,0,1,2,0,0, 6, 6} }, -{ {0,1,0,0,1,2,0,1, 15, 6} }, -{ {0,1,0,0,1,2,0,2, 18, 18} }, -{ {0,1,0,0,1,2,1,0, 23, 17} }, -{ {0,1,0,0,1,2,1,1, 26, 18} }, -{ {0,1,0,0,1,2,1,2, 29, 18} }, -{ {0,1,0,0,1,2,2,0, 36, 17} }, -{ {0,1,0,0,1,2,2,1, 39, 18} }, -{ {0,1,0,0,1,2,2,2, 42, 18} }, -{ {0,1,0,0,2,0,0,0, 7, 6} }, -{ {0,1,0,0,2,0,0,1, 16, 6} }, -{ {0,1,0,0,2,0,0,2, 16, 26} }, -{ {0,1,0,0,2,0,1,0, 21, 7} }, -{ {0,1,0,0,2,0,1,1, 27, 17} }, -{ {0,1,0,0,2,0,1,2, 30, 18} }, -{ {0,1,0,0,2,0,2,0, 34, 7} }, -{ {0,1,0,0,2,0,2,1, 40, 17} }, -{ {0,1,0,0,2,0,2,2, 26, 4} }, -{ {0,1,0,0,2,1,0,0, 8, 6} }, -{ {0,1,0,0,2,1,0,1, 17, 6} }, -{ {0,1,0,0,2,1,0,2, 18, 26} }, -{ {0,1,0,0,2,1,1,0, 23, 7} }, -{ {0,1,0,0,2,1,1,1, 28, 17} }, -{ {0,1,0,0,2,1,1,2, 31, 18} }, -{ {0,1,0,0,2,1,2,0, 37, 17} }, -{ {0,1,0,0,2,1,2,1, 41, 17} }, -{ {0,1,0,0,2,1,2,2, 43, 18} }, -{ {0,1,0,0,2,2,0,0, 8, 45} }, -{ {0,1,0,0,2,2,0,1, 18, 6} }, -{ {0,1,0,0,2,2,0,2, 17, 26} }, -{ {0,1,0,0,2,2,1,0, 24, 7} }, -{ {0,1,0,0,2,2,1,1, 29, 17} }, -{ {0,1,0,0,2,2,1,2, 32, 18} }, -{ {0,1,0,0,2,2,2,0, 28, 28} }, -{ {0,1,0,0,2,2,2,1, 42, 17} }, -{ {0,1,0,0,2,2,2,2, 10, 4} }, -{ {0,1,0,1,0,0,0,0, 2, 28} }, -{ {0,1,0,1,0,0,0,1, 5, 12} }, -{ {0,1,0,1,0,0,0,2, 8, 12} }, -{ {0,1,0,1,0,0,1,0, 20, 2} }, -{ {0,1,0,1,0,0,1,1, 22, 13} }, -{ {0,1,0,1,0,0,1,2, 23, 13} }, -{ {0,1,0,1,0,0,2,0, 34, 2} }, -{ {0,1,0,1,0,0,2,1, 28, 34} }, -{ {0,1,0,1,0,0,2,2, 37, 33} }, -{ {0,1,0,1,0,1,0,0, 5, 27} }, -{ {0,1,0,1,0,1,0,1, 9, 12} }, -{ {0,1,0,1,0,1,0,2, 10, 13} }, -{ {0,1,0,1,0,1,1,0, 25, 13} }, -{ {0,1,0,1,0,1,1,1, 5, 22} }, -{ {0,1,0,1,0,1,1,2, 26, 13} }, -{ {0,1,0,1,0,1,2,0, 26, 8} }, -{ {0,1,0,1,0,1,2,1, 10, 8} }, -{ {0,1,0,1,0,1,2,2, 43, 13} }, -{ {0,1,0,1,0,2,0,0, 8, 27} }, -{ {0,1,0,1,0,2,0,1, 10, 26} }, -{ {0,1,0,1,0,2,0,2, 11, 40} }, -{ {0,1,0,1,0,2,1,0, 27, 40} }, -{ {0,1,0,1,0,2,1,1, 28, 40} }, -{ {0,1,0,1,0,2,1,2, 29, 40} }, -{ {0,1,0,1,0,2,2,0, 40, 13} }, -{ {0,1,0,1,0,2,2,1, 42, 13} }, -{ {0,1,0,1,0,2,2,2, 41, 13} }, -{ {0,1,0,1,1,0,0,0, 20, 25} }, -{ {0,1,0,1,1,0,0,1, 25, 26} }, -{ {0,1,0,1,1,0,0,2, 27, 41} }, -{ {0,1,0,1,1,0,1,0, 44, 18} }, -{ {0,1,0,1,1,0,1,1, 20, 24} }, -{ {0,1,0,1,1,0,1,2, 45, 19} }, -{ {0,1,0,1,1,0,2,0, 45, 14} }, -{ {0,1,0,1,1,0,2,1, 27, 34} }, -{ {0,1,0,1,1,0,2,2, 47, 19} }, -{ {0,1,0,1,1,1,0,0, 22, 26} }, -{ {0,1,0,1,1,1,0,1, 5, 9} }, -{ {0,1,0,1,1,1,0,2, 28, 41} }, -{ {0,1,0,1,1,1,1,0, 20, 3} }, -{ {0,1,0,1,1,1,1,1, 2, 31} }, -{ {0,1,0,1,1,1,1,2, 34, 3} }, -{ {0,1,0,1,1,1,2,0, 23, 8} }, -{ {0,1,0,1,1,1,2,1, 8, 9} }, -{ {0,1,0,1,1,1,2,2, 37, 42} }, -{ {0,1,0,1,1,2,0,0, 23, 26} }, -{ {0,1,0,1,1,2,0,1, 26, 26} }, -{ {0,1,0,1,1,2,0,2, 29, 41} }, -{ {0,1,0,1,1,2,1,0, 45, 18} }, -{ {0,1,0,1,1,2,1,1, 34, 24} }, -{ {0,1,0,1,1,2,1,2, 46, 18} }, -{ {0,1,0,1,1,2,2,0, 48, 19} }, -{ {0,1,0,1,1,2,2,1, 40, 23} }, -{ {0,1,0,1,1,2,2,2, 29, 30} }, -{ {0,1,0,1,2,0,0,0, 34, 25} }, -{ {0,1,0,1,2,0,0,1, 26, 23} }, -{ {0,1,0,1,2,0,0,2, 40, 26} }, -{ {0,1,0,1,2,0,1,0, 45, 15} }, -{ {0,1,0,1,2,0,1,1, 23, 23} }, -{ {0,1,0,1,2,0,1,2, 48, 18} }, -{ {0,1,0,1,2,0,2,0, 46, 15} }, -{ {0,1,0,1,2,0,2,1, 29, 34} }, -{ {0,1,0,1,2,0,2,2, 29, 29} }, -{ {0,1,0,1,2,1,0,0, 28, 35} }, -{ {0,1,0,1,2,1,0,1, 10, 23} }, -{ {0,1,0,1,2,1,0,2, 42, 26} }, -{ {0,1,0,1,2,1,1,0, 27, 35} }, -{ {0,1,0,1,2,1,1,1, 8, 22} }, -{ {0,1,0,1,2,1,1,2, 40, 8} }, -{ {0,1,0,1,2,1,2,0, 29, 35} }, -{ {0,1,0,1,2,1,2,1, 11, 35} }, -{ {0,1,0,1,2,1,2,2, 41, 8} }, -{ {0,1,0,1,2,2,0,0, 37, 44} }, -{ {0,1,0,1,2,2,0,1, 43, 26} }, -{ {0,1,0,1,2,2,0,2, 41, 26} }, -{ {0,1,0,1,2,2,1,0, 47, 18} }, -{ {0,1,0,1,2,2,1,1, 37, 39} }, -{ {0,1,0,1,2,2,1,2, 29, 31} }, -{ {0,1,0,1,2,2,2,0, 29, 28} }, -{ {0,1,0,1,2,2,2,1, 41, 23} }, -{ {0,1,0,1,2,2,2,2, 11, 28} }, -{ {0,1,0,2,0,0,0,0, 3, 28} }, -{ {0,1,0,2,0,0,0,1, 6, 12} }, -{ {0,1,0,2,0,0,0,2, 8, 47} }, -{ {0,1,0,2,0,0,1,0, 21, 2} }, -{ {0,1,0,2,0,0,1,1, 23, 33} }, -{ {0,1,0,2,0,0,1,2, 24, 13} }, -{ {0,1,0,2,0,0,2,0, 35, 2} }, -{ {0,1,0,2,0,0,2,1, 36, 33} }, -{ {0,1,0,2,0,0,2,2, 28, 24} }, -{ {0,1,0,2,0,1,0,0, 8, 46} }, -{ {0,1,0,2,0,1,0,1, 10, 12} }, -{ {0,1,0,2,0,1,0,2, 11, 12} }, -{ {0,1,0,2,0,1,1,0, 27, 13} }, -{ {0,1,0,2,0,1,1,1, 28, 13} }, -{ {0,1,0,2,0,1,1,2, 29, 13} }, -{ {0,1,0,2,0,1,2,0, 40, 40} }, -{ {0,1,0,2,0,1,2,1, 42, 40} }, -{ {0,1,0,2,0,1,2,2, 41, 40} }, -{ {0,1,0,2,0,2,0,0, 6, 27} }, -{ {0,1,0,2,0,2,0,1, 12, 13} }, -{ {0,1,0,2,0,2,0,2, 10, 27} }, -{ {0,1,0,2,0,2,1,0, 30, 13} }, -{ {0,1,0,2,0,2,1,1, 31, 13} }, -{ {0,1,0,2,0,2,1,2, 32, 13} }, -{ {0,1,0,2,0,2,2,0, 38, 13} }, -{ {0,1,0,2,0,2,2,1, 39, 13} }, -{ {0,1,0,2,0,2,2,2, 17, 5} }, -{ {0,1,0,2,1,0,0,0, 35, 25} }, -{ {0,1,0,2,1,0,0,1, 38, 26} }, -{ {0,1,0,2,1,0,0,2, 40, 41} }, -{ {0,1,0,2,1,0,1,0, 45, 28} }, -{ {0,1,0,2,1,0,1,1, 27, 29} }, -{ {0,1,0,2,1,0,1,2, 47, 40} }, -{ {0,1,0,2,1,0,2,0, 49, 19} }, -{ {0,1,0,2,1,0,2,1, 50, 19} }, -{ {0,1,0,2,1,0,2,2, 31, 24} }, -{ {0,1,0,2,1,1,0,0, 28, 3} }, -{ {0,1,0,2,1,1,0,1, 17, 3} }, -{ {0,1,0,2,1,1,0,2, 41, 41} }, -{ {0,1,0,2,1,1,1,0, 23, 11} }, -{ {0,1,0,2,1,1,1,1, 8, 10} }, -{ {0,1,0,2,1,1,1,2, 37, 3} }, -{ {0,1,0,2,1,1,2,0, 31, 3} }, -{ {0,1,0,2,1,1,2,1, 18, 31} }, -{ {0,1,0,2,1,1,2,2, 43, 3} }, -{ {0,1,0,2,1,2,0,0, 36, 26} }, -{ {0,1,0,2,1,2,0,1, 39, 26} }, -{ {0,1,0,2,1,2,0,2, 42, 41} }, -{ {0,1,0,2,1,2,1,0, 48, 40} }, -{ {0,1,0,2,1,2,1,1, 40, 4} }, -{ {0,1,0,2,1,2,1,2, 29, 37} }, -{ {0,1,0,2,1,2,2,0, 50, 18} }, -{ {0,1,0,2,1,2,2,1, 51, 19} }, -{ {0,1,0,2,1,2,2,2, 18, 30} }, -{ {0,1,0,2,2,0,0,0, 21, 25} }, -{ {0,1,0,2,2,0,0,1, 30, 26} }, -{ {0,1,0,2,2,0,0,2, 27, 26} }, -{ {0,1,0,2,2,0,1,0, 52, 19} }, -{ {0,1,0,2,2,0,1,1, 53, 19} }, -{ {0,1,0,2,2,0,1,2, 53, 40} }, -{ {0,1,0,2,2,0,2,0, 45, 29} }, -{ {0,1,0,2,2,0,2,1, 48, 41} }, -{ {0,1,0,2,2,0,2,2, 23, 4} }, -{ {0,1,0,2,2,1,0,0, 24, 26} }, -{ {0,1,0,2,2,1,0,1, 32, 26} }, -{ {0,1,0,2,2,1,0,2, 29, 26} }, -{ {0,1,0,2,2,1,1,0, 53, 41} }, -{ {0,1,0,2,2,1,1,1, 24, 30} }, -{ {0,1,0,2,2,1,1,2, 47, 9} }, -{ {0,1,0,2,2,1,2,0, 47, 41} }, -{ {0,1,0,2,2,1,2,1, 29, 36} }, -{ {0,1,0,2,2,1,2,2, 37, 24} }, -{ {0,1,0,2,2,2,0,0, 23, 44} }, -{ {0,1,0,2,2,2,0,1, 31, 26} }, -{ {0,1,0,2,2,2,0,2, 28, 26} }, -{ {0,1,0,2,2,2,1,0, 53, 18} }, -{ {0,1,0,2,2,2,1,1, 47, 5} }, -{ {0,1,0,2,2,2,1,2, 24, 31} }, -{ {0,1,0,2,2,2,2,0, 27, 28} }, -{ {0,1,0,2,2,2,2,1, 40, 11} }, -{ {0,1,0,2,2,2,2,2, 8, 5} }, -{ {0,1,1,0,0,0,0,0, 4, 5} }, -{ {0,1,1,0,0,0,0,1, 13, 2} }, -{ {0,1,1,0,0,0,0,2, 16, 12} }, -{ {0,1,1,0,0,0,1,0, 20, 10} }, -{ {0,1,1,0,0,0,1,1, 25, 2} }, -{ {0,1,1,0,0,0,1,2, 27, 33} }, -{ {0,1,1,0,0,0,2,0, 35, 10} }, -{ {0,1,1,0,0,0,2,1, 38, 2} }, -{ {0,1,1,0,0,0,2,2, 40, 33} }, -{ {0,1,1,0,0,1,0,0, 20, 4} }, -{ {0,1,1,0,0,1,0,1, 25, 12} }, -{ {0,1,1,0,0,1,0,2, 27, 12} }, -{ {0,1,1,0,0,1,1,0, 44, 12} }, -{ {0,1,1,0,0,1,1,1, 20, 5} }, -{ {0,1,1,0,0,1,1,2, 45, 13} }, -{ {0,1,1,0,0,1,2,0, 45, 8} }, -{ {0,1,1,0,0,1,2,1, 27, 9} }, -{ {0,1,1,0,0,1,2,2, 47, 32} }, -{ {0,1,1,0,0,2,0,0, 35, 4} }, -{ {0,1,1,0,0,2,0,1, 38, 12} }, -{ {0,1,1,0,0,2,0,2, 40, 12} }, -{ {0,1,1,0,0,2,1,0, 45, 26} }, -{ {0,1,1,0,0,2,1,1, 27, 44} }, -{ {0,1,1,0,0,2,1,2, 47, 13} }, -{ {0,1,1,0,0,2,2,0, 49, 13} }, -{ {0,1,1,0,0,2,2,1, 50, 13} }, -{ {0,1,1,0,0,2,2,2, 31, 5} }, -{ {0,1,1,0,1,0,0,0, 13, 5} }, -{ {0,1,1,0,1,0,0,1, 54, 0} }, -{ {0,1,1,0,1,0,0,2, 55, 0} }, -{ {0,1,1,0,1,0,1,0, 25, 22} }, -{ {0,1,1,0,1,0,1,1, 13, 4} }, -{ {0,1,1,0,1,0,1,2, 38, 27} }, -{ {0,1,1,0,1,0,2,0, 38, 22} }, -{ {0,1,1,0,1,0,2,1, 55, 1} }, -{ {0,1,1,0,1,0,2,2, 51, 5} }, -{ {0,1,1,0,1,1,0,0, 25, 24} }, -{ {0,1,1,0,1,1,0,1, 13, 3} }, -{ {0,1,1,0,1,1,0,2, 38, 3} }, -{ {0,1,1,0,1,1,1,0, 20, 11} }, -{ {0,1,1,0,1,1,1,1, 4, 4} }, -{ {0,1,1,0,1,1,1,2, 35, 11} }, -{ {0,1,1,0,1,1,2,0, 27, 42} }, -{ {0,1,1,0,1,1,2,1, 16, 9} }, -{ {0,1,1,0,1,1,2,2, 40, 42} }, -{ {0,1,1,0,1,2,0,0, 38, 24} }, -{ {0,1,1,0,1,2,0,1, 55, 6} }, -{ {0,1,1,0,1,2,0,2, 51, 30} }, -{ {0,1,1,0,1,2,1,0, 27, 27} }, -{ {0,1,1,0,1,2,1,1, 16, 27} }, -{ {0,1,1,0,1,2,1,2, 40, 27} }, -{ {0,1,1,0,1,2,2,0, 50, 23} }, -{ {0,1,1,0,1,2,2,1, 56, 0} }, -{ {0,1,1,0,1,2,2,2, 39, 5} }, -{ {0,1,1,0,2,0,0,0, 16, 22} }, -{ {0,1,1,0,2,0,0,1, 55, 7} }, -{ {0,1,1,0,2,0,0,2, 56, 1} }, -{ {0,1,1,0,2,0,1,0, 27, 22} }, -{ {0,1,1,0,2,0,1,1, 38, 25} }, -{ {0,1,1,0,2,0,1,2, 50, 26} }, -{ {0,1,1,0,2,0,2,0, 40, 22} }, -{ {0,1,1,0,2,0,2,1, 51, 28} }, -{ {0,1,1,0,2,0,2,2, 39, 4} }, -{ {0,1,1,0,2,1,0,0, 27, 39} }, -{ {0,1,1,0,2,1,0,1, 38, 9} }, -{ {0,1,1,0,2,1,0,2, 50, 8} }, -{ {0,1,1,0,2,1,1,0, 45, 23} }, -{ {0,1,1,0,2,1,1,1, 35, 5} }, -{ {0,1,1,0,2,1,1,2, 49, 8} }, -{ {0,1,1,0,2,1,2,0, 47, 23} }, -{ {0,1,1,0,2,1,2,1, 40, 9} }, -{ {0,1,1,0,2,1,2,2, 31, 4} }, -{ {0,1,1,0,2,2,0,0, 40, 39} }, -{ {0,1,1,0,2,2,0,1, 51, 2} }, -{ {0,1,1,0,2,2,0,2, 39, 10} }, -{ {0,1,1,0,2,2,1,0, 47, 38} }, -{ {0,1,1,0,2,2,1,1, 40, 44} }, -{ {0,1,1,0,2,2,1,2, 31, 10} }, -{ {0,1,1,0,2,2,2,0, 31, 11} }, -{ {0,1,1,0,2,2,2,1, 39, 11} }, -{ {0,1,1,0,2,2,2,2, 12, 5} }, -{ {0,1,1,1,0,0,0,0, 5, 11} }, -{ {0,1,1,1,0,0,0,1, 14, 2} }, -{ {0,1,1,1,0,0,0,2, 17, 12} }, -{ {0,1,1,1,0,0,1,0, 22, 2} }, -{ {0,1,1,1,0,0,1,1, 5, 7} }, -{ {0,1,1,1,0,0,1,2, 28, 33} }, -{ {0,1,1,1,0,0,2,0, 28, 15} }, -{ {0,1,1,1,0,0,2,1, 17, 15} }, -{ {0,1,1,1,0,0,2,2, 41, 33} }, -{ {0,1,1,1,0,1,0,0, 22, 29} }, -{ {0,1,1,1,0,1,0,1, 5, 23} }, -{ {0,1,1,1,0,1,0,2, 28, 12} }, -{ {0,1,1,1,0,1,1,0, 20, 15} }, -{ {0,1,1,1,0,1,1,1, 2, 22} }, -{ {0,1,1,1,0,1,1,2, 34, 15} }, -{ {0,1,1,1,0,1,2,0, 23, 35} }, -{ {0,1,1,1,0,1,2,1, 8, 34} }, -{ {0,1,1,1,0,1,2,2, 37, 15} }, -{ {0,1,1,1,0,2,0,0, 28, 16} }, -{ {0,1,1,1,0,2,0,1, 17, 7} }, -{ {0,1,1,1,0,2,0,2, 41, 12} }, -{ {0,1,1,1,0,2,1,0, 23, 6} }, -{ {0,1,1,1,0,2,1,1, 8, 7} }, -{ {0,1,1,1,0,2,1,2, 37, 16} }, -{ {0,1,1,1,0,2,2,0, 31, 15} }, -{ {0,1,1,1,0,2,2,1, 18, 23} }, -{ {0,1,1,1,0,2,2,2, 43, 15} }, -{ {0,1,1,1,1,0,0,0, 25, 5} }, -{ {0,1,1,1,1,0,0,1, 13, 7} }, -{ {0,1,1,1,1,0,0,2, 38, 15} }, -{ {0,1,1,1,1,0,1,0, 20, 6} }, -{ {0,1,1,1,1,0,1,1, 4, 7} }, -{ {0,1,1,1,1,0,1,2, 35, 6} }, -{ {0,1,1,1,1,0,2,0, 27, 15} }, -{ {0,1,1,1,1,0,2,1, 16, 15} }, -{ {0,1,1,1,1,0,2,2, 40, 15} }, -{ {0,1,1,1,1,1,0,0, 20, 8} }, -{ {0,1,1,1,1,1,0,1, 4, 9} }, -{ {0,1,1,1,1,1,0,2, 35, 8} }, -{ {0,1,1,1,1,1,1,0, 19, 6} }, -{ {0,1,1,1,1,1,1,1, 1, 5} }, -{ {0,1,1,1,1,1,1,2, 33, 3} }, -{ {0,1,1,1,1,1,2,0, 21, 8} }, -{ {0,1,1,1,1,1,2,1, 7, 9} }, -{ {0,1,1,1,1,1,2,2, 34, 8} }, -{ {0,1,1,1,1,2,0,0, 27, 16} }, -{ {0,1,1,1,1,2,0,1, 16, 7} }, -{ {0,1,1,1,1,2,0,2, 40, 16} }, -{ {0,1,1,1,1,2,1,0, 21, 6} }, -{ {0,1,1,1,1,2,1,1, 7, 7} }, -{ {0,1,1,1,1,2,1,2, 34, 6} }, -{ {0,1,1,1,1,2,2,0, 30, 15} }, -{ {0,1,1,1,1,2,2,1, 16, 23} }, -{ {0,1,1,1,1,2,2,2, 26, 5} }, -{ {0,1,1,1,2,0,0,0, 26, 15} }, -{ {0,1,1,1,2,0,0,1, 15, 7} }, -{ {0,1,1,1,2,0,0,2, 39, 15} }, -{ {0,1,1,1,2,0,1,0, 23, 16} }, -{ {0,1,1,1,2,0,1,1, 6, 7} }, -{ {0,1,1,1,2,0,1,2, 36, 16} }, -{ {0,1,1,1,2,0,2,0, 29, 15} }, -{ {0,1,1,1,2,0,2,1, 18, 15} }, -{ {0,1,1,1,2,0,2,2, 42, 15} }, -{ {0,1,1,1,2,1,0,0, 23, 15} }, -{ {0,1,1,1,2,1,0,1, 6, 23} }, -{ {0,1,1,1,2,1,0,2, 36, 15} }, -{ {0,1,1,1,2,1,1,0, 21, 15} }, -{ {0,1,1,1,2,1,1,1, 3, 23} }, -{ {0,1,1,1,2,1,1,2, 35, 15} }, -{ {0,1,1,1,2,1,2,0, 24, 15} }, -{ {0,1,1,1,2,1,2,1, 8, 23} }, -{ {0,1,1,1,2,1,2,2, 28, 4} }, -{ {0,1,1,1,2,2,0,0, 29, 16} }, -{ {0,1,1,1,2,2,0,1, 18, 7} }, -{ {0,1,1,1,2,2,0,2, 42, 16} }, -{ {0,1,1,1,2,2,1,0, 24, 6} }, -{ {0,1,1,1,2,2,1,1, 8, 38} }, -{ {0,1,1,1,2,2,1,2, 28, 31} }, -{ {0,1,1,1,2,2,2,0, 32, 15} }, -{ {0,1,1,1,2,2,2,1, 17, 23} }, -{ {0,1,1,1,2,2,2,2, 10, 5} }, -{ {0,1,1,2,0,0,0,0, 6, 11} }, -{ {0,1,1,2,0,0,0,1, 15, 2} }, -{ {0,1,1,2,0,0,0,2, 18, 12} }, -{ {0,1,1,2,0,0,1,0, 23, 2} }, -{ {0,1,1,2,0,0,1,1, 26, 2} }, -{ {0,1,1,2,0,0,1,2, 29, 33} }, -{ {0,1,1,2,0,0,2,0, 36, 2} }, -{ {0,1,1,2,0,0,2,1, 39, 2} }, -{ {0,1,1,2,0,0,2,2, 42, 33} }, -{ {0,1,1,2,0,1,0,0, 23, 47} }, -{ {0,1,1,2,0,1,0,1, 26, 12} }, -{ {0,1,1,2,0,1,0,2, 29, 12} }, -{ {0,1,1,2,0,1,1,0, 45, 12} }, -{ {0,1,1,2,0,1,1,1, 34, 5} }, -{ {0,1,1,2,0,1,1,2, 46, 12} }, -{ {0,1,1,2,0,1,2,0, 48, 32} }, -{ {0,1,1,2,0,1,2,1, 40, 36} }, -{ {0,1,1,2,0,1,2,2, 29, 39} }, -{ {0,1,1,2,0,2,0,0, 36, 47} }, -{ {0,1,1,2,0,2,0,1, 39, 12} }, -{ {0,1,1,2,0,2,0,2, 42, 12} }, -{ {0,1,1,2,0,2,1,0, 48, 13} }, -{ {0,1,1,2,0,2,1,1, 40, 25} }, -{ {0,1,1,2,0,2,1,2, 29, 22} }, -{ {0,1,1,2,0,2,2,0, 50, 12} }, -{ {0,1,1,2,0,2,2,1, 51, 13} }, -{ {0,1,1,2,0,2,2,2, 18, 22} }, -{ {0,1,1,2,1,0,0,0, 38, 5} }, -{ {0,1,1,2,1,0,0,1, 55, 2} }, -{ {0,1,1,2,1,0,0,2, 51, 22} }, -{ {0,1,1,2,1,0,1,0, 27, 46} }, -{ {0,1,1,2,1,0,1,1, 16, 29} }, -{ {0,1,1,2,1,0,1,2, 40, 46} }, -{ {0,1,1,2,1,0,2,0, 50, 31} }, -{ {0,1,1,2,1,0,2,1, 56, 3} }, -{ {0,1,1,2,1,0,2,2, 39, 24} }, -{ {0,1,1,2,1,1,0,0, 27, 3} }, -{ {0,1,1,2,1,1,0,1, 16, 3} }, -{ {0,1,1,2,1,1,0,2, 40, 3} }, -{ {0,1,1,2,1,1,1,0, 21, 11} }, -{ {0,1,1,2,1,1,1,1, 7, 10} }, -{ {0,1,1,2,1,1,1,2, 34, 11} }, -{ {0,1,1,2,1,1,2,0, 30, 3} }, -{ {0,1,1,2,1,1,2,1, 16, 31} }, -{ {0,1,1,2,1,1,2,2, 26, 24} }, -{ {0,1,1,2,1,2,0,0, 50, 4} }, -{ {0,1,1,2,1,2,0,1, 56, 13} }, -{ {0,1,1,2,1,2,0,2, 39, 22} }, -{ {0,1,1,2,1,2,1,0, 30, 27} }, -{ {0,1,1,2,1,2,1,1, 16, 4} }, -{ {0,1,1,2,1,2,1,2, 26, 22} }, -{ {0,1,1,2,1,2,2,0, 57, 0} }, -{ {0,1,1,2,1,2,2,1, 55, 5} }, -{ {0,1,1,2,1,2,2,2, 15, 5} }, -{ {0,1,1,2,2,0,0,0, 30, 5} }, -{ {0,1,1,2,2,0,0,1, 57, 2} }, -{ {0,1,1,2,2,0,0,2, 50, 22} }, -{ {0,1,1,2,2,0,1,0, 53, 36} }, -{ {0,1,1,2,2,0,1,1, 30, 25} }, -{ {0,1,1,2,2,0,1,2, 48, 44} }, -{ {0,1,1,2,2,0,2,0, 48, 30} }, -{ {0,1,1,2,2,0,2,1, 50, 29} }, -{ {0,1,1,2,2,0,2,2, 36, 4} }, -{ {0,1,1,2,2,1,0,0, 53, 25} }, -{ {0,1,1,2,2,1,0,1, 30, 9} }, -{ {0,1,1,2,2,1,0,2, 48, 9} }, -{ {0,1,1,2,2,1,1,0, 52, 9} }, -{ {0,1,1,2,2,1,1,1, 21, 5} }, -{ {0,1,1,2,2,1,1,2, 45, 22} }, -{ {0,1,1,2,2,1,2,0, 53, 8} }, -{ {0,1,1,2,2,1,2,1, 27, 36} }, -{ {0,1,1,2,2,1,2,2, 23, 24} }, -{ {0,1,1,2,2,2,0,0, 48, 5} }, -{ {0,1,1,2,2,2,0,1, 50, 3} }, -{ {0,1,1,2,2,2,0,2, 36, 31} }, -{ {0,1,1,2,2,2,1,0, 53, 45} }, -{ {0,1,1,2,2,2,1,1, 27, 25} }, -{ {0,1,1,2,2,2,1,2, 23, 37} }, -{ {0,1,1,2,2,2,2,0, 30, 11} }, -{ {0,1,1,2,2,2,2,1, 38, 11} }, -{ {0,1,1,2,2,2,2,2, 6, 5} }, -{ {0,1,2,0,0,0,0,0, 7, 11} }, -{ {0,1,2,0,0,0,0,1, 16, 2} }, -{ {0,1,2,0,0,0,0,2, 16, 28} }, -{ {0,1,2,0,0,0,1,0, 21, 10} }, -{ {0,1,2,0,0,0,1,1, 27, 2} }, -{ {0,1,2,0,0,0,1,2, 30, 2} }, -{ {0,1,2,0,0,0,2,0, 34, 10} }, -{ {0,1,2,0,0,0,2,1, 40, 2} }, -{ {0,1,2,0,0,0,2,2, 26, 25} }, -{ {0,1,2,0,0,1,0,0, 34, 4} }, -{ {0,1,2,0,0,1,0,1, 26, 9} }, -{ {0,1,2,0,0,1,0,2, 40, 47} }, -{ {0,1,2,0,0,1,1,0, 45, 9} }, -{ {0,1,2,0,0,1,1,1, 23, 36} }, -{ {0,1,2,0,0,1,1,2, 48, 33} }, -{ {0,1,2,0,0,1,2,0, 46, 9} }, -{ {0,1,2,0,0,1,2,1, 29, 9} }, -{ {0,1,2,0,0,1,2,2, 29, 44} }, -{ {0,1,2,0,0,2,0,0, 21, 4} }, -{ {0,1,2,0,0,2,0,1, 30, 12} }, -{ {0,1,2,0,0,2,0,2, 27, 47} }, -{ {0,1,2,0,0,2,1,0, 52, 12} }, -{ {0,1,2,0,0,2,1,1, 53, 32} }, -{ {0,1,2,0,0,2,1,2, 53, 13} }, -{ {0,1,2,0,0,2,2,0, 45, 27} }, -{ {0,1,2,0,0,2,2,1, 48, 12} }, -{ {0,1,2,0,0,2,2,2, 23, 25} }, -{ {0,1,2,0,1,0,0,0, 16, 30} }, -{ {0,1,2,0,1,0,0,1, 55, 3} }, -{ {0,1,2,0,1,0,0,2, 56, 2} }, -{ {0,1,2,0,1,0,1,0, 27, 37} }, -{ {0,1,2,0,1,0,1,1, 38, 4} }, -{ {0,1,2,0,1,0,1,2, 50, 28} }, -{ {0,1,2,0,1,0,2,0, 40, 37} }, -{ {0,1,2,0,1,0,2,1, 51, 26} }, -{ {0,1,2,0,1,0,2,2, 39, 25} }, -{ {0,1,2,0,1,1,0,0, 26, 3} }, -{ {0,1,2,0,1,1,0,1, 15, 3} }, -{ {0,1,2,0,1,1,0,2, 39, 3} }, -{ {0,1,2,0,1,1,1,0, 23, 3} }, -{ {0,1,2,0,1,1,1,1, 6, 10} }, -{ {0,1,2,0,1,1,1,2, 36, 3} }, -{ {0,1,2,0,1,1,2,0, 29, 42} }, -{ {0,1,2,0,1,1,2,1, 18, 9} }, -{ {0,1,2,0,1,1,2,2, 42, 42} }, -{ {0,1,2,0,1,2,0,0, 30, 24} }, -{ {0,1,2,0,1,2,0,1, 57, 6} }, -{ {0,1,2,0,1,2,0,2, 50, 30} }, -{ {0,1,2,0,1,2,1,0, 53, 23} }, -{ {0,1,2,0,1,2,1,1, 30, 4} }, -{ {0,1,2,0,1,2,1,2, 48, 29} }, -{ {0,1,2,0,1,2,2,0, 48, 39} }, -{ {0,1,2,0,1,2,2,1, 50, 27} }, -{ {0,1,2,0,1,2,2,2, 36, 25} }, -{ {0,1,2,0,2,0,0,0, 16, 5} }, -{ {0,1,2,0,2,0,0,1, 56, 8} }, -{ {0,1,2,0,2,0,0,2, 55, 4} }, -{ {0,1,2,0,2,0,1,0, 30, 22} }, -{ {0,1,2,0,2,0,1,1, 50, 5} }, -{ {0,1,2,0,2,0,1,2, 57, 1} }, -{ {0,1,2,0,2,0,2,0, 26, 27} }, -{ {0,1,2,0,2,0,2,1, 39, 27} }, -{ {0,1,2,0,2,0,2,2, 15, 4} }, -{ {0,1,2,0,2,1,0,0, 40, 24} }, -{ {0,1,2,0,2,1,0,1, 39, 9} }, -{ {0,1,2,0,2,1,0,2, 51, 8} }, -{ {0,1,2,0,2,1,1,0, 48, 22} }, -{ {0,1,2,0,2,1,1,1, 36, 36} }, -{ {0,1,2,0,2,1,1,2, 50, 9} }, -{ {0,1,2,0,2,1,2,0, 29, 27} }, -{ {0,1,2,0,2,1,2,1, 42, 9} }, -{ {0,1,2,0,2,1,2,2, 18, 27} }, -{ {0,1,2,0,2,2,0,0, 27, 24} }, -{ {0,1,2,0,2,2,0,1, 50, 2} }, -{ {0,1,2,0,2,2,0,2, 38, 10} }, -{ {0,1,2,0,2,2,1,0, 53, 38} }, -{ {0,1,2,0,2,2,1,1, 48, 4} }, -{ {0,1,2,0,2,2,1,2, 30, 10} }, -{ {0,1,2,0,2,2,2,0, 23, 46} }, -{ {0,1,2,0,2,2,2,1, 36, 46} }, -{ {0,1,2,0,2,2,2,2, 6, 4} }, -{ {0,1,2,1,0,0,0,0, 8, 11} }, -{ {0,1,2,1,0,0,0,1, 17, 2} }, -{ {0,1,2,1,0,0,0,2, 18, 28} }, -{ {0,1,2,1,0,0,1,0, 23, 10} }, -{ {0,1,2,1,0,0,1,1, 28, 2} }, -{ {0,1,2,1,0,0,1,2, 31, 2} }, -{ {0,1,2,1,0,0,2,0, 37, 2} }, -{ {0,1,2,1,0,0,2,1, 41, 2} }, -{ {0,1,2,1,0,0,2,2, 43, 2} }, -{ {0,1,2,1,0,1,0,0, 28, 8} }, -{ {0,1,2,1,0,1,0,1, 10, 9} }, -{ {0,1,2,1,0,1,0,2, 42, 47} }, -{ {0,1,2,1,0,1,1,0, 27, 8} }, -{ {0,1,2,1,0,1,1,1, 8, 37} }, -{ {0,1,2,1,0,1,1,2, 40, 35} }, -{ {0,1,2,1,0,1,2,0, 29, 8} }, -{ {0,1,2,1,0,1,2,1, 11, 9} }, -{ {0,1,2,1,0,1,2,2, 41, 35} }, -{ {0,1,2,1,0,2,0,0, 24, 29} }, -{ {0,1,2,1,0,2,0,1, 32, 12} }, -{ {0,1,2,1,0,2,0,2, 29, 47} }, -{ {0,1,2,1,0,2,1,0, 53, 12} }, -{ {0,1,2,1,0,2,1,1, 24, 23} }, -{ {0,1,2,1,0,2,1,2, 47, 34} }, -{ {0,1,2,1,0,2,2,0, 47, 12} }, -{ {0,1,2,1,0,2,2,1, 29, 23} }, -{ {0,1,2,1,0,2,2,2, 37, 5} }, -{ {0,1,2,1,1,0,0,0, 27, 30} }, -{ {0,1,2,1,1,0,0,1, 38, 23} }, -{ {0,1,2,1,1,0,0,2, 50, 14} }, -{ {0,1,2,1,1,0,1,0, 45, 31} }, -{ {0,1,2,1,1,0,1,1, 35, 24} }, -{ {0,1,2,1,1,0,1,2, 49, 14} }, -{ {0,1,2,1,1,0,2,0, 47, 36} }, -{ {0,1,2,1,1,0,2,1, 40, 34} }, -{ {0,1,2,1,1,0,2,2, 31, 25} }, -{ {0,1,2,1,1,1,0,0, 23, 42} }, -{ {0,1,2,1,1,1,0,1, 6, 9} }, -{ {0,1,2,1,1,1,0,2, 36, 42} }, -{ {0,1,2,1,1,1,1,0, 21, 3} }, -{ {0,1,2,1,1,1,1,1, 3, 31} }, -{ {0,1,2,1,1,1,1,2, 35, 3} }, -{ {0,1,2,1,1,1,2,0, 24, 8} }, -{ {0,1,2,1,1,1,2,1, 8, 36} }, -{ {0,1,2,1,1,1,2,2, 28, 25} }, -{ {0,1,2,1,1,2,0,0, 53, 4} }, -{ {0,1,2,1,1,2,0,1, 30, 23} }, -{ {0,1,2,1,1,2,0,2, 48, 34} }, -{ {0,1,2,1,1,2,1,0, 52, 14} }, -{ {0,1,2,1,1,2,1,1, 21, 24} }, -{ {0,1,2,1,1,2,1,2, 45, 30} }, -{ {0,1,2,1,1,2,2,0, 53, 35} }, -{ {0,1,2,1,1,2,2,1, 27, 23} }, -{ {0,1,2,1,1,2,2,2, 23, 5} }, -{ {0,1,2,1,2,0,0,0, 40, 5} }, -{ {0,1,2,1,2,0,0,1, 39, 23} }, -{ {0,1,2,1,2,0,0,2, 51, 14} }, -{ {0,1,2,1,2,0,1,0, 48, 37} }, -{ {0,1,2,1,2,0,1,1, 36, 23} }, -{ {0,1,2,1,2,0,1,2, 50, 15} }, -{ {0,1,2,1,2,0,2,0, 29, 46} }, -{ {0,1,2,1,2,0,2,1, 42, 34} }, -{ {0,1,2,1,2,0,2,2, 18, 29} }, -{ {0,1,2,1,2,1,0,0, 31, 8} }, -{ {0,1,2,1,2,1,0,1, 12, 8} }, -{ {0,1,2,1,2,1,0,2, 39, 8} }, -{ {0,1,2,1,2,1,1,0, 30, 8} }, -{ {0,1,2,1,2,1,1,1, 6, 22} }, -{ {0,1,2,1,2,1,1,2, 38, 8} }, -{ {0,1,2,1,2,1,2,0, 32, 8} }, -{ {0,1,2,1,2,1,2,1, 10, 22} }, -{ {0,1,2,1,2,1,2,2, 17, 4} }, -{ {0,1,2,1,2,2,0,0, 47, 4} }, -{ {0,1,2,1,2,2,0,1, 31, 23} }, -{ {0,1,2,1,2,2,0,2, 40, 10} }, -{ {0,1,2,1,2,2,1,0, 53, 15} }, -{ {0,1,2,1,2,2,1,1, 23, 39} }, -{ {0,1,2,1,2,2,1,2, 27, 31} }, -{ {0,1,2,1,2,2,2,0, 24, 28} }, -{ {0,1,2,1,2,2,2,1, 28, 23} }, -{ {0,1,2,1,2,2,2,2, 8, 4} }, -{ {0,1,2,2,0,0,0,0, 8, 28} }, -{ {0,1,2,2,0,0,0,1, 18, 2} }, -{ {0,1,2,2,0,0,0,2, 17, 28} }, -{ {0,1,2,2,0,0,1,0, 24, 2} }, -{ {0,1,2,2,0,0,1,1, 29, 2} }, -{ {0,1,2,2,0,0,1,2, 32, 2} }, -{ {0,1,2,2,0,0,2,0, 28, 45} }, -{ {0,1,2,2,0,0,2,1, 42, 2} }, -{ {0,1,2,2,0,0,2,2, 10, 25} }, -{ {0,1,2,2,0,1,0,0, 37, 29} }, -{ {0,1,2,2,0,1,0,1, 43, 12} }, -{ {0,1,2,2,0,1,0,2, 41, 47} }, -{ {0,1,2,2,0,1,1,0, 47, 33} }, -{ {0,1,2,2,0,1,1,1, 37, 30} }, -{ {0,1,2,2,0,1,1,2, 29, 38} }, -{ {0,1,2,2,0,1,2,0, 29, 45} }, -{ {0,1,2,2,0,1,2,1, 41, 36} }, -{ {0,1,2,2,0,1,2,2, 11, 44} }, -{ {0,1,2,2,0,2,0,0, 23, 29} }, -{ {0,1,2,2,0,2,0,1, 31, 12} }, -{ {0,1,2,2,0,2,0,2, 28, 47} }, -{ {0,1,2,2,0,2,1,0, 53, 33} }, -{ {0,1,2,2,0,2,1,1, 47, 24} }, -{ {0,1,2,2,0,2,1,2, 24, 22} }, -{ {0,1,2,2,0,2,2,0, 27, 45} }, -{ {0,1,2,2,0,2,2,1, 40, 6} }, -{ {0,1,2,2,0,2,2,2, 8, 24} }, -{ {0,1,2,2,1,0,0,0, 40, 30} }, -{ {0,1,2,2,1,0,0,1, 51, 6} }, -{ {0,1,2,2,1,0,0,2, 39, 7} }, -{ {0,1,2,2,1,0,1,0, 47, 31} }, -{ {0,1,2,2,1,0,1,1, 40, 29} }, -{ {0,1,2,2,1,0,1,2, 31, 7} }, -{ {0,1,2,2,1,0,2,0, 31, 6} }, -{ {0,1,2,2,1,0,2,1, 39, 6} }, -{ {0,1,2,2,1,0,2,2, 12, 6} }, -{ {0,1,2,2,1,1,0,0, 29, 3} }, -{ {0,1,2,2,1,1,0,1, 18, 3} }, -{ {0,1,2,2,1,1,0,2, 42, 3} }, -{ {0,1,2,2,1,1,1,0, 24, 3} }, -{ {0,1,2,2,1,1,1,1, 8, 31} }, -{ {0,1,2,2,1,1,1,2, 28, 38} }, -{ {0,1,2,2,1,1,2,0, 32, 3} }, -{ {0,1,2,2,1,1,2,1, 17, 31} }, -{ {0,1,2,2,1,1,2,2, 10, 24} }, -{ {0,1,2,2,1,2,0,0, 48, 24} }, -{ {0,1,2,2,1,2,0,1, 50, 7} }, -{ {0,1,2,2,1,2,0,2, 36, 38} }, -{ {0,1,2,2,1,2,1,0, 53, 28} }, -{ {0,1,2,2,1,2,1,1, 27, 4} }, -{ {0,1,2,2,1,2,1,2, 23, 22} }, -{ {0,1,2,2,1,2,2,0, 30, 6} }, -{ {0,1,2,2,1,2,2,1, 38, 6} }, -{ {0,1,2,2,1,2,2,2, 6, 24} }, -{ {0,1,2,2,2,0,0,0, 27, 5} }, -{ {0,1,2,2,2,0,0,1, 50, 6} }, -{ {0,1,2,2,2,0,0,2, 38, 7} }, -{ {0,1,2,2,2,0,1,0, 53, 31} }, -{ {0,1,2,2,2,0,1,1, 48, 25} }, -{ {0,1,2,2,2,0,1,2, 30, 7} }, -{ {0,1,2,2,2,0,2,0, 23, 27} }, -{ {0,1,2,2,2,0,2,1, 36, 27} }, -{ {0,1,2,2,2,0,2,2, 6, 25} }, -{ {0,1,2,2,2,1,0,0, 47, 25} }, -{ {0,1,2,2,2,1,0,1, 31, 9} }, -{ {0,1,2,2,2,1,0,2, 40, 7} }, -{ {0,1,2,2,2,1,1,0, 53, 42} }, -{ {0,1,2,2,2,1,1,1, 23, 30} }, -{ {0,1,2,2,2,1,1,2, 27, 38} }, -{ {0,1,2,2,2,1,2,0, 24, 27} }, -{ {0,1,2,2,2,1,2,1, 28, 36} }, -{ {0,1,2,2,2,1,2,2, 8, 25} }, -{ {0,1,2,2,2,2,0,0, 45, 4} }, -{ {0,1,2,2,2,2,0,1, 49, 6} }, -{ {0,1,2,2,2,2,0,2, 35, 22} }, -{ {0,1,2,2,2,2,1,0, 52, 7} }, -{ {0,1,2,2,2,2,1,1, 45, 5} }, -{ {0,1,2,2,2,2,1,2, 21, 22} }, -{ {0,1,2,2,2,2,2,0, 21, 27} }, -{ {0,1,2,2,2,2,2,1, 35, 27} }, -{ {0,1,2,2,2,2,2,2, 3, 4} }, -{ {0,2,0,0,0,0,0,0, 1, 4} }, -{ {0,2,0,0,0,0,0,1, 7, 26} }, -{ {0,2,0,0,0,0,0,2, 4, 12} }, -{ {0,2,0,0,0,0,1,0, 33, 7} }, -{ {0,2,0,0,0,0,1,1, 34, 13} }, -{ {0,2,0,0,0,0,1,2, 35, 13} }, -{ {0,2,0,0,0,0,2,0, 19, 7} }, -{ {0,2,0,0,0,0,2,1, 21, 13} }, -{ {0,2,0,0,0,0,2,2, 20, 13} }, -{ {0,2,0,0,0,1,0,0, 3, 27} }, -{ {0,2,0,0,0,1,0,1, 8, 26} }, -{ {0,2,0,0,0,1,0,2, 6, 26} }, -{ {0,2,0,0,0,1,1,0, 35, 18} }, -{ {0,2,0,0,0,1,1,1, 28, 5} }, -{ {0,2,0,0,0,1,1,2, 36, 40} }, -{ {0,2,0,0,0,1,2,0, 21, 18} }, -{ {0,2,0,0,0,1,2,1, 24, 18} }, -{ {0,2,0,0,0,1,2,2, 23, 18} }, -{ {0,2,0,0,0,2,0,0, 2, 27} }, -{ {0,2,0,0,0,2,0,1, 8, 41} }, -{ {0,2,0,0,0,2,0,2, 5, 26} }, -{ {0,2,0,0,0,2,1,0, 34, 18} }, -{ {0,2,0,0,0,2,1,1, 37, 40} }, -{ {0,2,0,0,0,2,1,2, 28, 9} }, -{ {0,2,0,0,0,2,2,0, 20, 18} }, -{ {0,2,0,0,0,2,2,1, 23, 40} }, -{ {0,2,0,0,0,2,2,2, 22, 18} }, -{ {0,2,0,0,1,0,0,0, 7, 24} }, -{ {0,2,0,0,1,0,0,1, 16, 26} }, -{ {0,2,0,0,1,0,0,2, 16, 6} }, -{ {0,2,0,0,1,0,1,0, 34, 7} }, -{ {0,2,0,0,1,0,1,1, 26, 4} }, -{ {0,2,0,0,1,0,1,2, 40, 17} }, -{ {0,2,0,0,1,0,2,0, 21, 7} }, -{ {0,2,0,0,1,0,2,1, 30, 18} }, -{ {0,2,0,0,1,0,2,2, 27, 17} }, -{ {0,2,0,0,1,1,0,0, 8, 45} }, -{ {0,2,0,0,1,1,0,1, 17, 26} }, -{ {0,2,0,0,1,1,0,2, 18, 6} }, -{ {0,2,0,0,1,1,1,0, 28, 28} }, -{ {0,2,0,0,1,1,1,1, 10, 4} }, -{ {0,2,0,0,1,1,1,2, 42, 17} }, -{ {0,2,0,0,1,1,2,0, 24, 7} }, -{ {0,2,0,0,1,1,2,1, 32, 18} }, -{ {0,2,0,0,1,1,2,2, 29, 17} }, -{ {0,2,0,0,1,2,0,0, 8, 6} }, -{ {0,2,0,0,1,2,0,1, 18, 26} }, -{ {0,2,0,0,1,2,0,2, 17, 6} }, -{ {0,2,0,0,1,2,1,0, 37, 7} }, -{ {0,2,0,0,1,2,1,1, 43, 18} }, -{ {0,2,0,0,1,2,1,2, 41, 17} }, -{ {0,2,0,0,1,2,2,0, 23, 7} }, -{ {0,2,0,0,1,2,2,1, 31, 18} }, -{ {0,2,0,0,1,2,2,2, 28, 17} }, -{ {0,2,0,0,2,0,0,0, 4, 6} }, -{ {0,2,0,0,2,0,0,1, 16, 18} }, -{ {0,2,0,0,2,0,0,2, 13, 6} }, -{ {0,2,0,0,2,0,1,0, 35, 7} }, -{ {0,2,0,0,2,0,1,1, 40, 18} }, -{ {0,2,0,0,2,0,1,2, 38, 18} }, -{ {0,2,0,0,2,0,2,0, 20, 7} }, -{ {0,2,0,0,2,0,2,1, 27, 18} }, -{ {0,2,0,0,2,0,2,2, 25, 18} }, -{ {0,2,0,0,2,1,0,0, 6, 6} }, -{ {0,2,0,0,2,1,0,1, 18, 18} }, -{ {0,2,0,0,2,1,0,2, 15, 6} }, -{ {0,2,0,0,2,1,1,0, 36, 7} }, -{ {0,2,0,0,2,1,1,1, 42, 18} }, -{ {0,2,0,0,2,1,1,2, 39, 18} }, -{ {0,2,0,0,2,1,2,0, 23, 17} }, -{ {0,2,0,0,2,1,2,1, 29, 18} }, -{ {0,2,0,0,2,1,2,2, 26, 18} }, -{ {0,2,0,0,2,2,0,0, 5, 6} }, -{ {0,2,0,0,2,2,0,1, 17, 18} }, -{ {0,2,0,0,2,2,0,2, 14, 6} }, -{ {0,2,0,0,2,2,1,0, 28, 42} }, -{ {0,2,0,0,2,2,1,1, 41, 18} }, -{ {0,2,0,0,2,2,1,2, 17, 9} }, -{ {0,2,0,0,2,2,2,0, 22, 7} }, -{ {0,2,0,0,2,2,2,1, 28, 18} }, -{ {0,2,0,0,2,2,2,2, 5, 10} }, -{ {0,2,0,1,0,0,0,0, 3, 29} }, -{ {0,2,0,1,0,0,0,1, 8, 47} }, -{ {0,2,0,1,0,0,0,2, 6, 12} }, -{ {0,2,0,1,0,0,1,0, 35, 2} }, -{ {0,2,0,1,0,0,1,1, 28, 24} }, -{ {0,2,0,1,0,0,1,2, 36, 13} }, -{ {0,2,0,1,0,0,2,0, 21, 2} }, -{ {0,2,0,1,0,0,2,1, 24, 13} }, -{ {0,2,0,1,0,0,2,2, 23, 33} }, -{ {0,2,0,1,0,1,0,0, 6, 27} }, -{ {0,2,0,1,0,1,0,1, 10, 27} }, -{ {0,2,0,1,0,1,0,2, 12, 12} }, -{ {0,2,0,1,0,1,1,0, 38, 13} }, -{ {0,2,0,1,0,1,1,1, 17, 5} }, -{ {0,2,0,1,0,1,1,2, 39, 13} }, -{ {0,2,0,1,0,1,2,0, 30, 13} }, -{ {0,2,0,1,0,1,2,1, 32, 13} }, -{ {0,2,0,1,0,1,2,2, 31, 13} }, -{ {0,2,0,1,0,2,0,0, 8, 46} }, -{ {0,2,0,1,0,2,0,1, 11, 27} }, -{ {0,2,0,1,0,2,0,2, 10, 12} }, -{ {0,2,0,1,0,2,1,0, 40, 40} }, -{ {0,2,0,1,0,2,1,1, 41, 40} }, -{ {0,2,0,1,0,2,1,2, 42, 40} }, -{ {0,2,0,1,0,2,2,0, 27, 13} }, -{ {0,2,0,1,0,2,2,1, 29, 13} }, -{ {0,2,0,1,0,2,2,2, 28, 13} }, -{ {0,2,0,1,1,0,0,0, 21, 25} }, -{ {0,2,0,1,1,0,0,1, 27, 26} }, -{ {0,2,0,1,1,0,0,2, 30, 26} }, -{ {0,2,0,1,1,0,1,0, 45, 29} }, -{ {0,2,0,1,1,0,1,1, 23, 4} }, -{ {0,2,0,1,1,0,1,2, 48, 41} }, -{ {0,2,0,1,1,0,2,0, 52, 18} }, -{ {0,2,0,1,1,0,2,1, 53, 40} }, -{ {0,2,0,1,1,0,2,2, 53, 19} }, -{ {0,2,0,1,1,1,0,0, 23, 44} }, -{ {0,2,0,1,1,1,0,1, 28, 26} }, -{ {0,2,0,1,1,1,0,2, 31, 26} }, -{ {0,2,0,1,1,1,1,0, 27, 28} }, -{ {0,2,0,1,1,1,1,1, 8, 5} }, -{ {0,2,0,1,1,1,1,2, 40, 11} }, -{ {0,2,0,1,1,1,2,0, 53, 18} }, -{ {0,2,0,1,1,1,2,1, 24, 31} }, -{ {0,2,0,1,1,1,2,2, 47, 10} }, -{ {0,2,0,1,1,2,0,0, 24, 26} }, -{ {0,2,0,1,1,2,0,1, 29, 26} }, -{ {0,2,0,1,1,2,0,2, 32, 26} }, -{ {0,2,0,1,1,2,1,0, 47, 41} }, -{ {0,2,0,1,1,2,1,1, 37, 24} }, -{ {0,2,0,1,1,2,1,2, 29, 36} }, -{ {0,2,0,1,1,2,2,0, 53, 41} }, -{ {0,2,0,1,1,2,2,1, 47, 22} }, -{ {0,2,0,1,1,2,2,2, 24, 30} }, -{ {0,2,0,1,2,0,0,0, 35, 25} }, -{ {0,2,0,1,2,0,0,1, 40, 41} }, -{ {0,2,0,1,2,0,0,2, 38, 26} }, -{ {0,2,0,1,2,0,1,0, 49, 18} }, -{ {0,2,0,1,2,0,1,1, 31, 24} }, -{ {0,2,0,1,2,0,1,2, 50, 19} }, -{ {0,2,0,1,2,0,2,0, 45, 28} }, -{ {0,2,0,1,2,0,2,1, 47, 40} }, -{ {0,2,0,1,2,0,2,2, 27, 29} }, -{ {0,2,0,1,2,1,0,0, 36, 44} }, -{ {0,2,0,1,2,1,0,1, 42, 41} }, -{ {0,2,0,1,2,1,0,2, 39, 26} }, -{ {0,2,0,1,2,1,1,0, 50, 18} }, -{ {0,2,0,1,2,1,1,1, 18, 30} }, -{ {0,2,0,1,2,1,1,2, 51, 18} }, -{ {0,2,0,1,2,1,2,0, 48, 40} }, -{ {0,2,0,1,2,1,2,1, 29, 37} }, -{ {0,2,0,1,2,1,2,2, 40, 4} }, -{ {0,2,0,1,2,2,0,0, 28, 3} }, -{ {0,2,0,1,2,2,0,1, 41, 41} }, -{ {0,2,0,1,2,2,0,2, 17, 3} }, -{ {0,2,0,1,2,2,1,0, 31, 3} }, -{ {0,2,0,1,2,2,1,1, 43, 24} }, -{ {0,2,0,1,2,2,1,2, 18, 31} }, -{ {0,2,0,1,2,2,2,0, 23, 11} }, -{ {0,2,0,1,2,2,2,1, 37, 3} }, -{ {0,2,0,1,2,2,2,2, 8, 10} }, -{ {0,2,0,2,0,0,0,0, 2, 28} }, -{ {0,2,0,2,0,0,0,1, 8, 12} }, -{ {0,2,0,2,0,0,0,2, 5, 12} }, -{ {0,2,0,2,0,0,1,0, 34, 2} }, -{ {0,2,0,2,0,0,1,1, 37, 13} }, -{ {0,2,0,2,0,0,1,2, 28, 34} }, -{ {0,2,0,2,0,0,2,0, 20, 2} }, -{ {0,2,0,2,0,0,2,1, 23, 13} }, -{ {0,2,0,2,0,0,2,2, 22, 13} }, -{ {0,2,0,2,0,1,0,0, 8, 27} }, -{ {0,2,0,2,0,1,0,1, 11, 46} }, -{ {0,2,0,2,0,1,0,2, 10, 26} }, -{ {0,2,0,2,0,1,1,0, 40, 13} }, -{ {0,2,0,2,0,1,1,1, 41, 13} }, -{ {0,2,0,2,0,1,1,2, 42, 13} }, -{ {0,2,0,2,0,1,2,0, 27, 40} }, -{ {0,2,0,2,0,1,2,1, 29, 40} }, -{ {0,2,0,2,0,1,2,2, 28, 40} }, -{ {0,2,0,2,0,2,0,0, 5, 27} }, -{ {0,2,0,2,0,2,0,1, 10, 13} }, -{ {0,2,0,2,0,2,0,2, 9, 12} }, -{ {0,2,0,2,0,2,1,0, 26, 8} }, -{ {0,2,0,2,0,2,1,1, 43, 13} }, -{ {0,2,0,2,0,2,1,2, 10, 8} }, -{ {0,2,0,2,0,2,2,0, 25, 13} }, -{ {0,2,0,2,0,2,2,1, 26, 13} }, -{ {0,2,0,2,0,2,2,2, 5, 22} }, -{ {0,2,0,2,1,0,0,0, 34, 25} }, -{ {0,2,0,2,1,0,0,1, 40, 26} }, -{ {0,2,0,2,1,0,0,2, 26, 23} }, -{ {0,2,0,2,1,0,1,0, 46, 28} }, -{ {0,2,0,2,1,0,1,1, 29, 29} }, -{ {0,2,0,2,1,0,1,2, 29, 34} }, -{ {0,2,0,2,1,0,2,0, 45, 15} }, -{ {0,2,0,2,1,0,2,1, 48, 18} }, -{ {0,2,0,2,1,0,2,2, 23, 23} }, -{ {0,2,0,2,1,1,0,0, 37, 26} }, -{ {0,2,0,2,1,1,0,1, 41, 26} }, -{ {0,2,0,2,1,1,0,2, 43, 26} }, -{ {0,2,0,2,1,1,1,0, 29, 28} }, -{ {0,2,0,2,1,1,1,1, 11, 28} }, -{ {0,2,0,2,1,1,1,2, 41, 11} }, -{ {0,2,0,2,1,1,2,0, 47, 18} }, -{ {0,2,0,2,1,1,2,1, 29, 31} }, -{ {0,2,0,2,1,1,2,2, 37, 39} }, -{ {0,2,0,2,1,2,0,0, 28, 35} }, -{ {0,2,0,2,1,2,0,1, 42, 26} }, -{ {0,2,0,2,1,2,0,2, 10, 23} }, -{ {0,2,0,2,1,2,1,0, 29, 35} }, -{ {0,2,0,2,1,2,1,1, 41, 4} }, -{ {0,2,0,2,1,2,1,2, 11, 35} }, -{ {0,2,0,2,1,2,2,0, 27, 35} }, -{ {0,2,0,2,1,2,2,1, 40, 8} }, -{ {0,2,0,2,1,2,2,2, 8, 22} }, -{ {0,2,0,2,2,0,0,0, 20, 25} }, -{ {0,2,0,2,2,0,0,1, 27, 41} }, -{ {0,2,0,2,2,0,0,2, 25, 26} }, -{ {0,2,0,2,2,0,1,0, 45, 14} }, -{ {0,2,0,2,2,0,1,1, 47, 19} }, -{ {0,2,0,2,2,0,1,2, 27, 34} }, -{ {0,2,0,2,2,0,2,0, 44, 18} }, -{ {0,2,0,2,2,0,2,1, 45, 19} }, -{ {0,2,0,2,2,0,2,2, 20, 24} }, -{ {0,2,0,2,2,1,0,0, 23, 26} }, -{ {0,2,0,2,2,1,0,1, 29, 41} }, -{ {0,2,0,2,2,1,0,2, 26, 26} }, -{ {0,2,0,2,2,1,1,0, 48, 19} }, -{ {0,2,0,2,2,1,1,1, 29, 30} }, -{ {0,2,0,2,2,1,1,2, 40, 23} }, -{ {0,2,0,2,2,1,2,0, 45, 18} }, -{ {0,2,0,2,2,1,2,1, 46, 18} }, -{ {0,2,0,2,2,1,2,2, 34, 24} }, -{ {0,2,0,2,2,2,0,0, 22, 26} }, -{ {0,2,0,2,2,2,0,1, 28, 41} }, -{ {0,2,0,2,2,2,0,2, 5, 9} }, -{ {0,2,0,2,2,2,1,0, 23, 8} }, -{ {0,2,0,2,2,2,1,1, 37, 42} }, -{ {0,2,0,2,2,2,1,2, 8, 9} }, -{ {0,2,0,2,2,2,2,0, 20, 3} }, -{ {0,2,0,2,2,2,2,1, 34, 3} }, -{ {0,2,0,2,2,2,2,2, 2, 31} }, -{ {0,2,1,0,0,0,0,0, 7, 5} }, -{ {0,2,1,0,0,0,0,1, 16, 28} }, -{ {0,2,1,0,0,0,0,2, 16, 2} }, -{ {0,2,1,0,0,0,1,0, 34, 10} }, -{ {0,2,1,0,0,0,1,1, 26, 25} }, -{ {0,2,1,0,0,0,1,2, 40, 2} }, -{ {0,2,1,0,0,0,2,0, 21, 10} }, -{ {0,2,1,0,0,0,2,1, 30, 2} }, -{ {0,2,1,0,0,0,2,2, 27, 2} }, -{ {0,2,1,0,0,1,0,0, 21, 4} }, -{ {0,2,1,0,0,1,0,1, 27, 47} }, -{ {0,2,1,0,0,1,0,2, 30, 12} }, -{ {0,2,1,0,0,1,1,0, 45, 27} }, -{ {0,2,1,0,0,1,1,1, 23, 25} }, -{ {0,2,1,0,0,1,1,2, 48, 12} }, -{ {0,2,1,0,0,1,2,0, 52, 13} }, -{ {0,2,1,0,0,1,2,1, 53, 13} }, -{ {0,2,1,0,0,1,2,2, 53, 32} }, -{ {0,2,1,0,0,2,0,0, 34, 4} }, -{ {0,2,1,0,0,2,0,1, 40, 47} }, -{ {0,2,1,0,0,2,0,2, 26, 9} }, -{ {0,2,1,0,0,2,1,0, 46, 27} }, -{ {0,2,1,0,0,2,1,1, 29, 44} }, -{ {0,2,1,0,0,2,1,2, 29, 9} }, -{ {0,2,1,0,0,2,2,0, 45, 9} }, -{ {0,2,1,0,0,2,2,1, 48, 33} }, -{ {0,2,1,0,0,2,2,2, 23, 36} }, -{ {0,2,1,0,1,0,0,0, 16, 5} }, -{ {0,2,1,0,1,0,0,1, 55, 4} }, -{ {0,2,1,0,1,0,0,2, 56, 12} }, -{ {0,2,1,0,1,0,1,0, 26, 27} }, -{ {0,2,1,0,1,0,1,1, 15, 4} }, -{ {0,2,1,0,1,0,1,2, 39, 27} }, -{ {0,2,1,0,1,0,2,0, 30, 22} }, -{ {0,2,1,0,1,0,2,1, 57, 1} }, -{ {0,2,1,0,1,0,2,2, 50, 5} }, -{ {0,2,1,0,1,1,0,0, 27, 24} }, -{ {0,2,1,0,1,1,0,1, 38, 10} }, -{ {0,2,1,0,1,1,0,2, 50, 2} }, -{ {0,2,1,0,1,1,1,0, 23, 46} }, -{ {0,2,1,0,1,1,1,1, 6, 4} }, -{ {0,2,1,0,1,1,1,2, 36, 46} }, -{ {0,2,1,0,1,1,2,0, 53, 38} }, -{ {0,2,1,0,1,1,2,1, 30, 10} }, -{ {0,2,1,0,1,1,2,2, 48, 10} }, -{ {0,2,1,0,1,2,0,0, 40, 24} }, -{ {0,2,1,0,1,2,0,1, 51, 8} }, -{ {0,2,1,0,1,2,0,2, 39, 9} }, -{ {0,2,1,0,1,2,1,0, 29, 27} }, -{ {0,2,1,0,1,2,1,1, 18, 27} }, -{ {0,2,1,0,1,2,1,2, 42, 27} }, -{ {0,2,1,0,1,2,2,0, 48, 22} }, -{ {0,2,1,0,1,2,2,1, 50, 9} }, -{ {0,2,1,0,1,2,2,2, 36, 36} }, -{ {0,2,1,0,2,0,0,0, 16, 30} }, -{ {0,2,1,0,2,0,0,1, 56, 6} }, -{ {0,2,1,0,2,0,0,2, 55, 3} }, -{ {0,2,1,0,2,0,1,0, 40, 37} }, -{ {0,2,1,0,2,0,1,1, 39, 25} }, -{ {0,2,1,0,2,0,1,2, 51, 26} }, -{ {0,2,1,0,2,0,2,0, 27, 37} }, -{ {0,2,1,0,2,0,2,1, 50, 28} }, -{ {0,2,1,0,2,0,2,2, 38, 4} }, -{ {0,2,1,0,2,1,0,0, 30, 24} }, -{ {0,2,1,0,2,1,0,1, 50, 30} }, -{ {0,2,1,0,2,1,0,2, 57, 6} }, -{ {0,2,1,0,2,1,1,0, 48, 39} }, -{ {0,2,1,0,2,1,1,1, 36, 25} }, -{ {0,2,1,0,2,1,1,2, 50, 27} }, -{ {0,2,1,0,2,1,2,0, 53, 23} }, -{ {0,2,1,0,2,1,2,1, 48, 31} }, -{ {0,2,1,0,2,1,2,2, 30, 4} }, -{ {0,2,1,0,2,2,0,0, 26, 3} }, -{ {0,2,1,0,2,2,0,1, 39, 3} }, -{ {0,2,1,0,2,2,0,2, 15, 3} }, -{ {0,2,1,0,2,2,1,0, 29, 42} }, -{ {0,2,1,0,2,2,1,1, 42, 44} }, -{ {0,2,1,0,2,2,1,2, 18, 9} }, -{ {0,2,1,0,2,2,2,0, 23, 3} }, -{ {0,2,1,0,2,2,2,1, 36, 3} }, -{ {0,2,1,0,2,2,2,2, 6, 10} }, -{ {0,2,1,1,0,0,0,0, 8, 28} }, -{ {0,2,1,1,0,0,0,1, 17, 28} }, -{ {0,2,1,1,0,0,0,2, 18, 2} }, -{ {0,2,1,1,0,0,1,0, 28, 45} }, -{ {0,2,1,1,0,0,1,1, 10, 25} }, -{ {0,2,1,1,0,0,1,2, 42, 2} }, -{ {0,2,1,1,0,0,2,0, 24, 2} }, -{ {0,2,1,1,0,0,2,1, 32, 2} }, -{ {0,2,1,1,0,0,2,2, 29, 2} }, -{ {0,2,1,1,0,1,0,0, 23, 29} }, -{ {0,2,1,1,0,1,0,1, 28, 47} }, -{ {0,2,1,1,0,1,0,2, 31, 12} }, -{ {0,2,1,1,0,1,1,0, 27, 45} }, -{ {0,2,1,1,0,1,1,1, 8, 24} }, -{ {0,2,1,1,0,1,1,2, 40, 6} }, -{ {0,2,1,1,0,1,2,0, 53, 33} }, -{ {0,2,1,1,0,1,2,1, 24, 22} }, -{ {0,2,1,1,0,1,2,2, 47, 7} }, -{ {0,2,1,1,0,2,0,0, 37, 47} }, -{ {0,2,1,1,0,2,0,1, 41, 47} }, -{ {0,2,1,1,0,2,0,2, 43, 12} }, -{ {0,2,1,1,0,2,1,0, 29, 45} }, -{ {0,2,1,1,0,2,1,1, 11, 44} }, -{ {0,2,1,1,0,2,1,2, 41, 6} }, -{ {0,2,1,1,0,2,2,0, 47, 33} }, -{ {0,2,1,1,0,2,2,1, 29, 38} }, -{ {0,2,1,1,0,2,2,2, 37, 30} }, -{ {0,2,1,1,1,0,0,0, 27, 5} }, -{ {0,2,1,1,1,0,0,1, 38, 7} }, -{ {0,2,1,1,1,0,0,2, 50, 6} }, -{ {0,2,1,1,1,0,1,0, 23, 27} }, -{ {0,2,1,1,1,0,1,1, 6, 25} }, -{ {0,2,1,1,1,0,1,2, 36, 27} }, -{ {0,2,1,1,1,0,2,0, 53, 31} }, -{ {0,2,1,1,1,0,2,1, 30, 7} }, -{ {0,2,1,1,1,0,2,2, 48, 7} }, -{ {0,2,1,1,1,1,0,0, 45, 4} }, -{ {0,2,1,1,1,1,0,1, 35, 22} }, -{ {0,2,1,1,1,1,0,2, 49, 6} }, -{ {0,2,1,1,1,1,1,0, 21, 27} }, -{ {0,2,1,1,1,1,1,1, 3, 4} }, -{ {0,2,1,1,1,1,1,2, 35, 27} }, -{ {0,2,1,1,1,1,2,0, 52, 7} }, -{ {0,2,1,1,1,1,2,1, 21, 22} }, -{ {0,2,1,1,1,1,2,2, 45, 5} }, -{ {0,2,1,1,1,2,0,0, 47, 25} }, -{ {0,2,1,1,1,2,0,1, 40, 7} }, -{ {0,2,1,1,1,2,0,2, 31, 9} }, -{ {0,2,1,1,1,2,1,0, 24, 27} }, -{ {0,2,1,1,1,2,1,1, 8, 25} }, -{ {0,2,1,1,1,2,1,2, 28, 36} }, -{ {0,2,1,1,1,2,2,0, 53, 6} }, -{ {0,2,1,1,1,2,2,1, 27, 38} }, -{ {0,2,1,1,1,2,2,2, 23, 30} }, -{ {0,2,1,1,2,0,0,0, 40, 30} }, -{ {0,2,1,1,2,0,0,1, 39, 7} }, -{ {0,2,1,1,2,0,0,2, 51, 6} }, -{ {0,2,1,1,2,0,1,0, 31, 6} }, -{ {0,2,1,1,2,0,1,1, 12, 6} }, -{ {0,2,1,1,2,0,1,2, 39, 6} }, -{ {0,2,1,1,2,0,2,0, 47, 31} }, -{ {0,2,1,1,2,0,2,1, 31, 7} }, -{ {0,2,1,1,2,0,2,2, 40, 29} }, -{ {0,2,1,1,2,1,0,0, 48, 24} }, -{ {0,2,1,1,2,1,0,1, 36, 38} }, -{ {0,2,1,1,2,1,0,2, 50, 7} }, -{ {0,2,1,1,2,1,1,0, 30, 6} }, -{ {0,2,1,1,2,1,1,1, 6, 24} }, -{ {0,2,1,1,2,1,1,2, 38, 6} }, -{ {0,2,1,1,2,1,2,0, 53, 16} }, -{ {0,2,1,1,2,1,2,1, 23, 22} }, -{ {0,2,1,1,2,1,2,2, 27, 4} }, -{ {0,2,1,1,2,2,0,0, 29, 3} }, -{ {0,2,1,1,2,2,0,1, 42, 7} }, -{ {0,2,1,1,2,2,0,2, 18, 3} }, -{ {0,2,1,1,2,2,1,0, 32, 6} }, -{ {0,2,1,1,2,2,1,1, 10, 24} }, -{ {0,2,1,1,2,2,1,2, 17, 31} }, -{ {0,2,1,1,2,2,2,0, 24, 3} }, -{ {0,2,1,1,2,2,2,1, 28, 38} }, -{ {0,2,1,1,2,2,2,2, 8, 31} }, -{ {0,2,1,2,0,0,0,0, 8, 11} }, -{ {0,2,1,2,0,0,0,1, 18, 28} }, -{ {0,2,1,2,0,0,0,2, 17, 2} }, -{ {0,2,1,2,0,0,1,0, 37, 10} }, -{ {0,2,1,2,0,0,1,1, 43, 2} }, -{ {0,2,1,2,0,0,1,2, 41, 2} }, -{ {0,2,1,2,0,0,2,0, 23, 10} }, -{ {0,2,1,2,0,0,2,1, 31, 2} }, -{ {0,2,1,2,0,0,2,2, 28, 2} }, -{ {0,2,1,2,0,1,0,0, 24, 29} }, -{ {0,2,1,2,0,1,0,1, 29, 47} }, -{ {0,2,1,2,0,1,0,2, 32, 12} }, -{ {0,2,1,2,0,1,1,0, 47, 12} }, -{ {0,2,1,2,0,1,1,1, 37, 5} }, -{ {0,2,1,2,0,1,1,2, 29, 23} }, -{ {0,2,1,2,0,1,2,0, 53, 12} }, -{ {0,2,1,2,0,1,2,1, 47, 37} }, -{ {0,2,1,2,0,1,2,2, 24, 23} }, -{ {0,2,1,2,0,2,0,0, 28, 8} }, -{ {0,2,1,2,0,2,0,1, 42, 47} }, -{ {0,2,1,2,0,2,0,2, 10, 9} }, -{ {0,2,1,2,0,2,1,0, 29, 8} }, -{ {0,2,1,2,0,2,1,1, 41, 25} }, -{ {0,2,1,2,0,2,1,2, 11, 9} }, -{ {0,2,1,2,0,2,2,0, 27, 8} }, -{ {0,2,1,2,0,2,2,1, 40, 35} }, -{ {0,2,1,2,0,2,2,2, 8, 37} }, -{ {0,2,1,2,1,0,0,0, 40, 5} }, -{ {0,2,1,2,1,0,0,1, 51, 14} }, -{ {0,2,1,2,1,0,0,2, 39, 23} }, -{ {0,2,1,2,1,0,1,0, 29, 46} }, -{ {0,2,1,2,1,0,1,1, 18, 29} }, -{ {0,2,1,2,1,0,1,2, 42, 46} }, -{ {0,2,1,2,1,0,2,0, 48, 37} }, -{ {0,2,1,2,1,0,2,1, 50, 15} }, -{ {0,2,1,2,1,0,2,2, 36, 23} }, -{ {0,2,1,2,1,1,0,0, 47, 4} }, -{ {0,2,1,2,1,1,0,1, 40, 10} }, -{ {0,2,1,2,1,1,0,2, 31, 23} }, -{ {0,2,1,2,1,1,1,0, 24, 28} }, -{ {0,2,1,2,1,1,1,1, 8, 4} }, -{ {0,2,1,2,1,1,1,2, 28, 23} }, -{ {0,2,1,2,1,1,2,0, 53, 11} }, -{ {0,2,1,2,1,1,2,1, 27, 31} }, -{ {0,2,1,2,1,1,2,2, 23, 39} }, -{ {0,2,1,2,1,2,0,0, 31, 8} }, -{ {0,2,1,2,1,2,0,1, 39, 8} }, -{ {0,2,1,2,1,2,0,2, 12, 8} }, -{ {0,2,1,2,1,2,1,0, 32, 27} }, -{ {0,2,1,2,1,2,1,1, 17, 4} }, -{ {0,2,1,2,1,2,1,2, 10, 22} }, -{ {0,2,1,2,1,2,2,0, 30, 8} }, -{ {0,2,1,2,1,2,2,1, 38, 8} }, -{ {0,2,1,2,1,2,2,2, 6, 22} }, -{ {0,2,1,2,2,0,0,0, 27, 30} }, -{ {0,2,1,2,2,0,0,1, 50, 14} }, -{ {0,2,1,2,2,0,0,2, 38, 23} }, -{ {0,2,1,2,2,0,1,0, 47, 36} }, -{ {0,2,1,2,2,0,1,1, 31, 25} }, -{ {0,2,1,2,2,0,1,2, 40, 34} }, -{ {0,2,1,2,2,0,2,0, 45, 31} }, -{ {0,2,1,2,2,0,2,1, 49, 14} }, -{ {0,2,1,2,2,0,2,2, 35, 24} }, -{ {0,2,1,2,2,1,0,0, 53, 4} }, -{ {0,2,1,2,2,1,0,1, 48, 36} }, -{ {0,2,1,2,2,1,0,2, 30, 23} }, -{ {0,2,1,2,2,1,1,0, 53, 27} }, -{ {0,2,1,2,2,1,1,1, 23, 5} }, -{ {0,2,1,2,2,1,1,2, 27, 23} }, -{ {0,2,1,2,2,1,2,0, 52, 14} }, -{ {0,2,1,2,2,1,2,1, 45, 30} }, -{ {0,2,1,2,2,1,2,2, 21, 24} }, -{ {0,2,1,2,2,2,0,0, 23, 42} }, -{ {0,2,1,2,2,2,0,1, 36, 42} }, -{ {0,2,1,2,2,2,0,2, 6, 9} }, -{ {0,2,1,2,2,2,1,0, 24, 8} }, -{ {0,2,1,2,2,2,1,1, 28, 25} }, -{ {0,2,1,2,2,2,1,2, 8, 36} }, -{ {0,2,1,2,2,2,2,0, 21, 3} }, -{ {0,2,1,2,2,2,2,1, 35, 3} }, -{ {0,2,1,2,2,2,2,2, 3, 31} }, -{ {0,2,2,0,0,0,0,0, 4, 5} }, -{ {0,2,2,0,0,0,0,1, 16, 12} }, -{ {0,2,2,0,0,0,0,2, 13, 2} }, -{ {0,2,2,0,0,0,1,0, 35, 10} }, -{ {0,2,2,0,0,0,1,1, 40, 33} }, -{ {0,2,2,0,0,0,1,2, 38, 2} }, -{ {0,2,2,0,0,0,2,0, 20, 10} }, -{ {0,2,2,0,0,0,2,1, 27, 33} }, -{ {0,2,2,0,0,0,2,2, 25, 2} }, -{ {0,2,2,0,0,1,0,0, 35, 4} }, -{ {0,2,2,0,0,1,0,1, 40, 12} }, -{ {0,2,2,0,0,1,0,2, 38, 12} }, -{ {0,2,2,0,0,1,1,0, 49, 12} }, -{ {0,2,2,0,0,1,1,1, 31, 5} }, -{ {0,2,2,0,0,1,1,2, 50, 13} }, -{ {0,2,2,0,0,1,2,0, 45, 26} }, -{ {0,2,2,0,0,1,2,1, 47, 13} }, -{ {0,2,2,0,0,1,2,2, 27, 44} }, -{ {0,2,2,0,0,2,0,0, 20, 4} }, -{ {0,2,2,0,0,2,0,1, 27, 12} }, -{ {0,2,2,0,0,2,0,2, 25, 12} }, -{ {0,2,2,0,0,2,1,0, 45, 8} }, -{ {0,2,2,0,0,2,1,1, 47, 32} }, -{ {0,2,2,0,0,2,1,2, 27, 9} }, -{ {0,2,2,0,0,2,2,0, 44, 12} }, -{ {0,2,2,0,0,2,2,1, 45, 13} }, -{ {0,2,2,0,0,2,2,2, 20, 5} }, -{ {0,2,2,0,1,0,0,0, 16, 22} }, -{ {0,2,2,0,1,0,0,1, 56, 5} }, -{ {0,2,2,0,1,0,0,2, 55, 7} }, -{ {0,2,2,0,1,0,1,0, 40, 22} }, -{ {0,2,2,0,1,0,1,1, 39, 4} }, -{ {0,2,2,0,1,0,1,2, 51, 28} }, -{ {0,2,2,0,1,0,2,0, 27, 22} }, -{ {0,2,2,0,1,0,2,1, 50, 26} }, -{ {0,2,2,0,1,0,2,2, 38, 25} }, -{ {0,2,2,0,1,1,0,0, 40, 39} }, -{ {0,2,2,0,1,1,0,1, 39, 10} }, -{ {0,2,2,0,1,1,0,2, 51, 2} }, -{ {0,2,2,0,1,1,1,0, 31, 11} }, -{ {0,2,2,0,1,1,1,1, 12, 5} }, -{ {0,2,2,0,1,1,1,2, 39, 11} }, -{ {0,2,2,0,1,1,2,0, 47, 38} }, -{ {0,2,2,0,1,1,2,1, 31, 10} }, -{ {0,2,2,0,1,1,2,2, 40, 44} }, -{ {0,2,2,0,1,2,0,0, 27, 39} }, -{ {0,2,2,0,1,2,0,1, 50, 8} }, -{ {0,2,2,0,1,2,0,2, 38, 9} }, -{ {0,2,2,0,1,2,1,0, 47, 23} }, -{ {0,2,2,0,1,2,1,1, 31, 4} }, -{ {0,2,2,0,1,2,1,2, 40, 9} }, -{ {0,2,2,0,1,2,2,0, 45, 23} }, -{ {0,2,2,0,1,2,2,1, 49, 8} }, -{ {0,2,2,0,1,2,2,2, 35, 5} }, -{ {0,2,2,0,2,0,0,0, 13, 5} }, -{ {0,2,2,0,2,0,0,1, 55, 0} }, -{ {0,2,2,0,2,0,0,2, 54, 0} }, -{ {0,2,2,0,2,0,1,0, 38, 22} }, -{ {0,2,2,0,2,0,1,1, 51, 5} }, -{ {0,2,2,0,2,0,1,2, 55, 1} }, -{ {0,2,2,0,2,0,2,0, 25, 22} }, -{ {0,2,2,0,2,0,2,1, 38, 27} }, -{ {0,2,2,0,2,0,2,2, 13, 4} }, -{ {0,2,2,0,2,1,0,0, 38, 24} }, -{ {0,2,2,0,2,1,0,1, 51, 30} }, -{ {0,2,2,0,2,1,0,2, 55, 6} }, -{ {0,2,2,0,2,1,1,0, 50, 23} }, -{ {0,2,2,0,2,1,1,1, 39, 5} }, -{ {0,2,2,0,2,1,1,2, 56, 0} }, -{ {0,2,2,0,2,1,2,0, 27, 27} }, -{ {0,2,2,0,2,1,2,1, 40, 27} }, -{ {0,2,2,0,2,1,2,2, 16, 27} }, -{ {0,2,2,0,2,2,0,0, 25, 24} }, -{ {0,2,2,0,2,2,0,1, 38, 3} }, -{ {0,2,2,0,2,2,0,2, 13, 3} }, -{ {0,2,2,0,2,2,1,0, 27, 42} }, -{ {0,2,2,0,2,2,1,1, 40, 42} }, -{ {0,2,2,0,2,2,1,2, 16, 9} }, -{ {0,2,2,0,2,2,2,0, 20, 11} }, -{ {0,2,2,0,2,2,2,1, 35, 11} }, -{ {0,2,2,0,2,2,2,2, 4, 4} }, -{ {0,2,2,1,0,0,0,0, 6, 11} }, -{ {0,2,2,1,0,0,0,1, 18, 12} }, -{ {0,2,2,1,0,0,0,2, 15, 2} }, -{ {0,2,2,1,0,0,1,0, 36, 10} }, -{ {0,2,2,1,0,0,1,1, 42, 33} }, -{ {0,2,2,1,0,0,1,2, 39, 2} }, -{ {0,2,2,1,0,0,2,0, 23, 2} }, -{ {0,2,2,1,0,0,2,1, 29, 33} }, -{ {0,2,2,1,0,0,2,2, 26, 2} }, -{ {0,2,2,1,0,1,0,0, 36, 29} }, -{ {0,2,2,1,0,1,0,1, 42, 12} }, -{ {0,2,2,1,0,1,0,2, 39, 12} }, -{ {0,2,2,1,0,1,1,0, 50, 12} }, -{ {0,2,2,1,0,1,1,1, 18, 22} }, -{ {0,2,2,1,0,1,1,2, 51, 12} }, -{ {0,2,2,1,0,1,2,0, 48, 13} }, -{ {0,2,2,1,0,1,2,1, 29, 22} }, -{ {0,2,2,1,0,1,2,2, 40, 25} }, -{ {0,2,2,1,0,2,0,0, 23, 47} }, -{ {0,2,2,1,0,2,0,1, 29, 12} }, -{ {0,2,2,1,0,2,0,2, 26, 12} }, -{ {0,2,2,1,0,2,1,0, 48, 32} }, -{ {0,2,2,1,0,2,1,1, 29, 39} }, -{ {0,2,2,1,0,2,1,2, 40, 36} }, -{ {0,2,2,1,0,2,2,0, 45, 12} }, -{ {0,2,2,1,0,2,2,1, 46, 12} }, -{ {0,2,2,1,0,2,2,2, 34, 5} }, -{ {0,2,2,1,1,0,0,0, 30, 5} }, -{ {0,2,2,1,1,0,0,1, 50, 22} }, -{ {0,2,2,1,1,0,0,2, 57, 2} }, -{ {0,2,2,1,1,0,1,0, 48, 30} }, -{ {0,2,2,1,1,0,1,1, 36, 4} }, -{ {0,2,2,1,1,0,1,2, 50, 29} }, -{ {0,2,2,1,1,0,2,0, 53, 36} }, -{ {0,2,2,1,1,0,2,1, 48, 38} }, -{ {0,2,2,1,1,0,2,2, 30, 25} }, -{ {0,2,2,1,1,1,0,0, 48, 5} }, -{ {0,2,2,1,1,1,0,1, 36, 31} }, -{ {0,2,2,1,1,1,0,2, 50, 3} }, -{ {0,2,2,1,1,1,1,0, 30, 11} }, -{ {0,2,2,1,1,1,1,1, 6, 5} }, -{ {0,2,2,1,1,1,1,2, 38, 11} }, -{ {0,2,2,1,1,1,2,0, 53, 3} }, -{ {0,2,2,1,1,1,2,1, 23, 37} }, -{ {0,2,2,1,1,1,2,2, 27, 25} }, -{ {0,2,2,1,1,2,0,0, 53, 25} }, -{ {0,2,2,1,1,2,0,1, 48, 23} }, -{ {0,2,2,1,1,2,0,2, 30, 9} }, -{ {0,2,2,1,1,2,1,0, 53, 46} }, -{ {0,2,2,1,1,2,1,1, 23, 24} }, -{ {0,2,2,1,1,2,1,2, 27, 36} }, -{ {0,2,2,1,1,2,2,0, 52, 9} }, -{ {0,2,2,1,1,2,2,1, 45, 22} }, -{ {0,2,2,1,1,2,2,2, 21, 5} }, -{ {0,2,2,1,2,0,0,0, 38, 5} }, -{ {0,2,2,1,2,0,0,1, 51, 22} }, -{ {0,2,2,1,2,0,0,2, 55, 2} }, -{ {0,2,2,1,2,0,1,0, 50, 31} }, -{ {0,2,2,1,2,0,1,1, 39, 24} }, -{ {0,2,2,1,2,0,1,2, 56, 3} }, -{ {0,2,2,1,2,0,2,0, 27, 46} }, -{ {0,2,2,1,2,0,2,1, 40, 46} }, -{ {0,2,2,1,2,0,2,2, 16, 29} }, -{ {0,2,2,1,2,1,0,0, 50, 4} }, -{ {0,2,2,1,2,1,0,1, 39, 22} }, -{ {0,2,2,1,2,1,0,2, 56, 13} }, -{ {0,2,2,1,2,1,1,0, 57, 5} }, -{ {0,2,2,1,2,1,1,1, 15, 5} }, -{ {0,2,2,1,2,1,1,2, 55, 5} }, -{ {0,2,2,1,2,1,2,0, 30, 27} }, -{ {0,2,2,1,2,1,2,1, 26, 22} }, -{ {0,2,2,1,2,1,2,2, 16, 4} }, -{ {0,2,2,1,2,2,0,0, 27, 3} }, -{ {0,2,2,1,2,2,0,1, 40, 3} }, -{ {0,2,2,1,2,2,0,2, 16, 3} }, -{ {0,2,2,1,2,2,1,0, 30, 3} }, -{ {0,2,2,1,2,2,1,1, 26, 24} }, -{ {0,2,2,1,2,2,1,2, 16, 31} }, -{ {0,2,2,1,2,2,2,0, 21, 11} }, -{ {0,2,2,1,2,2,2,1, 34, 11} }, -{ {0,2,2,1,2,2,2,2, 7, 10} }, -{ {0,2,2,2,0,0,0,0, 5, 11} }, -{ {0,2,2,2,0,0,0,1, 17, 12} }, -{ {0,2,2,2,0,0,0,2, 14, 2} }, -{ {0,2,2,2,0,0,1,0, 28, 15} }, -{ {0,2,2,2,0,0,1,1, 41, 33} }, -{ {0,2,2,2,0,0,1,2, 17, 15} }, -{ {0,2,2,2,0,0,2,0, 22, 2} }, -{ {0,2,2,2,0,0,2,1, 28, 33} }, -{ {0,2,2,2,0,0,2,2, 5, 7} }, -{ {0,2,2,2,0,1,0,0, 28, 16} }, -{ {0,2,2,2,0,1,0,1, 41, 12} }, -{ {0,2,2,2,0,1,0,2, 17, 7} }, -{ {0,2,2,2,0,1,1,0, 31, 15} }, -{ {0,2,2,2,0,1,1,1, 43, 5} }, -{ {0,2,2,2,0,1,1,2, 18, 23} }, -{ {0,2,2,2,0,1,2,0, 23, 6} }, -{ {0,2,2,2,0,1,2,1, 37, 16} }, -{ {0,2,2,2,0,1,2,2, 8, 7} }, -{ {0,2,2,2,0,2,0,0, 22, 29} }, -{ {0,2,2,2,0,2,0,1, 28, 12} }, -{ {0,2,2,2,0,2,0,2, 5, 23} }, -{ {0,2,2,2,0,2,1,0, 23, 35} }, -{ {0,2,2,2,0,2,1,1, 37, 15} }, -{ {0,2,2,2,0,2,1,2, 8, 34} }, -{ {0,2,2,2,0,2,2,0, 20, 15} }, -{ {0,2,2,2,0,2,2,1, 34, 15} }, -{ {0,2,2,2,0,2,2,2, 2, 22} }, -{ {0,2,2,2,1,0,0,0, 26, 15} }, -{ {0,2,2,2,1,0,0,1, 39, 15} }, -{ {0,2,2,2,1,0,0,2, 15, 7} }, -{ {0,2,2,2,1,0,1,0, 29, 15} }, -{ {0,2,2,2,1,0,1,1, 42, 29} }, -{ {0,2,2,2,1,0,1,2, 18, 15} }, -{ {0,2,2,2,1,0,2,0, 23, 16} }, -{ {0,2,2,2,1,0,2,1, 36, 16} }, -{ {0,2,2,2,1,0,2,2, 6, 7} }, -{ {0,2,2,2,1,1,0,0, 29, 16} }, -{ {0,2,2,2,1,1,0,1, 42, 10} }, -{ {0,2,2,2,1,1,0,2, 18, 7} }, -{ {0,2,2,2,1,1,1,0, 32, 11} }, -{ {0,2,2,2,1,1,1,1, 10, 5} }, -{ {0,2,2,2,1,1,1,2, 17, 23} }, -{ {0,2,2,2,1,1,2,0, 24, 6} }, -{ {0,2,2,2,1,1,2,1, 28, 31} }, -{ {0,2,2,2,1,1,2,2, 8, 38} }, -{ {0,2,2,2,1,2,0,0, 23, 15} }, -{ {0,2,2,2,1,2,0,1, 36, 15} }, -{ {0,2,2,2,1,2,0,2, 6, 23} }, -{ {0,2,2,2,1,2,1,0, 24, 15} }, -{ {0,2,2,2,1,2,1,1, 28, 4} }, -{ {0,2,2,2,1,2,1,2, 8, 23} }, -{ {0,2,2,2,1,2,2,0, 21, 15} }, -{ {0,2,2,2,1,2,2,1, 35, 15} }, -{ {0,2,2,2,1,2,2,2, 3, 23} }, -{ {0,2,2,2,2,0,0,0, 25, 5} }, -{ {0,2,2,2,2,0,0,1, 38, 15} }, -{ {0,2,2,2,2,0,0,2, 13, 7} }, -{ {0,2,2,2,2,0,1,0, 27, 15} }, -{ {0,2,2,2,2,0,1,1, 40, 15} }, -{ {0,2,2,2,2,0,1,2, 16, 15} }, -{ {0,2,2,2,2,0,2,0, 20, 6} }, -{ {0,2,2,2,2,0,2,1, 35, 6} }, -{ {0,2,2,2,2,0,2,2, 4, 7} }, -{ {0,2,2,2,2,1,0,0, 27, 16} }, -{ {0,2,2,2,2,1,0,1, 40, 16} }, -{ {0,2,2,2,2,1,0,2, 16, 7} }, -{ {0,2,2,2,2,1,1,0, 30, 15} }, -{ {0,2,2,2,2,1,1,1, 26, 5} }, -{ {0,2,2,2,2,1,1,2, 16, 23} }, -{ {0,2,2,2,2,1,2,0, 21, 6} }, -{ {0,2,2,2,2,1,2,1, 34, 6} }, -{ {0,2,2,2,2,1,2,2, 7, 7} }, -{ {0,2,2,2,2,2,0,0, 20, 8} }, -{ {0,2,2,2,2,2,0,1, 35, 8} }, -{ {0,2,2,2,2,2,0,2, 4, 9} }, -{ {0,2,2,2,2,2,1,0, 21, 8} }, -{ {0,2,2,2,2,2,1,1, 34, 8} }, -{ {0,2,2,2,2,2,1,2, 7, 9} }, -{ {0,2,2,2,2,2,2,0, 19, 6} }, -{ {0,2,2,2,2,2,2,1, 33, 3} }, -{ {0,2,2,2,2,2,2,2, 1, 5} }, -{ {1,0,0,0,0,0,0,0, 1, 5} }, -{ {1,0,0,0,0,0,0,1, 19, 6} }, -{ {1,0,0,0,0,0,0,2, 33, 3} }, -{ {1,0,0,0,0,0,1,0, 4, 9} }, -{ {1,0,0,0,0,0,1,1, 20, 8} }, -{ {1,0,0,0,0,0,1,2, 35, 8} }, -{ {1,0,0,0,0,0,2,0, 7, 9} }, -{ {1,0,0,0,0,0,2,1, 21, 8} }, -{ {1,0,0,0,0,0,2,2, 34, 8} }, -{ {1,0,0,0,0,1,0,0, 4, 7} }, -{ {1,0,0,0,0,1,0,1, 20, 6} }, -{ {1,0,0,0,0,1,0,2, 35, 6} }, -{ {1,0,0,0,0,1,1,0, 13, 7} }, -{ {1,0,0,0,0,1,1,1, 25, 15} }, -{ {1,0,0,0,0,1,1,2, 38, 15} }, -{ {1,0,0,0,0,1,2,0, 16, 15} }, -{ {1,0,0,0,0,1,2,1, 27, 15} }, -{ {1,0,0,0,0,1,2,2, 40, 15} }, -{ {1,0,0,0,0,2,0,0, 7, 7} }, -{ {1,0,0,0,0,2,0,1, 21, 6} }, -{ {1,0,0,0,0,2,0,2, 34, 6} }, -{ {1,0,0,0,0,2,1,0, 16, 7} }, -{ {1,0,0,0,0,2,1,1, 27, 16} }, -{ {1,0,0,0,0,2,1,2, 40, 16} }, -{ {1,0,0,0,0,2,2,0, 16, 23} }, -{ {1,0,0,0,0,2,2,1, 30, 15} }, -{ {1,0,0,0,0,2,2,2, 26, 5} }, -{ {1,0,0,0,1,0,0,0, 2, 22} }, -{ {1,0,0,0,1,0,0,1, 20, 15} }, -{ {1,0,0,0,1,0,0,2, 34, 15} }, -{ {1,0,0,0,1,0,1,0, 5, 23} }, -{ {1,0,0,0,1,0,1,1, 22, 15} }, -{ {1,0,0,0,1,0,1,2, 28, 12} }, -{ {1,0,0,0,1,0,2,0, 8, 34} }, -{ {1,0,0,0,1,0,2,1, 23, 35} }, -{ {1,0,0,0,1,0,2,2, 37, 15} }, -{ {1,0,0,0,1,1,0,0, 5, 7} }, -{ {1,0,0,0,1,1,0,1, 22, 6} }, -{ {1,0,0,0,1,1,0,2, 28, 33} }, -{ {1,0,0,0,1,1,1,0, 14, 7} }, -{ {1,0,0,0,1,1,1,1, 5, 11} }, -{ {1,0,0,0,1,1,1,2, 17, 12} }, -{ {1,0,0,0,1,1,2,0, 17, 15} }, -{ {1,0,0,0,1,1,2,1, 28, 15} }, -{ {1,0,0,0,1,1,2,2, 41, 15} }, -{ {1,0,0,0,1,2,0,0, 8, 7} }, -{ {1,0,0,0,1,2,0,1, 23, 6} }, -{ {1,0,0,0,1,2,0,2, 37, 16} }, -{ {1,0,0,0,1,2,1,0, 17, 7} }, -{ {1,0,0,0,1,2,1,1, 28, 16} }, -{ {1,0,0,0,1,2,1,2, 41, 16} }, -{ {1,0,0,0,1,2,2,0, 18, 23} }, -{ {1,0,0,0,1,2,2,1, 31, 15} }, -{ {1,0,0,0,1,2,2,2, 43, 15} }, -{ {1,0,0,0,2,0,0,0, 3, 23} }, -{ {1,0,0,0,2,0,0,1, 21, 15} }, -{ {1,0,0,0,2,0,0,2, 35, 15} }, -{ {1,0,0,0,2,0,1,0, 6, 23} }, -{ {1,0,0,0,2,0,1,1, 23, 15} }, -{ {1,0,0,0,2,0,1,2, 36, 15} }, -{ {1,0,0,0,2,0,2,0, 8, 23} }, -{ {1,0,0,0,2,0,2,1, 24, 15} }, -{ {1,0,0,0,2,0,2,2, 28, 4} }, -{ {1,0,0,0,2,1,0,0, 6, 7} }, -{ {1,0,0,0,2,1,0,1, 23, 16} }, -{ {1,0,0,0,2,1,0,2, 36, 16} }, -{ {1,0,0,0,2,1,1,0, 15, 7} }, -{ {1,0,0,0,2,1,1,1, 26, 15} }, -{ {1,0,0,0,2,1,1,2, 39, 15} }, -{ {1,0,0,0,2,1,2,0, 18, 15} }, -{ {1,0,0,0,2,1,2,1, 29, 15} }, -{ {1,0,0,0,2,1,2,2, 42, 15} }, -{ {1,0,0,0,2,2,0,0, 8, 38} }, -{ {1,0,0,0,2,2,0,1, 24, 6} }, -{ {1,0,0,0,2,2,0,2, 28, 31} }, -{ {1,0,0,0,2,2,1,0, 18, 7} }, -{ {1,0,0,0,2,2,1,1, 29, 16} }, -{ {1,0,0,0,2,2,1,2, 42, 16} }, -{ {1,0,0,0,2,2,2,0, 17, 23} }, -{ {1,0,0,0,2,2,2,1, 32, 15} }, -{ {1,0,0,0,2,2,2,2, 10, 5} }, -{ {1,0,0,1,0,0,0,0, 4, 4} }, -{ {1,0,0,1,0,0,0,1, 20, 11} }, -{ {1,0,0,1,0,0,0,2, 35, 11} }, -{ {1,0,0,1,0,0,1,0, 13, 3} }, -{ {1,0,0,1,0,0,1,1, 25, 3} }, -{ {1,0,0,1,0,0,1,2, 38, 3} }, -{ {1,0,0,1,0,0,2,0, 16, 9} }, -{ {1,0,0,1,0,0,2,1, 27, 42} }, -{ {1,0,0,1,0,0,2,2, 40, 42} }, -{ {1,0,0,1,0,1,0,0, 13, 4} }, -{ {1,0,0,1,0,1,0,1, 25, 27} }, -{ {1,0,0,1,0,1,0,2, 38, 27} }, -{ {1,0,0,1,0,1,1,0, 54, 1} }, -{ {1,0,0,1,0,1,1,1, 13, 5} }, -{ {1,0,0,1,0,1,1,2, 55, 0} }, -{ {1,0,0,1,0,1,2,0, 55, 1} }, -{ {1,0,0,1,0,1,2,1, 38, 22} }, -{ {1,0,0,1,0,1,2,2, 51, 4} }, -{ {1,0,0,1,0,2,0,0, 16, 27} }, -{ {1,0,0,1,0,2,0,1, 27, 27} }, -{ {1,0,0,1,0,2,0,2, 40, 27} }, -{ {1,0,0,1,0,2,1,0, 55, 6} }, -{ {1,0,0,1,0,2,1,1, 38, 24} }, -{ {1,0,0,1,0,2,1,2, 51, 31} }, -{ {1,0,0,1,0,2,2,0, 56, 0} }, -{ {1,0,0,1,0,2,2,1, 50, 23} }, -{ {1,0,0,1,0,2,2,2, 39, 5} }, -{ {1,0,0,1,1,0,0,0, 20, 5} }, -{ {1,0,0,1,1,0,0,1, 44, 9} }, -{ {1,0,0,1,1,0,0,2, 45, 13} }, -{ {1,0,0,1,1,0,1,0, 25, 9} }, -{ {1,0,0,1,1,0,1,1, 20, 4} }, -{ {1,0,0,1,1,0,1,2, 27, 12} }, -{ {1,0,0,1,1,0,2,0, 27, 9} }, -{ {1,0,0,1,1,0,2,1, 45, 8} }, -{ {1,0,0,1,1,0,2,2, 47, 43} }, -{ {1,0,0,1,1,1,0,0, 25, 25} }, -{ {1,0,0,1,1,1,0,1, 20, 10} }, -{ {1,0,0,1,1,1,0,2, 27, 33} }, -{ {1,0,0,1,1,1,1,0, 13, 2} }, -{ {1,0,0,1,1,1,1,1, 4, 5} }, -{ {1,0,0,1,1,1,1,2, 16, 12} }, -{ {1,0,0,1,1,1,2,0, 38, 2} }, -{ {1,0,0,1,1,1,2,1, 35, 10} }, -{ {1,0,0,1,1,1,2,2, 40, 33} }, -{ {1,0,0,1,1,2,0,0, 27, 44} }, -{ {1,0,0,1,1,2,0,1, 45, 26} }, -{ {1,0,0,1,1,2,0,2, 47, 26} }, -{ {1,0,0,1,1,2,1,0, 38, 12} }, -{ {1,0,0,1,1,2,1,1, 35, 4} }, -{ {1,0,0,1,1,2,1,2, 40, 12} }, -{ {1,0,0,1,1,2,2,0, 50, 13} }, -{ {1,0,0,1,1,2,2,1, 49, 13} }, -{ {1,0,0,1,1,2,2,2, 31, 5} }, -{ {1,0,0,1,2,0,0,0, 35, 5} }, -{ {1,0,0,1,2,0,0,1, 45, 23} }, -{ {1,0,0,1,2,0,0,2, 49, 8} }, -{ {1,0,0,1,2,0,1,0, 38, 9} }, -{ {1,0,0,1,2,0,1,1, 27, 39} }, -{ {1,0,0,1,2,0,1,2, 50, 8} }, -{ {1,0,0,1,2,0,2,0, 40, 9} }, -{ {1,0,0,1,2,0,2,1, 47, 8} }, -{ {1,0,0,1,2,0,2,2, 31, 4} }, -{ {1,0,0,1,2,1,0,0, 38, 25} }, -{ {1,0,0,1,2,1,0,1, 27, 22} }, -{ {1,0,0,1,2,1,0,2, 50, 26} }, -{ {1,0,0,1,2,1,1,0, 55, 7} }, -{ {1,0,0,1,2,1,1,1, 16, 22} }, -{ {1,0,0,1,2,1,1,2, 56, 1} }, -{ {1,0,0,1,2,1,2,0, 51, 29} }, -{ {1,0,0,1,2,1,2,1, 40, 22} }, -{ {1,0,0,1,2,1,2,2, 39, 4} }, -{ {1,0,0,1,2,2,0,0, 40, 44} }, -{ {1,0,0,1,2,2,0,1, 47, 45} }, -{ {1,0,0,1,2,2,0,2, 31, 10} }, -{ {1,0,0,1,2,2,1,0, 51, 3} }, -{ {1,0,0,1,2,2,1,1, 40, 39} }, -{ {1,0,0,1,2,2,1,2, 39, 10} }, -{ {1,0,0,1,2,2,2,0, 39, 11} }, -{ {1,0,0,1,2,2,2,1, 31, 11} }, -{ {1,0,0,1,2,2,2,2, 12, 4} }, -{ {1,0,0,2,0,0,0,0, 7, 10} }, -{ {1,0,0,2,0,0,0,1, 21, 11} }, -{ {1,0,0,2,0,0,0,2, 34, 11} }, -{ {1,0,0,2,0,0,1,0, 16, 3} }, -{ {1,0,0,2,0,0,1,1, 27, 3} }, -{ {1,0,0,2,0,0,1,2, 40, 3} }, -{ {1,0,0,2,0,0,2,0, 16, 31} }, -{ {1,0,0,2,0,0,2,1, 30, 3} }, -{ {1,0,0,2,0,0,2,2, 26, 24} }, -{ {1,0,0,2,0,1,0,0, 16, 29} }, -{ {1,0,0,2,0,1,0,1, 27, 46} }, -{ {1,0,0,2,0,1,0,2, 40, 46} }, -{ {1,0,0,2,0,1,1,0, 55, 2} }, -{ {1,0,0,2,0,1,1,1, 38, 5} }, -{ {1,0,0,2,0,1,1,2, 51, 23} }, -{ {1,0,0,2,0,1,2,0, 56, 3} }, -{ {1,0,0,2,0,1,2,1, 50, 31} }, -{ {1,0,0,2,0,1,2,2, 39, 24} }, -{ {1,0,0,2,0,2,0,0, 16, 4} }, -{ {1,0,0,2,0,2,0,1, 30, 27} }, -{ {1,0,0,2,0,2,0,2, 26, 22} }, -{ {1,0,0,2,0,2,1,0, 56, 13} }, -{ {1,0,0,2,0,2,1,1, 50, 4} }, -{ {1,0,0,2,0,2,1,2, 39, 22} }, -{ {1,0,0,2,0,2,2,0, 55, 5} }, -{ {1,0,0,2,0,2,2,1, 57, 0} }, -{ {1,0,0,2,0,2,2,2, 15, 5} }, -{ {1,0,0,2,1,0,0,0, 34, 5} }, -{ {1,0,0,2,1,0,0,1, 45, 12} }, -{ {1,0,0,2,1,0,0,2, 46, 12} }, -{ {1,0,0,2,1,0,1,0, 26, 12} }, -{ {1,0,0,2,1,0,1,1, 23, 47} }, -{ {1,0,0,2,1,0,1,2, 29, 12} }, -{ {1,0,0,2,1,0,2,0, 40, 36} }, -{ {1,0,0,2,1,0,2,1, 48, 42} }, -{ {1,0,0,2,1,0,2,2, 29, 39} }, -{ {1,0,0,2,1,1,0,0, 26, 2} }, -{ {1,0,0,2,1,1,0,1, 23, 2} }, -{ {1,0,0,2,1,1,0,2, 29, 33} }, -{ {1,0,0,2,1,1,1,0, 15, 2} }, -{ {1,0,0,2,1,1,1,1, 6, 11} }, -{ {1,0,0,2,1,1,1,2, 18, 12} }, -{ {1,0,0,2,1,1,2,0, 39, 2} }, -{ {1,0,0,2,1,1,2,1, 36, 2} }, -{ {1,0,0,2,1,1,2,2, 42, 33} }, -{ {1,0,0,2,1,2,0,0, 40, 25} }, -{ {1,0,0,2,1,2,0,1, 48, 27} }, -{ {1,0,0,2,1,2,0,2, 29, 22} }, -{ {1,0,0,2,1,2,1,0, 39, 12} }, -{ {1,0,0,2,1,2,1,1, 36, 47} }, -{ {1,0,0,2,1,2,1,2, 42, 12} }, -{ {1,0,0,2,1,2,2,0, 51, 13} }, -{ {1,0,0,2,1,2,2,1, 50, 12} }, -{ {1,0,0,2,1,2,2,2, 18, 22} }, -{ {1,0,0,2,2,0,0,0, 21, 5} }, -{ {1,0,0,2,2,0,0,1, 52, 9} }, -{ {1,0,0,2,2,0,0,2, 45, 22} }, -{ {1,0,0,2,2,0,1,0, 30, 9} }, -{ {1,0,0,2,2,0,1,1, 53, 43} }, -{ {1,0,0,2,2,0,1,2, 48, 9} }, -{ {1,0,0,2,2,0,2,0, 27, 36} }, -{ {1,0,0,2,2,0,2,1, 53, 8} }, -{ {1,0,0,2,2,0,2,2, 23, 24} }, -{ {1,0,0,2,2,1,0,0, 30, 25} }, -{ {1,0,0,2,2,1,0,1, 53, 26} }, -{ {1,0,0,2,2,1,0,2, 48, 44} }, -{ {1,0,0,2,2,1,1,0, 57, 7} }, -{ {1,0,0,2,2,1,1,1, 30, 5} }, -{ {1,0,0,2,2,1,1,2, 50, 22} }, -{ {1,0,0,2,2,1,2,0, 50, 29} }, -{ {1,0,0,2,2,1,2,1, 48, 30} }, -{ {1,0,0,2,2,1,2,2, 36, 24} }, -{ {1,0,0,2,2,2,0,0, 27, 25} }, -{ {1,0,0,2,2,2,0,1, 53, 45} }, -{ {1,0,0,2,2,2,0,2, 23, 37} }, -{ {1,0,0,2,2,2,1,0, 50, 3} }, -{ {1,0,0,2,2,2,1,1, 48, 5} }, -{ {1,0,0,2,2,2,1,2, 36, 37} }, -{ {1,0,0,2,2,2,2,0, 38, 11} }, -{ {1,0,0,2,2,2,2,1, 30, 11} }, -{ {1,0,0,2,2,2,2,2, 6, 5} }, -{ {1,0,1,0,0,0,0,0, 2, 31} }, -{ {1,0,1,0,0,0,0,1, 20, 3} }, -{ {1,0,1,0,0,0,0,2, 34, 3} }, -{ {1,0,1,0,0,0,1,0, 5, 9} }, -{ {1,0,1,0,0,0,1,1, 22, 8} }, -{ {1,0,1,0,0,0,1,2, 28, 41} }, -{ {1,0,1,0,0,0,2,0, 8, 9} }, -{ {1,0,1,0,0,0,2,1, 23, 8} }, -{ {1,0,1,0,0,0,2,2, 37, 42} }, -{ {1,0,1,0,0,1,0,0, 20, 24} }, -{ {1,0,1,0,0,1,0,1, 44, 15} }, -{ {1,0,1,0,0,1,0,2, 45, 19} }, -{ {1,0,1,0,0,1,1,0, 25, 23} }, -{ {1,0,1,0,0,1,1,1, 20, 25} }, -{ {1,0,1,0,0,1,1,2, 27, 41} }, -{ {1,0,1,0,0,1,2,0, 27, 34} }, -{ {1,0,1,0,0,1,2,1, 45, 14} }, -{ {1,0,1,0,0,1,2,2, 47, 14} }, -{ {1,0,1,0,0,2,0,0, 34, 24} }, -{ {1,0,1,0,0,2,0,1, 45, 18} }, -{ {1,0,1,0,0,2,0,2, 46, 18} }, -{ {1,0,1,0,0,2,1,0, 26, 26} }, -{ {1,0,1,0,0,2,1,1, 23, 26} }, -{ {1,0,1,0,0,2,1,2, 29, 41} }, -{ {1,0,1,0,0,2,2,0, 40, 23} }, -{ {1,0,1,0,0,2,2,1, 48, 15} }, -{ {1,0,1,0,0,2,2,2, 29, 30} }, -{ {1,0,1,0,1,0,0,0, 5, 22} }, -{ {1,0,1,0,1,0,0,1, 25, 8} }, -{ {1,0,1,0,1,0,0,2, 26, 13} }, -{ {1,0,1,0,1,0,1,0, 9, 9} }, -{ {1,0,1,0,1,0,1,1, 5, 27} }, -{ {1,0,1,0,1,0,1,2, 10, 13} }, -{ {1,0,1,0,1,0,2,0, 10, 8} }, -{ {1,0,1,0,1,0,2,1, 26, 8} }, -{ {1,0,1,0,1,0,2,2, 43, 8} }, -{ {1,0,1,0,1,1,0,0, 22, 23} }, -{ {1,0,1,0,1,1,0,1, 20, 2} }, -{ {1,0,1,0,1,1,0,2, 23, 13} }, -{ {1,0,1,0,1,1,1,0, 5, 12} }, -{ {1,0,1,0,1,1,1,1, 2, 28} }, -{ {1,0,1,0,1,1,1,2, 8, 12} }, -{ {1,0,1,0,1,1,2,0, 28, 34} }, -{ {1,0,1,0,1,1,2,1, 34, 2} }, -{ {1,0,1,0,1,1,2,2, 37, 33} }, -{ {1,0,1,0,1,2,0,0, 28, 40} }, -{ {1,0,1,0,1,2,0,1, 27, 40} }, -{ {1,0,1,0,1,2,0,2, 29, 40} }, -{ {1,0,1,0,1,2,1,0, 10, 26} }, -{ {1,0,1,0,1,2,1,1, 8, 27} }, -{ {1,0,1,0,1,2,1,2, 11, 40} }, -{ {1,0,1,0,1,2,2,0, 42, 23} }, -{ {1,0,1,0,1,2,2,1, 40, 13} }, -{ {1,0,1,0,1,2,2,2, 41, 13} }, -{ {1,0,1,0,2,0,0,0, 8, 22} }, -{ {1,0,1,0,2,0,0,1, 27, 35} }, -{ {1,0,1,0,2,0,0,2, 40, 8} }, -{ {1,0,1,0,2,0,1,0, 10, 23} }, -{ {1,0,1,0,2,0,1,1, 28, 35} }, -{ {1,0,1,0,2,0,1,2, 42, 8} }, -{ {1,0,1,0,2,0,2,0, 11, 35} }, -{ {1,0,1,0,2,0,2,1, 29, 35} }, -{ {1,0,1,0,2,0,2,2, 41, 8} }, -{ {1,0,1,0,2,1,0,0, 23, 23} }, -{ {1,0,1,0,2,1,0,1, 45, 15} }, -{ {1,0,1,0,2,1,0,2, 48, 14} }, -{ {1,0,1,0,2,1,1,0, 26, 23} }, -{ {1,0,1,0,2,1,1,1, 34, 25} }, -{ {1,0,1,0,2,1,1,2, 40, 26} }, -{ {1,0,1,0,2,1,2,0, 29, 34} }, -{ {1,0,1,0,2,1,2,1, 46, 15} }, -{ {1,0,1,0,2,1,2,2, 29, 29} }, -{ {1,0,1,0,2,2,0,0, 37, 39} }, -{ {1,0,1,0,2,2,0,1, 47, 15} }, -{ {1,0,1,0,2,2,0,2, 29, 31} }, -{ {1,0,1,0,2,2,1,0, 43, 23} }, -{ {1,0,1,0,2,2,1,1, 37, 44} }, -{ {1,0,1,0,2,2,1,2, 41, 26} }, -{ {1,0,1,0,2,2,2,0, 41, 23} }, -{ {1,0,1,0,2,2,2,1, 29, 28} }, -{ {1,0,1,0,2,2,2,2, 11, 31} }, -{ {1,0,1,1,0,0,0,0, 5, 10} }, -{ {1,0,1,1,0,0,0,1, 22, 3} }, -{ {1,0,1,1,0,0,0,2, 28, 18} }, -{ {1,0,1,1,0,0,1,0, 14, 3} }, -{ {1,0,1,1,0,0,1,1, 5, 6} }, -{ {1,0,1,1,0,0,1,2, 17, 18} }, -{ {1,0,1,1,0,0,2,0, 17, 9} }, -{ {1,0,1,1,0,0,2,1, 28, 42} }, -{ {1,0,1,1,0,0,2,2, 41, 42} }, -{ {1,0,1,1,0,1,0,0, 25, 4} }, -{ {1,0,1,1,0,1,0,1, 20, 7} }, -{ {1,0,1,1,0,1,0,2, 27, 18} }, -{ {1,0,1,1,0,1,1,0, 13, 6} }, -{ {1,0,1,1,0,1,1,1, 4, 6} }, -{ {1,0,1,1,0,1,1,2, 16, 18} }, -{ {1,0,1,1,0,1,2,0, 38, 18} }, -{ {1,0,1,1,0,1,2,1, 35, 7} }, -{ {1,0,1,1,0,1,2,2, 40, 18} }, -{ {1,0,1,1,0,2,0,0, 26, 18} }, -{ {1,0,1,1,0,2,0,1, 23, 17} }, -{ {1,0,1,1,0,2,0,2, 29, 18} }, -{ {1,0,1,1,0,2,1,0, 15, 6} }, -{ {1,0,1,1,0,2,1,1, 6, 6} }, -{ {1,0,1,1,0,2,1,2, 18, 18} }, -{ {1,0,1,1,0,2,2,0, 39, 18} }, -{ {1,0,1,1,0,2,2,1, 36, 17} }, -{ {1,0,1,1,0,2,2,2, 42, 18} }, -{ {1,0,1,1,1,0,0,0, 22, 30} }, -{ {1,0,1,1,1,0,0,1, 20, 18} }, -{ {1,0,1,1,1,0,0,2, 23, 40} }, -{ {1,0,1,1,1,0,1,0, 5, 26} }, -{ {1,0,1,1,1,0,1,1, 2, 27} }, -{ {1,0,1,1,1,0,1,2, 8, 41} }, -{ {1,0,1,1,1,0,2,0, 28, 9} }, -{ {1,0,1,1,1,0,2,1, 34, 18} }, -{ {1,0,1,1,1,0,2,2, 37, 18} }, -{ {1,0,1,1,1,1,0,0, 20, 13} }, -{ {1,0,1,1,1,1,0,1, 19, 7} }, -{ {1,0,1,1,1,1,0,2, 21, 13} }, -{ {1,0,1,1,1,1,1,0, 4, 12} }, -{ {1,0,1,1,1,1,1,1, 1, 4} }, -{ {1,0,1,1,1,1,1,2, 7, 12} }, -{ {1,0,1,1,1,1,2,0, 35, 13} }, -{ {1,0,1,1,1,1,2,1, 33, 2} }, -{ {1,0,1,1,1,1,2,2, 34, 13} }, -{ {1,0,1,1,1,2,0,0, 23, 18} }, -{ {1,0,1,1,1,2,0,1, 21, 18} }, -{ {1,0,1,1,1,2,0,2, 24, 18} }, -{ {1,0,1,1,1,2,1,0, 6, 26} }, -{ {1,0,1,1,1,2,1,1, 3, 26} }, -{ {1,0,1,1,1,2,1,2, 8, 26} }, -{ {1,0,1,1,1,2,2,0, 36, 18} }, -{ {1,0,1,1,1,2,2,1, 35, 18} }, -{ {1,0,1,1,1,2,2,2, 28, 5} }, -{ {1,0,1,1,2,0,0,0, 28, 17} }, -{ {1,0,1,1,2,0,0,1, 23, 7} }, -{ {1,0,1,1,2,0,0,2, 31, 18} }, -{ {1,0,1,1,2,0,1,0, 17, 6} }, -{ {1,0,1,1,2,0,1,1, 8, 6} }, -{ {1,0,1,1,2,0,1,2, 18, 26} }, -{ {1,0,1,1,2,0,2,0, 41, 9} }, -{ {1,0,1,1,2,0,2,1, 37, 17} }, -{ {1,0,1,1,2,0,2,2, 43, 18} }, -{ {1,0,1,1,2,1,0,0, 27, 17} }, -{ {1,0,1,1,2,1,0,1, 21, 7} }, -{ {1,0,1,1,2,1,0,2, 30, 18} }, -{ {1,0,1,1,2,1,1,0, 16, 6} }, -{ {1,0,1,1,2,1,1,1, 7, 6} }, -{ {1,0,1,1,2,1,1,2, 16, 26} }, -{ {1,0,1,1,2,1,2,0, 40, 17} }, -{ {1,0,1,1,2,1,2,1, 34, 7} }, -{ {1,0,1,1,2,1,2,2, 26, 4} }, -{ {1,0,1,1,2,2,0,0, 29, 17} }, -{ {1,0,1,1,2,2,0,1, 24, 7} }, -{ {1,0,1,1,2,2,0,2, 32, 18} }, -{ {1,0,1,1,2,2,1,0, 18, 6} }, -{ {1,0,1,1,2,2,1,1, 8, 45} }, -{ {1,0,1,1,2,2,1,2, 17, 26} }, -{ {1,0,1,1,2,2,2,0, 42, 17} }, -{ {1,0,1,1,2,2,2,1, 28, 28} }, -{ {1,0,1,1,2,2,2,2, 10, 4} }, -{ {1,0,1,2,0,0,0,0, 8, 10} }, -{ {1,0,1,2,0,0,0,1, 23, 11} }, -{ {1,0,1,2,0,0,0,2, 37, 3} }, -{ {1,0,1,2,0,0,1,0, 17, 3} }, -{ {1,0,1,2,0,0,1,1, 28, 3} }, -{ {1,0,1,2,0,0,1,2, 41, 3} }, -{ {1,0,1,2,0,0,2,0, 18, 31} }, -{ {1,0,1,2,0,0,2,1, 31, 3} }, -{ {1,0,1,2,0,0,2,2, 43, 3} }, -{ {1,0,1,2,0,1,0,0, 27, 29} }, -{ {1,0,1,2,0,1,0,1, 45, 28} }, -{ {1,0,1,2,0,1,0,2, 47, 47} }, -{ {1,0,1,2,0,1,1,0, 38, 26} }, -{ {1,0,1,2,0,1,1,1, 35, 25} }, -{ {1,0,1,2,0,1,1,2, 40, 41} }, -{ {1,0,1,2,0,1,2,0, 50, 19} }, -{ {1,0,1,2,0,1,2,1, 49, 19} }, -{ {1,0,1,2,0,1,2,2, 31, 24} }, -{ {1,0,1,2,0,2,0,0, 40, 4} }, -{ {1,0,1,2,0,2,0,1, 48, 46} }, -{ {1,0,1,2,0,2,0,2, 29, 37} }, -{ {1,0,1,2,0,2,1,0, 39, 26} }, -{ {1,0,1,2,0,2,1,1, 36, 26} }, -{ {1,0,1,2,0,2,1,2, 42, 41} }, -{ {1,0,1,2,0,2,2,0, 51, 19} }, -{ {1,0,1,2,0,2,2,1, 50, 18} }, -{ {1,0,1,2,0,2,2,2, 18, 30} }, -{ {1,0,1,2,1,0,0,0, 28, 13} }, -{ {1,0,1,2,1,0,0,1, 27, 13} }, -{ {1,0,1,2,1,0,0,2, 29, 13} }, -{ {1,0,1,2,1,0,1,0, 10, 12} }, -{ {1,0,1,2,1,0,1,1, 8, 46} }, -{ {1,0,1,2,1,0,1,2, 11, 12} }, -{ {1,0,1,2,1,0,2,0, 42, 36} }, -{ {1,0,1,2,1,0,2,1, 40, 40} }, -{ {1,0,1,2,1,0,2,2, 41, 40} }, -{ {1,0,1,2,1,1,0,0, 23, 33} }, -{ {1,0,1,2,1,1,0,1, 21, 2} }, -{ {1,0,1,2,1,1,0,2, 24, 13} }, -{ {1,0,1,2,1,1,1,0, 6, 12} }, -{ {1,0,1,2,1,1,1,1, 3, 28} }, -{ {1,0,1,2,1,1,1,2, 8, 47} }, -{ {1,0,1,2,1,1,2,0, 36, 33} }, -{ {1,0,1,2,1,1,2,1, 35, 2} }, -{ {1,0,1,2,1,1,2,2, 28, 24} }, -{ {1,0,1,2,1,2,0,0, 31, 13} }, -{ {1,0,1,2,1,2,0,1, 30, 13} }, -{ {1,0,1,2,1,2,0,2, 32, 13} }, -{ {1,0,1,2,1,2,1,0, 12, 13} }, -{ {1,0,1,2,1,2,1,1, 6, 27} }, -{ {1,0,1,2,1,2,1,2, 10, 27} }, -{ {1,0,1,2,1,2,2,0, 39, 13} }, -{ {1,0,1,2,1,2,2,1, 38, 13} }, -{ {1,0,1,2,1,2,2,2, 17, 5} }, -{ {1,0,1,2,2,0,0,0, 24, 30} }, -{ {1,0,1,2,2,0,0,1, 53, 9} }, -{ {1,0,1,2,2,0,0,2, 47, 9} }, -{ {1,0,1,2,2,0,1,0, 32, 9} }, -{ {1,0,1,2,2,0,1,1, 24, 26} }, -{ {1,0,1,2,2,0,1,2, 29, 26} }, -{ {1,0,1,2,2,0,2,0, 29, 36} }, -{ {1,0,1,2,2,0,2,1, 47, 41} }, -{ {1,0,1,2,2,0,2,2, 37, 4} }, -{ {1,0,1,2,2,1,0,0, 53, 5} }, -{ {1,0,1,2,2,1,0,1, 52, 19} }, -{ {1,0,1,2,2,1,0,2, 53, 40} }, -{ {1,0,1,2,2,1,1,0, 30, 26} }, -{ {1,0,1,2,2,1,1,1, 21, 25} }, -{ {1,0,1,2,2,1,1,2, 27, 26} }, -{ {1,0,1,2,2,1,2,0, 48, 41} }, -{ {1,0,1,2,2,1,2,1, 45, 29} }, -{ {1,0,1,2,2,1,2,2, 23, 4} }, -{ {1,0,1,2,2,2,0,0, 47, 5} }, -{ {1,0,1,2,2,2,0,1, 53, 18} }, -{ {1,0,1,2,2,2,0,2, 24, 31} }, -{ {1,0,1,2,2,2,1,0, 31, 26} }, -{ {1,0,1,2,2,2,1,1, 23, 44} }, -{ {1,0,1,2,2,2,1,2, 28, 26} }, -{ {1,0,1,2,2,2,2,0, 40, 11} }, -{ {1,0,1,2,2,2,2,1, 27, 28} }, -{ {1,0,1,2,2,2,2,2, 8, 5} }, -{ {1,0,2,0,0,0,0,0, 3, 31} }, -{ {1,0,2,0,0,0,0,1, 21, 3} }, -{ {1,0,2,0,0,0,0,2, 35, 3} }, -{ {1,0,2,0,0,0,1,0, 6, 9} }, -{ {1,0,2,0,0,0,1,1, 23, 42} }, -{ {1,0,2,0,0,0,1,2, 36, 42} }, -{ {1,0,2,0,0,0,2,0, 8, 36} }, -{ {1,0,2,0,0,0,2,1, 24, 8} }, -{ {1,0,2,0,0,0,2,2, 28, 25} }, -{ {1,0,2,0,0,1,0,0, 35, 24} }, -{ {1,0,2,0,0,1,0,1, 45, 31} }, -{ {1,0,2,0,0,1,0,2, 49, 14} }, -{ {1,0,2,0,0,1,1,0, 38, 23} }, -{ {1,0,2,0,0,1,1,1, 27, 30} }, -{ {1,0,2,0,0,1,1,2, 50, 14} }, -{ {1,0,2,0,0,1,2,0, 40, 34} }, -{ {1,0,2,0,0,1,2,1, 47, 35} }, -{ {1,0,2,0,0,1,2,2, 31, 25} }, -{ {1,0,2,0,0,2,0,0, 21, 24} }, -{ {1,0,2,0,0,2,0,1, 52, 14} }, -{ {1,0,2,0,0,2,0,2, 45, 30} }, -{ {1,0,2,0,0,2,1,0, 30, 23} }, -{ {1,0,2,0,0,2,1,1, 53, 14} }, -{ {1,0,2,0,0,2,1,2, 48, 34} }, -{ {1,0,2,0,0,2,2,0, 27, 23} }, -{ {1,0,2,0,0,2,2,1, 53, 35} }, -{ {1,0,2,0,0,2,2,2, 23, 5} }, -{ {1,0,2,0,1,0,0,0, 8, 37} }, -{ {1,0,2,0,1,0,0,1, 27, 8} }, -{ {1,0,2,0,1,0,0,2, 40, 35} }, -{ {1,0,2,0,1,0,1,0, 10, 9} }, -{ {1,0,2,0,1,0,1,1, 28, 8} }, -{ {1,0,2,0,1,0,1,2, 42, 35} }, -{ {1,0,2,0,1,0,2,0, 11, 9} }, -{ {1,0,2,0,1,0,2,1, 29, 8} }, -{ {1,0,2,0,1,0,2,2, 41, 35} }, -{ {1,0,2,0,1,1,0,0, 28, 2} }, -{ {1,0,2,0,1,1,0,1, 23, 10} }, -{ {1,0,2,0,1,1,0,2, 31, 2} }, -{ {1,0,2,0,1,1,1,0, 17, 2} }, -{ {1,0,2,0,1,1,1,1, 8, 11} }, -{ {1,0,2,0,1,1,1,2, 18, 28} }, -{ {1,0,2,0,1,1,2,0, 41, 34} }, -{ {1,0,2,0,1,1,2,1, 37, 2} }, -{ {1,0,2,0,1,1,2,2, 43, 2} }, -{ {1,0,2,0,1,2,0,0, 24, 23} }, -{ {1,0,2,0,1,2,0,1, 53, 34} }, -{ {1,0,2,0,1,2,0,2, 47, 34} }, -{ {1,0,2,0,1,2,1,0, 32, 23} }, -{ {1,0,2,0,1,2,1,1, 24, 29} }, -{ {1,0,2,0,1,2,1,2, 29, 47} }, -{ {1,0,2,0,1,2,2,0, 29, 23} }, -{ {1,0,2,0,1,2,2,1, 47, 12} }, -{ {1,0,2,0,1,2,2,2, 37, 25} }, -{ {1,0,2,0,2,0,0,0, 6, 22} }, -{ {1,0,2,0,2,0,0,1, 30, 8} }, -{ {1,0,2,0,2,0,0,2, 38, 8} }, -{ {1,0,2,0,2,0,1,0, 12, 8} }, -{ {1,0,2,0,2,0,1,1, 31, 8} }, -{ {1,0,2,0,2,0,1,2, 39, 8} }, -{ {1,0,2,0,2,0,2,0, 10, 22} }, -{ {1,0,2,0,2,0,2,1, 32, 8} }, -{ {1,0,2,0,2,0,2,2, 17, 4} }, -{ {1,0,2,0,2,1,0,0, 36, 23} }, -{ {1,0,2,0,2,1,0,1, 48, 35} }, -{ {1,0,2,0,2,1,0,2, 50, 15} }, -{ {1,0,2,0,2,1,1,0, 39, 23} }, -{ {1,0,2,0,2,1,1,1, 40, 5} }, -{ {1,0,2,0,2,1,1,2, 51, 14} }, -{ {1,0,2,0,2,1,2,0, 42, 34} }, -{ {1,0,2,0,2,1,2,1, 29, 46} }, -{ {1,0,2,0,2,1,2,2, 18, 29} }, -{ {1,0,2,0,2,2,0,0, 23, 39} }, -{ {1,0,2,0,2,2,0,1, 53, 15} }, -{ {1,0,2,0,2,2,0,2, 27, 31} }, -{ {1,0,2,0,2,2,1,0, 31, 23} }, -{ {1,0,2,0,2,2,1,1, 47, 4} }, -{ {1,0,2,0,2,2,1,2, 40, 10} }, -{ {1,0,2,0,2,2,2,0, 28, 23} }, -{ {1,0,2,0,2,2,2,1, 24, 28} }, -{ {1,0,2,0,2,2,2,2, 8, 4} }, -{ {1,0,2,1,0,0,0,0, 6, 10} }, -{ {1,0,2,1,0,0,0,1, 23, 3} }, -{ {1,0,2,1,0,0,0,2, 36, 3} }, -{ {1,0,2,1,0,0,1,0, 15, 3} }, -{ {1,0,2,1,0,0,1,1, 26, 3} }, -{ {1,0,2,1,0,0,1,2, 39, 3} }, -{ {1,0,2,1,0,0,2,0, 18, 9} }, -{ {1,0,2,1,0,0,2,1, 29, 42} }, -{ {1,0,2,1,0,0,2,2, 42, 42} }, -{ {1,0,2,1,0,1,0,0, 38, 4} }, -{ {1,0,2,1,0,1,0,1, 27, 37} }, -{ {1,0,2,1,0,1,0,2, 50, 28} }, -{ {1,0,2,1,0,1,1,0, 55, 3} }, -{ {1,0,2,1,0,1,1,1, 16, 30} }, -{ {1,0,2,1,0,1,1,2, 56, 2} }, -{ {1,0,2,1,0,1,2,0, 51, 27} }, -{ {1,0,2,1,0,1,2,1, 40, 37} }, -{ {1,0,2,1,0,1,2,2, 39, 25} }, -{ {1,0,2,1,0,2,0,0, 30, 4} }, -{ {1,0,2,1,0,2,0,1, 53, 47} }, -{ {1,0,2,1,0,2,0,2, 48, 29} }, -{ {1,0,2,1,0,2,1,0, 57, 3} }, -{ {1,0,2,1,0,2,1,1, 30, 24} }, -{ {1,0,2,1,0,2,1,2, 50, 30} }, -{ {1,0,2,1,0,2,2,0, 50, 27} }, -{ {1,0,2,1,0,2,2,1, 48, 39} }, -{ {1,0,2,1,0,2,2,2, 36, 5} }, -{ {1,0,2,1,1,0,0,0, 23, 36} }, -{ {1,0,2,1,1,0,0,1, 45, 9} }, -{ {1,0,2,1,1,0,0,2, 48, 43} }, -{ {1,0,2,1,1,0,1,0, 26, 9} }, -{ {1,0,2,1,1,0,1,1, 34, 4} }, -{ {1,0,2,1,1,0,1,2, 40, 47} }, -{ {1,0,2,1,1,0,2,0, 29, 9} }, -{ {1,0,2,1,1,0,2,1, 46, 9} }, -{ {1,0,2,1,1,0,2,2, 29, 44} }, -{ {1,0,2,1,1,1,0,0, 27, 2} }, -{ {1,0,2,1,1,1,0,1, 21, 10} }, -{ {1,0,2,1,1,1,0,2, 30, 2} }, -{ {1,0,2,1,1,1,1,0, 16, 2} }, -{ {1,0,2,1,1,1,1,1, 7, 11} }, -{ {1,0,2,1,1,1,1,2, 16, 28} }, -{ {1,0,2,1,1,1,2,0, 40, 2} }, -{ {1,0,2,1,1,1,2,1, 34, 10} }, -{ {1,0,2,1,1,1,2,2, 26, 25} }, -{ {1,0,2,1,1,2,0,0, 53, 24} }, -{ {1,0,2,1,1,2,0,1, 52, 12} }, -{ {1,0,2,1,1,2,0,2, 53, 13} }, -{ {1,0,2,1,1,2,1,0, 30, 12} }, -{ {1,0,2,1,1,2,1,1, 21, 4} }, -{ {1,0,2,1,1,2,1,2, 27, 47} }, -{ {1,0,2,1,1,2,2,0, 48, 12} }, -{ {1,0,2,1,1,2,2,1, 45, 27} }, -{ {1,0,2,1,1,2,2,2, 23, 25} }, -{ {1,0,2,1,2,0,0,0, 36, 36} }, -{ {1,0,2,1,2,0,0,1, 48, 8} }, -{ {1,0,2,1,2,0,0,2, 50, 9} }, -{ {1,0,2,1,2,0,1,0, 39, 9} }, -{ {1,0,2,1,2,0,1,1, 40, 24} }, -{ {1,0,2,1,2,0,1,2, 51, 8} }, -{ {1,0,2,1,2,0,2,0, 42, 9} }, -{ {1,0,2,1,2,0,2,1, 29, 27} }, -{ {1,0,2,1,2,0,2,2, 18, 27} }, -{ {1,0,2,1,2,1,0,0, 50, 5} }, -{ {1,0,2,1,2,1,0,1, 30, 22} }, -{ {1,0,2,1,2,1,0,2, 57, 1} }, -{ {1,0,2,1,2,1,1,0, 56, 8} }, -{ {1,0,2,1,2,1,1,1, 16, 5} }, -{ {1,0,2,1,2,1,1,2, 55, 4} }, -{ {1,0,2,1,2,1,2,0, 39, 27} }, -{ {1,0,2,1,2,1,2,1, 26, 27} }, -{ {1,0,2,1,2,1,2,2, 15, 4} }, -{ {1,0,2,1,2,2,0,0, 48, 4} }, -{ {1,0,2,1,2,2,0,1, 53, 38} }, -{ {1,0,2,1,2,2,0,2, 30, 10} }, -{ {1,0,2,1,2,2,1,0, 50, 2} }, -{ {1,0,2,1,2,2,1,1, 27, 24} }, -{ {1,0,2,1,2,2,1,2, 38, 10} }, -{ {1,0,2,1,2,2,2,0, 36, 28} }, -{ {1,0,2,1,2,2,2,1, 23, 46} }, -{ {1,0,2,1,2,2,2,2, 6, 4} }, -{ {1,0,2,2,0,0,0,0, 8, 31} }, -{ {1,0,2,2,0,0,0,1, 24, 3} }, -{ {1,0,2,2,0,0,0,2, 28, 38} }, -{ {1,0,2,2,0,0,1,0, 18, 3} }, -{ {1,0,2,2,0,0,1,1, 29, 3} }, -{ {1,0,2,2,0,0,1,2, 42, 3} }, -{ {1,0,2,2,0,0,2,0, 17, 31} }, -{ {1,0,2,2,0,0,2,1, 32, 3} }, -{ {1,0,2,2,0,0,2,2, 10, 24} }, -{ {1,0,2,2,0,1,0,0, 40, 29} }, -{ {1,0,2,2,0,1,0,1, 47, 28} }, -{ {1,0,2,2,0,1,0,2, 31, 7} }, -{ {1,0,2,2,0,1,1,0, 51, 7} }, -{ {1,0,2,2,0,1,1,1, 40, 30} }, -{ {1,0,2,2,0,1,1,2, 39, 7} }, -{ {1,0,2,2,0,1,2,0, 39, 6} }, -{ {1,0,2,2,0,1,2,1, 31, 6} }, -{ {1,0,2,2,0,1,2,2, 12, 7} }, -{ {1,0,2,2,0,2,0,0, 27, 4} }, -{ {1,0,2,2,0,2,0,1, 53, 28} }, -{ {1,0,2,2,0,2,0,2, 23, 22} }, -{ {1,0,2,2,0,2,1,0, 50, 7} }, -{ {1,0,2,2,0,2,1,1, 48, 24} }, -{ {1,0,2,2,0,2,1,2, 36, 22} }, -{ {1,0,2,2,0,2,2,0, 38, 6} }, -{ {1,0,2,2,0,2,2,1, 30, 6} }, -{ {1,0,2,2,0,2,2,2, 6, 24} }, -{ {1,0,2,2,1,0,0,0, 37, 30} }, -{ {1,0,2,2,1,0,0,1, 47, 42} }, -{ {1,0,2,2,1,0,0,2, 29, 38} }, -{ {1,0,2,2,1,0,1,0, 43, 9} }, -{ {1,0,2,2,1,0,1,1, 37, 29} }, -{ {1,0,2,2,1,0,1,2, 41, 47} }, -{ {1,0,2,2,1,0,2,0, 41, 36} }, -{ {1,0,2,2,1,0,2,1, 29, 45} }, -{ {1,0,2,2,1,0,2,2, 11, 39} }, -{ {1,0,2,2,1,1,0,0, 29, 2} }, -{ {1,0,2,2,1,1,0,1, 24, 2} }, -{ {1,0,2,2,1,1,0,2, 32, 2} }, -{ {1,0,2,2,1,1,1,0, 18, 2} }, -{ {1,0,2,2,1,1,1,1, 8, 28} }, -{ {1,0,2,2,1,1,1,2, 17, 28} }, -{ {1,0,2,2,1,1,2,0, 42, 2} }, -{ {1,0,2,2,1,1,2,1, 28, 45} }, -{ {1,0,2,2,1,1,2,2, 10, 25} }, -{ {1,0,2,2,1,2,0,0, 47, 24} }, -{ {1,0,2,2,1,2,0,1, 53, 33} }, -{ {1,0,2,2,1,2,0,2, 24, 22} }, -{ {1,0,2,2,1,2,1,0, 31, 12} }, -{ {1,0,2,2,1,2,1,1, 23, 29} }, -{ {1,0,2,2,1,2,1,2, 28, 47} }, -{ {1,0,2,2,1,2,2,0, 40, 6} }, -{ {1,0,2,2,1,2,2,1, 27, 45} }, -{ {1,0,2,2,1,2,2,2, 8, 24} }, -{ {1,0,2,2,2,0,0,0, 23, 30} }, -{ {1,0,2,2,2,0,0,1, 53, 42} }, -{ {1,0,2,2,2,0,0,2, 27, 38} }, -{ {1,0,2,2,2,0,1,0, 31, 9} }, -{ {1,0,2,2,2,0,1,1, 47, 25} }, -{ {1,0,2,2,2,0,1,2, 40, 7} }, -{ {1,0,2,2,2,0,2,0, 28, 36} }, -{ {1,0,2,2,2,0,2,1, 24, 27} }, -{ {1,0,2,2,2,0,2,2, 8, 25} }, -{ {1,0,2,2,2,1,0,0, 48, 25} }, -{ {1,0,2,2,2,1,0,1, 53, 31} }, -{ {1,0,2,2,2,1,0,2, 30, 7} }, -{ {1,0,2,2,2,1,1,0, 50, 6} }, -{ {1,0,2,2,2,1,1,1, 27, 5} }, -{ {1,0,2,2,2,1,1,2, 38, 7} }, -{ {1,0,2,2,2,1,2,0, 36, 45} }, -{ {1,0,2,2,2,1,2,1, 23, 27} }, -{ {1,0,2,2,2,1,2,2, 6, 25} }, -{ {1,0,2,2,2,2,0,0, 45, 5} }, -{ {1,0,2,2,2,2,0,1, 52, 6} }, -{ {1,0,2,2,2,2,0,2, 21, 22} }, -{ {1,0,2,2,2,2,1,0, 49, 7} }, -{ {1,0,2,2,2,2,1,1, 45, 4} }, -{ {1,0,2,2,2,2,1,2, 35, 22} }, -{ {1,0,2,2,2,2,2,0, 35, 27} }, -{ {1,0,2,2,2,2,2,1, 21, 27} }, -{ {1,0,2,2,2,2,2,2, 3, 5} }, -{ {1,1,0,0,0,0,0,0, 2, 4} }, -{ {1,1,0,0,0,0,0,1, 20, 27} }, -{ {1,1,0,0,0,0,0,2, 34, 27} }, -{ {1,1,0,0,0,0,1,0, 20, 22} }, -{ {1,1,0,0,0,0,1,1, 44, 6} }, -{ {1,1,0,0,0,0,1,2, 45, 0} }, -{ {1,1,0,0,0,0,2,0, 34, 22} }, -{ {1,1,0,0,0,0,2,1, 45, 1} }, -{ {1,1,0,0,0,0,2,2, 46, 0} }, -{ {1,1,0,0,0,1,0,0, 5, 25} }, -{ {1,1,0,0,0,1,0,1, 22, 27} }, -{ {1,1,0,0,0,1,0,2, 28, 20} }, -{ {1,1,0,0,0,1,1,0, 25, 7} }, -{ {1,1,0,0,0,1,1,1, 20, 9} }, -{ {1,1,0,0,0,1,1,2, 27, 20} }, -{ {1,1,0,0,0,1,2,0, 26, 20} }, -{ {1,1,0,0,0,1,2,1, 23, 43} }, -{ {1,1,0,0,0,1,2,2, 29, 20} }, -{ {1,1,0,0,0,2,0,0, 8, 44} }, -{ {1,1,0,0,0,2,0,1, 23, 45} }, -{ {1,1,0,0,0,2,0,2, 37, 27} }, -{ {1,1,0,0,0,2,1,0, 27, 7} }, -{ {1,1,0,0,0,2,1,1, 45, 6} }, -{ {1,1,0,0,0,2,1,2, 47, 17} }, -{ {1,1,0,0,0,2,2,0, 40, 38} }, -{ {1,1,0,0,0,2,2,1, 48, 16} }, -{ {1,1,0,0,0,2,2,2, 29, 5} }, -{ {1,1,0,0,1,0,0,0, 5, 24} }, -{ {1,1,0,0,1,0,0,1, 25, 6} }, -{ {1,1,0,0,1,0,0,2, 26, 21} }, -{ {1,1,0,0,1,0,1,0, 22, 22} }, -{ {1,1,0,0,1,0,1,1, 20, 12} }, -{ {1,1,0,0,1,0,1,2, 23, 32} }, -{ {1,1,0,0,1,0,2,0, 28, 21} }, -{ {1,1,0,0,1,0,2,1, 27, 21} }, -{ {1,1,0,0,1,0,2,2, 29, 21} }, -{ {1,1,0,0,1,1,0,0, 9, 6} }, -{ {1,1,0,0,1,1,0,1, 5, 3} }, -{ {1,1,0,0,1,1,0,2, 10, 21} }, -{ {1,1,0,0,1,1,1,0, 5, 2} }, -{ {1,1,0,0,1,1,1,1, 2, 2} }, -{ {1,1,0,0,1,1,1,2, 8, 33} }, -{ {1,1,0,0,1,1,2,0, 10, 20} }, -{ {1,1,0,0,1,1,2,1, 8, 42} }, -{ {1,1,0,0,1,1,2,2, 11, 20} }, -{ {1,1,0,0,1,2,0,0, 10, 6} }, -{ {1,1,0,0,1,2,0,1, 26, 6} }, -{ {1,1,0,0,1,2,0,2, 43, 6} }, -{ {1,1,0,0,1,2,1,0, 28, 7} }, -{ {1,1,0,0,1,2,1,1, 34, 12} }, -{ {1,1,0,0,1,2,1,2, 37, 12} }, -{ {1,1,0,0,1,2,2,0, 42, 38} }, -{ {1,1,0,0,1,2,2,1, 40, 32} }, -{ {1,1,0,0,1,2,2,2, 41, 32} }, -{ {1,1,0,0,2,0,0,0, 8, 39} }, -{ {1,1,0,0,2,0,0,1, 27, 6} }, -{ {1,1,0,0,2,0,0,2, 40, 45} }, -{ {1,1,0,0,2,0,1,0, 23, 38} }, -{ {1,1,0,0,2,0,1,1, 45, 7} }, -{ {1,1,0,0,2,0,1,2, 48, 17} }, -{ {1,1,0,0,2,0,2,0, 37, 22} }, -{ {1,1,0,0,2,0,2,1, 47, 16} }, -{ {1,1,0,0,2,0,2,2, 29, 4} }, -{ {1,1,0,0,2,1,0,0, 10, 7} }, -{ {1,1,0,0,2,1,0,1, 28, 6} }, -{ {1,1,0,0,2,1,0,2, 42, 45} }, -{ {1,1,0,0,2,1,1,0, 26, 7} }, -{ {1,1,0,0,2,1,1,1, 34, 9} }, -{ {1,1,0,0,2,1,1,2, 40, 43} }, -{ {1,1,0,0,2,1,2,0, 43, 7} }, -{ {1,1,0,0,2,1,2,1, 37, 9} }, -{ {1,1,0,0,2,1,2,2, 41, 43} }, -{ {1,1,0,0,2,2,0,0, 11, 6} }, -{ {1,1,0,0,2,2,0,1, 29, 6} }, -{ {1,1,0,0,2,2,0,2, 41, 45} }, -{ {1,1,0,0,2,2,1,0, 29, 7} }, -{ {1,1,0,0,2,2,1,1, 46, 6} }, -{ {1,1,0,0,2,2,1,2, 29, 10} }, -{ {1,1,0,0,2,2,2,0, 41, 38} }, -{ {1,1,0,0,2,2,2,1, 29, 11} }, -{ {1,1,0,0,2,2,2,2, 11, 4} }, -{ {1,1,0,1,0,0,0,0, 5, 4} }, -{ {1,1,0,1,0,0,0,1, 22, 28} }, -{ {1,1,0,1,0,0,0,2, 28, 1} }, -{ {1,1,0,1,0,0,1,0, 25, 10} }, -{ {1,1,0,1,0,0,1,1, 20, 23} }, -{ {1,1,0,1,0,0,1,2, 27, 1} }, -{ {1,1,0,1,0,0,2,0, 26, 1} }, -{ {1,1,0,1,0,0,2,1, 23, 14} }, -{ {1,1,0,1,0,0,2,2, 29, 1} }, -{ {1,1,0,1,0,1,0,0, 14, 4} }, -{ {1,1,0,1,0,1,0,1, 5, 8} }, -{ {1,1,0,1,0,1,0,2, 17, 1} }, -{ {1,1,0,1,0,1,1,0, 13, 1} }, -{ {1,1,0,1,0,1,1,1, 4, 8} }, -{ {1,1,0,1,0,1,1,2, 16, 1} }, -{ {1,1,0,1,0,1,2,0, 15, 1} }, -{ {1,1,0,1,0,1,2,1, 6, 8} }, -{ {1,1,0,1,0,1,2,2, 18, 1} }, -{ {1,1,0,1,0,2,0,0, 17, 27} }, -{ {1,1,0,1,0,2,0,1, 28, 27} }, -{ {1,1,0,1,0,2,0,2, 41, 27} }, -{ {1,1,0,1,0,2,1,0, 38, 1} }, -{ {1,1,0,1,0,2,1,1, 35, 23} }, -{ {1,1,0,1,0,2,1,2, 40, 1} }, -{ {1,1,0,1,0,2,2,0, 39, 1} }, -{ {1,1,0,1,0,2,2,1, 36, 14} }, -{ {1,1,0,1,0,2,2,2, 42, 1} }, -{ {1,1,0,1,1,0,0,0, 22, 5} }, -{ {1,1,0,1,1,0,0,1, 20, 1} }, -{ {1,1,0,1,1,0,0,2, 23, 21} }, -{ {1,1,0,1,1,0,1,0, 20, 21} }, -{ {1,1,0,1,1,0,1,1, 19, 1} }, -{ {1,1,0,1,1,0,1,2, 21, 21} }, -{ {1,1,0,1,1,0,2,0, 23, 1} }, -{ {1,1,0,1,1,0,2,1, 21, 1} }, -{ {1,1,0,1,1,0,2,2, 24, 1} }, -{ {1,1,0,1,1,1,0,0, 5, 20} }, -{ {1,1,0,1,1,1,0,1, 2, 9} }, -{ {1,1,0,1,1,1,0,2, 8, 20} }, -{ {1,1,0,1,1,1,1,0, 4, 2} }, -{ {1,1,0,1,1,1,1,1, 1, 3} }, -{ {1,1,0,1,1,1,1,2, 7, 20} }, -{ {1,1,0,1,1,1,2,0, 6, 20} }, -{ {1,1,0,1,1,1,2,1, 3, 8} }, -{ {1,1,0,1,1,1,2,2, 8, 43} }, -{ {1,1,0,1,1,2,0,0, 28, 44} }, -{ {1,1,0,1,1,2,0,1, 34, 1} }, -{ {1,1,0,1,1,2,0,2, 37, 1} }, -{ {1,1,0,1,1,2,1,0, 35, 21} }, -{ {1,1,0,1,1,2,1,1, 33, 1} }, -{ {1,1,0,1,1,2,1,2, 34, 21} }, -{ {1,1,0,1,1,2,2,0, 36, 1} }, -{ {1,1,0,1,1,2,2,1, 35, 1} }, -{ {1,1,0,1,1,2,2,2, 28, 30} }, -{ {1,1,0,1,2,0,0,0, 28, 14} }, -{ {1,1,0,1,2,0,0,1, 23, 34} }, -{ {1,1,0,1,2,0,0,2, 31, 1} }, -{ {1,1,0,1,2,0,1,0, 27, 14} }, -{ {1,1,0,1,2,0,1,1, 21, 23} }, -{ {1,1,0,1,2,0,1,2, 30, 1} }, -{ {1,1,0,1,2,0,2,0, 29, 14} }, -{ {1,1,0,1,2,0,2,1, 24, 14} }, -{ {1,1,0,1,2,0,2,2, 32, 1} }, -{ {1,1,0,1,2,1,0,0, 17, 14} }, -{ {1,1,0,1,2,1,0,1, 8, 35} }, -{ {1,1,0,1,2,1,0,2, 18, 8} }, -{ {1,1,0,1,2,1,1,0, 16, 14} }, -{ {1,1,0,1,2,1,1,1, 7, 22} }, -{ {1,1,0,1,2,1,1,2, 16, 8} }, -{ {1,1,0,1,2,1,2,0, 18, 14} }, -{ {1,1,0,1,2,1,2,1, 8, 8} }, -{ {1,1,0,1,2,1,2,2, 17, 8} }, -{ {1,1,0,1,2,2,0,0, 41, 44} }, -{ {1,1,0,1,2,2,0,1, 37, 14} }, -{ {1,1,0,1,2,2,0,2, 43, 1} }, -{ {1,1,0,1,2,2,1,0, 40, 14} }, -{ {1,1,0,1,2,2,1,1, 34, 23} }, -{ {1,1,0,1,2,2,1,2, 26, 10} }, -{ {1,1,0,1,2,2,2,0, 42, 14} }, -{ {1,1,0,1,2,2,2,1, 28, 11} }, -{ {1,1,0,1,2,2,2,2, 10, 10} }, -{ {1,1,0,2,0,0,0,0, 8, 29} }, -{ {1,1,0,2,0,0,0,1, 23, 28} }, -{ {1,1,0,2,0,0,0,2, 37, 46} }, -{ {1,1,0,2,0,0,1,0, 27, 10} }, -{ {1,1,0,2,0,0,1,1, 45, 2} }, -{ {1,1,0,2,0,0,1,2, 47, 2} }, -{ {1,1,0,2,0,0,2,0, 40, 31} }, -{ {1,1,0,2,0,0,2,1, 48, 3} }, -{ {1,1,0,2,0,0,2,2, 29, 24} }, -{ {1,1,0,2,0,1,0,0, 17, 29} }, -{ {1,1,0,2,0,1,0,1, 28, 46} }, -{ {1,1,0,2,0,1,0,2, 41, 46} }, -{ {1,1,0,2,0,1,1,0, 38, 20} }, -{ {1,1,0,2,0,1,1,1, 35, 9} }, -{ {1,1,0,2,0,1,1,2, 40, 20} }, -{ {1,1,0,2,0,1,2,0, 39, 20} }, -{ {1,1,0,2,0,1,2,1, 36, 43} }, -{ {1,1,0,2,0,1,2,2, 42, 20} }, -{ {1,1,0,2,0,2,0,0, 18, 4} }, -{ {1,1,0,2,0,2,0,1, 31, 27} }, -{ {1,1,0,2,0,2,0,2, 43, 27} }, -{ {1,1,0,2,0,2,1,0, 50, 0} }, -{ {1,1,0,2,0,2,1,1, 49, 0} }, -{ {1,1,0,2,0,2,1,2, 31, 22} }, -{ {1,1,0,2,0,2,2,0, 51, 0} }, -{ {1,1,0,2,0,2,2,1, 50, 1} }, -{ {1,1,0,2,0,2,2,2, 18, 5} }, -{ {1,1,0,2,1,0,0,0, 28, 32} }, -{ {1,1,0,2,1,0,0,1, 27, 32} }, -{ {1,1,0,2,1,0,0,2, 29, 32} }, -{ {1,1,0,2,1,0,1,0, 23, 12} }, -{ {1,1,0,2,1,0,1,1, 21, 12} }, -{ {1,1,0,2,1,0,1,2, 24, 12} }, -{ {1,1,0,2,1,0,2,0, 31, 21} }, -{ {1,1,0,2,1,0,2,1, 30, 21} }, -{ {1,1,0,2,1,0,2,2, 32, 21} }, -{ {1,1,0,2,1,1,0,0, 10, 2} }, -{ {1,1,0,2,1,1,0,1, 8, 3} }, -{ {1,1,0,2,1,1,0,2, 11, 33} }, -{ {1,1,0,2,1,1,1,0, 6, 2} }, -{ {1,1,0,2,1,1,1,1, 3, 2} }, -{ {1,1,0,2,1,1,1,2, 8, 2} }, -{ {1,1,0,2,1,1,2,0, 12, 3} }, -{ {1,1,0,2,1,1,2,1, 6, 3} }, -{ {1,1,0,2,1,1,2,2, 10, 3} }, -{ {1,1,0,2,1,2,0,0, 42, 25} }, -{ {1,1,0,2,1,2,0,1, 40, 21} }, -{ {1,1,0,2,1,2,0,2, 41, 21} }, -{ {1,1,0,2,1,2,1,0, 36, 12} }, -{ {1,1,0,2,1,2,1,1, 35, 12} }, -{ {1,1,0,2,1,2,1,2, 28, 37} }, -{ {1,1,0,2,1,2,2,0, 39, 21} }, -{ {1,1,0,2,1,2,2,1, 38, 21} }, -{ {1,1,0,2,1,2,2,2, 17, 30} }, -{ {1,1,0,2,2,0,0,0, 24, 5} }, -{ {1,1,0,2,2,0,0,1, 53, 44} }, -{ {1,1,0,2,2,0,0,2, 47, 44} }, -{ {1,1,0,2,2,0,1,0, 53, 30} }, -{ {1,1,0,2,2,0,1,1, 52, 0} }, -{ {1,1,0,2,2,0,1,2, 53, 21} }, -{ {1,1,0,2,2,0,2,0, 47, 30} }, -{ {1,1,0,2,2,0,2,1, 53, 1} }, -{ {1,1,0,2,2,0,2,2, 24, 4} }, -{ {1,1,0,2,2,1,0,0, 32, 25} }, -{ {1,1,0,2,2,1,0,1, 24, 9} }, -{ {1,1,0,2,2,1,0,2, 29, 43} }, -{ {1,1,0,2,2,1,1,0, 30, 20} }, -{ {1,1,0,2,2,1,1,1, 21, 9} }, -{ {1,1,0,2,2,1,1,2, 27, 43} }, -{ {1,1,0,2,2,1,2,0, 31, 20} }, -{ {1,1,0,2,2,1,2,1, 23, 9} }, -{ {1,1,0,2,2,1,2,2, 28, 43} }, -{ {1,1,0,2,2,2,0,0, 29, 25} }, -{ {1,1,0,2,2,2,0,1, 47, 20} }, -{ {1,1,0,2,2,2,0,2, 37, 31} }, -{ {1,1,0,2,2,2,1,0, 48, 20} }, -{ {1,1,0,2,2,2,1,1, 45, 3} }, -{ {1,1,0,2,2,2,1,2, 23, 31} }, -{ {1,1,0,2,2,2,2,0, 40, 28} }, -{ {1,1,0,2,2,2,2,1, 27, 11} }, -{ {1,1,0,2,2,2,2,2, 8, 30} }, -{ {1,1,1,0,0,0,0,0, 5, 5} }, -{ {1,1,1,0,0,0,0,1, 25, 11} }, -{ {1,1,1,0,0,0,0,2, 26, 0} }, -{ {1,1,1,0,0,0,1,0, 22, 31} }, -{ {1,1,1,0,0,0,1,1, 20, 26} }, -{ {1,1,1,0,0,0,1,2, 23, 19} }, -{ {1,1,1,0,0,0,2,0, 28, 0} }, -{ {1,1,1,0,0,0,2,1, 27, 0} }, -{ {1,1,1,0,0,0,2,2, 29, 0} }, -{ {1,1,1,0,0,1,0,0, 22, 4} }, -{ {1,1,1,0,0,1,0,1, 20, 20} }, -{ {1,1,1,0,0,1,0,2, 23, 0} }, -{ {1,1,1,0,0,1,1,0, 20, 0} }, -{ {1,1,1,0,0,1,1,1, 19, 0} }, -{ {1,1,1,0,0,1,1,2, 21, 0} }, -{ {1,1,1,0,0,1,2,0, 23, 20} }, -{ {1,1,1,0,0,1,2,1, 21, 20} }, -{ {1,1,1,0,0,1,2,2, 24, 0} }, -{ {1,1,1,0,0,2,0,0, 28, 19} }, -{ {1,1,1,0,0,2,0,1, 27, 19} }, -{ {1,1,1,0,0,2,0,2, 29, 19} }, -{ {1,1,1,0,0,2,1,0, 23, 41} }, -{ {1,1,1,0,0,2,1,1, 21, 26} }, -{ {1,1,1,0,0,2,1,2, 24, 19} }, -{ {1,1,1,0,0,2,2,0, 31, 0} }, -{ {1,1,1,0,0,2,2,1, 30, 0} }, -{ {1,1,1,0,0,2,2,2, 32, 0} }, -{ {1,1,1,0,1,0,0,0, 14, 5} }, -{ {1,1,1,0,1,0,0,1, 13, 0} }, -{ {1,1,1,0,1,0,0,2, 15, 0} }, -{ {1,1,1,0,1,0,1,0, 5, 13} }, -{ {1,1,1,0,1,0,1,1, 4, 13} }, -{ {1,1,1,0,1,0,1,2, 6, 13} }, -{ {1,1,1,0,1,0,2,0, 17, 0} }, -{ {1,1,1,0,1,0,2,1, 16, 0} }, -{ {1,1,1,0,1,0,2,2, 18, 0} }, -{ {1,1,1,0,1,1,0,0, 5, 21} }, -{ {1,1,1,0,1,1,0,1, 4, 3} }, -{ {1,1,1,0,1,1,0,2, 6, 21} }, -{ {1,1,1,0,1,1,1,0, 2, 12} }, -{ {1,1,1,0,1,1,1,1, 1, 2} }, -{ {1,1,1,0,1,1,1,2, 3, 13} }, -{ {1,1,1,0,1,1,2,0, 8, 21} }, -{ {1,1,1,0,1,1,2,1, 7, 21} }, -{ {1,1,1,0,1,1,2,2, 8, 32} }, -{ {1,1,1,0,1,2,0,0, 17, 19} }, -{ {1,1,1,0,1,2,0,1, 16, 19} }, -{ {1,1,1,0,1,2,0,2, 18, 19} }, -{ {1,1,1,0,1,2,1,0, 8, 40} }, -{ {1,1,1,0,1,2,1,1, 7, 27} }, -{ {1,1,1,0,1,2,1,2, 8, 13} }, -{ {1,1,1,0,1,2,2,0, 18, 13} }, -{ {1,1,1,0,1,2,2,1, 16, 13} }, -{ {1,1,1,0,1,2,2,2, 17, 13} }, -{ {1,1,1,0,2,0,0,0, 17, 22} }, -{ {1,1,1,0,2,0,0,1, 38, 0} }, -{ {1,1,1,0,2,0,0,2, 39, 0} }, -{ {1,1,1,0,2,0,1,0, 28, 22} }, -{ {1,1,1,0,2,0,1,1, 35, 26} }, -{ {1,1,1,0,2,0,1,2, 36, 19} }, -{ {1,1,1,0,2,0,2,0, 41, 22} }, -{ {1,1,1,0,2,0,2,1, 40, 0} }, -{ {1,1,1,0,2,0,2,2, 42, 0} }, -{ {1,1,1,0,2,1,0,0, 28, 39} }, -{ {1,1,1,0,2,1,0,1, 35, 20} }, -{ {1,1,1,0,2,1,0,2, 36, 0} }, -{ {1,1,1,0,2,1,1,0, 34, 0} }, -{ {1,1,1,0,2,1,1,1, 33, 0} }, -{ {1,1,1,0,2,1,1,2, 35, 0} }, -{ {1,1,1,0,2,1,2,0, 37, 0} }, -{ {1,1,1,0,2,1,2,1, 34, 20} }, -{ {1,1,1,0,2,1,2,2, 28, 29} }, -{ {1,1,1,0,2,2,0,0, 41, 39} }, -{ {1,1,1,0,2,2,0,1, 40, 19} }, -{ {1,1,1,0,2,2,0,2, 42, 19} }, -{ {1,1,1,0,2,2,1,0, 37, 19} }, -{ {1,1,1,0,2,2,1,1, 34, 26} }, -{ {1,1,1,0,2,2,1,2, 28, 10} }, -{ {1,1,1,0,2,2,2,0, 43, 0} }, -{ {1,1,1,0,2,2,2,1, 26, 11} }, -{ {1,1,1,0,2,2,2,2, 10, 11} }, -{ {1,1,1,1,0,0,0,0, 9, 4} }, -{ {1,1,1,1,0,0,0,1, 5, 15} }, -{ {1,1,1,1,0,0,0,2, 10, 0} }, -{ {1,1,1,1,0,0,1,0, 5, 18} }, -{ {1,1,1,1,0,0,1,1, 2, 6} }, -{ {1,1,1,1,0,0,1,2, 8, 18} }, -{ {1,1,1,1,0,0,2,0, 10, 1} }, -{ {1,1,1,1,0,0,2,1, 8, 15} }, -{ {1,1,1,1,0,0,2,2, 11, 0} }, -{ {1,1,1,1,0,1,0,0, 5, 1} }, -{ {1,1,1,1,0,1,0,1, 2, 15} }, -{ {1,1,1,1,0,1,0,2, 8, 1} }, -{ {1,1,1,1,0,1,1,0, 4, 1} }, -{ {1,1,1,1,0,1,1,1, 1, 7} }, -{ {1,1,1,1,0,1,1,2, 7, 1} }, -{ {1,1,1,1,0,1,2,0, 6, 1} }, -{ {1,1,1,1,0,1,2,1, 3, 14} }, -{ {1,1,1,1,0,1,2,2, 8, 14} }, -{ {1,1,1,1,0,2,0,0, 10, 18} }, -{ {1,1,1,1,0,2,0,1, 8, 16} }, -{ {1,1,1,1,0,2,0,2, 11, 18} }, -{ {1,1,1,1,0,2,1,0, 6, 18} }, -{ {1,1,1,1,0,2,1,1, 3, 6} }, -{ {1,1,1,1,0,2,1,2, 8, 17} }, -{ {1,1,1,1,0,2,2,0, 12, 0} }, -{ {1,1,1,1,0,2,2,1, 6, 15} }, -{ {1,1,1,1,0,2,2,2, 10, 15} }, -{ {1,1,1,1,1,0,0,0, 5, 0} }, -{ {1,1,1,1,1,0,0,1, 4, 0} }, -{ {1,1,1,1,1,0,0,2, 6, 0} }, -{ {1,1,1,1,1,0,1,0, 2, 18} }, -{ {1,1,1,1,1,0,1,1, 1, 6} }, -{ {1,1,1,1,1,0,1,2, 3, 19} }, -{ {1,1,1,1,1,0,2,0, 8, 0} }, -{ {1,1,1,1,1,0,2,1, 7, 0} }, -{ {1,1,1,1,1,0,2,2, 8, 19} }, -{ {1,1,1,1,1,1,0,0, 2, 0} }, -{ {1,1,1,1,1,1,0,1, 1, 1} }, -{ {1,1,1,1,1,1,0,2, 3, 0} }, -{ {1,1,1,1,1,1,1,0, 1, 0} }, -{ {1,1,1,1,1,1,1,1, 0, 0} }, -{ {1,1,1,1,1,1,1,2, 1, 0} }, -{ {1,1,1,1,1,1,2,0, 3, 1} }, -{ {1,1,1,1,1,1,2,1, 1, 1} }, -{ {1,1,1,1,1,1,2,2, 2, 0} }, -{ {1,1,1,1,1,2,0,0, 8, 19} }, -{ {1,1,1,1,1,2,0,1, 7, 16} }, -{ {1,1,1,1,1,2,0,2, 8, 0} }, -{ {1,1,1,1,1,2,1,0, 3, 18} }, -{ {1,1,1,1,1,2,1,1, 1, 6} }, -{ {1,1,1,1,1,2,1,2, 2, 18} }, -{ {1,1,1,1,1,2,2,0, 6, 0} }, -{ {1,1,1,1,1,2,2,1, 4, 0} }, -{ {1,1,1,1,1,2,2,2, 5, 0} }, -{ {1,1,1,1,2,0,0,0, 10, 15} }, -{ {1,1,1,1,2,0,0,1, 6, 15} }, -{ {1,1,1,1,2,0,0,2, 12, 1} }, -{ {1,1,1,1,2,0,1,0, 8, 17} }, -{ {1,1,1,1,2,0,1,1, 3, 7} }, -{ {1,1,1,1,2,0,1,2, 6, 18} }, -{ {1,1,1,1,2,0,2,0, 11, 15} }, -{ {1,1,1,1,2,0,2,1, 8, 16} }, -{ {1,1,1,1,2,0,2,2, 10, 18} }, -{ {1,1,1,1,2,1,0,0, 8, 14} }, -{ {1,1,1,1,2,1,0,1, 3, 15} }, -{ {1,1,1,1,2,1,0,2, 6, 1} }, -{ {1,1,1,1,2,1,1,0, 7, 17} }, -{ {1,1,1,1,2,1,1,1, 1, 7} }, -{ {1,1,1,1,2,1,1,2, 4, 1} }, -{ {1,1,1,1,2,1,2,0, 8, 1} }, -{ {1,1,1,1,2,1,2,1, 2, 15} }, -{ {1,1,1,1,2,1,2,2, 5, 1} }, -{ {1,1,1,1,2,2,0,0, 11, 16} }, -{ {1,1,1,1,2,2,0,1, 8, 15} }, -{ {1,1,1,1,2,2,0,2, 10, 1} }, -{ {1,1,1,1,2,2,1,0, 8, 18} }, -{ {1,1,1,1,2,2,1,1, 2, 6} }, -{ {1,1,1,1,2,2,1,2, 5, 18} }, -{ {1,1,1,1,2,2,2,0, 10, 0} }, -{ {1,1,1,1,2,2,2,1, 5, 15} }, -{ {1,1,1,1,2,2,2,2, 9, 0} }, -{ {1,1,1,2,0,0,0,0, 10, 11} }, -{ {1,1,1,2,0,0,0,1, 26, 11} }, -{ {1,1,1,2,0,0,0,2, 43, 11} }, -{ {1,1,1,2,0,0,1,0, 28, 10} }, -{ {1,1,1,2,0,0,1,1, 34, 26} }, -{ {1,1,1,2,0,0,1,2, 37, 41} }, -{ {1,1,1,2,0,0,2,0, 42, 31} }, -{ {1,1,1,2,0,0,2,1, 40, 19} }, -{ {1,1,1,2,0,0,2,2, 41, 19} }, -{ {1,1,1,2,0,1,0,0, 28, 29} }, -{ {1,1,1,2,0,1,0,1, 34, 20} }, -{ {1,1,1,2,0,1,0,2, 37, 20} }, -{ {1,1,1,2,0,1,1,0, 35, 0} }, -{ {1,1,1,2,0,1,1,1, 33, 5} }, -{ {1,1,1,2,0,1,1,2, 34, 0} }, -{ {1,1,1,2,0,1,2,0, 36, 20} }, -{ {1,1,1,2,0,1,2,1, 35, 20} }, -{ {1,1,1,2,0,1,2,2, 28, 39} }, -{ {1,1,1,2,0,2,0,0, 42, 4} }, -{ {1,1,1,2,0,2,0,1, 40, 0} }, -{ {1,1,1,2,0,2,0,2, 41, 0} }, -{ {1,1,1,2,0,2,1,0, 36, 41} }, -{ {1,1,1,2,0,2,1,1, 35, 26} }, -{ {1,1,1,2,0,2,1,2, 28, 22} }, -{ {1,1,1,2,0,2,2,0, 39, 0} }, -{ {1,1,1,2,0,2,2,1, 38, 0} }, -{ {1,1,1,2,0,2,2,2, 17, 22} }, -{ {1,1,1,2,1,0,0,0, 17, 13} }, -{ {1,1,1,2,1,0,0,1, 16, 13} }, -{ {1,1,1,2,1,0,0,2, 18, 13} }, -{ {1,1,1,2,1,0,1,0, 8, 13} }, -{ {1,1,1,2,1,0,1,1, 7, 13} }, -{ {1,1,1,2,1,0,1,2, 8, 40} }, -{ {1,1,1,2,1,0,2,0, 18, 19} }, -{ {1,1,1,2,1,0,2,1, 16, 19} }, -{ {1,1,1,2,1,0,2,2, 17, 19} }, -{ {1,1,1,2,1,1,0,0, 8, 32} }, -{ {1,1,1,2,1,1,0,1, 7, 3} }, -{ {1,1,1,2,1,1,0,2, 8, 21} }, -{ {1,1,1,2,1,1,1,0, 3, 12} }, -{ {1,1,1,2,1,1,1,1, 1, 2} }, -{ {1,1,1,2,1,1,1,2, 2, 12} }, -{ {1,1,1,2,1,1,2,0, 6, 21} }, -{ {1,1,1,2,1,1,2,1, 4, 3} }, -{ {1,1,1,2,1,1,2,2, 5, 21} }, -{ {1,1,1,2,1,2,0,0, 18, 0} }, -{ {1,1,1,2,1,2,0,1, 16, 0} }, -{ {1,1,1,2,1,2,0,2, 17, 0} }, -{ {1,1,1,2,1,2,1,0, 6, 13} }, -{ {1,1,1,2,1,2,1,1, 4, 13} }, -{ {1,1,1,2,1,2,1,2, 5, 13} }, -{ {1,1,1,2,1,2,2,0, 15, 0} }, -{ {1,1,1,2,1,2,2,1, 13, 0} }, -{ {1,1,1,2,1,2,2,2, 14, 0} }, -{ {1,1,1,2,2,0,0,0, 32, 5} }, -{ {1,1,1,2,2,0,0,1, 30, 0} }, -{ {1,1,1,2,2,0,0,2, 31, 0} }, -{ {1,1,1,2,2,0,1,0, 24, 19} }, -{ {1,1,1,2,2,0,1,1, 21, 26} }, -{ {1,1,1,2,2,0,1,2, 23, 41} }, -{ {1,1,1,2,2,0,2,0, 29, 19} }, -{ {1,1,1,2,2,0,2,1, 27, 19} }, -{ {1,1,1,2,2,0,2,2, 28, 19} }, -{ {1,1,1,2,2,1,0,0, 24, 0} }, -{ {1,1,1,2,2,1,0,1, 21, 20} }, -{ {1,1,1,2,2,1,0,2, 23, 20} }, -{ {1,1,1,2,2,1,1,0, 21, 0} }, -{ {1,1,1,2,2,1,1,1, 19, 0} }, -{ {1,1,1,2,2,1,1,2, 20, 0} }, -{ {1,1,1,2,2,1,2,0, 23, 0} }, -{ {1,1,1,2,2,1,2,1, 20, 20} }, -{ {1,1,1,2,2,1,2,2, 22, 0} }, -{ {1,1,1,2,2,2,0,0, 29, 0} }, -{ {1,1,1,2,2,2,0,1, 27, 0} }, -{ {1,1,1,2,2,2,0,2, 28, 0} }, -{ {1,1,1,2,2,2,1,0, 23, 19} }, -{ {1,1,1,2,2,2,1,1, 20, 26} }, -{ {1,1,1,2,2,2,1,2, 22, 19} }, -{ {1,1,1,2,2,2,2,0, 26, 0} }, -{ {1,1,1,2,2,2,2,1, 25, 0} }, -{ {1,1,1,2,2,2,2,2, 5, 5} }, -{ {1,1,2,0,0,0,0,0, 8, 30} }, -{ {1,1,2,0,0,0,0,1, 27, 11} }, -{ {1,1,2,0,0,0,0,2, 40, 28} }, -{ {1,1,2,0,0,0,1,0, 23, 31} }, -{ {1,1,2,0,0,0,1,1, 45, 3} }, -{ {1,1,2,0,0,0,1,2, 48, 2} }, -{ {1,1,2,0,0,0,2,0, 37, 37} }, -{ {1,1,2,0,0,0,2,1, 47, 3} }, -{ {1,1,2,0,0,0,2,2, 29, 25} }, -{ {1,1,2,0,0,1,0,0, 28, 43} }, -{ {1,1,2,0,0,1,0,1, 23, 9} }, -{ {1,1,2,0,0,1,0,2, 31, 20} }, -{ {1,1,2,0,0,1,1,0, 27, 43} }, -{ {1,1,2,0,0,1,1,1, 21, 9} }, -{ {1,1,2,0,0,1,1,2, 30, 20} }, -{ {1,1,2,0,0,1,2,0, 29, 43} }, -{ {1,1,2,0,0,1,2,1, 24, 9} }, -{ {1,1,2,0,0,1,2,2, 32, 20} }, -{ {1,1,2,0,0,2,0,0, 24, 4} }, -{ {1,1,2,0,0,2,0,1, 53, 29} }, -{ {1,1,2,0,0,2,0,2, 47, 29} }, -{ {1,1,2,0,0,2,1,0, 53, 39} }, -{ {1,1,2,0,0,2,1,1, 52, 1} }, -{ {1,1,2,0,0,2,1,2, 53, 0} }, -{ {1,1,2,0,0,2,2,0, 47, 39} }, -{ {1,1,2,0,0,2,2,1, 53, 20} }, -{ {1,1,2,0,0,2,2,2, 24, 5} }, -{ {1,1,2,0,1,0,0,0, 17, 30} }, -{ {1,1,2,0,1,0,0,1, 38, 21} }, -{ {1,1,2,0,1,0,0,2, 39, 21} }, -{ {1,1,2,0,1,0,1,0, 28, 37} }, -{ {1,1,2,0,1,0,1,1, 35, 12} }, -{ {1,1,2,0,1,0,1,2, 36, 32} }, -{ {1,1,2,0,1,0,2,0, 41, 37} }, -{ {1,1,2,0,1,0,2,1, 40, 21} }, -{ {1,1,2,0,1,0,2,2, 42, 21} }, -{ {1,1,2,0,1,1,0,0, 10, 3} }, -{ {1,1,2,0,1,1,0,1, 6, 3} }, -{ {1,1,2,0,1,1,0,2, 12, 2} }, -{ {1,1,2,0,1,1,1,0, 8, 2} }, -{ {1,1,2,0,1,1,1,1, 3, 3} }, -{ {1,1,2,0,1,1,1,2, 6, 2} }, -{ {1,1,2,0,1,1,2,0, 11, 42} }, -{ {1,1,2,0,1,1,2,1, 8, 3} }, -{ {1,1,2,0,1,1,2,2, 10, 2} }, -{ {1,1,2,0,1,2,0,0, 32, 24} }, -{ {1,1,2,0,1,2,0,1, 30, 21} }, -{ {1,1,2,0,1,2,0,2, 31, 21} }, -{ {1,1,2,0,1,2,1,0, 24, 12} }, -{ {1,1,2,0,1,2,1,1, 21, 12} }, -{ {1,1,2,0,1,2,1,2, 23, 12} }, -{ {1,1,2,0,1,2,2,0, 29, 32} }, -{ {1,1,2,0,1,2,2,1, 27, 32} }, -{ {1,1,2,0,1,2,2,2, 28, 32} }, -{ {1,1,2,0,2,0,0,0, 18, 5} }, -{ {1,1,2,0,2,0,0,1, 50, 1} }, -{ {1,1,2,0,2,0,0,2, 51, 1} }, -{ {1,1,2,0,2,0,1,0, 31, 22} }, -{ {1,1,2,0,2,0,1,1, 49, 1} }, -{ {1,1,2,0,2,0,1,2, 50, 0} }, -{ {1,1,2,0,2,0,2,0, 43, 22} }, -{ {1,1,2,0,2,0,2,1, 31, 27} }, -{ {1,1,2,0,2,0,2,2, 18, 4} }, -{ {1,1,2,0,2,1,0,0, 42, 24} }, -{ {1,1,2,0,2,1,0,1, 36, 9} }, -{ {1,1,2,0,2,1,0,2, 39, 20} }, -{ {1,1,2,0,2,1,1,0, 40, 20} }, -{ {1,1,2,0,2,1,1,1, 35, 9} }, -{ {1,1,2,0,2,1,1,2, 38, 20} }, -{ {1,1,2,0,2,1,2,0, 41, 20} }, -{ {1,1,2,0,2,1,2,1, 28, 46} }, -{ {1,1,2,0,2,1,2,2, 17, 29} }, -{ {1,1,2,0,2,2,0,0, 29, 24} }, -{ {1,1,2,0,2,2,0,1, 48, 21} }, -{ {1,1,2,0,2,2,0,2, 40, 31} }, -{ {1,1,2,0,2,2,1,0, 47, 21} }, -{ {1,1,2,0,2,2,1,1, 45, 2} }, -{ {1,1,2,0,2,2,1,2, 27, 10} }, -{ {1,1,2,0,2,2,2,0, 37, 28} }, -{ {1,1,2,0,2,2,2,1, 23, 28} }, -{ {1,1,2,0,2,2,2,2, 8, 29} }, -{ {1,1,2,1,0,0,0,0, 10, 10} }, -{ {1,1,2,1,0,0,0,1, 28, 11} }, -{ {1,1,2,1,0,0,0,2, 42, 28} }, -{ {1,1,2,1,0,0,1,0, 26, 10} }, -{ {1,1,2,1,0,0,1,1, 34, 23} }, -{ {1,1,2,1,0,0,1,2, 40, 14} }, -{ {1,1,2,1,0,0,2,0, 43, 10} }, -{ {1,1,2,1,0,0,2,1, 37, 34} }, -{ {1,1,2,1,0,0,2,2, 41, 14} }, -{ {1,1,2,1,0,1,0,0, 17, 8} }, -{ {1,1,2,1,0,1,0,1, 8, 8} }, -{ {1,1,2,1,0,1,0,2, 18, 14} }, -{ {1,1,2,1,0,1,1,0, 16, 8} }, -{ {1,1,2,1,0,1,1,1, 7, 8} }, -{ {1,1,2,1,0,1,1,2, 16, 14} }, -{ {1,1,2,1,0,1,2,0, 18, 8} }, -{ {1,1,2,1,0,1,2,1, 8, 35} }, -{ {1,1,2,1,0,1,2,2, 17, 14} }, -{ {1,1,2,1,0,2,0,0, 32, 4} }, -{ {1,1,2,1,0,2,0,1, 24, 14} }, -{ {1,1,2,1,0,2,0,2, 29, 14} }, -{ {1,1,2,1,0,2,1,0, 30, 1} }, -{ {1,1,2,1,0,2,1,1, 21, 23} }, -{ {1,1,2,1,0,2,1,2, 27, 14} }, -{ {1,1,2,1,0,2,2,0, 31, 1} }, -{ {1,1,2,1,0,2,2,1, 23, 34} }, -{ {1,1,2,1,0,2,2,2, 28, 14} }, -{ {1,1,2,1,1,0,0,0, 28, 30} }, -{ {1,1,2,1,1,0,0,1, 35, 1} }, -{ {1,1,2,1,1,0,0,2, 36, 21} }, -{ {1,1,2,1,1,0,1,0, 34, 21} }, -{ {1,1,2,1,1,0,1,1, 33, 4} }, -{ {1,1,2,1,1,0,1,2, 35, 21} }, -{ {1,1,2,1,1,0,2,0, 37, 21} }, -{ {1,1,2,1,1,0,2,1, 34, 1} }, -{ {1,1,2,1,1,0,2,2, 28, 44} }, -{ {1,1,2,1,1,1,0,0, 8, 43} }, -{ {1,1,2,1,1,1,0,1, 3, 9} }, -{ {1,1,2,1,1,1,0,2, 6, 20} }, -{ {1,1,2,1,1,1,1,0, 7, 2} }, -{ {1,1,2,1,1,1,1,1, 1, 3} }, -{ {1,1,2,1,1,1,1,2, 4, 2} }, -{ {1,1,2,1,1,1,2,0, 8, 20} }, -{ {1,1,2,1,1,1,2,1, 2, 9} }, -{ {1,1,2,1,1,1,2,2, 5, 20} }, -{ {1,1,2,1,1,2,0,0, 24, 1} }, -{ {1,1,2,1,1,2,0,1, 21, 1} }, -{ {1,1,2,1,1,2,0,2, 23, 1} }, -{ {1,1,2,1,1,2,1,0, 21, 21} }, -{ {1,1,2,1,1,2,1,1, 19, 1} }, -{ {1,1,2,1,1,2,1,2, 20, 21} }, -{ {1,1,2,1,1,2,2,0, 23, 21} }, -{ {1,1,2,1,1,2,2,1, 20, 1} }, -{ {1,1,2,1,1,2,2,2, 22, 1} }, -{ {1,1,2,1,2,0,0,0, 42, 5} }, -{ {1,1,2,1,2,0,0,1, 36, 34} }, -{ {1,1,2,1,2,0,0,2, 39, 1} }, -{ {1,1,2,1,2,0,1,0, 40, 1} }, -{ {1,1,2,1,2,0,1,1, 35, 23} }, -{ {1,1,2,1,2,0,1,2, 38, 1} }, -{ {1,1,2,1,2,0,2,0, 41, 1} }, -{ {1,1,2,1,2,0,2,1, 28, 27} }, -{ {1,1,2,1,2,0,2,2, 17, 27} }, -{ {1,1,2,1,2,1,0,0, 18, 1} }, -{ {1,1,2,1,2,1,0,1, 6, 8} }, -{ {1,1,2,1,2,1,0,2, 15, 1} }, -{ {1,1,2,1,2,1,1,0, 16, 1} }, -{ {1,1,2,1,2,1,1,1, 4, 8} }, -{ {1,1,2,1,2,1,1,2, 13, 1} }, -{ {1,1,2,1,2,1,2,0, 17, 1} }, -{ {1,1,2,1,2,1,2,1, 5, 8} }, -{ {1,1,2,1,2,1,2,2, 14, 1} }, -{ {1,1,2,1,2,2,0,0, 29, 1} }, -{ {1,1,2,1,2,2,0,1, 23, 14} }, -{ {1,1,2,1,2,2,0,2, 26, 1} }, -{ {1,1,2,1,2,2,1,0, 27, 1} }, -{ {1,1,2,1,2,2,1,1, 20, 23} }, -{ {1,1,2,1,2,2,1,2, 25, 1} }, -{ {1,1,2,1,2,2,2,0, 28, 1} }, -{ {1,1,2,1,2,2,2,1, 22, 14} }, -{ {1,1,2,1,2,2,2,2, 5, 4} }, -{ {1,1,2,2,0,0,0,0, 11, 10} }, -{ {1,1,2,2,0,0,0,1, 29, 11} }, -{ {1,1,2,2,0,0,0,2, 41, 28} }, -{ {1,1,2,2,0,0,1,0, 29, 10} }, -{ {1,1,2,2,0,0,1,1, 46, 2} }, -{ {1,1,2,2,0,0,1,2, 29, 7} }, -{ {1,1,2,2,0,0,2,0, 41, 31} }, -{ {1,1,2,2,0,0,2,1, 29, 6} }, -{ {1,1,2,2,0,0,2,2, 11, 24} }, -{ {1,1,2,2,0,1,0,0, 41, 29} }, -{ {1,1,2,2,0,1,0,1, 37, 43} }, -{ {1,1,2,2,0,1,0,2, 43, 20} }, -{ {1,1,2,2,0,1,1,0, 40, 43} }, -{ {1,1,2,2,0,1,1,1, 34, 9} }, -{ {1,1,2,2,0,1,1,2, 26, 7} }, -{ {1,1,2,2,0,1,2,0, 42, 43} }, -{ {1,1,2,2,0,1,2,1, 28, 6} }, -{ {1,1,2,2,0,1,2,2, 10, 7} }, -{ {1,1,2,2,0,2,0,0, 29, 4} }, -{ {1,1,2,2,0,2,0,1, 47, 1} }, -{ {1,1,2,2,0,2,0,2, 37, 38} }, -{ {1,1,2,2,0,2,1,0, 48, 1} }, -{ {1,1,2,2,0,2,1,1, 45, 7} }, -{ {1,1,2,2,0,2,1,2, 23, 38} }, -{ {1,1,2,2,0,2,2,0, 40, 45} }, -{ {1,1,2,2,0,2,2,1, 27, 6} }, -{ {1,1,2,2,0,2,2,2, 8, 39} }, -{ {1,1,2,2,1,0,0,0, 41, 30} }, -{ {1,1,2,2,1,0,0,1, 40, 32} }, -{ {1,1,2,2,1,0,0,2, 42, 32} }, -{ {1,1,2,2,1,0,1,0, 37, 32} }, -{ {1,1,2,2,1,0,1,1, 34, 12} }, -{ {1,1,2,2,1,0,1,2, 28, 7} }, -{ {1,1,2,2,1,0,2,0, 43, 21} }, -{ {1,1,2,2,1,0,2,1, 26, 6} }, -{ {1,1,2,2,1,0,2,2, 10, 6} }, -{ {1,1,2,2,1,1,0,0, 11, 2} }, -{ {1,1,2,2,1,1,0,1, 8, 42} }, -{ {1,1,2,2,1,1,0,2, 10, 20} }, -{ {1,1,2,2,1,1,1,0, 8, 33} }, -{ {1,1,2,2,1,1,1,1, 2, 2} }, -{ {1,1,2,2,1,1,1,2, 5, 2} }, -{ {1,1,2,2,1,1,2,0, 10, 21} }, -{ {1,1,2,2,1,1,2,1, 5, 3} }, -{ {1,1,2,2,1,1,2,2, 9, 2} }, -{ {1,1,2,2,1,2,0,0, 29, 21} }, -{ {1,1,2,2,1,2,0,1, 27, 21} }, -{ {1,1,2,2,1,2,0,2, 28, 21} }, -{ {1,1,2,2,1,2,1,0, 23, 32} }, -{ {1,1,2,2,1,2,1,1, 20, 12} }, -{ {1,1,2,2,1,2,1,2, 22, 12} }, -{ {1,1,2,2,1,2,2,0, 26, 21} }, -{ {1,1,2,2,1,2,2,1, 25, 21} }, -{ {1,1,2,2,1,2,2,2, 5, 24} }, -{ {1,1,2,2,2,0,0,0, 29, 5} }, -{ {1,1,2,2,2,0,0,1, 48, 0} }, -{ {1,1,2,2,2,0,0,2, 40, 38} }, -{ {1,1,2,2,2,0,1,0, 47, 0} }, -{ {1,1,2,2,2,0,1,1, 45, 6} }, -{ {1,1,2,2,2,0,1,2, 27, 7} }, -{ {1,1,2,2,2,0,2,0, 37, 45} }, -{ {1,1,2,2,2,0,2,1, 23, 45} }, -{ {1,1,2,2,2,0,2,2, 8, 44} }, -{ {1,1,2,2,2,1,0,0, 29, 20} }, -{ {1,1,2,2,2,1,0,1, 23, 43} }, -{ {1,1,2,2,2,1,0,2, 26, 20} }, -{ {1,1,2,2,2,1,1,0, 27, 20} }, -{ {1,1,2,2,2,1,1,1, 20, 9} }, -{ {1,1,2,2,2,1,1,2, 25, 20} }, -{ {1,1,2,2,2,1,2,0, 28, 20} }, -{ {1,1,2,2,2,1,2,1, 22, 9} }, -{ {1,1,2,2,2,1,2,2, 5, 25} }, -{ {1,1,2,2,2,2,0,0, 46, 4} }, -{ {1,1,2,2,2,2,0,1, 45, 1} }, -{ {1,1,2,2,2,2,0,2, 34, 22} }, -{ {1,1,2,2,2,2,1,0, 45, 0} }, -{ {1,1,2,2,2,2,1,1, 44, 0} }, -{ {1,1,2,2,2,2,1,2, 20, 22} }, -{ {1,1,2,2,2,2,2,0, 34, 27} }, -{ {1,1,2,2,2,2,2,1, 20, 27} }, -{ {1,1,2,2,2,2,2,2, 2, 4} }, -{ {1,2,0,0,0,0,0,0, 3, 4} }, -{ {1,2,0,0,0,0,0,1, 21, 27} }, -{ {1,2,0,0,0,0,0,2, 35, 27} }, -{ {1,2,0,0,0,0,1,0, 35, 22} }, -{ {1,2,0,0,0,0,1,1, 45, 4} }, -{ {1,2,0,0,0,0,1,2, 49, 6} }, -{ {1,2,0,0,0,0,2,0, 21, 22} }, -{ {1,2,0,0,0,0,2,1, 52, 7} }, -{ {1,2,0,0,0,0,2,2, 45, 5} }, -{ {1,2,0,0,0,1,0,0, 6, 25} }, -{ {1,2,0,0,0,1,0,1, 23, 27} }, -{ {1,2,0,0,0,1,0,2, 36, 27} }, -{ {1,2,0,0,0,1,1,0, 38, 7} }, -{ {1,2,0,0,0,1,1,1, 27, 5} }, -{ {1,2,0,0,0,1,1,2, 50, 6} }, -{ {1,2,0,0,0,1,2,0, 30, 7} }, -{ {1,2,0,0,0,1,2,1, 53, 17} }, -{ {1,2,0,0,0,1,2,2, 48, 7} }, -{ {1,2,0,0,0,2,0,0, 8, 25} }, -{ {1,2,0,0,0,2,0,1, 24, 27} }, -{ {1,2,0,0,0,2,0,2, 28, 36} }, -{ {1,2,0,0,0,2,1,0, 40, 7} }, -{ {1,2,0,0,0,2,1,1, 47, 6} }, -{ {1,2,0,0,0,2,1,2, 31, 9} }, -{ {1,2,0,0,0,2,2,0, 27, 38} }, -{ {1,2,0,0,0,2,2,1, 53, 6} }, -{ {1,2,0,0,0,2,2,2, 23, 30} }, -{ {1,2,0,0,1,0,0,0, 8, 24} }, -{ {1,2,0,0,1,0,0,1, 27, 45} }, -{ {1,2,0,0,1,0,0,2, 40, 6} }, -{ {1,2,0,0,1,0,1,0, 28, 47} }, -{ {1,2,0,0,1,0,1,1, 23, 29} }, -{ {1,2,0,0,1,0,1,2, 31, 12} }, -{ {1,2,0,0,1,0,2,0, 24, 22} }, -{ {1,2,0,0,1,0,2,1, 53, 7} }, -{ {1,2,0,0,1,0,2,2, 47, 7} }, -{ {1,2,0,0,1,1,0,0, 10, 25} }, -{ {1,2,0,0,1,1,0,1, 28, 45} }, -{ {1,2,0,0,1,1,0,2, 42, 6} }, -{ {1,2,0,0,1,1,1,0, 17, 28} }, -{ {1,2,0,0,1,1,1,1, 8, 28} }, -{ {1,2,0,0,1,1,1,2, 18, 2} }, -{ {1,2,0,0,1,1,2,0, 32, 7} }, -{ {1,2,0,0,1,1,2,1, 24, 2} }, -{ {1,2,0,0,1,1,2,2, 29, 2} }, -{ {1,2,0,0,1,2,0,0, 11, 44} }, -{ {1,2,0,0,1,2,0,1, 29, 45} }, -{ {1,2,0,0,1,2,0,2, 41, 6} }, -{ {1,2,0,0,1,2,1,0, 41, 7} }, -{ {1,2,0,0,1,2,1,1, 37, 47} }, -{ {1,2,0,0,1,2,1,2, 43, 12} }, -{ {1,2,0,0,1,2,2,0, 29, 38} }, -{ {1,2,0,0,1,2,2,1, 47, 33} }, -{ {1,2,0,0,1,2,2,2, 37, 36} }, -{ {1,2,0,0,2,0,0,0, 6, 24} }, -{ {1,2,0,0,2,0,0,1, 30, 6} }, -{ {1,2,0,0,2,0,0,2, 38, 6} }, -{ {1,2,0,0,2,0,1,0, 36, 38} }, -{ {1,2,0,0,2,0,1,1, 48, 6} }, -{ {1,2,0,0,2,0,1,2, 50, 7} }, -{ {1,2,0,0,2,0,2,0, 23, 22} }, -{ {1,2,0,0,2,0,2,1, 53, 16} }, -{ {1,2,0,0,2,0,2,2, 27, 4} }, -{ {1,2,0,0,2,1,0,0, 12, 6} }, -{ {1,2,0,0,2,1,0,1, 31, 6} }, -{ {1,2,0,0,2,1,0,2, 39, 6} }, -{ {1,2,0,0,2,1,1,0, 39, 7} }, -{ {1,2,0,0,2,1,1,1, 40, 30} }, -{ {1,2,0,0,2,1,1,2, 51, 6} }, -{ {1,2,0,0,2,1,2,0, 31, 7} }, -{ {1,2,0,0,2,1,2,1, 47, 31} }, -{ {1,2,0,0,2,1,2,2, 40, 29} }, -{ {1,2,0,0,2,2,0,0, 10, 24} }, -{ {1,2,0,0,2,2,0,1, 32, 6} }, -{ {1,2,0,0,2,2,0,2, 17, 31} }, -{ {1,2,0,0,2,2,1,0, 42, 7} }, -{ {1,2,0,0,2,2,1,1, 29, 3} }, -{ {1,2,0,0,2,2,1,2, 18, 3} }, -{ {1,2,0,0,2,2,2,0, 28, 38} }, -{ {1,2,0,0,2,2,2,1, 24, 3} }, -{ {1,2,0,0,2,2,2,2, 8, 31} }, -{ {1,2,0,1,0,0,0,0, 6, 4} }, -{ {1,2,0,1,0,0,0,1, 23, 46} }, -{ {1,2,0,1,0,0,0,2, 36, 46} }, -{ {1,2,0,1,0,0,1,0, 38, 10} }, -{ {1,2,0,1,0,0,1,1, 27, 24} }, -{ {1,2,0,1,0,0,1,2, 50, 2} }, -{ {1,2,0,1,0,0,2,0, 30, 10} }, -{ {1,2,0,1,0,0,2,1, 53, 2} }, -{ {1,2,0,1,0,0,2,2, 48, 10} }, -{ {1,2,0,1,0,1,0,0, 15, 4} }, -{ {1,2,0,1,0,1,0,1, 26, 27} }, -{ {1,2,0,1,0,1,0,2, 39, 27} }, -{ {1,2,0,1,0,1,1,0, 55, 4} }, -{ {1,2,0,1,0,1,1,1, 16, 5} }, -{ {1,2,0,1,0,1,1,2, 56, 12} }, -{ {1,2,0,1,0,1,2,0, 57, 4} }, -{ {1,2,0,1,0,1,2,1, 30, 22} }, -{ {1,2,0,1,0,1,2,2, 50, 5} }, -{ {1,2,0,1,0,2,0,0, 18, 27} }, -{ {1,2,0,1,0,2,0,1, 29, 27} }, -{ {1,2,0,1,0,2,0,2, 42, 27} }, -{ {1,2,0,1,0,2,1,0, 51, 9} }, -{ {1,2,0,1,0,2,1,1, 40, 24} }, -{ {1,2,0,1,0,2,1,2, 39, 9} }, -{ {1,2,0,1,0,2,2,0, 50, 9} }, -{ {1,2,0,1,0,2,2,1, 48, 22} }, -{ {1,2,0,1,0,2,2,2, 36, 30} }, -{ {1,2,0,1,1,0,0,0, 23, 25} }, -{ {1,2,0,1,1,0,0,1, 45, 27} }, -{ {1,2,0,1,1,0,0,2, 48, 26} }, -{ {1,2,0,1,1,0,1,0, 27, 47} }, -{ {1,2,0,1,1,0,1,1, 21, 4} }, -{ {1,2,0,1,1,0,1,2, 30, 12} }, -{ {1,2,0,1,1,0,2,0, 53, 37} }, -{ {1,2,0,1,1,0,2,1, 52, 13} }, -{ {1,2,0,1,1,0,2,2, 53, 32} }, -{ {1,2,0,1,1,1,0,0, 26, 25} }, -{ {1,2,0,1,1,1,0,1, 34, 10} }, -{ {1,2,0,1,1,1,0,2, 40, 2} }, -{ {1,2,0,1,1,1,1,0, 16, 28} }, -{ {1,2,0,1,1,1,1,1, 7, 5} }, -{ {1,2,0,1,1,1,1,2, 16, 2} }, -{ {1,2,0,1,1,1,2,0, 30, 2} }, -{ {1,2,0,1,1,1,2,1, 21, 10} }, -{ {1,2,0,1,1,1,2,2, 27, 2} }, -{ {1,2,0,1,1,2,0,0, 29, 44} }, -{ {1,2,0,1,1,2,0,1, 46, 27} }, -{ {1,2,0,1,1,2,0,2, 29, 9} }, -{ {1,2,0,1,1,2,1,0, 40, 47} }, -{ {1,2,0,1,1,2,1,1, 34, 4} }, -{ {1,2,0,1,1,2,1,2, 26, 9} }, -{ {1,2,0,1,1,2,2,0, 48, 33} }, -{ {1,2,0,1,1,2,2,1, 45, 9} }, -{ {1,2,0,1,1,2,2,2, 23, 36} }, -{ {1,2,0,1,2,0,0,0, 36, 25} }, -{ {1,2,0,1,2,0,0,1, 48, 45} }, -{ {1,2,0,1,2,0,0,2, 50, 27} }, -{ {1,2,0,1,2,0,1,0, 50, 30} }, -{ {1,2,0,1,2,0,1,1, 30, 24} }, -{ {1,2,0,1,2,0,1,2, 57, 6} }, -{ {1,2,0,1,2,0,2,0, 48, 31} }, -{ {1,2,0,1,2,0,2,1, 53, 23} }, -{ {1,2,0,1,2,0,2,2, 30, 4} }, -{ {1,2,0,1,2,1,0,0, 39, 25} }, -{ {1,2,0,1,2,1,0,1, 40, 37} }, -{ {1,2,0,1,2,1,0,2, 51, 26} }, -{ {1,2,0,1,2,1,1,0, 56, 6} }, -{ {1,2,0,1,2,1,1,1, 16, 30} }, -{ {1,2,0,1,2,1,1,2, 55, 3} }, -{ {1,2,0,1,2,1,2,0, 50, 28} }, -{ {1,2,0,1,2,1,2,1, 27, 37} }, -{ {1,2,0,1,2,1,2,2, 38, 4} }, -{ {1,2,0,1,2,2,0,0, 42, 44} }, -{ {1,2,0,1,2,2,0,1, 29, 42} }, -{ {1,2,0,1,2,2,0,2, 18, 9} }, -{ {1,2,0,1,2,2,1,0, 39, 3} }, -{ {1,2,0,1,2,2,1,1, 26, 3} }, -{ {1,2,0,1,2,2,1,2, 15, 3} }, -{ {1,2,0,1,2,2,2,0, 36, 11} }, -{ {1,2,0,1,2,2,2,1, 23, 3} }, -{ {1,2,0,1,2,2,2,2, 6, 10} }, -{ {1,2,0,2,0,0,0,0, 8, 4} }, -{ {1,2,0,2,0,0,0,1, 24, 28} }, -{ {1,2,0,2,0,0,0,2, 28, 23} }, -{ {1,2,0,2,0,0,1,0, 40, 10} }, -{ {1,2,0,2,0,0,1,1, 47, 11} }, -{ {1,2,0,2,0,0,1,2, 31, 23} }, -{ {1,2,0,2,0,0,2,0, 27, 31} }, -{ {1,2,0,2,0,0,2,1, 53, 11} }, -{ {1,2,0,2,0,0,2,2, 23, 39} }, -{ {1,2,0,2,0,1,0,0, 18, 29} }, -{ {1,2,0,2,0,1,0,1, 29, 46} }, -{ {1,2,0,2,0,1,0,2, 42, 46} }, -{ {1,2,0,2,0,1,1,0, 51, 15} }, -{ {1,2,0,2,0,1,1,1, 40, 5} }, -{ {1,2,0,2,0,1,1,2, 39, 23} }, -{ {1,2,0,2,0,1,2,0, 50, 15} }, -{ {1,2,0,2,0,1,2,1, 48, 37} }, -{ {1,2,0,2,0,1,2,2, 36, 39} }, -{ {1,2,0,2,0,2,0,0, 17, 4} }, -{ {1,2,0,2,0,2,0,1, 32, 27} }, -{ {1,2,0,2,0,2,0,2, 10, 22} }, -{ {1,2,0,2,0,2,1,0, 39, 8} }, -{ {1,2,0,2,0,2,1,1, 31, 8} }, -{ {1,2,0,2,0,2,1,2, 12, 9} }, -{ {1,2,0,2,0,2,2,0, 38, 8} }, -{ {1,2,0,2,0,2,2,1, 30, 8} }, -{ {1,2,0,2,0,2,2,2, 6, 22} }, -{ {1,2,0,2,1,0,0,0, 37, 5} }, -{ {1,2,0,2,1,0,0,1, 47, 27} }, -{ {1,2,0,2,1,0,0,2, 29, 23} }, -{ {1,2,0,2,1,0,1,0, 29, 47} }, -{ {1,2,0,2,1,0,1,1, 24, 29} }, -{ {1,2,0,2,1,0,1,2, 32, 12} }, -{ {1,2,0,2,1,0,2,0, 47, 37} }, -{ {1,2,0,2,1,0,2,1, 53, 12} }, -{ {1,2,0,2,1,0,2,2, 24, 23} }, -{ {1,2,0,2,1,1,0,0, 43, 25} }, -{ {1,2,0,2,1,1,0,1, 37, 10} }, -{ {1,2,0,2,1,1,0,2, 41, 2} }, -{ {1,2,0,2,1,1,1,0, 18, 28} }, -{ {1,2,0,2,1,1,1,1, 8, 11} }, -{ {1,2,0,2,1,1,1,2, 17, 2} }, -{ {1,2,0,2,1,1,2,0, 31, 2} }, -{ {1,2,0,2,1,1,2,1, 23, 10} }, -{ {1,2,0,2,1,1,2,2, 28, 2} }, -{ {1,2,0,2,1,2,0,0, 41, 25} }, -{ {1,2,0,2,1,2,0,1, 29, 8} }, -{ {1,2,0,2,1,2,0,2, 11, 22} }, -{ {1,2,0,2,1,2,1,0, 42, 47} }, -{ {1,2,0,2,1,2,1,1, 28, 8} }, -{ {1,2,0,2,1,2,1,2, 10, 9} }, -{ {1,2,0,2,1,2,2,0, 40, 35} }, -{ {1,2,0,2,1,2,2,1, 27, 8} }, -{ {1,2,0,2,1,2,2,2, 8, 37} }, -{ {1,2,0,2,2,0,0,0, 23, 5} }, -{ {1,2,0,2,2,0,0,1, 53, 27} }, -{ {1,2,0,2,2,0,0,2, 27, 23} }, -{ {1,2,0,2,2,0,1,0, 48, 36} }, -{ {1,2,0,2,2,0,1,1, 53, 4} }, -{ {1,2,0,2,2,0,1,2, 30, 23} }, -{ {1,2,0,2,2,0,2,0, 45, 30} }, -{ {1,2,0,2,2,0,2,1, 52, 15} }, -{ {1,2,0,2,2,0,2,2, 21, 24} }, -{ {1,2,0,2,2,1,0,0, 31, 25} }, -{ {1,2,0,2,2,1,0,1, 47, 36} }, -{ {1,2,0,2,2,1,0,2, 40, 34} }, -{ {1,2,0,2,2,1,1,0, 50, 14} }, -{ {1,2,0,2,2,1,1,1, 27, 30} }, -{ {1,2,0,2,2,1,1,2, 38, 23} }, -{ {1,2,0,2,2,1,2,0, 49, 15} }, -{ {1,2,0,2,2,1,2,1, 45, 31} }, -{ {1,2,0,2,2,1,2,2, 35, 24} }, -{ {1,2,0,2,2,2,0,0, 28, 25} }, -{ {1,2,0,2,2,2,0,1, 24, 8} }, -{ {1,2,0,2,2,2,0,2, 8, 36} }, -{ {1,2,0,2,2,2,1,0, 36, 8} }, -{ {1,2,0,2,2,2,1,1, 23, 42} }, -{ {1,2,0,2,2,2,1,2, 6, 9} }, -{ {1,2,0,2,2,2,2,0, 35, 3} }, -{ {1,2,0,2,2,2,2,1, 21, 3} }, -{ {1,2,0,2,2,2,2,2, 3, 30} }, -{ {1,2,1,0,0,0,0,0, 8, 5} }, -{ {1,2,1,0,0,0,0,1, 27, 28} }, -{ {1,2,1,0,0,0,0,2, 40, 11} }, -{ {1,2,1,0,0,0,1,0, 28, 26} }, -{ {1,2,1,0,0,0,1,1, 23, 44} }, -{ {1,2,1,0,0,0,1,2, 31, 26} }, -{ {1,2,1,0,0,0,2,0, 24, 31} }, -{ {1,2,1,0,0,0,2,1, 53, 10} }, -{ {1,2,1,0,0,0,2,2, 47, 10} }, -{ {1,2,1,0,0,1,0,0, 23, 4} }, -{ {1,2,1,0,0,1,0,1, 45, 29} }, -{ {1,2,1,0,0,1,0,2, 48, 47} }, -{ {1,2,1,0,0,1,1,0, 27, 26} }, -{ {1,2,1,0,0,1,1,1, 21, 25} }, -{ {1,2,1,0,0,1,1,2, 30, 26} }, -{ {1,2,1,0,0,1,2,0, 53, 22} }, -{ {1,2,1,0,0,1,2,1, 52, 18} }, -{ {1,2,1,0,0,1,2,2, 53, 19} }, -{ {1,2,1,0,0,2,0,0, 37, 24} }, -{ {1,2,1,0,0,2,0,1, 47, 46} }, -{ {1,2,1,0,0,2,0,2, 29, 36} }, -{ {1,2,1,0,0,2,1,0, 29, 26} }, -{ {1,2,1,0,0,2,1,1, 24, 26} }, -{ {1,2,1,0,0,2,1,2, 32, 26} }, -{ {1,2,1,0,0,2,2,0, 47, 22} }, -{ {1,2,1,0,0,2,2,1, 53, 41} }, -{ {1,2,1,0,0,2,2,2, 24, 30} }, -{ {1,2,1,0,1,0,0,0, 17, 5} }, -{ {1,2,1,0,1,0,0,1, 38, 13} }, -{ {1,2,1,0,1,0,0,2, 39, 13} }, -{ {1,2,1,0,1,0,1,0, 10, 27} }, -{ {1,2,1,0,1,0,1,1, 6, 27} }, -{ {1,2,1,0,1,0,1,2, 12, 12} }, -{ {1,2,1,0,1,0,2,0, 32, 22} }, -{ {1,2,1,0,1,0,2,1, 30, 13} }, -{ {1,2,1,0,1,0,2,2, 31, 13} }, -{ {1,2,1,0,1,1,0,0, 28, 24} }, -{ {1,2,1,0,1,1,0,1, 35, 2} }, -{ {1,2,1,0,1,1,0,2, 36, 13} }, -{ {1,2,1,0,1,1,1,0, 8, 47} }, -{ {1,2,1,0,1,1,1,1, 3, 29} }, -{ {1,2,1,0,1,1,1,2, 6, 12} }, -{ {1,2,1,0,1,1,2,0, 24, 13} }, -{ {1,2,1,0,1,1,2,1, 21, 2} }, -{ {1,2,1,0,1,1,2,2, 23, 33} }, -{ {1,2,1,0,1,2,0,0, 41, 24} }, -{ {1,2,1,0,1,2,0,1, 40, 40} }, -{ {1,2,1,0,1,2,0,2, 42, 40} }, -{ {1,2,1,0,1,2,1,0, 11, 27} }, -{ {1,2,1,0,1,2,1,1, 8, 46} }, -{ {1,2,1,0,1,2,1,2, 10, 12} }, -{ {1,2,1,0,1,2,2,0, 29, 13} }, -{ {1,2,1,0,1,2,2,1, 27, 13} }, -{ {1,2,1,0,1,2,2,2, 28, 13} }, -{ {1,2,1,0,2,0,0,0, 18, 30} }, -{ {1,2,1,0,2,0,0,1, 50, 18} }, -{ {1,2,1,0,2,0,0,2, 51, 18} }, -{ {1,2,1,0,2,0,1,0, 42, 37} }, -{ {1,2,1,0,2,0,1,1, 36, 44} }, -{ {1,2,1,0,2,0,1,2, 39, 26} }, -{ {1,2,1,0,2,0,2,0, 29, 37} }, -{ {1,2,1,0,2,0,2,1, 48, 40} }, -{ {1,2,1,0,2,0,2,2, 40, 4} }, -{ {1,2,1,0,2,1,0,0, 31, 24} }, -{ {1,2,1,0,2,1,0,1, 49, 18} }, -{ {1,2,1,0,2,1,0,2, 50, 19} }, -{ {1,2,1,0,2,1,1,0, 40, 41} }, -{ {1,2,1,0,2,1,1,1, 35, 25} }, -{ {1,2,1,0,2,1,1,2, 38, 26} }, -{ {1,2,1,0,2,1,2,0, 47, 40} }, -{ {1,2,1,0,2,1,2,1, 45, 28} }, -{ {1,2,1,0,2,1,2,2, 27, 29} }, -{ {1,2,1,0,2,2,0,0, 43, 24} }, -{ {1,2,1,0,2,2,0,1, 31, 3} }, -{ {1,2,1,0,2,2,0,2, 18, 31} }, -{ {1,2,1,0,2,2,1,0, 41, 41} }, -{ {1,2,1,0,2,2,1,1, 28, 3} }, -{ {1,2,1,0,2,2,1,2, 17, 3} }, -{ {1,2,1,0,2,2,2,0, 37, 11} }, -{ {1,2,1,0,2,2,2,1, 23, 11} }, -{ {1,2,1,0,2,2,2,2, 8, 10} }, -{ {1,2,1,1,0,0,0,0, 10, 4} }, -{ {1,2,1,1,0,0,0,1, 28, 28} }, -{ {1,2,1,1,0,0,0,2, 42, 11} }, -{ {1,2,1,1,0,0,1,0, 17, 26} }, -{ {1,2,1,1,0,0,1,1, 8, 45} }, -{ {1,2,1,1,0,0,1,2, 18, 6} }, -{ {1,2,1,1,0,0,2,0, 32, 10} }, -{ {1,2,1,1,0,0,2,1, 24, 7} }, -{ {1,2,1,1,0,0,2,2, 29, 17} }, -{ {1,2,1,1,0,1,0,0, 26, 4} }, -{ {1,2,1,1,0,1,0,1, 34, 7} }, -{ {1,2,1,1,0,1,0,2, 40, 17} }, -{ {1,2,1,1,0,1,1,0, 16, 26} }, -{ {1,2,1,1,0,1,1,1, 7, 24} }, -{ {1,2,1,1,0,1,1,2, 16, 6} }, -{ {1,2,1,1,0,1,2,0, 30, 18} }, -{ {1,2,1,1,0,1,2,1, 21, 7} }, -{ {1,2,1,1,0,1,2,2, 27, 17} }, -{ {1,2,1,1,0,2,0,0, 43, 4} }, -{ {1,2,1,1,0,2,0,1, 37, 7} }, -{ {1,2,1,1,0,2,0,2, 41, 17} }, -{ {1,2,1,1,0,2,1,0, 18, 26} }, -{ {1,2,1,1,0,2,1,1, 8, 6} }, -{ {1,2,1,1,0,2,1,2, 17, 6} }, -{ {1,2,1,1,0,2,2,0, 31, 18} }, -{ {1,2,1,1,0,2,2,1, 23, 7} }, -{ {1,2,1,1,0,2,2,2, 28, 17} }, -{ {1,2,1,1,1,0,0,0, 28, 5} }, -{ {1,2,1,1,1,0,0,1, 35, 18} }, -{ {1,2,1,1,1,0,0,2, 36, 40} }, -{ {1,2,1,1,1,0,1,0, 8, 26} }, -{ {1,2,1,1,1,0,1,1, 3, 27} }, -{ {1,2,1,1,1,0,1,2, 6, 26} }, -{ {1,2,1,1,1,0,2,0, 24, 18} }, -{ {1,2,1,1,1,0,2,1, 21, 18} }, -{ {1,2,1,1,1,0,2,2, 23, 18} }, -{ {1,2,1,1,1,1,0,0, 34, 13} }, -{ {1,2,1,1,1,1,0,1, 33, 7} }, -{ {1,2,1,1,1,1,0,2, 35, 13} }, -{ {1,2,1,1,1,1,1,0, 7, 26} }, -{ {1,2,1,1,1,1,1,1, 1, 4} }, -{ {1,2,1,1,1,1,1,2, 4, 12} }, -{ {1,2,1,1,1,1,2,0, 21, 13} }, -{ {1,2,1,1,1,1,2,1, 19, 7} }, -{ {1,2,1,1,1,1,2,2, 20, 13} }, -{ {1,2,1,1,1,2,0,0, 37, 40} }, -{ {1,2,1,1,1,2,0,1, 34, 18} }, -{ {1,2,1,1,1,2,0,2, 28, 9} }, -{ {1,2,1,1,1,2,1,0, 8, 41} }, -{ {1,2,1,1,1,2,1,1, 2, 27} }, -{ {1,2,1,1,1,2,1,2, 5, 26} }, -{ {1,2,1,1,1,2,2,0, 23, 40} }, -{ {1,2,1,1,1,2,2,1, 20, 18} }, -{ {1,2,1,1,1,2,2,2, 22, 18} }, -{ {1,2,1,1,2,0,0,0, 42, 30} }, -{ {1,2,1,1,2,0,0,1, 36, 7} }, -{ {1,2,1,1,2,0,0,2, 39, 18} }, -{ {1,2,1,1,2,0,1,0, 18, 18} }, -{ {1,2,1,1,2,0,1,1, 6, 6} }, -{ {1,2,1,1,2,0,1,2, 15, 6} }, -{ {1,2,1,1,2,0,2,0, 29, 18} }, -{ {1,2,1,1,2,0,2,1, 23, 17} }, -{ {1,2,1,1,2,0,2,2, 26, 18} }, -{ {1,2,1,1,2,1,0,0, 40, 18} }, -{ {1,2,1,1,2,1,0,1, 35, 7} }, -{ {1,2,1,1,2,1,0,2, 38, 18} }, -{ {1,2,1,1,2,1,1,0, 16, 18} }, -{ {1,2,1,1,2,1,1,1, 4, 6} }, -{ {1,2,1,1,2,1,1,2, 13, 6} }, -{ {1,2,1,1,2,1,2,0, 27, 18} }, -{ {1,2,1,1,2,1,2,1, 20, 7} }, -{ {1,2,1,1,2,1,2,2, 25, 18} }, -{ {1,2,1,1,2,2,0,0, 41, 18} }, -{ {1,2,1,1,2,2,0,1, 28, 42} }, -{ {1,2,1,1,2,2,0,2, 17, 9} }, -{ {1,2,1,1,2,2,1,0, 17, 18} }, -{ {1,2,1,1,2,2,1,1, 5, 6} }, -{ {1,2,1,1,2,2,1,2, 14, 6} }, -{ {1,2,1,1,2,2,2,0, 28, 18} }, -{ {1,2,1,1,2,2,2,1, 22, 7} }, -{ {1,2,1,1,2,2,2,2, 5, 10} }, -{ {1,2,1,2,0,0,0,0, 11, 28} }, -{ {1,2,1,2,0,0,0,1, 29, 28} }, -{ {1,2,1,2,0,0,0,2, 41, 11} }, -{ {1,2,1,2,0,0,1,0, 41, 10} }, -{ {1,2,1,2,0,0,1,1, 37, 26} }, -{ {1,2,1,2,0,0,1,2, 43, 26} }, -{ {1,2,1,2,0,0,2,0, 29, 31} }, -{ {1,2,1,2,0,0,2,1, 47, 18} }, -{ {1,2,1,2,0,0,2,2, 37, 23} }, -{ {1,2,1,2,0,1,0,0, 29, 29} }, -{ {1,2,1,2,0,1,0,1, 46, 28} }, -{ {1,2,1,2,0,1,0,2, 29, 34} }, -{ {1,2,1,2,0,1,1,0, 40, 26} }, -{ {1,2,1,2,0,1,1,1, 34, 25} }, -{ {1,2,1,2,0,1,1,2, 26, 23} }, -{ {1,2,1,2,0,1,2,0, 48, 18} }, -{ {1,2,1,2,0,1,2,1, 45, 15} }, -{ {1,2,1,2,0,1,2,2, 23, 23} }, -{ {1,2,1,2,0,2,0,0, 41, 4} }, -{ {1,2,1,2,0,2,0,1, 29, 35} }, -{ {1,2,1,2,0,2,0,2, 11, 37} }, -{ {1,2,1,2,0,2,1,0, 42, 26} }, -{ {1,2,1,2,0,2,1,1, 28, 35} }, -{ {1,2,1,2,0,2,1,2, 10, 23} }, -{ {1,2,1,2,0,2,2,0, 40, 8} }, -{ {1,2,1,2,0,2,2,1, 27, 35} }, -{ {1,2,1,2,0,2,2,2, 8, 22} }, -{ {1,2,1,2,1,0,0,0, 41, 5} }, -{ {1,2,1,2,1,0,0,1, 40, 13} }, -{ {1,2,1,2,1,0,0,2, 42, 13} }, -{ {1,2,1,2,1,0,1,0, 11, 46} }, -{ {1,2,1,2,1,0,1,1, 8, 27} }, -{ {1,2,1,2,1,0,1,2, 10, 26} }, -{ {1,2,1,2,1,0,2,0, 29, 40} }, -{ {1,2,1,2,1,0,2,1, 27, 40} }, -{ {1,2,1,2,1,0,2,2, 28, 40} }, -{ {1,2,1,2,1,1,0,0, 37, 13} }, -{ {1,2,1,2,1,1,0,1, 34, 2} }, -{ {1,2,1,2,1,1,0,2, 28, 34} }, -{ {1,2,1,2,1,1,1,0, 8, 12} }, -{ {1,2,1,2,1,1,1,1, 2, 28} }, -{ {1,2,1,2,1,1,1,2, 5, 12} }, -{ {1,2,1,2,1,1,2,0, 23, 13} }, -{ {1,2,1,2,1,1,2,1, 20, 2} }, -{ {1,2,1,2,1,1,2,2, 22, 13} }, -{ {1,2,1,2,1,2,0,0, 43, 13} }, -{ {1,2,1,2,1,2,0,1, 26, 8} }, -{ {1,2,1,2,1,2,0,2, 10, 8} }, -{ {1,2,1,2,1,2,1,0, 10, 13} }, -{ {1,2,1,2,1,2,1,1, 5, 27} }, -{ {1,2,1,2,1,2,1,2, 9, 12} }, -{ {1,2,1,2,1,2,2,0, 26, 13} }, -{ {1,2,1,2,1,2,2,1, 25, 13} }, -{ {1,2,1,2,1,2,2,2, 5, 22} }, -{ {1,2,1,2,2,0,0,0, 29, 30} }, -{ {1,2,1,2,2,0,0,1, 48, 19} }, -{ {1,2,1,2,2,0,0,2, 40, 23} }, -{ {1,2,1,2,2,0,1,0, 29, 41} }, -{ {1,2,1,2,2,0,1,1, 23, 26} }, -{ {1,2,1,2,2,0,1,2, 26, 26} }, -{ {1,2,1,2,2,0,2,0, 46, 31} }, -{ {1,2,1,2,2,0,2,1, 45, 18} }, -{ {1,2,1,2,2,0,2,2, 34, 24} }, -{ {1,2,1,2,2,1,0,0, 47, 19} }, -{ {1,2,1,2,2,1,0,1, 45, 14} }, -{ {1,2,1,2,2,1,0,2, 27, 34} }, -{ {1,2,1,2,2,1,1,0, 27, 41} }, -{ {1,2,1,2,2,1,1,1, 20, 25} }, -{ {1,2,1,2,2,1,1,2, 25, 26} }, -{ {1,2,1,2,2,1,2,0, 45, 19} }, -{ {1,2,1,2,2,1,2,1, 44, 18} }, -{ {1,2,1,2,2,1,2,2, 20, 24} }, -{ {1,2,1,2,2,2,0,0, 37, 8} }, -{ {1,2,1,2,2,2,0,1, 23, 8} }, -{ {1,2,1,2,2,2,0,2, 8, 9} }, -{ {1,2,1,2,2,2,1,0, 28, 41} }, -{ {1,2,1,2,2,2,1,1, 22, 26} }, -{ {1,2,1,2,2,2,1,2, 5, 9} }, -{ {1,2,1,2,2,2,2,0, 34, 3} }, -{ {1,2,1,2,2,2,2,1, 20, 3} }, -{ {1,2,1,2,2,2,2,2, 2, 31} }, -{ {1,2,2,0,0,0,0,0, 6, 5} }, -{ {1,2,2,0,0,0,0,1, 30, 11} }, -{ {1,2,2,0,0,0,0,2, 38, 11} }, -{ {1,2,2,0,0,0,1,0, 36, 31} }, -{ {1,2,2,0,0,0,1,1, 48, 11} }, -{ {1,2,2,0,0,0,1,2, 50, 3} }, -{ {1,2,2,0,0,0,2,0, 23, 37} }, -{ {1,2,2,0,0,0,2,1, 53, 3} }, -{ {1,2,2,0,0,0,2,2, 27, 25} }, -{ {1,2,2,0,0,1,0,0, 36, 4} }, -{ {1,2,2,0,0,1,0,1, 48, 28} }, -{ {1,2,2,0,0,1,0,2, 50, 29} }, -{ {1,2,2,0,0,1,1,0, 50, 22} }, -{ {1,2,2,0,0,1,1,1, 30, 5} }, -{ {1,2,2,0,0,1,1,2, 57, 2} }, -{ {1,2,2,0,0,1,2,0, 48, 38} }, -{ {1,2,2,0,0,1,2,1, 53, 36} }, -{ {1,2,2,0,0,1,2,2, 30, 25} }, -{ {1,2,2,0,0,2,0,0, 23, 24} }, -{ {1,2,2,0,0,2,0,1, 53, 46} }, -{ {1,2,2,0,0,2,0,2, 27, 36} }, -{ {1,2,2,0,0,2,1,0, 48, 23} }, -{ {1,2,2,0,0,2,1,1, 53, 25} }, -{ {1,2,2,0,0,2,1,2, 30, 9} }, -{ {1,2,2,0,0,2,2,0, 45, 22} }, -{ {1,2,2,0,0,2,2,1, 52, 8} }, -{ {1,2,2,0,0,2,2,2, 21, 5} }, -{ {1,2,2,0,1,0,0,0, 18, 22} }, -{ {1,2,2,0,1,0,0,1, 50, 12} }, -{ {1,2,2,0,1,0,0,2, 51, 12} }, -{ {1,2,2,0,1,0,1,0, 42, 22} }, -{ {1,2,2,0,1,0,1,1, 36, 29} }, -{ {1,2,2,0,1,0,1,2, 39, 12} }, -{ {1,2,2,0,1,0,2,0, 29, 22} }, -{ {1,2,2,0,1,0,2,1, 48, 13} }, -{ {1,2,2,0,1,0,2,2, 40, 25} }, -{ {1,2,2,0,1,1,0,0, 42, 39} }, -{ {1,2,2,0,1,1,0,1, 36, 10} }, -{ {1,2,2,0,1,1,0,2, 39, 2} }, -{ {1,2,2,0,1,1,1,0, 18, 12} }, -{ {1,2,2,0,1,1,1,1, 6, 11} }, -{ {1,2,2,0,1,1,1,2, 15, 2} }, -{ {1,2,2,0,1,1,2,0, 29, 33} }, -{ {1,2,2,0,1,1,2,1, 23, 2} }, -{ {1,2,2,0,1,1,2,2, 26, 2} }, -{ {1,2,2,0,1,2,0,0, 29, 39} }, -{ {1,2,2,0,1,2,0,1, 48, 32} }, -{ {1,2,2,0,1,2,0,2, 40, 36} }, -{ {1,2,2,0,1,2,1,0, 29, 12} }, -{ {1,2,2,0,1,2,1,1, 23, 47} }, -{ {1,2,2,0,1,2,1,2, 26, 12} }, -{ {1,2,2,0,1,2,2,0, 46, 22} }, -{ {1,2,2,0,1,2,2,1, 45, 12} }, -{ {1,2,2,0,1,2,2,2, 34, 5} }, -{ {1,2,2,0,2,0,0,0, 15, 5} }, -{ {1,2,2,0,2,0,0,1, 57, 5} }, -{ {1,2,2,0,2,0,0,2, 55, 5} }, -{ {1,2,2,0,2,0,1,0, 39, 22} }, -{ {1,2,2,0,2,0,1,1, 50, 4} }, -{ {1,2,2,0,2,0,1,2, 56, 9} }, -{ {1,2,2,0,2,0,2,0, 26, 22} }, -{ {1,2,2,0,2,0,2,1, 30, 27} }, -{ {1,2,2,0,2,0,2,2, 16, 4} }, -{ {1,2,2,0,2,1,0,0, 39, 24} }, -{ {1,2,2,0,2,1,0,1, 50, 31} }, -{ {1,2,2,0,2,1,0,2, 56, 7} }, -{ {1,2,2,0,2,1,1,0, 51, 22} }, -{ {1,2,2,0,2,1,1,1, 38, 5} }, -{ {1,2,2,0,2,1,1,2, 55, 2} }, -{ {1,2,2,0,2,1,2,0, 40, 46} }, -{ {1,2,2,0,2,1,2,1, 27, 46} }, -{ {1,2,2,0,2,1,2,2, 16, 29} }, -{ {1,2,2,0,2,2,0,0, 26, 24} }, -{ {1,2,2,0,2,2,0,1, 30, 3} }, -{ {1,2,2,0,2,2,0,2, 16, 31} }, -{ {1,2,2,0,2,2,1,0, 40, 3} }, -{ {1,2,2,0,2,2,1,1, 27, 3} }, -{ {1,2,2,0,2,2,1,2, 16, 3} }, -{ {1,2,2,0,2,2,2,0, 34, 11} }, -{ {1,2,2,0,2,2,2,1, 21, 11} }, -{ {1,2,2,0,2,2,2,2, 7, 4} }, -{ {1,2,2,1,0,0,0,0, 12, 5} }, -{ {1,2,2,1,0,0,0,1, 31, 11} }, -{ {1,2,2,1,0,0,0,2, 39, 11} }, -{ {1,2,2,1,0,0,1,0, 39, 10} }, -{ {1,2,2,1,0,0,1,1, 40, 39} }, -{ {1,2,2,1,0,0,1,2, 51, 2} }, -{ {1,2,2,1,0,0,2,0, 31, 10} }, -{ {1,2,2,1,0,0,2,1, 47, 38} }, -{ {1,2,2,1,0,0,2,2, 40, 44} }, -{ {1,2,2,1,0,1,0,0, 39, 4} }, -{ {1,2,2,1,0,1,0,1, 40, 22} }, -{ {1,2,2,1,0,1,0,2, 51, 28} }, -{ {1,2,2,1,0,1,1,0, 56, 5} }, -{ {1,2,2,1,0,1,1,1, 16, 22} }, -{ {1,2,2,1,0,1,1,2, 55, 7} }, -{ {1,2,2,1,0,1,2,0, 50, 26} }, -{ {1,2,2,1,0,1,2,1, 27, 22} }, -{ {1,2,2,1,0,1,2,2, 38, 25} }, -{ {1,2,2,1,0,2,0,0, 31, 4} }, -{ {1,2,2,1,0,2,0,1, 47, 23} }, -{ {1,2,2,1,0,2,0,2, 40, 9} }, -{ {1,2,2,1,0,2,1,0, 50, 8} }, -{ {1,2,2,1,0,2,1,1, 27, 39} }, -{ {1,2,2,1,0,2,1,2, 38, 9} }, -{ {1,2,2,1,0,2,2,0, 49, 9} }, -{ {1,2,2,1,0,2,2,1, 45, 23} }, -{ {1,2,2,1,0,2,2,2, 35, 5} }, -{ {1,2,2,1,1,0,0,0, 31, 5} }, -{ {1,2,2,1,1,0,0,1, 49, 12} }, -{ {1,2,2,1,1,0,0,2, 50, 13} }, -{ {1,2,2,1,1,0,1,0, 40, 12} }, -{ {1,2,2,1,1,0,1,1, 35, 4} }, -{ {1,2,2,1,1,0,1,2, 38, 12} }, -{ {1,2,2,1,1,0,2,0, 47, 13} }, -{ {1,2,2,1,1,0,2,1, 45, 26} }, -{ {1,2,2,1,1,0,2,2, 27, 44} }, -{ {1,2,2,1,1,1,0,0, 40, 33} }, -{ {1,2,2,1,1,1,0,1, 35, 10} }, -{ {1,2,2,1,1,1,0,2, 38, 2} }, -{ {1,2,2,1,1,1,1,0, 16, 12} }, -{ {1,2,2,1,1,1,1,1, 4, 5} }, -{ {1,2,2,1,1,1,1,2, 13, 2} }, -{ {1,2,2,1,1,1,2,0, 27, 33} }, -{ {1,2,2,1,1,1,2,1, 20, 10} }, -{ {1,2,2,1,1,1,2,2, 25, 2} }, -{ {1,2,2,1,1,2,0,0, 47, 32} }, -{ {1,2,2,1,1,2,0,1, 45, 8} }, -{ {1,2,2,1,1,2,0,2, 27, 9} }, -{ {1,2,2,1,1,2,1,0, 27, 12} }, -{ {1,2,2,1,1,2,1,1, 20, 4} }, -{ {1,2,2,1,1,2,1,2, 25, 12} }, -{ {1,2,2,1,1,2,2,0, 45, 13} }, -{ {1,2,2,1,1,2,2,1, 44, 12} }, -{ {1,2,2,1,1,2,2,2, 20, 5} }, -{ {1,2,2,1,2,0,0,0, 39, 5} }, -{ {1,2,2,1,2,0,0,1, 50, 23} }, -{ {1,2,2,1,2,0,0,2, 56, 4} }, -{ {1,2,2,1,2,0,1,0, 51, 30} }, -{ {1,2,2,1,2,0,1,1, 38, 24} }, -{ {1,2,2,1,2,0,1,2, 55, 6} }, -{ {1,2,2,1,2,0,2,0, 40, 27} }, -{ {1,2,2,1,2,0,2,1, 27, 27} }, -{ {1,2,2,1,2,0,2,2, 16, 27} }, -{ {1,2,2,1,2,1,0,0, 51, 5} }, -{ {1,2,2,1,2,1,0,1, 38, 22} }, -{ {1,2,2,1,2,1,0,2, 55, 1} }, -{ {1,2,2,1,2,1,1,0, 55, 0} }, -{ {1,2,2,1,2,1,1,1, 13, 5} }, -{ {1,2,2,1,2,1,1,2, 54, 0} }, -{ {1,2,2,1,2,1,2,0, 38, 27} }, -{ {1,2,2,1,2,1,2,1, 25, 22} }, -{ {1,2,2,1,2,1,2,2, 13, 4} }, -{ {1,2,2,1,2,2,0,0, 40, 42} }, -{ {1,2,2,1,2,2,0,1, 27, 42} }, -{ {1,2,2,1,2,2,0,2, 16, 9} }, -{ {1,2,2,1,2,2,1,0, 38, 3} }, -{ {1,2,2,1,2,2,1,1, 25, 24} }, -{ {1,2,2,1,2,2,1,2, 13, 3} }, -{ {1,2,2,1,2,2,2,0, 35, 11} }, -{ {1,2,2,1,2,2,2,1, 20, 11} }, -{ {1,2,2,1,2,2,2,2, 4, 4} }, -{ {1,2,2,2,0,0,0,0, 10, 5} }, -{ {1,2,2,2,0,0,0,1, 32, 11} }, -{ {1,2,2,2,0,0,0,2, 17, 23} }, -{ {1,2,2,2,0,0,1,0, 42, 10} }, -{ {1,2,2,2,0,0,1,1, 29, 16} }, -{ {1,2,2,2,0,0,1,2, 18, 7} }, -{ {1,2,2,2,0,0,2,0, 28, 31} }, -{ {1,2,2,2,0,0,2,1, 24, 6} }, -{ {1,2,2,2,0,0,2,2, 8, 38} }, -{ {1,2,2,2,0,1,0,0, 42, 29} }, -{ {1,2,2,2,0,1,0,1, 29, 15} }, -{ {1,2,2,2,0,1,0,2, 18, 15} }, -{ {1,2,2,2,0,1,1,0, 39, 15} }, -{ {1,2,2,2,0,1,1,1, 26, 15} }, -{ {1,2,2,2,0,1,1,2, 15, 7} }, -{ {1,2,2,2,0,1,2,0, 36, 6} }, -{ {1,2,2,2,0,1,2,1, 23, 16} }, -{ {1,2,2,2,0,1,2,2, 6, 7} }, -{ {1,2,2,2,0,2,0,0, 28, 4} }, -{ {1,2,2,2,0,2,0,1, 24, 15} }, -{ {1,2,2,2,0,2,0,2, 8, 23} }, -{ {1,2,2,2,0,2,1,0, 36, 35} }, -{ {1,2,2,2,0,2,1,1, 23, 15} }, -{ {1,2,2,2,0,2,1,2, 6, 23} }, -{ {1,2,2,2,0,2,2,0, 35, 15} }, -{ {1,2,2,2,0,2,2,1, 21, 15} }, -{ {1,2,2,2,0,2,2,2, 3, 22} }, -{ {1,2,2,2,1,0,0,0, 43, 5} }, -{ {1,2,2,2,1,0,0,1, 31, 15} }, -{ {1,2,2,2,1,0,0,2, 18, 23} }, -{ {1,2,2,2,1,0,1,0, 41, 12} }, -{ {1,2,2,2,1,0,1,1, 28, 16} }, -{ {1,2,2,2,1,0,1,2, 17, 7} }, -{ {1,2,2,2,1,0,2,0, 37, 6} }, -{ {1,2,2,2,1,0,2,1, 23, 6} }, -{ {1,2,2,2,1,0,2,2, 8, 7} }, -{ {1,2,2,2,1,1,0,0, 41, 33} }, -{ {1,2,2,2,1,1,0,1, 28, 15} }, -{ {1,2,2,2,1,1,0,2, 17, 15} }, -{ {1,2,2,2,1,1,1,0, 17, 12} }, -{ {1,2,2,2,1,1,1,1, 5, 11} }, -{ {1,2,2,2,1,1,1,2, 14, 2} }, -{ {1,2,2,2,1,1,2,0, 28, 33} }, -{ {1,2,2,2,1,1,2,1, 22, 2} }, -{ {1,2,2,2,1,1,2,2, 5, 7} }, -{ {1,2,2,2,1,2,0,0, 37, 35} }, -{ {1,2,2,2,1,2,0,1, 23, 35} }, -{ {1,2,2,2,1,2,0,2, 8, 34} }, -{ {1,2,2,2,1,2,1,0, 28, 12} }, -{ {1,2,2,2,1,2,1,1, 22, 29} }, -{ {1,2,2,2,1,2,1,2, 5, 23} }, -{ {1,2,2,2,1,2,2,0, 34, 15} }, -{ {1,2,2,2,1,2,2,1, 20, 15} }, -{ {1,2,2,2,1,2,2,2, 2, 22} }, -{ {1,2,2,2,2,0,0,0, 26, 5} }, -{ {1,2,2,2,2,0,0,1, 30, 15} }, -{ {1,2,2,2,2,0,0,2, 16, 23} }, -{ {1,2,2,2,2,0,1,0, 40, 16} }, -{ {1,2,2,2,2,0,1,1, 27, 16} }, -{ {1,2,2,2,2,0,1,2, 16, 7} }, -{ {1,2,2,2,2,0,2,0, 34, 6} }, -{ {1,2,2,2,2,0,2,1, 21, 6} }, -{ {1,2,2,2,2,0,2,2, 7, 25} }, -{ {1,2,2,2,2,1,0,0, 40, 15} }, -{ {1,2,2,2,2,1,0,1, 27, 15} }, -{ {1,2,2,2,2,1,0,2, 16, 15} }, -{ {1,2,2,2,2,1,1,0, 38, 15} }, -{ {1,2,2,2,2,1,1,1, 25, 5} }, -{ {1,2,2,2,2,1,1,2, 13, 7} }, -{ {1,2,2,2,2,1,2,0, 35, 6} }, -{ {1,2,2,2,2,1,2,1, 20, 6} }, -{ {1,2,2,2,2,1,2,2, 4, 7} }, -{ {1,2,2,2,2,2,0,0, 34, 8} }, -{ {1,2,2,2,2,2,0,1, 21, 8} }, -{ {1,2,2,2,2,2,0,2, 7, 23} }, -{ {1,2,2,2,2,2,1,0, 35, 8} }, -{ {1,2,2,2,2,2,1,1, 20, 8} }, -{ {1,2,2,2,2,2,1,2, 4, 9} }, -{ {1,2,2,2,2,2,2,0, 33, 6} }, -{ {1,2,2,2,2,2,2,1, 19, 6} }, -{ {1,2,2,2,2,2,2,2, 1, 5} }, -{ {2,0,0,0,0,0,0,0, 1, 5} }, -{ {2,0,0,0,0,0,0,1, 33, 6} }, -{ {2,0,0,0,0,0,0,2, 19, 6} }, -{ {2,0,0,0,0,0,1,0, 7, 23} }, -{ {2,0,0,0,0,0,1,1, 34, 8} }, -{ {2,0,0,0,0,0,1,2, 21, 8} }, -{ {2,0,0,0,0,0,2,0, 4, 9} }, -{ {2,0,0,0,0,0,2,1, 35, 8} }, -{ {2,0,0,0,0,0,2,2, 20, 8} }, -{ {2,0,0,0,0,1,0,0, 7, 25} }, -{ {2,0,0,0,0,1,0,1, 34, 6} }, -{ {2,0,0,0,0,1,0,2, 21, 6} }, -{ {2,0,0,0,0,1,1,0, 16, 23} }, -{ {2,0,0,0,0,1,1,1, 26, 5} }, -{ {2,0,0,0,0,1,1,2, 30, 15} }, -{ {2,0,0,0,0,1,2,0, 16, 7} }, -{ {2,0,0,0,0,1,2,1, 40, 16} }, -{ {2,0,0,0,0,1,2,2, 27, 16} }, -{ {2,0,0,0,0,2,0,0, 4, 7} }, -{ {2,0,0,0,0,2,0,1, 35, 6} }, -{ {2,0,0,0,0,2,0,2, 20, 6} }, -{ {2,0,0,0,0,2,1,0, 16, 15} }, -{ {2,0,0,0,0,2,1,1, 40, 15} }, -{ {2,0,0,0,0,2,1,2, 27, 15} }, -{ {2,0,0,0,0,2,2,0, 13, 7} }, -{ {2,0,0,0,0,2,2,1, 38, 15} }, -{ {2,0,0,0,0,2,2,2, 25, 15} }, -{ {2,0,0,0,1,0,0,0, 3, 22} }, -{ {2,0,0,0,1,0,0,1, 35, 15} }, -{ {2,0,0,0,1,0,0,2, 21, 15} }, -{ {2,0,0,0,1,0,1,0, 8, 23} }, -{ {2,0,0,0,1,0,1,1, 28, 4} }, -{ {2,0,0,0,1,0,1,2, 24, 15} }, -{ {2,0,0,0,1,0,2,0, 6, 23} }, -{ {2,0,0,0,1,0,2,1, 36, 35} }, -{ {2,0,0,0,1,0,2,2, 23, 15} }, -{ {2,0,0,0,1,1,0,0, 8, 38} }, -{ {2,0,0,0,1,1,0,1, 28, 31} }, -{ {2,0,0,0,1,1,0,2, 24, 6} }, -{ {2,0,0,0,1,1,1,0, 17, 23} }, -{ {2,0,0,0,1,1,1,1, 10, 5} }, -{ {2,0,0,0,1,1,1,2, 32, 15} }, -{ {2,0,0,0,1,1,2,0, 18, 7} }, -{ {2,0,0,0,1,1,2,1, 42, 16} }, -{ {2,0,0,0,1,1,2,2, 29, 16} }, -{ {2,0,0,0,1,2,0,0, 6, 7} }, -{ {2,0,0,0,1,2,0,1, 36, 6} }, -{ {2,0,0,0,1,2,0,2, 23, 16} }, -{ {2,0,0,0,1,2,1,0, 18, 15} }, -{ {2,0,0,0,1,2,1,1, 42, 15} }, -{ {2,0,0,0,1,2,1,2, 29, 15} }, -{ {2,0,0,0,1,2,2,0, 15, 7} }, -{ {2,0,0,0,1,2,2,1, 39, 15} }, -{ {2,0,0,0,1,2,2,2, 26, 15} }, -{ {2,0,0,0,2,0,0,0, 2, 22} }, -{ {2,0,0,0,2,0,0,1, 34, 15} }, -{ {2,0,0,0,2,0,0,2, 20, 15} }, -{ {2,0,0,0,2,0,1,0, 8, 34} }, -{ {2,0,0,0,2,0,1,1, 37, 35} }, -{ {2,0,0,0,2,0,1,2, 23, 35} }, -{ {2,0,0,0,2,0,2,0, 5, 23} }, -{ {2,0,0,0,2,0,2,1, 28, 12} }, -{ {2,0,0,0,2,0,2,2, 22, 15} }, -{ {2,0,0,0,2,1,0,0, 8, 7} }, -{ {2,0,0,0,2,1,0,1, 37, 6} }, -{ {2,0,0,0,2,1,0,2, 23, 6} }, -{ {2,0,0,0,2,1,1,0, 18, 23} }, -{ {2,0,0,0,2,1,1,1, 43, 15} }, -{ {2,0,0,0,2,1,1,2, 31, 15} }, -{ {2,0,0,0,2,1,2,0, 17, 7} }, -{ {2,0,0,0,2,1,2,1, 41, 16} }, -{ {2,0,0,0,2,1,2,2, 28, 16} }, -{ {2,0,0,0,2,2,0,0, 5, 7} }, -{ {2,0,0,0,2,2,0,1, 28, 33} }, -{ {2,0,0,0,2,2,0,2, 22, 6} }, -{ {2,0,0,0,2,2,1,0, 17, 15} }, -{ {2,0,0,0,2,2,1,1, 41, 15} }, -{ {2,0,0,0,2,2,1,2, 28, 15} }, -{ {2,0,0,0,2,2,2,0, 14, 7} }, -{ {2,0,0,0,2,2,2,1, 17, 12} }, -{ {2,0,0,0,2,2,2,2, 5, 11} }, -{ {2,0,0,1,0,0,0,0, 7, 4} }, -{ {2,0,0,1,0,0,0,1, 34, 11} }, -{ {2,0,0,1,0,0,0,2, 21, 11} }, -{ {2,0,0,1,0,0,1,0, 16, 31} }, -{ {2,0,0,1,0,0,1,1, 26, 24} }, -{ {2,0,0,1,0,0,1,2, 30, 3} }, -{ {2,0,0,1,0,0,2,0, 16, 3} }, -{ {2,0,0,1,0,0,2,1, 40, 3} }, -{ {2,0,0,1,0,0,2,2, 27, 3} }, -{ {2,0,0,1,0,1,0,0, 16, 4} }, -{ {2,0,0,1,0,1,0,1, 26, 22} }, -{ {2,0,0,1,0,1,0,2, 30, 27} }, -{ {2,0,0,1,0,1,1,0, 55, 5} }, -{ {2,0,0,1,0,1,1,1, 15, 5} }, -{ {2,0,0,1,0,1,1,2, 57, 0} }, -{ {2,0,0,1,0,1,2,0, 56, 9} }, -{ {2,0,0,1,0,1,2,1, 39, 22} }, -{ {2,0,0,1,0,1,2,2, 50, 4} }, -{ {2,0,0,1,0,2,0,0, 16, 29} }, -{ {2,0,0,1,0,2,0,1, 40, 46} }, -{ {2,0,0,1,0,2,0,2, 27, 46} }, -{ {2,0,0,1,0,2,1,0, 56, 7} }, -{ {2,0,0,1,0,2,1,1, 39, 24} }, -{ {2,0,0,1,0,2,1,2, 50, 31} }, -{ {2,0,0,1,0,2,2,0, 55, 2} }, -{ {2,0,0,1,0,2,2,1, 51, 23} }, -{ {2,0,0,1,0,2,2,2, 38, 5} }, -{ {2,0,0,1,1,0,0,0, 21, 5} }, -{ {2,0,0,1,1,0,0,1, 45, 22} }, -{ {2,0,0,1,1,0,0,2, 52, 8} }, -{ {2,0,0,1,1,0,1,0, 27, 36} }, -{ {2,0,0,1,1,0,1,1, 23, 24} }, -{ {2,0,0,1,1,0,1,2, 53, 8} }, -{ {2,0,0,1,1,0,2,0, 30, 9} }, -{ {2,0,0,1,1,0,2,1, 48, 9} }, -{ {2,0,0,1,1,0,2,2, 53, 43} }, -{ {2,0,0,1,1,1,0,0, 27, 25} }, -{ {2,0,0,1,1,1,0,1, 23, 37} }, -{ {2,0,0,1,1,1,0,2, 53, 45} }, -{ {2,0,0,1,1,1,1,0, 38, 11} }, -{ {2,0,0,1,1,1,1,1, 6, 5} }, -{ {2,0,0,1,1,1,1,2, 30, 11} }, -{ {2,0,0,1,1,1,2,0, 50, 3} }, -{ {2,0,0,1,1,1,2,1, 36, 37} }, -{ {2,0,0,1,1,1,2,2, 48, 11} }, -{ {2,0,0,1,1,2,0,0, 30, 25} }, -{ {2,0,0,1,1,2,0,1, 48, 44} }, -{ {2,0,0,1,1,2,0,2, 53, 26} }, -{ {2,0,0,1,1,2,1,0, 50, 29} }, -{ {2,0,0,1,1,2,1,1, 36, 24} }, -{ {2,0,0,1,1,2,1,2, 48, 28} }, -{ {2,0,0,1,1,2,2,0, 57, 7} }, -{ {2,0,0,1,1,2,2,1, 50, 22} }, -{ {2,0,0,1,1,2,2,2, 30, 5} }, -{ {2,0,0,1,2,0,0,0, 34, 5} }, -{ {2,0,0,1,2,0,0,1, 46, 22} }, -{ {2,0,0,1,2,0,0,2, 45, 12} }, -{ {2,0,0,1,2,0,1,0, 40, 36} }, -{ {2,0,0,1,2,0,1,1, 29, 39} }, -{ {2,0,0,1,2,0,1,2, 48, 42} }, -{ {2,0,0,1,2,0,2,0, 26, 12} }, -{ {2,0,0,1,2,0,2,1, 29, 12} }, -{ {2,0,0,1,2,0,2,2, 23, 47} }, -{ {2,0,0,1,2,1,0,0, 40, 25} }, -{ {2,0,0,1,2,1,0,1, 29, 22} }, -{ {2,0,0,1,2,1,0,2, 48, 27} }, -{ {2,0,0,1,2,1,1,0, 51, 13} }, -{ {2,0,0,1,2,1,1,1, 18, 22} }, -{ {2,0,0,1,2,1,1,2, 50, 12} }, -{ {2,0,0,1,2,1,2,0, 39, 12} }, -{ {2,0,0,1,2,1,2,1, 42, 22} }, -{ {2,0,0,1,2,1,2,2, 36, 47} }, -{ {2,0,0,1,2,2,0,0, 26, 2} }, -{ {2,0,0,1,2,2,0,1, 29, 33} }, -{ {2,0,0,1,2,2,0,2, 23, 2} }, -{ {2,0,0,1,2,2,1,0, 39, 2} }, -{ {2,0,0,1,2,2,1,1, 42, 39} }, -{ {2,0,0,1,2,2,1,2, 36, 2} }, -{ {2,0,0,1,2,2,2,0, 15, 2} }, -{ {2,0,0,1,2,2,2,1, 18, 12} }, -{ {2,0,0,1,2,2,2,2, 6, 11} }, -{ {2,0,0,2,0,0,0,0, 4, 4} }, -{ {2,0,0,2,0,0,0,1, 35, 11} }, -{ {2,0,0,2,0,0,0,2, 20, 11} }, -{ {2,0,0,2,0,0,1,0, 16, 9} }, -{ {2,0,0,2,0,0,1,1, 40, 42} }, -{ {2,0,0,2,0,0,1,2, 27, 42} }, -{ {2,0,0,2,0,0,2,0, 13, 3} }, -{ {2,0,0,2,0,0,2,1, 38, 3} }, -{ {2,0,0,2,0,0,2,2, 25, 3} }, -{ {2,0,0,2,0,1,0,0, 16, 27} }, -{ {2,0,0,2,0,1,0,1, 40, 27} }, -{ {2,0,0,2,0,1,0,2, 27, 27} }, -{ {2,0,0,2,0,1,1,0, 56, 4} }, -{ {2,0,0,2,0,1,1,1, 39, 5} }, -{ {2,0,0,2,0,1,1,2, 50, 23} }, -{ {2,0,0,2,0,1,2,0, 55, 6} }, -{ {2,0,0,2,0,1,2,1, 51, 31} }, -{ {2,0,0,2,0,1,2,2, 38, 24} }, -{ {2,0,0,2,0,2,0,0, 13, 4} }, -{ {2,0,0,2,0,2,0,1, 38, 27} }, -{ {2,0,0,2,0,2,0,2, 25, 27} }, -{ {2,0,0,2,0,2,1,0, 55, 1} }, -{ {2,0,0,2,0,2,1,1, 51, 4} }, -{ {2,0,0,2,0,2,1,2, 38, 22} }, -{ {2,0,0,2,0,2,2,0, 54, 1} }, -{ {2,0,0,2,0,2,2,1, 55, 0} }, -{ {2,0,0,2,0,2,2,2, 13, 5} }, -{ {2,0,0,2,1,0,0,0, 35, 5} }, -{ {2,0,0,2,1,0,0,1, 49, 9} }, -{ {2,0,0,2,1,0,0,2, 45, 23} }, -{ {2,0,0,2,1,0,1,0, 40, 9} }, -{ {2,0,0,2,1,0,1,1, 31, 4} }, -{ {2,0,0,2,1,0,1,2, 47, 8} }, -{ {2,0,0,2,1,0,2,0, 38, 9} }, -{ {2,0,0,2,1,0,2,1, 50, 8} }, -{ {2,0,0,2,1,0,2,2, 27, 39} }, -{ {2,0,0,2,1,1,0,0, 40, 44} }, -{ {2,0,0,2,1,1,0,1, 31, 10} }, -{ {2,0,0,2,1,1,0,2, 47, 45} }, -{ {2,0,0,2,1,1,1,0, 39, 11} }, -{ {2,0,0,2,1,1,1,1, 12, 4} }, -{ {2,0,0,2,1,1,1,2, 31, 11} }, -{ {2,0,0,2,1,1,2,0, 51, 3} }, -{ {2,0,0,2,1,1,2,1, 39, 10} }, -{ {2,0,0,2,1,1,2,2, 40, 39} }, -{ {2,0,0,2,1,2,0,0, 38, 25} }, -{ {2,0,0,2,1,2,0,1, 50, 26} }, -{ {2,0,0,2,1,2,0,2, 27, 22} }, -{ {2,0,0,2,1,2,1,0, 51, 29} }, -{ {2,0,0,2,1,2,1,1, 39, 4} }, -{ {2,0,0,2,1,2,1,2, 40, 22} }, -{ {2,0,0,2,1,2,2,0, 55, 7} }, -{ {2,0,0,2,1,2,2,1, 56, 1} }, -{ {2,0,0,2,1,2,2,2, 16, 22} }, -{ {2,0,0,2,2,0,0,0, 20, 5} }, -{ {2,0,0,2,2,0,0,1, 45, 13} }, -{ {2,0,0,2,2,0,0,2, 44, 9} }, -{ {2,0,0,2,2,0,1,0, 27, 9} }, -{ {2,0,0,2,2,0,1,1, 47, 43} }, -{ {2,0,0,2,2,0,1,2, 45, 8} }, -{ {2,0,0,2,2,0,2,0, 25, 9} }, -{ {2,0,0,2,2,0,2,1, 27, 12} }, -{ {2,0,0,2,2,0,2,2, 20, 4} }, -{ {2,0,0,2,2,1,0,0, 27, 44} }, -{ {2,0,0,2,2,1,0,1, 47, 26} }, -{ {2,0,0,2,2,1,0,2, 45, 26} }, -{ {2,0,0,2,2,1,1,0, 50, 13} }, -{ {2,0,0,2,2,1,1,1, 31, 5} }, -{ {2,0,0,2,2,1,1,2, 49, 13} }, -{ {2,0,0,2,2,1,2,0, 38, 12} }, -{ {2,0,0,2,2,1,2,1, 40, 12} }, -{ {2,0,0,2,2,1,2,2, 35, 4} }, -{ {2,0,0,2,2,2,0,0, 25, 25} }, -{ {2,0,0,2,2,2,0,1, 27, 33} }, -{ {2,0,0,2,2,2,0,2, 20, 10} }, -{ {2,0,0,2,2,2,1,0, 38, 2} }, -{ {2,0,0,2,2,2,1,1, 40, 33} }, -{ {2,0,0,2,2,2,1,2, 35, 10} }, -{ {2,0,0,2,2,2,2,0, 13, 2} }, -{ {2,0,0,2,2,2,2,1, 16, 12} }, -{ {2,0,0,2,2,2,2,2, 4, 5} }, -{ {2,0,1,0,0,0,0,0, 3, 30} }, -{ {2,0,1,0,0,0,0,1, 35, 3} }, -{ {2,0,1,0,0,0,0,2, 21, 3} }, -{ {2,0,1,0,0,0,1,0, 8, 36} }, -{ {2,0,1,0,0,0,1,1, 28, 25} }, -{ {2,0,1,0,0,0,1,2, 24, 8} }, -{ {2,0,1,0,0,0,2,0, 6, 9} }, -{ {2,0,1,0,0,0,2,1, 36, 8} }, -{ {2,0,1,0,0,0,2,2, 23, 42} }, -{ {2,0,1,0,0,1,0,0, 21, 24} }, -{ {2,0,1,0,0,1,0,1, 45, 30} }, -{ {2,0,1,0,0,1,0,2, 52, 15} }, -{ {2,0,1,0,0,1,1,0, 27, 23} }, -{ {2,0,1,0,0,1,1,1, 23, 5} }, -{ {2,0,1,0,0,1,1,2, 53, 35} }, -{ {2,0,1,0,0,1,2,0, 30, 23} }, -{ {2,0,1,0,0,1,2,1, 48, 34} }, -{ {2,0,1,0,0,1,2,2, 53, 14} }, -{ {2,0,1,0,0,2,0,0, 35, 24} }, -{ {2,0,1,0,0,2,0,1, 49, 15} }, -{ {2,0,1,0,0,2,0,2, 45, 31} }, -{ {2,0,1,0,0,2,1,0, 40, 34} }, -{ {2,0,1,0,0,2,1,1, 31, 25} }, -{ {2,0,1,0,0,2,1,2, 47, 35} }, -{ {2,0,1,0,0,2,2,0, 38, 23} }, -{ {2,0,1,0,0,2,2,1, 50, 14} }, -{ {2,0,1,0,0,2,2,2, 27, 30} }, -{ {2,0,1,0,1,0,0,0, 6, 22} }, -{ {2,0,1,0,1,0,0,1, 38, 8} }, -{ {2,0,1,0,1,0,0,2, 30, 8} }, -{ {2,0,1,0,1,0,1,0, 10, 22} }, -{ {2,0,1,0,1,0,1,1, 17, 4} }, -{ {2,0,1,0,1,0,1,2, 32, 8} }, -{ {2,0,1,0,1,0,2,0, 12, 9} }, -{ {2,0,1,0,1,0,2,1, 39, 8} }, -{ {2,0,1,0,1,0,2,2, 31, 8} }, -{ {2,0,1,0,1,1,0,0, 23, 39} }, -{ {2,0,1,0,1,1,0,1, 27, 31} }, -{ {2,0,1,0,1,1,0,2, 53, 15} }, -{ {2,0,1,0,1,1,1,0, 28, 23} }, -{ {2,0,1,0,1,1,1,1, 8, 4} }, -{ {2,0,1,0,1,1,1,2, 24, 28} }, -{ {2,0,1,0,1,1,2,0, 31, 23} }, -{ {2,0,1,0,1,1,2,1, 40, 10} }, -{ {2,0,1,0,1,1,2,2, 47, 11} }, -{ {2,0,1,0,1,2,0,0, 36, 39} }, -{ {2,0,1,0,1,2,0,1, 50, 15} }, -{ {2,0,1,0,1,2,0,2, 48, 35} }, -{ {2,0,1,0,1,2,1,0, 42, 34} }, -{ {2,0,1,0,1,2,1,1, 18, 29} }, -{ {2,0,1,0,1,2,1,2, 29, 46} }, -{ {2,0,1,0,1,2,2,0, 39, 23} }, -{ {2,0,1,0,1,2,2,1, 51, 15} }, -{ {2,0,1,0,1,2,2,2, 40, 5} }, -{ {2,0,1,0,2,0,0,0, 8, 37} }, -{ {2,0,1,0,2,0,0,1, 40, 35} }, -{ {2,0,1,0,2,0,0,2, 27, 8} }, -{ {2,0,1,0,2,0,1,0, 11, 22} }, -{ {2,0,1,0,2,0,1,1, 41, 35} }, -{ {2,0,1,0,2,0,1,2, 29, 8} }, -{ {2,0,1,0,2,0,2,0, 10, 9} }, -{ {2,0,1,0,2,0,2,1, 42, 35} }, -{ {2,0,1,0,2,0,2,2, 28, 8} }, -{ {2,0,1,0,2,1,0,0, 24, 23} }, -{ {2,0,1,0,2,1,0,1, 47, 34} }, -{ {2,0,1,0,2,1,0,2, 53, 34} }, -{ {2,0,1,0,2,1,1,0, 29, 23} }, -{ {2,0,1,0,2,1,1,1, 37, 25} }, -{ {2,0,1,0,2,1,1,2, 47, 27} }, -{ {2,0,1,0,2,1,2,0, 32, 23} }, -{ {2,0,1,0,2,1,2,1, 29, 47} }, -{ {2,0,1,0,2,1,2,2, 24, 29} }, -{ {2,0,1,0,2,2,0,0, 28, 2} }, -{ {2,0,1,0,2,2,0,1, 31, 2} }, -{ {2,0,1,0,2,2,0,2, 23, 10} }, -{ {2,0,1,0,2,2,1,0, 41, 34} }, -{ {2,0,1,0,2,2,1,1, 43, 25} }, -{ {2,0,1,0,2,2,1,2, 37, 2} }, -{ {2,0,1,0,2,2,2,0, 17, 2} }, -{ {2,0,1,0,2,2,2,1, 18, 28} }, -{ {2,0,1,0,2,2,2,2, 8, 11} }, -{ {2,0,1,1,0,0,0,0, 8, 31} }, -{ {2,0,1,1,0,0,0,1, 28, 38} }, -{ {2,0,1,1,0,0,0,2, 24, 3} }, -{ {2,0,1,1,0,0,1,0, 17, 31} }, -{ {2,0,1,1,0,0,1,1, 10, 24} }, -{ {2,0,1,1,0,0,1,2, 32, 3} }, -{ {2,0,1,1,0,0,2,0, 18, 3} }, -{ {2,0,1,1,0,0,2,1, 42, 3} }, -{ {2,0,1,1,0,0,2,2, 29, 3} }, -{ {2,0,1,1,0,1,0,0, 27, 4} }, -{ {2,0,1,1,0,1,0,1, 23, 22} }, -{ {2,0,1,1,0,1,0,2, 53, 28} }, -{ {2,0,1,1,0,1,1,0, 38, 6} }, -{ {2,0,1,1,0,1,1,1, 6, 24} }, -{ {2,0,1,1,0,1,1,2, 30, 6} }, -{ {2,0,1,1,0,1,2,0, 50, 7} }, -{ {2,0,1,1,0,1,2,1, 36, 22} }, -{ {2,0,1,1,0,1,2,2, 48, 6} }, -{ {2,0,1,1,0,2,0,0, 40, 29} }, -{ {2,0,1,1,0,2,0,1, 31, 7} }, -{ {2,0,1,1,0,2,0,2, 47, 28} }, -{ {2,0,1,1,0,2,1,0, 39, 6} }, -{ {2,0,1,1,0,2,1,1, 12, 7} }, -{ {2,0,1,1,0,2,1,2, 31, 6} }, -{ {2,0,1,1,0,2,2,0, 51, 7} }, -{ {2,0,1,1,0,2,2,1, 39, 7} }, -{ {2,0,1,1,0,2,2,2, 40, 30} }, -{ {2,0,1,1,1,0,0,0, 23, 30} }, -{ {2,0,1,1,1,0,0,1, 27, 38} }, -{ {2,0,1,1,1,0,0,2, 53, 42} }, -{ {2,0,1,1,1,0,1,0, 28, 36} }, -{ {2,0,1,1,1,0,1,1, 8, 25} }, -{ {2,0,1,1,1,0,1,2, 24, 27} }, -{ {2,0,1,1,1,0,2,0, 31, 9} }, -{ {2,0,1,1,1,0,2,1, 40, 7} }, -{ {2,0,1,1,1,0,2,2, 47, 6} }, -{ {2,0,1,1,1,1,0,0, 45, 5} }, -{ {2,0,1,1,1,1,0,1, 21, 22} }, -{ {2,0,1,1,1,1,0,2, 52, 6} }, -{ {2,0,1,1,1,1,1,0, 35, 27} }, -{ {2,0,1,1,1,1,1,1, 3, 5} }, -{ {2,0,1,1,1,1,1,2, 21, 27} }, -{ {2,0,1,1,1,1,2,0, 49, 7} }, -{ {2,0,1,1,1,1,2,1, 35, 22} }, -{ {2,0,1,1,1,1,2,2, 45, 4} }, -{ {2,0,1,1,1,2,0,0, 48, 25} }, -{ {2,0,1,1,1,2,0,1, 30, 7} }, -{ {2,0,1,1,1,2,0,2, 53, 17} }, -{ {2,0,1,1,1,2,1,0, 36, 45} }, -{ {2,0,1,1,1,2,1,1, 6, 25} }, -{ {2,0,1,1,1,2,1,2, 23, 27} }, -{ {2,0,1,1,1,2,2,0, 50, 6} }, -{ {2,0,1,1,1,2,2,1, 38, 7} }, -{ {2,0,1,1,1,2,2,2, 27, 5} }, -{ {2,0,1,1,2,0,0,0, 37, 36} }, -{ {2,0,1,1,2,0,0,1, 29, 38} }, -{ {2,0,1,1,2,0,0,2, 47, 42} }, -{ {2,0,1,1,2,0,1,0, 41, 36} }, -{ {2,0,1,1,2,0,1,1, 11, 39} }, -{ {2,0,1,1,2,0,1,2, 29, 45} }, -{ {2,0,1,1,2,0,2,0, 43, 9} }, -{ {2,0,1,1,2,0,2,1, 41, 7} }, -{ {2,0,1,1,2,0,2,2, 37, 29} }, -{ {2,0,1,1,2,1,0,0, 47, 24} }, -{ {2,0,1,1,2,1,0,1, 24, 22} }, -{ {2,0,1,1,2,1,0,2, 53, 7} }, -{ {2,0,1,1,2,1,1,0, 40, 6} }, -{ {2,0,1,1,2,1,1,1, 8, 24} }, -{ {2,0,1,1,2,1,1,2, 27, 45} }, -{ {2,0,1,1,2,1,2,0, 31, 12} }, -{ {2,0,1,1,2,1,2,1, 28, 47} }, -{ {2,0,1,1,2,1,2,2, 23, 29} }, -{ {2,0,1,1,2,2,0,0, 29, 2} }, -{ {2,0,1,1,2,2,0,1, 32, 7} }, -{ {2,0,1,1,2,2,0,2, 24, 2} }, -{ {2,0,1,1,2,2,1,0, 42, 6} }, -{ {2,0,1,1,2,2,1,1, 10, 25} }, -{ {2,0,1,1,2,2,1,2, 28, 45} }, -{ {2,0,1,1,2,2,2,0, 18, 2} }, -{ {2,0,1,1,2,2,2,1, 17, 28} }, -{ {2,0,1,1,2,2,2,2, 8, 28} }, -{ {2,0,1,2,0,0,0,0, 6, 10} }, -{ {2,0,1,2,0,0,0,1, 36, 11} }, -{ {2,0,1,2,0,0,0,2, 23, 3} }, -{ {2,0,1,2,0,0,1,0, 18, 9} }, -{ {2,0,1,2,0,0,1,1, 42, 42} }, -{ {2,0,1,2,0,0,1,2, 29, 42} }, -{ {2,0,1,2,0,0,2,0, 15, 3} }, -{ {2,0,1,2,0,0,2,1, 39, 3} }, -{ {2,0,1,2,0,0,2,2, 26, 3} }, -{ {2,0,1,2,0,1,0,0, 30, 4} }, -{ {2,0,1,2,0,1,0,1, 48, 29} }, -{ {2,0,1,2,0,1,0,2, 53, 47} }, -{ {2,0,1,2,0,1,1,0, 50, 27} }, -{ {2,0,1,2,0,1,1,1, 36, 5} }, -{ {2,0,1,2,0,1,1,2, 48, 45} }, -{ {2,0,1,2,0,1,2,0, 57, 3} }, -{ {2,0,1,2,0,1,2,1, 50, 30} }, -{ {2,0,1,2,0,1,2,2, 30, 24} }, -{ {2,0,1,2,0,2,0,0, 38, 4} }, -{ {2,0,1,2,0,2,0,1, 50, 28} }, -{ {2,0,1,2,0,2,0,2, 27, 37} }, -{ {2,0,1,2,0,2,1,0, 51, 27} }, -{ {2,0,1,2,0,2,1,1, 39, 25} }, -{ {2,0,1,2,0,2,1,2, 40, 37} }, -{ {2,0,1,2,0,2,2,0, 55, 3} }, -{ {2,0,1,2,0,2,2,1, 56, 2} }, -{ {2,0,1,2,0,2,2,2, 16, 30} }, -{ {2,0,1,2,1,0,0,0, 36, 30} }, -{ {2,0,1,2,1,0,0,1, 50, 9} }, -{ {2,0,1,2,1,0,0,2, 48, 8} }, -{ {2,0,1,2,1,0,1,0, 42, 9} }, -{ {2,0,1,2,1,0,1,1, 18, 27} }, -{ {2,0,1,2,1,0,1,2, 29, 27} }, -{ {2,0,1,2,1,0,2,0, 39, 9} }, -{ {2,0,1,2,1,0,2,1, 51, 9} }, -{ {2,0,1,2,1,0,2,2, 40, 24} }, -{ {2,0,1,2,1,1,0,0, 48, 4} }, -{ {2,0,1,2,1,1,0,1, 30, 10} }, -{ {2,0,1,2,1,1,0,2, 53, 2} }, -{ {2,0,1,2,1,1,1,0, 36, 28} }, -{ {2,0,1,2,1,1,1,1, 6, 4} }, -{ {2,0,1,2,1,1,1,2, 23, 46} }, -{ {2,0,1,2,1,1,2,0, 50, 2} }, -{ {2,0,1,2,1,1,2,1, 38, 10} }, -{ {2,0,1,2,1,1,2,2, 27, 24} }, -{ {2,0,1,2,1,2,0,0, 50, 5} }, -{ {2,0,1,2,1,2,0,1, 57, 4} }, -{ {2,0,1,2,1,2,0,2, 30, 22} }, -{ {2,0,1,2,1,2,1,0, 39, 27} }, -{ {2,0,1,2,1,2,1,1, 15, 4} }, -{ {2,0,1,2,1,2,1,2, 26, 27} }, -{ {2,0,1,2,1,2,2,0, 56, 8} }, -{ {2,0,1,2,1,2,2,1, 55, 4} }, -{ {2,0,1,2,1,2,2,2, 16, 5} }, -{ {2,0,1,2,2,0,0,0, 23, 36} }, -{ {2,0,1,2,2,0,0,1, 48, 43} }, -{ {2,0,1,2,2,0,0,2, 45, 9} }, -{ {2,0,1,2,2,0,1,0, 29, 9} }, -{ {2,0,1,2,2,0,1,1, 29, 44} }, -{ {2,0,1,2,2,0,1,2, 46, 9} }, -{ {2,0,1,2,2,0,2,0, 26, 9} }, -{ {2,0,1,2,2,0,2,1, 40, 47} }, -{ {2,0,1,2,2,0,2,2, 34, 4} }, -{ {2,0,1,2,2,1,0,0, 53, 24} }, -{ {2,0,1,2,2,1,0,1, 53, 37} }, -{ {2,0,1,2,2,1,0,2, 52, 12} }, -{ {2,0,1,2,2,1,1,0, 48, 26} }, -{ {2,0,1,2,2,1,1,1, 23, 25} }, -{ {2,0,1,2,2,1,1,2, 45, 27} }, -{ {2,0,1,2,2,1,2,0, 30, 12} }, -{ {2,0,1,2,2,1,2,1, 27, 47} }, -{ {2,0,1,2,2,1,2,2, 21, 4} }, -{ {2,0,1,2,2,2,0,0, 27, 2} }, -{ {2,0,1,2,2,2,0,1, 30, 2} }, -{ {2,0,1,2,2,2,0,2, 21, 10} }, -{ {2,0,1,2,2,2,1,0, 40, 2} }, -{ {2,0,1,2,2,2,1,1, 26, 25} }, -{ {2,0,1,2,2,2,1,2, 34, 10} }, -{ {2,0,1,2,2,2,2,0, 16, 2} }, -{ {2,0,1,2,2,2,2,1, 16, 28} }, -{ {2,0,1,2,2,2,2,2, 7, 11} }, -{ {2,0,2,0,0,0,0,0, 2, 31} }, -{ {2,0,2,0,0,0,0,1, 34, 3} }, -{ {2,0,2,0,0,0,0,2, 20, 3} }, -{ {2,0,2,0,0,0,1,0, 8, 9} }, -{ {2,0,2,0,0,0,1,1, 37, 8} }, -{ {2,0,2,0,0,0,1,2, 23, 8} }, -{ {2,0,2,0,0,0,2,0, 5, 9} }, -{ {2,0,2,0,0,0,2,1, 28, 41} }, -{ {2,0,2,0,0,0,2,2, 22, 8} }, -{ {2,0,2,0,0,1,0,0, 34, 24} }, -{ {2,0,2,0,0,1,0,1, 46, 31} }, -{ {2,0,2,0,0,1,0,2, 45, 18} }, -{ {2,0,2,0,0,1,1,0, 40, 23} }, -{ {2,0,2,0,0,1,1,1, 29, 30} }, -{ {2,0,2,0,0,1,1,2, 48, 15} }, -{ {2,0,2,0,0,1,2,0, 26, 26} }, -{ {2,0,2,0,0,1,2,1, 29, 41} }, -{ {2,0,2,0,0,1,2,2, 23, 26} }, -{ {2,0,2,0,0,2,0,0, 20, 24} }, -{ {2,0,2,0,0,2,0,1, 45, 19} }, -{ {2,0,2,0,0,2,0,2, 44, 15} }, -{ {2,0,2,0,0,2,1,0, 27, 34} }, -{ {2,0,2,0,0,2,1,1, 47, 14} }, -{ {2,0,2,0,0,2,1,2, 45, 14} }, -{ {2,0,2,0,0,2,2,0, 25, 23} }, -{ {2,0,2,0,0,2,2,1, 27, 41} }, -{ {2,0,2,0,0,2,2,2, 20, 25} }, -{ {2,0,2,0,1,0,0,0, 8, 22} }, -{ {2,0,2,0,1,0,0,1, 40, 8} }, -{ {2,0,2,0,1,0,0,2, 27, 35} }, -{ {2,0,2,0,1,0,1,0, 11, 37} }, -{ {2,0,2,0,1,0,1,1, 41, 8} }, -{ {2,0,2,0,1,0,1,2, 29, 35} }, -{ {2,0,2,0,1,0,2,0, 10, 23} }, -{ {2,0,2,0,1,0,2,1, 42, 8} }, -{ {2,0,2,0,1,0,2,2, 28, 35} }, -{ {2,0,2,0,1,1,0,0, 37, 23} }, -{ {2,0,2,0,1,1,0,1, 29, 31} }, -{ {2,0,2,0,1,1,0,2, 47, 15} }, -{ {2,0,2,0,1,1,1,0, 41, 23} }, -{ {2,0,2,0,1,1,1,1, 11, 31} }, -{ {2,0,2,0,1,1,1,2, 29, 28} }, -{ {2,0,2,0,1,1,2,0, 43, 23} }, -{ {2,0,2,0,1,1,2,1, 41, 10} }, -{ {2,0,2,0,1,1,2,2, 37, 44} }, -{ {2,0,2,0,1,2,0,0, 23, 23} }, -{ {2,0,2,0,1,2,0,1, 48, 14} }, -{ {2,0,2,0,1,2,0,2, 45, 15} }, -{ {2,0,2,0,1,2,1,0, 29, 34} }, -{ {2,0,2,0,1,2,1,1, 29, 29} }, -{ {2,0,2,0,1,2,1,2, 46, 15} }, -{ {2,0,2,0,1,2,2,0, 26, 23} }, -{ {2,0,2,0,1,2,2,1, 40, 26} }, -{ {2,0,2,0,1,2,2,2, 34, 25} }, -{ {2,0,2,0,2,0,0,0, 5, 22} }, -{ {2,0,2,0,2,0,0,1, 26, 13} }, -{ {2,0,2,0,2,0,0,2, 25, 8} }, -{ {2,0,2,0,2,0,1,0, 10, 8} }, -{ {2,0,2,0,2,0,1,1, 43, 8} }, -{ {2,0,2,0,2,0,1,2, 26, 8} }, -{ {2,0,2,0,2,0,2,0, 9, 9} }, -{ {2,0,2,0,2,0,2,1, 10, 13} }, -{ {2,0,2,0,2,0,2,2, 5, 27} }, -{ {2,0,2,0,2,1,0,0, 28, 40} }, -{ {2,0,2,0,2,1,0,1, 29, 40} }, -{ {2,0,2,0,2,1,0,2, 27, 40} }, -{ {2,0,2,0,2,1,1,0, 42, 23} }, -{ {2,0,2,0,2,1,1,1, 41, 5} }, -{ {2,0,2,0,2,1,1,2, 40, 13} }, -{ {2,0,2,0,2,1,2,0, 10, 26} }, -{ {2,0,2,0,2,1,2,1, 11, 40} }, -{ {2,0,2,0,2,1,2,2, 8, 27} }, -{ {2,0,2,0,2,2,0,0, 22, 23} }, -{ {2,0,2,0,2,2,0,1, 23, 13} }, -{ {2,0,2,0,2,2,0,2, 20, 2} }, -{ {2,0,2,0,2,2,1,0, 28, 34} }, -{ {2,0,2,0,2,2,1,1, 37, 33} }, -{ {2,0,2,0,2,2,1,2, 34, 2} }, -{ {2,0,2,0,2,2,2,0, 5, 12} }, -{ {2,0,2,0,2,2,2,1, 8, 12} }, -{ {2,0,2,0,2,2,2,2, 2, 28} }, -{ {2,0,2,1,0,0,0,0, 8, 10} }, -{ {2,0,2,1,0,0,0,1, 37, 11} }, -{ {2,0,2,1,0,0,0,2, 23, 11} }, -{ {2,0,2,1,0,0,1,0, 18, 31} }, -{ {2,0,2,1,0,0,1,1, 43, 3} }, -{ {2,0,2,1,0,0,1,2, 31, 3} }, -{ {2,0,2,1,0,0,2,0, 17, 3} }, -{ {2,0,2,1,0,0,2,1, 41, 3} }, -{ {2,0,2,1,0,0,2,2, 28, 3} }, -{ {2,0,2,1,0,1,0,0, 40, 4} }, -{ {2,0,2,1,0,1,0,1, 29, 37} }, -{ {2,0,2,1,0,1,0,2, 48, 46} }, -{ {2,0,2,1,0,1,1,0, 51, 19} }, -{ {2,0,2,1,0,1,1,1, 18, 30} }, -{ {2,0,2,1,0,1,1,2, 50, 18} }, -{ {2,0,2,1,0,1,2,0, 39, 26} }, -{ {2,0,2,1,0,1,2,1, 42, 37} }, -{ {2,0,2,1,0,1,2,2, 36, 26} }, -{ {2,0,2,1,0,2,0,0, 27, 29} }, -{ {2,0,2,1,0,2,0,1, 47, 47} }, -{ {2,0,2,1,0,2,0,2, 45, 28} }, -{ {2,0,2,1,0,2,1,0, 50, 19} }, -{ {2,0,2,1,0,2,1,1, 31, 24} }, -{ {2,0,2,1,0,2,1,2, 49, 19} }, -{ {2,0,2,1,0,2,2,0, 38, 26} }, -{ {2,0,2,1,0,2,2,1, 40, 41} }, -{ {2,0,2,1,0,2,2,2, 35, 25} }, -{ {2,0,2,1,1,0,0,0, 24, 30} }, -{ {2,0,2,1,1,0,0,1, 47, 9} }, -{ {2,0,2,1,1,0,0,2, 53, 9} }, -{ {2,0,2,1,1,0,1,0, 29, 36} }, -{ {2,0,2,1,1,0,1,1, 37, 4} }, -{ {2,0,2,1,1,0,1,2, 47, 46} }, -{ {2,0,2,1,1,0,2,0, 32, 9} }, -{ {2,0,2,1,1,0,2,1, 29, 26} }, -{ {2,0,2,1,1,0,2,2, 24, 26} }, -{ {2,0,2,1,1,1,0,0, 47, 5} }, -{ {2,0,2,1,1,1,0,1, 24, 31} }, -{ {2,0,2,1,1,1,0,2, 53, 10} }, -{ {2,0,2,1,1,1,1,0, 40, 11} }, -{ {2,0,2,1,1,1,1,1, 8, 5} }, -{ {2,0,2,1,1,1,1,2, 27, 28} }, -{ {2,0,2,1,1,1,2,0, 31, 26} }, -{ {2,0,2,1,1,1,2,1, 28, 26} }, -{ {2,0,2,1,1,1,2,2, 23, 44} }, -{ {2,0,2,1,1,2,0,0, 53, 5} }, -{ {2,0,2,1,1,2,0,1, 53, 22} }, -{ {2,0,2,1,1,2,0,2, 52, 19} }, -{ {2,0,2,1,1,2,1,0, 48, 47} }, -{ {2,0,2,1,1,2,1,1, 23, 4} }, -{ {2,0,2,1,1,2,1,2, 45, 29} }, -{ {2,0,2,1,1,2,2,0, 30, 26} }, -{ {2,0,2,1,1,2,2,1, 27, 26} }, -{ {2,0,2,1,1,2,2,2, 21, 25} }, -{ {2,0,2,1,2,0,0,0, 28, 13} }, -{ {2,0,2,1,2,0,0,1, 29, 13} }, -{ {2,0,2,1,2,0,0,2, 27, 13} }, -{ {2,0,2,1,2,0,1,0, 42, 36} }, -{ {2,0,2,1,2,0,1,1, 41, 24} }, -{ {2,0,2,1,2,0,1,2, 40, 40} }, -{ {2,0,2,1,2,0,2,0, 10, 12} }, -{ {2,0,2,1,2,0,2,1, 11, 12} }, -{ {2,0,2,1,2,0,2,2, 8, 46} }, -{ {2,0,2,1,2,1,0,0, 31, 13} }, -{ {2,0,2,1,2,1,0,1, 32, 22} }, -{ {2,0,2,1,2,1,0,2, 30, 13} }, -{ {2,0,2,1,2,1,1,0, 39, 13} }, -{ {2,0,2,1,2,1,1,1, 17, 5} }, -{ {2,0,2,1,2,1,1,2, 38, 13} }, -{ {2,0,2,1,2,1,2,0, 12, 13} }, -{ {2,0,2,1,2,1,2,1, 10, 27} }, -{ {2,0,2,1,2,1,2,2, 6, 27} }, -{ {2,0,2,1,2,2,0,0, 23, 33} }, -{ {2,0,2,1,2,2,0,1, 24, 13} }, -{ {2,0,2,1,2,2,0,2, 21, 2} }, -{ {2,0,2,1,2,2,1,0, 36, 33} }, -{ {2,0,2,1,2,2,1,1, 28, 24} }, -{ {2,0,2,1,2,2,1,2, 35, 2} }, -{ {2,0,2,1,2,2,2,0, 6, 12} }, -{ {2,0,2,1,2,2,2,1, 8, 47} }, -{ {2,0,2,1,2,2,2,2, 3, 28} }, -{ {2,0,2,2,0,0,0,0, 5, 10} }, -{ {2,0,2,2,0,0,0,1, 28, 18} }, -{ {2,0,2,2,0,0,0,2, 22, 3} }, -{ {2,0,2,2,0,0,1,0, 17, 9} }, -{ {2,0,2,2,0,0,1,1, 41, 42} }, -{ {2,0,2,2,0,0,1,2, 28, 42} }, -{ {2,0,2,2,0,0,2,0, 14, 3} }, -{ {2,0,2,2,0,0,2,1, 17, 18} }, -{ {2,0,2,2,0,0,2,2, 5, 6} }, -{ {2,0,2,2,0,1,0,0, 26, 18} }, -{ {2,0,2,2,0,1,0,1, 29, 18} }, -{ {2,0,2,2,0,1,0,2, 23, 17} }, -{ {2,0,2,2,0,1,1,0, 39, 18} }, -{ {2,0,2,2,0,1,1,1, 42, 30} }, -{ {2,0,2,2,0,1,1,2, 36, 17} }, -{ {2,0,2,2,0,1,2,0, 15, 6} }, -{ {2,0,2,2,0,1,2,1, 18, 18} }, -{ {2,0,2,2,0,1,2,2, 6, 6} }, -{ {2,0,2,2,0,2,0,0, 25, 4} }, -{ {2,0,2,2,0,2,0,1, 27, 18} }, -{ {2,0,2,2,0,2,0,2, 20, 7} }, -{ {2,0,2,2,0,2,1,0, 38, 18} }, -{ {2,0,2,2,0,2,1,1, 40, 18} }, -{ {2,0,2,2,0,2,1,2, 35, 7} }, -{ {2,0,2,2,0,2,2,0, 13, 6} }, -{ {2,0,2,2,0,2,2,1, 16, 18} }, -{ {2,0,2,2,0,2,2,2, 4, 6} }, -{ {2,0,2,2,1,0,0,0, 28, 17} }, -{ {2,0,2,2,1,0,0,1, 31, 18} }, -{ {2,0,2,2,1,0,0,2, 23, 7} }, -{ {2,0,2,2,1,0,1,0, 41, 9} }, -{ {2,0,2,2,1,0,1,1, 43, 4} }, -{ {2,0,2,2,1,0,1,2, 37, 17} }, -{ {2,0,2,2,1,0,2,0, 17, 6} }, -{ {2,0,2,2,1,0,2,1, 18, 26} }, -{ {2,0,2,2,1,0,2,2, 8, 6} }, -{ {2,0,2,2,1,1,0,0, 29, 17} }, -{ {2,0,2,2,1,1,0,1, 32, 10} }, -{ {2,0,2,2,1,1,0,2, 24, 7} }, -{ {2,0,2,2,1,1,1,0, 42, 11} }, -{ {2,0,2,2,1,1,1,1, 10, 4} }, -{ {2,0,2,2,1,1,1,2, 28, 28} }, -{ {2,0,2,2,1,1,2,0, 18, 6} }, -{ {2,0,2,2,1,1,2,1, 17, 26} }, -{ {2,0,2,2,1,1,2,2, 8, 45} }, -{ {2,0,2,2,1,2,0,0, 27, 17} }, -{ {2,0,2,2,1,2,0,1, 30, 18} }, -{ {2,0,2,2,1,2,0,2, 21, 7} }, -{ {2,0,2,2,1,2,1,0, 40, 17} }, -{ {2,0,2,2,1,2,1,1, 26, 4} }, -{ {2,0,2,2,1,2,1,2, 34, 7} }, -{ {2,0,2,2,1,2,2,0, 16, 6} }, -{ {2,0,2,2,1,2,2,1, 16, 26} }, -{ {2,0,2,2,1,2,2,2, 7, 6} }, -{ {2,0,2,2,2,0,0,0, 22, 30} }, -{ {2,0,2,2,2,0,0,1, 23, 40} }, -{ {2,0,2,2,2,0,0,2, 20, 18} }, -{ {2,0,2,2,2,0,1,0, 28, 9} }, -{ {2,0,2,2,2,0,1,1, 37, 18} }, -{ {2,0,2,2,2,0,1,2, 34, 18} }, -{ {2,0,2,2,2,0,2,0, 5, 26} }, -{ {2,0,2,2,2,0,2,1, 8, 41} }, -{ {2,0,2,2,2,0,2,2, 2, 27} }, -{ {2,0,2,2,2,1,0,0, 23, 18} }, -{ {2,0,2,2,2,1,0,1, 24, 18} }, -{ {2,0,2,2,2,1,0,2, 21, 18} }, -{ {2,0,2,2,2,1,1,0, 36, 18} }, -{ {2,0,2,2,2,1,1,1, 28, 5} }, -{ {2,0,2,2,2,1,1,2, 35, 18} }, -{ {2,0,2,2,2,1,2,0, 6, 26} }, -{ {2,0,2,2,2,1,2,1, 8, 26} }, -{ {2,0,2,2,2,1,2,2, 3, 26} }, -{ {2,0,2,2,2,2,0,0, 20, 13} }, -{ {2,0,2,2,2,2,0,1, 21, 13} }, -{ {2,0,2,2,2,2,0,2, 19, 7} }, -{ {2,0,2,2,2,2,1,0, 35, 13} }, -{ {2,0,2,2,2,2,1,1, 34, 13} }, -{ {2,0,2,2,2,2,1,2, 33, 2} }, -{ {2,0,2,2,2,2,2,0, 4, 12} }, -{ {2,0,2,2,2,2,2,1, 7, 12} }, -{ {2,0,2,2,2,2,2,2, 1, 4} }, -{ {2,1,0,0,0,0,0,0, 3, 5} }, -{ {2,1,0,0,0,0,0,1, 35, 27} }, -{ {2,1,0,0,0,0,0,2, 21, 27} }, -{ {2,1,0,0,0,0,1,0, 21, 22} }, -{ {2,1,0,0,0,0,1,1, 45, 5} }, -{ {2,1,0,0,0,0,1,2, 52, 6} }, -{ {2,1,0,0,0,0,2,0, 35, 22} }, -{ {2,1,0,0,0,0,2,1, 49, 7} }, -{ {2,1,0,0,0,0,2,2, 45, 4} }, -{ {2,1,0,0,0,1,0,0, 8, 25} }, -{ {2,1,0,0,0,1,0,1, 28, 36} }, -{ {2,1,0,0,0,1,0,2, 24, 27} }, -{ {2,1,0,0,0,1,1,0, 27, 38} }, -{ {2,1,0,0,0,1,1,1, 23, 30} }, -{ {2,1,0,0,0,1,1,2, 53, 6} }, -{ {2,1,0,0,0,1,2,0, 40, 7} }, -{ {2,1,0,0,0,1,2,1, 31, 9} }, -{ {2,1,0,0,0,1,2,2, 47, 6} }, -{ {2,1,0,0,0,2,0,0, 6, 25} }, -{ {2,1,0,0,0,2,0,1, 36, 45} }, -{ {2,1,0,0,0,2,0,2, 23, 27} }, -{ {2,1,0,0,0,2,1,0, 30, 7} }, -{ {2,1,0,0,0,2,1,1, 48, 7} }, -{ {2,1,0,0,0,2,1,2, 53, 17} }, -{ {2,1,0,0,0,2,2,0, 38, 7} }, -{ {2,1,0,0,0,2,2,1, 50, 6} }, -{ {2,1,0,0,0,2,2,2, 27, 5} }, -{ {2,1,0,0,1,0,0,0, 6, 24} }, -{ {2,1,0,0,1,0,0,1, 38, 6} }, -{ {2,1,0,0,1,0,0,2, 30, 6} }, -{ {2,1,0,0,1,0,1,0, 23, 22} }, -{ {2,1,0,0,1,0,1,1, 27, 4} }, -{ {2,1,0,0,1,0,1,2, 53, 16} }, -{ {2,1,0,0,1,0,2,0, 36, 22} }, -{ {2,1,0,0,1,0,2,1, 50, 7} }, -{ {2,1,0,0,1,0,2,2, 48, 6} }, -{ {2,1,0,0,1,1,0,0, 10, 24} }, -{ {2,1,0,0,1,1,0,1, 17, 31} }, -{ {2,1,0,0,1,1,0,2, 32, 6} }, -{ {2,1,0,0,1,1,1,0, 28, 38} }, -{ {2,1,0,0,1,1,1,1, 8, 31} }, -{ {2,1,0,0,1,1,1,2, 24, 3} }, -{ {2,1,0,0,1,1,2,0, 42, 7} }, -{ {2,1,0,0,1,1,2,1, 18, 3} }, -{ {2,1,0,0,1,1,2,2, 29, 3} }, -{ {2,1,0,0,1,2,0,0, 12, 7} }, -{ {2,1,0,0,1,2,0,1, 39, 6} }, -{ {2,1,0,0,1,2,0,2, 31, 6} }, -{ {2,1,0,0,1,2,1,0, 31, 7} }, -{ {2,1,0,0,1,2,1,1, 40, 29} }, -{ {2,1,0,0,1,2,1,2, 47, 28} }, -{ {2,1,0,0,1,2,2,0, 39, 7} }, -{ {2,1,0,0,1,2,2,1, 51, 7} }, -{ {2,1,0,0,1,2,2,2, 40, 30} }, -{ {2,1,0,0,2,0,0,0, 8, 24} }, -{ {2,1,0,0,2,0,0,1, 40, 6} }, -{ {2,1,0,0,2,0,0,2, 27, 45} }, -{ {2,1,0,0,2,0,1,0, 24, 22} }, -{ {2,1,0,0,2,0,1,1, 47, 7} }, -{ {2,1,0,0,2,0,1,2, 53, 7} }, -{ {2,1,0,0,2,0,2,0, 28, 47} }, -{ {2,1,0,0,2,0,2,1, 31, 12} }, -{ {2,1,0,0,2,0,2,2, 23, 29} }, -{ {2,1,0,0,2,1,0,0, 11, 39} }, -{ {2,1,0,0,2,1,0,1, 41, 6} }, -{ {2,1,0,0,2,1,0,2, 29, 45} }, -{ {2,1,0,0,2,1,1,0, 29, 38} }, -{ {2,1,0,0,2,1,1,1, 37, 36} }, -{ {2,1,0,0,2,1,1,2, 47, 42} }, -{ {2,1,0,0,2,1,2,0, 41, 7} }, -{ {2,1,0,0,2,1,2,1, 43, 9} }, -{ {2,1,0,0,2,1,2,2, 37, 47} }, -{ {2,1,0,0,2,2,0,0, 10, 25} }, -{ {2,1,0,0,2,2,0,1, 42, 6} }, -{ {2,1,0,0,2,2,0,2, 28, 45} }, -{ {2,1,0,0,2,2,1,0, 32, 7} }, -{ {2,1,0,0,2,2,1,1, 29, 2} }, -{ {2,1,0,0,2,2,1,2, 24, 2} }, -{ {2,1,0,0,2,2,2,0, 17, 28} }, -{ {2,1,0,0,2,2,2,1, 18, 2} }, -{ {2,1,0,0,2,2,2,2, 8, 28} }, -{ {2,1,0,1,0,0,0,0, 8, 4} }, -{ {2,1,0,1,0,0,0,1, 28, 23} }, -{ {2,1,0,1,0,0,0,2, 24, 28} }, -{ {2,1,0,1,0,0,1,0, 27, 31} }, -{ {2,1,0,1,0,0,1,1, 23, 39} }, -{ {2,1,0,1,0,0,1,2, 53, 11} }, -{ {2,1,0,1,0,0,2,0, 40, 10} }, -{ {2,1,0,1,0,0,2,1, 31, 23} }, -{ {2,1,0,1,0,0,2,2, 47, 11} }, -{ {2,1,0,1,0,1,0,0, 17, 4} }, -{ {2,1,0,1,0,1,0,1, 10, 22} }, -{ {2,1,0,1,0,1,0,2, 32, 27} }, -{ {2,1,0,1,0,1,1,0, 38, 8} }, -{ {2,1,0,1,0,1,1,1, 6, 22} }, -{ {2,1,0,1,0,1,1,2, 30, 8} }, -{ {2,1,0,1,0,1,2,0, 39, 8} }, -{ {2,1,0,1,0,1,2,1, 12, 9} }, -{ {2,1,0,1,0,1,2,2, 31, 8} }, -{ {2,1,0,1,0,2,0,0, 18, 29} }, -{ {2,1,0,1,0,2,0,1, 42, 46} }, -{ {2,1,0,1,0,2,0,2, 29, 46} }, -{ {2,1,0,1,0,2,1,0, 50, 15} }, -{ {2,1,0,1,0,2,1,1, 36, 39} }, -{ {2,1,0,1,0,2,1,2, 48, 35} }, -{ {2,1,0,1,0,2,2,0, 51, 15} }, -{ {2,1,0,1,0,2,2,1, 39, 23} }, -{ {2,1,0,1,0,2,2,2, 40, 5} }, -{ {2,1,0,1,1,0,0,0, 23, 5} }, -{ {2,1,0,1,1,0,0,1, 27, 23} }, -{ {2,1,0,1,1,0,0,2, 53, 27} }, -{ {2,1,0,1,1,0,1,0, 45, 30} }, -{ {2,1,0,1,1,0,1,1, 21, 24} }, -{ {2,1,0,1,1,0,1,2, 52, 15} }, -{ {2,1,0,1,1,0,2,0, 48, 36} }, -{ {2,1,0,1,1,0,2,1, 30, 23} }, -{ {2,1,0,1,1,0,2,2, 53, 14} }, -{ {2,1,0,1,1,1,0,0, 28, 25} }, -{ {2,1,0,1,1,1,0,1, 8, 36} }, -{ {2,1,0,1,1,1,0,2, 24, 8} }, -{ {2,1,0,1,1,1,1,0, 35, 3} }, -{ {2,1,0,1,1,1,1,1, 3, 30} }, -{ {2,1,0,1,1,1,1,2, 21, 3} }, -{ {2,1,0,1,1,1,2,0, 36, 8} }, -{ {2,1,0,1,1,1,2,1, 6, 9} }, -{ {2,1,0,1,1,1,2,2, 23, 42} }, -{ {2,1,0,1,1,2,0,0, 31, 25} }, -{ {2,1,0,1,1,2,0,1, 40, 34} }, -{ {2,1,0,1,1,2,0,2, 47, 35} }, -{ {2,1,0,1,1,2,1,0, 49, 15} }, -{ {2,1,0,1,1,2,1,1, 35, 24} }, -{ {2,1,0,1,1,2,1,2, 45, 31} }, -{ {2,1,0,1,1,2,2,0, 50, 14} }, -{ {2,1,0,1,1,2,2,1, 38, 23} }, -{ {2,1,0,1,1,2,2,2, 27, 30} }, -{ {2,1,0,1,2,0,0,0, 37, 25} }, -{ {2,1,0,1,2,0,0,1, 29, 23} }, -{ {2,1,0,1,2,0,0,2, 47, 27} }, -{ {2,1,0,1,2,0,1,0, 47, 37} }, -{ {2,1,0,1,2,0,1,1, 24, 23} }, -{ {2,1,0,1,2,0,1,2, 53, 34} }, -{ {2,1,0,1,2,0,2,0, 29, 47} }, -{ {2,1,0,1,2,0,2,1, 32, 23} }, -{ {2,1,0,1,2,0,2,2, 24, 29} }, -{ {2,1,0,1,2,1,0,0, 41, 25} }, -{ {2,1,0,1,2,1,0,1, 11, 22} }, -{ {2,1,0,1,2,1,0,2, 29, 8} }, -{ {2,1,0,1,2,1,1,0, 40, 35} }, -{ {2,1,0,1,2,1,1,1, 8, 37} }, -{ {2,1,0,1,2,1,1,2, 27, 8} }, -{ {2,1,0,1,2,1,2,0, 42, 35} }, -{ {2,1,0,1,2,1,2,1, 10, 9} }, -{ {2,1,0,1,2,1,2,2, 28, 8} }, -{ {2,1,0,1,2,2,0,0, 43, 25} }, -{ {2,1,0,1,2,2,0,1, 41, 34} }, -{ {2,1,0,1,2,2,0,2, 37, 10} }, -{ {2,1,0,1,2,2,1,0, 31, 2} }, -{ {2,1,0,1,2,2,1,1, 28, 2} }, -{ {2,1,0,1,2,2,1,2, 23, 10} }, -{ {2,1,0,1,2,2,2,0, 18, 28} }, -{ {2,1,0,1,2,2,2,1, 17, 2} }, -{ {2,1,0,1,2,2,2,2, 8, 11} }, -{ {2,1,0,2,0,0,0,0, 6, 4} }, -{ {2,1,0,2,0,0,0,1, 36, 28} }, -{ {2,1,0,2,0,0,0,2, 23, 46} }, -{ {2,1,0,2,0,0,1,0, 30, 10} }, -{ {2,1,0,2,0,0,1,1, 48, 10} }, -{ {2,1,0,2,0,0,1,2, 53, 2} }, -{ {2,1,0,2,0,0,2,0, 38, 10} }, -{ {2,1,0,2,0,0,2,1, 50, 2} }, -{ {2,1,0,2,0,0,2,2, 27, 24} }, -{ {2,1,0,2,0,1,0,0, 18, 27} }, -{ {2,1,0,2,0,1,0,1, 42, 27} }, -{ {2,1,0,2,0,1,0,2, 29, 27} }, -{ {2,1,0,2,0,1,1,0, 50, 9} }, -{ {2,1,0,2,0,1,1,1, 36, 30} }, -{ {2,1,0,2,0,1,1,2, 48, 8} }, -{ {2,1,0,2,0,1,2,0, 51, 9} }, -{ {2,1,0,2,0,1,2,1, 39, 9} }, -{ {2,1,0,2,0,1,2,2, 40, 24} }, -{ {2,1,0,2,0,2,0,0, 15, 4} }, -{ {2,1,0,2,0,2,0,1, 39, 27} }, -{ {2,1,0,2,0,2,0,2, 26, 27} }, -{ {2,1,0,2,0,2,1,0, 57, 4} }, -{ {2,1,0,2,0,2,1,1, 50, 5} }, -{ {2,1,0,2,0,2,1,2, 30, 22} }, -{ {2,1,0,2,0,2,2,0, 55, 4} }, -{ {2,1,0,2,0,2,2,1, 56, 12} }, -{ {2,1,0,2,0,2,2,2, 16, 5} }, -{ {2,1,0,2,1,0,0,0, 36, 5} }, -{ {2,1,0,2,1,0,0,1, 50, 27} }, -{ {2,1,0,2,1,0,0,2, 48, 45} }, -{ {2,1,0,2,1,0,1,0, 48, 31} }, -{ {2,1,0,2,1,0,1,1, 30, 4} }, -{ {2,1,0,2,1,0,1,2, 53, 47} }, -{ {2,1,0,2,1,0,2,0, 50, 30} }, -{ {2,1,0,2,1,0,2,1, 57, 3} }, -{ {2,1,0,2,1,0,2,2, 30, 24} }, -{ {2,1,0,2,1,1,0,0, 42, 44} }, -{ {2,1,0,2,1,1,0,1, 18, 9} }, -{ {2,1,0,2,1,1,0,2, 29, 42} }, -{ {2,1,0,2,1,1,1,0, 36, 11} }, -{ {2,1,0,2,1,1,1,1, 6, 10} }, -{ {2,1,0,2,1,1,1,2, 23, 3} }, -{ {2,1,0,2,1,1,2,0, 39, 3} }, -{ {2,1,0,2,1,1,2,1, 15, 3} }, -{ {2,1,0,2,1,1,2,2, 26, 3} }, -{ {2,1,0,2,1,2,0,0, 39, 25} }, -{ {2,1,0,2,1,2,0,1, 51, 27} }, -{ {2,1,0,2,1,2,0,2, 40, 37} }, -{ {2,1,0,2,1,2,1,0, 50, 28} }, -{ {2,1,0,2,1,2,1,1, 38, 4} }, -{ {2,1,0,2,1,2,1,2, 27, 37} }, -{ {2,1,0,2,1,2,2,0, 56, 6} }, -{ {2,1,0,2,1,2,2,1, 55, 3} }, -{ {2,1,0,2,1,2,2,2, 16, 30} }, -{ {2,1,0,2,2,0,0,0, 23, 25} }, -{ {2,1,0,2,2,0,0,1, 48, 26} }, -{ {2,1,0,2,2,0,0,2, 45, 27} }, -{ {2,1,0,2,2,0,1,0, 53, 37} }, -{ {2,1,0,2,2,0,1,1, 53, 24} }, -{ {2,1,0,2,2,0,1,2, 52, 13} }, -{ {2,1,0,2,2,0,2,0, 27, 47} }, -{ {2,1,0,2,2,0,2,1, 30, 12} }, -{ {2,1,0,2,2,0,2,2, 21, 4} }, -{ {2,1,0,2,2,1,0,0, 29, 44} }, -{ {2,1,0,2,2,1,0,1, 29, 9} }, -{ {2,1,0,2,2,1,0,2, 46, 27} }, -{ {2,1,0,2,2,1,1,0, 48, 43} }, -{ {2,1,0,2,2,1,1,1, 23, 36} }, -{ {2,1,0,2,2,1,1,2, 45, 9} }, -{ {2,1,0,2,2,1,2,0, 40, 47} }, -{ {2,1,0,2,2,1,2,1, 26, 9} }, -{ {2,1,0,2,2,1,2,2, 34, 4} }, -{ {2,1,0,2,2,2,0,0, 26, 25} }, -{ {2,1,0,2,2,2,0,1, 40, 2} }, -{ {2,1,0,2,2,2,0,2, 34, 10} }, -{ {2,1,0,2,2,2,1,0, 30, 2} }, -{ {2,1,0,2,2,2,1,1, 27, 2} }, -{ {2,1,0,2,2,2,1,2, 21, 10} }, -{ {2,1,0,2,2,2,2,0, 16, 28} }, -{ {2,1,0,2,2,2,2,1, 16, 2} }, -{ {2,1,0,2,2,2,2,2, 7, 5} }, -{ {2,1,1,0,0,0,0,0, 6, 5} }, -{ {2,1,1,0,0,0,0,1, 38, 11} }, -{ {2,1,1,0,0,0,0,2, 30, 11} }, -{ {2,1,1,0,0,0,1,0, 23, 37} }, -{ {2,1,1,0,0,0,1,1, 27, 25} }, -{ {2,1,1,0,0,0,1,2, 53, 3} }, -{ {2,1,1,0,0,0,2,0, 36, 37} }, -{ {2,1,1,0,0,0,2,1, 50, 3} }, -{ {2,1,1,0,0,0,2,2, 48, 11} }, -{ {2,1,1,0,0,1,0,0, 23, 24} }, -{ {2,1,1,0,0,1,0,1, 27, 36} }, -{ {2,1,1,0,0,1,0,2, 53, 46} }, -{ {2,1,1,0,0,1,1,0, 45, 22} }, -{ {2,1,1,0,0,1,1,1, 21, 5} }, -{ {2,1,1,0,0,1,1,2, 52, 8} }, -{ {2,1,1,0,0,1,2,0, 48, 23} }, -{ {2,1,1,0,0,1,2,1, 30, 9} }, -{ {2,1,1,0,0,1,2,2, 53, 43} }, -{ {2,1,1,0,0,2,0,0, 36, 24} }, -{ {2,1,1,0,0,2,0,1, 50, 29} }, -{ {2,1,1,0,0,2,0,2, 48, 28} }, -{ {2,1,1,0,0,2,1,0, 48, 38} }, -{ {2,1,1,0,0,2,1,1, 30, 25} }, -{ {2,1,1,0,0,2,1,2, 53, 26} }, -{ {2,1,1,0,0,2,2,0, 50, 22} }, -{ {2,1,1,0,0,2,2,1, 57, 7} }, -{ {2,1,1,0,0,2,2,2, 30, 5} }, -{ {2,1,1,0,1,0,0,0, 15, 5} }, -{ {2,1,1,0,1,0,0,1, 55, 5} }, -{ {2,1,1,0,1,0,0,2, 57, 5} }, -{ {2,1,1,0,1,0,1,0, 26, 22} }, -{ {2,1,1,0,1,0,1,1, 16, 4} }, -{ {2,1,1,0,1,0,1,2, 30, 27} }, -{ {2,1,1,0,1,0,2,0, 39, 22} }, -{ {2,1,1,0,1,0,2,1, 56, 9} }, -{ {2,1,1,0,1,0,2,2, 50, 4} }, -{ {2,1,1,0,1,1,0,0, 26, 24} }, -{ {2,1,1,0,1,1,0,1, 16, 31} }, -{ {2,1,1,0,1,1,0,2, 30, 3} }, -{ {2,1,1,0,1,1,1,0, 34, 11} }, -{ {2,1,1,0,1,1,1,1, 7, 4} }, -{ {2,1,1,0,1,1,1,2, 21, 11} }, -{ {2,1,1,0,1,1,2,0, 40, 3} }, -{ {2,1,1,0,1,1,2,1, 16, 3} }, -{ {2,1,1,0,1,1,2,2, 27, 3} }, -{ {2,1,1,0,1,2,0,0, 39, 24} }, -{ {2,1,1,0,1,2,0,1, 56, 7} }, -{ {2,1,1,0,1,2,0,2, 50, 31} }, -{ {2,1,1,0,1,2,1,0, 40, 46} }, -{ {2,1,1,0,1,2,1,1, 16, 29} }, -{ {2,1,1,0,1,2,1,2, 27, 46} }, -{ {2,1,1,0,1,2,2,0, 51, 23} }, -{ {2,1,1,0,1,2,2,1, 55, 2} }, -{ {2,1,1,0,1,2,2,2, 38, 5} }, -{ {2,1,1,0,2,0,0,0, 18, 22} }, -{ {2,1,1,0,2,0,0,1, 51, 12} }, -{ {2,1,1,0,2,0,0,2, 50, 12} }, -{ {2,1,1,0,2,0,1,0, 29, 22} }, -{ {2,1,1,0,2,0,1,1, 40, 25} }, -{ {2,1,1,0,2,0,1,2, 48, 27} }, -{ {2,1,1,0,2,0,2,0, 42, 22} }, -{ {2,1,1,0,2,0,2,1, 39, 12} }, -{ {2,1,1,0,2,0,2,2, 36, 29} }, -{ {2,1,1,0,2,1,0,0, 29, 39} }, -{ {2,1,1,0,2,1,0,1, 40, 36} }, -{ {2,1,1,0,2,1,0,2, 48, 42} }, -{ {2,1,1,0,2,1,1,0, 46, 22} }, -{ {2,1,1,0,2,1,1,1, 34, 5} }, -{ {2,1,1,0,2,1,1,2, 45, 12} }, -{ {2,1,1,0,2,1,2,0, 29, 12} }, -{ {2,1,1,0,2,1,2,1, 26, 12} }, -{ {2,1,1,0,2,1,2,2, 23, 47} }, -{ {2,1,1,0,2,2,0,0, 42, 39} }, -{ {2,1,1,0,2,2,0,1, 39, 2} }, -{ {2,1,1,0,2,2,0,2, 36, 10} }, -{ {2,1,1,0,2,2,1,0, 29, 33} }, -{ {2,1,1,0,2,2,1,1, 26, 2} }, -{ {2,1,1,0,2,2,1,2, 23, 2} }, -{ {2,1,1,0,2,2,2,0, 18, 12} }, -{ {2,1,1,0,2,2,2,1, 15, 2} }, -{ {2,1,1,0,2,2,2,2, 6, 11} }, -{ {2,1,1,1,0,0,0,0, 10, 5} }, -{ {2,1,1,1,0,0,0,1, 17, 23} }, -{ {2,1,1,1,0,0,0,2, 32, 11} }, -{ {2,1,1,1,0,0,1,0, 28, 31} }, -{ {2,1,1,1,0,0,1,1, 8, 38} }, -{ {2,1,1,1,0,0,1,2, 24, 6} }, -{ {2,1,1,1,0,0,2,0, 42, 10} }, -{ {2,1,1,1,0,0,2,1, 18, 7} }, -{ {2,1,1,1,0,0,2,2, 29, 16} }, -{ {2,1,1,1,0,1,0,0, 28, 4} }, -{ {2,1,1,1,0,1,0,1, 8, 23} }, -{ {2,1,1,1,0,1,0,2, 24, 15} }, -{ {2,1,1,1,0,1,1,0, 35, 15} }, -{ {2,1,1,1,0,1,1,1, 3, 22} }, -{ {2,1,1,1,0,1,1,2, 21, 15} }, -{ {2,1,1,1,0,1,2,0, 36, 35} }, -{ {2,1,1,1,0,1,2,1, 6, 23} }, -{ {2,1,1,1,0,1,2,2, 23, 15} }, -{ {2,1,1,1,0,2,0,0, 42, 29} }, -{ {2,1,1,1,0,2,0,1, 18, 15} }, -{ {2,1,1,1,0,2,0,2, 29, 15} }, -{ {2,1,1,1,0,2,1,0, 36, 6} }, -{ {2,1,1,1,0,2,1,1, 6, 7} }, -{ {2,1,1,1,0,2,1,2, 23, 16} }, -{ {2,1,1,1,0,2,2,0, 39, 15} }, -{ {2,1,1,1,0,2,2,1, 15, 7} }, -{ {2,1,1,1,0,2,2,2, 26, 15} }, -{ {2,1,1,1,1,0,0,0, 26, 5} }, -{ {2,1,1,1,1,0,0,1, 16, 23} }, -{ {2,1,1,1,1,0,0,2, 30, 15} }, -{ {2,1,1,1,1,0,1,0, 34, 6} }, -{ {2,1,1,1,1,0,1,1, 7, 25} }, -{ {2,1,1,1,1,0,1,2, 21, 6} }, -{ {2,1,1,1,1,0,2,0, 40, 16} }, -{ {2,1,1,1,1,0,2,1, 16, 7} }, -{ {2,1,1,1,1,0,2,2, 27, 16} }, -{ {2,1,1,1,1,1,0,0, 34, 8} }, -{ {2,1,1,1,1,1,0,1, 7, 23} }, -{ {2,1,1,1,1,1,0,2, 21, 8} }, -{ {2,1,1,1,1,1,1,0, 33, 6} }, -{ {2,1,1,1,1,1,1,1, 1, 5} }, -{ {2,1,1,1,1,1,1,2, 19, 6} }, -{ {2,1,1,1,1,1,2,0, 35, 8} }, -{ {2,1,1,1,1,1,2,1, 4, 9} }, -{ {2,1,1,1,1,1,2,2, 20, 8} }, -{ {2,1,1,1,1,2,0,0, 40, 15} }, -{ {2,1,1,1,1,2,0,1, 16, 15} }, -{ {2,1,1,1,1,2,0,2, 27, 15} }, -{ {2,1,1,1,1,2,1,0, 35, 6} }, -{ {2,1,1,1,1,2,1,1, 4, 7} }, -{ {2,1,1,1,1,2,1,2, 20, 6} }, -{ {2,1,1,1,1,2,2,0, 38, 15} }, -{ {2,1,1,1,1,2,2,1, 13, 7} }, -{ {2,1,1,1,1,2,2,2, 25, 15} }, -{ {2,1,1,1,2,0,0,0, 43, 5} }, -{ {2,1,1,1,2,0,0,1, 18, 23} }, -{ {2,1,1,1,2,0,0,2, 31, 15} }, -{ {2,1,1,1,2,0,1,0, 37, 6} }, -{ {2,1,1,1,2,0,1,1, 8, 7} }, -{ {2,1,1,1,2,0,1,2, 23, 6} }, -{ {2,1,1,1,2,0,2,0, 41, 16} }, -{ {2,1,1,1,2,0,2,1, 17, 7} }, -{ {2,1,1,1,2,0,2,2, 28, 16} }, -{ {2,1,1,1,2,1,0,0, 37, 35} }, -{ {2,1,1,1,2,1,0,1, 8, 34} }, -{ {2,1,1,1,2,1,0,2, 23, 35} }, -{ {2,1,1,1,2,1,1,0, 34, 15} }, -{ {2,1,1,1,2,1,1,1, 2, 22} }, -{ {2,1,1,1,2,1,1,2, 20, 15} }, -{ {2,1,1,1,2,1,2,0, 28, 12} }, -{ {2,1,1,1,2,1,2,1, 5, 23} }, -{ {2,1,1,1,2,1,2,2, 22, 15} }, -{ {2,1,1,1,2,2,0,0, 41, 15} }, -{ {2,1,1,1,2,2,0,1, 17, 15} }, -{ {2,1,1,1,2,2,0,2, 28, 15} }, -{ {2,1,1,1,2,2,1,0, 28, 33} }, -{ {2,1,1,1,2,2,1,1, 5, 7} }, -{ {2,1,1,1,2,2,1,2, 22, 6} }, -{ {2,1,1,1,2,2,2,0, 17, 12} }, -{ {2,1,1,1,2,2,2,1, 14, 7} }, -{ {2,1,1,1,2,2,2,2, 5, 11} }, -{ {2,1,1,2,0,0,0,0, 12, 4} }, -{ {2,1,1,2,0,0,0,1, 39, 11} }, -{ {2,1,1,2,0,0,0,2, 31, 11} }, -{ {2,1,1,2,0,0,1,0, 31, 10} }, -{ {2,1,1,2,0,0,1,1, 40, 44} }, -{ {2,1,1,2,0,0,1,2, 47, 45} }, -{ {2,1,1,2,0,0,2,0, 39, 10} }, -{ {2,1,1,2,0,0,2,1, 51, 3} }, -{ {2,1,1,2,0,0,2,2, 40, 39} }, -{ {2,1,1,2,0,1,0,0, 31, 4} }, -{ {2,1,1,2,0,1,0,1, 40, 9} }, -{ {2,1,1,2,0,1,0,2, 47, 8} }, -{ {2,1,1,2,0,1,1,0, 49, 9} }, -{ {2,1,1,2,0,1,1,1, 35, 5} }, -{ {2,1,1,2,0,1,1,2, 45, 23} }, -{ {2,1,1,2,0,1,2,0, 50, 8} }, -{ {2,1,1,2,0,1,2,1, 38, 9} }, -{ {2,1,1,2,0,1,2,2, 27, 39} }, -{ {2,1,1,2,0,2,0,0, 39, 4} }, -{ {2,1,1,2,0,2,0,1, 51, 29} }, -{ {2,1,1,2,0,2,0,2, 40, 22} }, -{ {2,1,1,2,0,2,1,0, 50, 26} }, -{ {2,1,1,2,0,2,1,1, 38, 25} }, -{ {2,1,1,2,0,2,1,2, 27, 22} }, -{ {2,1,1,2,0,2,2,0, 56, 5} }, -{ {2,1,1,2,0,2,2,1, 55, 7} }, -{ {2,1,1,2,0,2,2,2, 16, 22} }, -{ {2,1,1,2,1,0,0,0, 39, 5} }, -{ {2,1,1,2,1,0,0,1, 56, 4} }, -{ {2,1,1,2,1,0,0,2, 50, 23} }, -{ {2,1,1,2,1,0,1,0, 40, 27} }, -{ {2,1,1,2,1,0,1,1, 16, 27} }, -{ {2,1,1,2,1,0,1,2, 27, 27} }, -{ {2,1,1,2,1,0,2,0, 51, 31} }, -{ {2,1,1,2,1,0,2,1, 55, 6} }, -{ {2,1,1,2,1,0,2,2, 38, 24} }, -{ {2,1,1,2,1,1,0,0, 40, 42} }, -{ {2,1,1,2,1,1,0,1, 16, 9} }, -{ {2,1,1,2,1,1,0,2, 27, 42} }, -{ {2,1,1,2,1,1,1,0, 35, 11} }, -{ {2,1,1,2,1,1,1,1, 4, 4} }, -{ {2,1,1,2,1,1,1,2, 20, 11} }, -{ {2,1,1,2,1,1,2,0, 38, 3} }, -{ {2,1,1,2,1,1,2,1, 13, 3} }, -{ {2,1,1,2,1,1,2,2, 25, 3} }, -{ {2,1,1,2,1,2,0,0, 51, 4} }, -{ {2,1,1,2,1,2,0,1, 55, 1} }, -{ {2,1,1,2,1,2,0,2, 38, 22} }, -{ {2,1,1,2,1,2,1,0, 38, 27} }, -{ {2,1,1,2,1,2,1,1, 13, 4} }, -{ {2,1,1,2,1,2,1,2, 25, 27} }, -{ {2,1,1,2,1,2,2,0, 55, 0} }, -{ {2,1,1,2,1,2,2,1, 54, 1} }, -{ {2,1,1,2,1,2,2,2, 13, 5} }, -{ {2,1,1,2,2,0,0,0, 31, 5} }, -{ {2,1,1,2,2,0,0,1, 50, 13} }, -{ {2,1,1,2,2,0,0,2, 49, 12} }, -{ {2,1,1,2,2,0,1,0, 47, 26} }, -{ {2,1,1,2,2,0,1,1, 27, 44} }, -{ {2,1,1,2,2,0,1,2, 45, 26} }, -{ {2,1,1,2,2,0,2,0, 40, 12} }, -{ {2,1,1,2,2,0,2,1, 38, 12} }, -{ {2,1,1,2,2,0,2,2, 35, 4} }, -{ {2,1,1,2,2,1,0,0, 47, 43} }, -{ {2,1,1,2,2,1,0,1, 27, 9} }, -{ {2,1,1,2,2,1,0,2, 45, 8} }, -{ {2,1,1,2,2,1,1,0, 45, 13} }, -{ {2,1,1,2,2,1,1,1, 20, 5} }, -{ {2,1,1,2,2,1,1,2, 44, 9} }, -{ {2,1,1,2,2,1,2,0, 27, 12} }, -{ {2,1,1,2,2,1,2,1, 25, 9} }, -{ {2,1,1,2,2,1,2,2, 20, 4} }, -{ {2,1,1,2,2,2,0,0, 40, 33} }, -{ {2,1,1,2,2,2,0,1, 38, 2} }, -{ {2,1,1,2,2,2,0,2, 35, 10} }, -{ {2,1,1,2,2,2,1,0, 27, 33} }, -{ {2,1,1,2,2,2,1,1, 25, 25} }, -{ {2,1,1,2,2,2,1,2, 20, 10} }, -{ {2,1,1,2,2,2,2,0, 16, 12} }, -{ {2,1,1,2,2,2,2,1, 13, 2} }, -{ {2,1,1,2,2,2,2,2, 4, 5} }, -{ {2,1,2,0,0,0,0,0, 8, 5} }, -{ {2,1,2,0,0,0,0,1, 40, 11} }, -{ {2,1,2,0,0,0,0,2, 27, 28} }, -{ {2,1,2,0,0,0,1,0, 24, 31} }, -{ {2,1,2,0,0,0,1,1, 47, 10} }, -{ {2,1,2,0,0,0,1,2, 53, 10} }, -{ {2,1,2,0,0,0,2,0, 28, 26} }, -{ {2,1,2,0,0,0,2,1, 31, 26} }, -{ {2,1,2,0,0,0,2,2, 23, 44} }, -{ {2,1,2,0,0,1,0,0, 37, 4} }, -{ {2,1,2,0,0,1,0,1, 29, 36} }, -{ {2,1,2,0,0,1,0,2, 47, 46} }, -{ {2,1,2,0,0,1,1,0, 47, 22} }, -{ {2,1,2,0,0,1,1,1, 24, 30} }, -{ {2,1,2,0,0,1,1,2, 53, 9} }, -{ {2,1,2,0,0,1,2,0, 29, 26} }, -{ {2,1,2,0,0,1,2,1, 32, 9} }, -{ {2,1,2,0,0,1,2,2, 24, 26} }, -{ {2,1,2,0,0,2,0,0, 23, 4} }, -{ {2,1,2,0,0,2,0,1, 48, 47} }, -{ {2,1,2,0,0,2,0,2, 45, 29} }, -{ {2,1,2,0,0,2,1,0, 53, 22} }, -{ {2,1,2,0,0,2,1,1, 53, 5} }, -{ {2,1,2,0,0,2,1,2, 52, 18} }, -{ {2,1,2,0,0,2,2,0, 27, 26} }, -{ {2,1,2,0,0,2,2,1, 30, 26} }, -{ {2,1,2,0,0,2,2,2, 21, 25} }, -{ {2,1,2,0,1,0,0,0, 18, 30} }, -{ {2,1,2,0,1,0,0,1, 51, 18} }, -{ {2,1,2,0,1,0,0,2, 50, 18} }, -{ {2,1,2,0,1,0,1,0, 29, 37} }, -{ {2,1,2,0,1,0,1,1, 40, 4} }, -{ {2,1,2,0,1,0,1,2, 48, 46} }, -{ {2,1,2,0,1,0,2,0, 42, 37} }, -{ {2,1,2,0,1,0,2,1, 39, 26} }, -{ {2,1,2,0,1,0,2,2, 36, 44} }, -{ {2,1,2,0,1,1,0,0, 43, 24} }, -{ {2,1,2,0,1,1,0,1, 18, 31} }, -{ {2,1,2,0,1,1,0,2, 31, 3} }, -{ {2,1,2,0,1,1,1,0, 37, 11} }, -{ {2,1,2,0,1,1,1,1, 8, 10} }, -{ {2,1,2,0,1,1,1,2, 23, 11} }, -{ {2,1,2,0,1,1,2,0, 41, 3} }, -{ {2,1,2,0,1,1,2,1, 17, 3} }, -{ {2,1,2,0,1,1,2,2, 28, 3} }, -{ {2,1,2,0,1,2,0,0, 31, 24} }, -{ {2,1,2,0,1,2,0,1, 50, 19} }, -{ {2,1,2,0,1,2,0,2, 49, 18} }, -{ {2,1,2,0,1,2,1,0, 47, 47} }, -{ {2,1,2,0,1,2,1,1, 27, 29} }, -{ {2,1,2,0,1,2,1,2, 45, 28} }, -{ {2,1,2,0,1,2,2,0, 40, 41} }, -{ {2,1,2,0,1,2,2,1, 38, 26} }, -{ {2,1,2,0,1,2,2,2, 35, 25} }, -{ {2,1,2,0,2,0,0,0, 17, 5} }, -{ {2,1,2,0,2,0,0,1, 39, 13} }, -{ {2,1,2,0,2,0,0,2, 38, 13} }, -{ {2,1,2,0,2,0,1,0, 32, 22} }, -{ {2,1,2,0,2,0,1,1, 31, 13} }, -{ {2,1,2,0,2,0,1,2, 30, 13} }, -{ {2,1,2,0,2,0,2,0, 10, 27} }, -{ {2,1,2,0,2,0,2,1, 12, 12} }, -{ {2,1,2,0,2,0,2,2, 6, 27} }, -{ {2,1,2,0,2,1,0,0, 41, 24} }, -{ {2,1,2,0,2,1,0,1, 42, 36} }, -{ {2,1,2,0,2,1,0,2, 40, 40} }, -{ {2,1,2,0,2,1,1,0, 29, 13} }, -{ {2,1,2,0,2,1,1,1, 28, 13} }, -{ {2,1,2,0,2,1,1,2, 27, 13} }, -{ {2,1,2,0,2,1,2,0, 11, 27} }, -{ {2,1,2,0,2,1,2,1, 10, 12} }, -{ {2,1,2,0,2,1,2,2, 8, 46} }, -{ {2,1,2,0,2,2,0,0, 28, 24} }, -{ {2,1,2,0,2,2,0,1, 36, 13} }, -{ {2,1,2,0,2,2,0,2, 35, 2} }, -{ {2,1,2,0,2,2,1,0, 24, 13} }, -{ {2,1,2,0,2,2,1,1, 23, 33} }, -{ {2,1,2,0,2,2,1,2, 21, 2} }, -{ {2,1,2,0,2,2,2,0, 8, 47} }, -{ {2,1,2,0,2,2,2,1, 6, 12} }, -{ {2,1,2,0,2,2,2,2, 3, 29} }, -{ {2,1,2,1,0,0,0,0, 11, 31} }, -{ {2,1,2,1,0,0,0,1, 41, 11} }, -{ {2,1,2,1,0,0,0,2, 29, 28} }, -{ {2,1,2,1,0,0,1,0, 29, 31} }, -{ {2,1,2,1,0,0,1,1, 37, 23} }, -{ {2,1,2,1,0,0,1,2, 47, 15} }, -{ {2,1,2,1,0,0,2,0, 41, 10} }, -{ {2,1,2,1,0,0,2,1, 43, 23} }, -{ {2,1,2,1,0,0,2,2, 37, 26} }, -{ {2,1,2,1,0,1,0,0, 41, 4} }, -{ {2,1,2,1,0,1,0,1, 11, 37} }, -{ {2,1,2,1,0,1,0,2, 29, 35} }, -{ {2,1,2,1,0,1,1,0, 40, 8} }, -{ {2,1,2,1,0,1,1,1, 8, 22} }, -{ {2,1,2,1,0,1,1,2, 27, 35} }, -{ {2,1,2,1,0,1,2,0, 42, 8} }, -{ {2,1,2,1,0,1,2,1, 10, 23} }, -{ {2,1,2,1,0,1,2,2, 28, 35} }, -{ {2,1,2,1,0,2,0,0, 29, 29} }, -{ {2,1,2,1,0,2,0,1, 29, 34} }, -{ {2,1,2,1,0,2,0,2, 46, 28} }, -{ {2,1,2,1,0,2,1,0, 48, 14} }, -{ {2,1,2,1,0,2,1,1, 23, 23} }, -{ {2,1,2,1,0,2,1,2, 45, 15} }, -{ {2,1,2,1,0,2,2,0, 40, 26} }, -{ {2,1,2,1,0,2,2,1, 26, 23} }, -{ {2,1,2,1,0,2,2,2, 34, 25} }, -{ {2,1,2,1,1,0,0,0, 29, 30} }, -{ {2,1,2,1,1,0,0,1, 40, 23} }, -{ {2,1,2,1,1,0,0,2, 48, 15} }, -{ {2,1,2,1,1,0,1,0, 46, 31} }, -{ {2,1,2,1,1,0,1,1, 34, 24} }, -{ {2,1,2,1,1,0,1,2, 45, 18} }, -{ {2,1,2,1,1,0,2,0, 29, 41} }, -{ {2,1,2,1,1,0,2,1, 26, 26} }, -{ {2,1,2,1,1,0,2,2, 23, 26} }, -{ {2,1,2,1,1,1,0,0, 37, 8} }, -{ {2,1,2,1,1,1,0,1, 8, 9} }, -{ {2,1,2,1,1,1,0,2, 23, 8} }, -{ {2,1,2,1,1,1,1,0, 34, 3} }, -{ {2,1,2,1,1,1,1,1, 2, 31} }, -{ {2,1,2,1,1,1,1,2, 20, 3} }, -{ {2,1,2,1,1,1,2,0, 28, 41} }, -{ {2,1,2,1,1,1,2,1, 5, 9} }, -{ {2,1,2,1,1,1,2,2, 22, 8} }, -{ {2,1,2,1,1,2,0,0, 47, 14} }, -{ {2,1,2,1,1,2,0,1, 27, 34} }, -{ {2,1,2,1,1,2,0,2, 45, 14} }, -{ {2,1,2,1,1,2,1,0, 45, 19} }, -{ {2,1,2,1,1,2,1,1, 20, 24} }, -{ {2,1,2,1,1,2,1,2, 44, 15} }, -{ {2,1,2,1,1,2,2,0, 27, 41} }, -{ {2,1,2,1,1,2,2,1, 25, 23} }, -{ {2,1,2,1,1,2,2,2, 20, 25} }, -{ {2,1,2,1,2,0,0,0, 41, 5} }, -{ {2,1,2,1,2,0,0,1, 42, 23} }, -{ {2,1,2,1,2,0,0,2, 40, 13} }, -{ {2,1,2,1,2,0,1,0, 29, 40} }, -{ {2,1,2,1,2,0,1,1, 28, 40} }, -{ {2,1,2,1,2,0,1,2, 27, 40} }, -{ {2,1,2,1,2,0,2,0, 11, 46} }, -{ {2,1,2,1,2,0,2,1, 10, 26} }, -{ {2,1,2,1,2,0,2,2, 8, 27} }, -{ {2,1,2,1,2,1,0,0, 43, 8} }, -{ {2,1,2,1,2,1,0,1, 10, 8} }, -{ {2,1,2,1,2,1,0,2, 26, 8} }, -{ {2,1,2,1,2,1,1,0, 26, 13} }, -{ {2,1,2,1,2,1,1,1, 5, 22} }, -{ {2,1,2,1,2,1,1,2, 25, 8} }, -{ {2,1,2,1,2,1,2,0, 10, 13} }, -{ {2,1,2,1,2,1,2,1, 9, 9} }, -{ {2,1,2,1,2,1,2,2, 5, 27} }, -{ {2,1,2,1,2,2,0,0, 37, 13} }, -{ {2,1,2,1,2,2,0,1, 28, 34} }, -{ {2,1,2,1,2,2,0,2, 34, 2} }, -{ {2,1,2,1,2,2,1,0, 23, 13} }, -{ {2,1,2,1,2,2,1,1, 22, 23} }, -{ {2,1,2,1,2,2,1,2, 20, 2} }, -{ {2,1,2,1,2,2,2,0, 8, 12} }, -{ {2,1,2,1,2,2,2,1, 5, 12} }, -{ {2,1,2,1,2,2,2,2, 2, 28} }, -{ {2,1,2,2,0,0,0,0, 10, 4} }, -{ {2,1,2,2,0,0,0,1, 42, 11} }, -{ {2,1,2,2,0,0,0,2, 28, 28} }, -{ {2,1,2,2,0,0,1,0, 32, 10} }, -{ {2,1,2,2,0,0,1,1, 29, 17} }, -{ {2,1,2,2,0,0,1,2, 24, 7} }, -{ {2,1,2,2,0,0,2,0, 17, 26} }, -{ {2,1,2,2,0,0,2,1, 18, 6} }, -{ {2,1,2,2,0,0,2,2, 8, 45} }, -{ {2,1,2,2,0,1,0,0, 43, 4} }, -{ {2,1,2,2,0,1,0,1, 41, 9} }, -{ {2,1,2,2,0,1,0,2, 37, 7} }, -{ {2,1,2,2,0,1,1,0, 31, 18} }, -{ {2,1,2,2,0,1,1,1, 28, 17} }, -{ {2,1,2,2,0,1,1,2, 23, 7} }, -{ {2,1,2,2,0,1,2,0, 18, 26} }, -{ {2,1,2,2,0,1,2,1, 17, 6} }, -{ {2,1,2,2,0,1,2,2, 8, 6} }, -{ {2,1,2,2,0,2,0,0, 26, 4} }, -{ {2,1,2,2,0,2,0,1, 40, 17} }, -{ {2,1,2,2,0,2,0,2, 34, 7} }, -{ {2,1,2,2,0,2,1,0, 30, 18} }, -{ {2,1,2,2,0,2,1,1, 27, 17} }, -{ {2,1,2,2,0,2,1,2, 21, 7} }, -{ {2,1,2,2,0,2,2,0, 16, 26} }, -{ {2,1,2,2,0,2,2,1, 16, 6} }, -{ {2,1,2,2,0,2,2,2, 7, 24} }, -{ {2,1,2,2,1,0,0,0, 42, 30} }, -{ {2,1,2,2,1,0,0,1, 39, 18} }, -{ {2,1,2,2,1,0,0,2, 36, 7} }, -{ {2,1,2,2,1,0,1,0, 29, 18} }, -{ {2,1,2,2,1,0,1,1, 26, 18} }, -{ {2,1,2,2,1,0,1,2, 23, 17} }, -{ {2,1,2,2,1,0,2,0, 18, 18} }, -{ {2,1,2,2,1,0,2,1, 15, 6} }, -{ {2,1,2,2,1,0,2,2, 6, 6} }, -{ {2,1,2,2,1,1,0,0, 41, 42} }, -{ {2,1,2,2,1,1,0,1, 17, 9} }, -{ {2,1,2,2,1,1,0,2, 28, 42} }, -{ {2,1,2,2,1,1,1,0, 28, 18} }, -{ {2,1,2,2,1,1,1,1, 5, 10} }, -{ {2,1,2,2,1,1,1,2, 22, 3} }, -{ {2,1,2,2,1,1,2,0, 17, 18} }, -{ {2,1,2,2,1,1,2,1, 14, 3} }, -{ {2,1,2,2,1,1,2,2, 5, 6} }, -{ {2,1,2,2,1,2,0,0, 40, 18} }, -{ {2,1,2,2,1,2,0,1, 38, 18} }, -{ {2,1,2,2,1,2,0,2, 35, 7} }, -{ {2,1,2,2,1,2,1,0, 27, 18} }, -{ {2,1,2,2,1,2,1,1, 25, 4} }, -{ {2,1,2,2,1,2,1,2, 20, 7} }, -{ {2,1,2,2,1,2,2,0, 16, 18} }, -{ {2,1,2,2,1,2,2,1, 13, 6} }, -{ {2,1,2,2,1,2,2,2, 4, 6} }, -{ {2,1,2,2,2,0,0,0, 28, 5} }, -{ {2,1,2,2,2,0,0,1, 36, 40} }, -{ {2,1,2,2,2,0,0,2, 35, 18} }, -{ {2,1,2,2,2,0,1,0, 24, 18} }, -{ {2,1,2,2,2,0,1,1, 23, 18} }, -{ {2,1,2,2,2,0,1,2, 21, 18} }, -{ {2,1,2,2,2,0,2,0, 8, 26} }, -{ {2,1,2,2,2,0,2,1, 6, 26} }, -{ {2,1,2,2,2,0,2,2, 3, 27} }, -{ {2,1,2,2,2,1,0,0, 37, 40} }, -{ {2,1,2,2,2,1,0,1, 28, 9} }, -{ {2,1,2,2,2,1,0,2, 34, 18} }, -{ {2,1,2,2,2,1,1,0, 23, 40} }, -{ {2,1,2,2,2,1,1,1, 22, 30} }, -{ {2,1,2,2,2,1,1,2, 20, 18} }, -{ {2,1,2,2,2,1,2,0, 8, 41} }, -{ {2,1,2,2,2,1,2,1, 5, 26} }, -{ {2,1,2,2,2,1,2,2, 2, 27} }, -{ {2,1,2,2,2,2,0,0, 34, 13} }, -{ {2,1,2,2,2,2,0,1, 35, 13} }, -{ {2,1,2,2,2,2,0,2, 33, 7} }, -{ {2,1,2,2,2,2,1,0, 21, 13} }, -{ {2,1,2,2,2,2,1,1, 20, 13} }, -{ {2,1,2,2,2,2,1,2, 19, 7} }, -{ {2,1,2,2,2,2,2,0, 7, 26} }, -{ {2,1,2,2,2,2,2,1, 4, 12} }, -{ {2,1,2,2,2,2,2,2, 1, 4} }, -{ {2,2,0,0,0,0,0,0, 2, 4} }, -{ {2,2,0,0,0,0,0,1, 34, 27} }, -{ {2,2,0,0,0,0,0,2, 20, 27} }, -{ {2,2,0,0,0,0,1,0, 34, 22} }, -{ {2,2,0,0,0,0,1,1, 46, 4} }, -{ {2,2,0,0,0,0,1,2, 45, 1} }, -{ {2,2,0,0,0,0,2,0, 20, 22} }, -{ {2,2,0,0,0,0,2,1, 45, 0} }, -{ {2,2,0,0,0,0,2,2, 44, 6} }, -{ {2,2,0,0,0,1,0,0, 8, 44} }, -{ {2,2,0,0,0,1,0,1, 37, 45} }, -{ {2,2,0,0,0,1,0,2, 23, 45} }, -{ {2,2,0,0,0,1,1,0, 40, 38} }, -{ {2,2,0,0,0,1,1,1, 29, 5} }, -{ {2,2,0,0,0,1,1,2, 48, 16} }, -{ {2,2,0,0,0,1,2,0, 27, 7} }, -{ {2,2,0,0,0,1,2,1, 47, 17} }, -{ {2,2,0,0,0,1,2,2, 45, 6} }, -{ {2,2,0,0,0,2,0,0, 5, 25} }, -{ {2,2,0,0,0,2,0,1, 28, 20} }, -{ {2,2,0,0,0,2,0,2, 22, 27} }, -{ {2,2,0,0,0,2,1,0, 26, 20} }, -{ {2,2,0,0,0,2,1,1, 29, 20} }, -{ {2,2,0,0,0,2,1,2, 23, 43} }, -{ {2,2,0,0,0,2,2,0, 25, 7} }, -{ {2,2,0,0,0,2,2,1, 27, 20} }, -{ {2,2,0,0,0,2,2,2, 20, 9} }, -{ {2,2,0,0,1,0,0,0, 8, 39} }, -{ {2,2,0,0,1,0,0,1, 40, 45} }, -{ {2,2,0,0,1,0,0,2, 27, 6} }, -{ {2,2,0,0,1,0,1,0, 37, 38} }, -{ {2,2,0,0,1,0,1,1, 29, 4} }, -{ {2,2,0,0,1,0,1,2, 47, 16} }, -{ {2,2,0,0,1,0,2,0, 23, 38} }, -{ {2,2,0,0,1,0,2,1, 48, 17} }, -{ {2,2,0,0,1,0,2,2, 45, 7} }, -{ {2,2,0,0,1,1,0,0, 11, 24} }, -{ {2,2,0,0,1,1,0,1, 41, 45} }, -{ {2,2,0,0,1,1,0,2, 29, 6} }, -{ {2,2,0,0,1,1,1,0, 41, 38} }, -{ {2,2,0,0,1,1,1,1, 11, 4} }, -{ {2,2,0,0,1,1,1,2, 29, 11} }, -{ {2,2,0,0,1,1,2,0, 29, 7} }, -{ {2,2,0,0,1,1,2,1, 29, 10} }, -{ {2,2,0,0,1,1,2,2, 46, 6} }, -{ {2,2,0,0,1,2,0,0, 10, 7} }, -{ {2,2,0,0,1,2,0,1, 42, 45} }, -{ {2,2,0,0,1,2,0,2, 28, 6} }, -{ {2,2,0,0,1,2,1,0, 43, 7} }, -{ {2,2,0,0,1,2,1,1, 41, 29} }, -{ {2,2,0,0,1,2,1,2, 37, 9} }, -{ {2,2,0,0,1,2,2,0, 26, 7} }, -{ {2,2,0,0,1,2,2,1, 40, 43} }, -{ {2,2,0,0,1,2,2,2, 34, 9} }, -{ {2,2,0,0,2,0,0,0, 5, 24} }, -{ {2,2,0,0,2,0,0,1, 26, 21} }, -{ {2,2,0,0,2,0,0,2, 25, 6} }, -{ {2,2,0,0,2,0,1,0, 28, 21} }, -{ {2,2,0,0,2,0,1,1, 29, 21} }, -{ {2,2,0,0,2,0,1,2, 27, 21} }, -{ {2,2,0,0,2,0,2,0, 22, 22} }, -{ {2,2,0,0,2,0,2,1, 23, 32} }, -{ {2,2,0,0,2,0,2,2, 20, 12} }, -{ {2,2,0,0,2,1,0,0, 10, 6} }, -{ {2,2,0,0,2,1,0,1, 43, 6} }, -{ {2,2,0,0,2,1,0,2, 26, 6} }, -{ {2,2,0,0,2,1,1,0, 42, 38} }, -{ {2,2,0,0,2,1,1,1, 41, 30} }, -{ {2,2,0,0,2,1,1,2, 40, 32} }, -{ {2,2,0,0,2,1,2,0, 28, 7} }, -{ {2,2,0,0,2,1,2,1, 37, 12} }, -{ {2,2,0,0,2,1,2,2, 34, 12} }, -{ {2,2,0,0,2,2,0,0, 9, 6} }, -{ {2,2,0,0,2,2,0,1, 10, 21} }, -{ {2,2,0,0,2,2,0,2, 5, 3} }, -{ {2,2,0,0,2,2,1,0, 10, 20} }, -{ {2,2,0,0,2,2,1,1, 11, 20} }, -{ {2,2,0,0,2,2,1,2, 8, 42} }, -{ {2,2,0,0,2,2,2,0, 5, 2} }, -{ {2,2,0,0,2,2,2,1, 8, 33} }, -{ {2,2,0,0,2,2,2,2, 2, 2} }, -{ {2,2,0,1,0,0,0,0, 8, 29} }, -{ {2,2,0,1,0,0,0,1, 37, 28} }, -{ {2,2,0,1,0,0,0,2, 23, 28} }, -{ {2,2,0,1,0,0,1,0, 40, 31} }, -{ {2,2,0,1,0,0,1,1, 29, 24} }, -{ {2,2,0,1,0,0,1,2, 48, 3} }, -{ {2,2,0,1,0,0,2,0, 27, 10} }, -{ {2,2,0,1,0,0,2,1, 47, 2} }, -{ {2,2,0,1,0,0,2,2, 45, 2} }, -{ {2,2,0,1,0,1,0,0, 18, 4} }, -{ {2,2,0,1,0,1,0,1, 43, 27} }, -{ {2,2,0,1,0,1,0,2, 31, 27} }, -{ {2,2,0,1,0,1,1,0, 51, 0} }, -{ {2,2,0,1,0,1,1,1, 18, 5} }, -{ {2,2,0,1,0,1,1,2, 50, 1} }, -{ {2,2,0,1,0,1,2,0, 50, 0} }, -{ {2,2,0,1,0,1,2,1, 31, 22} }, -{ {2,2,0,1,0,1,2,2, 49, 0} }, -{ {2,2,0,1,0,2,0,0, 17, 29} }, -{ {2,2,0,1,0,2,0,1, 41, 46} }, -{ {2,2,0,1,0,2,0,2, 28, 46} }, -{ {2,2,0,1,0,2,1,0, 39, 20} }, -{ {2,2,0,1,0,2,1,1, 42, 24} }, -{ {2,2,0,1,0,2,1,2, 36, 43} }, -{ {2,2,0,1,0,2,2,0, 38, 20} }, -{ {2,2,0,1,0,2,2,1, 40, 20} }, -{ {2,2,0,1,0,2,2,2, 35, 9} }, -{ {2,2,0,1,1,0,0,0, 24, 5} }, -{ {2,2,0,1,1,0,0,1, 47, 44} }, -{ {2,2,0,1,1,0,0,2, 53, 44} }, -{ {2,2,0,1,1,0,1,0, 47, 30} }, -{ {2,2,0,1,1,0,1,1, 24, 4} }, -{ {2,2,0,1,1,0,1,2, 53, 29} }, -{ {2,2,0,1,1,0,2,0, 53, 30} }, -{ {2,2,0,1,1,0,2,1, 53, 39} }, -{ {2,2,0,1,1,0,2,2, 52, 0} }, -{ {2,2,0,1,1,1,0,0, 29, 25} }, -{ {2,2,0,1,1,1,0,1, 37, 31} }, -{ {2,2,0,1,1,1,0,2, 47, 3} }, -{ {2,2,0,1,1,1,1,0, 40, 28} }, -{ {2,2,0,1,1,1,1,1, 8, 30} }, -{ {2,2,0,1,1,1,1,2, 27, 11} }, -{ {2,2,0,1,1,1,2,0, 48, 2} }, -{ {2,2,0,1,1,1,2,1, 23, 31} }, -{ {2,2,0,1,1,1,2,2, 45, 3} }, -{ {2,2,0,1,1,2,0,0, 32, 25} }, -{ {2,2,0,1,1,2,0,1, 29, 43} }, -{ {2,2,0,1,1,2,0,2, 24, 9} }, -{ {2,2,0,1,1,2,1,0, 31, 20} }, -{ {2,2,0,1,1,2,1,1, 28, 43} }, -{ {2,2,0,1,1,2,1,2, 23, 9} }, -{ {2,2,0,1,1,2,2,0, 30, 20} }, -{ {2,2,0,1,1,2,2,1, 27, 43} }, -{ {2,2,0,1,1,2,2,2, 21, 9} }, -{ {2,2,0,1,2,0,0,0, 28, 32} }, -{ {2,2,0,1,2,0,0,1, 29, 32} }, -{ {2,2,0,1,2,0,0,2, 27, 32} }, -{ {2,2,0,1,2,0,1,0, 31, 21} }, -{ {2,2,0,1,2,0,1,1, 32, 24} }, -{ {2,2,0,1,2,0,1,2, 30, 21} }, -{ {2,2,0,1,2,0,2,0, 23, 12} }, -{ {2,2,0,1,2,0,2,1, 24, 12} }, -{ {2,2,0,1,2,0,2,2, 21, 12} }, -{ {2,2,0,1,2,1,0,0, 42, 25} }, -{ {2,2,0,1,2,1,0,1, 41, 37} }, -{ {2,2,0,1,2,1,0,2, 40, 21} }, -{ {2,2,0,1,2,1,1,0, 39, 21} }, -{ {2,2,0,1,2,1,1,1, 17, 30} }, -{ {2,2,0,1,2,1,1,2, 38, 21} }, -{ {2,2,0,1,2,1,2,0, 36, 12} }, -{ {2,2,0,1,2,1,2,1, 28, 37} }, -{ {2,2,0,1,2,1,2,2, 35, 12} }, -{ {2,2,0,1,2,2,0,0, 10, 2} }, -{ {2,2,0,1,2,2,0,1, 11, 33} }, -{ {2,2,0,1,2,2,0,2, 8, 3} }, -{ {2,2,0,1,2,2,1,0, 12, 3} }, -{ {2,2,0,1,2,2,1,1, 10, 3} }, -{ {2,2,0,1,2,2,1,2, 6, 3} }, -{ {2,2,0,1,2,2,2,0, 6, 2} }, -{ {2,2,0,1,2,2,2,1, 8, 2} }, -{ {2,2,0,1,2,2,2,2, 3, 2} }, -{ {2,2,0,2,0,0,0,0, 5, 4} }, -{ {2,2,0,2,0,0,0,1, 28, 1} }, -{ {2,2,0,2,0,0,0,2, 22, 28} }, -{ {2,2,0,2,0,0,1,0, 26, 1} }, -{ {2,2,0,2,0,0,1,1, 29, 1} }, -{ {2,2,0,2,0,0,1,2, 23, 14} }, -{ {2,2,0,2,0,0,2,0, 25, 10} }, -{ {2,2,0,2,0,0,2,1, 27, 1} }, -{ {2,2,0,2,0,0,2,2, 20, 23} }, -{ {2,2,0,2,0,1,0,0, 17, 27} }, -{ {2,2,0,2,0,1,0,1, 41, 27} }, -{ {2,2,0,2,0,1,0,2, 28, 27} }, -{ {2,2,0,2,0,1,1,0, 39, 1} }, -{ {2,2,0,2,0,1,1,1, 42, 5} }, -{ {2,2,0,2,0,1,1,2, 36, 14} }, -{ {2,2,0,2,0,1,2,0, 38, 1} }, -{ {2,2,0,2,0,1,2,1, 40, 1} }, -{ {2,2,0,2,0,1,2,2, 35, 23} }, -{ {2,2,0,2,0,2,0,0, 14, 4} }, -{ {2,2,0,2,0,2,0,1, 17, 1} }, -{ {2,2,0,2,0,2,0,2, 5, 8} }, -{ {2,2,0,2,0,2,1,0, 15, 1} }, -{ {2,2,0,2,0,2,1,1, 18, 1} }, -{ {2,2,0,2,0,2,1,2, 6, 8} }, -{ {2,2,0,2,0,2,2,0, 13, 1} }, -{ {2,2,0,2,0,2,2,1, 16, 1} }, -{ {2,2,0,2,0,2,2,2, 4, 8} }, -{ {2,2,0,2,1,0,0,0, 28, 14} }, -{ {2,2,0,2,1,0,0,1, 31, 1} }, -{ {2,2,0,2,1,0,0,2, 23, 34} }, -{ {2,2,0,2,1,0,1,0, 29, 14} }, -{ {2,2,0,2,1,0,1,1, 32, 4} }, -{ {2,2,0,2,1,0,1,2, 24, 14} }, -{ {2,2,0,2,1,0,2,0, 27, 14} }, -{ {2,2,0,2,1,0,2,1, 30, 1} }, -{ {2,2,0,2,1,0,2,2, 21, 23} }, -{ {2,2,0,2,1,1,0,0, 41, 44} }, -{ {2,2,0,2,1,1,0,1, 43, 10} }, -{ {2,2,0,2,1,1,0,2, 37, 14} }, -{ {2,2,0,2,1,1,1,0, 42, 28} }, -{ {2,2,0,2,1,1,1,1, 10, 10} }, -{ {2,2,0,2,1,1,1,2, 28, 11} }, -{ {2,2,0,2,1,1,2,0, 40, 14} }, -{ {2,2,0,2,1,1,2,1, 26, 10} }, -{ {2,2,0,2,1,1,2,2, 34, 23} }, -{ {2,2,0,2,1,2,0,0, 17, 14} }, -{ {2,2,0,2,1,2,0,1, 18, 8} }, -{ {2,2,0,2,1,2,0,2, 8, 35} }, -{ {2,2,0,2,1,2,1,0, 18, 14} }, -{ {2,2,0,2,1,2,1,1, 17, 8} }, -{ {2,2,0,2,1,2,1,2, 8, 8} }, -{ {2,2,0,2,1,2,2,0, 16, 14} }, -{ {2,2,0,2,1,2,2,1, 16, 8} }, -{ {2,2,0,2,1,2,2,2, 7, 22} }, -{ {2,2,0,2,2,0,0,0, 22, 5} }, -{ {2,2,0,2,2,0,0,1, 23, 21} }, -{ {2,2,0,2,2,0,0,2, 20, 1} }, -{ {2,2,0,2,2,0,1,0, 23, 1} }, -{ {2,2,0,2,2,0,1,1, 24, 1} }, -{ {2,2,0,2,2,0,1,2, 21, 1} }, -{ {2,2,0,2,2,0,2,0, 20, 21} }, -{ {2,2,0,2,2,0,2,1, 21, 21} }, -{ {2,2,0,2,2,0,2,2, 19, 1} }, -{ {2,2,0,2,2,1,0,0, 28, 44} }, -{ {2,2,0,2,2,1,0,1, 37, 1} }, -{ {2,2,0,2,2,1,0,2, 34, 1} }, -{ {2,2,0,2,2,1,1,0, 36, 1} }, -{ {2,2,0,2,2,1,1,1, 28, 30} }, -{ {2,2,0,2,2,1,1,2, 35, 1} }, -{ {2,2,0,2,2,1,2,0, 35, 21} }, -{ {2,2,0,2,2,1,2,1, 34, 21} }, -{ {2,2,0,2,2,1,2,2, 33, 1} }, -{ {2,2,0,2,2,2,0,0, 5, 20} }, -{ {2,2,0,2,2,2,0,1, 8, 20} }, -{ {2,2,0,2,2,2,0,2, 2, 9} }, -{ {2,2,0,2,2,2,1,0, 6, 20} }, -{ {2,2,0,2,2,2,1,1, 8, 43} }, -{ {2,2,0,2,2,2,1,2, 3, 8} }, -{ {2,2,0,2,2,2,2,0, 4, 2} }, -{ {2,2,0,2,2,2,2,1, 7, 20} }, -{ {2,2,0,2,2,2,2,2, 1, 3} }, -{ {2,2,1,0,0,0,0,0, 8, 30} }, -{ {2,2,1,0,0,0,0,1, 40, 28} }, -{ {2,2,1,0,0,0,0,2, 27, 11} }, -{ {2,2,1,0,0,0,1,0, 37, 31} }, -{ {2,2,1,0,0,0,1,1, 29, 25} }, -{ {2,2,1,0,0,0,1,2, 47, 3} }, -{ {2,2,1,0,0,0,2,0, 23, 31} }, -{ {2,2,1,0,0,0,2,1, 48, 2} }, -{ {2,2,1,0,0,0,2,2, 45, 3} }, -{ {2,2,1,0,0,1,0,0, 24, 4} }, -{ {2,2,1,0,0,1,0,1, 47, 29} }, -{ {2,2,1,0,0,1,0,2, 53, 29} }, -{ {2,2,1,0,0,1,1,0, 47, 39} }, -{ {2,2,1,0,0,1,1,1, 24, 5} }, -{ {2,2,1,0,0,1,1,2, 53, 44} }, -{ {2,2,1,0,0,1,2,0, 53, 39} }, -{ {2,2,1,0,0,1,2,1, 53, 30} }, -{ {2,2,1,0,0,1,2,2, 52, 1} }, -{ {2,2,1,0,0,2,0,0, 28, 43} }, -{ {2,2,1,0,0,2,0,1, 31, 20} }, -{ {2,2,1,0,0,2,0,2, 23, 9} }, -{ {2,2,1,0,0,2,1,0, 29, 43} }, -{ {2,2,1,0,0,2,1,1, 32, 25} }, -{ {2,2,1,0,0,2,1,2, 24, 9} }, -{ {2,2,1,0,0,2,2,0, 27, 43} }, -{ {2,2,1,0,0,2,2,1, 30, 20} }, -{ {2,2,1,0,0,2,2,2, 21, 9} }, -{ {2,2,1,0,1,0,0,0, 18, 5} }, -{ {2,2,1,0,1,0,0,1, 51, 1} }, -{ {2,2,1,0,1,0,0,2, 50, 1} }, -{ {2,2,1,0,1,0,1,0, 43, 22} }, -{ {2,2,1,0,1,0,1,1, 18, 4} }, -{ {2,2,1,0,1,0,1,2, 31, 27} }, -{ {2,2,1,0,1,0,2,0, 31, 22} }, -{ {2,2,1,0,1,0,2,1, 50, 0} }, -{ {2,2,1,0,1,0,2,2, 49, 1} }, -{ {2,2,1,0,1,1,0,0, 29, 24} }, -{ {2,2,1,0,1,1,0,1, 40, 31} }, -{ {2,2,1,0,1,1,0,2, 48, 3} }, -{ {2,2,1,0,1,1,1,0, 37, 28} }, -{ {2,2,1,0,1,1,1,1, 8, 29} }, -{ {2,2,1,0,1,1,1,2, 23, 28} }, -{ {2,2,1,0,1,1,2,0, 47, 2} }, -{ {2,2,1,0,1,1,2,1, 27, 10} }, -{ {2,2,1,0,1,1,2,2, 45, 2} }, -{ {2,2,1,0,1,2,0,0, 42, 24} }, -{ {2,2,1,0,1,2,0,1, 39, 20} }, -{ {2,2,1,0,1,2,0,2, 36, 9} }, -{ {2,2,1,0,1,2,1,0, 41, 46} }, -{ {2,2,1,0,1,2,1,1, 17, 29} }, -{ {2,2,1,0,1,2,1,2, 28, 46} }, -{ {2,2,1,0,1,2,2,0, 40, 20} }, -{ {2,2,1,0,1,2,2,1, 38, 20} }, -{ {2,2,1,0,1,2,2,2, 35, 9} }, -{ {2,2,1,0,2,0,0,0, 17, 30} }, -{ {2,2,1,0,2,0,0,1, 39, 21} }, -{ {2,2,1,0,2,0,0,2, 38, 21} }, -{ {2,2,1,0,2,0,1,0, 41, 37} }, -{ {2,2,1,0,2,0,1,1, 42, 25} }, -{ {2,2,1,0,2,0,1,2, 40, 21} }, -{ {2,2,1,0,2,0,2,0, 28, 37} }, -{ {2,2,1,0,2,0,2,1, 36, 32} }, -{ {2,2,1,0,2,0,2,2, 35, 12} }, -{ {2,2,1,0,2,1,0,0, 32, 24} }, -{ {2,2,1,0,2,1,0,1, 31, 21} }, -{ {2,2,1,0,2,1,0,2, 30, 21} }, -{ {2,2,1,0,2,1,1,0, 29, 32} }, -{ {2,2,1,0,2,1,1,1, 28, 32} }, -{ {2,2,1,0,2,1,1,2, 27, 32} }, -{ {2,2,1,0,2,1,2,0, 24, 12} }, -{ {2,2,1,0,2,1,2,1, 23, 12} }, -{ {2,2,1,0,2,1,2,2, 21, 12} }, -{ {2,2,1,0,2,2,0,0, 10, 3} }, -{ {2,2,1,0,2,2,0,1, 12, 2} }, -{ {2,2,1,0,2,2,0,2, 6, 3} }, -{ {2,2,1,0,2,2,1,0, 11, 42} }, -{ {2,2,1,0,2,2,1,1, 10, 2} }, -{ {2,2,1,0,2,2,1,2, 8, 3} }, -{ {2,2,1,0,2,2,2,0, 8, 2} }, -{ {2,2,1,0,2,2,2,1, 6, 2} }, -{ {2,2,1,0,2,2,2,2, 3, 3} }, -{ {2,2,1,1,0,0,0,0, 11, 4} }, -{ {2,2,1,1,0,0,0,1, 41, 28} }, -{ {2,2,1,1,0,0,0,2, 29, 11} }, -{ {2,2,1,1,0,0,1,0, 41, 31} }, -{ {2,2,1,1,0,0,1,1, 11, 24} }, -{ {2,2,1,1,0,0,1,2, 29, 6} }, -{ {2,2,1,1,0,0,2,0, 29, 10} }, -{ {2,2,1,1,0,0,2,1, 29, 7} }, -{ {2,2,1,1,0,0,2,2, 46, 2} }, -{ {2,2,1,1,0,1,0,0, 29, 4} }, -{ {2,2,1,1,0,1,0,1, 37, 38} }, -{ {2,2,1,1,0,1,0,2, 47, 16} }, -{ {2,2,1,1,0,1,1,0, 40, 45} }, -{ {2,2,1,1,0,1,1,1, 8, 39} }, -{ {2,2,1,1,0,1,1,2, 27, 6} }, -{ {2,2,1,1,0,1,2,0, 48, 17} }, -{ {2,2,1,1,0,1,2,1, 23, 38} }, -{ {2,2,1,1,0,1,2,2, 45, 7} }, -{ {2,2,1,1,0,2,0,0, 41, 29} }, -{ {2,2,1,1,0,2,0,1, 43, 7} }, -{ {2,2,1,1,0,2,0,2, 37, 43} }, -{ {2,2,1,1,0,2,1,0, 42, 45} }, -{ {2,2,1,1,0,2,1,1, 10, 7} }, -{ {2,2,1,1,0,2,1,2, 28, 6} }, -{ {2,2,1,1,0,2,2,0, 40, 43} }, -{ {2,2,1,1,0,2,2,1, 26, 7} }, -{ {2,2,1,1,0,2,2,2, 34, 9} }, -{ {2,2,1,1,1,0,0,0, 29, 5} }, -{ {2,2,1,1,1,0,0,1, 40, 38} }, -{ {2,2,1,1,1,0,0,2, 48, 16} }, -{ {2,2,1,1,1,0,1,0, 37, 45} }, -{ {2,2,1,1,1,0,1,1, 8, 44} }, -{ {2,2,1,1,1,0,1,2, 23, 45} }, -{ {2,2,1,1,1,0,2,0, 47, 17} }, -{ {2,2,1,1,1,0,2,1, 27, 7} }, -{ {2,2,1,1,1,0,2,2, 45, 6} }, -{ {2,2,1,1,1,1,0,0, 46, 4} }, -{ {2,2,1,1,1,1,0,1, 34, 22} }, -{ {2,2,1,1,1,1,0,2, 45, 1} }, -{ {2,2,1,1,1,1,1,0, 34, 27} }, -{ {2,2,1,1,1,1,1,1, 2, 4} }, -{ {2,2,1,1,1,1,1,2, 20, 27} }, -{ {2,2,1,1,1,1,2,0, 45, 0} }, -{ {2,2,1,1,1,1,2,1, 20, 22} }, -{ {2,2,1,1,1,1,2,2, 44, 6} }, -{ {2,2,1,1,1,2,0,0, 29, 20} }, -{ {2,2,1,1,1,2,0,1, 26, 20} }, -{ {2,2,1,1,1,2,0,2, 23, 43} }, -{ {2,2,1,1,1,2,1,0, 28, 20} }, -{ {2,2,1,1,1,2,1,1, 5, 25} }, -{ {2,2,1,1,1,2,1,2, 22, 27} }, -{ {2,2,1,1,1,2,2,0, 27, 20} }, -{ {2,2,1,1,1,2,2,1, 25, 7} }, -{ {2,2,1,1,1,2,2,2, 20, 9} }, -{ {2,2,1,1,2,0,0,0, 41, 30} }, -{ {2,2,1,1,2,0,0,1, 42, 38} }, -{ {2,2,1,1,2,0,0,2, 40, 32} }, -{ {2,2,1,1,2,0,1,0, 43, 6} }, -{ {2,2,1,1,2,0,1,1, 10, 6} }, -{ {2,2,1,1,2,0,1,2, 26, 6} }, -{ {2,2,1,1,2,0,2,0, 37, 32} }, -{ {2,2,1,1,2,0,2,1, 28, 7} }, -{ {2,2,1,1,2,0,2,2, 34, 12} }, -{ {2,2,1,1,2,1,0,0, 29, 21} }, -{ {2,2,1,1,2,1,0,1, 28, 21} }, -{ {2,2,1,1,2,1,0,2, 27, 21} }, -{ {2,2,1,1,2,1,1,0, 26, 21} }, -{ {2,2,1,1,2,1,1,1, 5, 24} }, -{ {2,2,1,1,2,1,1,2, 25, 6} }, -{ {2,2,1,1,2,1,2,0, 23, 32} }, -{ {2,2,1,1,2,1,2,1, 22, 22} }, -{ {2,2,1,1,2,1,2,2, 20, 12} }, -{ {2,2,1,1,2,2,0,0, 11, 2} }, -{ {2,2,1,1,2,2,0,1, 10, 20} }, -{ {2,2,1,1,2,2,0,2, 8, 42} }, -{ {2,2,1,1,2,2,1,0, 10, 21} }, -{ {2,2,1,1,2,2,1,1, 9, 6} }, -{ {2,2,1,1,2,2,1,2, 5, 3} }, -{ {2,2,1,1,2,2,2,0, 8, 33} }, -{ {2,2,1,1,2,2,2,1, 5, 2} }, -{ {2,2,1,1,2,2,2,2, 2, 2} }, -{ {2,2,1,2,0,0,0,0, 10, 10} }, -{ {2,2,1,2,0,0,0,1, 42, 28} }, -{ {2,2,1,2,0,0,0,2, 28, 11} }, -{ {2,2,1,2,0,0,1,0, 43, 10} }, -{ {2,2,1,2,0,0,1,1, 41, 44} }, -{ {2,2,1,2,0,0,1,2, 37, 34} }, -{ {2,2,1,2,0,0,2,0, 26, 10} }, -{ {2,2,1,2,0,0,2,1, 40, 14} }, -{ {2,2,1,2,0,0,2,2, 34, 23} }, -{ {2,2,1,2,0,1,0,0, 32, 4} }, -{ {2,2,1,2,0,1,0,1, 29, 14} }, -{ {2,2,1,2,0,1,0,2, 24, 14} }, -{ {2,2,1,2,0,1,1,0, 31, 1} }, -{ {2,2,1,2,0,1,1,1, 28, 14} }, -{ {2,2,1,2,0,1,1,2, 23, 34} }, -{ {2,2,1,2,0,1,2,0, 30, 1} }, -{ {2,2,1,2,0,1,2,1, 27, 14} }, -{ {2,2,1,2,0,1,2,2, 21, 23} }, -{ {2,2,1,2,0,2,0,0, 17, 8} }, -{ {2,2,1,2,0,2,0,1, 18, 14} }, -{ {2,2,1,2,0,2,0,2, 8, 8} }, -{ {2,2,1,2,0,2,1,0, 18, 8} }, -{ {2,2,1,2,0,2,1,1, 17, 14} }, -{ {2,2,1,2,0,2,1,2, 8, 35} }, -{ {2,2,1,2,0,2,2,0, 16, 8} }, -{ {2,2,1,2,0,2,2,1, 16, 14} }, -{ {2,2,1,2,0,2,2,2, 7, 8} }, -{ {2,2,1,2,1,0,0,0, 42, 5} }, -{ {2,2,1,2,1,0,0,1, 39, 1} }, -{ {2,2,1,2,1,0,0,2, 36, 34} }, -{ {2,2,1,2,1,0,1,0, 41, 27} }, -{ {2,2,1,2,1,0,1,1, 17, 27} }, -{ {2,2,1,2,1,0,1,2, 28, 27} }, -{ {2,2,1,2,1,0,2,0, 40, 1} }, -{ {2,2,1,2,1,0,2,1, 38, 1} }, -{ {2,2,1,2,1,0,2,2, 35, 23} }, -{ {2,2,1,2,1,1,0,0, 29, 1} }, -{ {2,2,1,2,1,1,0,1, 26, 1} }, -{ {2,2,1,2,1,1,0,2, 23, 14} }, -{ {2,2,1,2,1,1,1,0, 28, 1} }, -{ {2,2,1,2,1,1,1,1, 5, 4} }, -{ {2,2,1,2,1,1,1,2, 22, 28} }, -{ {2,2,1,2,1,1,2,0, 27, 1} }, -{ {2,2,1,2,1,1,2,1, 25, 10} }, -{ {2,2,1,2,1,1,2,2, 20, 23} }, -{ {2,2,1,2,1,2,0,0, 18, 1} }, -{ {2,2,1,2,1,2,0,1, 15, 1} }, -{ {2,2,1,2,1,2,0,2, 6, 8} }, -{ {2,2,1,2,1,2,1,0, 17, 1} }, -{ {2,2,1,2,1,2,1,1, 14, 4} }, -{ {2,2,1,2,1,2,1,2, 5, 8} }, -{ {2,2,1,2,1,2,2,0, 16, 1} }, -{ {2,2,1,2,1,2,2,1, 13, 1} }, -{ {2,2,1,2,1,2,2,2, 4, 8} }, -{ {2,2,1,2,2,0,0,0, 28, 30} }, -{ {2,2,1,2,2,0,0,1, 36, 21} }, -{ {2,2,1,2,2,0,0,2, 35, 1} }, -{ {2,2,1,2,2,0,1,0, 37, 21} }, -{ {2,2,1,2,2,0,1,1, 28, 44} }, -{ {2,2,1,2,2,0,1,2, 34, 1} }, -{ {2,2,1,2,2,0,2,0, 34, 21} }, -{ {2,2,1,2,2,0,2,1, 35, 21} }, -{ {2,2,1,2,2,0,2,2, 33, 4} }, -{ {2,2,1,2,2,1,0,0, 24, 1} }, -{ {2,2,1,2,2,1,0,1, 23, 1} }, -{ {2,2,1,2,2,1,0,2, 21, 1} }, -{ {2,2,1,2,2,1,1,0, 23, 21} }, -{ {2,2,1,2,2,1,1,1, 22, 5} }, -{ {2,2,1,2,2,1,1,2, 20, 1} }, -{ {2,2,1,2,2,1,2,0, 21, 21} }, -{ {2,2,1,2,2,1,2,1, 20, 21} }, -{ {2,2,1,2,2,1,2,2, 19, 1} }, -{ {2,2,1,2,2,2,0,0, 8, 43} }, -{ {2,2,1,2,2,2,0,1, 6, 20} }, -{ {2,2,1,2,2,2,0,2, 3, 9} }, -{ {2,2,1,2,2,2,1,0, 8, 20} }, -{ {2,2,1,2,2,2,1,1, 5, 20} }, -{ {2,2,1,2,2,2,1,2, 2, 9} }, -{ {2,2,1,2,2,2,2,0, 7, 2} }, -{ {2,2,1,2,2,2,2,1, 4, 2} }, -{ {2,2,1,2,2,2,2,2, 1, 3} }, -{ {2,2,2,0,0,0,0,0, 5, 5} }, -{ {2,2,2,0,0,0,0,1, 26, 0} }, -{ {2,2,2,0,0,0,0,2, 25, 11} }, -{ {2,2,2,0,0,0,1,0, 28, 0} }, -{ {2,2,2,0,0,0,1,1, 29, 0} }, -{ {2,2,2,0,0,0,1,2, 27, 0} }, -{ {2,2,2,0,0,0,2,0, 22, 31} }, -{ {2,2,2,0,0,0,2,1, 23, 19} }, -{ {2,2,2,0,0,0,2,2, 20, 26} }, -{ {2,2,2,0,0,1,0,0, 28, 19} }, -{ {2,2,2,0,0,1,0,1, 29, 19} }, -{ {2,2,2,0,0,1,0,2, 27, 19} }, -{ {2,2,2,0,0,1,1,0, 31, 0} }, -{ {2,2,2,0,0,1,1,1, 32, 5} }, -{ {2,2,2,0,0,1,1,2, 30, 0} }, -{ {2,2,2,0,0,1,2,0, 23, 41} }, -{ {2,2,2,0,0,1,2,1, 24, 19} }, -{ {2,2,2,0,0,1,2,2, 21, 26} }, -{ {2,2,2,0,0,2,0,0, 22, 4} }, -{ {2,2,2,0,0,2,0,1, 23, 0} }, -{ {2,2,2,0,0,2,0,2, 20, 20} }, -{ {2,2,2,0,0,2,1,0, 23, 20} }, -{ {2,2,2,0,0,2,1,1, 24, 0} }, -{ {2,2,2,0,0,2,1,2, 21, 20} }, -{ {2,2,2,0,0,2,2,0, 20, 0} }, -{ {2,2,2,0,0,2,2,1, 21, 0} }, -{ {2,2,2,0,0,2,2,2, 19, 0} }, -{ {2,2,2,0,1,0,0,0, 17, 22} }, -{ {2,2,2,0,1,0,0,1, 39, 0} }, -{ {2,2,2,0,1,0,0,2, 38, 0} }, -{ {2,2,2,0,1,0,1,0, 41, 22} }, -{ {2,2,2,0,1,0,1,1, 42, 4} }, -{ {2,2,2,0,1,0,1,2, 40, 0} }, -{ {2,2,2,0,1,0,2,0, 28, 22} }, -{ {2,2,2,0,1,0,2,1, 36, 19} }, -{ {2,2,2,0,1,0,2,2, 35, 26} }, -{ {2,2,2,0,1,1,0,0, 41, 39} }, -{ {2,2,2,0,1,1,0,1, 42, 31} }, -{ {2,2,2,0,1,1,0,2, 40, 19} }, -{ {2,2,2,0,1,1,1,0, 43, 11} }, -{ {2,2,2,0,1,1,1,1, 10, 11} }, -{ {2,2,2,0,1,1,1,2, 26, 11} }, -{ {2,2,2,0,1,1,2,0, 37, 19} }, -{ {2,2,2,0,1,1,2,1, 28, 10} }, -{ {2,2,2,0,1,1,2,2, 34, 26} }, -{ {2,2,2,0,1,2,0,0, 28, 39} }, -{ {2,2,2,0,1,2,0,1, 36, 0} }, -{ {2,2,2,0,1,2,0,2, 35, 20} }, -{ {2,2,2,0,1,2,1,0, 37, 0} }, -{ {2,2,2,0,1,2,1,1, 28, 29} }, -{ {2,2,2,0,1,2,1,2, 34, 20} }, -{ {2,2,2,0,1,2,2,0, 34, 0} }, -{ {2,2,2,0,1,2,2,1, 35, 0} }, -{ {2,2,2,0,1,2,2,2, 33, 0} }, -{ {2,2,2,0,2,0,0,0, 14, 5} }, -{ {2,2,2,0,2,0,0,1, 15, 0} }, -{ {2,2,2,0,2,0,0,2, 13, 0} }, -{ {2,2,2,0,2,0,1,0, 17, 0} }, -{ {2,2,2,0,2,0,1,1, 18, 0} }, -{ {2,2,2,0,2,0,1,2, 16, 0} }, -{ {2,2,2,0,2,0,2,0, 5, 13} }, -{ {2,2,2,0,2,0,2,1, 6, 13} }, -{ {2,2,2,0,2,0,2,2, 4, 13} }, -{ {2,2,2,0,2,1,0,0, 17, 19} }, -{ {2,2,2,0,2,1,0,1, 18, 19} }, -{ {2,2,2,0,2,1,0,2, 16, 19} }, -{ {2,2,2,0,2,1,1,0, 18, 13} }, -{ {2,2,2,0,2,1,1,1, 17, 13} }, -{ {2,2,2,0,2,1,1,2, 16, 13} }, -{ {2,2,2,0,2,1,2,0, 8, 40} }, -{ {2,2,2,0,2,1,2,1, 8, 13} }, -{ {2,2,2,0,2,1,2,2, 7, 27} }, -{ {2,2,2,0,2,2,0,0, 5, 21} }, -{ {2,2,2,0,2,2,0,1, 6, 21} }, -{ {2,2,2,0,2,2,0,2, 4, 3} }, -{ {2,2,2,0,2,2,1,0, 8, 21} }, -{ {2,2,2,0,2,2,1,1, 8, 32} }, -{ {2,2,2,0,2,2,1,2, 7, 21} }, -{ {2,2,2,0,2,2,2,0, 2, 12} }, -{ {2,2,2,0,2,2,2,1, 3, 13} }, -{ {2,2,2,0,2,2,2,2, 1, 2} }, -{ {2,2,2,1,0,0,0,0, 10, 11} }, -{ {2,2,2,1,0,0,0,1, 43, 11} }, -{ {2,2,2,1,0,0,0,2, 26, 11} }, -{ {2,2,2,1,0,0,1,0, 42, 31} }, -{ {2,2,2,1,0,0,1,1, 41, 39} }, -{ {2,2,2,1,0,0,1,2, 40, 19} }, -{ {2,2,2,1,0,0,2,0, 28, 10} }, -{ {2,2,2,1,0,0,2,1, 37, 41} }, -{ {2,2,2,1,0,0,2,2, 34, 26} }, -{ {2,2,2,1,0,1,0,0, 42, 4} }, -{ {2,2,2,1,0,1,0,1, 41, 22} }, -{ {2,2,2,1,0,1,0,2, 40, 0} }, -{ {2,2,2,1,0,1,1,0, 39, 0} }, -{ {2,2,2,1,0,1,1,1, 17, 22} }, -{ {2,2,2,1,0,1,1,2, 38, 0} }, -{ {2,2,2,1,0,1,2,0, 36, 41} }, -{ {2,2,2,1,0,1,2,1, 28, 22} }, -{ {2,2,2,1,0,1,2,2, 35, 26} }, -{ {2,2,2,1,0,2,0,0, 28, 29} }, -{ {2,2,2,1,0,2,0,1, 37, 20} }, -{ {2,2,2,1,0,2,0,2, 34, 20} }, -{ {2,2,2,1,0,2,1,0, 36, 20} }, -{ {2,2,2,1,0,2,1,1, 28, 39} }, -{ {2,2,2,1,0,2,1,2, 35, 20} }, -{ {2,2,2,1,0,2,2,0, 35, 0} }, -{ {2,2,2,1,0,2,2,1, 34, 0} }, -{ {2,2,2,1,0,2,2,2, 33, 5} }, -{ {2,2,2,1,1,0,0,0, 32, 5} }, -{ {2,2,2,1,1,0,0,1, 31, 0} }, -{ {2,2,2,1,1,0,0,2, 30, 0} }, -{ {2,2,2,1,1,0,1,0, 29, 19} }, -{ {2,2,2,1,1,0,1,1, 28, 19} }, -{ {2,2,2,1,1,0,1,2, 27, 19} }, -{ {2,2,2,1,1,0,2,0, 24, 19} }, -{ {2,2,2,1,1,0,2,1, 23, 41} }, -{ {2,2,2,1,1,0,2,2, 21, 26} }, -{ {2,2,2,1,1,1,0,0, 29, 0} }, -{ {2,2,2,1,1,1,0,1, 28, 0} }, -{ {2,2,2,1,1,1,0,2, 27, 0} }, -{ {2,2,2,1,1,1,1,0, 26, 0} }, -{ {2,2,2,1,1,1,1,1, 5, 5} }, -{ {2,2,2,1,1,1,1,2, 25, 11} }, -{ {2,2,2,1,1,1,2,0, 23, 19} }, -{ {2,2,2,1,1,1,2,1, 22, 31} }, -{ {2,2,2,1,1,1,2,2, 20, 26} }, -{ {2,2,2,1,1,2,0,0, 24, 0} }, -{ {2,2,2,1,1,2,0,1, 23, 20} }, -{ {2,2,2,1,1,2,0,2, 21, 20} }, -{ {2,2,2,1,1,2,1,0, 23, 0} }, -{ {2,2,2,1,1,2,1,1, 22, 4} }, -{ {2,2,2,1,1,2,1,2, 20, 20} }, -{ {2,2,2,1,1,2,2,0, 21, 0} }, -{ {2,2,2,1,1,2,2,1, 20, 0} }, -{ {2,2,2,1,1,2,2,2, 19, 0} }, -{ {2,2,2,1,2,0,0,0, 17, 13} }, -{ {2,2,2,1,2,0,0,1, 18, 13} }, -{ {2,2,2,1,2,0,0,2, 16, 13} }, -{ {2,2,2,1,2,0,1,0, 18, 19} }, -{ {2,2,2,1,2,0,1,1, 17, 19} }, -{ {2,2,2,1,2,0,1,2, 16, 19} }, -{ {2,2,2,1,2,0,2,0, 8, 13} }, -{ {2,2,2,1,2,0,2,1, 8, 40} }, -{ {2,2,2,1,2,0,2,2, 7, 13} }, -{ {2,2,2,1,2,1,0,0, 18, 0} }, -{ {2,2,2,1,2,1,0,1, 17, 0} }, -{ {2,2,2,1,2,1,0,2, 16, 0} }, -{ {2,2,2,1,2,1,1,0, 15, 0} }, -{ {2,2,2,1,2,1,1,1, 14, 5} }, -{ {2,2,2,1,2,1,1,2, 13, 0} }, -{ {2,2,2,1,2,1,2,0, 6, 13} }, -{ {2,2,2,1,2,1,2,1, 5, 13} }, -{ {2,2,2,1,2,1,2,2, 4, 13} }, -{ {2,2,2,1,2,2,0,0, 8, 32} }, -{ {2,2,2,1,2,2,0,1, 8, 21} }, -{ {2,2,2,1,2,2,0,2, 7, 3} }, -{ {2,2,2,1,2,2,1,0, 6, 21} }, -{ {2,2,2,1,2,2,1,1, 5, 21} }, -{ {2,2,2,1,2,2,1,2, 4, 3} }, -{ {2,2,2,1,2,2,2,0, 3, 12} }, -{ {2,2,2,1,2,2,2,1, 2, 12} }, -{ {2,2,2,1,2,2,2,2, 1, 2} }, -{ {2,2,2,2,0,0,0,0, 9, 4} }, -{ {2,2,2,2,0,0,0,1, 10, 0} }, -{ {2,2,2,2,0,0,0,2, 5, 15} }, -{ {2,2,2,2,0,0,1,0, 10, 1} }, -{ {2,2,2,2,0,0,1,1, 11, 0} }, -{ {2,2,2,2,0,0,1,2, 8, 15} }, -{ {2,2,2,2,0,0,2,0, 5, 18} }, -{ {2,2,2,2,0,0,2,1, 8, 18} }, -{ {2,2,2,2,0,0,2,2, 2, 6} }, -{ {2,2,2,2,0,1,0,0, 10, 18} }, -{ {2,2,2,2,0,1,0,1, 11, 18} }, -{ {2,2,2,2,0,1,0,2, 8, 16} }, -{ {2,2,2,2,0,1,1,0, 12, 0} }, -{ {2,2,2,2,0,1,1,1, 10, 15} }, -{ {2,2,2,2,0,1,1,2, 6, 15} }, -{ {2,2,2,2,0,1,2,0, 6, 18} }, -{ {2,2,2,2,0,1,2,1, 8, 17} }, -{ {2,2,2,2,0,1,2,2, 3, 6} }, -{ {2,2,2,2,0,2,0,0, 5, 1} }, -{ {2,2,2,2,0,2,0,1, 8, 1} }, -{ {2,2,2,2,0,2,0,2, 2, 15} }, -{ {2,2,2,2,0,2,1,0, 6, 1} }, -{ {2,2,2,2,0,2,1,1, 8, 14} }, -{ {2,2,2,2,0,2,1,2, 3, 14} }, -{ {2,2,2,2,0,2,2,0, 4, 1} }, -{ {2,2,2,2,0,2,2,1, 7, 1} }, -{ {2,2,2,2,0,2,2,2, 1, 7} }, -{ {2,2,2,2,1,0,0,0, 10, 15} }, -{ {2,2,2,2,1,0,0,1, 12, 1} }, -{ {2,2,2,2,1,0,0,2, 6, 15} }, -{ {2,2,2,2,1,0,1,0, 11, 15} }, -{ {2,2,2,2,1,0,1,1, 10, 18} }, -{ {2,2,2,2,1,0,1,2, 8, 16} }, -{ {2,2,2,2,1,0,2,0, 8, 17} }, -{ {2,2,2,2,1,0,2,1, 6, 18} }, -{ {2,2,2,2,1,0,2,2, 3, 7} }, -{ {2,2,2,2,1,1,0,0, 11, 16} }, -{ {2,2,2,2,1,1,0,1, 10, 1} }, -{ {2,2,2,2,1,1,0,2, 8, 15} }, -{ {2,2,2,2,1,1,1,0, 10, 0} }, -{ {2,2,2,2,1,1,1,1, 9, 4} }, -{ {2,2,2,2,1,1,1,2, 5, 15} }, -{ {2,2,2,2,1,1,2,0, 8, 18} }, -{ {2,2,2,2,1,1,2,1, 5, 18} }, -{ {2,2,2,2,1,1,2,2, 2, 6} }, -{ {2,2,2,2,1,2,0,0, 8, 14} }, -{ {2,2,2,2,1,2,0,1, 6, 1} }, -{ {2,2,2,2,1,2,0,2, 3, 15} }, -{ {2,2,2,2,1,2,1,0, 8, 1} }, -{ {2,2,2,2,1,2,1,1, 5, 1} }, -{ {2,2,2,2,1,2,1,2, 2, 15} }, -{ {2,2,2,2,1,2,2,0, 7, 17} }, -{ {2,2,2,2,1,2,2,1, 4, 1} }, -{ {2,2,2,2,1,2,2,2, 1, 7} }, -{ {2,2,2,2,2,0,0,0, 5, 0} }, -{ {2,2,2,2,2,0,0,1, 6, 0} }, -{ {2,2,2,2,2,0,0,2, 4, 0} }, -{ {2,2,2,2,2,0,1,0, 8, 0} }, -{ {2,2,2,2,2,0,1,1, 8, 19} }, -{ {2,2,2,2,2,0,1,2, 7, 0} }, -{ {2,2,2,2,2,0,2,0, 2, 18} }, -{ {2,2,2,2,2,0,2,1, 3, 19} }, -{ {2,2,2,2,2,0,2,2, 1, 6} }, -{ {2,2,2,2,2,1,0,0, 8, 19} }, -{ {2,2,2,2,2,1,0,1, 8, 0} }, -{ {2,2,2,2,2,1,0,2, 7, 16} }, -{ {2,2,2,2,2,1,1,0, 6, 0} }, -{ {2,2,2,2,2,1,1,1, 5, 0} }, -{ {2,2,2,2,2,1,1,2, 4, 0} }, -{ {2,2,2,2,2,1,2,0, 3, 18} }, -{ {2,2,2,2,2,1,2,1, 2, 18} }, -{ {2,2,2,2,2,1,2,2, 1, 6} }, -{ {2,2,2,2,2,2,0,0, 2, 0} }, -{ {2,2,2,2,2,2,0,1, 3, 0} }, -{ {2,2,2,2,2,2,0,2, 1, 1} }, -{ {2,2,2,2,2,2,1,0, 3, 1} }, -{ {2,2,2,2,2,2,1,1, 2, 0} }, -{ {2,2,2,2,2,2,1,2, 1, 1} }, -{ {2,2,2,2,2,2,2,0, 1, 0} }, -{ {2,2,2,2,2,2,2,1, 1, 0} }, -{ {2,2,2,2,2,2,2,2, 0, 0} }, +{ {0,0,0,0,0,0,0,0, 0,0} }, +{ {0,0,0,0,0,0,0,1, 1,0} }, +{ {0,0,0,0,0,0,1,0, 1,1} }, +{ {0,0,0,0,0,0,1,1, 2,0} }, +{ {0,0,0,0,0,0,1,2, 3,0} }, +{ {0,0,0,0,0,1,0,0, 1,6} }, +{ {0,0,0,0,0,1,0,1, 2,18} }, +{ {0,0,0,0,0,1,0,2, 3,19} }, +{ {0,0,0,0,0,1,1,0, 4,0} }, +{ {0,0,0,0,0,1,1,1, 5,0} }, +{ {0,0,0,0,0,1,1,2, 6,0} }, +{ {0,0,0,0,0,1,2,0, 7,0} }, +{ {0,0,0,0,0,1,2,1, 8,0} }, +{ {0,0,0,0,0,1,2,2, 8,19} }, +{ {0,0,0,0,0,1,2,3, 58,0} }, +{ {0,0,0,0,1,0,0,0, 1,7} }, +{ {0,0,0,0,1,0,0,1, 4,1} }, +{ {0,0,0,0,1,0,0,2, 7,1} }, +{ {0,0,0,0,1,0,1,0, 2,15} }, +{ {0,0,0,0,1,0,1,1, 5,1} }, +{ {0,0,0,0,1,0,1,2, 8,1} }, +{ {0,0,0,0,1,0,2,0, 3,14} }, +{ {0,0,0,0,1,0,2,1, 6,1} }, +{ {0,0,0,0,1,0,2,2, 8,14} }, +{ {0,0,0,0,1,0,2,3, 58,1} }, +{ {0,0,0,0,1,1,0,0, 2,6} }, +{ {0,0,0,0,1,1,0,1, 5,18} }, +{ {0,0,0,0,1,1,0,2, 8,18} }, +{ {0,0,0,0,1,1,1,0, 5,15} }, +{ {0,0,0,0,1,1,1,1, 9,0} }, +{ {0,0,0,0,1,1,1,2, 10,0} }, +{ {0,0,0,0,1,1,2,0, 8,15} }, +{ {0,0,0,0,1,1,2,1, 10,1} }, +{ {0,0,0,0,1,1,2,2, 11,0} }, +{ {0,0,0,0,1,1,2,3, 59,0} }, +{ {0,0,0,0,1,2,0,0, 3,6} }, +{ {0,0,0,0,1,2,0,1, 6,18} }, +{ {0,0,0,0,1,2,0,2, 8,17} }, +{ {0,0,0,0,1,2,0,3, 58,18} }, +{ {0,0,0,0,1,2,1,0, 8,16} }, +{ {0,0,0,0,1,2,1,1, 10,18} }, +{ {0,0,0,0,1,2,1,2, 11,18} }, +{ {0,0,0,0,1,2,1,3, 59,19} }, +{ {0,0,0,0,1,2,2,0, 6,15} }, +{ {0,0,0,0,1,2,2,1, 12,0} }, +{ {0,0,0,0,1,2,2,2, 10,15} }, +{ {0,0,0,0,1,2,2,3, 60,0} }, +{ {0,0,0,0,1,2,3,0, 58,15} }, +{ {0,0,0,0,1,2,3,1, 60,1} }, +{ {0,0,0,0,1,2,3,2, 59,14} }, +{ {0,0,0,0,1,2,3,3, 59,17} }, +{ {0,0,0,0,1,2,3,4, 124,0} }, +{ {0,0,0,1,0,0,0,0, 1,2} }, +{ {0,0,0,1,0,0,0,1, 2,12} }, +{ {0,0,0,1,0,0,0,2, 3,13} }, +{ {0,0,0,1,0,0,1,0, 4,3} }, +{ {0,0,0,1,0,0,1,1, 5,21} }, +{ {0,0,0,1,0,0,1,2, 6,21} }, +{ {0,0,0,1,0,0,2,0, 7,21} }, +{ {0,0,0,1,0,0,2,1, 8,21} }, +{ {0,0,0,1,0,0,2,2, 8,32} }, +{ {0,0,0,1,0,0,2,3, 58,21} }, +{ {0,0,0,1,0,1,0,0, 4,13} }, +{ {0,0,0,1,0,1,0,1, 5,13} }, +{ {0,0,0,1,0,1,0,2, 6,13} }, +{ {0,0,0,1,0,1,1,0, 13,0} }, +{ {0,0,0,1,0,1,1,1, 14,0} }, +{ {0,0,0,1,0,1,1,2, 15,0} }, +{ {0,0,0,1,0,1,2,0, 16,0} }, +{ {0,0,0,1,0,1,2,1, 17,0} }, +{ {0,0,0,1,0,1,2,2, 18,0} }, +{ {0,0,0,1,0,1,2,3, 61,0} }, +{ {0,0,0,1,0,2,0,0, 7,27} }, +{ {0,0,0,1,0,2,0,1, 8,40} }, +{ {0,0,0,1,0,2,0,2, 8,13} }, +{ {0,0,0,1,0,2,0,3, 58,40} }, +{ {0,0,0,1,0,2,1,0, 16,19} }, +{ {0,0,0,1,0,2,1,1, 17,19} }, +{ {0,0,0,1,0,2,1,2, 18,19} }, +{ {0,0,0,1,0,2,1,3, 61,19} }, +{ {0,0,0,1,0,2,2,0, 16,13} }, +{ {0,0,0,1,0,2,2,1, 18,13} }, +{ {0,0,0,1,0,2,2,2, 17,13} }, +{ {0,0,0,1,0,2,2,3, 61,13} }, +{ {0,0,0,1,0,2,3,0, 62,0} }, +{ {0,0,0,1,0,2,3,1, 63,0} }, +{ {0,0,0,1,0,2,3,2, 63,21} }, +{ {0,0,0,1,0,2,3,3, 63,40} }, +{ {0,0,0,1,0,2,3,4, 125,0} }, +{ {0,0,0,1,1,0,0,0, 19,0} }, +{ {0,0,0,1,1,0,0,1, 20,0} }, +{ {0,0,0,1,1,0,0,2, 21,0} }, +{ {0,0,0,1,1,0,1,0, 20,20} }, +{ {0,0,0,1,1,0,1,1, 22,0} }, +{ {0,0,0,1,1,0,1,2, 23,0} }, +{ {0,0,0,1,1,0,2,0, 21,20} }, +{ {0,0,0,1,1,0,2,1, 23,20} }, +{ {0,0,0,1,1,0,2,2, 24,0} }, +{ {0,0,0,1,1,0,2,3, 64,0} }, +{ {0,0,0,1,1,1,0,0, 20,26} }, +{ {0,0,0,1,1,1,0,1, 22,19} }, +{ {0,0,0,1,1,1,0,2, 23,19} }, +{ {0,0,0,1,1,1,1,0, 25,0} }, +{ {0,0,0,1,1,1,1,1, 5,5} }, +{ {0,0,0,1,1,1,1,2, 26,0} }, +{ {0,0,0,1,1,1,2,0, 27,0} }, +{ {0,0,0,1,1,1,2,1, 28,0} }, +{ {0,0,0,1,1,1,2,2, 29,0} }, +{ {0,0,0,1,1,1,2,3, 65,0} }, +{ {0,0,0,1,1,2,0,0, 21,26} }, +{ {0,0,0,1,1,2,0,1, 23,41} }, +{ {0,0,0,1,1,2,0,2, 24,19} }, +{ {0,0,0,1,1,2,0,3, 64,19} }, +{ {0,0,0,1,1,2,1,0, 27,19} }, +{ {0,0,0,1,1,2,1,1, 28,19} }, +{ {0,0,0,1,1,2,1,2, 29,19} }, +{ {0,0,0,1,1,2,1,3, 65,19} }, +{ {0,0,0,1,1,2,2,0, 30,0} }, +{ {0,0,0,1,1,2,2,1, 31,0} }, +{ {0,0,0,1,1,2,2,2, 32,0} }, +{ {0,0,0,1,1,2,2,3, 66,0} }, +{ {0,0,0,1,1,2,3,0, 67,0} }, +{ {0,0,0,1,1,2,3,1, 68,0} }, +{ {0,0,0,1,1,2,3,2, 69,0} }, +{ {0,0,0,1,1,2,3,3, 69,19} }, +{ {0,0,0,1,1,2,3,4, 126,0} }, +{ {0,0,0,1,2,0,0,0, 33,0} }, +{ {0,0,0,1,2,0,0,1, 34,0} }, +{ {0,0,0,1,2,0,0,2, 35,0} }, +{ {0,0,0,1,2,0,0,3, 70,0} }, +{ {0,0,0,1,2,0,1,0, 35,20} }, +{ {0,0,0,1,2,0,1,1, 28,39} }, +{ {0,0,0,1,2,0,1,2, 36,0} }, +{ {0,0,0,1,2,0,1,3, 71,0} }, +{ {0,0,0,1,2,0,2,0, 34,20} }, +{ {0,0,0,1,2,0,2,1, 37,0} }, +{ {0,0,0,1,2,0,2,2, 28,29} }, +{ {0,0,0,1,2,0,2,3, 72,0} }, +{ {0,0,0,1,2,0,3,0, 70,20} }, +{ {0,0,0,1,2,0,3,1, 72,20} }, +{ {0,0,0,1,2,0,3,2, 71,20} }, +{ {0,0,0,1,2,0,3,3, 73,0} }, +{ {0,0,0,1,2,0,3,4, 127,0} }, +{ {0,0,0,1,2,1,0,0, 35,26} }, +{ {0,0,0,1,2,1,0,1, 28,22} }, +{ {0,0,0,1,2,1,0,2, 36,19} }, +{ {0,0,0,1,2,1,0,3, 71,19} }, +{ {0,0,0,1,2,1,1,0, 38,0} }, +{ {0,0,0,1,2,1,1,1, 17,22} }, +{ {0,0,0,1,2,1,1,2, 39,0} }, +{ {0,0,0,1,2,1,1,3, 74,0} }, +{ {0,0,0,1,2,1,2,0, 40,0} }, +{ {0,0,0,1,2,1,2,1, 41,0} }, +{ {0,0,0,1,2,1,2,2, 42,0} }, +{ {0,0,0,1,2,1,2,3, 75,0} }, +{ {0,0,0,1,2,1,3,0, 76,0} }, +{ {0,0,0,1,2,1,3,1, 77,0} }, +{ {0,0,0,1,2,1,3,2, 78,0} }, +{ {0,0,0,1,2,1,3,3, 79,0} }, +{ {0,0,0,1,2,1,3,4, 128,0} }, +{ {0,0,0,1,2,2,0,0, 34,26} }, +{ {0,0,0,1,2,2,0,1, 37,19} }, +{ {0,0,0,1,2,2,0,2, 28,10} }, +{ {0,0,0,1,2,2,0,3, 72,19} }, +{ {0,0,0,1,2,2,1,0, 40,19} }, +{ {0,0,0,1,2,2,1,1, 41,19} }, +{ {0,0,0,1,2,2,1,2, 42,19} }, +{ {0,0,0,1,2,2,1,3, 75,19} }, +{ {0,0,0,1,2,2,2,0, 26,11} }, +{ {0,0,0,1,2,2,2,1, 43,0} }, +{ {0,0,0,1,2,2,2,2, 10,11} }, +{ {0,0,0,1,2,2,2,3, 80,0} }, +{ {0,0,0,1,2,2,3,0, 81,0} }, +{ {0,0,0,1,2,2,3,1, 82,0} }, +{ {0,0,0,1,2,2,3,2, 83,0} }, +{ {0,0,0,1,2,2,3,3, 84,0} }, +{ {0,0,0,1,2,2,3,4, 129,0} }, +{ {0,0,0,1,2,3,0,0, 70,26} }, +{ {0,0,0,1,2,3,0,1, 72,41} }, +{ {0,0,0,1,2,3,0,2, 71,41} }, +{ {0,0,0,1,2,3,0,3, 73,19} }, +{ {0,0,0,1,2,3,0,4, 127,19} }, +{ {0,0,0,1,2,3,1,0, 76,19} }, +{ {0,0,0,1,2,3,1,1, 77,19} }, +{ {0,0,0,1,2,3,1,2, 78,19} }, +{ {0,0,0,1,2,3,1,3, 79,19} }, +{ {0,0,0,1,2,3,1,4, 128,19} }, +{ {0,0,0,1,2,3,2,0, 81,19} }, +{ {0,0,0,1,2,3,2,1, 82,19} }, +{ {0,0,0,1,2,3,2,2, 83,19} }, +{ {0,0,0,1,2,3,2,3, 84,19} }, +{ {0,0,0,1,2,3,2,4, 129,19} }, +{ {0,0,0,1,2,3,3,0, 85,0} }, +{ {0,0,0,1,2,3,3,1, 86,0} }, +{ {0,0,0,1,2,3,3,2, 87,0} }, +{ {0,0,0,1,2,3,3,3, 88,0} }, +{ {0,0,0,1,2,3,3,4, 130,0} }, +{ {0,0,0,1,2,3,4,0, 131,0} }, +{ {0,0,0,1,2,3,4,1, 132,0} }, +{ {0,0,0,1,2,3,4,2, 133,0} }, +{ {0,0,0,1,2,3,4,3, 134,0} }, +{ {0,0,0,1,2,3,4,4, 134,19} }, +{ {0,0,0,1,2,3,4,5, 167,0} }, +{ {0,0,1,0,0,0,0,0, 1,3} }, +{ {0,0,1,0,0,0,0,1, 4,2} }, +{ {0,0,1,0,0,0,0,2, 7,20} }, +{ {0,0,1,0,0,0,1,0, 2,9} }, +{ {0,0,1,0,0,0,1,1, 5,20} }, +{ {0,0,1,0,0,0,1,2, 8,20} }, +{ {0,0,1,0,0,0,2,0, 3,8} }, +{ {0,0,1,0,0,0,2,1, 6,20} }, +{ {0,0,1,0,0,0,2,2, 8,43} }, +{ {0,0,1,0,0,0,2,3, 58,20} }, +{ {0,0,1,0,0,1,0,0, 19,1} }, +{ {0,0,1,0,0,1,0,1, 20,21} }, +{ {0,0,1,0,0,1,0,2, 21,21} }, +{ {0,0,1,0,0,1,1,0, 20,1} }, +{ {0,0,1,0,0,1,1,1, 22,1} }, +{ {0,0,1,0,0,1,1,2, 23,21} }, +{ {0,0,1,0,0,1,2,0, 21,1} }, +{ {0,0,1,0,0,1,2,1, 23,1} }, +{ {0,0,1,0,0,1,2,2, 24,1} }, +{ {0,0,1,0,0,1,2,3, 64,21} }, +{ {0,0,1,0,0,2,0,0, 33,1} }, +{ {0,0,1,0,0,2,0,1, 35,21} }, +{ {0,0,1,0,0,2,0,2, 34,21} }, +{ {0,0,1,0,0,2,0,3, 70,21} }, +{ {0,0,1,0,0,2,1,0, 34,1} }, +{ {0,0,1,0,0,2,1,1, 28,44} }, +{ {0,0,1,0,0,2,1,2, 37,1} }, +{ {0,0,1,0,0,2,1,3, 72,21} }, +{ {0,0,1,0,0,2,2,0, 35,1} }, +{ {0,0,1,0,0,2,2,1, 36,1} }, +{ {0,0,1,0,0,2,2,2, 28,30} }, +{ {0,0,1,0,0,2,2,3, 71,21} }, +{ {0,0,1,0,0,2,3,0, 70,1} }, +{ {0,0,1,0,0,2,3,1, 71,1} }, +{ {0,0,1,0,0,2,3,2, 72,1} }, +{ {0,0,1,0,0,2,3,3, 73,1} }, +{ {0,0,1,0,0,2,3,4, 127,21} }, +{ {0,0,1,0,1,0,0,0, 4,8} }, +{ {0,0,1,0,1,0,0,1, 13,1} }, +{ {0,0,1,0,1,0,0,2, 16,1} }, +{ {0,0,1,0,1,0,1,0, 5,8} }, +{ {0,0,1,0,1,0,1,1, 14,1} }, +{ {0,0,1,0,1,0,1,2, 17,1} }, +{ {0,0,1,0,1,0,2,0, 6,8} }, +{ {0,0,1,0,1,0,2,1, 15,1} }, +{ {0,0,1,0,1,0,2,2, 18,1} }, +{ {0,0,1,0,1,0,2,3, 61,1} }, +{ {0,0,1,0,1,1,0,0, 20,23} }, +{ {0,0,1,0,1,1,0,1, 25,1} }, +{ {0,0,1,0,1,1,0,2, 27,1} }, +{ {0,0,1,0,1,1,1,0, 22,14} }, +{ {0,0,1,0,1,1,1,1, 5,4} }, +{ {0,0,1,0,1,1,1,2, 28,1} }, +{ {0,0,1,0,1,1,2,0, 23,14} }, +{ {0,0,1,0,1,1,2,1, 26,1} }, +{ {0,0,1,0,1,1,2,2, 29,1} }, +{ {0,0,1,0,1,1,2,3, 65,1} }, +{ {0,0,1,0,1,2,0,0, 35,23} }, +{ {0,0,1,0,1,2,0,1, 38,1} }, +{ {0,0,1,0,1,2,0,2, 40,1} }, +{ {0,0,1,0,1,2,0,3, 76,1} }, +{ {0,0,1,0,1,2,1,0, 28,27} }, +{ {0,0,1,0,1,2,1,1, 17,27} }, +{ {0,0,1,0,1,2,1,2, 41,1} }, +{ {0,0,1,0,1,2,1,3, 77,1} }, +{ {0,0,1,0,1,2,2,0, 36,14} }, +{ {0,0,1,0,1,2,2,1, 39,1} }, +{ {0,0,1,0,1,2,2,2, 42,1} }, +{ {0,0,1,0,1,2,2,3, 78,1} }, +{ {0,0,1,0,1,2,3,0, 71,14} }, +{ {0,0,1,0,1,2,3,1, 74,1} }, +{ {0,0,1,0,1,2,3,2, 75,1} }, +{ {0,0,1,0,1,2,3,3, 79,1} }, +{ {0,0,1,0,1,2,3,4, 128,1} }, +{ {0,0,1,0,2,0,0,0, 7,22} }, +{ {0,0,1,0,2,0,0,1, 16,14} }, +{ {0,0,1,0,2,0,0,2, 16,8} }, +{ {0,0,1,0,2,0,0,3, 62,1} }, +{ {0,0,1,0,2,0,1,0, 8,35} }, +{ {0,0,1,0,2,0,1,1, 17,14} }, +{ {0,0,1,0,2,0,1,2, 18,8} }, +{ {0,0,1,0,2,0,1,3, 63,1} }, +{ {0,0,1,0,2,0,2,0, 8,8} }, +{ {0,0,1,0,2,0,2,1, 18,14} }, +{ {0,0,1,0,2,0,2,2, 17,8} }, +{ {0,0,1,0,2,0,2,3, 63,20} }, +{ {0,0,1,0,2,0,3,0, 58,35} }, +{ {0,0,1,0,2,0,3,1, 61,14} }, +{ {0,0,1,0,2,0,3,2, 61,8} }, +{ {0,0,1,0,2,0,3,3, 63,35} }, +{ {0,0,1,0,2,0,3,4, 125,1} }, +{ {0,0,1,0,2,1,0,0, 21,23} }, +{ {0,0,1,0,2,1,0,1, 27,14} }, +{ {0,0,1,0,2,1,0,2, 30,1} }, +{ {0,0,1,0,2,1,0,3, 67,1} }, +{ {0,0,1,0,2,1,1,0, 23,34} }, +{ {0,0,1,0,2,1,1,1, 28,14} }, +{ {0,0,1,0,2,1,1,2, 31,1} }, +{ {0,0,1,0,2,1,1,3, 68,1} }, +{ {0,0,1,0,2,1,2,0, 24,14} }, +{ {0,0,1,0,2,1,2,1, 29,14} }, +{ {0,0,1,0,2,1,2,2, 32,1} }, +{ {0,0,1,0,2,1,2,3, 69,1} }, +{ {0,0,1,0,2,1,3,0, 64,14} }, +{ {0,0,1,0,2,1,3,1, 65,14} }, +{ {0,0,1,0,2,1,3,2, 66,1} }, +{ {0,0,1,0,2,1,3,3, 69,14} }, +{ {0,0,1,0,2,1,3,4, 126,1} }, +{ {0,0,1,0,2,2,0,0, 34,23} }, +{ {0,0,1,0,2,2,0,1, 40,14} }, +{ {0,0,1,0,2,2,0,2, 26,10} }, +{ {0,0,1,0,2,2,0,3, 81,1} }, +{ {0,0,1,0,2,2,1,0, 37,14} }, +{ {0,0,1,0,2,2,1,1, 41,14} }, +{ {0,0,1,0,2,2,1,2, 43,1} }, +{ {0,0,1,0,2,2,1,3, 82,1} }, +{ {0,0,1,0,2,2,2,0, 28,11} }, +{ {0,0,1,0,2,2,2,1, 42,14} }, +{ {0,0,1,0,2,2,2,2, 10,10} }, +{ {0,0,1,0,2,2,2,3, 83,1} }, +{ {0,0,1,0,2,2,3,0, 72,14} }, +{ {0,0,1,0,2,2,3,1, 75,14} }, +{ {0,0,1,0,2,2,3,2, 80,1} }, +{ {0,0,1,0,2,2,3,3, 84,1} }, +{ {0,0,1,0,2,2,3,4, 129,1} }, +{ {0,0,1,0,2,3,0,0, 70,23} }, +{ {0,0,1,0,2,3,0,1, 76,14} }, +{ {0,0,1,0,2,3,0,2, 85,1} }, +{ {0,0,1,0,2,3,0,3, 81,14} }, +{ {0,0,1,0,2,3,0,4, 131,1} }, +{ {0,0,1,0,2,3,1,0, 72,34} }, +{ {0,0,1,0,2,3,1,1, 77,44} }, +{ {0,0,1,0,2,3,1,2, 86,1} }, +{ {0,0,1,0,2,3,1,3, 82,14} }, +{ {0,0,1,0,2,3,1,4, 132,1} }, +{ {0,0,1,0,2,3,2,0, 73,14} }, +{ {0,0,1,0,2,3,2,1, 79,14} }, +{ {0,0,1,0,2,3,2,2, 88,1} }, +{ {0,0,1,0,2,3,2,3, 84,14} }, +{ {0,0,1,0,2,3,2,4, 134,1} }, +{ {0,0,1,0,2,3,3,0, 71,34} }, +{ {0,0,1,0,2,3,3,1, 78,14} }, +{ {0,0,1,0,2,3,3,2, 87,1} }, +{ {0,0,1,0,2,3,3,3, 83,14} }, +{ {0,0,1,0,2,3,3,4, 133,1} }, +{ {0,0,1,0,2,3,4,0, 127,14} }, +{ {0,0,1,0,2,3,4,1, 128,14} }, +{ {0,0,1,0,2,3,4,2, 130,1} }, +{ {0,0,1,0,2,3,4,3, 129,14} }, +{ {0,0,1,0,2,3,4,4, 134,14} }, +{ {0,0,1,0,2,3,4,5, 167,1} }, +{ {0,0,1,1,0,0,0,0, 2,2} }, +{ {0,0,1,1,0,0,0,1, 5,2} }, +{ {0,0,1,1,0,0,0,2, 8,33} }, +{ {0,0,1,1,0,0,1,0, 5,3} }, +{ {0,0,1,1,0,0,1,1, 9,2} }, +{ {0,0,1,1,0,0,1,2, 10,21} }, +{ {0,0,1,1,0,0,2,0, 8,42} }, +{ {0,0,1,1,0,0,2,1, 10,20} }, +{ {0,0,1,1,0,0,2,2, 11,20} }, +{ {0,0,1,1,0,0,2,3, 59,21} }, +{ {0,0,1,1,0,1,0,0, 20,12} }, +{ {0,0,1,1,0,1,0,1, 22,12} }, +{ {0,0,1,1,0,1,0,2, 23,32} }, +{ {0,0,1,1,0,1,1,0, 25,21} }, +{ {0,0,1,1,0,1,1,1, 5,24} }, +{ {0,0,1,1,0,1,1,2, 26,21} }, +{ {0,0,1,1,0,1,2,0, 27,21} }, +{ {0,0,1,1,0,1,2,1, 28,21} }, +{ {0,0,1,1,0,1,2,2, 29,21} }, +{ {0,0,1,1,0,1,2,3, 65,21} }, +{ {0,0,1,1,0,2,0,0, 34,12} }, +{ {0,0,1,1,0,2,0,1, 28,7} }, +{ {0,0,1,1,0,2,0,2, 37,12} }, +{ {0,0,1,1,0,2,0,3, 72,32} }, +{ {0,0,1,1,0,2,1,0, 26,6} }, +{ {0,0,1,1,0,2,1,1, 10,6} }, +{ {0,0,1,1,0,2,1,2, 43,21} }, +{ {0,0,1,1,0,2,1,3, 80,21} }, +{ {0,0,1,1,0,2,2,0, 40,32} }, +{ {0,0,1,1,0,2,2,1, 42,32} }, +{ {0,0,1,1,0,2,2,2, 41,32} }, +{ {0,0,1,1,0,2,2,3, 75,32} }, +{ {0,0,1,1,0,2,3,0, 81,21} }, +{ {0,0,1,1,0,2,3,1, 83,21} }, +{ {0,0,1,1,0,2,3,2, 82,21} }, +{ {0,0,1,1,0,2,3,3, 84,21} }, +{ {0,0,1,1,0,2,3,4, 129,21} }, +{ {0,0,1,1,1,0,0,0, 20,9} }, +{ {0,0,1,1,1,0,0,1, 25,20} }, +{ {0,0,1,1,1,0,0,2, 27,20} }, +{ {0,0,1,1,1,0,1,0, 22,9} }, +{ {0,0,1,1,1,0,1,1, 5,25} }, +{ {0,0,1,1,1,0,1,2, 28,20} }, +{ {0,0,1,1,1,0,2,0, 23,43} }, +{ {0,0,1,1,1,0,2,1, 26,20} }, +{ {0,0,1,1,1,0,2,2, 29,20} }, +{ {0,0,1,1,1,0,2,3, 65,20} }, +{ {0,0,1,1,1,1,0,0, 44,0} }, +{ {0,0,1,1,1,1,0,1, 20,22} }, +{ {0,0,1,1,1,1,0,2, 45,0} }, +{ {0,0,1,1,1,1,1,0, 20,27} }, +{ {0,0,1,1,1,1,1,1, 2,4} }, +{ {0,0,1,1,1,1,1,2, 34,27} }, +{ {0,0,1,1,1,1,2,0, 45,1} }, +{ {0,0,1,1,1,1,2,1, 34,22} }, +{ {0,0,1,1,1,1,2,2, 46,0} }, +{ {0,0,1,1,1,1,2,3, 89,0} }, +{ {0,0,1,1,1,2,0,0, 45,6} }, +{ {0,0,1,1,1,2,0,1, 27,7} }, +{ {0,0,1,1,1,2,0,2, 47,0} }, +{ {0,0,1,1,1,2,0,3, 90,0} }, +{ {0,0,1,1,1,2,1,0, 23,45} }, +{ {0,0,1,1,1,2,1,1, 8,44} }, +{ {0,0,1,1,1,2,1,2, 37,27} }, +{ {0,0,1,1,1,2,1,3, 72,45} }, +{ {0,0,1,1,1,2,2,0, 48,0} }, +{ {0,0,1,1,1,2,2,1, 40,38} }, +{ {0,0,1,1,1,2,2,2, 29,5} }, +{ {0,0,1,1,1,2,2,3, 91,0} }, +{ {0,0,1,1,1,2,3,0, 92,0} }, +{ {0,0,1,1,1,2,3,1, 81,7} }, +{ {0,0,1,1,1,2,3,2, 93,0} }, +{ {0,0,1,1,1,2,3,3, 94,0} }, +{ {0,0,1,1,1,2,3,4, 135,0} }, +{ {0,0,1,1,2,0,0,0, 34,9} }, +{ {0,0,1,1,2,0,0,1, 26,7} }, +{ {0,0,1,1,2,0,0,2, 40,43} }, +{ {0,0,1,1,2,0,0,3, 81,20} }, +{ {0,0,1,1,2,0,1,0, 28,6} }, +{ {0,0,1,1,2,0,1,1, 10,7} }, +{ {0,0,1,1,2,0,1,2, 42,43} }, +{ {0,0,1,1,2,0,1,3, 83,20} }, +{ {0,0,1,1,2,0,2,0, 37,9} }, +{ {0,0,1,1,2,0,2,1, 43,20} }, +{ {0,0,1,1,2,0,2,2, 41,43} }, +{ {0,0,1,1,2,0,2,3, 82,20} }, +{ {0,0,1,1,2,0,3,0, 72,43} }, +{ {0,0,1,1,2,0,3,1, 80,20} }, +{ {0,0,1,1,2,0,3,2, 75,43} }, +{ {0,0,1,1,2,0,3,3, 84,20} }, +{ {0,0,1,1,2,0,3,4, 129,20} }, +{ {0,0,1,1,2,1,0,0, 45,7} }, +{ {0,0,1,1,2,1,0,1, 23,38} }, +{ {0,0,1,1,2,1,0,2, 48,1} }, +{ {0,0,1,1,2,1,0,3, 92,1} }, +{ {0,0,1,1,2,1,1,0, 27,6} }, +{ {0,0,1,1,2,1,1,1, 8,39} }, +{ {0,0,1,1,2,1,1,2, 40,45} }, +{ {0,0,1,1,2,1,1,3, 81,6} }, +{ {0,0,1,1,2,1,2,0, 47,1} }, +{ {0,0,1,1,2,1,2,1, 37,22} }, +{ {0,0,1,1,2,1,2,2, 29,4} }, +{ {0,0,1,1,2,1,2,3, 93,1} }, +{ {0,0,1,1,2,1,3,0, 90,1} }, +{ {0,0,1,1,2,1,3,1, 72,38} }, +{ {0,0,1,1,2,1,3,2, 91,1} }, +{ {0,0,1,1,2,1,3,3, 94,1} }, +{ {0,0,1,1,2,1,3,4, 135,1} }, +{ {0,0,1,1,2,2,0,0, 46,6} }, +{ {0,0,1,1,2,2,0,1, 29,7} }, +{ {0,0,1,1,2,2,0,2, 29,10} }, +{ {0,0,1,1,2,2,0,3, 94,17} }, +{ {0,0,1,1,2,2,1,0, 29,6} }, +{ {0,0,1,1,2,2,1,1, 11,6} }, +{ {0,0,1,1,2,2,1,2, 41,45} }, +{ {0,0,1,1,2,2,1,3, 84,6} }, +{ {0,0,1,1,2,2,2,0, 29,11} }, +{ {0,0,1,1,2,2,2,1, 41,38} }, +{ {0,0,1,1,2,2,2,2, 11,10} }, +{ {0,0,1,1,2,2,2,3, 84,11} }, +{ {0,0,1,1,2,2,3,0, 94,16} }, +{ {0,0,1,1,2,2,3,1, 84,7} }, +{ {0,0,1,1,2,2,3,2, 84,10} }, +{ {0,0,1,1,2,2,3,3, 95,0} }, +{ {0,0,1,1,2,2,3,4, 136,0} }, +{ {0,0,1,1,2,3,0,0, 89,6} }, +{ {0,0,1,1,2,3,0,1, 65,7} }, +{ {0,0,1,1,2,3,0,2, 91,17} }, +{ {0,0,1,1,2,3,0,3, 93,17} }, +{ {0,0,1,1,2,3,0,4, 135,17} }, +{ {0,0,1,1,2,3,1,0, 65,6} }, +{ {0,0,1,1,2,3,1,1, 59,6} }, +{ {0,0,1,1,2,3,1,2, 75,45} }, +{ {0,0,1,1,2,3,1,3, 82,6} }, +{ {0,0,1,1,2,3,1,4, 129,6} }, +{ {0,0,1,1,2,3,2,0, 93,16} }, +{ {0,0,1,1,2,3,2,1, 82,7} }, +{ {0,0,1,1,2,3,2,2, 84,4} }, +{ {0,0,1,1,2,3,2,3, 96,0} }, +{ {0,0,1,1,2,3,2,4, 137,0} }, +{ {0,0,1,1,2,3,3,0, 91,16} }, +{ {0,0,1,1,2,3,3,1, 75,38} }, +{ {0,0,1,1,2,3,3,2, 97,0} }, +{ {0,0,1,1,2,3,3,3, 84,5} }, +{ {0,0,1,1,2,3,3,4, 138,0} }, +{ {0,0,1,1,2,3,4,0, 135,16} }, +{ {0,0,1,1,2,3,4,1, 129,7} }, +{ {0,0,1,1,2,3,4,2, 138,1} }, +{ {0,0,1,1,2,3,4,3, 137,1} }, +{ {0,0,1,1,2,3,4,4, 136,17} }, +{ {0,0,1,1,2,3,4,5, 168,0} }, +{ {0,0,1,2,0,0,0,0, 3,2} }, +{ {0,0,1,2,0,0,0,1, 6,2} }, +{ {0,0,1,2,0,0,0,2, 8,2} }, +{ {0,0,1,2,0,0,0,3, 58,33} }, +{ {0,0,1,2,0,0,1,0, 8,3} }, +{ {0,0,1,2,0,0,1,1, 10,2} }, +{ {0,0,1,2,0,0,1,2, 11,33} }, +{ {0,0,1,2,0,0,1,3, 59,32} }, +{ {0,0,1,2,0,0,2,0, 6,3} }, +{ {0,0,1,2,0,0,2,1, 12,3} }, +{ {0,0,1,2,0,0,2,2, 10,3} }, +{ {0,0,1,2,0,0,2,3, 60,21} }, +{ {0,0,1,2,0,0,3,0, 58,42} }, +{ {0,0,1,2,0,0,3,1, 60,20} }, +{ {0,0,1,2,0,0,3,2, 59,43} }, +{ {0,0,1,2,0,0,3,3, 59,2} }, +{ {0,0,1,2,0,0,3,4, 124,21} }, +{ {0,0,1,2,0,1,0,0, 21,12} }, +{ {0,0,1,2,0,1,0,1, 23,12} }, +{ {0,0,1,2,0,1,0,2, 24,12} }, +{ {0,0,1,2,0,1,0,3, 64,32} }, +{ {0,0,1,2,0,1,1,0, 27,32} }, +{ {0,0,1,2,0,1,1,1, 28,32} }, +{ {0,0,1,2,0,1,1,2, 29,32} }, +{ {0,0,1,2,0,1,1,3, 65,32} }, +{ {0,0,1,2,0,1,2,0, 30,21} }, +{ {0,0,1,2,0,1,2,1, 31,21} }, +{ {0,0,1,2,0,1,2,2, 32,21} }, +{ {0,0,1,2,0,1,2,3, 66,21} }, +{ {0,0,1,2,0,1,3,0, 67,21} }, +{ {0,0,1,2,0,1,3,1, 68,21} }, +{ {0,0,1,2,0,1,3,2, 69,21} }, +{ {0,0,1,2,0,1,3,3, 69,32} }, +{ {0,0,1,2,0,1,3,4, 126,21} }, +{ {0,0,1,2,0,2,0,0, 35,12} }, +{ {0,0,1,2,0,2,0,1, 36,12} }, +{ {0,0,1,2,0,2,0,2, 28,37} }, +{ {0,0,1,2,0,2,0,3, 71,32} }, +{ {0,0,1,2,0,2,1,0, 40,21} }, +{ {0,0,1,2,0,2,1,1, 42,21} }, +{ {0,0,1,2,0,2,1,2, 41,21} }, +{ {0,0,1,2,0,2,1,3, 75,21} }, +{ {0,0,1,2,0,2,2,0, 38,21} }, +{ {0,0,1,2,0,2,2,1, 39,21} }, +{ {0,0,1,2,0,2,2,2, 17,30} }, +{ {0,0,1,2,0,2,2,3, 74,21} }, +{ {0,0,1,2,0,2,3,0, 76,21} }, +{ {0,0,1,2,0,2,3,1, 78,21} }, +{ {0,0,1,2,0,2,3,2, 77,21} }, +{ {0,0,1,2,0,2,3,3, 79,21} }, +{ {0,0,1,2,0,2,3,4, 128,21} }, +{ {0,0,1,2,0,3,0,0, 70,12} }, +{ {0,0,1,2,0,3,0,1, 71,12} }, +{ {0,0,1,2,0,3,0,2, 73,12} }, +{ {0,0,1,2,0,3,0,3, 72,12} }, +{ {0,0,1,2,0,3,0,4, 127,32} }, +{ {0,0,1,2,0,3,1,0, 81,32} }, +{ {0,0,1,2,0,3,1,1, 83,44} }, +{ {0,0,1,2,0,3,1,2, 84,32} }, +{ {0,0,1,2,0,3,1,3, 82,32} }, +{ {0,0,1,2,0,3,1,4, 129,32} }, +{ {0,0,1,2,0,3,2,0, 85,21} }, +{ {0,0,1,2,0,3,2,1, 87,21} }, +{ {0,0,1,2,0,3,2,2, 88,24} }, +{ {0,0,1,2,0,3,2,3, 86,21} }, +{ {0,0,1,2,0,3,2,4, 130,21} }, +{ {0,0,1,2,0,3,3,0, 76,32} }, +{ {0,0,1,2,0,3,3,1, 78,32} }, +{ {0,0,1,2,0,3,3,2, 79,32} }, +{ {0,0,1,2,0,3,3,3, 77,32} }, +{ {0,0,1,2,0,3,3,4, 128,32} }, +{ {0,0,1,2,0,3,4,0, 131,21} }, +{ {0,0,1,2,0,3,4,1, 133,21} }, +{ {0,0,1,2,0,3,4,2, 134,21} }, +{ {0,0,1,2,0,3,4,3, 132,21} }, +{ {0,0,1,2,0,3,4,4, 134,32} }, +{ {0,0,1,2,0,3,4,5, 167,21} }, +{ {0,0,1,2,1,0,0,0, 35,9} }, +{ {0,0,1,2,1,0,0,1, 38,20} }, +{ {0,0,1,2,1,0,0,2, 40,20} }, +{ {0,0,1,2,1,0,0,3, 76,20} }, +{ {0,0,1,2,1,0,1,0, 28,46} }, +{ {0,0,1,2,1,0,1,1, 17,29} }, +{ {0,0,1,2,1,0,1,2, 41,20} }, +{ {0,0,1,2,1,0,1,3, 77,20} }, +{ {0,0,1,2,1,0,2,0, 36,43} }, +{ {0,0,1,2,1,0,2,1, 39,20} }, +{ {0,0,1,2,1,0,2,2, 42,20} }, +{ {0,0,1,2,1,0,2,3, 78,20} }, +{ {0,0,1,2,1,0,3,0, 71,43} }, +{ {0,0,1,2,1,0,3,1, 74,20} }, +{ {0,0,1,2,1,0,3,2, 75,20} }, +{ {0,0,1,2,1,0,3,3, 79,20} }, +{ {0,0,1,2,1,0,3,4, 128,20} }, +{ {0,0,1,2,1,1,0,0, 45,2} }, +{ {0,0,1,2,1,1,0,1, 27,10} }, +{ {0,0,1,2,1,1,0,2, 47,21} }, +{ {0,0,1,2,1,1,0,3, 90,21} }, +{ {0,0,1,2,1,1,1,0, 23,28} }, +{ {0,0,1,2,1,1,1,1, 8,29} }, +{ {0,0,1,2,1,1,1,2, 37,46} }, +{ {0,0,1,2,1,1,1,3, 72,28} }, +{ {0,0,1,2,1,1,2,0, 48,21} }, +{ {0,0,1,2,1,1,2,1, 40,31} }, +{ {0,0,1,2,1,1,2,2, 29,24} }, +{ {0,0,1,2,1,1,2,3, 91,21} }, +{ {0,0,1,2,1,1,3,0, 92,21} }, +{ {0,0,1,2,1,1,3,1, 81,10} }, +{ {0,0,1,2,1,1,3,2, 93,21} }, +{ {0,0,1,2,1,1,3,3, 94,21} }, +{ {0,0,1,2,1,1,3,4, 135,21} }, +{ {0,0,1,2,1,2,0,0, 49,0} }, +{ {0,0,1,2,1,2,0,1, 50,0} }, +{ {0,0,1,2,1,2,0,2, 31,22} }, +{ {0,0,1,2,1,2,0,3, 98,0} }, +{ {0,0,1,2,1,2,1,0, 31,27} }, +{ {0,0,1,2,1,2,1,1, 18,4} }, +{ {0,0,1,2,1,2,1,2, 43,27} }, +{ {0,0,1,2,1,2,1,3, 86,27} }, +{ {0,0,1,2,1,2,2,0, 50,1} }, +{ {0,0,1,2,1,2,2,1, 51,0} }, +{ {0,0,1,2,1,2,2,2, 18,5} }, +{ {0,0,1,2,1,2,2,3, 99,0} }, +{ {0,0,1,2,1,2,3,0, 98,1} }, +{ {0,0,1,2,1,2,3,1, 99,1} }, +{ {0,0,1,2,1,2,3,2, 86,22} }, +{ {0,0,1,2,1,2,3,3, 100,0} }, +{ {0,0,1,2,1,2,3,4, 139,0} }, +{ {0,0,1,2,1,3,0,0, 101,0} }, +{ {0,0,1,2,1,3,0,1, 102,0} }, +{ {0,0,1,2,1,3,0,2, 103,0} }, +{ {0,0,1,2,1,3,0,3, 103,21} }, +{ {0,0,1,2,1,3,0,4, 140,0} }, +{ {0,0,1,2,1,3,1,0, 68,27} }, +{ {0,0,1,2,1,3,1,1, 63,27} }, +{ {0,0,1,2,1,3,1,2, 82,27} }, +{ {0,0,1,2,1,3,1,3, 82,46} }, +{ {0,0,1,2,1,3,1,4, 132,27} }, +{ {0,0,1,2,1,3,2,0, 104,0} }, +{ {0,0,1,2,1,3,2,1, 105,0} }, +{ {0,0,1,2,1,3,2,2, 79,24} }, +{ {0,0,1,2,1,3,2,3, 106,0} }, +{ {0,0,1,2,1,3,2,4, 141,0} }, +{ {0,0,1,2,1,3,3,0, 104,21} }, +{ {0,0,1,2,1,3,3,1, 105,21} }, +{ {0,0,1,2,1,3,3,2, 106,21} }, +{ {0,0,1,2,1,3,3,3, 79,5} }, +{ {0,0,1,2,1,3,3,4, 141,21} }, +{ {0,0,1,2,1,3,4,0, 142,0} }, +{ {0,0,1,2,1,3,4,1, 143,0} }, +{ {0,0,1,2,1,3,4,2, 144,0} }, +{ {0,0,1,2,1,3,4,3, 144,21} }, +{ {0,0,1,2,1,3,4,4, 145,0} }, +{ {0,0,1,2,1,3,4,5, 169,0} }, +{ {0,0,1,2,2,0,0,0, 21,9} }, +{ {0,0,1,2,2,0,0,1, 30,20} }, +{ {0,0,1,2,2,0,0,2, 27,43} }, +{ {0,0,1,2,2,0,0,3, 67,20} }, +{ {0,0,1,2,2,0,1,0, 24,9} }, +{ {0,0,1,2,2,0,1,1, 32,20} }, +{ {0,0,1,2,2,0,1,2, 29,43} }, +{ {0,0,1,2,2,0,1,3, 69,20} }, +{ {0,0,1,2,2,0,2,0, 23,9} }, +{ {0,0,1,2,2,0,2,1, 31,20} }, +{ {0,0,1,2,2,0,2,2, 28,43} }, +{ {0,0,1,2,2,0,2,3, 68,20} }, +{ {0,0,1,2,2,0,3,0, 64,43} }, +{ {0,0,1,2,2,0,3,1, 66,20} }, +{ {0,0,1,2,2,0,3,2, 65,43} }, +{ {0,0,1,2,2,0,3,3, 69,43} }, +{ {0,0,1,2,2,0,3,4, 126,20} }, +{ {0,0,1,2,2,1,0,0, 52,0} }, +{ {0,0,1,2,2,1,0,1, 53,0} }, +{ {0,0,1,2,2,1,0,2, 53,21} }, +{ {0,0,1,2,2,1,0,3, 107,0} }, +{ {0,0,1,2,2,1,1,0, 53,20} }, +{ {0,0,1,2,2,1,1,1, 24,5} }, +{ {0,0,1,2,2,1,1,2, 47,44} }, +{ {0,0,1,2,2,1,1,3, 108,0} }, +{ {0,0,1,2,2,1,2,0, 53,1} }, +{ {0,0,1,2,2,1,2,1, 47,30} }, +{ {0,0,1,2,2,1,2,2, 24,4} }, +{ {0,0,1,2,2,1,2,3, 108,21} }, +{ {0,0,1,2,2,1,3,0, 107,20} }, +{ {0,0,1,2,2,1,3,1, 108,20} }, +{ {0,0,1,2,2,1,3,2, 108,1} }, +{ {0,0,1,2,2,1,3,3, 109,0} }, +{ {0,0,1,2,2,1,3,4, 146,0} }, +{ {0,0,1,2,2,2,0,0, 45,3} }, +{ {0,0,1,2,2,2,0,1, 48,20} }, +{ {0,0,1,2,2,2,0,2, 23,31} }, +{ {0,0,1,2,2,2,0,3, 92,20} }, +{ {0,0,1,2,2,2,1,0, 47,20} }, +{ {0,0,1,2,2,2,1,1, 29,25} }, +{ {0,0,1,2,2,2,1,2, 37,37} }, +{ {0,0,1,2,2,2,1,3, 93,20} }, +{ {0,0,1,2,2,2,2,0, 27,11} }, +{ {0,0,1,2,2,2,2,1, 40,28} }, +{ {0,0,1,2,2,2,2,2, 8,30} }, +{ {0,0,1,2,2,2,2,3, 81,11} }, +{ {0,0,1,2,2,2,3,0, 90,20} }, +{ {0,0,1,2,2,2,3,1, 91,20} }, +{ {0,0,1,2,2,2,3,2, 72,31} }, +{ {0,0,1,2,2,2,3,3, 94,20} }, +{ {0,0,1,2,2,2,3,4, 135,20} }, +{ {0,0,1,2,2,3,0,0, 110,0} }, +{ {0,0,1,2,2,3,0,1, 111,0} }, +{ {0,0,1,2,2,3,0,2, 112,0} }, +{ {0,0,1,2,2,3,0,3, 108,36} }, +{ {0,0,1,2,2,3,0,4, 147,0} }, +{ {0,0,1,2,2,3,1,0, 108,26} }, +{ {0,0,1,2,2,3,1,1, 69,44} }, +{ {0,0,1,2,2,3,1,2, 93,44} }, +{ {0,0,1,2,2,3,1,3, 113,0} }, +{ {0,0,1,2,2,3,1,4, 148,0} }, +{ {0,0,1,2,2,3,2,0, 112,46} }, +{ {0,0,1,2,2,3,2,1, 103,46} }, +{ {0,0,1,2,2,3,2,2, 73,24} }, +{ {0,0,1,2,2,3,2,3, 93,30} }, +{ {0,0,1,2,2,3,2,4, 149,0} }, +{ {0,0,1,2,2,3,3,0, 111,20} }, +{ {0,0,1,2,2,3,3,1, 114,0} }, +{ {0,0,1,2,2,3,3,2, 103,22} }, +{ {0,0,1,2,2,3,3,3, 69,30} }, +{ {0,0,1,2,2,3,3,4, 150,0} }, +{ {0,0,1,2,2,3,4,0, 147,20} }, +{ {0,0,1,2,2,3,4,1, 150,20} }, +{ {0,0,1,2,2,3,4,2, 149,20} }, +{ {0,0,1,2,2,3,4,3, 148,20} }, +{ {0,0,1,2,2,3,4,4, 151,0} }, +{ {0,0,1,2,2,3,4,5, 170,0} }, +{ {0,0,1,2,3,0,0,0, 70,9} }, +{ {0,0,1,2,3,0,0,1, 85,20} }, +{ {0,0,1,2,3,0,0,2, 81,43} }, +{ {0,0,1,2,3,0,0,3, 76,43} }, +{ {0,0,1,2,3,0,0,4, 131,20} }, +{ {0,0,1,2,3,0,1,0, 73,9} }, +{ {0,0,1,2,3,0,1,1, 88,25} }, +{ {0,0,1,2,3,0,1,2, 84,43} }, +{ {0,0,1,2,3,0,1,3, 79,43} }, +{ {0,0,1,2,3,0,1,4, 134,20} }, +{ {0,0,1,2,3,0,2,0, 71,9} }, +{ {0,0,1,2,3,0,2,1, 87,20} }, +{ {0,0,1,2,3,0,2,2, 83,39} }, +{ {0,0,1,2,3,0,2,3, 78,43} }, +{ {0,0,1,2,3,0,2,4, 133,20} }, +{ {0,0,1,2,3,0,3,0, 72,9} }, +{ {0,0,1,2,3,0,3,1, 86,20} }, +{ {0,0,1,2,3,0,3,2, 82,43} }, +{ {0,0,1,2,3,0,3,3, 77,43} }, +{ {0,0,1,2,3,0,3,4, 132,20} }, +{ {0,0,1,2,3,0,4,0, 127,43} }, +{ {0,0,1,2,3,0,4,1, 130,20} }, +{ {0,0,1,2,3,0,4,2, 129,43} }, +{ {0,0,1,2,3,0,4,3, 128,43} }, +{ {0,0,1,2,3,0,4,4, 134,43} }, +{ {0,0,1,2,3,0,4,5, 167,20} }, +{ {0,0,1,2,3,1,0,0, 110,1} }, +{ {0,0,1,2,3,1,0,1, 112,37} }, +{ {0,0,1,2,3,1,0,2, 108,23} }, +{ {0,0,1,2,3,1,0,3, 111,21} }, +{ {0,0,1,2,3,1,0,4, 147,21} }, +{ {0,0,1,2,3,1,1,0, 112,1} }, +{ {0,0,1,2,3,1,1,1, 73,25} }, +{ {0,0,1,2,3,1,1,2, 93,39} }, +{ {0,0,1,2,3,1,1,3, 103,27} }, +{ {0,0,1,2,3,1,1,4, 149,21} }, +{ {0,0,1,2,3,1,2,0, 111,1} }, +{ {0,0,1,2,3,1,2,1, 103,37} }, +{ {0,0,1,2,3,1,2,2, 69,39} }, +{ {0,0,1,2,3,1,2,3, 114,1} }, +{ {0,0,1,2,3,1,2,4, 150,21} }, +{ {0,0,1,2,3,1,3,0, 108,47} }, +{ {0,0,1,2,3,1,3,1, 93,29} }, +{ {0,0,1,2,3,1,3,2, 113,1} }, +{ {0,0,1,2,3,1,3,3, 69,29} }, +{ {0,0,1,2,3,1,3,4, 148,21} }, +{ {0,0,1,2,3,1,4,0, 147,1} }, +{ {0,0,1,2,3,1,4,1, 149,1} }, +{ {0,0,1,2,3,1,4,2, 148,1} }, +{ {0,0,1,2,3,1,4,3, 150,1} }, +{ {0,0,1,2,3,1,4,4, 151,1} }, +{ {0,0,1,2,3,1,4,5, 170,1} }, +{ {0,0,1,2,3,2,0,0, 101,1} }, +{ {0,0,1,2,3,2,0,1, 104,1} }, +{ {0,0,1,2,3,2,0,2, 68,22} }, +{ {0,0,1,2,3,2,0,3, 104,20} }, +{ {0,0,1,2,3,2,0,4, 142,1} }, +{ {0,0,1,2,3,2,1,0, 103,1} }, +{ {0,0,1,2,3,2,1,1, 79,25} }, +{ {0,0,1,2,3,2,1,2, 82,22} }, +{ {0,0,1,2,3,2,1,3, 106,20} }, +{ {0,0,1,2,3,2,1,4, 144,1} }, +{ {0,0,1,2,3,2,2,0, 102,1} }, +{ {0,0,1,2,3,2,2,1, 105,1} }, +{ {0,0,1,2,3,2,2,2, 63,22} }, +{ {0,0,1,2,3,2,2,3, 105,20} }, +{ {0,0,1,2,3,2,2,4, 143,1} }, +{ {0,0,1,2,3,2,3,0, 103,20} }, +{ {0,0,1,2,3,2,3,1, 106,1} }, +{ {0,0,1,2,3,2,3,2, 82,37} }, +{ {0,0,1,2,3,2,3,3, 79,4} }, +{ {0,0,1,2,3,2,3,4, 144,20} }, +{ {0,0,1,2,3,2,4,0, 140,1} }, +{ {0,0,1,2,3,2,4,1, 141,1} }, +{ {0,0,1,2,3,2,4,2, 132,22} }, +{ {0,0,1,2,3,2,4,3, 141,20} }, +{ {0,0,1,2,3,2,4,4, 145,1} }, +{ {0,0,1,2,3,2,4,5, 169,1} }, +{ {0,0,1,2,3,3,0,0, 89,2} }, +{ {0,0,1,2,3,3,0,1, 91,2} }, +{ {0,0,1,2,3,3,0,2, 93,2} }, +{ {0,0,1,2,3,3,0,3, 65,10} }, +{ {0,0,1,2,3,3,0,4, 135,2} }, +{ {0,0,1,2,3,3,1,0, 93,3} }, +{ {0,0,1,2,3,3,1,1, 84,25} }, +{ {0,0,1,2,3,3,1,2, 96,45} }, +{ {0,0,1,2,3,3,1,3, 82,10} }, +{ {0,0,1,2,3,3,1,4, 137,21} }, +{ {0,0,1,2,3,3,2,0, 91,3} }, +{ {0,0,1,2,3,3,2,1, 97,21} }, +{ {0,0,1,2,3,3,2,2, 84,24} }, +{ {0,0,1,2,3,3,2,3, 75,31} }, +{ {0,0,1,2,3,3,2,4, 138,21} }, +{ {0,0,1,2,3,3,3,0, 65,11} }, +{ {0,0,1,2,3,3,3,1, 75,28} }, +{ {0,0,1,2,3,3,3,2, 82,11} }, +{ {0,0,1,2,3,3,3,3, 59,11} }, +{ {0,0,1,2,3,3,3,4, 129,11} }, +{ {0,0,1,2,3,3,4,0, 135,3} }, +{ {0,0,1,2,3,3,4,1, 138,20} }, +{ {0,0,1,2,3,3,4,2, 137,20} }, +{ {0,0,1,2,3,3,4,3, 129,10} }, +{ {0,0,1,2,3,3,4,4, 136,2} }, +{ {0,0,1,2,3,3,4,5, 168,21} }, +{ {0,0,1,2,3,4,0,0, 152,0} }, +{ {0,0,1,2,3,4,0,1, 153,0} }, +{ {0,0,1,2,3,4,0,2, 149,38} }, +{ {0,0,1,2,3,4,0,3, 153,21} }, +{ {0,0,1,2,3,4,0,4, 149,31} }, +{ {0,0,1,2,3,4,0,5, 171,0} }, +{ {0,0,1,2,3,4,1,0, 149,45} }, +{ {0,0,1,2,3,4,1,1, 134,44} }, +{ {0,0,1,2,3,4,1,2, 137,45} }, +{ {0,0,1,2,3,4,1,3, 144,27} }, +{ {0,0,1,2,3,4,1,4, 154,0} }, +{ {0,0,1,2,3,4,1,5, 172,0} }, +{ {0,0,1,2,3,4,2,0, 153,1} }, +{ {0,0,1,2,3,4,2,1, 155,0} }, +{ {0,0,1,2,3,4,2,2, 134,39} }, +{ {0,0,1,2,3,4,2,3, 156,0} }, +{ {0,0,1,2,3,4,2,4, 144,37} }, +{ {0,0,1,2,3,4,2,5, 173,0} }, +{ {0,0,1,2,3,4,3,0, 149,28} }, +{ {0,0,1,2,3,4,3,1, 144,46} }, +{ {0,0,1,2,3,4,3,2, 154,1} }, +{ {0,0,1,2,3,4,3,3, 134,29} }, +{ {0,0,1,2,3,4,3,4, 137,28} }, +{ {0,0,1,2,3,4,3,5, 172,21} }, +{ {0,0,1,2,3,4,4,0, 153,20} }, +{ {0,0,1,2,3,4,4,1, 156,1} }, +{ {0,0,1,2,3,4,4,2, 144,22} }, +{ {0,0,1,2,3,4,4,3, 155,21} }, +{ {0,0,1,2,3,4,4,4, 134,30} }, +{ {0,0,1,2,3,4,4,5, 173,21} }, +{ {0,0,1,2,3,4,5,0, 171,1} }, +{ {0,0,1,2,3,4,5,1, 173,1} }, +{ {0,0,1,2,3,4,5,2, 172,1} }, +{ {0,0,1,2,3,4,5,3, 173,20} }, +{ {0,0,1,2,3,4,5,4, 172,20} }, +{ {0,0,1,2,3,4,5,5, 174,0} }, +{ {0,0,1,2,3,4,5,6, 182,0} }, +{ {0,1,0,0,0,0,0,0, 1,4} }, +{ {0,1,0,0,0,0,0,1, 4,12} }, +{ {0,1,0,0,0,0,0,2, 7,12} }, +{ {0,1,0,0,0,0,1,0, 19,7} }, +{ {0,1,0,0,0,0,1,1, 20,13} }, +{ {0,1,0,0,0,0,1,2, 21,13} }, +{ {0,1,0,0,0,0,2,0, 33,2} }, +{ {0,1,0,0,0,0,2,1, 35,13} }, +{ {0,1,0,0,0,0,2,2, 34,13} }, +{ {0,1,0,0,0,0,2,3, 70,13} }, +{ {0,1,0,0,0,1,0,0, 2,27} }, +{ {0,1,0,0,0,1,0,1, 5,26} }, +{ {0,1,0,0,0,1,0,2, 8,41} }, +{ {0,1,0,0,0,1,1,0, 20,18} }, +{ {0,1,0,0,0,1,1,1, 22,18} }, +{ {0,1,0,0,0,1,1,2, 23,40} }, +{ {0,1,0,0,0,1,2,0, 34,18} }, +{ {0,1,0,0,0,1,2,1, 28,9} }, +{ {0,1,0,0,0,1,2,2, 37,18} }, +{ {0,1,0,0,0,1,2,3, 72,40} }, +{ {0,1,0,0,0,2,0,0, 3,26} }, +{ {0,1,0,0,0,2,0,1, 6,26} }, +{ {0,1,0,0,0,2,0,2, 8,26} }, +{ {0,1,0,0,0,2,0,3, 58,41} }, +{ {0,1,0,0,0,2,1,0, 21,18} }, +{ {0,1,0,0,0,2,1,1, 23,18} }, +{ {0,1,0,0,0,2,1,2, 24,18} }, +{ {0,1,0,0,0,2,1,3, 64,40} }, +{ {0,1,0,0,0,2,2,0, 35,18} }, +{ {0,1,0,0,0,2,2,1, 36,18} }, +{ {0,1,0,0,0,2,2,2, 28,5} }, +{ {0,1,0,0,0,2,2,3, 71,40} }, +{ {0,1,0,0,0,2,3,0, 70,18} }, +{ {0,1,0,0,0,2,3,1, 71,18} }, +{ {0,1,0,0,0,2,3,2, 73,18} }, +{ {0,1,0,0,0,2,3,3, 72,18} }, +{ {0,1,0,0,0,2,3,4, 127,40} }, +{ {0,1,0,0,1,0,0,0, 4,6} }, +{ {0,1,0,0,1,0,0,1, 13,6} }, +{ {0,1,0,0,1,0,0,2, 16,18} }, +{ {0,1,0,0,1,0,1,0, 20,7} }, +{ {0,1,0,0,1,0,1,1, 25,18} }, +{ {0,1,0,0,1,0,1,2, 27,18} }, +{ {0,1,0,0,1,0,2,0, 35,7} }, +{ {0,1,0,0,1,0,2,1, 38,18} }, +{ {0,1,0,0,1,0,2,2, 40,18} }, +{ {0,1,0,0,1,0,2,3, 76,18} }, +{ {0,1,0,0,1,1,0,0, 5,6} }, +{ {0,1,0,0,1,1,0,1, 14,6} }, +{ {0,1,0,0,1,1,0,2, 17,18} }, +{ {0,1,0,0,1,1,1,0, 22,7} }, +{ {0,1,0,0,1,1,1,1, 5,10} }, +{ {0,1,0,0,1,1,1,2, 28,18} }, +{ {0,1,0,0,1,1,2,0, 28,42} }, +{ {0,1,0,0,1,1,2,1, 17,9} }, +{ {0,1,0,0,1,1,2,2, 41,18} }, +{ {0,1,0,0,1,1,2,3, 77,18} }, +{ {0,1,0,0,1,2,0,0, 6,6} }, +{ {0,1,0,0,1,2,0,1, 15,6} }, +{ {0,1,0,0,1,2,0,2, 18,18} }, +{ {0,1,0,0,1,2,0,3, 61,18} }, +{ {0,1,0,0,1,2,1,0, 23,17} }, +{ {0,1,0,0,1,2,1,1, 26,18} }, +{ {0,1,0,0,1,2,1,2, 29,18} }, +{ {0,1,0,0,1,2,1,3, 65,18} }, +{ {0,1,0,0,1,2,2,0, 36,17} }, +{ {0,1,0,0,1,2,2,1, 39,18} }, +{ {0,1,0,0,1,2,2,2, 42,18} }, +{ {0,1,0,0,1,2,2,3, 78,18} }, +{ {0,1,0,0,1,2,3,0, 71,17} }, +{ {0,1,0,0,1,2,3,1, 74,18} }, +{ {0,1,0,0,1,2,3,2, 79,18} }, +{ {0,1,0,0,1,2,3,3, 75,18} }, +{ {0,1,0,0,1,2,3,4, 128,18} }, +{ {0,1,0,0,2,0,0,0, 7,6} }, +{ {0,1,0,0,2,0,0,1, 16,6} }, +{ {0,1,0,0,2,0,0,2, 16,26} }, +{ {0,1,0,0,2,0,0,3, 62,18} }, +{ {0,1,0,0,2,0,1,0, 21,7} }, +{ {0,1,0,0,2,0,1,1, 27,17} }, +{ {0,1,0,0,2,0,1,2, 30,18} }, +{ {0,1,0,0,2,0,1,3, 67,18} }, +{ {0,1,0,0,2,0,2,0, 34,7} }, +{ {0,1,0,0,2,0,2,1, 40,17} }, +{ {0,1,0,0,2,0,2,2, 26,4} }, +{ {0,1,0,0,2,0,2,3, 81,18} }, +{ {0,1,0,0,2,0,3,0, 70,7} }, +{ {0,1,0,0,2,0,3,1, 76,17} }, +{ {0,1,0,0,2,0,3,2, 85,18} }, +{ {0,1,0,0,2,0,3,3, 81,17} }, +{ {0,1,0,0,2,0,3,4, 131,18} }, +{ {0,1,0,0,2,1,0,0, 8,6} }, +{ {0,1,0,0,2,1,0,1, 17,6} }, +{ {0,1,0,0,2,1,0,2, 18,26} }, +{ {0,1,0,0,2,1,0,3, 63,18} }, +{ {0,1,0,0,2,1,1,0, 23,7} }, +{ {0,1,0,0,2,1,1,1, 28,17} }, +{ {0,1,0,0,2,1,1,2, 31,18} }, +{ {0,1,0,0,2,1,1,3, 68,18} }, +{ {0,1,0,0,2,1,2,0, 37,17} }, +{ {0,1,0,0,2,1,2,1, 41,17} }, +{ {0,1,0,0,2,1,2,2, 43,18} }, +{ {0,1,0,0,2,1,2,3, 82,18} }, +{ {0,1,0,0,2,1,3,0, 72,7} }, +{ {0,1,0,0,2,1,3,1, 77,9} }, +{ {0,1,0,0,2,1,3,2, 86,18} }, +{ {0,1,0,0,2,1,3,3, 82,17} }, +{ {0,1,0,0,2,1,3,4, 132,18} }, +{ {0,1,0,0,2,2,0,0, 8,45} }, +{ {0,1,0,0,2,2,0,1, 18,6} }, +{ {0,1,0,0,2,2,0,2, 17,26} }, +{ {0,1,0,0,2,2,0,3, 63,41} }, +{ {0,1,0,0,2,2,1,0, 24,7} }, +{ {0,1,0,0,2,2,1,1, 29,17} }, +{ {0,1,0,0,2,2,1,2, 32,18} }, +{ {0,1,0,0,2,2,1,3, 69,18} }, +{ {0,1,0,0,2,2,2,0, 28,28} }, +{ {0,1,0,0,2,2,2,1, 42,17} }, +{ {0,1,0,0,2,2,2,2, 10,4} }, +{ {0,1,0,0,2,2,2,3, 83,18} }, +{ {0,1,0,0,2,2,3,0, 73,17} }, +{ {0,1,0,0,2,2,3,1, 79,17} }, +{ {0,1,0,0,2,2,3,2, 88,18} }, +{ {0,1,0,0,2,2,3,3, 84,17} }, +{ {0,1,0,0,2,2,3,4, 134,18} }, +{ {0,1,0,0,2,3,0,0, 58,6} }, +{ {0,1,0,0,2,3,0,1, 61,6} }, +{ {0,1,0,0,2,3,0,2, 61,26} }, +{ {0,1,0,0,2,3,0,3, 63,6} }, +{ {0,1,0,0,2,3,0,4, 125,18} }, +{ {0,1,0,0,2,3,1,0, 64,17} }, +{ {0,1,0,0,2,3,1,1, 65,17} }, +{ {0,1,0,0,2,3,1,2, 66,18} }, +{ {0,1,0,0,2,3,1,3, 69,17} }, +{ {0,1,0,0,2,3,1,4, 126,18} }, +{ {0,1,0,0,2,3,2,0, 72,17} }, +{ {0,1,0,0,2,3,2,1, 75,17} }, +{ {0,1,0,0,2,3,2,2, 80,18} }, +{ {0,1,0,0,2,3,2,3, 84,18} }, +{ {0,1,0,0,2,3,2,4, 129,18} }, +{ {0,1,0,0,2,3,3,0, 71,7} }, +{ {0,1,0,0,2,3,3,1, 78,17} }, +{ {0,1,0,0,2,3,3,2, 87,18} }, +{ {0,1,0,0,2,3,3,3, 83,17} }, +{ {0,1,0,0,2,3,3,4, 133,18} }, +{ {0,1,0,0,2,3,4,0, 127,17} }, +{ {0,1,0,0,2,3,4,1, 128,17} }, +{ {0,1,0,0,2,3,4,2, 130,18} }, +{ {0,1,0,0,2,3,4,3, 134,17} }, +{ {0,1,0,0,2,3,4,4, 129,17} }, +{ {0,1,0,0,2,3,4,5, 167,18} }, +{ {0,1,0,1,0,0,0,0, 2,28} }, +{ {0,1,0,1,0,0,0,1, 5,12} }, +{ {0,1,0,1,0,0,0,2, 8,12} }, +{ {0,1,0,1,0,0,1,0, 20,2} }, +{ {0,1,0,1,0,0,1,1, 22,13} }, +{ {0,1,0,1,0,0,1,2, 23,13} }, +{ {0,1,0,1,0,0,2,0, 34,2} }, +{ {0,1,0,1,0,0,2,1, 28,34} }, +{ {0,1,0,1,0,0,2,2, 37,33} }, +{ {0,1,0,1,0,0,2,3, 72,13} }, +{ {0,1,0,1,0,1,0,0, 5,27} }, +{ {0,1,0,1,0,1,0,1, 9,12} }, +{ {0,1,0,1,0,1,0,2, 10,13} }, +{ {0,1,0,1,0,1,1,0, 25,13} }, +{ {0,1,0,1,0,1,1,1, 5,22} }, +{ {0,1,0,1,0,1,1,2, 26,13} }, +{ {0,1,0,1,0,1,2,0, 26,8} }, +{ {0,1,0,1,0,1,2,1, 10,8} }, +{ {0,1,0,1,0,1,2,2, 43,13} }, +{ {0,1,0,1,0,1,2,3, 80,13} }, +{ {0,1,0,1,0,2,0,0, 8,27} }, +{ {0,1,0,1,0,2,0,1, 10,26} }, +{ {0,1,0,1,0,2,0,2, 11,40} }, +{ {0,1,0,1,0,2,0,3, 59,40} }, +{ {0,1,0,1,0,2,1,0, 27,40} }, +{ {0,1,0,1,0,2,1,1, 28,40} }, +{ {0,1,0,1,0,2,1,2, 29,40} }, +{ {0,1,0,1,0,2,1,3, 65,40} }, +{ {0,1,0,1,0,2,2,0, 40,13} }, +{ {0,1,0,1,0,2,2,1, 42,13} }, +{ {0,1,0,1,0,2,2,2, 41,13} }, +{ {0,1,0,1,0,2,2,3, 75,13} }, +{ {0,1,0,1,0,2,3,0, 81,40} }, +{ {0,1,0,1,0,2,3,1, 83,34} }, +{ {0,1,0,1,0,2,3,2, 84,40} }, +{ {0,1,0,1,0,2,3,3, 82,40} }, +{ {0,1,0,1,0,2,3,4, 129,40} }, +{ {0,1,0,1,1,0,0,0, 20,25} }, +{ {0,1,0,1,1,0,0,1, 25,26} }, +{ {0,1,0,1,1,0,0,2, 27,41} }, +{ {0,1,0,1,1,0,1,0, 44,18} }, +{ {0,1,0,1,1,0,1,1, 20,24} }, +{ {0,1,0,1,1,0,1,2, 45,19} }, +{ {0,1,0,1,1,0,2,0, 45,14} }, +{ {0,1,0,1,1,0,2,1, 27,34} }, +{ {0,1,0,1,1,0,2,2, 47,19} }, +{ {0,1,0,1,1,0,2,3, 90,19} }, +{ {0,1,0,1,1,1,0,0, 22,26} }, +{ {0,1,0,1,1,1,0,1, 5,9} }, +{ {0,1,0,1,1,1,0,2, 28,41} }, +{ {0,1,0,1,1,1,1,0, 20,3} }, +{ {0,1,0,1,1,1,1,1, 2,31} }, +{ {0,1,0,1,1,1,1,2, 34,3} }, +{ {0,1,0,1,1,1,2,0, 23,8} }, +{ {0,1,0,1,1,1,2,1, 8,9} }, +{ {0,1,0,1,1,1,2,2, 37,42} }, +{ {0,1,0,1,1,1,2,3, 72,8} }, +{ {0,1,0,1,1,2,0,0, 23,26} }, +{ {0,1,0,1,1,2,0,1, 26,26} }, +{ {0,1,0,1,1,2,0,2, 29,41} }, +{ {0,1,0,1,1,2,0,3, 65,41} }, +{ {0,1,0,1,1,2,1,0, 45,18} }, +{ {0,1,0,1,1,2,1,1, 34,24} }, +{ {0,1,0,1,1,2,1,2, 46,18} }, +{ {0,1,0,1,1,2,1,3, 89,19} }, +{ {0,1,0,1,1,2,2,0, 48,19} }, +{ {0,1,0,1,1,2,2,1, 40,23} }, +{ {0,1,0,1,1,2,2,2, 29,30} }, +{ {0,1,0,1,1,2,2,3, 91,19} }, +{ {0,1,0,1,1,2,3,0, 92,15} }, +{ {0,1,0,1,1,2,3,1, 81,34} }, +{ {0,1,0,1,1,2,3,2, 94,19} }, +{ {0,1,0,1,1,2,3,3, 93,19} }, +{ {0,1,0,1,1,2,3,4, 135,19} }, +{ {0,1,0,1,2,0,0,0, 34,25} }, +{ {0,1,0,1,2,0,0,1, 26,23} }, +{ {0,1,0,1,2,0,0,2, 40,26} }, +{ {0,1,0,1,2,0,0,3, 81,41} }, +{ {0,1,0,1,2,0,1,0, 45,15} }, +{ {0,1,0,1,2,0,1,1, 23,23} }, +{ {0,1,0,1,2,0,1,2, 48,18} }, +{ {0,1,0,1,2,0,1,3, 92,18} }, +{ {0,1,0,1,2,0,2,0, 46,15} }, +{ {0,1,0,1,2,0,2,1, 29,34} }, +{ {0,1,0,1,2,0,2,2, 29,29} }, +{ {0,1,0,1,2,0,2,3, 94,14} }, +{ {0,1,0,1,2,0,3,0, 89,14} }, +{ {0,1,0,1,2,0,3,1, 65,34} }, +{ {0,1,0,1,2,0,3,2, 91,14} }, +{ {0,1,0,1,2,0,3,3, 93,14} }, +{ {0,1,0,1,2,0,3,4, 135,14} }, +{ {0,1,0,1,2,1,0,0, 28,35} }, +{ {0,1,0,1,2,1,0,1, 10,23} }, +{ {0,1,0,1,2,1,0,2, 42,26} }, +{ {0,1,0,1,2,1,0,3, 83,41} }, +{ {0,1,0,1,2,1,1,0, 27,35} }, +{ {0,1,0,1,2,1,1,1, 8,22} }, +{ {0,1,0,1,2,1,1,2, 40,8} }, +{ {0,1,0,1,2,1,1,3, 81,35} }, +{ {0,1,0,1,2,1,2,0, 29,35} }, +{ {0,1,0,1,2,1,2,1, 11,35} }, +{ {0,1,0,1,2,1,2,2, 41,8} }, +{ {0,1,0,1,2,1,2,3, 84,35} }, +{ {0,1,0,1,2,1,3,0, 65,35} }, +{ {0,1,0,1,2,1,3,1, 59,35} }, +{ {0,1,0,1,2,1,3,2, 75,8} }, +{ {0,1,0,1,2,1,3,3, 82,35} }, +{ {0,1,0,1,2,1,3,4, 129,35} }, +{ {0,1,0,1,2,2,0,0, 37,44} }, +{ {0,1,0,1,2,2,0,1, 43,26} }, +{ {0,1,0,1,2,2,0,2, 41,26} }, +{ {0,1,0,1,2,2,0,3, 82,41} }, +{ {0,1,0,1,2,2,1,0, 47,18} }, +{ {0,1,0,1,2,2,1,1, 37,39} }, +{ {0,1,0,1,2,2,1,2, 29,31} }, +{ {0,1,0,1,2,2,1,3, 93,18} }, +{ {0,1,0,1,2,2,2,0, 29,28} }, +{ {0,1,0,1,2,2,2,1, 41,23} }, +{ {0,1,0,1,2,2,2,2, 11,28} }, +{ {0,1,0,1,2,2,2,3, 84,28} }, +{ {0,1,0,1,2,2,3,0, 93,15} }, +{ {0,1,0,1,2,2,3,1, 82,34} }, +{ {0,1,0,1,2,2,3,2, 84,31} }, +{ {0,1,0,1,2,2,3,3, 96,19} }, +{ {0,1,0,1,2,2,3,4, 137,19} }, +{ {0,1,0,1,2,3,0,0, 72,26} }, +{ {0,1,0,1,2,3,0,1, 80,26} }, +{ {0,1,0,1,2,3,0,2, 75,26} }, +{ {0,1,0,1,2,3,0,3, 84,41} }, +{ {0,1,0,1,2,3,0,4, 129,41} }, +{ {0,1,0,1,2,3,1,0, 90,18} }, +{ {0,1,0,1,2,3,1,1, 72,23} }, +{ {0,1,0,1,2,3,1,2, 91,18} }, +{ {0,1,0,1,2,3,1,3, 94,18} }, +{ {0,1,0,1,2,3,1,4, 135,18} }, +{ {0,1,0,1,2,3,2,0, 94,15} }, +{ {0,1,0,1,2,3,2,1, 84,34} }, +{ {0,1,0,1,2,3,2,2, 84,29} }, +{ {0,1,0,1,2,3,2,3, 95,18} }, +{ {0,1,0,1,2,3,2,4, 136,19} }, +{ {0,1,0,1,2,3,3,0, 91,15} }, +{ {0,1,0,1,2,3,3,1, 75,23} }, +{ {0,1,0,1,2,3,3,2, 97,19} }, +{ {0,1,0,1,2,3,3,3, 84,30} }, +{ {0,1,0,1,2,3,3,4, 138,19} }, +{ {0,1,0,1,2,3,4,0, 135,15} }, +{ {0,1,0,1,2,3,4,1, 129,34} }, +{ {0,1,0,1,2,3,4,2, 138,14} }, +{ {0,1,0,1,2,3,4,3, 136,14} }, +{ {0,1,0,1,2,3,4,4, 137,18} }, +{ {0,1,0,1,2,3,4,5, 168,19} }, +{ {0,1,0,2,0,0,0,0, 3,28} }, +{ {0,1,0,2,0,0,0,1, 6,12} }, +{ {0,1,0,2,0,0,0,2, 8,47} }, +{ {0,1,0,2,0,0,0,3, 58,12} }, +{ {0,1,0,2,0,0,1,0, 21,2} }, +{ {0,1,0,2,0,0,1,1, 23,33} }, +{ {0,1,0,2,0,0,1,2, 24,13} }, +{ {0,1,0,2,0,0,1,3, 64,13} }, +{ {0,1,0,2,0,0,2,0, 35,2} }, +{ {0,1,0,2,0,0,2,1, 36,33} }, +{ {0,1,0,2,0,0,2,2, 28,24} }, +{ {0,1,0,2,0,0,2,3, 71,13} }, +{ {0,1,0,2,0,0,3,0, 70,2} }, +{ {0,1,0,2,0,0,3,1, 71,33} }, +{ {0,1,0,2,0,0,3,2, 73,33} }, +{ {0,1,0,2,0,0,3,3, 72,33} }, +{ {0,1,0,2,0,0,3,4, 127,13} }, +{ {0,1,0,2,0,1,0,0, 8,46} }, +{ {0,1,0,2,0,1,0,1, 10,12} }, +{ {0,1,0,2,0,1,0,2, 11,12} }, +{ {0,1,0,2,0,1,0,3, 59,13} }, +{ {0,1,0,2,0,1,1,0, 27,13} }, +{ {0,1,0,2,0,1,1,1, 28,13} }, +{ {0,1,0,2,0,1,1,2, 29,13} }, +{ {0,1,0,2,0,1,1,3, 65,13} }, +{ {0,1,0,2,0,1,2,0, 40,40} }, +{ {0,1,0,2,0,1,2,1, 42,40} }, +{ {0,1,0,2,0,1,2,2, 41,40} }, +{ {0,1,0,2,0,1,2,3, 75,40} }, +{ {0,1,0,2,0,1,3,0, 81,13} }, +{ {0,1,0,2,0,1,3,1, 83,9} }, +{ {0,1,0,2,0,1,3,2, 84,13} }, +{ {0,1,0,2,0,1,3,3, 82,13} }, +{ {0,1,0,2,0,1,3,4, 129,13} }, +{ {0,1,0,2,0,2,0,0, 6,27} }, +{ {0,1,0,2,0,2,0,1, 12,13} }, +{ {0,1,0,2,0,2,0,2, 10,27} }, +{ {0,1,0,2,0,2,0,3, 60,13} }, +{ {0,1,0,2,0,2,1,0, 30,13} }, +{ {0,1,0,2,0,2,1,1, 31,13} }, +{ {0,1,0,2,0,2,1,2, 32,13} }, +{ {0,1,0,2,0,2,1,3, 66,13} }, +{ {0,1,0,2,0,2,2,0, 38,13} }, +{ {0,1,0,2,0,2,2,1, 39,13} }, +{ {0,1,0,2,0,2,2,2, 17,5} }, +{ {0,1,0,2,0,2,2,3, 74,13} }, +{ {0,1,0,2,0,2,3,0, 85,13} }, +{ {0,1,0,2,0,2,3,1, 87,13} }, +{ {0,1,0,2,0,2,3,2, 88,22} }, +{ {0,1,0,2,0,2,3,3, 86,13} }, +{ {0,1,0,2,0,2,3,4, 130,13} }, +{ {0,1,0,2,0,3,0,0, 58,27} }, +{ {0,1,0,2,0,3,0,1, 60,26} }, +{ {0,1,0,2,0,3,0,2, 59,26} }, +{ {0,1,0,2,0,3,0,3, 59,47} }, +{ {0,1,0,2,0,3,0,4, 124,40} }, +{ {0,1,0,2,0,3,1,0, 67,40} }, +{ {0,1,0,2,0,3,1,1, 68,40} }, +{ {0,1,0,2,0,3,1,2, 69,40} }, +{ {0,1,0,2,0,3,1,3, 69,13} }, +{ {0,1,0,2,0,3,1,4, 126,40} }, +{ {0,1,0,2,0,3,2,0, 76,40} }, +{ {0,1,0,2,0,3,2,1, 78,40} }, +{ {0,1,0,2,0,3,2,2, 77,40} }, +{ {0,1,0,2,0,3,2,3, 79,40} }, +{ {0,1,0,2,0,3,2,4, 128,40} }, +{ {0,1,0,2,0,3,3,0, 76,13} }, +{ {0,1,0,2,0,3,3,1, 78,13} }, +{ {0,1,0,2,0,3,3,2, 79,13} }, +{ {0,1,0,2,0,3,3,3, 77,13} }, +{ {0,1,0,2,0,3,3,4, 128,13} }, +{ {0,1,0,2,0,3,4,0, 131,40} }, +{ {0,1,0,2,0,3,4,1, 133,40} }, +{ {0,1,0,2,0,3,4,2, 134,40} }, +{ {0,1,0,2,0,3,4,3, 134,13} }, +{ {0,1,0,2,0,3,4,4, 132,40} }, +{ {0,1,0,2,0,3,4,5, 167,40} }, +{ {0,1,0,2,1,0,0,0, 35,25} }, +{ {0,1,0,2,1,0,0,1, 38,26} }, +{ {0,1,0,2,1,0,0,2, 40,41} }, +{ {0,1,0,2,1,0,0,3, 76,41} }, +{ {0,1,0,2,1,0,1,0, 45,28} }, +{ {0,1,0,2,1,0,1,1, 27,29} }, +{ {0,1,0,2,1,0,1,2, 47,40} }, +{ {0,1,0,2,1,0,1,3, 90,40} }, +{ {0,1,0,2,1,0,2,0, 49,19} }, +{ {0,1,0,2,1,0,2,1, 50,19} }, +{ {0,1,0,2,1,0,2,2, 31,24} }, +{ {0,1,0,2,1,0,2,3, 98,19} }, +{ {0,1,0,2,1,0,3,0, 101,19} }, +{ {0,1,0,2,1,0,3,1, 102,19} }, +{ {0,1,0,2,1,0,3,2, 103,19} }, +{ {0,1,0,2,1,0,3,3, 103,40} }, +{ {0,1,0,2,1,0,3,4, 140,19} }, +{ {0,1,0,2,1,1,0,0, 28,3} }, +{ {0,1,0,2,1,1,0,1, 17,3} }, +{ {0,1,0,2,1,1,0,2, 41,41} }, +{ {0,1,0,2,1,1,0,3, 77,41} }, +{ {0,1,0,2,1,1,1,0, 23,11} }, +{ {0,1,0,2,1,1,1,1, 8,10} }, +{ {0,1,0,2,1,1,1,2, 37,3} }, +{ {0,1,0,2,1,1,1,3, 72,11} }, +{ {0,1,0,2,1,1,2,0, 31,3} }, +{ {0,1,0,2,1,1,2,1, 18,31} }, +{ {0,1,0,2,1,1,2,2, 43,3} }, +{ {0,1,0,2,1,1,2,3, 86,3} }, +{ {0,1,0,2,1,1,3,0, 68,42} }, +{ {0,1,0,2,1,1,3,1, 63,42} }, +{ {0,1,0,2,1,1,3,2, 82,42} }, +{ {0,1,0,2,1,1,3,3, 82,3} }, +{ {0,1,0,2,1,1,3,4, 132,42} }, +{ {0,1,0,2,1,2,0,0, 36,26} }, +{ {0,1,0,2,1,2,0,1, 39,26} }, +{ {0,1,0,2,1,2,0,2, 42,41} }, +{ {0,1,0,2,1,2,0,3, 78,41} }, +{ {0,1,0,2,1,2,1,0, 48,40} }, +{ {0,1,0,2,1,2,1,1, 40,4} }, +{ {0,1,0,2,1,2,1,2, 29,37} }, +{ {0,1,0,2,1,2,1,3, 91,40} }, +{ {0,1,0,2,1,2,2,0, 50,18} }, +{ {0,1,0,2,1,2,2,1, 51,19} }, +{ {0,1,0,2,1,2,2,2, 18,30} }, +{ {0,1,0,2,1,2,2,3, 99,19} }, +{ {0,1,0,2,1,2,3,0, 104,19} }, +{ {0,1,0,2,1,2,3,1, 105,19} }, +{ {0,1,0,2,1,2,3,2, 79,37} }, +{ {0,1,0,2,1,2,3,3, 106,19} }, +{ {0,1,0,2,1,2,3,4, 141,19} }, +{ {0,1,0,2,1,3,0,0, 71,26} }, +{ {0,1,0,2,1,3,0,1, 74,26} }, +{ {0,1,0,2,1,3,0,2, 75,41} }, +{ {0,1,0,2,1,3,0,3, 79,41} }, +{ {0,1,0,2,1,3,0,4, 128,41} }, +{ {0,1,0,2,1,3,1,0, 92,40} }, +{ {0,1,0,2,1,3,1,1, 81,29} }, +{ {0,1,0,2,1,3,1,2, 93,40} }, +{ {0,1,0,2,1,3,1,3, 94,40} }, +{ {0,1,0,2,1,3,1,4, 135,40} }, +{ {0,1,0,2,1,3,2,0, 98,18} }, +{ {0,1,0,2,1,3,2,1, 99,18} }, +{ {0,1,0,2,1,3,2,2, 86,24} }, +{ {0,1,0,2,1,3,2,3, 100,19} }, +{ {0,1,0,2,1,3,2,4, 139,19} }, +{ {0,1,0,2,1,3,3,0, 104,40} }, +{ {0,1,0,2,1,3,3,1, 105,40} }, +{ {0,1,0,2,1,3,3,2, 106,40} }, +{ {0,1,0,2,1,3,3,3, 79,30} }, +{ {0,1,0,2,1,3,3,4, 141,40} }, +{ {0,1,0,2,1,3,4,0, 142,19} }, +{ {0,1,0,2,1,3,4,1, 143,19} }, +{ {0,1,0,2,1,3,4,2, 144,19} }, +{ {0,1,0,2,1,3,4,3, 145,19} }, +{ {0,1,0,2,1,3,4,4, 144,40} }, +{ {0,1,0,2,1,3,4,5, 169,19} }, +{ {0,1,0,2,2,0,0,0, 21,25} }, +{ {0,1,0,2,2,0,0,1, 30,26} }, +{ {0,1,0,2,2,0,0,2, 27,26} }, +{ {0,1,0,2,2,0,0,3, 67,41} }, +{ {0,1,0,2,2,0,1,0, 52,19} }, +{ {0,1,0,2,2,0,1,1, 53,19} }, +{ {0,1,0,2,2,0,1,2, 53,40} }, +{ {0,1,0,2,2,0,1,3, 107,19} }, +{ {0,1,0,2,2,0,2,0, 45,29} }, +{ {0,1,0,2,2,0,2,1, 48,41} }, +{ {0,1,0,2,2,0,2,2, 23,4} }, +{ {0,1,0,2,2,0,2,3, 92,41} }, +{ {0,1,0,2,2,0,3,0, 110,19} }, +{ {0,1,0,2,2,0,3,1, 111,19} }, +{ {0,1,0,2,2,0,3,2, 112,19} }, +{ {0,1,0,2,2,0,3,3, 108,25} }, +{ {0,1,0,2,2,0,3,4, 147,19} }, +{ {0,1,0,2,2,1,0,0, 24,26} }, +{ {0,1,0,2,2,1,0,1, 32,26} }, +{ {0,1,0,2,2,1,0,2, 29,26} }, +{ {0,1,0,2,2,1,0,3, 69,41} }, +{ {0,1,0,2,2,1,1,0, 53,41} }, +{ {0,1,0,2,2,1,1,1, 24,30} }, +{ {0,1,0,2,2,1,1,2, 47,9} }, +{ {0,1,0,2,2,1,1,3, 108,19} }, +{ {0,1,0,2,2,1,2,0, 47,41} }, +{ {0,1,0,2,2,1,2,1, 29,36} }, +{ {0,1,0,2,2,1,2,2, 37,24} }, +{ {0,1,0,2,2,1,2,3, 93,41} }, +{ {0,1,0,2,2,1,3,0, 108,43} }, +{ {0,1,0,2,2,1,3,1, 69,9} }, +{ {0,1,0,2,2,1,3,2, 93,9} }, +{ {0,1,0,2,2,1,3,3, 113,19} }, +{ {0,1,0,2,2,1,3,4, 148,19} }, +{ {0,1,0,2,2,2,0,0, 23,44} }, +{ {0,1,0,2,2,2,0,1, 31,26} }, +{ {0,1,0,2,2,2,0,2, 28,26} }, +{ {0,1,0,2,2,2,0,3, 68,41} }, +{ {0,1,0,2,2,2,1,0, 53,18} }, +{ {0,1,0,2,2,2,1,1, 47,5} }, +{ {0,1,0,2,2,2,1,2, 24,31} }, +{ {0,1,0,2,2,2,1,3, 108,40} }, +{ {0,1,0,2,2,2,2,0, 27,28} }, +{ {0,1,0,2,2,2,2,1, 40,11} }, +{ {0,1,0,2,2,2,2,2, 8,5} }, +{ {0,1,0,2,2,2,2,3, 81,28} }, +{ {0,1,0,2,2,2,3,0, 112,3} }, +{ {0,1,0,2,2,2,3,1, 103,3} }, +{ {0,1,0,2,2,2,3,2, 73,37} }, +{ {0,1,0,2,2,2,3,3, 93,5} }, +{ {0,1,0,2,2,2,3,4, 149,19} }, +{ {0,1,0,2,2,3,0,0, 64,26} }, +{ {0,1,0,2,2,3,0,1, 66,26} }, +{ {0,1,0,2,2,3,0,2, 65,26} }, +{ {0,1,0,2,2,3,0,3, 69,26} }, +{ {0,1,0,2,2,3,0,4, 126,41} }, +{ {0,1,0,2,2,3,1,0, 107,41} }, +{ {0,1,0,2,2,3,1,1, 108,41} }, +{ {0,1,0,2,2,3,1,2, 108,18} }, +{ {0,1,0,2,2,3,1,3, 109,19} }, +{ {0,1,0,2,2,3,1,4, 146,19} }, +{ {0,1,0,2,2,3,2,0, 90,41} }, +{ {0,1,0,2,2,3,2,1, 91,41} }, +{ {0,1,0,2,2,3,2,2, 72,4} }, +{ {0,1,0,2,2,3,2,3, 94,41} }, +{ {0,1,0,2,2,3,2,4, 135,41} }, +{ {0,1,0,2,2,3,3,0, 111,41} }, +{ {0,1,0,2,2,3,3,1, 114,19} }, +{ {0,1,0,2,2,3,3,2, 103,39} }, +{ {0,1,0,2,2,3,3,3, 69,5} }, +{ {0,1,0,2,2,3,3,4, 150,19} }, +{ {0,1,0,2,2,3,4,0, 147,41} }, +{ {0,1,0,2,2,3,4,1, 150,41} }, +{ {0,1,0,2,2,3,4,2, 149,41} }, +{ {0,1,0,2,2,3,4,3, 151,19} }, +{ {0,1,0,2,2,3,4,4, 148,41} }, +{ {0,1,0,2,2,3,4,5, 170,19} }, +{ {0,1,0,2,3,0,0,0, 70,25} }, +{ {0,1,0,2,3,0,0,1, 85,26} }, +{ {0,1,0,2,3,0,0,2, 81,26} }, +{ {0,1,0,2,3,0,0,3, 76,26} }, +{ {0,1,0,2,3,0,0,4, 131,41} }, +{ {0,1,0,2,3,0,1,0, 110,18} }, +{ {0,1,0,2,3,0,1,1, 112,24} }, +{ {0,1,0,2,3,0,1,2, 108,38} }, +{ {0,1,0,2,3,0,1,3, 111,40} }, +{ {0,1,0,2,3,0,1,4, 147,40} }, +{ {0,1,0,2,3,0,2,0, 101,18} }, +{ {0,1,0,2,3,0,2,1, 104,18} }, +{ {0,1,0,2,3,0,2,2, 68,39} }, +{ {0,1,0,2,3,0,2,3, 104,41} }, +{ {0,1,0,2,3,0,2,4, 142,18} }, +{ {0,1,0,2,3,0,3,0, 89,28} }, +{ {0,1,0,2,3,0,3,1, 91,47} }, +{ {0,1,0,2,3,0,3,2, 93,47} }, +{ {0,1,0,2,3,0,3,3, 65,29} }, +{ {0,1,0,2,3,0,3,4, 135,47} }, +{ {0,1,0,2,3,0,4,0, 152,19} }, +{ {0,1,0,2,3,0,4,1, 153,19} }, +{ {0,1,0,2,3,0,4,2, 149,23} }, +{ {0,1,0,2,3,0,4,3, 153,40} }, +{ {0,1,0,2,3,0,4,4, 149,4} }, +{ {0,1,0,2,3,0,4,5, 171,19} }, +{ {0,1,0,2,3,1,0,0, 73,44} }, +{ {0,1,0,2,3,1,0,1, 88,9} }, +{ {0,1,0,2,3,1,0,2, 84,26} }, +{ {0,1,0,2,3,1,0,3, 79,26} }, +{ {0,1,0,2,3,1,0,4, 134,41} }, +{ {0,1,0,2,3,1,1,0, 112,18} }, +{ {0,1,0,2,3,1,1,1, 73,36} }, +{ {0,1,0,2,3,1,1,2, 93,22} }, +{ {0,1,0,2,3,1,1,3, 103,42} }, +{ {0,1,0,2,3,1,1,4, 149,40} }, +{ {0,1,0,2,3,1,2,0, 103,18} }, +{ {0,1,0,2,3,1,2,1, 79,36} }, +{ {0,1,0,2,3,1,2,2, 82,39} }, +{ {0,1,0,2,3,1,2,3, 106,41} }, +{ {0,1,0,2,3,1,2,4, 144,18} }, +{ {0,1,0,2,3,1,3,0, 93,46} }, +{ {0,1,0,2,3,1,3,1, 84,36} }, +{ {0,1,0,2,3,1,3,2, 96,8} }, +{ {0,1,0,2,3,1,3,3, 82,29} }, +{ {0,1,0,2,3,1,3,4, 137,40} }, +{ {0,1,0,2,3,1,4,0, 149,8} }, +{ {0,1,0,2,3,1,4,1, 134,9} }, +{ {0,1,0,2,3,1,4,2, 137,8} }, +{ {0,1,0,2,3,1,4,3, 144,42} }, +{ {0,1,0,2,3,1,4,4, 154,19} }, +{ {0,1,0,2,3,1,4,5, 172,19} }, +{ {0,1,0,2,3,2,0,0, 71,44} }, +{ {0,1,0,2,3,2,0,1, 87,26} }, +{ {0,1,0,2,3,2,0,2, 83,22} }, +{ {0,1,0,2,3,2,0,3, 78,26} }, +{ {0,1,0,2,3,2,0,4, 133,41} }, +{ {0,1,0,2,3,2,1,0, 111,18} }, +{ {0,1,0,2,3,2,1,1, 103,24} }, +{ {0,1,0,2,3,2,1,2, 69,22} }, +{ {0,1,0,2,3,2,1,3, 114,18} }, +{ {0,1,0,2,3,2,1,4, 150,40} }, +{ {0,1,0,2,3,2,2,0, 102,18} }, +{ {0,1,0,2,3,2,2,1, 105,18} }, +{ {0,1,0,2,3,2,2,2, 63,39} }, +{ {0,1,0,2,3,2,2,3, 105,41} }, +{ {0,1,0,2,3,2,2,4, 143,18} }, +{ {0,1,0,2,3,2,3,0, 91,46} }, +{ {0,1,0,2,3,2,3,1, 97,40} }, +{ {0,1,0,2,3,2,3,2, 84,37} }, +{ {0,1,0,2,3,2,3,3, 75,4} }, +{ {0,1,0,2,3,2,3,4, 138,40} }, +{ {0,1,0,2,3,2,4,0, 153,18} }, +{ {0,1,0,2,3,2,4,1, 155,19} }, +{ {0,1,0,2,3,2,4,2, 134,22} }, +{ {0,1,0,2,3,2,4,3, 156,19} }, +{ {0,1,0,2,3,2,4,4, 144,24} }, +{ {0,1,0,2,3,2,4,5, 173,19} }, +{ {0,1,0,2,3,3,0,0, 72,44} }, +{ {0,1,0,2,3,3,0,1, 86,26} }, +{ {0,1,0,2,3,3,0,2, 82,26} }, +{ {0,1,0,2,3,3,0,3, 77,26} }, +{ {0,1,0,2,3,3,0,4, 132,41} }, +{ {0,1,0,2,3,3,1,0, 108,2} }, +{ {0,1,0,2,3,3,1,1, 93,10} }, +{ {0,1,0,2,3,3,1,2, 113,18} }, +{ {0,1,0,2,3,3,1,3, 69,10} }, +{ {0,1,0,2,3,3,1,4, 148,40} }, +{ {0,1,0,2,3,3,2,0, 103,41} }, +{ {0,1,0,2,3,3,2,1, 106,18} }, +{ {0,1,0,2,3,3,2,2, 82,24} }, +{ {0,1,0,2,3,3,2,3, 79,31} }, +{ {0,1,0,2,3,3,2,4, 144,41} }, +{ {0,1,0,2,3,3,3,0, 65,28} }, +{ {0,1,0,2,3,3,3,1, 75,11} }, +{ {0,1,0,2,3,3,3,2, 82,28} }, +{ {0,1,0,2,3,3,3,3, 59,28} }, +{ {0,1,0,2,3,3,3,4, 129,28} }, +{ {0,1,0,2,3,3,4,0, 149,11} }, +{ {0,1,0,2,3,3,4,1, 144,3} }, +{ {0,1,0,2,3,3,4,2, 154,18} }, +{ {0,1,0,2,3,3,4,3, 134,10} }, +{ {0,1,0,2,3,3,4,4, 137,11} }, +{ {0,1,0,2,3,3,4,5, 172,40} }, +{ {0,1,0,2,3,4,0,0, 127,26} }, +{ {0,1,0,2,3,4,0,1, 130,26} }, +{ {0,1,0,2,3,4,0,2, 129,26} }, +{ {0,1,0,2,3,4,0,3, 128,26} }, +{ {0,1,0,2,3,4,0,4, 134,26} }, +{ {0,1,0,2,3,4,0,5, 167,41} }, +{ {0,1,0,2,3,4,1,0, 147,18} }, +{ {0,1,0,2,3,4,1,1, 149,18} }, +{ {0,1,0,2,3,4,1,2, 148,18} }, +{ {0,1,0,2,3,4,1,3, 150,18} }, +{ {0,1,0,2,3,4,1,4, 151,18} }, +{ {0,1,0,2,3,4,1,5, 170,18} }, +{ {0,1,0,2,3,4,2,0, 140,18} }, +{ {0,1,0,2,3,4,2,1, 141,18} }, +{ {0,1,0,2,3,4,2,2, 132,39} }, +{ {0,1,0,2,3,4,2,3, 141,41} }, +{ {0,1,0,2,3,4,2,4, 145,18} }, +{ {0,1,0,2,3,4,2,5, 169,18} }, +{ {0,1,0,2,3,4,3,0, 135,46} }, +{ {0,1,0,2,3,4,3,1, 138,41} }, +{ {0,1,0,2,3,4,3,2, 137,41} }, +{ {0,1,0,2,3,4,3,3, 129,29} }, +{ {0,1,0,2,3,4,3,4, 136,47} }, +{ {0,1,0,2,3,4,3,5, 168,40} }, +{ {0,1,0,2,3,4,4,0, 153,41} }, +{ {0,1,0,2,3,4,4,1, 156,18} }, +{ {0,1,0,2,3,4,4,2, 144,39} }, +{ {0,1,0,2,3,4,4,3, 155,40} }, +{ {0,1,0,2,3,4,4,4, 134,5} }, +{ {0,1,0,2,3,4,4,5, 173,40} }, +{ {0,1,0,2,3,4,5,0, 171,18} }, +{ {0,1,0,2,3,4,5,1, 173,18} }, +{ {0,1,0,2,3,4,5,2, 172,18} }, +{ {0,1,0,2,3,4,5,3, 173,41} }, +{ {0,1,0,2,3,4,5,4, 174,19} }, +{ {0,1,0,2,3,4,5,5, 172,41} }, +{ {0,1,0,2,3,4,5,6, 182,19} }, +{ {0,1,1,0,0,0,0,0, 4,5} }, +{ {0,1,1,0,0,0,0,1, 13,2} }, +{ {0,1,1,0,0,0,0,2, 16,12} }, +{ {0,1,1,0,0,0,1,0, 20,10} }, +{ {0,1,1,0,0,0,1,1, 25,2} }, +{ {0,1,1,0,0,0,1,2, 27,33} }, +{ {0,1,1,0,0,0,2,0, 35,10} }, +{ {0,1,1,0,0,0,2,1, 38,2} }, +{ {0,1,1,0,0,0,2,2, 40,33} }, +{ {0,1,1,0,0,0,2,3, 76,33} }, +{ {0,1,1,0,0,1,0,0, 20,4} }, +{ {0,1,1,0,0,1,0,1, 25,12} }, +{ {0,1,1,0,0,1,0,2, 27,12} }, +{ {0,1,1,0,0,1,1,0, 44,12} }, +{ {0,1,1,0,0,1,1,1, 20,5} }, +{ {0,1,1,0,0,1,1,2, 45,13} }, +{ {0,1,1,0,0,1,2,0, 45,8} }, +{ {0,1,1,0,0,1,2,1, 27,9} }, +{ {0,1,1,0,0,1,2,2, 47,32} }, +{ {0,1,1,0,0,1,2,3, 90,32} }, +{ {0,1,1,0,0,2,0,0, 35,4} }, +{ {0,1,1,0,0,2,0,1, 38,12} }, +{ {0,1,1,0,0,2,0,2, 40,12} }, +{ {0,1,1,0,0,2,0,3, 76,12} }, +{ {0,1,1,0,0,2,1,0, 45,26} }, +{ {0,1,1,0,0,2,1,1, 27,44} }, +{ {0,1,1,0,0,2,1,2, 47,13} }, +{ {0,1,1,0,0,2,1,3, 90,13} }, +{ {0,1,1,0,0,2,2,0, 49,13} }, +{ {0,1,1,0,0,2,2,1, 50,13} }, +{ {0,1,1,0,0,2,2,2, 31,5} }, +{ {0,1,1,0,0,2,2,3, 98,13} }, +{ {0,1,1,0,0,2,3,0, 101,23} }, +{ {0,1,1,0,0,2,3,1, 102,32} }, +{ {0,1,1,0,0,2,3,2, 103,32} }, +{ {0,1,1,0,0,2,3,3, 103,13} }, +{ {0,1,1,0,0,2,3,4, 140,32} }, +{ {0,1,1,0,1,0,0,0, 13,5} }, +{ {0,1,1,0,1,0,0,1, 54,0} }, +{ {0,1,1,0,1,0,0,2, 55,0} }, +{ {0,1,1,0,1,0,1,0, 25,22} }, +{ {0,1,1,0,1,0,1,1, 13,4} }, +{ {0,1,1,0,1,0,1,2, 38,27} }, +{ {0,1,1,0,1,0,2,0, 38,22} }, +{ {0,1,1,0,1,0,2,1, 55,1} }, +{ {0,1,1,0,1,0,2,2, 51,5} }, +{ {0,1,1,0,1,0,2,3, 115,0} }, +{ {0,1,1,0,1,1,0,0, 25,24} }, +{ {0,1,1,0,1,1,0,1, 13,3} }, +{ {0,1,1,0,1,1,0,2, 38,3} }, +{ {0,1,1,0,1,1,1,0, 20,11} }, +{ {0,1,1,0,1,1,1,1, 4,4} }, +{ {0,1,1,0,1,1,1,2, 35,11} }, +{ {0,1,1,0,1,1,2,0, 27,42} }, +{ {0,1,1,0,1,1,2,1, 16,9} }, +{ {0,1,1,0,1,1,2,2, 40,42} }, +{ {0,1,1,0,1,1,2,3, 76,42} }, +{ {0,1,1,0,1,2,0,0, 38,24} }, +{ {0,1,1,0,1,2,0,1, 55,6} }, +{ {0,1,1,0,1,2,0,2, 51,30} }, +{ {0,1,1,0,1,2,0,3, 115,19} }, +{ {0,1,1,0,1,2,1,0, 27,27} }, +{ {0,1,1,0,1,2,1,1, 16,27} }, +{ {0,1,1,0,1,2,1,2, 40,27} }, +{ {0,1,1,0,1,2,1,3, 76,27} }, +{ {0,1,1,0,1,2,2,0, 50,23} }, +{ {0,1,1,0,1,2,2,1, 56,0} }, +{ {0,1,1,0,1,2,2,2, 39,5} }, +{ {0,1,1,0,1,2,2,3, 116,0} }, +{ {0,1,1,0,1,2,3,0, 102,23} }, +{ {0,1,1,0,1,2,3,1, 117,0} }, +{ {0,1,1,0,1,2,3,2, 105,36} }, +{ {0,1,1,0,1,2,3,3, 105,25} }, +{ {0,1,1,0,1,2,3,4, 157,0} }, +{ {0,1,1,0,2,0,0,0, 16,22} }, +{ {0,1,1,0,2,0,0,1, 55,7} }, +{ {0,1,1,0,2,0,0,2, 56,1} }, +{ {0,1,1,0,2,0,0,3, 117,1} }, +{ {0,1,1,0,2,0,1,0, 27,22} }, +{ {0,1,1,0,2,0,1,1, 38,25} }, +{ {0,1,1,0,2,0,1,2, 50,26} }, +{ {0,1,1,0,2,0,1,3, 102,26} }, +{ {0,1,1,0,2,0,2,0, 40,22} }, +{ {0,1,1,0,2,0,2,1, 51,28} }, +{ {0,1,1,0,2,0,2,2, 39,4} }, +{ {0,1,1,0,2,0,2,3, 105,47} }, +{ {0,1,1,0,2,0,3,0, 76,22} }, +{ {0,1,1,0,2,0,3,1, 115,14} }, +{ {0,1,1,0,2,0,3,2, 116,1} }, +{ {0,1,1,0,2,0,3,3, 105,24} }, +{ {0,1,1,0,2,0,3,4, 157,1} }, +{ {0,1,1,0,2,1,0,0, 27,39} }, +{ {0,1,1,0,2,1,0,1, 38,9} }, +{ {0,1,1,0,2,1,0,2, 50,8} }, +{ {0,1,1,0,2,1,0,3, 102,43} }, +{ {0,1,1,0,2,1,1,0, 45,23} }, +{ {0,1,1,0,2,1,1,1, 35,5} }, +{ {0,1,1,0,2,1,1,2, 49,8} }, +{ {0,1,1,0,2,1,1,3, 101,26} }, +{ {0,1,1,0,2,1,2,0, 47,23} }, +{ {0,1,1,0,2,1,2,1, 40,9} }, +{ {0,1,1,0,2,1,2,2, 31,4} }, +{ {0,1,1,0,2,1,2,3, 103,43} }, +{ {0,1,1,0,2,1,3,0, 90,8} }, +{ {0,1,1,0,2,1,3,1, 76,9} }, +{ {0,1,1,0,2,1,3,2, 98,8} }, +{ {0,1,1,0,2,1,3,3, 103,8} }, +{ {0,1,1,0,2,1,3,4, 140,43} }, +{ {0,1,1,0,2,2,0,0, 40,39} }, +{ {0,1,1,0,2,2,0,1, 51,2} }, +{ {0,1,1,0,2,2,0,2, 39,10} }, +{ {0,1,1,0,2,2,0,3, 105,2} }, +{ {0,1,1,0,2,2,1,0, 47,38} }, +{ {0,1,1,0,2,2,1,1, 40,44} }, +{ {0,1,1,0,2,2,1,2, 31,10} }, +{ {0,1,1,0,2,2,1,3, 103,26} }, +{ {0,1,1,0,2,2,2,0, 31,11} }, +{ {0,1,1,0,2,2,2,1, 39,11} }, +{ {0,1,1,0,2,2,2,2, 12,5} }, +{ {0,1,1,0,2,2,2,3, 87,11} }, +{ {0,1,1,0,2,2,3,0, 103,23} }, +{ {0,1,1,0,2,2,3,1, 105,3} }, +{ {0,1,1,0,2,2,3,2, 87,10} }, +{ {0,1,1,0,2,2,3,3, 97,11} }, +{ {0,1,1,0,2,2,3,4, 155,2} }, +{ {0,1,1,0,2,3,0,0, 76,39} }, +{ {0,1,1,0,2,3,0,1, 115,6} }, +{ {0,1,1,0,2,3,0,2, 116,18} }, +{ {0,1,1,0,2,3,0,3, 105,37} }, +{ {0,1,1,0,2,3,0,4, 157,18} }, +{ {0,1,1,0,2,3,1,0, 90,45} }, +{ {0,1,1,0,2,3,1,1, 76,44} }, +{ {0,1,1,0,2,3,1,2, 98,26} }, +{ {0,1,1,0,2,3,1,3, 103,45} }, +{ {0,1,1,0,2,3,1,4, 140,26} }, +{ {0,1,1,0,2,3,2,0, 103,38} }, +{ {0,1,1,0,2,3,2,1, 105,46} }, +{ {0,1,1,0,2,3,2,2, 87,4} }, +{ {0,1,1,0,2,3,2,3, 97,28} }, +{ {0,1,1,0,2,3,2,4, 155,47} }, +{ {0,1,1,0,2,3,3,0, 98,23} }, +{ {0,1,1,0,2,3,3,1, 116,15} }, +{ {0,1,1,0,2,3,3,2, 118,0} }, +{ {0,1,1,0,2,3,3,3, 87,5} }, +{ {0,1,1,0,2,3,3,4, 158,0} }, +{ {0,1,1,0,2,3,4,0, 140,23} }, +{ {0,1,1,0,2,3,4,1, 157,15} }, +{ {0,1,1,0,2,3,4,2, 158,1} }, +{ {0,1,1,0,2,3,4,3, 155,36} }, +{ {0,1,1,0,2,3,4,4, 155,25} }, +{ {0,1,1,0,2,3,4,5, 175,0} }, +{ {0,1,1,1,0,0,0,0, 5,11} }, +{ {0,1,1,1,0,0,0,1, 14,2} }, +{ {0,1,1,1,0,0,0,2, 17,12} }, +{ {0,1,1,1,0,0,1,0, 22,2} }, +{ {0,1,1,1,0,0,1,1, 5,7} }, +{ {0,1,1,1,0,0,1,2, 28,33} }, +{ {0,1,1,1,0,0,2,0, 28,15} }, +{ {0,1,1,1,0,0,2,1, 17,15} }, +{ {0,1,1,1,0,0,2,2, 41,33} }, +{ {0,1,1,1,0,0,2,3, 77,33} }, +{ {0,1,1,1,0,1,0,0, 22,29} }, +{ {0,1,1,1,0,1,0,1, 5,23} }, +{ {0,1,1,1,0,1,0,2, 28,12} }, +{ {0,1,1,1,0,1,1,0, 20,15} }, +{ {0,1,1,1,0,1,1,1, 2,22} }, +{ {0,1,1,1,0,1,1,2, 34,15} }, +{ {0,1,1,1,0,1,2,0, 23,35} }, +{ {0,1,1,1,0,1,2,1, 8,34} }, +{ {0,1,1,1,0,1,2,2, 37,15} }, +{ {0,1,1,1,0,1,2,3, 72,35} }, +{ {0,1,1,1,0,2,0,0, 28,16} }, +{ {0,1,1,1,0,2,0,1, 17,7} }, +{ {0,1,1,1,0,2,0,2, 41,12} }, +{ {0,1,1,1,0,2,0,3, 77,12} }, +{ {0,1,1,1,0,2,1,0, 23,6} }, +{ {0,1,1,1,0,2,1,1, 8,7} }, +{ {0,1,1,1,0,2,1,2, 37,16} }, +{ {0,1,1,1,0,2,1,3, 72,6} }, +{ {0,1,1,1,0,2,2,0, 31,15} }, +{ {0,1,1,1,0,2,2,1, 18,23} }, +{ {0,1,1,1,0,2,2,2, 43,15} }, +{ {0,1,1,1,0,2,2,3, 86,15} }, +{ {0,1,1,1,0,2,3,0, 68,15} }, +{ {0,1,1,1,0,2,3,1, 63,15} }, +{ {0,1,1,1,0,2,3,2, 82,15} }, +{ {0,1,1,1,0,2,3,3, 82,16} }, +{ {0,1,1,1,0,2,3,4, 132,15} }, +{ {0,1,1,1,1,0,0,0, 25,5} }, +{ {0,1,1,1,1,0,0,1, 13,7} }, +{ {0,1,1,1,1,0,0,2, 38,15} }, +{ {0,1,1,1,1,0,1,0, 20,6} }, +{ {0,1,1,1,1,0,1,1, 4,7} }, +{ {0,1,1,1,1,0,1,2, 35,6} }, +{ {0,1,1,1,1,0,2,0, 27,15} }, +{ {0,1,1,1,1,0,2,1, 16,15} }, +{ {0,1,1,1,1,0,2,2, 40,15} }, +{ {0,1,1,1,1,0,2,3, 76,15} }, +{ {0,1,1,1,1,1,0,0, 20,8} }, +{ {0,1,1,1,1,1,0,1, 4,9} }, +{ {0,1,1,1,1,1,0,2, 35,8} }, +{ {0,1,1,1,1,1,1,0, 19,6} }, +{ {0,1,1,1,1,1,1,1, 1,5} }, +{ {0,1,1,1,1,1,1,2, 33,3} }, +{ {0,1,1,1,1,1,2,0, 21,8} }, +{ {0,1,1,1,1,1,2,1, 7,9} }, +{ {0,1,1,1,1,1,2,2, 34,8} }, +{ {0,1,1,1,1,1,2,3, 70,8} }, +{ {0,1,1,1,1,2,0,0, 27,16} }, +{ {0,1,1,1,1,2,0,1, 16,7} }, +{ {0,1,1,1,1,2,0,2, 40,16} }, +{ {0,1,1,1,1,2,0,3, 76,16} }, +{ {0,1,1,1,1,2,1,0, 21,6} }, +{ {0,1,1,1,1,2,1,1, 7,7} }, +{ {0,1,1,1,1,2,1,2, 34,6} }, +{ {0,1,1,1,1,2,1,3, 70,6} }, +{ {0,1,1,1,1,2,2,0, 30,15} }, +{ {0,1,1,1,1,2,2,1, 16,23} }, +{ {0,1,1,1,1,2,2,2, 26,5} }, +{ {0,1,1,1,1,2,2,3, 85,15} }, +{ {0,1,1,1,1,2,3,0, 67,15} }, +{ {0,1,1,1,1,2,3,1, 62,15} }, +{ {0,1,1,1,1,2,3,2, 81,15} }, +{ {0,1,1,1,1,2,3,3, 81,16} }, +{ {0,1,1,1,1,2,3,4, 131,15} }, +{ {0,1,1,1,2,0,0,0, 26,15} }, +{ {0,1,1,1,2,0,0,1, 15,7} }, +{ {0,1,1,1,2,0,0,2, 39,15} }, +{ {0,1,1,1,2,0,0,3, 74,15} }, +{ {0,1,1,1,2,0,1,0, 23,16} }, +{ {0,1,1,1,2,0,1,1, 6,7} }, +{ {0,1,1,1,2,0,1,2, 36,16} }, +{ {0,1,1,1,2,0,1,3, 71,16} }, +{ {0,1,1,1,2,0,2,0, 29,15} }, +{ {0,1,1,1,2,0,2,1, 18,15} }, +{ {0,1,1,1,2,0,2,2, 42,15} }, +{ {0,1,1,1,2,0,2,3, 79,15} }, +{ {0,1,1,1,2,0,3,0, 65,15} }, +{ {0,1,1,1,2,0,3,1, 61,15} }, +{ {0,1,1,1,2,0,3,2, 78,15} }, +{ {0,1,1,1,2,0,3,3, 75,15} }, +{ {0,1,1,1,2,0,3,4, 128,15} }, +{ {0,1,1,1,2,1,0,0, 23,15} }, +{ {0,1,1,1,2,1,0,1, 6,23} }, +{ {0,1,1,1,2,1,0,2, 36,15} }, +{ {0,1,1,1,2,1,0,3, 71,15} }, +{ {0,1,1,1,2,1,1,0, 21,15} }, +{ {0,1,1,1,2,1,1,1, 3,23} }, +{ {0,1,1,1,2,1,1,2, 35,15} }, +{ {0,1,1,1,2,1,1,3, 70,15} }, +{ {0,1,1,1,2,1,2,0, 24,15} }, +{ {0,1,1,1,2,1,2,1, 8,23} }, +{ {0,1,1,1,2,1,2,2, 28,4} }, +{ {0,1,1,1,2,1,2,3, 73,15} }, +{ {0,1,1,1,2,1,3,0, 64,35} }, +{ {0,1,1,1,2,1,3,1, 58,34} }, +{ {0,1,1,1,2,1,3,2, 71,35} }, +{ {0,1,1,1,2,1,3,3, 72,15} }, +{ {0,1,1,1,2,1,3,4, 127,15} }, +{ {0,1,1,1,2,2,0,0, 29,16} }, +{ {0,1,1,1,2,2,0,1, 18,7} }, +{ {0,1,1,1,2,2,0,2, 42,16} }, +{ {0,1,1,1,2,2,0,3, 79,16} }, +{ {0,1,1,1,2,2,1,0, 24,6} }, +{ {0,1,1,1,2,2,1,1, 8,38} }, +{ {0,1,1,1,2,2,1,2, 28,31} }, +{ {0,1,1,1,2,2,1,3, 73,16} }, +{ {0,1,1,1,2,2,2,0, 32,15} }, +{ {0,1,1,1,2,2,2,1, 17,23} }, +{ {0,1,1,1,2,2,2,2, 10,5} }, +{ {0,1,1,1,2,2,2,3, 88,15} }, +{ {0,1,1,1,2,2,3,0, 69,15} }, +{ {0,1,1,1,2,2,3,1, 63,34} }, +{ {0,1,1,1,2,2,3,2, 83,15} }, +{ {0,1,1,1,2,2,3,3, 84,16} }, +{ {0,1,1,1,2,2,3,4, 134,15} }, +{ {0,1,1,1,2,3,0,0, 65,16} }, +{ {0,1,1,1,2,3,0,1, 61,7} }, +{ {0,1,1,1,2,3,0,2, 78,16} }, +{ {0,1,1,1,2,3,0,3, 75,16} }, +{ {0,1,1,1,2,3,0,4, 128,16} }, +{ {0,1,1,1,2,3,1,0, 64,6} }, +{ {0,1,1,1,2,3,1,1, 58,7} }, +{ {0,1,1,1,2,3,1,2, 71,6} }, +{ {0,1,1,1,2,3,1,3, 72,16} }, +{ {0,1,1,1,2,3,1,4, 127,16} }, +{ {0,1,1,1,2,3,2,0, 69,16} }, +{ {0,1,1,1,2,3,2,1, 63,7} }, +{ {0,1,1,1,2,3,2,2, 83,16} }, +{ {0,1,1,1,2,3,2,3, 84,15} }, +{ {0,1,1,1,2,3,2,4, 134,16} }, +{ {0,1,1,1,2,3,3,0, 66,15} }, +{ {0,1,1,1,2,3,3,1, 61,23} }, +{ {0,1,1,1,2,3,3,2, 87,15} }, +{ {0,1,1,1,2,3,3,3, 80,15} }, +{ {0,1,1,1,2,3,3,4, 130,15} }, +{ {0,1,1,1,2,3,4,0, 126,15} }, +{ {0,1,1,1,2,3,4,1, 125,15} }, +{ {0,1,1,1,2,3,4,2, 133,15} }, +{ {0,1,1,1,2,3,4,3, 129,15} }, +{ {0,1,1,1,2,3,4,4, 129,16} }, +{ {0,1,1,1,2,3,4,5, 167,15} }, +{ {0,1,1,2,0,0,0,0, 6,11} }, +{ {0,1,1,2,0,0,0,1, 15,2} }, +{ {0,1,1,2,0,0,0,2, 18,12} }, +{ {0,1,1,2,0,0,0,3, 61,12} }, +{ {0,1,1,2,0,0,1,0, 23,2} }, +{ {0,1,1,2,0,0,1,1, 26,2} }, +{ {0,1,1,2,0,0,1,2, 29,33} }, +{ {0,1,1,2,0,0,1,3, 65,33} }, +{ {0,1,1,2,0,0,2,0, 36,2} }, +{ {0,1,1,2,0,0,2,1, 39,2} }, +{ {0,1,1,2,0,0,2,2, 42,33} }, +{ {0,1,1,2,0,0,2,3, 78,33} }, +{ {0,1,1,2,0,0,3,0, 71,2} }, +{ {0,1,1,2,0,0,3,1, 74,2} }, +{ {0,1,1,2,0,0,3,2, 79,33} }, +{ {0,1,1,2,0,0,3,3, 75,33} }, +{ {0,1,1,2,0,0,3,4, 128,33} }, +{ {0,1,1,2,0,1,0,0, 23,47} }, +{ {0,1,1,2,0,1,0,1, 26,12} }, +{ {0,1,1,2,0,1,0,2, 29,12} }, +{ {0,1,1,2,0,1,0,3, 65,12} }, +{ {0,1,1,2,0,1,1,0, 45,12} }, +{ {0,1,1,2,0,1,1,1, 34,5} }, +{ {0,1,1,2,0,1,1,2, 46,12} }, +{ {0,1,1,2,0,1,1,3, 89,13} }, +{ {0,1,1,2,0,1,2,0, 48,32} }, +{ {0,1,1,2,0,1,2,1, 40,36} }, +{ {0,1,1,2,0,1,2,2, 29,39} }, +{ {0,1,1,2,0,1,2,3, 91,32} }, +{ {0,1,1,2,0,1,3,0, 92,42} }, +{ {0,1,1,2,0,1,3,1, 81,9} }, +{ {0,1,1,2,0,1,3,2, 94,32} }, +{ {0,1,1,2,0,1,3,3, 93,32} }, +{ {0,1,1,2,0,1,3,4, 135,32} }, +{ {0,1,1,2,0,2,0,0, 36,47} }, +{ {0,1,1,2,0,2,0,1, 39,12} }, +{ {0,1,1,2,0,2,0,2, 42,12} }, +{ {0,1,1,2,0,2,0,3, 78,12} }, +{ {0,1,1,2,0,2,1,0, 48,13} }, +{ {0,1,1,2,0,2,1,1, 40,25} }, +{ {0,1,1,2,0,2,1,2, 29,22} }, +{ {0,1,1,2,0,2,1,3, 91,13} }, +{ {0,1,1,2,0,2,2,0, 50,12} }, +{ {0,1,1,2,0,2,2,1, 51,13} }, +{ {0,1,1,2,0,2,2,2, 18,22} }, +{ {0,1,1,2,0,2,2,3, 99,13} }, +{ {0,1,1,2,0,2,3,0, 104,32} }, +{ {0,1,1,2,0,2,3,1, 105,32} }, +{ {0,1,1,2,0,2,3,2, 79,22} }, +{ {0,1,1,2,0,2,3,3, 106,32} }, +{ {0,1,1,2,0,2,3,4, 141,32} }, +{ {0,1,1,2,0,3,0,0, 71,47} }, +{ {0,1,1,2,0,3,0,1, 74,12} }, +{ {0,1,1,2,0,3,0,2, 79,12} }, +{ {0,1,1,2,0,3,0,3, 75,12} }, +{ {0,1,1,2,0,3,0,4, 128,12} }, +{ {0,1,1,2,0,3,1,0, 92,27} }, +{ {0,1,1,2,0,3,1,1, 81,44} }, +{ {0,1,1,2,0,3,1,2, 94,13} }, +{ {0,1,1,2,0,3,1,3, 93,13} }, +{ {0,1,1,2,0,3,1,4, 135,13} }, +{ {0,1,1,2,0,3,2,0, 104,13} }, +{ {0,1,1,2,0,3,2,1, 105,13} }, +{ {0,1,1,2,0,3,2,2, 79,39} }, +{ {0,1,1,2,0,3,2,3, 106,13} }, +{ {0,1,1,2,0,3,2,4, 141,13} }, +{ {0,1,1,2,0,3,3,0, 98,12} }, +{ {0,1,1,2,0,3,3,1, 99,12} }, +{ {0,1,1,2,0,3,3,2, 100,13} }, +{ {0,1,1,2,0,3,3,3, 86,5} }, +{ {0,1,1,2,0,3,3,4, 139,13} }, +{ {0,1,1,2,0,3,4,0, 142,32} }, +{ {0,1,1,2,0,3,4,1, 143,32} }, +{ {0,1,1,2,0,3,4,2, 145,32} }, +{ {0,1,1,2,0,3,4,3, 144,32} }, +{ {0,1,1,2,0,3,4,4, 144,13} }, +{ {0,1,1,2,0,3,4,5, 169,32} }, +{ {0,1,1,2,1,0,0,0, 38,5} }, +{ {0,1,1,2,1,0,0,1, 55,2} }, +{ {0,1,1,2,1,0,0,2, 51,22} }, +{ {0,1,1,2,1,0,0,3, 115,13} }, +{ {0,1,1,2,1,0,1,0, 27,46} }, +{ {0,1,1,2,1,0,1,1, 16,29} }, +{ {0,1,1,2,1,0,1,2, 40,46} }, +{ {0,1,1,2,1,0,1,3, 76,46} }, +{ {0,1,1,2,1,0,2,0, 50,31} }, +{ {0,1,1,2,1,0,2,1, 56,3} }, +{ {0,1,1,2,1,0,2,2, 39,24} }, +{ {0,1,1,2,1,0,2,3, 116,21} }, +{ {0,1,1,2,1,0,3,0, 102,36} }, +{ {0,1,1,2,1,0,3,1, 117,21} }, +{ {0,1,1,2,1,0,3,2, 105,23} }, +{ {0,1,1,2,1,0,3,3, 105,4} }, +{ {0,1,1,2,1,0,3,4, 157,21} }, +{ {0,1,1,2,1,1,0,0, 27,3} }, +{ {0,1,1,2,1,1,0,1, 16,3} }, +{ {0,1,1,2,1,1,0,2, 40,3} }, +{ {0,1,1,2,1,1,0,3, 76,3} }, +{ {0,1,1,2,1,1,1,0, 21,11} }, +{ {0,1,1,2,1,1,1,1, 7,10} }, +{ {0,1,1,2,1,1,1,2, 34,11} }, +{ {0,1,1,2,1,1,1,3, 70,11} }, +{ {0,1,1,2,1,1,2,0, 30,3} }, +{ {0,1,1,2,1,1,2,1, 16,31} }, +{ {0,1,1,2,1,1,2,2, 26,24} }, +{ {0,1,1,2,1,1,2,3, 85,3} }, +{ {0,1,1,2,1,1,3,0, 67,42} }, +{ {0,1,1,2,1,1,3,1, 62,42} }, +{ {0,1,1,2,1,1,3,2, 81,42} }, +{ {0,1,1,2,1,1,3,3, 81,3} }, +{ {0,1,1,2,1,1,3,4, 131,42} }, +{ {0,1,1,2,1,2,0,0, 50,4} }, +{ {0,1,1,2,1,2,0,1, 56,13} }, +{ {0,1,1,2,1,2,0,2, 39,22} }, +{ {0,1,1,2,1,2,0,3, 116,13} }, +{ {0,1,1,2,1,2,1,0, 30,27} }, +{ {0,1,1,2,1,2,1,1, 16,4} }, +{ {0,1,1,2,1,2,1,2, 26,22} }, +{ {0,1,1,2,1,2,1,3, 85,27} }, +{ {0,1,1,2,1,2,2,0, 57,0} }, +{ {0,1,1,2,1,2,2,1, 55,5} }, +{ {0,1,1,2,1,2,2,2, 15,5} }, +{ {0,1,1,2,1,2,2,3, 119,0} }, +{ {0,1,1,2,1,2,3,0, 120,0} }, +{ {0,1,1,2,1,2,3,1, 117,9} }, +{ {0,1,1,2,1,2,3,2, 74,22} }, +{ {0,1,1,2,1,2,3,3, 99,5} }, +{ {0,1,1,2,1,2,3,4, 159,0} }, +{ {0,1,1,2,1,3,0,0, 102,25} }, +{ {0,1,1,2,1,3,0,1, 117,27} }, +{ {0,1,1,2,1,3,0,2, 105,38} }, +{ {0,1,1,2,1,3,0,3, 105,31} }, +{ {0,1,1,2,1,3,0,4, 157,40} }, +{ {0,1,1,2,1,3,1,0, 67,27} }, +{ {0,1,1,2,1,3,1,1, 62,27} }, +{ {0,1,1,2,1,3,1,2, 81,27} }, +{ {0,1,1,2,1,3,1,3, 81,46} }, +{ {0,1,1,2,1,3,1,4, 131,27} }, +{ {0,1,1,2,1,3,2,0, 120,19} }, +{ {0,1,1,2,1,3,2,1, 117,7} }, +{ {0,1,1,2,1,3,2,2, 74,24} }, +{ {0,1,1,2,1,3,2,3, 99,30} }, +{ {0,1,1,2,1,3,2,4, 159,19} }, +{ {0,1,1,2,1,3,3,0, 120,13} }, +{ {0,1,1,2,1,3,3,1, 117,10} }, +{ {0,1,1,2,1,3,3,2, 99,22} }, +{ {0,1,1,2,1,3,3,3, 74,5} }, +{ {0,1,1,2,1,3,3,4, 159,13} }, +{ {0,1,1,2,1,3,4,0, 160,0} }, +{ {0,1,1,2,1,3,4,1, 161,0} }, +{ {0,1,1,2,1,3,4,2, 143,23} }, +{ {0,1,1,2,1,3,4,3, 143,36} }, +{ {0,1,1,2,1,3,4,4, 143,25} }, +{ {0,1,1,2,1,3,4,5, 176,0} }, +{ {0,1,1,2,2,0,0,0, 30,5} }, +{ {0,1,1,2,2,0,0,1, 57,2} }, +{ {0,1,1,2,2,0,0,2, 50,22} }, +{ {0,1,1,2,2,0,0,3, 120,12} }, +{ {0,1,1,2,2,0,1,0, 53,36} }, +{ {0,1,1,2,2,0,1,1, 30,25} }, +{ {0,1,1,2,2,0,1,2, 48,44} }, +{ {0,1,1,2,2,0,1,3, 111,26} }, +{ {0,1,1,2,2,0,2,0, 48,30} }, +{ {0,1,1,2,2,0,2,1, 50,29} }, +{ {0,1,1,2,2,0,2,2, 36,4} }, +{ {0,1,1,2,2,0,2,3, 104,47} }, +{ {0,1,1,2,2,0,3,0, 111,36} }, +{ {0,1,1,2,2,0,3,1, 120,15} }, +{ {0,1,1,2,2,0,3,2, 104,23} }, +{ {0,1,1,2,2,0,3,3, 114,5} }, +{ {0,1,1,2,2,0,3,4, 162,0} }, +{ {0,1,1,2,2,1,0,0, 53,25} }, +{ {0,1,1,2,2,1,0,1, 30,9} }, +{ {0,1,1,2,2,1,0,2, 48,9} }, +{ {0,1,1,2,2,1,0,3, 111,43} }, +{ {0,1,1,2,2,1,1,0, 52,9} }, +{ {0,1,1,2,2,1,1,1, 21,5} }, +{ {0,1,1,2,2,1,1,2, 45,22} }, +{ {0,1,1,2,2,1,1,3, 110,26} }, +{ {0,1,1,2,2,1,2,0, 53,8} }, +{ {0,1,1,2,2,1,2,1, 27,36} }, +{ {0,1,1,2,2,1,2,2, 23,24} }, +{ {0,1,1,2,2,1,2,3, 112,43} }, +{ {0,1,1,2,2,1,3,0, 107,43} }, +{ {0,1,1,2,2,1,3,1, 67,9} }, +{ {0,1,1,2,2,1,3,2, 92,9} }, +{ {0,1,1,2,2,1,3,3, 108,5} }, +{ {0,1,1,2,2,1,3,4, 147,43} }, +{ {0,1,1,2,2,2,0,0, 48,5} }, +{ {0,1,1,2,2,2,0,1, 50,3} }, +{ {0,1,1,2,2,2,0,2, 36,31} }, +{ {0,1,1,2,2,2,0,3, 104,2} }, +{ {0,1,1,2,2,2,1,0, 53,45} }, +{ {0,1,1,2,2,2,1,1, 27,25} }, +{ {0,1,1,2,2,2,1,2, 23,37} }, +{ {0,1,1,2,2,2,1,3, 112,26} }, +{ {0,1,1,2,2,2,2,0, 30,11} }, +{ {0,1,1,2,2,2,2,1, 38,11} }, +{ {0,1,1,2,2,2,2,2, 6,5} }, +{ {0,1,1,2,2,2,2,3, 85,11} }, +{ {0,1,1,2,2,2,3,0, 111,3} }, +{ {0,1,1,2,2,2,3,1, 102,3} }, +{ {0,1,1,2,2,2,3,2, 71,37} }, +{ {0,1,1,2,2,2,3,3, 91,5} }, +{ {0,1,1,2,2,2,3,4, 153,3} }, +{ {0,1,1,2,2,3,0,0, 111,25} }, +{ {0,1,1,2,2,3,0,1, 120,7} }, +{ {0,1,1,2,2,3,0,2, 104,38} }, +{ {0,1,1,2,2,3,0,3, 114,30} }, +{ {0,1,1,2,2,3,0,4, 162,19} }, +{ {0,1,1,2,2,3,1,0, 107,26} }, +{ {0,1,1,2,2,3,1,1, 67,44} }, +{ {0,1,1,2,2,3,1,2, 92,44} }, +{ {0,1,1,2,2,3,1,3, 108,30} }, +{ {0,1,1,2,2,3,1,4, 147,26} }, +{ {0,1,1,2,2,3,2,0, 111,46} }, +{ {0,1,1,2,2,3,2,1, 102,46} }, +{ {0,1,1,2,2,3,2,2, 71,24} }, +{ {0,1,1,2,2,3,2,3, 91,30} }, +{ {0,1,1,2,2,3,2,4, 153,46} }, +{ {0,1,1,2,2,3,3,0, 121,0} }, +{ {0,1,1,2,2,3,3,1, 120,23} }, +{ {0,1,1,2,2,3,3,2, 98,22} }, +{ {0,1,1,2,2,3,3,3, 66,5} }, +{ {0,1,1,2,2,3,3,4, 163,0} }, +{ {0,1,1,2,2,3,4,0, 164,0} }, +{ {0,1,1,2,2,3,4,1, 160,15} }, +{ {0,1,1,2,2,3,4,2, 142,23} }, +{ {0,1,1,2,2,3,4,3, 150,30} }, +{ {0,1,1,2,2,3,4,4, 150,5} }, +{ {0,1,1,2,2,3,4,5, 177,0} }, +{ {0,1,1,2,3,0,0,0, 85,5} }, +{ {0,1,1,2,3,0,0,1, 119,7} }, +{ {0,1,1,2,3,0,0,2, 99,23} }, +{ {0,1,1,2,3,0,0,3, 116,11} }, +{ {0,1,1,2,3,0,0,4, 159,12} }, +{ {0,1,1,2,3,0,1,0, 112,45} }, +{ {0,1,1,2,3,0,1,1, 85,25} }, +{ {0,1,1,2,3,0,1,2, 91,38} }, +{ {0,1,1,2,3,0,1,3, 104,27} }, +{ {0,1,1,2,3,0,1,4, 153,26} }, +{ {0,1,1,2,3,0,2,0, 104,37} }, +{ {0,1,1,2,3,0,2,1, 116,7} }, +{ {0,1,1,2,3,0,2,2, 78,39} }, +{ {0,1,1,2,3,0,2,3, 122,0} }, +{ {0,1,1,2,3,0,2,4, 165,0} }, +{ {0,1,1,2,3,0,3,0, 91,28} }, +{ {0,1,1,2,3,0,3,1, 99,28} }, +{ {0,1,1,2,3,0,3,2, 106,23} }, +{ {0,1,1,2,3,0,3,3, 78,29} }, +{ {0,1,1,2,3,0,3,4, 141,47} }, +{ {0,1,1,2,3,0,4,0, 153,36} }, +{ {0,1,1,2,3,0,4,1, 159,15} }, +{ {0,1,1,2,3,0,4,2, 141,23} }, +{ {0,1,1,2,3,0,4,3, 165,20} }, +{ {0,1,1,2,3,0,4,4, 156,24} }, +{ {0,1,1,2,3,0,4,5, 178,0} }, +{ {0,1,1,2,3,1,0,0, 112,8} }, +{ {0,1,1,2,3,1,0,1, 85,9} }, +{ {0,1,1,2,3,1,0,2, 91,23} }, +{ {0,1,1,2,3,1,0,3, 104,42} }, +{ {0,1,1,2,3,1,0,4, 153,43} }, +{ {0,1,1,2,3,1,1,0, 110,8} }, +{ {0,1,1,2,3,1,1,1, 70,5} }, +{ {0,1,1,2,3,1,1,2, 89,23} }, +{ {0,1,1,2,3,1,1,3, 101,27} }, +{ {0,1,1,2,3,1,1,4, 152,26} }, +{ {0,1,1,2,3,1,2,0, 111,8} }, +{ {0,1,1,2,3,1,2,1, 76,36} }, +{ {0,1,1,2,3,1,2,2, 65,39} }, +{ {0,1,1,2,3,1,2,3, 104,9} }, +{ {0,1,1,2,3,1,2,4, 153,8} }, +{ {0,1,1,2,3,1,3,0, 108,28} }, +{ {0,1,1,2,3,1,3,1, 81,36} }, +{ {0,1,1,2,3,1,3,2, 93,23} }, +{ {0,1,1,2,3,1,3,3, 68,29} }, +{ {0,1,1,2,3,1,3,4, 149,47} }, +{ {0,1,1,2,3,1,4,0, 147,8} }, +{ {0,1,1,2,3,1,4,1, 131,9} }, +{ {0,1,1,2,3,1,4,2, 135,23} }, +{ {0,1,1,2,3,1,4,3, 142,42} }, +{ {0,1,1,2,3,1,4,4, 149,24} }, +{ {0,1,1,2,3,1,4,5, 171,43} }, +{ {0,1,1,2,3,2,0,0, 104,24} }, +{ {0,1,1,2,3,2,0,1, 116,23} }, +{ {0,1,1,2,3,2,0,2, 78,22} }, +{ {0,1,1,2,3,2,0,3, 122,19} }, +{ {0,1,1,2,3,2,0,4, 165,19} }, +{ {0,1,1,2,3,2,1,0, 111,45} }, +{ {0,1,1,2,3,2,1,1, 76,25} }, +{ {0,1,1,2,3,2,1,2, 65,22} }, +{ {0,1,1,2,3,2,1,3, 104,44} }, +{ {0,1,1,2,3,2,1,4, 153,45} }, +{ {0,1,1,2,3,2,2,0, 120,22} }, +{ {0,1,1,2,3,2,2,1, 115,23} }, +{ {0,1,1,2,3,2,2,2, 61,22} }, +{ {0,1,1,2,3,2,2,3, 116,5} }, +{ {0,1,1,2,3,2,2,4, 159,22} }, +{ {0,1,1,2,3,2,3,0, 114,46} }, +{ {0,1,1,2,3,2,3,1, 105,29} }, +{ {0,1,1,2,3,2,3,2, 75,22} }, +{ {0,1,1,2,3,2,3,3, 78,4} }, +{ {0,1,1,2,3,2,3,4, 156,47} }, +{ {0,1,1,2,3,2,4,0, 162,35} }, +{ {0,1,1,2,3,2,4,1, 157,34} }, +{ {0,1,1,2,3,2,4,2, 128,22} }, +{ {0,1,1,2,3,2,4,3, 165,35} }, +{ {0,1,1,2,3,2,4,4, 141,24} }, +{ {0,1,1,2,3,2,4,5, 178,35} }, +{ {0,1,1,2,3,3,0,0, 91,11} }, +{ {0,1,1,2,3,3,0,1, 99,2} }, +{ {0,1,1,2,3,3,0,2, 106,38} }, +{ {0,1,1,2,3,3,0,3, 78,10} }, +{ {0,1,1,2,3,3,0,4, 141,2} }, +{ {0,1,1,2,3,3,1,0, 108,11} }, +{ {0,1,1,2,3,3,1,1, 81,25} }, +{ {0,1,1,2,3,3,1,2, 93,38} }, +{ {0,1,1,2,3,3,1,3, 68,10} }, +{ {0,1,1,2,3,3,1,4, 149,2} }, +{ {0,1,1,2,3,3,2,0, 114,3} }, +{ {0,1,1,2,3,3,2,1, 105,10} }, +{ {0,1,1,2,3,3,2,2, 75,39} }, +{ {0,1,1,2,3,3,2,3, 78,31} }, +{ {0,1,1,2,3,3,2,4, 156,2} }, +{ {0,1,1,2,3,3,3,0, 66,11} }, +{ {0,1,1,2,3,3,3,1, 74,11} }, +{ {0,1,1,2,3,3,3,2, 86,11} }, +{ {0,1,1,2,3,3,3,3, 60,11} }, +{ {0,1,1,2,3,3,3,4, 130,11} }, +{ {0,1,1,2,3,3,4,0, 150,11} }, +{ {0,1,1,2,3,3,4,1, 143,3} }, +{ {0,1,1,2,3,3,4,2, 144,23} }, +{ {0,1,1,2,3,3,4,3, 133,10} }, +{ {0,1,1,2,3,3,4,4, 138,11} }, +{ {0,1,1,2,3,3,4,5, 173,2} }, +{ {0,1,1,2,3,4,0,0, 153,25} }, +{ {0,1,1,2,3,4,0,1, 159,7} }, +{ {0,1,1,2,3,4,0,2, 141,38} }, +{ {0,1,1,2,3,4,0,3, 165,41} }, +{ {0,1,1,2,3,4,0,4, 156,37} }, +{ {0,1,1,2,3,4,0,5, 178,19} }, +{ {0,1,1,2,3,4,1,0, 147,45} }, +{ {0,1,1,2,3,4,1,1, 131,44} }, +{ {0,1,1,2,3,4,1,2, 135,38} }, +{ {0,1,1,2,3,4,1,3, 142,27} }, +{ {0,1,1,2,3,4,1,4, 149,37} }, +{ {0,1,1,2,3,4,1,5, 171,26} }, +{ {0,1,1,2,3,4,2,0, 162,6} }, +{ {0,1,1,2,3,4,2,1, 157,7} }, +{ {0,1,1,2,3,4,2,2, 128,39} }, +{ {0,1,1,2,3,4,2,3, 165,6} }, +{ {0,1,1,2,3,4,2,4, 141,37} }, +{ {0,1,1,2,3,4,2,5, 178,6} }, +{ {0,1,1,2,3,4,3,0, 150,28} }, +{ {0,1,1,2,3,4,3,1, 143,46} }, +{ {0,1,1,2,3,4,3,2, 144,38} }, +{ {0,1,1,2,3,4,3,3, 133,29} }, +{ {0,1,1,2,3,4,3,4, 138,28} }, +{ {0,1,1,2,3,4,3,5, 173,47} }, +{ {0,1,1,2,3,4,4,0, 163,15} }, +{ {0,1,1,2,3,4,4,1, 159,23} }, +{ {0,1,1,2,3,4,4,2, 139,23} }, +{ {0,1,1,2,3,4,4,3, 158,11} }, +{ {0,1,1,2,3,4,4,4, 130,5} }, +{ {0,1,1,2,3,4,4,5, 179,0} }, +{ {0,1,1,2,3,4,5,0, 177,15} }, +{ {0,1,1,2,3,4,5,1, 176,15} }, +{ {0,1,1,2,3,4,5,2, 169,23} }, +{ {0,1,1,2,3,4,5,3, 180,0} }, +{ {0,1,1,2,3,4,5,4, 173,37} }, +{ {0,1,1,2,3,4,5,5, 173,24} }, +{ {0,1,1,2,3,4,5,6, 183,0} }, +{ {0,1,2,0,0,0,0,0, 7,11} }, +{ {0,1,2,0,0,0,0,1, 16,2} }, +{ {0,1,2,0,0,0,0,2, 16,28} }, +{ {0,1,2,0,0,0,0,3, 62,33} }, +{ {0,1,2,0,0,0,1,0, 21,10} }, +{ {0,1,2,0,0,0,1,1, 27,2} }, +{ {0,1,2,0,0,0,1,2, 30,2} }, +{ {0,1,2,0,0,0,1,3, 67,33} }, +{ {0,1,2,0,0,0,2,0, 34,10} }, +{ {0,1,2,0,0,0,2,1, 40,2} }, +{ {0,1,2,0,0,0,2,2, 26,25} }, +{ {0,1,2,0,0,0,2,3, 81,33} }, +{ {0,1,2,0,0,0,3,0, 70,10} }, +{ {0,1,2,0,0,0,3,1, 76,2} }, +{ {0,1,2,0,0,0,3,2, 85,2} }, +{ {0,1,2,0,0,0,3,3, 81,2} }, +{ {0,1,2,0,0,0,3,4, 131,33} }, +{ {0,1,2,0,0,1,0,0, 34,4} }, +{ {0,1,2,0,0,1,0,1, 26,9} }, +{ {0,1,2,0,0,1,0,2, 40,47} }, +{ {0,1,2,0,0,1,0,3, 81,12} }, +{ {0,1,2,0,0,1,1,0, 45,9} }, +{ {0,1,2,0,0,1,1,1, 23,36} }, +{ {0,1,2,0,0,1,1,2, 48,33} }, +{ {0,1,2,0,0,1,1,3, 92,33} }, +{ {0,1,2,0,0,1,2,0, 46,9} }, +{ {0,1,2,0,0,1,2,1, 29,9} }, +{ {0,1,2,0,0,1,2,2, 29,44} }, +{ {0,1,2,0,0,1,2,3, 94,43} }, +{ {0,1,2,0,0,1,3,0, 89,8} }, +{ {0,1,2,0,0,1,3,1, 65,9} }, +{ {0,1,2,0,0,1,3,2, 91,43} }, +{ {0,1,2,0,0,1,3,3, 93,43} }, +{ {0,1,2,0,0,1,3,4, 135,43} }, +{ {0,1,2,0,0,2,0,0, 21,4} }, +{ {0,1,2,0,0,2,0,1, 30,12} }, +{ {0,1,2,0,0,2,0,2, 27,47} }, +{ {0,1,2,0,0,2,0,3, 67,12} }, +{ {0,1,2,0,0,2,1,0, 52,12} }, +{ {0,1,2,0,0,2,1,1, 53,32} }, +{ {0,1,2,0,0,2,1,2, 53,13} }, +{ {0,1,2,0,0,2,1,3, 107,32} }, +{ {0,1,2,0,0,2,2,0, 45,27} }, +{ {0,1,2,0,0,2,2,1, 48,12} }, +{ {0,1,2,0,0,2,2,2, 23,25} }, +{ {0,1,2,0,0,2,2,3, 92,12} }, +{ {0,1,2,0,0,2,3,0, 110,23} }, +{ {0,1,2,0,0,2,3,1, 111,32} }, +{ {0,1,2,0,0,2,3,2, 112,32} }, +{ {0,1,2,0,0,2,3,3, 108,4} }, +{ {0,1,2,0,0,2,3,4, 147,32} }, +{ {0,1,2,0,0,3,0,0, 70,4} }, +{ {0,1,2,0,0,3,0,1, 85,12} }, +{ {0,1,2,0,0,3,0,2, 76,47} }, +{ {0,1,2,0,0,3,0,3, 81,47} }, +{ {0,1,2,0,0,3,0,4, 131,12} }, +{ {0,1,2,0,0,3,1,0, 110,13} }, +{ {0,1,2,0,0,3,1,1, 112,13} }, +{ {0,1,2,0,0,3,1,2, 111,13} }, +{ {0,1,2,0,0,3,1,3, 108,31} }, +{ {0,1,2,0,0,3,1,4, 147,13} }, +{ {0,1,2,0,0,3,2,0, 89,26} }, +{ {0,1,2,0,0,3,2,1, 91,26} }, +{ {0,1,2,0,0,3,2,2, 65,44} }, +{ {0,1,2,0,0,3,2,3, 93,26} }, +{ {0,1,2,0,0,3,2,4, 135,26} }, +{ {0,1,2,0,0,3,3,0, 101,22} }, +{ {0,1,2,0,0,3,3,1, 104,33} }, +{ {0,1,2,0,0,3,3,2, 104,12} }, +{ {0,1,2,0,0,3,3,3, 68,30} }, +{ {0,1,2,0,0,3,3,4, 142,33} }, +{ {0,1,2,0,0,3,4,0, 152,23} }, +{ {0,1,2,0,0,3,4,1, 153,32} }, +{ {0,1,2,0,0,3,4,2, 153,13} }, +{ {0,1,2,0,0,3,4,3, 149,36} }, +{ {0,1,2,0,0,3,4,4, 149,25} }, +{ {0,1,2,0,0,3,4,5, 171,32} }, +{ {0,1,2,0,1,0,0,0, 16,30} }, +{ {0,1,2,0,1,0,0,1, 55,3} }, +{ {0,1,2,0,1,0,0,2, 56,2} }, +{ {0,1,2,0,1,0,0,3, 117,20} }, +{ {0,1,2,0,1,0,1,0, 27,37} }, +{ {0,1,2,0,1,0,1,1, 38,4} }, +{ {0,1,2,0,1,0,1,2, 50,28} }, +{ {0,1,2,0,1,0,1,3, 102,47} }, +{ {0,1,2,0,1,0,2,0, 40,37} }, +{ {0,1,2,0,1,0,2,1, 51,26} }, +{ {0,1,2,0,1,0,2,2, 39,25} }, +{ {0,1,2,0,1,0,2,3, 105,26} }, +{ {0,1,2,0,1,0,3,0, 76,37} }, +{ {0,1,2,0,1,0,3,1, 115,8} }, +{ {0,1,2,0,1,0,3,2, 116,20} }, +{ {0,1,2,0,1,0,3,3, 105,5} }, +{ {0,1,2,0,1,0,3,4, 157,20} }, +{ {0,1,2,0,1,1,0,0, 26,3} }, +{ {0,1,2,0,1,1,0,1, 15,3} }, +{ {0,1,2,0,1,1,0,2, 39,3} }, +{ {0,1,2,0,1,1,0,3, 74,3} }, +{ {0,1,2,0,1,1,1,0, 23,3} }, +{ {0,1,2,0,1,1,1,1, 6,10} }, +{ {0,1,2,0,1,1,1,2, 36,3} }, +{ {0,1,2,0,1,1,1,3, 71,3} }, +{ {0,1,2,0,1,1,2,0, 29,42} }, +{ {0,1,2,0,1,1,2,1, 18,9} }, +{ {0,1,2,0,1,1,2,2, 42,42} }, +{ {0,1,2,0,1,1,2,3, 79,42} }, +{ {0,1,2,0,1,1,3,0, 65,42} }, +{ {0,1,2,0,1,1,3,1, 61,9} }, +{ {0,1,2,0,1,1,3,2, 78,42} }, +{ {0,1,2,0,1,1,3,3, 75,42} }, +{ {0,1,2,0,1,1,3,4, 128,42} }, +{ {0,1,2,0,1,2,0,0, 30,24} }, +{ {0,1,2,0,1,2,0,1, 57,6} }, +{ {0,1,2,0,1,2,0,2, 50,30} }, +{ {0,1,2,0,1,2,0,3, 120,18} }, +{ {0,1,2,0,1,2,1,0, 53,23} }, +{ {0,1,2,0,1,2,1,1, 30,4} }, +{ {0,1,2,0,1,2,1,2, 48,29} }, +{ {0,1,2,0,1,2,1,3, 111,47} }, +{ {0,1,2,0,1,2,2,0, 48,39} }, +{ {0,1,2,0,1,2,2,1, 50,27} }, +{ {0,1,2,0,1,2,2,2, 36,25} }, +{ {0,1,2,0,1,2,2,3, 104,26} }, +{ {0,1,2,0,1,2,3,0, 111,23} }, +{ {0,1,2,0,1,2,3,1, 120,9} }, +{ {0,1,2,0,1,2,3,2, 104,36} }, +{ {0,1,2,0,1,2,3,3, 114,24} }, +{ {0,1,2,0,1,2,3,4, 162,21} }, +{ {0,1,2,0,1,3,0,0, 85,24} }, +{ {0,1,2,0,1,3,0,1, 119,6} }, +{ {0,1,2,0,1,3,0,2, 116,6} }, +{ {0,1,2,0,1,3,0,3, 99,31} }, +{ {0,1,2,0,1,3,0,4, 159,18} }, +{ {0,1,2,0,1,3,1,0, 112,38} }, +{ {0,1,2,0,1,3,1,1, 85,4} }, +{ {0,1,2,0,1,3,1,2, 104,46} }, +{ {0,1,2,0,1,3,1,3, 91,31} }, +{ {0,1,2,0,1,3,1,4, 153,47} }, +{ {0,1,2,0,1,3,2,0, 91,45} }, +{ {0,1,2,0,1,3,2,1, 99,26} }, +{ {0,1,2,0,1,3,2,2, 78,44} }, +{ {0,1,2,0,1,3,2,3, 106,26} }, +{ {0,1,2,0,1,3,2,4, 141,26} }, +{ {0,1,2,0,1,3,3,0, 104,22} }, +{ {0,1,2,0,1,3,3,1, 116,10} }, +{ {0,1,2,0,1,3,3,2, 122,1} }, +{ {0,1,2,0,1,3,3,3, 78,30} }, +{ {0,1,2,0,1,3,3,4, 165,21} }, +{ {0,1,2,0,1,3,4,0, 153,23} }, +{ {0,1,2,0,1,3,4,1, 159,9} }, +{ {0,1,2,0,1,3,4,2, 165,1} }, +{ {0,1,2,0,1,3,4,3, 141,36} }, +{ {0,1,2,0,1,3,4,4, 156,25} }, +{ {0,1,2,0,1,3,4,5, 178,21} }, +{ {0,1,2,0,2,0,0,0, 16,5} }, +{ {0,1,2,0,2,0,0,1, 56,8} }, +{ {0,1,2,0,2,0,0,2, 55,4} }, +{ {0,1,2,0,2,0,0,3, 117,12} }, +{ {0,1,2,0,2,0,1,0, 30,22} }, +{ {0,1,2,0,2,0,1,1, 50,5} }, +{ {0,1,2,0,2,0,1,2, 57,1} }, +{ {0,1,2,0,2,0,1,3, 120,1} }, +{ {0,1,2,0,2,0,2,0, 26,27} }, +{ {0,1,2,0,2,0,2,1, 39,27} }, +{ {0,1,2,0,2,0,2,2, 15,4} }, +{ {0,1,2,0,2,0,2,3, 74,27} }, +{ {0,1,2,0,2,0,3,0, 85,22} }, +{ {0,1,2,0,2,0,3,1, 116,8} }, +{ {0,1,2,0,2,0,3,2, 119,1} }, +{ {0,1,2,0,2,0,3,3, 99,4} }, +{ {0,1,2,0,2,0,3,4, 159,1} }, +{ {0,1,2,0,2,1,0,0, 40,24} }, +{ {0,1,2,0,2,1,0,1, 39,9} }, +{ {0,1,2,0,2,1,0,2, 51,8} }, +{ {0,1,2,0,2,1,0,3, 105,43} }, +{ {0,1,2,0,2,1,1,0, 48,22} }, +{ {0,1,2,0,2,1,1,1, 36,36} }, +{ {0,1,2,0,2,1,1,2, 50,9} }, +{ {0,1,2,0,2,1,1,3, 104,43} }, +{ {0,1,2,0,2,1,2,0, 29,27} }, +{ {0,1,2,0,2,1,2,1, 42,9} }, +{ {0,1,2,0,2,1,2,2, 18,27} }, +{ {0,1,2,0,2,1,2,3, 79,27} }, +{ {0,1,2,0,2,1,3,0, 91,8} }, +{ {0,1,2,0,2,1,3,1, 78,9} }, +{ {0,1,2,0,2,1,3,2, 99,8} }, +{ {0,1,2,0,2,1,3,3, 106,43} }, +{ {0,1,2,0,2,1,3,4, 141,43} }, +{ {0,1,2,0,2,2,0,0, 27,24} }, +{ {0,1,2,0,2,2,0,1, 50,2} }, +{ {0,1,2,0,2,2,0,2, 38,10} }, +{ {0,1,2,0,2,2,0,3, 102,2} }, +{ {0,1,2,0,2,2,1,0, 53,38} }, +{ {0,1,2,0,2,2,1,1, 48,4} }, +{ {0,1,2,0,2,2,1,2, 30,10} }, +{ {0,1,2,0,2,2,1,3, 111,2} }, +{ {0,1,2,0,2,2,2,0, 23,46} }, +{ {0,1,2,0,2,2,2,1, 36,46} }, +{ {0,1,2,0,2,2,2,2, 6,4} }, +{ {0,1,2,0,2,2,2,3, 71,46} }, +{ {0,1,2,0,2,2,3,0, 112,23} }, +{ {0,1,2,0,2,2,3,1, 104,3} }, +{ {0,1,2,0,2,2,3,2, 85,10} }, +{ {0,1,2,0,2,2,3,3, 91,4} }, +{ {0,1,2,0,2,2,3,4, 153,2} }, +{ {0,1,2,0,2,3,0,0, 76,24} }, +{ {0,1,2,0,2,3,0,1, 116,26} }, +{ {0,1,2,0,2,3,0,2, 115,26} }, +{ {0,1,2,0,2,3,0,3, 105,30} }, +{ {0,1,2,0,2,3,0,4, 157,41} }, +{ {0,1,2,0,2,3,1,0, 111,38} }, +{ {0,1,2,0,2,3,1,1, 104,25} }, +{ {0,1,2,0,2,3,1,2, 120,27} }, +{ {0,1,2,0,2,3,1,3, 114,37} }, +{ {0,1,2,0,2,3,1,4, 162,40} }, +{ {0,1,2,0,2,3,2,0, 65,27} }, +{ {0,1,2,0,2,3,2,1, 78,27} }, +{ {0,1,2,0,2,3,2,2, 61,27} }, +{ {0,1,2,0,2,3,2,3, 75,27} }, +{ {0,1,2,0,2,3,2,4, 128,27} }, +{ {0,1,2,0,2,3,3,0, 104,39} }, +{ {0,1,2,0,2,3,3,1, 122,14} }, +{ {0,1,2,0,2,3,3,2, 116,4} }, +{ {0,1,2,0,2,3,3,3, 78,5} }, +{ {0,1,2,0,2,3,3,4, 165,40} }, +{ {0,1,2,0,2,3,4,0, 153,38} }, +{ {0,1,2,0,2,3,4,1, 165,14} }, +{ {0,1,2,0,2,3,4,2, 159,27} }, +{ {0,1,2,0,2,3,4,3, 156,36} }, +{ {0,1,2,0,2,3,4,4, 141,25} }, +{ {0,1,2,0,2,3,4,5, 178,40} }, +{ {0,1,2,0,3,0,0,0, 62,22} }, +{ {0,1,2,0,3,0,0,1, 117,22} }, +{ {0,1,2,0,3,0,0,2, 117,6} }, +{ {0,1,2,0,3,0,0,3, 117,11} }, +{ {0,1,2,0,3,0,0,4, 161,1} }, +{ {0,1,2,0,3,0,1,0, 67,22} }, +{ {0,1,2,0,3,0,1,1, 102,24} }, +{ {0,1,2,0,3,0,1,2, 120,14} }, +{ {0,1,2,0,3,0,1,3, 120,8} }, +{ {0,1,2,0,3,0,1,4, 160,1} }, +{ {0,1,2,0,3,0,2,0, 81,22} }, +{ {0,1,2,0,3,0,2,1, 105,45} }, +{ {0,1,2,0,3,0,2,2, 74,25} }, +{ {0,1,2,0,3,0,2,3, 99,27} }, +{ {0,1,2,0,3,0,2,4, 143,26} }, +{ {0,1,2,0,3,0,3,0, 81,37} }, +{ {0,1,2,0,3,0,3,1, 105,28} }, +{ {0,1,2,0,3,0,3,2, 99,29} }, +{ {0,1,2,0,3,0,3,3, 74,4} }, +{ {0,1,2,0,3,0,3,4, 143,47} }, +{ {0,1,2,0,3,0,4,0, 131,22} }, +{ {0,1,2,0,3,0,4,1, 157,35} }, +{ {0,1,2,0,3,0,4,2, 159,14} }, +{ {0,1,2,0,3,0,4,3, 159,8} }, +{ {0,1,2,0,3,0,4,4, 143,24} }, +{ {0,1,2,0,3,0,4,5, 176,1} }, +{ {0,1,2,0,3,1,0,0, 81,39} }, +{ {0,1,2,0,3,1,0,1, 74,9} }, +{ {0,1,2,0,3,1,0,2, 105,8} }, +{ {0,1,2,0,3,1,0,3, 99,9} }, +{ {0,1,2,0,3,1,0,4, 143,43} }, +{ {0,1,2,0,3,1,1,0, 92,22} }, +{ {0,1,2,0,3,1,1,1, 71,36} }, +{ {0,1,2,0,3,1,1,2, 104,8} }, +{ {0,1,2,0,3,1,1,3, 98,9} }, +{ {0,1,2,0,3,1,1,4, 142,43} }, +{ {0,1,2,0,3,1,2,0, 94,8} }, +{ {0,1,2,0,3,1,2,1, 79,9} }, +{ {0,1,2,0,3,1,2,2, 79,44} }, +{ {0,1,2,0,3,1,2,3, 100,8} }, +{ {0,1,2,0,3,1,2,4, 145,43} }, +{ {0,1,2,0,3,1,3,0, 93,8} }, +{ {0,1,2,0,3,1,3,1, 75,9} }, +{ {0,1,2,0,3,1,3,2, 106,8} }, +{ {0,1,2,0,3,1,3,3, 86,4} }, +{ {0,1,2,0,3,1,3,4, 144,43} }, +{ {0,1,2,0,3,1,4,0, 135,8} }, +{ {0,1,2,0,3,1,4,1, 128,9} }, +{ {0,1,2,0,3,1,4,2, 141,8} }, +{ {0,1,2,0,3,1,4,3, 139,8} }, +{ {0,1,2,0,3,1,4,4, 144,8} }, +{ {0,1,2,0,3,1,4,5, 169,43} }, +{ {0,1,2,0,3,2,0,0, 67,39} }, +{ {0,1,2,0,3,2,0,1, 120,6} }, +{ {0,1,2,0,3,2,0,2, 102,37} }, +{ {0,1,2,0,3,2,0,3, 120,26} }, +{ {0,1,2,0,3,2,0,4, 160,18} }, +{ {0,1,2,0,3,2,1,0, 107,23} }, +{ {0,1,2,0,3,2,1,1, 111,24} }, +{ {0,1,2,0,3,2,1,2, 111,37} }, +{ {0,1,2,0,3,2,1,3, 121,1} }, +{ {0,1,2,0,3,2,1,4, 164,1} }, +{ {0,1,2,0,3,2,2,0, 92,39} }, +{ {0,1,2,0,3,2,2,1, 104,45} }, +{ {0,1,2,0,3,2,2,2, 71,25} }, +{ {0,1,2,0,3,2,2,3, 98,27} }, +{ {0,1,2,0,3,2,2,4, 142,26} }, +{ {0,1,2,0,3,2,3,0, 108,29} }, +{ {0,1,2,0,3,2,3,1, 114,47} }, +{ {0,1,2,0,3,2,3,2, 91,29} }, +{ {0,1,2,0,3,2,3,3, 66,4} }, +{ {0,1,2,0,3,2,3,4, 150,29} }, +{ {0,1,2,0,3,2,4,0, 147,23} }, +{ {0,1,2,0,3,2,4,1, 162,14} }, +{ {0,1,2,0,3,2,4,2, 153,37} }, +{ {0,1,2,0,3,2,4,3, 163,1} }, +{ {0,1,2,0,3,2,4,4, 150,4} }, +{ {0,1,2,0,3,2,4,5, 177,1} }, +{ {0,1,2,0,3,3,0,0, 81,24} }, +{ {0,1,2,0,3,3,0,1, 99,3} }, +{ {0,1,2,0,3,3,0,2, 105,11} }, +{ {0,1,2,0,3,3,0,3, 74,10} }, +{ {0,1,2,0,3,3,0,4, 143,2} }, +{ {0,1,2,0,3,3,1,0, 108,10} }, +{ {0,1,2,0,3,3,1,1, 91,10} }, +{ {0,1,2,0,3,3,1,2, 114,2} }, +{ {0,1,2,0,3,3,1,3, 66,10} }, +{ {0,1,2,0,3,3,1,4, 150,10} }, +{ {0,1,2,0,3,3,2,0, 93,45} }, +{ {0,1,2,0,3,3,2,1, 106,45} }, +{ {0,1,2,0,3,3,2,2, 75,44} }, +{ {0,1,2,0,3,3,2,3, 86,10} }, +{ {0,1,2,0,3,3,2,4, 144,26} }, +{ {0,1,2,0,3,3,3,0, 68,11} }, +{ {0,1,2,0,3,3,3,1, 78,11} }, +{ {0,1,2,0,3,3,3,2, 78,28} }, +{ {0,1,2,0,3,3,3,3, 60,10} }, +{ {0,1,2,0,3,3,3,4, 133,11} }, +{ {0,1,2,0,3,3,4,0, 149,3} }, +{ {0,1,2,0,3,3,4,1, 141,3} }, +{ {0,1,2,0,3,3,4,2, 156,3} }, +{ {0,1,2,0,3,3,4,3, 130,10} }, +{ {0,1,2,0,3,3,4,4, 138,10} }, +{ {0,1,2,0,3,3,4,5, 173,3} }, +{ {0,1,2,0,3,4,0,0, 131,39} }, +{ {0,1,2,0,3,4,0,1, 159,6} }, +{ {0,1,2,0,3,4,0,2, 157,6} }, +{ {0,1,2,0,3,4,0,3, 159,26} }, +{ {0,1,2,0,3,4,0,4, 143,37} }, +{ {0,1,2,0,3,4,0,5, 176,18} }, +{ {0,1,2,0,3,4,1,0, 147,38} }, +{ {0,1,2,0,3,4,1,1, 153,24} }, +{ {0,1,2,0,3,4,1,2, 162,17} }, +{ {0,1,2,0,3,4,1,3, 163,18} }, +{ {0,1,2,0,3,4,1,4, 150,31} }, +{ {0,1,2,0,3,4,1,5, 177,18} }, +{ {0,1,2,0,3,4,2,0, 135,45} }, +{ {0,1,2,0,3,4,2,1, 141,45} }, +{ {0,1,2,0,3,4,2,2, 128,44} }, +{ {0,1,2,0,3,4,2,3, 139,26} }, +{ {0,1,2,0,3,4,2,4, 144,45} }, +{ {0,1,2,0,3,4,2,5, 169,26} }, +{ {0,1,2,0,3,4,3,0, 149,46} }, +{ {0,1,2,0,3,4,3,1, 156,46} }, +{ {0,1,2,0,3,4,3,2, 141,46} }, +{ {0,1,2,0,3,4,3,3, 130,4} }, +{ {0,1,2,0,3,4,3,4, 138,29} }, +{ {0,1,2,0,3,4,3,5, 173,46} }, +{ {0,1,2,0,3,4,4,0, 142,22} }, +{ {0,1,2,0,3,4,4,1, 165,34} }, +{ {0,1,2,0,3,4,4,2, 165,7} }, +{ {0,1,2,0,3,4,4,3, 158,10} }, +{ {0,1,2,0,3,4,4,4, 133,30} }, +{ {0,1,2,0,3,4,4,5, 180,1} }, +{ {0,1,2,0,3,4,5,0, 171,23} }, +{ {0,1,2,0,3,4,5,1, 178,34} }, +{ {0,1,2,0,3,4,5,2, 178,7} }, +{ {0,1,2,0,3,4,5,3, 179,1} }, +{ {0,1,2,0,3,4,5,4, 173,36} }, +{ {0,1,2,0,3,4,5,5, 173,25} }, +{ {0,1,2,0,3,4,5,6, 183,1} }, +{ {0,1,2,1,0,0,0,0, 8,11} }, +{ {0,1,2,1,0,0,0,1, 17,2} }, +{ {0,1,2,1,0,0,0,2, 18,28} }, +{ {0,1,2,1,0,0,0,3, 63,33} }, +{ {0,1,2,1,0,0,1,0, 23,10} }, +{ {0,1,2,1,0,0,1,1, 28,2} }, +{ {0,1,2,1,0,0,1,2, 31,2} }, +{ {0,1,2,1,0,0,1,3, 68,33} }, +{ {0,1,2,1,0,0,2,0, 37,2} }, +{ {0,1,2,1,0,0,2,1, 41,2} }, +{ {0,1,2,1,0,0,2,2, 43,2} }, +{ {0,1,2,1,0,0,2,3, 82,33} }, +{ {0,1,2,1,0,0,3,0, 72,10} }, +{ {0,1,2,1,0,0,3,1, 77,34} }, +{ {0,1,2,1,0,0,3,2, 86,2} }, +{ {0,1,2,1,0,0,3,3, 82,2} }, +{ {0,1,2,1,0,0,3,4, 132,33} }, +{ {0,1,2,1,0,1,0,0, 28,8} }, +{ {0,1,2,1,0,1,0,1, 10,9} }, +{ {0,1,2,1,0,1,0,2, 42,47} }, +{ {0,1,2,1,0,1,0,3, 83,12} }, +{ {0,1,2,1,0,1,1,0, 27,8} }, +{ {0,1,2,1,0,1,1,1, 8,37} }, +{ {0,1,2,1,0,1,1,2, 40,35} }, +{ {0,1,2,1,0,1,1,3, 81,8} }, +{ {0,1,2,1,0,1,2,0, 29,8} }, +{ {0,1,2,1,0,1,2,1, 11,9} }, +{ {0,1,2,1,0,1,2,2, 41,35} }, +{ {0,1,2,1,0,1,2,3, 84,8} }, +{ {0,1,2,1,0,1,3,0, 65,8} }, +{ {0,1,2,1,0,1,3,1, 59,8} }, +{ {0,1,2,1,0,1,3,2, 75,35} }, +{ {0,1,2,1,0,1,3,3, 82,8} }, +{ {0,1,2,1,0,1,3,4, 129,8} }, +{ {0,1,2,1,0,2,0,0, 24,29} }, +{ {0,1,2,1,0,2,0,1, 32,12} }, +{ {0,1,2,1,0,2,0,2, 29,47} }, +{ {0,1,2,1,0,2,0,3, 69,12} }, +{ {0,1,2,1,0,2,1,0, 53,12} }, +{ {0,1,2,1,0,2,1,1, 24,23} }, +{ {0,1,2,1,0,2,1,2, 47,34} }, +{ {0,1,2,1,0,2,1,3, 108,32} }, +{ {0,1,2,1,0,2,2,0, 47,12} }, +{ {0,1,2,1,0,2,2,1, 29,23} }, +{ {0,1,2,1,0,2,2,2, 37,5} }, +{ {0,1,2,1,0,2,2,3, 93,12} }, +{ {0,1,2,1,0,2,3,0, 108,14} }, +{ {0,1,2,1,0,2,3,1, 69,34} }, +{ {0,1,2,1,0,2,3,2, 93,34} }, +{ {0,1,2,1,0,2,3,3, 113,32} }, +{ {0,1,2,1,0,2,3,4, 148,32} }, +{ {0,1,2,1,0,3,0,0, 73,47} }, +{ {0,1,2,1,0,3,0,1, 88,12} }, +{ {0,1,2,1,0,3,0,2, 79,47} }, +{ {0,1,2,1,0,3,0,3, 84,47} }, +{ {0,1,2,1,0,3,0,4, 134,12} }, +{ {0,1,2,1,0,3,1,0, 112,15} }, +{ {0,1,2,1,0,3,1,1, 73,39} }, +{ {0,1,2,1,0,3,1,2, 103,15} }, +{ {0,1,2,1,0,3,1,3, 93,37} }, +{ {0,1,2,1,0,3,1,4, 149,13} }, +{ {0,1,2,1,0,3,2,0, 93,27} }, +{ {0,1,2,1,0,3,2,1, 84,23} }, +{ {0,1,2,1,0,3,2,2, 82,44} }, +{ {0,1,2,1,0,3,2,3, 96,13} }, +{ {0,1,2,1,0,3,2,4, 137,13} }, +{ {0,1,2,1,0,3,3,0, 103,33} }, +{ {0,1,2,1,0,3,3,1, 79,23} }, +{ {0,1,2,1,0,3,3,2, 106,34} }, +{ {0,1,2,1,0,3,3,3, 82,30} }, +{ {0,1,2,1,0,3,3,4, 144,33} }, +{ {0,1,2,1,0,3,4,0, 149,35} }, +{ {0,1,2,1,0,3,4,1, 134,34} }, +{ {0,1,2,1,0,3,4,2, 144,15} }, +{ {0,1,2,1,0,3,4,3, 137,35} }, +{ {0,1,2,1,0,3,4,4, 154,14} }, +{ {0,1,2,1,0,3,4,5, 172,32} }, +{ {0,1,2,1,1,0,0,0, 27,30} }, +{ {0,1,2,1,1,0,0,1, 38,23} }, +{ {0,1,2,1,1,0,0,2, 50,14} }, +{ {0,1,2,1,1,0,0,3, 102,14} }, +{ {0,1,2,1,1,0,1,0, 45,31} }, +{ {0,1,2,1,1,0,1,1, 35,24} }, +{ {0,1,2,1,1,0,1,2, 49,14} }, +{ {0,1,2,1,1,0,1,3, 101,14} }, +{ {0,1,2,1,1,0,2,0, 47,36} }, +{ {0,1,2,1,1,0,2,1, 40,34} }, +{ {0,1,2,1,1,0,2,2, 31,25} }, +{ {0,1,2,1,1,0,2,3, 103,14} }, +{ {0,1,2,1,1,0,3,0, 90,35} }, +{ {0,1,2,1,1,0,3,1, 76,34} }, +{ {0,1,2,1,1,0,3,2, 98,14} }, +{ {0,1,2,1,1,0,3,3, 103,35} }, +{ {0,1,2,1,1,0,3,4, 140,14} }, +{ {0,1,2,1,1,1,0,0, 23,42} }, +{ {0,1,2,1,1,1,0,1, 6,9} }, +{ {0,1,2,1,1,1,0,2, 36,42} }, +{ {0,1,2,1,1,1,0,3, 71,42} }, +{ {0,1,2,1,1,1,1,0, 21,3} }, +{ {0,1,2,1,1,1,1,1, 3,31} }, +{ {0,1,2,1,1,1,1,2, 35,3} }, +{ {0,1,2,1,1,1,1,3, 70,3} }, +{ {0,1,2,1,1,1,2,0, 24,8} }, +{ {0,1,2,1,1,1,2,1, 8,36} }, +{ {0,1,2,1,1,1,2,2, 28,25} }, +{ {0,1,2,1,1,1,2,3, 73,42} }, +{ {0,1,2,1,1,1,3,0, 64,8} }, +{ {0,1,2,1,1,1,3,1, 58,9} }, +{ {0,1,2,1,1,1,3,2, 71,8} }, +{ {0,1,2,1,1,1,3,3, 72,42} }, +{ {0,1,2,1,1,1,3,4, 127,42} }, +{ {0,1,2,1,1,2,0,0, 53,4} }, +{ {0,1,2,1,1,2,0,1, 30,23} }, +{ {0,1,2,1,1,2,0,2, 48,34} }, +{ {0,1,2,1,1,2,0,3, 111,14} }, +{ {0,1,2,1,1,2,1,0, 52,14} }, +{ {0,1,2,1,1,2,1,1, 21,24} }, +{ {0,1,2,1,1,2,1,2, 45,30} }, +{ {0,1,2,1,1,2,1,3, 110,14} }, +{ {0,1,2,1,1,2,2,0, 53,35} }, +{ {0,1,2,1,1,2,2,1, 27,23} }, +{ {0,1,2,1,1,2,2,2, 23,5} }, +{ {0,1,2,1,1,2,2,3, 112,14} }, +{ {0,1,2,1,1,2,3,0, 107,14} }, +{ {0,1,2,1,1,2,3,1, 67,34} }, +{ {0,1,2,1,1,2,3,2, 92,34} }, +{ {0,1,2,1,1,2,3,3, 108,24} }, +{ {0,1,2,1,1,2,3,4, 147,14} }, +{ {0,1,2,1,1,3,0,0, 112,25} }, +{ {0,1,2,1,1,3,0,1, 85,23} }, +{ {0,1,2,1,1,3,0,2, 104,15} }, +{ {0,1,2,1,1,3,0,3, 91,36} }, +{ {0,1,2,1,1,3,0,4, 153,14} }, +{ {0,1,2,1,1,3,1,0, 110,15} }, +{ {0,1,2,1,1,3,1,1, 70,24} }, +{ {0,1,2,1,1,3,1,2, 101,15} }, +{ {0,1,2,1,1,3,1,3, 89,31} }, +{ {0,1,2,1,1,3,1,4, 152,14} }, +{ {0,1,2,1,1,3,2,0, 108,45} }, +{ {0,1,2,1,1,3,2,1, 81,23} }, +{ {0,1,2,1,1,3,2,2, 68,44} }, +{ {0,1,2,1,1,3,2,3, 93,36} }, +{ {0,1,2,1,1,3,2,4, 149,26} }, +{ {0,1,2,1,1,3,3,0, 111,35} }, +{ {0,1,2,1,1,3,3,1, 76,23} }, +{ {0,1,2,1,1,3,3,2, 104,34} }, +{ {0,1,2,1,1,3,3,3, 65,30} }, +{ {0,1,2,1,1,3,3,4, 153,35} }, +{ {0,1,2,1,1,3,4,0, 147,35} }, +{ {0,1,2,1,1,3,4,1, 131,34} }, +{ {0,1,2,1,1,3,4,2, 142,15} }, +{ {0,1,2,1,1,3,4,3, 135,36} }, +{ {0,1,2,1,1,3,4,4, 149,5} }, +{ {0,1,2,1,1,3,4,5, 171,14} }, +{ {0,1,2,1,2,0,0,0, 40,5} }, +{ {0,1,2,1,2,0,0,1, 39,23} }, +{ {0,1,2,1,2,0,0,2, 51,14} }, +{ {0,1,2,1,2,0,0,3, 105,14} }, +{ {0,1,2,1,2,0,1,0, 48,37} }, +{ {0,1,2,1,2,0,1,1, 36,23} }, +{ {0,1,2,1,2,0,1,2, 50,15} }, +{ {0,1,2,1,2,0,1,3, 104,14} }, +{ {0,1,2,1,2,0,2,0, 29,46} }, +{ {0,1,2,1,2,0,2,1, 42,34} }, +{ {0,1,2,1,2,0,2,2, 18,29} }, +{ {0,1,2,1,2,0,2,3, 79,46} }, +{ {0,1,2,1,2,0,3,0, 91,35} }, +{ {0,1,2,1,2,0,3,1, 78,34} }, +{ {0,1,2,1,2,0,3,2, 99,14} }, +{ {0,1,2,1,2,0,3,3, 106,14} }, +{ {0,1,2,1,2,0,3,4, 141,14} }, +{ {0,1,2,1,2,1,0,0, 31,8} }, +{ {0,1,2,1,2,1,0,1, 12,8} }, +{ {0,1,2,1,2,1,0,2, 39,8} }, +{ {0,1,2,1,2,1,0,3, 87,8} }, +{ {0,1,2,1,2,1,1,0, 30,8} }, +{ {0,1,2,1,2,1,1,1, 6,22} }, +{ {0,1,2,1,2,1,1,2, 38,8} }, +{ {0,1,2,1,2,1,1,3, 85,8} }, +{ {0,1,2,1,2,1,2,0, 32,8} }, +{ {0,1,2,1,2,1,2,1, 10,22} }, +{ {0,1,2,1,2,1,2,2, 17,4} }, +{ {0,1,2,1,2,1,2,3, 88,27} }, +{ {0,1,2,1,2,1,3,0, 66,8} }, +{ {0,1,2,1,2,1,3,1, 60,8} }, +{ {0,1,2,1,2,1,3,2, 74,8} }, +{ {0,1,2,1,2,1,3,3, 86,8} }, +{ {0,1,2,1,2,1,3,4, 130,8} }, +{ {0,1,2,1,2,2,0,0, 47,4} }, +{ {0,1,2,1,2,2,0,1, 31,23} }, +{ {0,1,2,1,2,2,0,2, 40,10} }, +{ {0,1,2,1,2,2,0,3, 103,2} }, +{ {0,1,2,1,2,2,1,0, 53,15} }, +{ {0,1,2,1,2,2,1,1, 23,39} }, +{ {0,1,2,1,2,2,1,2, 27,31} }, +{ {0,1,2,1,2,2,1,3, 112,2} }, +{ {0,1,2,1,2,2,2,0, 24,28} }, +{ {0,1,2,1,2,2,2,1, 28,23} }, +{ {0,1,2,1,2,2,2,2, 8,4} }, +{ {0,1,2,1,2,2,2,3, 73,46} }, +{ {0,1,2,1,2,2,3,0, 108,35} }, +{ {0,1,2,1,2,2,3,1, 68,34} }, +{ {0,1,2,1,2,2,3,2, 81,31} }, +{ {0,1,2,1,2,2,3,3, 93,4} }, +{ {0,1,2,1,2,2,3,4, 149,14} }, +{ {0,1,2,1,2,3,0,0, 103,25} }, +{ {0,1,2,1,2,3,0,1, 87,23} }, +{ {0,1,2,1,2,3,0,2, 105,15} }, +{ {0,1,2,1,2,3,0,3, 97,35} }, +{ {0,1,2,1,2,3,0,4, 155,14} }, +{ {0,1,2,1,2,3,1,0, 111,15} }, +{ {0,1,2,1,2,3,1,1, 71,39} }, +{ {0,1,2,1,2,3,1,2, 102,15} }, +{ {0,1,2,1,2,3,1,3, 91,37} }, +{ {0,1,2,1,2,3,1,4, 153,15} }, +{ {0,1,2,1,2,3,2,0, 69,27} }, +{ {0,1,2,1,2,3,2,1, 83,27} }, +{ {0,1,2,1,2,3,2,2, 63,44} }, +{ {0,1,2,1,2,3,2,3, 84,46} }, +{ {0,1,2,1,2,3,2,4, 134,27} }, +{ {0,1,2,1,2,3,3,0, 114,15} }, +{ {0,1,2,1,2,3,3,1, 78,23} }, +{ {0,1,2,1,2,3,3,2, 105,34} }, +{ {0,1,2,1,2,3,3,3, 75,5} }, +{ {0,1,2,1,2,3,3,4, 156,14} }, +{ {0,1,2,1,2,3,4,0, 150,35} }, +{ {0,1,2,1,2,3,4,1, 133,34} }, +{ {0,1,2,1,2,3,4,2, 143,15} }, +{ {0,1,2,1,2,3,4,3, 138,35} }, +{ {0,1,2,1,2,3,4,4, 144,25} }, +{ {0,1,2,1,2,3,4,5, 173,14} }, +{ {0,1,2,1,3,0,0,0, 81,30} }, +{ {0,1,2,1,3,0,0,1, 74,23} }, +{ {0,1,2,1,3,0,0,2, 99,15} }, +{ {0,1,2,1,3,0,0,3, 105,35} }, +{ {0,1,2,1,3,0,0,4, 143,14} }, +{ {0,1,2,1,3,0,1,0, 92,35} }, +{ {0,1,2,1,3,0,1,1, 71,23} }, +{ {0,1,2,1,3,0,1,2, 98,15} }, +{ {0,1,2,1,3,0,1,3, 104,35} }, +{ {0,1,2,1,3,0,1,4, 142,14} }, +{ {0,1,2,1,3,0,2,0, 93,35} }, +{ {0,1,2,1,3,0,2,1, 75,34} }, +{ {0,1,2,1,3,0,2,2, 86,25} }, +{ {0,1,2,1,3,0,2,3, 106,35} }, +{ {0,1,2,1,3,0,2,4, 144,14} }, +{ {0,1,2,1,3,0,3,0, 94,35} }, +{ {0,1,2,1,3,0,3,1, 79,34} }, +{ {0,1,2,1,3,0,3,2, 100,14} }, +{ {0,1,2,1,3,0,3,3, 79,29} }, +{ {0,1,2,1,3,0,3,4, 145,14} }, +{ {0,1,2,1,3,0,4,0, 135,35} }, +{ {0,1,2,1,3,0,4,1, 128,34} }, +{ {0,1,2,1,3,0,4,2, 139,14} }, +{ {0,1,2,1,3,0,4,3, 141,35} }, +{ {0,1,2,1,3,0,4,4, 144,35} }, +{ {0,1,2,1,3,0,4,5, 169,14} }, +{ {0,1,2,1,3,1,0,0, 68,35} }, +{ {0,1,2,1,3,1,0,1, 60,23} }, +{ {0,1,2,1,3,1,0,2, 78,35} }, +{ {0,1,2,1,3,1,0,3, 78,8} }, +{ {0,1,2,1,3,1,0,4, 133,35} }, +{ {0,1,2,1,3,1,1,0, 67,35} }, +{ {0,1,2,1,3,1,1,1, 58,22} }, +{ {0,1,2,1,3,1,1,2, 76,35} }, +{ {0,1,2,1,3,1,1,3, 76,8} }, +{ {0,1,2,1,3,1,1,4, 131,35} }, +{ {0,1,2,1,3,1,2,0, 69,35} }, +{ {0,1,2,1,3,1,2,1, 59,23} }, +{ {0,1,2,1,3,1,2,2, 77,35} }, +{ {0,1,2,1,3,1,2,3, 79,8} }, +{ {0,1,2,1,3,1,2,4, 134,35} }, +{ {0,1,2,1,3,1,3,0, 69,8} }, +{ {0,1,2,1,3,1,3,1, 59,36} }, +{ {0,1,2,1,3,1,3,2, 79,35} }, +{ {0,1,2,1,3,1,3,3, 77,8} }, +{ {0,1,2,1,3,1,3,4, 134,8} }, +{ {0,1,2,1,3,1,4,0, 126,35} }, +{ {0,1,2,1,3,1,4,1, 124,35} }, +{ {0,1,2,1,3,1,4,2, 128,35} }, +{ {0,1,2,1,3,1,4,3, 128,8} }, +{ {0,1,2,1,3,1,4,4, 132,35} }, +{ {0,1,2,1,3,1,4,5, 167,35} }, +{ {0,1,2,1,3,2,0,0, 108,34} }, +{ {0,1,2,1,3,2,0,1, 66,23} }, +{ {0,1,2,1,3,2,0,2, 91,34} }, +{ {0,1,2,1,3,2,0,3, 114,14} }, +{ {0,1,2,1,3,2,0,4, 150,34} }, +{ {0,1,2,1,3,2,1,0, 107,34} }, +{ {0,1,2,1,3,2,1,1, 64,23} }, +{ {0,1,2,1,3,2,1,2, 90,34} }, +{ {0,1,2,1,3,2,1,3, 111,34} }, +{ {0,1,2,1,3,2,1,4, 147,34} }, +{ {0,1,2,1,3,2,2,0, 108,15} }, +{ {0,1,2,1,3,2,2,1, 65,23} }, +{ {0,1,2,1,3,2,2,2, 72,5} }, +{ {0,1,2,1,3,2,2,3, 103,44} }, +{ {0,1,2,1,3,2,2,4, 149,34} }, +{ {0,1,2,1,3,2,3,0, 109,14} }, +{ {0,1,2,1,3,2,3,1, 69,23} }, +{ {0,1,2,1,3,2,3,2, 94,34} }, +{ {0,1,2,1,3,2,3,3, 69,4} }, +{ {0,1,2,1,3,2,3,4, 151,14} }, +{ {0,1,2,1,3,2,4,0, 146,14} }, +{ {0,1,2,1,3,2,4,1, 126,34} }, +{ {0,1,2,1,3,2,4,2, 135,34} }, +{ {0,1,2,1,3,2,4,3, 150,14} }, +{ {0,1,2,1,3,2,4,4, 148,34} }, +{ {0,1,2,1,3,2,4,5, 170,14} }, +{ {0,1,2,1,3,3,0,0, 93,11} }, +{ {0,1,2,1,3,3,0,1, 86,23} }, +{ {0,1,2,1,3,3,0,2, 106,15} }, +{ {0,1,2,1,3,3,0,3, 75,10} }, +{ {0,1,2,1,3,3,0,4, 144,2} }, +{ {0,1,2,1,3,3,1,0, 108,3} }, +{ {0,1,2,1,3,3,1,1, 72,39} }, +{ {0,1,2,1,3,3,1,2, 103,34} }, +{ {0,1,2,1,3,3,1,3, 65,31} }, +{ {0,1,2,1,3,3,1,4, 149,10} }, +{ {0,1,2,1,3,3,2,0, 113,15} }, +{ {0,1,2,1,3,3,2,1, 82,23} }, +{ {0,1,2,1,3,3,2,2, 82,25} }, +{ {0,1,2,1,3,3,2,3, 82,31} }, +{ {0,1,2,1,3,3,2,4, 154,15} }, +{ {0,1,2,1,3,3,3,0, 69,11} }, +{ {0,1,2,1,3,3,3,1, 77,23} }, +{ {0,1,2,1,3,3,3,2, 79,28} }, +{ {0,1,2,1,3,3,3,3, 59,31} }, +{ {0,1,2,1,3,3,3,4, 134,11} }, +{ {0,1,2,1,3,3,4,0, 148,35} }, +{ {0,1,2,1,3,3,4,1, 132,34} }, +{ {0,1,2,1,3,3,4,2, 144,34} }, +{ {0,1,2,1,3,3,4,3, 129,31} }, +{ {0,1,2,1,3,3,4,4, 137,10} }, +{ {0,1,2,1,3,3,4,5, 172,35} }, +{ {0,1,2,1,3,4,0,0, 149,15} }, +{ {0,1,2,1,3,4,0,1, 130,23} }, +{ {0,1,2,1,3,4,0,2, 141,15} }, +{ {0,1,2,1,3,4,0,3, 156,15} }, +{ {0,1,2,1,3,4,0,4, 138,34} }, +{ {0,1,2,1,3,4,0,5, 173,15} }, +{ {0,1,2,1,3,4,1,0, 147,15} }, +{ {0,1,2,1,3,4,1,1, 127,39} }, +{ {0,1,2,1,3,4,1,2, 140,15} }, +{ {0,1,2,1,3,4,1,3, 153,34} }, +{ {0,1,2,1,3,4,1,4, 135,37} }, +{ {0,1,2,1,3,4,1,5, 171,15} }, +{ {0,1,2,1,3,4,2,0, 148,45} }, +{ {0,1,2,1,3,4,2,1, 129,23} }, +{ {0,1,2,1,3,4,2,2, 132,44} }, +{ {0,1,2,1,3,4,2,3, 144,44} }, +{ {0,1,2,1,3,4,2,4, 137,34} }, +{ {0,1,2,1,3,4,2,5, 172,15} }, +{ {0,1,2,1,3,4,3,0, 151,15} }, +{ {0,1,2,1,3,4,3,1, 134,23} }, +{ {0,1,2,1,3,4,3,2, 145,15} }, +{ {0,1,2,1,3,4,3,3, 134,4} }, +{ {0,1,2,1,3,4,3,4, 136,36} }, +{ {0,1,2,1,3,4,3,5, 174,14} }, +{ {0,1,2,1,3,4,4,0, 150,15} }, +{ {0,1,2,1,3,4,4,1, 128,23} }, +{ {0,1,2,1,3,4,4,2, 141,34} }, +{ {0,1,2,1,3,4,4,3, 155,34} }, +{ {0,1,2,1,3,4,4,4, 129,30} }, +{ {0,1,2,1,3,4,4,5, 173,34} }, +{ {0,1,2,1,3,4,5,0, 170,15} }, +{ {0,1,2,1,3,4,5,1, 167,34} }, +{ {0,1,2,1,3,4,5,2, 169,15} }, +{ {0,1,2,1,3,4,5,3, 173,35} }, +{ {0,1,2,1,3,4,5,4, 168,35} }, +{ {0,1,2,1,3,4,5,5, 172,34} }, +{ {0,1,2,1,3,4,5,6, 182,14} }, +{ {0,1,2,2,0,0,0,0, 8,28} }, +{ {0,1,2,2,0,0,0,1, 18,2} }, +{ {0,1,2,2,0,0,0,2, 17,28} }, +{ {0,1,2,2,0,0,0,3, 63,12} }, +{ {0,1,2,2,0,0,1,0, 24,2} }, +{ {0,1,2,2,0,0,1,1, 29,2} }, +{ {0,1,2,2,0,0,1,2, 32,2} }, +{ {0,1,2,2,0,0,1,3, 69,33} }, +{ {0,1,2,2,0,0,2,0, 28,45} }, +{ {0,1,2,2,0,0,2,1, 42,2} }, +{ {0,1,2,2,0,0,2,2, 10,25} }, +{ {0,1,2,2,0,0,2,3, 83,33} }, +{ {0,1,2,2,0,0,3,0, 73,2} }, +{ {0,1,2,2,0,0,3,1, 79,2} }, +{ {0,1,2,2,0,0,3,2, 88,2} }, +{ {0,1,2,2,0,0,3,3, 84,2} }, +{ {0,1,2,2,0,0,3,4, 134,33} }, +{ {0,1,2,2,0,1,0,0, 37,29} }, +{ {0,1,2,2,0,1,0,1, 43,12} }, +{ {0,1,2,2,0,1,0,2, 41,47} }, +{ {0,1,2,2,0,1,0,3, 82,12} }, +{ {0,1,2,2,0,1,1,0, 47,33} }, +{ {0,1,2,2,0,1,1,1, 37,30} }, +{ {0,1,2,2,0,1,1,2, 29,38} }, +{ {0,1,2,2,0,1,1,3, 93,33} }, +{ {0,1,2,2,0,1,2,0, 29,45} }, +{ {0,1,2,2,0,1,2,1, 41,36} }, +{ {0,1,2,2,0,1,2,2, 11,44} }, +{ {0,1,2,2,0,1,2,3, 84,45} }, +{ {0,1,2,2,0,1,3,0, 93,42} }, +{ {0,1,2,2,0,1,3,1, 82,9} }, +{ {0,1,2,2,0,1,3,2, 84,38} }, +{ {0,1,2,2,0,1,3,3, 96,32} }, +{ {0,1,2,2,0,1,3,4, 137,32} }, +{ {0,1,2,2,0,2,0,0, 23,29} }, +{ {0,1,2,2,0,2,0,1, 31,12} }, +{ {0,1,2,2,0,2,0,2, 28,47} }, +{ {0,1,2,2,0,2,0,3, 68,12} }, +{ {0,1,2,2,0,2,1,0, 53,33} }, +{ {0,1,2,2,0,2,1,1, 47,24} }, +{ {0,1,2,2,0,2,1,2, 24,22} }, +{ {0,1,2,2,0,2,1,3, 108,13} }, +{ {0,1,2,2,0,2,2,0, 27,45} }, +{ {0,1,2,2,0,2,2,1, 40,6} }, +{ {0,1,2,2,0,2,2,2, 8,24} }, +{ {0,1,2,2,0,2,2,3, 81,45} }, +{ {0,1,2,2,0,2,3,0, 112,16} }, +{ {0,1,2,2,0,2,3,1, 103,16} }, +{ {0,1,2,2,0,2,3,2, 73,22} }, +{ {0,1,2,2,0,2,3,3, 93,24} }, +{ {0,1,2,2,0,2,3,4, 149,32} }, +{ {0,1,2,2,0,3,0,0, 72,29} }, +{ {0,1,2,2,0,3,0,1, 86,12} }, +{ {0,1,2,2,0,3,0,2, 77,7} }, +{ {0,1,2,2,0,3,0,3, 82,47} }, +{ {0,1,2,2,0,3,0,4, 132,12} }, +{ {0,1,2,2,0,3,1,0, 108,17} }, +{ {0,1,2,2,0,3,1,1, 93,7} }, +{ {0,1,2,2,0,3,1,2, 69,7} }, +{ {0,1,2,2,0,3,1,3, 113,13} }, +{ {0,1,2,2,0,3,1,4, 148,13} }, +{ {0,1,2,2,0,3,2,0, 65,45} }, +{ {0,1,2,2,0,3,2,1, 75,6} }, +{ {0,1,2,2,0,3,2,2, 59,45} }, +{ {0,1,2,2,0,3,2,3, 82,45} }, +{ {0,1,2,2,0,3,2,4, 129,45} }, +{ {0,1,2,2,0,3,3,0, 103,12} }, +{ {0,1,2,2,0,3,3,1, 106,7} }, +{ {0,1,2,2,0,3,3,2, 79,38} }, +{ {0,1,2,2,0,3,3,3, 82,5} }, +{ {0,1,2,2,0,3,3,4, 144,12} }, +{ {0,1,2,2,0,3,4,0, 149,6} }, +{ {0,1,2,2,0,3,4,1, 144,16} }, +{ {0,1,2,2,0,3,4,2, 134,7} }, +{ {0,1,2,2,0,3,4,3, 154,17} }, +{ {0,1,2,2,0,3,4,4, 137,6} }, +{ {0,1,2,2,0,3,4,5, 172,13} }, +{ {0,1,2,2,1,0,0,0, 40,30} }, +{ {0,1,2,2,1,0,0,1, 51,6} }, +{ {0,1,2,2,1,0,0,2, 39,7} }, +{ {0,1,2,2,1,0,0,3, 105,17} }, +{ {0,1,2,2,1,0,1,0, 47,31} }, +{ {0,1,2,2,1,0,1,1, 40,29} }, +{ {0,1,2,2,1,0,1,2, 31,7} }, +{ {0,1,2,2,1,0,1,3, 103,47} }, +{ {0,1,2,2,1,0,2,0, 31,6} }, +{ {0,1,2,2,1,0,2,1, 39,6} }, +{ {0,1,2,2,1,0,2,2, 12,6} }, +{ {0,1,2,2,1,0,2,3, 87,6} }, +{ {0,1,2,2,1,0,3,0, 103,36} }, +{ {0,1,2,2,1,0,3,1, 105,16} }, +{ {0,1,2,2,1,0,3,2, 87,7} }, +{ {0,1,2,2,1,0,3,3, 97,6} }, +{ {0,1,2,2,1,0,3,4, 155,17} }, +{ {0,1,2,2,1,1,0,0, 29,3} }, +{ {0,1,2,2,1,1,0,1, 18,3} }, +{ {0,1,2,2,1,1,0,2, 42,3} }, +{ {0,1,2,2,1,1,0,3, 79,3} }, +{ {0,1,2,2,1,1,1,0, 24,3} }, +{ {0,1,2,2,1,1,1,1, 8,31} }, +{ {0,1,2,2,1,1,1,2, 28,38} }, +{ {0,1,2,2,1,1,1,3, 73,3} }, +{ {0,1,2,2,1,1,2,0, 32,3} }, +{ {0,1,2,2,1,1,2,1, 17,31} }, +{ {0,1,2,2,1,1,2,2, 10,24} }, +{ {0,1,2,2,1,1,2,3, 88,3} }, +{ {0,1,2,2,1,1,3,0, 69,42} }, +{ {0,1,2,2,1,1,3,1, 63,9} }, +{ {0,1,2,2,1,1,3,2, 83,42} }, +{ {0,1,2,2,1,1,3,3, 84,3} }, +{ {0,1,2,2,1,1,3,4, 134,42} }, +{ {0,1,2,2,1,2,0,0, 48,24} }, +{ {0,1,2,2,1,2,0,1, 50,7} }, +{ {0,1,2,2,1,2,0,2, 36,38} }, +{ {0,1,2,2,1,2,0,3, 104,17} }, +{ {0,1,2,2,1,2,1,0, 53,28} }, +{ {0,1,2,2,1,2,1,1, 27,4} }, +{ {0,1,2,2,1,2,1,2, 23,22} }, +{ {0,1,2,2,1,2,1,3, 112,47} }, +{ {0,1,2,2,1,2,2,0, 30,6} }, +{ {0,1,2,2,1,2,2,1, 38,6} }, +{ {0,1,2,2,1,2,2,2, 6,24} }, +{ {0,1,2,2,1,2,2,3, 85,6} }, +{ {0,1,2,2,1,2,3,0, 111,16} }, +{ {0,1,2,2,1,2,3,1, 102,16} }, +{ {0,1,2,2,1,2,3,2, 71,22} }, +{ {0,1,2,2,1,2,3,3, 91,24} }, +{ {0,1,2,2,1,2,3,4, 153,16} }, +{ {0,1,2,2,1,3,0,0, 91,6} }, +{ {0,1,2,2,1,3,0,1, 99,6} }, +{ {0,1,2,2,1,3,0,2, 78,7} }, +{ {0,1,2,2,1,3,0,3, 106,17} }, +{ {0,1,2,2,1,3,0,4, 141,17} }, +{ {0,1,2,2,1,3,1,0, 108,6} }, +{ {0,1,2,2,1,3,1,1, 81,4} }, +{ {0,1,2,2,1,3,1,2, 68,7} }, +{ {0,1,2,2,1,3,1,3, 93,31} }, +{ {0,1,2,2,1,3,1,4, 149,17} }, +{ {0,1,2,2,1,3,2,0, 66,6} }, +{ {0,1,2,2,1,3,2,1, 74,6} }, +{ {0,1,2,2,1,3,2,2, 60,6} }, +{ {0,1,2,2,1,3,2,3, 86,6} }, +{ {0,1,2,2,1,3,2,4, 130,6} }, +{ {0,1,2,2,1,3,3,0, 114,16} }, +{ {0,1,2,2,1,3,3,1, 105,7} }, +{ {0,1,2,2,1,3,3,2, 78,38} }, +{ {0,1,2,2,1,3,3,3, 75,30} }, +{ {0,1,2,2,1,3,3,4, 156,17} }, +{ {0,1,2,2,1,3,4,0, 150,6} }, +{ {0,1,2,2,1,3,4,1, 143,16} }, +{ {0,1,2,2,1,3,4,2, 133,7} }, +{ {0,1,2,2,1,3,4,3, 144,36} }, +{ {0,1,2,2,1,3,4,4, 138,6} }, +{ {0,1,2,2,1,3,4,5, 173,17} }, +{ {0,1,2,2,2,0,0,0, 27,5} }, +{ {0,1,2,2,2,0,0,1, 50,6} }, +{ {0,1,2,2,2,0,0,2, 38,7} }, +{ {0,1,2,2,2,0,0,3, 102,17} }, +{ {0,1,2,2,2,0,1,0, 53,31} }, +{ {0,1,2,2,2,0,1,1, 48,25} }, +{ {0,1,2,2,2,0,1,2, 30,7} }, +{ {0,1,2,2,2,0,1,3, 111,17} }, +{ {0,1,2,2,2,0,2,0, 23,27} }, +{ {0,1,2,2,2,0,2,1, 36,27} }, +{ {0,1,2,2,2,0,2,2, 6,25} }, +{ {0,1,2,2,2,0,2,3, 71,27} }, +{ {0,1,2,2,2,0,3,0, 112,36} }, +{ {0,1,2,2,2,0,3,1, 104,16} }, +{ {0,1,2,2,2,0,3,2, 85,7} }, +{ {0,1,2,2,2,0,3,3, 91,25} }, +{ {0,1,2,2,2,0,3,4, 153,17} }, +{ {0,1,2,2,2,1,0,0, 47,25} }, +{ {0,1,2,2,2,1,0,1, 31,9} }, +{ {0,1,2,2,2,1,0,2, 40,7} }, +{ {0,1,2,2,2,1,0,3, 103,17} }, +{ {0,1,2,2,2,1,1,0, 53,42} }, +{ {0,1,2,2,2,1,1,1, 23,30} }, +{ {0,1,2,2,2,1,1,2, 27,38} }, +{ {0,1,2,2,2,1,1,3, 112,17} }, +{ {0,1,2,2,2,1,2,0, 24,27} }, +{ {0,1,2,2,2,1,2,1, 28,36} }, +{ {0,1,2,2,2,1,2,2, 8,25} }, +{ {0,1,2,2,2,1,2,3, 73,27} }, +{ {0,1,2,2,2,1,3,0, 108,8} }, +{ {0,1,2,2,2,1,3,1, 68,9} }, +{ {0,1,2,2,2,1,3,2, 81,38} }, +{ {0,1,2,2,2,1,3,3, 93,25} }, +{ {0,1,2,2,2,1,3,4, 149,43} }, +{ {0,1,2,2,2,2,0,0, 45,4} }, +{ {0,1,2,2,2,2,0,1, 49,6} }, +{ {0,1,2,2,2,2,0,2, 35,22} }, +{ {0,1,2,2,2,2,0,3, 101,2} }, +{ {0,1,2,2,2,2,1,0, 52,7} }, +{ {0,1,2,2,2,2,1,1, 45,5} }, +{ {0,1,2,2,2,2,1,2, 21,22} }, +{ {0,1,2,2,2,2,1,3, 110,2} }, +{ {0,1,2,2,2,2,2,0, 21,27} }, +{ {0,1,2,2,2,2,2,1, 35,27} }, +{ {0,1,2,2,2,2,2,2, 3,4} }, +{ {0,1,2,2,2,2,2,3, 70,27} }, +{ {0,1,2,2,2,2,3,0, 110,3} }, +{ {0,1,2,2,2,2,3,1, 101,3} }, +{ {0,1,2,2,2,2,3,2, 70,22} }, +{ {0,1,2,2,2,2,3,3, 89,4} }, +{ {0,1,2,2,2,2,3,4, 152,2} }, +{ {0,1,2,2,2,3,0,0, 90,6} }, +{ {0,1,2,2,2,3,0,1, 98,6} }, +{ {0,1,2,2,2,3,0,2, 76,7} }, +{ {0,1,2,2,2,3,0,3, 103,6} }, +{ {0,1,2,2,2,3,0,4, 140,17} }, +{ {0,1,2,2,2,3,1,0, 107,17} }, +{ {0,1,2,2,2,3,1,1, 92,7} }, +{ {0,1,2,2,2,3,1,2, 67,7} }, +{ {0,1,2,2,2,3,1,3, 108,37} }, +{ {0,1,2,2,2,3,1,4, 147,17} }, +{ {0,1,2,2,2,3,2,0, 64,45} }, +{ {0,1,2,2,2,3,2,1, 71,45} }, +{ {0,1,2,2,2,3,2,2, 58,44} }, +{ {0,1,2,2,2,3,2,3, 72,27} }, +{ {0,1,2,2,2,3,2,4, 127,27} }, +{ {0,1,2,2,2,3,3,0, 111,6} }, +{ {0,1,2,2,2,3,3,1, 104,7} }, +{ {0,1,2,2,2,3,3,2, 76,38} }, +{ {0,1,2,2,2,3,3,3, 65,5} }, +{ {0,1,2,2,2,3,3,4, 153,6} }, +{ {0,1,2,2,2,3,4,0, 147,6} }, +{ {0,1,2,2,2,3,4,1, 142,16} }, +{ {0,1,2,2,2,3,4,2, 131,7} }, +{ {0,1,2,2,2,3,4,3, 149,30} }, +{ {0,1,2,2,2,3,4,4, 135,25} }, +{ {0,1,2,2,2,3,4,5, 171,17} }, +{ {0,1,2,2,3,0,0,0, 81,5} }, +{ {0,1,2,2,3,0,0,1, 99,7} }, +{ {0,1,2,2,3,0,0,2, 74,7} }, +{ {0,1,2,2,3,0,0,3, 105,6} }, +{ {0,1,2,2,3,0,0,4, 143,17} }, +{ {0,1,2,2,3,0,1,0, 108,7} }, +{ {0,1,2,2,3,0,1,1, 91,7} }, +{ {0,1,2,2,3,0,1,2, 66,7} }, +{ {0,1,2,2,3,0,1,3, 114,17} }, +{ {0,1,2,2,3,0,1,4, 150,7} }, +{ {0,1,2,2,3,0,2,0, 68,6} }, +{ {0,1,2,2,3,0,2,1, 78,6} }, +{ {0,1,2,2,3,0,2,2, 60,7} }, +{ {0,1,2,2,3,0,2,3, 78,45} }, +{ {0,1,2,2,3,0,2,4, 133,6} }, +{ {0,1,2,2,3,0,3,0, 93,28} }, +{ {0,1,2,2,3,0,3,1, 106,16} }, +{ {0,1,2,2,3,0,3,2, 86,7} }, +{ {0,1,2,2,3,0,3,3, 75,29} }, +{ {0,1,2,2,3,0,3,4, 144,47} }, +{ {0,1,2,2,3,0,4,0, 149,16} }, +{ {0,1,2,2,3,0,4,1, 141,16} }, +{ {0,1,2,2,3,0,4,2, 130,7} }, +{ {0,1,2,2,3,0,4,3, 156,16} }, +{ {0,1,2,2,3,0,4,4, 138,7} }, +{ {0,1,2,2,3,0,4,5, 173,16} }, +{ {0,1,2,2,3,1,0,0, 93,6} }, +{ {0,1,2,2,3,1,0,1, 86,9} }, +{ {0,1,2,2,3,1,0,2, 75,7} }, +{ {0,1,2,2,3,1,0,3, 106,6} }, +{ {0,1,2,2,3,1,0,4, 144,17} }, +{ {0,1,2,2,3,1,1,0, 108,16} }, +{ {0,1,2,2,3,1,1,1, 72,30} }, +{ {0,1,2,2,3,1,1,2, 65,38} }, +{ {0,1,2,2,3,1,1,3, 103,9} }, +{ {0,1,2,2,3,1,1,4, 149,7} }, +{ {0,1,2,2,3,1,2,0, 69,6} }, +{ {0,1,2,2,3,1,2,1, 77,6} }, +{ {0,1,2,2,3,1,2,2, 59,38} }, +{ {0,1,2,2,3,1,2,3, 79,45} }, +{ {0,1,2,2,3,1,2,4, 134,6} }, +{ {0,1,2,2,3,1,3,0, 113,8} }, +{ {0,1,2,2,3,1,3,1, 82,36} }, +{ {0,1,2,2,3,1,3,2, 82,38} }, +{ {0,1,2,2,3,1,3,3, 82,4} }, +{ {0,1,2,2,3,1,3,4, 154,16} }, +{ {0,1,2,2,3,1,4,0, 148,8} }, +{ {0,1,2,2,3,1,4,1, 132,9} }, +{ {0,1,2,2,3,1,4,2, 129,38} }, +{ {0,1,2,2,3,1,4,3, 144,9} }, +{ {0,1,2,2,3,1,4,4, 137,7} }, +{ {0,1,2,2,3,1,4,5, 172,8} }, +{ {0,1,2,2,3,2,0,0, 92,6} }, +{ {0,1,2,2,3,2,0,1, 98,7} }, +{ {0,1,2,2,3,2,0,2, 71,38} }, +{ {0,1,2,2,3,2,0,3, 104,6} }, +{ {0,1,2,2,3,2,0,4, 142,17} }, +{ {0,1,2,2,3,2,1,0, 107,7} }, +{ {0,1,2,2,3,2,1,1, 90,7} }, +{ {0,1,2,2,3,2,1,2, 64,38} }, +{ {0,1,2,2,3,2,1,3, 111,7} }, +{ {0,1,2,2,3,2,1,4, 147,7} }, +{ {0,1,2,2,3,2,2,0, 67,6} }, +{ {0,1,2,2,3,2,2,1, 76,6} }, +{ {0,1,2,2,3,2,2,2, 58,39} }, +{ {0,1,2,2,3,2,2,3, 76,45} }, +{ {0,1,2,2,3,2,2,4, 131,6} }, +{ {0,1,2,2,3,2,3,0, 108,46} }, +{ {0,1,2,2,3,2,3,1, 103,7} }, +{ {0,1,2,2,3,2,3,2, 72,22} }, +{ {0,1,2,2,3,2,3,3, 65,4} }, +{ {0,1,2,2,3,2,3,4, 149,29} }, +{ {0,1,2,2,3,2,4,0, 147,16} }, +{ {0,1,2,2,3,2,4,1, 140,16} }, +{ {0,1,2,2,3,2,4,2, 127,22} }, +{ {0,1,2,2,3,2,4,3, 153,7} }, +{ {0,1,2,2,3,2,4,4, 135,24} }, +{ {0,1,2,2,3,2,4,5, 171,16} }, +{ {0,1,2,2,3,3,0,0, 94,6} }, +{ {0,1,2,2,3,3,0,1, 100,6} }, +{ {0,1,2,2,3,3,0,2, 79,7} }, +{ {0,1,2,2,3,3,0,3, 79,10} }, +{ {0,1,2,2,3,3,0,4, 145,17} }, +{ {0,1,2,2,3,3,1,0, 109,7} }, +{ {0,1,2,2,3,3,1,1, 94,7} }, +{ {0,1,2,2,3,3,1,2, 69,38} }, +{ {0,1,2,2,3,3,1,3, 69,31} }, +{ {0,1,2,2,3,3,1,4, 151,17} }, +{ {0,1,2,2,3,3,2,0, 69,45} }, +{ {0,1,2,2,3,3,2,1, 79,6} }, +{ {0,1,2,2,3,3,2,2, 59,25} }, +{ {0,1,2,2,3,3,2,3, 77,45} }, +{ {0,1,2,2,3,3,2,4, 134,45} }, +{ {0,1,2,2,3,3,3,0, 69,28} }, +{ {0,1,2,2,3,3,3,1, 79,11} }, +{ {0,1,2,2,3,3,3,2, 77,38} }, +{ {0,1,2,2,3,3,3,3, 59,4} }, +{ {0,1,2,2,3,3,3,4, 134,28} }, +{ {0,1,2,2,3,3,4,0, 151,16} }, +{ {0,1,2,2,3,3,4,1, 145,16} }, +{ {0,1,2,2,3,3,4,2, 134,38} }, +{ {0,1,2,2,3,3,4,3, 134,31} }, +{ {0,1,2,2,3,3,4,4, 136,25} }, +{ {0,1,2,2,3,3,4,5, 174,17} }, +{ {0,1,2,2,3,4,0,0, 135,6} }, +{ {0,1,2,2,3,4,0,1, 139,6} }, +{ {0,1,2,2,3,4,0,2, 128,7} }, +{ {0,1,2,2,3,4,0,3, 141,6} }, +{ {0,1,2,2,3,4,0,4, 144,6} }, +{ {0,1,2,2,3,4,0,5, 169,17} }, +{ {0,1,2,2,3,4,1,0, 146,17} }, +{ {0,1,2,2,3,4,1,1, 135,7} }, +{ {0,1,2,2,3,4,1,2, 126,7} }, +{ {0,1,2,2,3,4,1,3, 150,17} }, +{ {0,1,2,2,3,4,1,4, 148,7} }, +{ {0,1,2,2,3,4,1,5, 170,17} }, +{ {0,1,2,2,3,4,2,0, 126,6} }, +{ {0,1,2,2,3,4,2,1, 128,6} }, +{ {0,1,2,2,3,4,2,2, 124,6} }, +{ {0,1,2,2,3,4,2,3, 128,45} }, +{ {0,1,2,2,3,4,2,4, 132,6} }, +{ {0,1,2,2,3,4,2,5, 167,6} }, +{ {0,1,2,2,3,4,3,0, 148,6} }, +{ {0,1,2,2,3,4,3,1, 144,7} }, +{ {0,1,2,2,3,4,3,2, 132,7} }, +{ {0,1,2,2,3,4,3,3, 129,4} }, +{ {0,1,2,2,3,4,3,4, 137,29} }, +{ {0,1,2,2,3,4,3,5, 172,6} }, +{ {0,1,2,2,3,4,4,0, 150,16} }, +{ {0,1,2,2,3,4,4,1, 141,7} }, +{ {0,1,2,2,3,4,4,2, 128,38} }, +{ {0,1,2,2,3,4,4,3, 155,7} }, +{ {0,1,2,2,3,4,4,4, 129,5} }, +{ {0,1,2,2,3,4,4,5, 173,7} }, +{ {0,1,2,2,3,4,5,0, 170,16} }, +{ {0,1,2,2,3,4,5,1, 169,16} }, +{ {0,1,2,2,3,4,5,2, 167,7} }, +{ {0,1,2,2,3,4,5,3, 173,6} }, +{ {0,1,2,2,3,4,5,4, 172,7} }, +{ {0,1,2,2,3,4,5,5, 168,6} }, +{ {0,1,2,2,3,4,5,6, 182,17} }, +{ {0,1,2,3,0,0,0,0, 58,11} }, +{ {0,1,2,3,0,0,0,1, 61,2} }, +{ {0,1,2,3,0,0,0,2, 61,28} }, +{ {0,1,2,3,0,0,0,3, 63,11} }, +{ {0,1,2,3,0,0,0,4, 125,33} }, +{ {0,1,2,3,0,0,1,0, 64,2} }, +{ {0,1,2,3,0,0,1,1, 65,2} }, +{ {0,1,2,3,0,0,1,2, 66,2} }, +{ {0,1,2,3,0,0,1,3, 69,2} }, +{ {0,1,2,3,0,0,1,4, 126,33} }, +{ {0,1,2,3,0,0,2,0, 72,2} }, +{ {0,1,2,3,0,0,2,1, 75,2} }, +{ {0,1,2,3,0,0,2,2, 80,2} }, +{ {0,1,2,3,0,0,2,3, 84,33} }, +{ {0,1,2,3,0,0,2,4, 129,33} }, +{ {0,1,2,3,0,0,3,0, 71,10} }, +{ {0,1,2,3,0,0,3,1, 78,2} }, +{ {0,1,2,3,0,0,3,2, 87,2} }, +{ {0,1,2,3,0,0,3,3, 83,2} }, +{ {0,1,2,3,0,0,3,4, 133,33} }, +{ {0,1,2,3,0,0,4,0, 127,2} }, +{ {0,1,2,3,0,0,4,1, 128,2} }, +{ {0,1,2,3,0,0,4,2, 130,2} }, +{ {0,1,2,3,0,0,4,3, 134,2} }, +{ {0,1,2,3,0,0,4,4, 129,2} }, +{ {0,1,2,3,0,0,4,5, 167,33} }, +{ {0,1,2,3,0,1,0,0, 72,47} }, +{ {0,1,2,3,0,1,0,1, 80,12} }, +{ {0,1,2,3,0,1,0,2, 75,47} }, +{ {0,1,2,3,0,1,0,3, 84,12} }, +{ {0,1,2,3,0,1,0,4, 129,12} }, +{ {0,1,2,3,0,1,1,0, 90,33} }, +{ {0,1,2,3,0,1,1,1, 72,36} }, +{ {0,1,2,3,0,1,1,2, 91,33} }, +{ {0,1,2,3,0,1,1,3, 94,33} }, +{ {0,1,2,3,0,1,1,4, 135,33} }, +{ {0,1,2,3,0,1,2,0, 94,42} }, +{ {0,1,2,3,0,1,2,1, 84,9} }, +{ {0,1,2,3,0,1,2,2, 84,44} }, +{ {0,1,2,3,0,1,2,3, 95,33} }, +{ {0,1,2,3,0,1,2,4, 136,32} }, +{ {0,1,2,3,0,1,3,0, 91,42} }, +{ {0,1,2,3,0,1,3,1, 75,36} }, +{ {0,1,2,3,0,1,3,2, 97,32} }, +{ {0,1,2,3,0,1,3,3, 84,39} }, +{ {0,1,2,3,0,1,3,4, 138,32} }, +{ {0,1,2,3,0,1,4,0, 135,42} }, +{ {0,1,2,3,0,1,4,1, 129,9} }, +{ {0,1,2,3,0,1,4,2, 138,43} }, +{ {0,1,2,3,0,1,4,3, 136,43} }, +{ {0,1,2,3,0,1,4,4, 137,33} }, +{ {0,1,2,3,0,1,4,5, 168,32} }, +{ {0,1,2,3,0,2,0,0, 64,47} }, +{ {0,1,2,3,0,2,0,1, 66,12} }, +{ {0,1,2,3,0,2,0,2, 65,47} }, +{ {0,1,2,3,0,2,0,3, 69,47} }, +{ {0,1,2,3,0,2,0,4, 126,12} }, +{ {0,1,2,3,0,2,1,0, 107,12} }, +{ {0,1,2,3,0,2,1,1, 108,12} }, +{ {0,1,2,3,0,2,1,2, 108,33} }, +{ {0,1,2,3,0,2,1,3, 109,12} }, +{ {0,1,2,3,0,2,1,4, 146,32} }, +{ {0,1,2,3,0,2,2,0, 90,12} }, +{ {0,1,2,3,0,2,2,1, 91,12} }, +{ {0,1,2,3,0,2,2,2, 72,25} }, +{ {0,1,2,3,0,2,2,3, 94,12} }, +{ {0,1,2,3,0,2,2,4, 135,12} }, +{ {0,1,2,3,0,2,3,0, 111,12} }, +{ {0,1,2,3,0,2,3,1, 114,32} }, +{ {0,1,2,3,0,2,3,2, 103,30} }, +{ {0,1,2,3,0,2,3,3, 69,24} }, +{ {0,1,2,3,0,2,3,4, 150,32} }, +{ {0,1,2,3,0,2,4,0, 147,12} }, +{ {0,1,2,3,0,2,4,1, 150,12} }, +{ {0,1,2,3,0,2,4,2, 149,12} }, +{ {0,1,2,3,0,2,4,3, 151,32} }, +{ {0,1,2,3,0,2,4,4, 148,12} }, +{ {0,1,2,3,0,2,4,5, 170,32} }, +{ {0,1,2,3,0,3,0,0, 71,29} }, +{ {0,1,2,3,0,3,0,1, 87,12} }, +{ {0,1,2,3,0,3,0,2, 78,47} }, +{ {0,1,2,3,0,3,0,3, 83,47} }, +{ {0,1,2,3,0,3,0,4, 133,12} }, +{ {0,1,2,3,0,3,1,0, 111,33} }, +{ {0,1,2,3,0,3,1,1, 103,5} }, +{ {0,1,2,3,0,3,1,2, 114,13} }, +{ {0,1,2,3,0,3,1,3, 69,37} }, +{ {0,1,2,3,0,3,1,4, 150,13} }, +{ {0,1,2,3,0,3,2,0, 91,27} }, +{ {0,1,2,3,0,3,2,1, 97,13} }, +{ {0,1,2,3,0,3,2,2, 75,25} }, +{ {0,1,2,3,0,3,2,3, 84,22} }, +{ {0,1,2,3,0,3,2,4, 138,13} }, +{ {0,1,2,3,0,3,3,0, 102,33} }, +{ {0,1,2,3,0,3,3,1, 105,33} }, +{ {0,1,2,3,0,3,3,2, 105,12} }, +{ {0,1,2,3,0,3,3,3, 63,30} }, +{ {0,1,2,3,0,3,3,4, 143,33} }, +{ {0,1,2,3,0,3,4,0, 153,33} }, +{ {0,1,2,3,0,3,4,1, 155,32} }, +{ {0,1,2,3,0,3,4,2, 156,32} }, +{ {0,1,2,3,0,3,4,3, 134,37} }, +{ {0,1,2,3,0,3,4,4, 144,5} }, +{ {0,1,2,3,0,3,4,5, 173,32} }, +{ {0,1,2,3,0,4,0,0, 127,47} }, +{ {0,1,2,3,0,4,0,1, 130,12} }, +{ {0,1,2,3,0,4,0,2, 128,47} }, +{ {0,1,2,3,0,4,0,3, 134,47} }, +{ {0,1,2,3,0,4,0,4, 129,47} }, +{ {0,1,2,3,0,4,0,5, 167,12} }, +{ {0,1,2,3,0,4,1,0, 147,33} }, +{ {0,1,2,3,0,4,1,1, 149,33} }, +{ {0,1,2,3,0,4,1,2, 150,33} }, +{ {0,1,2,3,0,4,1,3, 151,13} }, +{ {0,1,2,3,0,4,1,4, 148,33} }, +{ {0,1,2,3,0,4,1,5, 170,13} }, +{ {0,1,2,3,0,4,2,0, 135,27} }, +{ {0,1,2,3,0,4,2,1, 138,26} }, +{ {0,1,2,3,0,4,2,2, 129,44} }, +{ {0,1,2,3,0,4,2,3, 136,26} }, +{ {0,1,2,3,0,4,2,4, 137,12} }, +{ {0,1,2,3,0,4,2,5, 168,13} }, +{ {0,1,2,3,0,4,3,0, 153,12} }, +{ {0,1,2,3,0,4,3,1, 156,13} }, +{ {0,1,2,3,0,4,3,2, 155,13} }, +{ {0,1,2,3,0,4,3,3, 134,24} }, +{ {0,1,2,3,0,4,3,4, 144,30} }, +{ {0,1,2,3,0,4,3,5, 173,13} }, +{ {0,1,2,3,0,4,4,0, 140,33} }, +{ {0,1,2,3,0,4,4,1, 141,33} }, +{ {0,1,2,3,0,4,4,2, 141,12} }, +{ {0,1,2,3,0,4,4,3, 145,33} }, +{ {0,1,2,3,0,4,4,4, 132,30} }, +{ {0,1,2,3,0,4,4,5, 169,33} }, +{ {0,1,2,3,0,4,5,0, 171,33} }, +{ {0,1,2,3,0,4,5,1, 173,33} }, +{ {0,1,2,3,0,4,5,2, 173,12} }, +{ {0,1,2,3,0,4,5,3, 174,32} }, +{ {0,1,2,3,0,4,5,4, 172,33} }, +{ {0,1,2,3,0,4,5,5, 172,12} }, +{ {0,1,2,3,0,4,5,6, 182,32} }, +{ {0,1,2,3,1,0,0,0, 76,30} }, +{ {0,1,2,3,1,0,0,1, 115,2} }, +{ {0,1,2,3,1,0,0,2, 116,2} }, +{ {0,1,2,3,1,0,0,3, 105,22} }, +{ {0,1,2,3,1,0,0,4, 157,33} }, +{ {0,1,2,3,1,0,1,0, 90,28} }, +{ {0,1,2,3,1,0,1,1, 76,29} }, +{ {0,1,2,3,1,0,1,2, 98,28} }, +{ {0,1,2,3,1,0,1,3, 103,28} }, +{ {0,1,2,3,1,0,1,4, 140,47} }, +{ {0,1,2,3,1,0,2,0, 103,31} }, +{ {0,1,2,3,1,0,2,1, 105,27} }, +{ {0,1,2,3,1,0,2,2, 87,25} }, +{ {0,1,2,3,1,0,2,3, 97,45} }, +{ {0,1,2,3,1,0,2,4, 155,26} }, +{ {0,1,2,3,1,0,3,0, 98,31} }, +{ {0,1,2,3,1,0,3,1, 116,3} }, +{ {0,1,2,3,1,0,3,2, 118,3} }, +{ {0,1,2,3,1,0,3,3, 87,24} }, +{ {0,1,2,3,1,0,3,4, 158,21} }, +{ {0,1,2,3,1,0,4,0, 140,36} }, +{ {0,1,2,3,1,0,4,1, 157,42} }, +{ {0,1,2,3,1,0,4,2, 158,20} }, +{ {0,1,2,3,1,0,4,3, 155,23} }, +{ {0,1,2,3,1,0,4,4, 155,4} }, +{ {0,1,2,3,1,0,4,5, 175,21} }, +{ {0,1,2,3,1,1,0,0, 65,3} }, +{ {0,1,2,3,1,1,0,1, 61,3} }, +{ {0,1,2,3,1,1,0,2, 78,3} }, +{ {0,1,2,3,1,1,0,3, 75,3} }, +{ {0,1,2,3,1,1,0,4, 128,3} }, +{ {0,1,2,3,1,1,1,0, 64,11} }, +{ {0,1,2,3,1,1,1,1, 58,10} }, +{ {0,1,2,3,1,1,1,2, 71,11} }, +{ {0,1,2,3,1,1,1,3, 72,3} }, +{ {0,1,2,3,1,1,1,4, 127,3} }, +{ {0,1,2,3,1,1,2,0, 69,3} }, +{ {0,1,2,3,1,1,2,1, 63,10} }, +{ {0,1,2,3,1,1,2,2, 83,3} }, +{ {0,1,2,3,1,1,2,3, 84,42} }, +{ {0,1,2,3,1,1,2,4, 134,3} }, +{ {0,1,2,3,1,1,3,0, 66,3} }, +{ {0,1,2,3,1,1,3,1, 61,31} }, +{ {0,1,2,3,1,1,3,2, 87,3} }, +{ {0,1,2,3,1,1,3,3, 80,3} }, +{ {0,1,2,3,1,1,3,4, 130,3} }, +{ {0,1,2,3,1,1,4,0, 126,42} }, +{ {0,1,2,3,1,1,4,1, 125,42} }, +{ {0,1,2,3,1,1,4,2, 133,42} }, +{ {0,1,2,3,1,1,4,3, 129,42} }, +{ {0,1,2,3,1,1,4,4, 129,3} }, +{ {0,1,2,3,1,1,4,5, 167,42} }, +{ {0,1,2,3,1,2,0,0, 111,4} }, +{ {0,1,2,3,1,2,0,1, 120,3} }, +{ {0,1,2,3,1,2,0,2, 104,31} }, +{ {0,1,2,3,1,2,0,3, 114,39} }, +{ {0,1,2,3,1,2,0,4, 162,32} }, +{ {0,1,2,3,1,2,1,0, 107,47} }, +{ {0,1,2,3,1,2,1,1, 67,29} }, +{ {0,1,2,3,1,2,1,2, 92,29} }, +{ {0,1,2,3,1,2,1,3, 108,39} }, +{ {0,1,2,3,1,2,1,4, 147,47} }, +{ {0,1,2,3,1,2,2,0, 111,27} }, +{ {0,1,2,3,1,2,2,1, 102,27} }, +{ {0,1,2,3,1,2,2,2, 71,5} }, +{ {0,1,2,3,1,2,2,3, 91,39} }, +{ {0,1,2,3,1,2,2,4, 153,27} }, +{ {0,1,2,3,1,2,3,0, 121,21} }, +{ {0,1,2,3,1,2,3,1, 120,31} }, +{ {0,1,2,3,1,2,3,2, 98,30} }, +{ {0,1,2,3,1,2,3,3, 66,24} }, +{ {0,1,2,3,1,2,3,4, 163,21} }, +{ {0,1,2,3,1,2,4,0, 164,21} }, +{ {0,1,2,3,1,2,4,1, 160,42} }, +{ {0,1,2,3,1,2,4,2, 142,36} }, +{ {0,1,2,3,1,2,4,3, 150,39} }, +{ {0,1,2,3,1,2,4,4, 150,24} }, +{ {0,1,2,3,1,2,4,5, 177,21} }, +{ {0,1,2,3,1,3,0,0, 104,5} }, +{ {0,1,2,3,1,3,0,1, 116,9} }, +{ {0,1,2,3,1,3,0,2, 122,12} }, +{ {0,1,2,3,1,3,0,3, 78,37} }, +{ {0,1,2,3,1,3,0,4, 165,32} }, +{ {0,1,2,3,1,3,1,0, 111,28} }, +{ {0,1,2,3,1,3,1,1, 76,4} }, +{ {0,1,2,3,1,3,1,2, 104,29} }, +{ {0,1,2,3,1,3,1,3, 65,37} }, +{ {0,1,2,3,1,3,1,4, 153,28} }, +{ {0,1,2,3,1,3,2,0, 114,27} }, +{ {0,1,2,3,1,3,2,1, 105,44} }, +{ {0,1,2,3,1,3,2,2, 78,25} }, +{ {0,1,2,3,1,3,2,3, 75,37} }, +{ {0,1,2,3,1,3,2,4, 156,26} }, +{ {0,1,2,3,1,3,3,0, 120,30} }, +{ {0,1,2,3,1,3,3,1, 115,30} }, +{ {0,1,2,3,1,3,3,2, 116,24} }, +{ {0,1,2,3,1,3,3,3, 61,30} }, +{ {0,1,2,3,1,3,3,4, 159,30} }, +{ {0,1,2,3,1,3,4,0, 162,8} }, +{ {0,1,2,3,1,3,4,1, 157,9} }, +{ {0,1,2,3,1,3,4,2, 165,8} }, +{ {0,1,2,3,1,3,4,3, 128,37} }, +{ {0,1,2,3,1,3,4,4, 141,5} }, +{ {0,1,2,3,1,3,4,5, 178,8} }, +{ {0,1,2,3,1,4,0,0, 153,4} }, +{ {0,1,2,3,1,4,0,1, 159,3} }, +{ {0,1,2,3,1,4,0,2, 165,26} }, +{ {0,1,2,3,1,4,0,3, 156,38} }, +{ {0,1,2,3,1,4,0,4, 141,31} }, +{ {0,1,2,3,1,4,0,5, 178,32} }, +{ {0,1,2,3,1,4,1,0, 147,28} }, +{ {0,1,2,3,1,4,1,1, 131,29} }, +{ {0,1,2,3,1,4,1,2, 142,46} }, +{ {0,1,2,3,1,4,1,3, 149,22} }, +{ {0,1,2,3,1,4,1,4, 135,31} }, +{ {0,1,2,3,1,4,1,5, 171,47} }, +{ {0,1,2,3,1,4,2,0, 150,45} }, +{ {0,1,2,3,1,4,2,1, 143,27} }, +{ {0,1,2,3,1,4,2,2, 133,44} }, +{ {0,1,2,3,1,4,2,3, 138,45} }, +{ {0,1,2,3,1,4,2,4, 144,31} }, +{ {0,1,2,3,1,4,2,5, 173,26} }, +{ {0,1,2,3,1,4,3,0, 163,6} }, +{ {0,1,2,3,1,4,3,1, 159,31} }, +{ {0,1,2,3,1,4,3,2, 158,6} }, +{ {0,1,2,3,1,4,3,3, 130,24} }, +{ {0,1,2,3,1,4,3,4, 139,31} }, +{ {0,1,2,3,1,4,3,5, 179,21} }, +{ {0,1,2,3,1,4,4,0, 162,11} }, +{ {0,1,2,3,1,4,4,1, 157,10} }, +{ {0,1,2,3,1,4,4,2, 165,11} }, +{ {0,1,2,3,1,4,4,3, 141,22} }, +{ {0,1,2,3,1,4,4,4, 128,30} }, +{ {0,1,2,3,1,4,4,5, 178,11} }, +{ {0,1,2,3,1,4,5,0, 177,42} }, +{ {0,1,2,3,1,4,5,1, 176,42} }, +{ {0,1,2,3,1,4,5,2, 180,21} }, +{ {0,1,2,3,1,4,5,3, 173,22} }, +{ {0,1,2,3,1,4,5,4, 169,36} }, +{ {0,1,2,3,1,4,5,5, 173,5} }, +{ {0,1,2,3,1,4,5,6, 183,21} }, +{ {0,1,2,3,2,0,0,0, 76,5} }, +{ {0,1,2,3,2,0,0,1, 116,12} }, +{ {0,1,2,3,2,0,0,2, 115,28} }, +{ {0,1,2,3,2,0,0,3, 105,39} }, +{ {0,1,2,3,2,0,0,4, 157,12} }, +{ {0,1,2,3,2,0,1,0, 111,31} }, +{ {0,1,2,3,2,0,1,1, 104,4} }, +{ {0,1,2,3,2,0,1,2, 120,29} }, +{ {0,1,2,3,2,0,1,3, 114,22} }, +{ {0,1,2,3,2,0,1,4, 162,13} }, +{ {0,1,2,3,2,0,2,0, 65,46} }, +{ {0,1,2,3,2,0,2,1, 78,46} }, +{ {0,1,2,3,2,0,2,2, 61,29} }, +{ {0,1,2,3,2,0,2,3, 75,46} }, +{ {0,1,2,3,2,0,2,4, 128,46} }, +{ {0,1,2,3,2,0,3,0, 104,30} }, +{ {0,1,2,3,2,0,3,1, 122,43} }, +{ {0,1,2,3,2,0,3,2, 116,25} }, +{ {0,1,2,3,2,0,3,3, 78,24} }, +{ {0,1,2,3,2,0,3,4, 165,13} }, +{ {0,1,2,3,2,0,4,0, 153,31} }, +{ {0,1,2,3,2,0,4,1, 165,43} }, +{ {0,1,2,3,2,0,4,2, 159,29} }, +{ {0,1,2,3,2,0,4,3, 156,23} }, +{ {0,1,2,3,2,0,4,4, 141,4} }, +{ {0,1,2,3,2,0,4,5, 178,13} }, +{ {0,1,2,3,2,1,0,0, 103,4} }, +{ {0,1,2,3,2,1,0,1, 87,9} }, +{ {0,1,2,3,2,1,0,2, 105,42} }, +{ {0,1,2,3,2,1,0,3, 97,8} }, +{ {0,1,2,3,2,1,0,4, 155,43} }, +{ {0,1,2,3,2,1,1,0, 111,42} }, +{ {0,1,2,3,2,1,1,1, 71,30} }, +{ {0,1,2,3,2,1,1,2, 102,42} }, +{ {0,1,2,3,2,1,1,3, 91,22} }, +{ {0,1,2,3,2,1,1,4, 153,42} }, +{ {0,1,2,3,2,1,2,0, 69,46} }, +{ {0,1,2,3,2,1,2,1, 83,46} }, +{ {0,1,2,3,2,1,2,2, 63,29} }, +{ {0,1,2,3,2,1,2,3, 84,27} }, +{ {0,1,2,3,2,1,2,4, 134,46} }, +{ {0,1,2,3,2,1,3,0, 114,42} }, +{ {0,1,2,3,2,1,3,1, 78,36} }, +{ {0,1,2,3,2,1,3,2, 105,9} }, +{ {0,1,2,3,2,1,3,3, 75,24} }, +{ {0,1,2,3,2,1,3,4, 156,43} }, +{ {0,1,2,3,2,1,4,0, 150,8} }, +{ {0,1,2,3,2,1,4,1, 133,9} }, +{ {0,1,2,3,2,1,4,2, 143,42} }, +{ {0,1,2,3,2,1,4,3, 138,8} }, +{ {0,1,2,3,2,1,4,4, 144,4} }, +{ {0,1,2,3,2,1,4,5, 173,43} }, +{ {0,1,2,3,2,2,0,0, 90,11} }, +{ {0,1,2,3,2,2,0,1, 98,2} }, +{ {0,1,2,3,2,2,0,2, 76,10} }, +{ {0,1,2,3,2,2,0,3, 103,11} }, +{ {0,1,2,3,2,2,0,4, 140,2} }, +{ {0,1,2,3,2,2,1,0, 107,2} }, +{ {0,1,2,3,2,2,1,1, 92,10} }, +{ {0,1,2,3,2,2,1,2, 67,10} }, +{ {0,1,2,3,2,2,1,3, 108,22} }, +{ {0,1,2,3,2,2,1,4, 147,2} }, +{ {0,1,2,3,2,2,2,0, 64,28} }, +{ {0,1,2,3,2,2,2,1, 71,28} }, +{ {0,1,2,3,2,2,2,2, 58,29} }, +{ {0,1,2,3,2,2,2,3, 72,46} }, +{ {0,1,2,3,2,2,2,4, 127,46} }, +{ {0,1,2,3,2,2,3,0, 111,11} }, +{ {0,1,2,3,2,2,3,1, 104,10} }, +{ {0,1,2,3,2,2,3,2, 76,31} }, +{ {0,1,2,3,2,2,3,3, 65,24} }, +{ {0,1,2,3,2,2,3,4, 153,11} }, +{ {0,1,2,3,2,2,4,0, 147,11} }, +{ {0,1,2,3,2,2,4,1, 142,3} }, +{ {0,1,2,3,2,2,4,2, 131,10} }, +{ {0,1,2,3,2,2,4,3, 149,39} }, +{ {0,1,2,3,2,2,4,4, 135,4} }, +{ {0,1,2,3,2,2,4,5, 171,2} }, +{ {0,1,2,3,2,3,0,0, 98,4} }, +{ {0,1,2,3,2,3,0,1, 118,13} }, +{ {0,1,2,3,2,3,0,2, 116,27} }, +{ {0,1,2,3,2,3,0,3, 87,22} }, +{ {0,1,2,3,2,3,0,4, 158,13} }, +{ {0,1,2,3,2,3,1,0, 121,13} }, +{ {0,1,2,3,2,3,1,1, 98,5} }, +{ {0,1,2,3,2,3,1,2, 120,4} }, +{ {0,1,2,3,2,3,1,3, 66,22} }, +{ {0,1,2,3,2,3,1,4, 163,13} }, +{ {0,1,2,3,2,3,2,0, 66,27} }, +{ {0,1,2,3,2,3,2,1, 87,27} }, +{ {0,1,2,3,2,3,2,2, 61,4} }, +{ {0,1,2,3,2,3,2,3, 80,27} }, +{ {0,1,2,3,2,3,2,4, 130,27} }, +{ {0,1,2,3,2,3,3,0, 120,5} }, +{ {0,1,2,3,2,3,3,1, 116,22} }, +{ {0,1,2,3,2,3,3,2, 115,5} }, +{ {0,1,2,3,2,3,3,3, 61,5} }, +{ {0,1,2,3,2,3,3,4, 159,5} }, +{ {0,1,2,3,2,3,4,0, 163,8} }, +{ {0,1,2,3,2,3,4,1, 158,8} }, +{ {0,1,2,3,2,3,4,2, 159,4} }, +{ {0,1,2,3,2,3,4,3, 130,22} }, +{ {0,1,2,3,2,3,4,4, 139,4} }, +{ {0,1,2,3,2,3,4,5, 179,13} }, +{ {0,1,2,3,2,4,0,0, 140,25} }, +{ {0,1,2,3,2,4,0,1, 158,26} }, +{ {0,1,2,3,2,4,0,2, 157,27} }, +{ {0,1,2,3,2,4,0,3, 155,38} }, +{ {0,1,2,3,2,4,0,4, 155,31} }, +{ {0,1,2,3,2,4,0,5, 175,40} }, +{ {0,1,2,3,2,4,1,0, 164,40} }, +{ {0,1,2,3,2,4,1,1, 142,25} }, +{ {0,1,2,3,2,4,1,2, 160,27} }, +{ {0,1,2,3,2,4,1,3, 150,22} }, +{ {0,1,2,3,2,4,1,4, 150,37} }, +{ {0,1,2,3,2,4,1,5, 177,40} }, +{ {0,1,2,3,2,4,2,0, 126,27} }, +{ {0,1,2,3,2,4,2,1, 133,27} }, +{ {0,1,2,3,2,4,2,2, 125,27} }, +{ {0,1,2,3,2,4,2,3, 129,27} }, +{ {0,1,2,3,2,4,2,4, 129,46} }, +{ {0,1,2,3,2,4,2,5, 167,27} }, +{ {0,1,2,3,2,4,3,0, 162,45} }, +{ {0,1,2,3,2,4,3,1, 165,45} }, +{ {0,1,2,3,2,4,3,2, 157,44} }, +{ {0,1,2,3,2,4,3,3, 128,24} }, +{ {0,1,2,3,2,4,3,4, 141,30} }, +{ {0,1,2,3,2,4,3,5, 178,45} }, +{ {0,1,2,3,2,4,4,0, 162,28} }, +{ {0,1,2,3,2,4,4,1, 165,28} }, +{ {0,1,2,3,2,4,4,2, 157,29} }, +{ {0,1,2,3,2,4,4,3, 141,39} }, +{ {0,1,2,3,2,4,4,4, 128,5} }, +{ {0,1,2,3,2,4,4,5, 178,28} }, +{ {0,1,2,3,2,4,5,0, 177,27} }, +{ {0,1,2,3,2,4,5,1, 180,40} }, +{ {0,1,2,3,2,4,5,2, 176,27} }, +{ {0,1,2,3,2,4,5,3, 173,39} }, +{ {0,1,2,3,2,4,5,4, 173,30} }, +{ {0,1,2,3,2,4,5,5, 169,25} }, +{ {0,1,2,3,2,4,5,6, 183,40} }, +{ {0,1,2,3,3,0,0,0, 67,30} }, +{ {0,1,2,3,3,0,0,1, 120,2} }, +{ {0,1,2,3,3,0,0,2, 120,28} }, +{ {0,1,2,3,3,0,0,3, 102,22} }, +{ {0,1,2,3,3,0,0,4, 160,33} }, +{ {0,1,2,3,3,0,1,0, 107,36} }, +{ {0,1,2,3,3,0,1,1, 111,5} }, +{ {0,1,2,3,3,0,1,2, 121,20} }, +{ {0,1,2,3,3,0,1,3, 111,22} }, +{ {0,1,2,3,3,0,1,4, 164,20} }, +{ {0,1,2,3,3,0,2,0, 108,44} }, +{ {0,1,2,3,3,0,2,1, 114,26} }, +{ {0,1,2,3,3,0,2,2, 66,25} }, +{ {0,1,2,3,3,0,2,3, 91,44} }, +{ {0,1,2,3,3,0,2,4, 150,44} }, +{ {0,1,2,3,3,0,3,0, 92,30} }, +{ {0,1,2,3,3,0,3,1, 104,28} }, +{ {0,1,2,3,3,0,3,2, 98,29} }, +{ {0,1,2,3,3,0,3,3, 71,4} }, +{ {0,1,2,3,3,0,3,4, 142,47} }, +{ {0,1,2,3,3,0,4,0, 147,36} }, +{ {0,1,2,3,3,0,4,1, 162,43} }, +{ {0,1,2,3,3,0,4,2, 163,20} }, +{ {0,1,2,3,3,0,4,3, 153,22} }, +{ {0,1,2,3,3,0,4,4, 150,25} }, +{ {0,1,2,3,3,0,4,5, 177,20} }, +{ {0,1,2,3,3,1,0,0, 108,9} }, +{ {0,1,2,3,3,1,0,1, 66,9} }, +{ {0,1,2,3,3,1,0,2, 114,43} }, +{ {0,1,2,3,3,1,0,3, 91,9} }, +{ {0,1,2,3,3,1,0,4, 150,9} }, +{ {0,1,2,3,3,1,1,0, 107,9} }, +{ {0,1,2,3,3,1,1,1, 64,36} }, +{ {0,1,2,3,3,1,1,2, 111,9} }, +{ {0,1,2,3,3,1,1,3, 90,9} }, +{ {0,1,2,3,3,1,1,4, 147,9} }, +{ {0,1,2,3,3,1,2,0, 109,9} }, +{ {0,1,2,3,3,1,2,1, 69,36} }, +{ {0,1,2,3,3,1,2,2, 69,25} }, +{ {0,1,2,3,3,1,2,3, 94,9} }, +{ {0,1,2,3,3,1,2,4, 151,43} }, +{ {0,1,2,3,3,1,3,0, 108,42} }, +{ {0,1,2,3,3,1,3,1, 65,36} }, +{ {0,1,2,3,3,1,3,2, 103,29} }, +{ {0,1,2,3,3,1,3,3, 72,24} }, +{ {0,1,2,3,3,1,3,4, 149,9} }, +{ {0,1,2,3,3,1,4,0, 146,43} }, +{ {0,1,2,3,3,1,4,1, 126,9} }, +{ {0,1,2,3,3,1,4,2, 150,43} }, +{ {0,1,2,3,3,1,4,3, 135,9} }, +{ {0,1,2,3,3,1,4,4, 148,9} }, +{ {0,1,2,3,3,1,4,5, 170,43} }, +{ {0,1,2,3,3,2,0,0, 107,25} }, +{ {0,1,2,3,3,2,0,1, 121,26} }, +{ {0,1,2,3,3,2,0,2, 111,30} }, +{ {0,1,2,3,3,2,0,3, 111,39} }, +{ {0,1,2,3,3,2,0,4, 164,41} }, +{ {0,1,2,3,3,2,1,0, 123,0} }, +{ {0,1,2,3,3,2,1,1, 107,5} }, +{ {0,1,2,3,3,2,1,2, 107,30} }, +{ {0,1,2,3,3,2,1,3, 107,39} }, +{ {0,1,2,3,3,2,1,4, 166,0} }, +{ {0,1,2,3,3,2,2,0, 107,44} }, +{ {0,1,2,3,3,2,2,1, 111,44} }, +{ {0,1,2,3,3,2,2,2, 64,25} }, +{ {0,1,2,3,3,2,2,3, 90,44} }, +{ {0,1,2,3,3,2,2,4, 147,44} }, +{ {0,1,2,3,3,2,3,0, 107,29} }, +{ {0,1,2,3,3,2,3,1, 111,29} }, +{ {0,1,2,3,3,2,3,2, 90,30} }, +{ {0,1,2,3,3,2,3,3, 64,4} }, +{ {0,1,2,3,3,2,3,4, 147,29} }, +{ {0,1,2,3,3,2,4,0, 166,20} }, +{ {0,1,2,3,3,2,4,1, 164,9} }, +{ {0,1,2,3,3,2,4,2, 147,30} }, +{ {0,1,2,3,3,2,4,3, 147,39} }, +{ {0,1,2,3,3,2,4,4, 146,25} }, +{ {0,1,2,3,3,2,4,5, 181,0} }, +{ {0,1,2,3,3,3,0,0, 92,5} }, +{ {0,1,2,3,3,3,0,1, 98,3} }, +{ {0,1,2,3,3,3,0,2, 104,11} }, +{ {0,1,2,3,3,3,0,3, 71,31} }, +{ {0,1,2,3,3,3,0,4, 142,2} }, +{ {0,1,2,3,3,3,1,0, 107,10} }, +{ {0,1,2,3,3,3,1,1, 90,5} }, +{ {0,1,2,3,3,3,1,2, 111,10} }, +{ {0,1,2,3,3,3,1,3, 64,31} }, +{ {0,1,2,3,3,3,1,4, 147,10} }, +{ {0,1,2,3,3,3,2,0, 108,27} }, +{ {0,1,2,3,3,3,2,1, 103,10} }, +{ {0,1,2,3,3,3,2,2, 65,25} }, +{ {0,1,2,3,3,3,2,3, 72,37} }, +{ {0,1,2,3,3,3,2,4, 149,44} }, +{ {0,1,2,3,3,3,3,0, 67,11} }, +{ {0,1,2,3,3,3,3,1, 76,11} }, +{ {0,1,2,3,3,3,3,2, 76,28} }, +{ {0,1,2,3,3,3,3,3, 58,30} }, +{ {0,1,2,3,3,3,3,4, 131,11} }, +{ {0,1,2,3,3,3,4,0, 147,3} }, +{ {0,1,2,3,3,3,4,1, 140,3} }, +{ {0,1,2,3,3,3,4,2, 153,10} }, +{ {0,1,2,3,3,3,4,3, 127,37} }, +{ {0,1,2,3,3,3,4,4, 135,5} }, +{ {0,1,2,3,3,3,4,5, 171,3} }, +{ {0,1,2,3,3,4,0,0, 147,25} }, +{ {0,1,2,3,3,4,0,1, 163,26} }, +{ {0,1,2,3,3,4,0,2, 162,26} }, +{ {0,1,2,3,3,4,0,3, 153,39} }, +{ {0,1,2,3,3,4,0,4, 150,36} }, +{ {0,1,2,3,3,4,0,5, 177,41} }, +{ {0,1,2,3,3,4,1,0, 166,41} }, +{ {0,1,2,3,3,4,1,1, 147,5} }, +{ {0,1,2,3,3,4,1,2, 164,44} }, +{ {0,1,2,3,3,4,1,3, 147,22} }, +{ {0,1,2,3,3,4,1,4, 146,36} }, +{ {0,1,2,3,3,4,1,5, 181,19} }, +{ {0,1,2,3,3,4,2,0, 146,26} }, +{ {0,1,2,3,3,4,2,1, 150,26} }, +{ {0,1,2,3,3,4,2,2, 126,44} }, +{ {0,1,2,3,3,4,2,3, 135,44} }, +{ {0,1,2,3,3,4,2,4, 148,44} }, +{ {0,1,2,3,3,4,2,5, 170,26} }, +{ {0,1,2,3,3,4,3,0, 147,46} }, +{ {0,1,2,3,3,4,3,1, 153,29} }, +{ {0,1,2,3,3,4,3,2, 140,46} }, +{ {0,1,2,3,3,4,3,3, 127,24} }, +{ {0,1,2,3,3,4,3,4, 135,30} }, +{ {0,1,2,3,3,4,3,5, 171,46} }, +{ {0,1,2,3,3,4,4,0, 164,30} }, +{ {0,1,2,3,3,4,4,1, 162,30} }, +{ {0,1,2,3,3,4,4,2, 162,5} }, +{ {0,1,2,3,3,4,4,3, 140,22} }, +{ {0,1,2,3,3,4,4,4, 126,30} }, +{ {0,1,2,3,3,4,4,5, 177,30} }, +{ {0,1,2,3,3,4,5,0, 181,43} }, +{ {0,1,2,3,3,4,5,1, 177,9} }, +{ {0,1,2,3,3,4,5,2, 177,44} }, +{ {0,1,2,3,3,4,5,3, 171,22} }, +{ {0,1,2,3,3,4,5,4, 170,36} }, +{ {0,1,2,3,3,4,5,5, 170,25} }, +{ {0,1,2,3,3,4,5,6, 184,0} }, +{ {0,1,2,3,4,0,0,0, 131,30} }, +{ {0,1,2,3,4,0,0,1, 159,2} }, +{ {0,1,2,3,4,0,0,2, 159,28} }, +{ {0,1,2,3,4,0,0,3, 143,22} }, +{ {0,1,2,3,4,0,0,4, 157,11} }, +{ {0,1,2,3,4,0,0,5, 176,33} }, +{ {0,1,2,3,4,0,1,0, 147,31} }, +{ {0,1,2,3,4,0,1,1, 153,5} }, +{ {0,1,2,3,4,0,1,2, 163,7} }, +{ {0,1,2,3,4,0,1,3, 150,38} }, +{ {0,1,2,3,4,0,1,4, 162,10} }, +{ {0,1,2,3,4,0,1,5, 177,33} }, +{ {0,1,2,3,4,0,2,0, 149,27} }, +{ {0,1,2,3,4,0,2,1, 156,45} }, +{ {0,1,2,3,4,0,2,2, 130,25} }, +{ {0,1,2,3,4,0,2,3, 138,38} }, +{ {0,1,2,3,4,0,2,4, 141,27} }, +{ {0,1,2,3,4,0,2,5, 173,27} }, +{ {0,1,2,3,4,0,3,0, 142,37} }, +{ {0,1,2,3,4,0,3,1, 165,23} }, +{ {0,1,2,3,4,0,3,2, 158,7} }, +{ {0,1,2,3,4,0,3,3, 133,39} }, +{ {0,1,2,3,4,0,3,4, 165,10} }, +{ {0,1,2,3,4,0,3,5, 180,20} }, +{ {0,1,2,3,4,0,4,0, 135,28} }, +{ {0,1,2,3,4,0,4,1, 141,28} }, +{ {0,1,2,3,4,0,4,2, 139,28} }, +{ {0,1,2,3,4,0,4,3, 144,28} }, +{ {0,1,2,3,4,0,4,4, 128,29} }, +{ {0,1,2,3,4,0,4,5, 169,47} }, +{ {0,1,2,3,4,0,5,0, 171,36} }, +{ {0,1,2,3,4,0,5,1, 178,9} }, +{ {0,1,2,3,4,0,5,2, 179,20} }, +{ {0,1,2,3,4,0,5,3, 173,23} }, +{ {0,1,2,3,4,0,5,4, 178,10} }, +{ {0,1,2,3,4,0,5,5, 173,4} }, +{ {0,1,2,3,4,0,5,6, 183,20} }, +{ {0,1,2,3,4,1,0,0, 149,42} }, +{ {0,1,2,3,4,1,0,1, 130,9} }, +{ {0,1,2,3,4,1,0,2, 156,8} }, +{ {0,1,2,3,4,1,0,3, 138,23} }, +{ {0,1,2,3,4,1,0,4, 141,42} }, +{ {0,1,2,3,4,1,0,5, 173,42} }, +{ {0,1,2,3,4,1,1,0, 147,42} }, +{ {0,1,2,3,4,1,1,1, 127,36} }, +{ {0,1,2,3,4,1,1,2, 153,9} }, +{ {0,1,2,3,4,1,1,3, 135,22} }, +{ {0,1,2,3,4,1,1,4, 140,42} }, +{ {0,1,2,3,4,1,1,5, 171,42} }, +{ {0,1,2,3,4,1,2,0, 151,8} }, +{ {0,1,2,3,4,1,2,1, 134,36} }, +{ {0,1,2,3,4,1,2,2, 134,25} }, +{ {0,1,2,3,4,1,2,3, 136,23} }, +{ {0,1,2,3,4,1,2,4, 145,42} }, +{ {0,1,2,3,4,1,2,5, 174,43} }, +{ {0,1,2,3,4,1,3,0, 150,42} }, +{ {0,1,2,3,4,1,3,1, 128,36} }, +{ {0,1,2,3,4,1,3,2, 155,8} }, +{ {0,1,2,3,4,1,3,3, 129,39} }, +{ {0,1,2,3,4,1,3,4, 141,9} }, +{ {0,1,2,3,4,1,3,5, 173,9} }, +{ {0,1,2,3,4,1,4,0, 148,42} }, +{ {0,1,2,3,4,1,4,1, 129,36} }, +{ {0,1,2,3,4,1,4,2, 144,29} }, +{ {0,1,2,3,4,1,4,3, 137,9} }, +{ {0,1,2,3,4,1,4,4, 132,29} }, +{ {0,1,2,3,4,1,4,5, 172,42} }, +{ {0,1,2,3,4,1,5,0, 170,8} }, +{ {0,1,2,3,4,1,5,1, 167,9} }, +{ {0,1,2,3,4,1,5,2, 173,8} }, +{ {0,1,2,3,4,1,5,3, 168,8} }, +{ {0,1,2,3,4,1,5,4, 169,42} }, +{ {0,1,2,3,4,1,5,5, 172,9} }, +{ {0,1,2,3,4,1,5,6, 182,43} }, +{ {0,1,2,3,4,2,0,0, 147,4} }, +{ {0,1,2,3,4,2,0,1, 163,23} }, +{ {0,1,2,3,4,2,0,2, 153,30} }, +{ {0,1,2,3,4,2,0,3, 150,23} }, +{ {0,1,2,3,4,2,0,4, 162,29} }, +{ {0,1,2,3,4,2,0,5, 177,12} }, +{ {0,1,2,3,4,2,1,0, 166,23} }, +{ {0,1,2,3,4,2,1,1, 147,24} }, +{ {0,1,2,3,4,2,1,2, 147,37} }, +{ {0,1,2,3,4,2,1,3, 146,23} }, +{ {0,1,2,3,4,2,1,4, 164,29} }, +{ {0,1,2,3,4,2,1,5, 181,32} }, +{ {0,1,2,3,4,2,2,0, 147,27} }, +{ {0,1,2,3,4,2,2,1, 153,44} }, +{ {0,1,2,3,4,2,2,2, 127,25} }, +{ {0,1,2,3,4,2,2,3, 135,39} }, +{ {0,1,2,3,4,2,2,4, 140,27} }, +{ {0,1,2,3,4,2,2,5, 171,27} }, +{ {0,1,2,3,4,2,3,0, 164,39} }, +{ {0,1,2,3,4,2,3,1, 162,23} }, +{ {0,1,2,3,4,2,3,2, 140,37} }, +{ {0,1,2,3,4,2,3,3, 126,39} }, +{ {0,1,2,3,4,2,3,4, 162,4} }, +{ {0,1,2,3,4,2,3,5, 177,39} }, +{ {0,1,2,3,4,2,4,0, 146,47} }, +{ {0,1,2,3,4,2,4,1, 150,47} }, +{ {0,1,2,3,4,2,4,2, 135,29} }, +{ {0,1,2,3,4,2,4,3, 148,39} }, +{ {0,1,2,3,4,2,4,4, 126,29} }, +{ {0,1,2,3,4,2,4,5, 170,47} }, +{ {0,1,2,3,4,2,5,0, 181,14} }, +{ {0,1,2,3,4,2,5,1, 177,34} }, +{ {0,1,2,3,4,2,5,2, 171,37} }, +{ {0,1,2,3,4,2,5,3, 170,23} }, +{ {0,1,2,3,4,2,5,4, 177,29} }, +{ {0,1,2,3,4,2,5,5, 170,24} }, +{ {0,1,2,3,4,2,5,6, 184,21} }, +{ {0,1,2,3,4,3,0,0, 142,24} }, +{ {0,1,2,3,4,3,0,1, 158,23} }, +{ {0,1,2,3,4,3,0,2, 165,38} }, +{ {0,1,2,3,4,3,0,3, 133,22} }, +{ {0,1,2,3,4,3,0,4, 165,29} }, +{ {0,1,2,3,4,3,0,5, 180,35} }, +{ {0,1,2,3,4,3,1,0, 164,22} }, +{ {0,1,2,3,4,3,1,1, 140,24} }, +{ {0,1,2,3,4,3,1,2, 162,38} }, +{ {0,1,2,3,4,3,1,3, 126,22} }, +{ {0,1,2,3,4,3,1,4, 162,31} }, +{ {0,1,2,3,4,3,1,5, 177,22} }, +{ {0,1,2,3,4,3,2,0, 150,27} }, +{ {0,1,2,3,4,3,2,1, 155,45} }, +{ {0,1,2,3,4,3,2,2, 128,25} }, +{ {0,1,2,3,4,3,2,3, 129,22} }, +{ {0,1,2,3,4,3,2,4, 141,44} }, +{ {0,1,2,3,4,3,2,5, 173,44} }, +{ {0,1,2,3,4,3,3,0, 160,22} }, +{ {0,1,2,3,4,3,3,1, 157,22} }, +{ {0,1,2,3,4,3,3,2, 157,39} }, +{ {0,1,2,3,4,3,3,3, 125,22} }, +{ {0,1,2,3,4,3,3,4, 157,30} }, +{ {0,1,2,3,4,3,3,5, 176,22} }, +{ {0,1,2,3,4,3,4,0, 150,46} }, +{ {0,1,2,3,4,3,4,1, 155,29} }, +{ {0,1,2,3,4,3,4,2, 141,29} }, +{ {0,1,2,3,4,3,4,3, 129,37} }, +{ {0,1,2,3,4,3,4,4, 128,4} }, +{ {0,1,2,3,4,3,4,5, 173,29} }, +{ {0,1,2,3,4,3,5,0, 177,35} }, +{ {0,1,2,3,4,3,5,1, 175,35} }, +{ {0,1,2,3,4,3,5,2, 178,22} }, +{ {0,1,2,3,4,3,5,3, 167,22} }, +{ {0,1,2,3,4,3,5,4, 178,31} }, +{ {0,1,2,3,4,3,5,5, 169,24} }, +{ {0,1,2,3,4,3,5,6, 183,35} }, +{ {0,1,2,3,4,4,0,0, 135,11} }, +{ {0,1,2,3,4,4,0,1, 139,2} }, +{ {0,1,2,3,4,4,0,2, 141,11} }, +{ {0,1,2,3,4,4,0,3, 144,11} }, +{ {0,1,2,3,4,4,0,4, 128,10} }, +{ {0,1,2,3,4,4,0,5, 169,2} }, +{ {0,1,2,3,4,4,1,0, 146,2} }, +{ {0,1,2,3,4,4,1,1, 135,10} }, +{ {0,1,2,3,4,4,1,2, 150,2} }, +{ {0,1,2,3,4,4,1,3, 148,22} }, +{ {0,1,2,3,4,4,1,4, 126,10} }, +{ {0,1,2,3,4,4,1,5, 170,2} }, +{ {0,1,2,3,4,4,2,0, 148,27} }, +{ {0,1,2,3,4,4,2,1, 144,10} }, +{ {0,1,2,3,4,4,2,2, 129,25} }, +{ {0,1,2,3,4,4,2,3, 137,44} }, +{ {0,1,2,3,4,4,2,4, 132,10} }, +{ {0,1,2,3,4,4,2,5, 172,27} }, +{ {0,1,2,3,4,4,3,0, 150,3} }, +{ {0,1,2,3,4,4,3,1, 141,10} }, +{ {0,1,2,3,4,4,3,2, 155,10} }, +{ {0,1,2,3,4,4,3,3, 129,24} }, +{ {0,1,2,3,4,4,3,4, 128,31} }, +{ {0,1,2,3,4,4,3,5, 173,10} }, +{ {0,1,2,3,4,4,4,0, 126,11} }, +{ {0,1,2,3,4,4,4,1, 128,11} }, +{ {0,1,2,3,4,4,4,2, 128,28} }, +{ {0,1,2,3,4,4,4,3, 132,11} }, +{ {0,1,2,3,4,4,4,4, 124,11} }, +{ {0,1,2,3,4,4,4,5, 167,11} }, +{ {0,1,2,3,4,4,5,0, 170,3} }, +{ {0,1,2,3,4,4,5,1, 169,3} }, +{ {0,1,2,3,4,4,5,2, 173,11} }, +{ {0,1,2,3,4,4,5,3, 172,22} }, +{ {0,1,2,3,4,4,5,4, 167,10} }, +{ {0,1,2,3,4,4,5,5, 168,11} }, +{ {0,1,2,3,4,4,5,6, 182,2} }, +{ {0,1,2,3,4,5,0,0, 171,25} }, +{ {0,1,2,3,4,5,0,1, 179,26} }, +{ {0,1,2,3,4,5,0,2, 178,44} }, +{ {0,1,2,3,4,5,0,3, 173,38} }, +{ {0,1,2,3,4,5,0,4, 178,29} }, +{ {0,1,2,3,4,5,0,5, 173,31} }, +{ {0,1,2,3,4,5,0,6, 183,41} }, +{ {0,1,2,3,4,5,1,0, 181,17} }, +{ {0,1,2,3,4,5,1,1, 171,24} }, +{ {0,1,2,3,4,5,1,2, 177,7} }, +{ {0,1,2,3,4,5,1,3, 170,38} }, +{ {0,1,2,3,4,5,1,4, 177,10} }, +{ {0,1,2,3,4,5,1,5, 170,37} }, +{ {0,1,2,3,4,5,1,6, 184,40} }, +{ {0,1,2,3,4,5,2,0, 170,45} }, +{ {0,1,2,3,4,5,2,1, 173,45} }, +{ {0,1,2,3,4,5,2,2, 167,44} }, +{ {0,1,2,3,4,5,2,3, 168,45} }, +{ {0,1,2,3,4,5,2,4, 169,27} }, +{ {0,1,2,3,4,5,2,5, 172,44} }, +{ {0,1,2,3,4,5,2,6, 182,26} }, +{ {0,1,2,3,4,5,3,0, 177,6} }, +{ {0,1,2,3,4,5,3,1, 178,39} }, +{ {0,1,2,3,4,5,3,2, 175,6} }, +{ {0,1,2,3,4,5,3,3, 167,39} }, +{ {0,1,2,3,4,5,3,4, 178,4} }, +{ {0,1,2,3,4,5,3,5, 169,37} }, +{ {0,1,2,3,4,5,3,6, 183,6} }, +{ {0,1,2,3,4,5,4,0, 170,46} }, +{ {0,1,2,3,4,5,4,1, 173,28} }, +{ {0,1,2,3,4,5,4,2, 169,46} }, +{ {0,1,2,3,4,5,4,3, 172,39} }, +{ {0,1,2,3,4,5,4,4, 167,29} }, +{ {0,1,2,3,4,5,4,5, 168,28} }, +{ {0,1,2,3,4,5,4,6, 182,47} }, +{ {0,1,2,3,4,5,5,0, 177,11} }, +{ {0,1,2,3,4,5,5,1, 178,30} }, +{ {0,1,2,3,4,5,5,2, 178,5} }, +{ {0,1,2,3,4,5,5,3, 169,22} }, +{ {0,1,2,3,4,5,5,4, 175,11} }, +{ {0,1,2,3,4,5,5,5, 167,30} }, +{ {0,1,2,3,4,5,5,6, 183,11} }, +{ {0,1,2,3,4,5,6,0, 184,35} }, +{ {0,1,2,3,4,5,6,1, 183,34} }, +{ {0,1,2,3,4,5,6,2, 183,7} }, +{ {0,1,2,3,4,5,6,3, 182,23} }, +{ {0,1,2,3,4,5,6,4, 183,10} }, +{ {0,1,2,3,4,5,6,5, 182,36} }, +{ {0,1,2,3,4,5,6,6, 182,25} }, +{ {0,1,2,3,4,5,6,7, 185,0} } }; }//end namespace internal diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h index 31da0168890..01474531f5c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h @@ -29,9 +29,13 @@ namespace Mesh_3 namespace internal { const std::array combinations[] - = { {0,0,0,0,0,0,0,0}, + = { + // 1 color + {0,0,0,0,0,0,0,0}, + // 2 colors {0,0,0,0,0,0,0,1}, {0,0,0,0,0,0,1,1}, + // 3 colors {0,0,0,0,0,0,1,2}, {0,0,0,0,0,1,1,0}, {0,0,0,0,0,1,1,1}, @@ -86,7 +90,140 @@ namespace internal {0,1,1,0,1,0,0,1}, {0,1,1,0,1,0,0,2}, {0,1,1,0,1,2,2,1}, - {0,1,1,2,1,2,2,0} + {0,1,1,2,1,2,2,0}, + // 4 colors + {0,0,0,0,0,1,2,3}, + {0,0,0,0,1,2,2,3}, + {0,0,0,1,0,1,2,3}, + {0,0,0,1,0,2,3,0}, + {0,0,0,1,0,2,3,1}, + {0,0,0,1,1,0,2,3}, + {0,0,0,1,1,1,2,3}, + {0,0,0,1,1,2,2,3}, + {0,0,0,1,1,2,3,0}, + {0,0,0,1,1,2,3,1}, + {0,0,0,1,1,2,3,2}, + {0,0,0,1,2,0,0,3}, + {0,0,0,1,2,0,1,3}, + {0,0,0,1,2,0,2,3}, + {0,0,0,1,2,0,3,3}, + {0,0,0,1,2,1,1,3}, + {0,0,0,1,2,1,2,3}, + {0,0,0,1,2,1,3,0}, + {0,0,0,1,2,1,3,1}, + {0,0,0,1,2,1,3,2}, + {0,0,0,1,2,1,3,3}, + {0,0,0,1,2,2,2,3}, + {0,0,0,1,2,2,3,0}, + {0,0,0,1,2,2,3,1}, + {0,0,0,1,2,2,3,2}, + {0,0,0,1,2,2,3,3}, + {0,0,0,1,2,3,3,0}, + {0,0,0,1,2,3,3,1}, + {0,0,0,1,2,3,3,2}, + {0,0,0,1,2,3,3,3}, + {0,0,1,1,1,1,2,3}, + {0,0,1,1,1,2,0,3}, + {0,0,1,1,1,2,2,3}, + {0,0,1,1,1,2,3,0}, + {0,0,1,1,1,2,3,2}, + {0,0,1,1,1,2,3,3}, + {0,0,1,1,2,2,3,3}, + {0,0,1,1,2,3,2,3}, + {0,0,1,1,2,3,3,2}, + {0,0,1,2,1,2,0,3}, + {0,0,1,2,1,2,2,3}, + {0,0,1,2,1,2,3,3}, + {0,0,1,2,1,3,0,0}, + {0,0,1,2,1,3,0,1}, + {0,0,1,2,1,3,0,2}, + {0,0,1,2,1,3,2,0}, + {0,0,1,2,1,3,2,1}, + {0,0,1,2,1,3,2,3}, + {0,0,1,2,2,1,0,3}, + {0,0,1,2,2,1,1,3}, + {0,0,1,2,2,1,3,3}, + {0,0,1,2,2,3,0,0}, + {0,0,1,2,2,3,0,1}, + {0,0,1,2,2,3,0,2}, + {0,0,1,2,2,3,1,3}, + {0,0,1,2,2,3,3,1}, + {0,1,1,0,1,0,2,3}, + {0,1,1,0,1,2,2,3}, + {0,1,1,0,1,2,3,1}, + {0,1,1,0,2,3,3,2}, + {0,1,1,2,1,2,2,3}, + {0,1,1,2,1,2,3,0}, + {0,1,1,2,2,3,3,0}, + {0,1,1,2,3,0,2,3}, + {0,1,2,3,3,2,1,0}, + // 5 colors + {0,0,0,0,1,2,3,4}, + {0,0,0,1,0,2,3,4}, + {0,0,0,1,1,2,3,4}, + {0,0,0,1,2,0,3,4}, + {0,0,0,1,2,1,3,4}, + {0,0,0,1,2,2,3,4}, + {0,0,0,1,2,3,3,4}, + {0,0,0,1,2,3,4,0}, + {0,0,0,1,2,3,4,1}, + {0,0,0,1,2,3,4,2}, + {0,0,0,1,2,3,4,3}, + {0,0,1,1,1,2,3,4}, + {0,0,1,1,2,2,3,4}, + {0,0,1,1,2,3,2,4}, + {0,0,1,1,2,3,3,4}, + {0,0,1,2,1,2,3,4}, + {0,0,1,2,1,3,0,4}, + {0,0,1,2,1,3,2,4}, + {0,0,1,2,1,3,4,0}, + {0,0,1,2,1,3,4,1}, + {0,0,1,2,1,3,4,2}, + {0,0,1,2,1,3,4,4}, + {0,0,1,2,2,1,3,4}, + {0,0,1,2,2,3,0,4}, + {0,0,1,2,2,3,1,4}, + {0,0,1,2,2,3,2,4}, + {0,0,1,2,2,3,3,4}, + {0,0,1,2,2,3,4,4}, + {0,0,1,2,3,4,0,0}, + {0,0,1,2,3,4,0,1}, + {0,0,1,2,3,4,1,4}, + {0,0,1,2,3,4,2,1}, + {0,0,1,2,3,4,2,3}, + {0,1,1,0,1,2,3,4}, + {0,1,1,0,2,3,3,4}, + {0,1,1,2,1,2,3,4}, + {0,1,1,2,1,3,4,0}, + {0,1,1,2,1,3,4,1}, + {0,1,1,2,2,0,3,4}, + {0,1,1,2,2,3,3,4}, + {0,1,1,2,2,3,4,0}, + {0,1,1,2,3,0,2,4}, + {0,1,2,3,3,2,1,4}, + // 6 colors + {0,0,0,1,2,3,4,5}, + {0,0,1,1,2,3,4,5}, + {0,0,1,2,1,3,4,5}, + {0,0,1,2,2,3,4,5}, + {0,0,1,2,3,4,0,5}, + {0,0,1,2,3,4,1,5}, + {0,0,1,2,3,4,2,5}, + {0,0,1,2,3,4,5,5}, + {0,1,1,0,2,3,4,5}, + {0,1,1,2,1,3,4,5}, + {0,1,1,2,2,3,4,5}, + {0,1,1,2,3,0,4,5}, + {0,1,1,2,3,4,4,5}, + {0,1,1,2,3,4,5,3}, + {0,1,2,3,3,2,4,5}, + // 7 colors + {0,0,1,2,3,4,5,6}, + {0,1,1,2,3,4,5,6}, + {0,1,2,3,3,4,5,6}, + // 8 colors + {0,1,2,3,4,5,6,7} + }; }//end namespace internal diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index aff1a5cd666..0382819a1d6 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -656,6 +656,1557 @@ std::vector> poly00121201(const int prec = 10) }; } +// 00000123 +// curve_1 : x = 3./4. - sqrt(z*(9.*z - 8))/(4*z), y = 3./4. - sqrt(z*(9.*z - 8))/(4*z), z = [8/9, 1] +// curve 2 : x = 3./4. + sqrt(z*(9.*z - 8))/(4*z), y = 3./4. + sqrt(z*(9.*z - 8))/(4*z), z = [8/9, 1] +// curve 3 : x =1/2, y = -(z-2.)/(2.*z), z = [2/3, 1] +// curve 4 : x = -(z/2.-1)/z, y = 1./2., z =[2/3, 1] +template +std::vector> poly00000123(const int prec = 10) +{ + return { + create_polyline(8./9, 1., P(3./4, 3./4, 8./9), + [](double z) { return P( 3./4. - sqrt(z*(9.*z - 8))/(4*z), 3./4. - sqrt(z*(9.*z - 8))/(4*z), z ); }, + prec), + create_polyline(8./9, 1., P(3./4, 3./4, 8./9), + [](double z) { return P( 3./4. + sqrt(z*(9.*z - 8))/(4*z), 3./4. + sqrt(z*(9.*z - 8))/(4*z), z ); }, + prec), + + create_polyline(2./3, 1., P(1./2, 1, 2./3), + [](double z) { return P( 1./2, -(z-2.)/(2.*z), z); }, + prec), + create_polyline(2./3, 1., P(1, 1./2, 2./3), + [](double z) { return P(-(z-2.)/(2.*z), 1./2, z); }, + prec), +}; +} + + +//00001123 +// +// +template +std::vector> poly00001123(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00001223 +// +// +template +std::vector> poly00001223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00010123 +// +// +template +std::vector> poly00010123(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00010230 +// +// +template +std::vector> poly00010230(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00010231 +// +// +template +std::vector> poly00010231(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011023 +// +// +template +std::vector> poly00011023(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011123 +// +// +template +std::vector> poly00011123(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011223 +// +// +template +std::vector> poly00011223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011230 +// +// +template +std::vector> poly00011230(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011231 +// +// +template +std::vector> poly00011231(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011232 +// +// +template +std::vector> poly00011232(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012003 +// +// +template +std::vector> poly00012003(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012013 +// +// +template +std::vector> poly00012013(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012023 +// +// +template +std::vector> poly00012023(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012033 +// +// +template +std::vector> poly00012033(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012113 +// +// +template +std::vector> poly00012113(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012123 +// +// +template +std::vector> poly00012123(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012130 +// +// +template +std::vector> poly00012130(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012131 +// +// +template +std::vector> poly00012131(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012132 +// +// +template +std::vector> poly00012132(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012133 +// +// +template +std::vector> poly00012133(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012223 +// +// +template +std::vector> poly00012223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012230 +// +// +template +std::vector> poly00012230(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012231 +// +// +template +std::vector> poly00012231(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012232 +// +// +template +std::vector> poly00012232(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012233 +// +// +template +std::vector> poly00012233(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012330 +// +// +template +std::vector> poly00012330(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012331 +// +// +template +std::vector> poly00012331(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012332 +// +// +template +std::vector> poly00012332(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012333 +// +// +template +std::vector> poly00012333(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111123 +// +// +template +std::vector> poly00111123(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111203 +// +// +template +std::vector> poly00111203(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111223 +// +// +template +std::vector> poly00111223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111230 +// +// +template +std::vector> poly00111230(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111232 +// +// +template +std::vector> poly00111232(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111233 +// +// +template +std::vector> poly00111233(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112233 +// +// +template +std::vector> poly00112233(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112323 +// +// +template +std::vector> poly00112323(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112332 +// +// +template +std::vector> poly00112332(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121203 +// +// +template +std::vector> poly00121203(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121223 +// +// +template +std::vector> poly00121223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121233 +// +// +template +std::vector> poly00121233(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121300 +// +// +template +std::vector> poly00121300(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121301 +// +// +template +std::vector> poly00121301(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121302 +// +// +template +std::vector> poly00121302(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121320 +// +// +template +std::vector> poly00121320(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121321 +// +// +template +std::vector> poly00121321(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121323 +// +// +template +std::vector> poly00121323(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122103 +// +// +template +std::vector> poly00122103(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122113 +// +// +template +std::vector> poly00122113(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122133 +// +// +template +std::vector> poly00122133(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122300 +// +// +template +std::vector> poly00122300(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122301 +// +// +template +std::vector> poly00122301(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122302 +// +// +template +std::vector> poly00122302(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122313 +// +// +template +std::vector> poly00122313(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122331 +// +// +template +std::vector> poly00122331(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01101023 +// +// +template +std::vector> poly01101023(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01101223 +// +// +template +std::vector> poly01101223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01101231 +// +// +template +std::vector> poly01101231(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01102332 +// +// +template +std::vector> poly01102332(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121223 +// +// +template +std::vector> poly01121223(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121230 +// +// +template +std::vector> poly01121230(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01122330 +// +// +template +std::vector> poly01122330(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123023 +// +// +template +std::vector> poly01123023(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01233210 +// +// +template +std::vector> poly01233210(const int /*prec*/ = 10) +{ +return { + + +}; +} + + +//00001234 +// +// +template +std::vector> poly00001234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00010234 +// +// +template +std::vector> poly00010234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00011234 +// +// +template +std::vector> poly00011234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012034 +// +// +template +std::vector> poly00012034(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012134 +// +// +template +std::vector> poly00012134(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012234 +// +// +template +std::vector> poly00012234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012334 +// +// +template +std::vector> poly00012334(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012340 +// +// +template +std::vector> poly00012340(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012341 +// +// +template +std::vector> poly00012341(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012342 +// +// +template +std::vector> poly00012342(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012343 +// +// +template +std::vector> poly00012343(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00111234 +// +// +template +std::vector> poly00111234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112234 +// +// +template +std::vector> poly00112234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112324 +// +// +template +std::vector> poly00112324(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112334 +// +// +template +std::vector> poly00112334(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121234 +// +// +template +std::vector> poly00121234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121304 +// +// +template +std::vector> poly00121304(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121324 +// +// +template +std::vector> poly00121324(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121340 +// +// +template +std::vector> poly00121340(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121341 +// +// +template +std::vector> poly00121341(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121342 +// +// +template +std::vector> poly00121342(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121344 +// +// +template +std::vector> poly00121344(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122134 +// +// +template +std::vector> poly00122134(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122304 +// +// +template +std::vector> poly00122304(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122314 +// +// +template +std::vector> poly00122314(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122324 +// +// +template +std::vector> poly00122324(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122334 +// +// +template +std::vector> poly00122334(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122344 +// +// +template +std::vector> poly00122344(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123400 +// +// +template +std::vector> poly00123400(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123401 +// +// +template +std::vector> poly00123401(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123414 +// +// +template +std::vector> poly00123414(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123421 +// +// +template +std::vector> poly00123421(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123423 +// +// +template +std::vector> poly00123423(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01101234 +// +// +template +std::vector> poly01101234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01102334 +// +// +template +std::vector> poly01102334(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121234 +// +// +template +std::vector> poly01121234(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121340 +// +// +template +std::vector> poly01121340(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121341 +// +// +template +std::vector> poly01121341(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01122034 +// +// +template +std::vector> poly01122034(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01122334 +// +// +template +std::vector> poly01122334(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01122340 +// +// +template +std::vector> poly01122340(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123024 +// +// +template +std::vector> poly01123024(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01233214 +// +// +template +std::vector> poly01233214(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00012345 +// +// +template +std::vector> poly00012345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00112345 +// +// +template +std::vector> poly00112345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00121345 +// +// +template +std::vector> poly00121345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00122345 +// +// +template +std::vector> poly00122345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123405 +// +// +template +std::vector> poly00123405(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123415 +// +// +template +std::vector> poly00123415(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123425 +// +// +template +std::vector> poly00123425(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123455 +// +// +template +std::vector> poly00123455(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01102345 +// +// +template +std::vector> poly01102345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01121345 +// +// +template +std::vector> poly01121345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01122345 +// +// +template +std::vector> poly01122345(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123045 +// +// +template +std::vector> poly01123045(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123445 +// +// +template +std::vector> poly01123445(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123453 +// +// +template +std::vector> poly01123453(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01233245 +// +// +template +std::vector> poly01233245(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//00123456 +// +// +template +std::vector> poly00123456(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01123456 +// +// +template +std::vector> poly01123456(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01233456 +// +// +template +std::vector> poly01233456(const int /*prec*/ = 10) +{ +return { + + +}; +} + +//01234567 +// +// +template +std::vector> poly01234567(const int /*prec*/ = 10) +{ +return { + + +}; +} + // Cube (begin definition) using Cube = std::array; @@ -700,46 +2251,179 @@ class Triple_line_extractor public: boost::unordered_map create_polylines_fcts { - // One internal corner - { 00001221_c, CGAL::Mesh_3::poly00001221 } , - { 00111202_c, CGAL::Mesh_3::poly00111202 } , - { 01101001_c, CGAL::Mesh_3::poly01101001 } , - // Two curves - { 00011022_c, CGAL::Mesh_3::poly00011022 } , - { 00011221_c, CGAL::Mesh_3::poly00011221 } , - { 00011222_c, CGAL::Mesh_3::poly00011222 } , - { 00121200_c, CGAL::Mesh_3::poly00121200 } , - { 00121221_c, CGAL::Mesh_3::poly00121221 } , - { 00122100_c, CGAL::Mesh_3::poly00122100 } , - { 00122101_c, CGAL::Mesh_3::poly00122101 } , - // One curve - { 00000012_c, CGAL::Mesh_3::poly00000012 } , - { 00000112_c, CGAL::Mesh_3::poly00000112 } , - { 00000121_c, CGAL::Mesh_3::poly00000121 } , - { 00001112_c, CGAL::Mesh_3::poly00001112 } , - { 00001122_c, CGAL::Mesh_3::poly00001122 } , - { 00010121_c, CGAL::Mesh_3::poly00010121 } , - { 00010122_c, CGAL::Mesh_3::poly00010122 } , - { 00011002_c, CGAL::Mesh_3::poly00011002 } , - { 00011012_c, CGAL::Mesh_3::poly00011012 } , - { 00011110_c, CGAL::Mesh_3::poly00011110 } , - { 00011120_c, CGAL::Mesh_3::poly00011120 } , - { 00011121_c, CGAL::Mesh_3::poly00011121 } , - { 00011122_c, CGAL::Mesh_3::poly00011122 } , - { 00011220_c, CGAL::Mesh_3::poly00011220 } , - { 00012002_c, CGAL::Mesh_3::poly00012002 } , - { 00012012_c, CGAL::Mesh_3::poly00012012 } , - { 00012021_c, CGAL::Mesh_3::poly00012021 } , - { 00012110_c, CGAL::Mesh_3::poly00012110 } , - { 00012112_c, CGAL::Mesh_3::poly00012112 } , - { 00012120_c, CGAL::Mesh_3::poly00012120 } , - { 00012121_c, CGAL::Mesh_3::poly00012121 } , - { 00012122_c, CGAL::Mesh_3::poly00012122 } , - { 00012221_c, CGAL::Mesh_3::poly00012221 } , - { 00111100_c, CGAL::Mesh_3::poly00111100 } , - { 00111102_c, CGAL::Mesh_3::poly00111102 } , - { 00111220_c, CGAL::Mesh_3::poly00111220 } , - { 00121201_c, CGAL::Mesh_3::poly00121201 } + // One internal corner + { 00001221_c, CGAL::Mesh_3::poly00001221 } , + { 00111202_c, CGAL::Mesh_3::poly00111202 } , + { 01101001_c, CGAL::Mesh_3::poly01101001 } , + // Two curves + { 00011022_c, CGAL::Mesh_3::poly00011022 } , + { 00011221_c, CGAL::Mesh_3::poly00011221 } , + { 00011222_c, CGAL::Mesh_3::poly00011222 } , + { 00121200_c, CGAL::Mesh_3::poly00121200 } , + { 00121221_c, CGAL::Mesh_3::poly00121221 } , + { 00122100_c, CGAL::Mesh_3::poly00122100 } , + { 00122101_c, CGAL::Mesh_3::poly00122101 } , + // One curve + { 00000012_c, CGAL::Mesh_3::poly00000012 } , + { 00000112_c, CGAL::Mesh_3::poly00000112 } , + { 00000121_c, CGAL::Mesh_3::poly00000121 } , + { 00001112_c, CGAL::Mesh_3::poly00001112 } , + { 00001122_c, CGAL::Mesh_3::poly00001122 } , + { 00010121_c, CGAL::Mesh_3::poly00010121 } , + { 00010122_c, CGAL::Mesh_3::poly00010122 } , + { 00011002_c, CGAL::Mesh_3::poly00011002 } , + { 00011012_c, CGAL::Mesh_3::poly00011012 } , + { 00011110_c, CGAL::Mesh_3::poly00011110 } , + { 00011120_c, CGAL::Mesh_3::poly00011120 } , + { 00011121_c, CGAL::Mesh_3::poly00011121 } , + { 00011122_c, CGAL::Mesh_3::poly00011122 } , + { 00011220_c, CGAL::Mesh_3::poly00011220 } , + { 00012002_c, CGAL::Mesh_3::poly00012002 } , + { 00012012_c, CGAL::Mesh_3::poly00012012 } , + { 00012021_c, CGAL::Mesh_3::poly00012021 } , + { 00012110_c, CGAL::Mesh_3::poly00012110 } , + { 00012112_c, CGAL::Mesh_3::poly00012112 } , + { 00012120_c, CGAL::Mesh_3::poly00012120 } , + { 00012121_c, CGAL::Mesh_3::poly00012121 } , + { 00012122_c, CGAL::Mesh_3::poly00012122 } , + { 00012221_c, CGAL::Mesh_3::poly00012221 } , + { 00111100_c, CGAL::Mesh_3::poly00111100 } , + { 00111102_c, CGAL::Mesh_3::poly00111102 } , + { 00111220_c, CGAL::Mesh_3::poly00111220 } , + { 00121201_c, CGAL::Mesh_3::poly00121201 } , + // 4 color cases + { 00000123_c, CGAL::Mesh_3::poly00000123 } , + { 00001123_c, CGAL::Mesh_3::poly00001123 } , + { 00001223_c, CGAL::Mesh_3::poly00001223 } , + { 00010123_c, CGAL::Mesh_3::poly00010123 } , + { 00010230_c, CGAL::Mesh_3::poly00010230 } , + { 00010231_c, CGAL::Mesh_3::poly00010231 } , + { 00011023_c, CGAL::Mesh_3::poly00011023 } , + { 00011123_c, CGAL::Mesh_3::poly00011123 } , + { 00011223_c, CGAL::Mesh_3::poly00011223 } , + { 00011230_c, CGAL::Mesh_3::poly00011230 } , + { 00011231_c, CGAL::Mesh_3::poly00011231 } , + { 00011232_c, CGAL::Mesh_3::poly00011232 } , + { 00012003_c, CGAL::Mesh_3::poly00012003 } , + { 00012013_c, CGAL::Mesh_3::poly00012013 } , + { 00012023_c, CGAL::Mesh_3::poly00012023 } , + { 00012033_c, CGAL::Mesh_3::poly00012033 } , + { 00012113_c, CGAL::Mesh_3::poly00012113 } , + { 00012123_c, CGAL::Mesh_3::poly00012123 } , + { 00012130_c, CGAL::Mesh_3::poly00012130 } , + { 00012131_c, CGAL::Mesh_3::poly00012131 } , + { 00012132_c, CGAL::Mesh_3::poly00012132 } , + { 00012133_c, CGAL::Mesh_3::poly00012133 } , + { 00012223_c, CGAL::Mesh_3::poly00012223 } , + { 00012230_c, CGAL::Mesh_3::poly00012230 } , + { 00012231_c, CGAL::Mesh_3::poly00012231 } , + { 00012232_c, CGAL::Mesh_3::poly00012232 } , + { 00012233_c, CGAL::Mesh_3::poly00012233 } , + { 00012330_c, CGAL::Mesh_3::poly00012330 } , + { 00012331_c, CGAL::Mesh_3::poly00012331 } , + { 00012332_c, CGAL::Mesh_3::poly00012332 } , + { 00012333_c, CGAL::Mesh_3::poly00012333 } , + { 00111123_c, CGAL::Mesh_3::poly00111123 } , + { 00111203_c, CGAL::Mesh_3::poly00111203 } , + { 00111223_c, CGAL::Mesh_3::poly00111223 } , + { 00111230_c, CGAL::Mesh_3::poly00111230 } , + { 00111232_c, CGAL::Mesh_3::poly00111232 } , + { 00111233_c, CGAL::Mesh_3::poly00111233 } , + { 00112233_c, CGAL::Mesh_3::poly00112233 } , + { 00112323_c, CGAL::Mesh_3::poly00112323 } , + { 00112332_c, CGAL::Mesh_3::poly00112332 } , + { 00121203_c, CGAL::Mesh_3::poly00121203 } , + { 00121223_c, CGAL::Mesh_3::poly00121223 } , + { 00121233_c, CGAL::Mesh_3::poly00121233 } , + { 00121300_c, CGAL::Mesh_3::poly00121300 } , + { 00121301_c, CGAL::Mesh_3::poly00121301 } , + { 00121302_c, CGAL::Mesh_3::poly00121302 } , + { 00121320_c, CGAL::Mesh_3::poly00121320 } , + { 00121321_c, CGAL::Mesh_3::poly00121321 } , + { 00121323_c, CGAL::Mesh_3::poly00121323 } , + { 00122103_c, CGAL::Mesh_3::poly00122103 } , + { 00122113_c, CGAL::Mesh_3::poly00122113 } , + { 00122133_c, CGAL::Mesh_3::poly00122133 } , + { 00122300_c, CGAL::Mesh_3::poly00122300 } , + { 00122301_c, CGAL::Mesh_3::poly00122301 } , + { 00122302_c, CGAL::Mesh_3::poly00122302 } , + { 00122313_c, CGAL::Mesh_3::poly00122313 } , + { 00122331_c, CGAL::Mesh_3::poly00122331 } , + { 01101023_c, CGAL::Mesh_3::poly01101023 } , + { 01101223_c, CGAL::Mesh_3::poly01101223 } , + { 01101231_c, CGAL::Mesh_3::poly01101231 } , + { 01102332_c, CGAL::Mesh_3::poly01102332 } , + { 01121223_c, CGAL::Mesh_3::poly01121223 } , + { 01121230_c, CGAL::Mesh_3::poly01121230 } , + { 01122330_c, CGAL::Mesh_3::poly01122330 } , + { 01123023_c, CGAL::Mesh_3::poly01123023 } , + { 01233210_c, CGAL::Mesh_3::poly01233210 } , + // 5 colors + { 00001234_c, CGAL::Mesh_3::poly00001234 } , + { 00010234_c, CGAL::Mesh_3::poly00010234 } , + { 00011234_c, CGAL::Mesh_3::poly00011234 } , + { 00012034_c, CGAL::Mesh_3::poly00012034 } , + { 00012134_c, CGAL::Mesh_3::poly00012134 } , + { 00012234_c, CGAL::Mesh_3::poly00012234 } , + { 00012334_c, CGAL::Mesh_3::poly00012334 } , + { 00012340_c, CGAL::Mesh_3::poly00012340 } , + { 00012341_c, CGAL::Mesh_3::poly00012341 } , + { 00012342_c, CGAL::Mesh_3::poly00012342 } , + { 00012343_c, CGAL::Mesh_3::poly00012343 } , + { 00111234_c, CGAL::Mesh_3::poly00111234 } , + { 00112234_c, CGAL::Mesh_3::poly00112234 } , + { 00112324_c, CGAL::Mesh_3::poly00112324 } , + { 00112334_c, CGAL::Mesh_3::poly00112334 } , + { 00121234_c, CGAL::Mesh_3::poly00121234 } , + { 00121304_c, CGAL::Mesh_3::poly00121304 } , + { 00121324_c, CGAL::Mesh_3::poly00121324 } , + { 00121340_c, CGAL::Mesh_3::poly00121340 } , + { 00121341_c, CGAL::Mesh_3::poly00121341 } , + { 00121342_c, CGAL::Mesh_3::poly00121342 } , + { 00121344_c, CGAL::Mesh_3::poly00121344 } , + { 00122134_c, CGAL::Mesh_3::poly00122134 } , + { 00122304_c, CGAL::Mesh_3::poly00122304 } , + { 00122314_c, CGAL::Mesh_3::poly00122314 } , + { 00122324_c, CGAL::Mesh_3::poly00122324 } , + { 00122334_c, CGAL::Mesh_3::poly00122334 } , + { 00122344_c, CGAL::Mesh_3::poly00122344 } , + { 00123400_c, CGAL::Mesh_3::poly00123400 } , + { 00123401_c, CGAL::Mesh_3::poly00123401 } , + { 00123414_c, CGAL::Mesh_3::poly00123414 } , + { 00123421_c, CGAL::Mesh_3::poly00123421 } , + { 00123423_c, CGAL::Mesh_3::poly00123423 } , + { 01101234_c, CGAL::Mesh_3::poly01101234 } , + { 01102334_c, CGAL::Mesh_3::poly01102334 } , + { 01121234_c, CGAL::Mesh_3::poly01121234 } , + { 01121340_c, CGAL::Mesh_3::poly01121340 } , + { 01121341_c, CGAL::Mesh_3::poly01121341 } , + { 01122034_c, CGAL::Mesh_3::poly01122034 } , + { 01122334_c, CGAL::Mesh_3::poly01122334 } , + { 01122340_c, CGAL::Mesh_3::poly01122340 } , + { 01123024_c, CGAL::Mesh_3::poly01123024 } , + { 01233214_c, CGAL::Mesh_3::poly01233214 } , + // 6 colors + { 00012345_c, CGAL::Mesh_3::poly00012345 } , + { 00112345_c, CGAL::Mesh_3::poly00112345 } , + { 00121345_c, CGAL::Mesh_3::poly00121345 } , + { 00122345_c, CGAL::Mesh_3::poly00122345 } , + { 00123405_c, CGAL::Mesh_3::poly00123405 } , + { 00123415_c, CGAL::Mesh_3::poly00123415 } , + { 00123425_c, CGAL::Mesh_3::poly00123425 } , + { 00123455_c, CGAL::Mesh_3::poly00123455 } , + { 01102345_c, CGAL::Mesh_3::poly01102345 } , + { 01121345_c, CGAL::Mesh_3::poly01121345 } , + { 01122345_c, CGAL::Mesh_3::poly01122345 } , + { 01123045_c, CGAL::Mesh_3::poly01123045 } , + { 01123445_c, CGAL::Mesh_3::poly01123445 } , + { 01123453_c, CGAL::Mesh_3::poly01123453 } , + { 01233245_c, CGAL::Mesh_3::poly01233245 } , + // 7 colors + { 00123456_c, CGAL::Mesh_3::poly00123456 } , + { 01123456_c, CGAL::Mesh_3::poly01123456 } , + { 01233456_c, CGAL::Mesh_3::poly01233456 } , + // 8 colors + { 01234567_c, CGAL::Mesh_3::poly01234567 } }; };//class Triple_line_extractor From bff69397b674b91617776746ab4f7b3d128367b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 13 Jun 2022 14:14:43 +0200 Subject: [PATCH 040/144] add missing case and start/end indices --- .../Mesh_3/features_detection/combinations.h | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h index 01474531f5c..29149a2dd66 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h @@ -31,12 +31,12 @@ namespace internal const std::array combinations[] = { // 1 color - {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, //0 // 2 colors - {0,0,0,0,0,0,0,1}, - {0,0,0,0,0,0,1,1}, + {0,0,0,0,0,0,0,1}, //1 + {0,0,0,0,0,0,1,1}, //2 // 3 colors - {0,0,0,0,0,0,1,2}, + {0,0,0,0,0,0,1,2}, //3 {0,0,0,0,0,1,1,0}, {0,0,0,0,0,1,1,1}, {0,0,0,0,0,1,1,2}, @@ -90,9 +90,10 @@ namespace internal {0,1,1,0,1,0,0,1}, {0,1,1,0,1,0,0,2}, {0,1,1,0,1,2,2,1}, - {0,1,1,2,1,2,2,0}, + {0,1,1,2,1,2,2,0}, //57 // 4 colors - {0,0,0,0,0,1,2,3}, + {0,0,0,0,0,1,2,3}, //58 + {0,0,0,0,1,1,2,3}, {0,0,0,0,1,2,2,3}, {0,0,0,1,0,1,2,3}, {0,0,0,1,0,2,3,0}, @@ -156,9 +157,9 @@ namespace internal {0,1,1,2,1,2,3,0}, {0,1,1,2,2,3,3,0}, {0,1,1,2,3,0,2,3}, - {0,1,2,3,3,2,1,0}, + {0,1,2,3,3,2,1,0}, //123 // 5 colors - {0,0,0,0,1,2,3,4}, + {0,0,0,0,1,2,3,4}, //124 {0,0,0,1,0,2,3,4}, {0,0,0,1,1,2,3,4}, {0,0,0,1,2,0,3,4}, @@ -200,9 +201,9 @@ namespace internal {0,1,1,2,2,3,3,4}, {0,1,1,2,2,3,4,0}, {0,1,1,2,3,0,2,4}, - {0,1,2,3,3,2,1,4}, + {0,1,2,3,3,2,1,4}, //166 // 6 colors - {0,0,0,1,2,3,4,5}, + {0,0,0,1,2,3,4,5}, //167 {0,0,1,1,2,3,4,5}, {0,0,1,2,1,3,4,5}, {0,0,1,2,2,3,4,5}, @@ -216,13 +217,13 @@ namespace internal {0,1,1,2,3,0,4,5}, {0,1,1,2,3,4,4,5}, {0,1,1,2,3,4,5,3}, - {0,1,2,3,3,2,4,5}, + {0,1,2,3,3,2,4,5}, //181 // 7 colors - {0,0,1,2,3,4,5,6}, + {0,0,1,2,3,4,5,6}, //182 {0,1,1,2,3,4,5,6}, - {0,1,2,3,3,4,5,6}, + {0,1,2,3,3,4,5,6}, //184 // 8 colors - {0,1,2,3,4,5,6,7} + {0,1,2,3,4,5,6,7} //185 }; From 3e081a2497bdc03b45fff8718622624a9c599d90 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 13 Jun 2022 14:51:49 +0200 Subject: [PATCH 041/144] remove unused typedef --- .../Mesh_3/mesh_3D_image_with_detection_of_features.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index 070afefe618..a8749bb22c0 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -39,8 +39,6 @@ using namespace CGAL::parameters; int main(int argc, char* argv[]) { - typedef unsigned char Word_type; - const std::string fname = (argc>1)?argv[1]:CGAL::data_file_path("images/420.inr"); // Loads image CGAL::Image_3 image; From 41143915e48717f303088fa7e84bfe4418d9e902 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 27 Jun 2022 08:48:04 +0200 Subject: [PATCH 042/144] typo Co-authored-by: Laurent Rineau --- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 705061936b0..8ecb7ff3222 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -282,7 +282,7 @@ different label in the input image. This includes: - internal polylines at the intersection of three subdomains, - polylines at the intersection between two subdomains and the bounding box of the image, -- the bouding box edges when they are incident to "inner" voxels. +- the bounding box edges when they are incident to "inner" voxels. This constructor uses named parameters (from the Boost Parameter Library). They can be specified in any order. From 8a14b524653a5169c7e04bdc2ee26b622ca34939 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 28 Jun 2022 12:24:20 +0200 Subject: [PATCH 043/144] fix header protection macro --- Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h index 523bc9265f9..9d148cb0845 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h @@ -14,8 +14,8 @@ // //****************************************************************************** -#ifndef CGAL_MESH_3_DETECT_TRIPLE_LINES_H -#define CGAL_MESH_3_DETECT_TRIPLE_LINES_H +#ifndef CGAL_MESH_3_DETECT_FEATURES_IN_IMAGE_H +#define CGAL_MESH_3_DETECT_FEATURES_IN_IMAGE_H #include @@ -254,4 +254,4 @@ bool detect_features_in_image(const CGAL::Image_3& image, Mesh_domain& domain) }//end namespace CGAL -#endif //CGAL_MESH_3_DETECT_TRIPLE_LINES_H +#endif //CGAL_MESH_3_DETECT_FEATURES_IN_IMAGE_H From 733485169b01cb95562ec46cf74600c4e9a3fc38 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 28 Jun 2022 12:26:09 +0200 Subject: [PATCH 044/144] update CHANGES.md --- Installation/CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 9dfd6db3c6a..cf0bf44aacd 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -18,7 +18,7 @@ CGAL tetrahedral Delaunay refinement algorithm. ### [Tetrahedral Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) - Added a mesh domain named constructor `CGAL::create_labeled_image_mesh_domain_with_features()` for automatic detection and protection -of triple lines extracted from labeled images for tetrahedral mesh generation. +of feature curves extracted from labeled images, for tetrahedral mesh generation. [Release 5.5](https://github.com/CGAL/cgal/releases/tag/v5.5) From d44a54d59b193d9d574a933f3a7bce511fb4a51f Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 28 Jun 2022 12:29:35 +0200 Subject: [PATCH 045/144] we detect triple lines, not sharp features --- Installation/CHANGES.md | 6 ++++-- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index cf0bf44aacd..a2f43f91d29 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -17,8 +17,10 @@ CGAL tetrahedral Delaunay refinement algorithm. ### [Tetrahedral Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) -- Added a mesh domain named constructor `CGAL::create_labeled_image_mesh_domain_with_features()` for automatic detection and protection -of feature curves extracted from labeled images, for tetrahedral mesh generation. +- Added a mesh domain named constructor `CGAL::create_labeled_image_mesh_domain_with_features()` +for automatic detection and protection +of 1D-curves that lie at the intersection of three or more subdomains, +extracted from labeled images. [Release 5.5](https://github.com/CGAL/cgal/releases/tag/v5.5) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 8ecb7ff3222..b3c96a48204 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -27,7 +27,8 @@ static template member functions that act as named constructors:
  • `create_implicit_mesh_domain()`, to create a domain from an implicit function,
  • `create_labeled_image_mesh_domain()`, to create a domain from a 3D labeled image, and
  • `create_labeled_image_mesh_domain_with_features()`, to create a domain from a 3D labeled image -with automatically detected triple lines. +with automatically detected 1D-curves that lie +at the intersection of three or more subdomains. \tparam BGT is a geometric traits class that provides From 70bc1b34cfd6e1289621c77a1c29b4b8f6a1eee4 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 30 Jun 2022 12:09:55 +0200 Subject: [PATCH 046/144] remove verbose macro --- Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp index c7f205091ba..bfc1f79dce9 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_variable_size.cpp @@ -1,5 +1,3 @@ -#define CGAL_MESH_3_VERBOSE - #include #include From 17b760a8ea8c4b419b6b9cecbc45440327459ef7 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 30 Jun 2022 12:18:49 +0200 Subject: [PATCH 047/144] rename outdated header protection macros --- Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h | 6 +++--- .../include/CGAL/Mesh_3/features_detection/combinations.h | 6 +++--- Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h | 6 +++--- .../CGAL/Mesh_3/features_detection/cube_isometries.h | 6 +++--- .../CGAL/Mesh_3/features_detection/features_detection.h | 6 +++--- .../Mesh_3/features_detection/features_detection_helpers.h | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h index 1334125b484..5510f6061bf 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/cases_table.h @@ -14,8 +14,8 @@ // //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H -#define CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_CASES_TABLES_H +#define CGAL_MESH_3_FEATURES_DETECTION_CASES_TABLES_H #include @@ -4201,4 +4201,4 @@ const Cases cases = { }//end namespace Mesh_3 }//end namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_CASES_TABLES_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_CASES_TABLES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h index 29149a2dd66..a241ed1eade 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/combinations.h @@ -15,8 +15,8 @@ //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H -#define CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_COMBINATIONS_H +#define CGAL_MESH_3_FEATURES_DETECTION_COMBINATIONS_H #include @@ -232,4 +232,4 @@ namespace internal }//end namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_COMBINATIONS_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_COMBINATIONS_H diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h index 5eecaec45be..ab08d468423 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/coordinates.h @@ -15,8 +15,8 @@ //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H -#define CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_COORDINATES_H +#define CGAL_MESH_3_FEATURES_DETECTION_COORDINATES_H #include @@ -59,4 +59,4 @@ namespace internal }//end namespace Mesh_3 }//end namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_COORDINATES_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_COORDINATES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h index 1e00785103b..f1c76005625 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/cube_isometries.h @@ -14,8 +14,8 @@ // //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H -#define CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_CUBE_ISOMETRIES_H +#define CGAL_MESH_3_FEATURES_DETECTION_CUBE_ISOMETRIES_H #include @@ -86,4 +86,4 @@ namespace internal }//end namespace Mesh_3 }//end namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_CUBE_ISOMETRIES_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_CUBE_ISOMETRIES_H diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index 0382819a1d6..cc0a3a9ee6e 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -15,8 +15,8 @@ //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_H -#define CGAL_MESH_3_TRIPLE_LINES_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_H +#define CGAL_MESH_3_FEATURES_DETECTION_H #include @@ -2431,4 +2431,4 @@ public: }//namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_H diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h index dfcc8ac17f1..b3bcfb28f7a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection_helpers.h @@ -15,8 +15,8 @@ //****************************************************************************** -#ifndef CGAL_MESH_3_TRIPLE_LINES_HELPERS_H -#define CGAL_MESH_3_TRIPLE_LINES_HELPERS_H +#ifndef CGAL_MESH_3_FEATURES_DETECTION_HELPERS_H +#define CGAL_MESH_3_FEATURES_DETECTION_HELPERS_H #include @@ -69,4 +69,4 @@ namespace internal }//end namespace Mesh_3 }//end namespace CGAL -#endif // CGAL_MESH_3_TRIPLE_LINES_HELPERS_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_HELPERS_H From 3470370807842364dfaf0f737a5db80310ca9949 Mon Sep 17 00:00:00 2001 From: Christopher Nicol Date: Thu, 30 Jun 2022 15:26:09 +0200 Subject: [PATCH 048/144] Addition of the 4-5-6-7-8 colors cases --- .../features_detection/features_detection.h | 2765 +++++++++++++---- 1 file changed, 2165 insertions(+), 600 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index cc0a3a9ee6e..c95aa4c64ae 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -571,7 +571,7 @@ std::vector> poly00012120(const int prec = 10) { return { create_polyline

    (2. / 3, 1, [](double z) { return P((3 * z - 1) / (3 * z), (3 * z * z - 2 * z) / (6 * z * z - 5 * z + 1), z); }, - prec) }; + prec)}; } // // 00012121 @@ -656,22 +656,19 @@ std::vector> poly00121201(const int prec = 10) }; } -// 00000123 -// curve_1 : x = 3./4. - sqrt(z*(9.*z - 8))/(4*z), y = 3./4. - sqrt(z*(9.*z - 8))/(4*z), z = [8/9, 1] -// curve 2 : x = 3./4. + sqrt(z*(9.*z - 8))/(4*z), y = 3./4. + sqrt(z*(9.*z - 8))/(4*z), z = [8/9, 1] -// curve 3 : x =1/2, y = -(z-2.)/(2.*z), z = [2/3, 1] -// curve 4 : x = -(z/2.-1)/z, y = 1./2., z =[2/3, 1] + +double limit_value(double bound, double direction, double epsilon=1e-6) +{ + return bound + direction * epsilon; +} + +// 00000123 +// curve 1 : x =1/2, y = -(z-2.)/(2.*z), z = [2/3, 1] +// curve 2 : x = -(z/2.-1)/z, y = 1./2., z =[2/3, 1] template std::vector> poly00000123(const int prec = 10) { return { - create_polyline(8./9, 1., P(3./4, 3./4, 8./9), - [](double z) { return P( 3./4. - sqrt(z*(9.*z - 8))/(4*z), 3./4. - sqrt(z*(9.*z - 8))/(4*z), z ); }, - prec), - create_polyline(8./9, 1., P(3./4, 3./4, 8./9), - [](double z) { return P( 3./4. + sqrt(z*(9.*z - 8))/(4*z), 3./4. + sqrt(z*(9.*z - 8))/(4*z), z ); }, - prec), - create_polyline(2./3, 1., P(1./2, 1, 2./3), [](double z) { return P( 1./2, -(z-2.)/(2.*z), z); }, prec), @@ -683,44 +680,70 @@ std::vector> poly00000123(const int prec = 10) //00001123 -// -// +// curve 1 : x = (3*z - 2)/(2*z - 1), y = (2*z - 1)/z, z = [2/3, 3/4] +// curve 2 : x = -(z - 1)/(2*z - 1), y = (2*z - 1)/z, z = [2/3, 3/4] +// curve 3 : x =1/2, y = -2*(z - 1)/z, z = [2/3, 3/4] template -std::vector> poly00001123(const int /*prec*/ = 10) +std::vector> poly00001123(const int prec = 10) { return { - + create_polyline(2./3, 3./4, P(0, 1./2, 2./3), + [](double z) { return P( (3*z - 2)/(2*z - 1), (2*z - 1)/z, z); }, + prec), + create_polyline(2./3, 3./4, P(1, 1./2, 2./3), + [](double z) { return P( -(z - 1)/(2*z - 1),(2*z - 1)/z, z); }, + prec), + create_polyline(2./3, 3./4, P(1./2, 1, 2./3), + [](double z) { return P( 1./2,-2*(z - 1)/z, z); }, + prec), }; } //00001223 -// -// + +// curve 1 : x = -(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, y = -sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z = [2/3, 9/13] +// curve 2 : x = -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, y = sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z = [2/3, 9/13] +// curve 3 : x = -(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, y = -sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z = [2/3, 9/13] +// curve 4 : x = -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, y = sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z = [2/3, 9/13] template -std::vector> poly00001223(const int /*prec*/ = 10) +std::vector> poly00001223(const int prec = 10) { return { - - + create_polyline(2./3, 9./13, P(1./2, 0., 2./3), + [](double z) { return P( -(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, -sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z); }, + prec), + create_polyline(2./3, 9./13, P(0., 1./2, 2./3), + [](double z) { return P( -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z); }, + prec), + create_polyline(2./3, 9./13, P(1., 1./2, 2./3), + [](double z) { return P(-(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, -sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z); }, + prec), + create_polyline(2./3, 9./13, P(1./2, 1., 2./3), + [](double z) { return P( -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z); }, + prec), }; } //00010123 -// -// +// curve 1 : x = -(3*z - 1)*(z*z /(3*z - 1) - 1)/(2*z*z), y = z/(3*z - 1), z = [1/2,1] +// curve 2 : x = 1./2, y = -(z - 2)/(z + 1), z = [1/2,1] template -std::vector> poly00010123(const int /*prec*/ = 10) +std::vector> poly00010123(const int prec = 10) { return { - + create_polyline(1./2, 1., P(1./2, 1., 1./2), + [](double z) { return P(-(3*z - 1)*(z*z /(3*z - 1) - 1)/(2*z*z), z/(3*z - 1),z); }, + prec), + create_polyline(1./2, 1., P(1./2, 1., 1./2), + [](double z) { return P( 1./2 , -(z - 2)/(z + 1),z); }, + prec), }; } //00010230 -// -// +// no curves template std::vector> poly00010230(const int /*prec*/ = 10) { @@ -731,656 +754,1058 @@ return { } //00010231 -// -// +// curve 1 : x = (z + 1)*(z**2/(z + 1) - 1)/(z*(z - 3)), y = z/(z + 1), z = [1/2,1] +// curve 2 : x = (z + 1 + (z**2 - 3*z)*(z**2 - z - 1)/(z*(z - 3)))/(z*(z + 1)), y = (z**2 - z - 1)/(z*(z - 3)), z = [1/2,1] template -std::vector> poly00010231(const int /*prec*/ = 10) +std::vector> poly00010231(const int prec = 10) { return { - + create_polyline(1./2, 1., P(1., 1./3, 1./2), + [](double z) { return P((z + 1)*(z*z/(z + 1) - 1)/(z*(z - 3)), z/(z + 1),z); }, + prec), + create_polyline(1./2, 1., P(1./3, 1., 1./2), + [](double z) { return P((z + 1 + (z*z - 3*z)*(z*z - z - 1)/(z*(z - 3)))/(z*(z + 1)), (z*z - z - 1)/(z*(z - 3)),z); }, + prec), }; } //00011023 -// -// + +// curve 1 : x = -(-2*z**2 + z + (z**2 - 3*z)*(-(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3))) + 1)/(2*z**2), y = -(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3)), z = [2/3,1] +// curve 2 : x = 1/2, y = -(z - 2)/(z + 1), z = [1/2,1] +// curve 3 : x = [1/2,1[, y = (sqrt(8*x*x*x - 3*x*x - 2*x + 1) + x + 1)/(2*x*(2*x + 1)), z = (sqrt(8*x*x*x - 3*x*x - 2*x + 1) - x - 1)/(2*(2*x*x - x - 1))) template -std::vector> poly00011023(const int /*prec*/ = 10) +std::vector> poly00011023(const int prec = 10) { return { + create_polyline(2./3, 1., P(0, 1./2, 2./3), + [](double z) { return P(-(-2*z*z + z + (z*z - 3*z)*(-(z*z + z + 1)/(2*z*(z - 3)) + sqrt(z*z*z*z + 6*z*z*z - 9*z*z + 2*z + 1)/(2*z*(z - 3))) + 1)/(2*z*z) , -(z*z + z + 1)/(2*z*(z - 3)) + sqrt(z*z*z*z + 6*z*z*z - 9*z*z + 2*z + 1)/(2*z*(z - 3)) ,z); }, + prec), + create_polyline(1./2, 1., P(1./2, 1., 1./2), + [](double z) { return P(1./2,-(z - 2)/(z + 1) ,z); }, + prec), + create_polyline(1./2, limit_value(1.,-1.), P(1./2, 1.,1./2), + [](double x) { return P(x, (sqrt(8*x*x*x - 3*x*x - 2*x + 1) + x + 1)/(2*x*(2*x + 1)) ,(sqrt(8*x*x*x - 3*x*x - 2*x + 1) - x - 1)/(2*(2*x*x - x - 1)) ); }, + prec), }; } //00011123 -// -// +// curve 1 : x = z*(3*z - 2)/(2*z*z - 1), y = (2*z*z - 1)/(z*(4*z - 3)), z = [1/2.2/3] +// curve 2 : x = 1./2, y = [2/3,1], z = y/(2*(-1 + 2*y)) +// problem with close polylines, there is an over refinement template -std::vector> poly00011123(const int /*prec*/ = 10) +std::vector> poly00011123(const int prec = 10) { return { - - + create_polyline(1./2, 2./3, P(1./2, 1., 1./2),P(0., 1./2, 2./3), + [](double z) { return P(z*(3*z - 2)/(2*z*z - 1) , (2*z*z - 1)/(z*(4*z - 3)) ,z); }, + prec), + create_polyline( 2./3,1., P(1./2, 2./3, 1.),P(1./2, 1., 1./2), + [](double y) { return P(1./2,y,y/(2*(-1 + 2*y))); }, + prec) }; } -//00011223 -// -// +//00011223 +// curve 1 : x = [1/2,3/5[U ]3/5,1], y = (-2 + 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) +// curve 2 : x = ]0,1/2], y = (-2 + 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) +// curve 3 : x = -(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1), y = 3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [1/2,4/7] +// curve 4 : x = -(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1), y = 3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [1/2,4/7] +// problem with close polylines, there is an over refinement template -std::vector> poly00011223(const int /*prec*/ = 10) +std::vector> poly00011223(const int prec = 10) { return { - - + create_polyline( 1./2,4./7, P(1./2, 1., 1./2),P(2./3, 2./3, 4./7), + [](double z) { return P(-(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1),3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)),z); }, + prec), + create_polyline( 1./2,4./7, P(1., 1./2, 1./2),P(2./3, 2./3, 4./7), + [](double z) { return P(-(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1),3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)),z); }, + prec), + create_polyline( 1./2,limit_value(3./5,-1.), P(1./2, 1., 1./2),P(3./5,5./7,5./9), + [](double x) { return P(x,(-2. + 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)),(2. - 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) ); }, + prec), + create_polyline(limit_value(3./5,1.),1.,P(3./5,5./7,5./9),P(1., 1./2, 1./2), + [](double x) { return P(x,(-2. + 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)),(2. - 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) ); }, + prec), + create_polyline( limit_value(0.,1.), 1./2, P(0., 1./2, 2./3),P(1./2, 0., 2./3), + [](double x) { return P(x,(-2. + 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)),(2. - 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) ); }, + prec), }; } - //00011230 -// -// +//curve 1 : x = -(-4*z*z + z + (3*z*z - z)*((5*z*z - z - 1)/(2*z*(3*z - 1)) - sqrt(-11*z*z*z*z + 26*z*z*z - 17*z*z + 2*z + 1)/(2*z*(3*z - 1))) + 1)/(z*(5*z - 3)), y = (5*z*z - z - 1)/(2*z*(3*z - 1)) - sqrt(-11*z*z*z*z + 26*z*z*z - 17*z*z + 2*z + 1)/(2*z*(3*z - 1)), z = [2/3,1] +//curve 2 : x = ]0,1/2], y = (-2 + x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)), z = (2 - x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*(3 - 5*x + 3*x*x)) template -std::vector> poly00011230(const int /*prec*/ = 10) +std::vector> poly00011230(const int prec = 10) { return { - + create_polyline(2./3, 1., P(1./2, 0.,2./3), P(1./2,1./2,1.), + [](double z) { return P(-(-4*z*z + z + (3*z*z - z)*((5*z*z - z - 1)/(2*z*(3*z - 1)) - sqrt(-11*z*z*z*z + 26*z*z*z - 17*z*z + 2*z + 1)/(2*z*(3*z - 1))) + 1)/(z*(5*z - 3)),(5*z*z - z - 1)/(2*z*(3*z - 1)) - sqrt(-11*z*z*z*z + 26*z*z*z - 17*z*z + 2*z + 1)/(2*z*(3*z - 1)),z ); }, + prec), + create_polyline(limit_value(0.,1.), 1./2, P(0., 1./2,2./3), P(1./2,1./2,1.), + [](double x) { return P(x,(-2 + x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)),(2 - x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*(3 - 5*x + 3*x*x))); }, + prec), }; } //00011231 -// -// +//curve 1 : x = [1/2,1], y = (-1 + 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*x*(-1 + 4*x)), z = (1 - 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*(1 - 3*x + 2*x*x)) +//curve 2 : x = [0,1/3], y = (-2 + 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)), z = (2 - 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*(3 - 5*x + 2*x*x)) template -std::vector> poly00011231(const int /*prec*/ = 10) +std::vector> poly00011231(const int prec = 10) { return { - - + create_polyline(1./2, 1., P(1./2, 0.,2./3), P(1.,1./3,1./2), + [](double x) { return P(x,(-1 + 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*x*(-1 + 4*x)),(1 - 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*(1 - 3*x + 2*x*x)) ); }, + prec), + create_polyline(0., 1./3, P(0.,1./2,2./3), P(1./3,1.,1./2), + [](double x) { return P(x,(-2 + 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)) ,(2 - 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*(3 - 5*x + 2*x*x)) ); }, + prec), }; } //00011232 -// -// +//curve 1 : x = [1/2,1[, y = (-1 + 3*x*x - sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(-1 + x)*x), z = (1 + 3*x*x - sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(1 + 2*x*x)) +//curve 2 : x = [0.366025,1./2], y = (-1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(-1 + x)*x), z = (1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(1 + 2*x*x)) +//curve 3 : x = -(-3.*z*z + z + (3*z*z - 3*z)*((2*z + 1)/(6*z) - sqrt(-8*z*z + 4*z + 1)/(6*z)) + 1)/(z*(2*z - 1)), y = (2*z + 1)/(6*z) - sqrt(-8.*z*z + 4*z + 1)/(6*z), z = [2./3,(1+1.73205)/4] +//curve 4 : x = [0.366025,1./2], y = -x/(-1 + x), z = (-1 + x + x*x)/(-1 + 2*x*x) +//curve 5 : x = [1./3,0.366025], y = -x/(-1 + x), z = -(x*x)/(1 - 4*x + 2*x*x) template -std::vector> poly00011232(const int /*prec*/ = 10) +std::vector> poly00011232(const int prec = 10) { return { - - + create_polyline(1./2,limit_value(1.,-1.), P(1./2, 1.,1./2), P(1.,1./2,1./3), + [](double x) { return P(x,(-1 + 3*x*x - sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(-1 + x)*x),(1 + 3*x*x - sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(1 + 2*x*x)) ); }, + prec), + create_polyline(0.366025,1./2, P(0.366025,0.57735,(1+1.73205)/4), P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(-1 + x)*x),(1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(1 + 2*x*x)) ); }, + prec), + create_polyline(2./3,(1+1.73205)/4.,P(0.,1./2,2./3),P(0.366025,0.57735,(1+1.73205)/4), + [](double z) { return P( -(-3.*z*z + z + (3*z*z - 3*z)*((2*z + 1)/(6*z) - sqrt(-8*z*z + 4*z + 1)/(6*z)) + 1)/(z*(2*z - 1)),(2*z + 1)/(6*z) - sqrt(-8.*z*z + 4*z + 1)/(6*z),z); }, + prec), + create_polyline(0.366025,1./2,P(0.366025,0.57735,(1+1.73205)/4),P(1./2,1.,1./2), + [](double x) { return P( x,-x/(-1 + x),(-1 + x + x*x)/(-1 + 2*x*x)); }, + prec), + create_polyline(1./3,0.366025,P(1./3,1./2,1.),P(0.366025,0.57735,(1+1.73205)/4), + [](double x) { return P( x,-x/(-1 + x),-(x*x)/(1 - 4*x + 2*x*x)); }, + prec), }; } //00012003 -// -// +// curve 1 : x = [2/3,1], y = (1 + x)/(-1 + 4*x), z = 1/2 template -std::vector> poly00012003(const int /*prec*/ = 10) +std::vector> poly00012003(const int prec = 10) { return { - + create_polyline(2./3, 1., P(2./3, 1.,1./2), P(1.,2./3,1./2), + [](double x) { return P(x,(1 + x)/(-1 + 4*x) ,1./2); }, + prec), }; } //00012013 -// -// +// curve 1 : x = -(-5*z*z + 6*z + (z*z - 3*z)*((2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3))) - 1)/(z*(5*z - 3)), y = (2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3)), z = [2/3,1] +// curve 2 : x = (3*z*z - 4*z + 1 - (z*z + z)*(2*z*z - 4*z + 1)/(z*(z + 1)))/(z*(3*z - 1)), y = -(2*z*z - 4*z + 1)/(z*(z + 1)), z = [1/2,1] template -std::vector> poly00012013(const int /*prec*/ = 10) +std::vector> poly00012013(const int prec = 10) { return { - + create_polyline(2./3, 1., P(0., 1./2,2./3), P(1./2,1./2,1.), + [](double z) { return P(-(-5*z*z + 6*z + (z*z - 3*z)*((2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3))) - 1)/(z*(5*z - 3)), (2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3)) ,z ); }, + prec), + create_polyline(1./2, 1., P(1., 2./3,1./2), P(1./2,1./2,1.), + [](double z) { return P( (3*z*z - 4*z + 1 - (z*z + z)*(2*z*z - 4*z + 1)/(z*(z + 1)))/(z*(3*z - 1)), -(2*z*z - 4*z + 1)/(z*(z + 1)),z ); }, + prec), }; } //00012023 -// -// +// curve 1 : x = 2*z/(2*z + 1), y = 1/(2*z), z = [1/2,1] +// curve 2 : x = [1/2,1], y = (x+1)/(3*x), z = 1/2 +// problem with close polylines, there is an over refinement template -std::vector> poly00012023(const int /*prec*/ = 10) +std::vector> poly00012023(const int prec = 10) { return { - + create_polyline(1./2, 1., P(1./2, 1.,1./2), + [](double z) { return P(2*z/(2*z + 1),1/(2*z) ,z ); }, + prec), + create_polyline(1./2, 1., P(1./2, 1.,1./2), + [](double x) { return P(x,(x+1)/(3*x) ,1./2 ); }, + prec), }; } //00012033 -// -// +// curve 1 : x = ((z*z - 2*z + 1 - (z*z - 2*z)*(2*z*z - 2*z + 1)/(z*(z - 2)))/(z*(z - 1)) , y = -(2*z*z - 2*z + 1)/(z*(z - 2)), z = [1/3,1/2] +// curve 2 : x = (z + (z + 2)*((z + 1)/(z + 2) - sqrt(z*z + z - 1)/(z + 2)) - 2)/(z - 1), y = (z + 1)/(z + 2) - sqrt(z*z + z - 1)/(z + 2), z = [2/3,1[ template -std::vector> poly00012033(const int /*prec*/ = 10) +std::vector> poly00012033(const int prec = 10) { return { - - + create_polyline(1./3, 1./2, P(1./2, 1.,1./3), P(1., 2./3,1./2), + [](double z) { return P((z*z - 2*z + 1 - (z*z - 2*z)*(2*z*z - 2*z + 1)/(z*(z - 2)))/(z*(z - 1)) ,-(2*z*z - 2*z + 1)/(z*(z - 2)) ,z ); }, + prec), +create_polyline(2./3,limit_value(1.,-1.), P(0., 1./2,2./3), P(1./2, 1./3,1.), + [](double z) { return P((z + (z + 2)*((z + 1)/(z + 2) - sqrt(z*z + z - 1)/(z + 2)) - 2)/(z - 1) ,(z + 1)/(z + 2) - sqrt(z*z + z - 1)/(z + 2) ,z ); }, + prec), }; } //00012113 -// -// +// curve 1 : x = -(-8*z*z + 7*z + (4*z*z - 3*z)*(-(z - 1.)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)), y = -(z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)), z = [(3.+ 2.23606)/8, 2./3] +// curve 2 : x = -(-8*z*z + 7*z + (4*z*z - 3*z)*((z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)), y = (z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)), z = [(3.+ 2.23606)/8, 2./3] template -std::vector> poly00012113(const int /*prec*/ = 10) +std::vector> poly00012113(const int prec = 10) { return { - + create_polyline((3.+ 2.23606)/8, 2./3,P(0.30902,0.30902,(3.+ 2.23606)/8), + [](double z) { return P(-(-8*z*z + 7*z + (4*z*z - 3*z)*(-(z - 1.)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)), -(z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)),z); }, + prec), + create_polyline((3.+ 2.23606)/8, 2./3,P(0.30902,0.30902,(3.+ 2.23606)/8), + [](double z) { return P( -(-8*z*z + 7*z + (4*z*z - 3*z)*((z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)),(z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)),z); }, + prec), }; } //00012123 -// -// +// curve 1 : x = (5*z*z - 5*z + 1)/(z*(4*z - 3)), y = z*(3*z - 2)/(5*z*z - 5*z + 1), z = [1/2,2/3] +// curve 2 : x = [1/2,2/3], y = (1-x)/x, z = (x-1)/(4*x-3) template -std::vector> poly00012123(const int /*prec*/ = 10) +std::vector> poly00012123(const int prec = 10) { return { - - + create_polyline(1./2, 2./3, P(1./2, 1.,1./2), + [](double z) { return P((5*z*z - 5*z + 1)/(z*(4*z - 3)), z*(3*z - 2)/(5*z*z - 5*z + 1) ,z ); }, + prec), + create_polyline(1./2, 2./3, P(1./2, 1.,1./2), + [](double x) { return P(x, (1-x)/x ,(x-1)/(4*x-3) ); }, + prec), }; } //00012130 -// -// +// curve 1 : x = -(2 - 3*z)/(3*z - 1), y = 1./2, z = [2/3,1] +//curve 2 : x = -(-7*z*z + 6*z + (4*z*z - 2*z)*(-sqrt((2*z - 1)*(8*z*z*z - 16*z*z + 10*z - 1))/(4*z*(2*z - 1)) + (4*z - 1)/(4*z)) - 1)/(z*(5*z - 3)), y = -sqrt((2*z - 1)*(8*z*z*z - 16*z*z + 10*z - 1))/(4*z*(2*z - 1)) + (4*z - 1)/(4*z), z = [2/3,1] template -std::vector> poly00012130(const int /*prec*/ = 10) +std::vector> poly00012130(const int prec = 10) { return { - - + create_polyline(2/3., 1., P(1./2, 0.,2./3),P(1./2,1./2,1.), + [](double z) { return P(-(-7*z*z + 6*z + (4*z*z - 2*z)*(-sqrt((2*z - 1)*(8*z*z*z - 16*z*z + 10*z - 1))/(4*z*(2*z - 1)) + (4*z - 1)/(4*z)) - 1)/(z*(5*z - 3)), -sqrt((2*z - 1)*(8*z*z*z - 16*z*z + 10*z - 1))/(4*z*(2*z - 1)) + (4*z - 1)/(4*z),z); }, + prec), +create_polyline(2/3., 1., P(0.,1./2,2./3),P(1./2,1./2,1.), + [](double z) { return P(-(2 - 3*z)/(3*z - 1),1./2,z); }, + prec), }; } //00012131 -// -// +// curve 1 : x = [0., (2. - 1.4142)/2], y = 1./2, z = (-2 + x)/(-3 + 2*x) +// curve 2 : x = [((2. - 1.4142)/2.,1./3], y = 1./2, z = -x/(-1 + 2*x) +// curve 3 : x = (z - 1)*(2*z*((z*z + z - 1)/(4*z*(z - 1)) - sqrt(9*z*z*z*z - 14*z*z*z + 7*z*z - 2*z + 1)/(4*z*(z - 1))) - 1)/(z*(2*z - 1)), y = (z*z + z - 1)/(4*z*(z - 1)) - sqrt(9*z*z*z*z - 14*z*z*z + 7*z*z - 2*z + 1)/(4*z*(z - 1)), z =[1./2, 1./1.4142] +// curve 4 : x = [(2. - 1.4142)/2, 1./2[, y = (-1 - x + 3*x*x + sqrt(1 - 6*x + 19*x*x - 22*x*x*x + 9*x*x*x*x))/(4*(-1 + x)*x), z = (1. - 5*x + 3*x*x + sqrt(1 - 6*x + 19*x*x - 22*x*x*x + 9*x*x*x*x))/(2*(1 - 3*x + 2*x*x)) template -std::vector> poly00012131(const int /*prec*/ = 10) +std::vector> poly00012131(const int prec = 10) { return { - - + create_polyline(0., (2. - 1.4142)/2, P(0., 1./2,2./3),P((2. - 1.4142)/2,1./2,1./1.4142), + [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, + prec), + create_polyline((2. - 1.4142)/2.,1./3,P((2. - 1.4142)/2,1./2,1./1.4142), P(1./3, 1./2,1.), + [](double x) { return P(x,1./2,-x/(-1 + 2*x) ); }, + prec), + create_polyline(1./2, 1./1.4142, P(1./3, 1.,1./2),P((2. - 1.4142)/2,1./2,1./1.4142), + [](double z) { return P((z - 1)*(2*z*((z*z + z - 1)/(4*z*(z - 1)) - sqrt(9*z*z*z*z - 14*z*z*z + 7*z*z - 2*z + 1)/(4*z*(z - 1))) - 1)/(z*(2*z - 1)),(z*z + z - 1)/(4*z*(z - 1)) - sqrt(9*z*z*z*z - 14*z*z*z + 7*z*z - 2*z + 1)/(4*z*(z - 1)) ,z); }, + prec), + create_polyline((2. - 1.4142)/2,limit_value(1./2,-1.),P((2. - 1.4142)/2,1./2,1./1.4142), P(1./2,0. ,2./3), + [](double x) { return P(x,(-1 - x + 3*x*x + sqrt(1 - 6*x + 19*x*x - 22*x*x*x + 9*x*x*x*x))/(4*(-1 + x)*x),(1. - 5*x + 3*x*x + sqrt(1 - 6*x + 19*x*x - 22*x*x*x + 9*x*x*x*x))/(2*(1 - 3*x + 2*x*x))); }, + prec), }; } //00012132 -// -// +// curve 1 : x = -(-7*z*z + 7*z + (3*z*z - 2*z)*(sqrt((z - 1)*(2*z - 1)*(14*z*z - 11*z + 1))/(2*z*(3*z - 2)) + (8*z*z - 7*z + 1)/(2*z*(3*z - 2))) - 1)/(z*(2*z - 3)), y = sqrt((z - 1)*(2*z - 1)*(14*z*z - 11*z + 1))/(2*z*(3*z - 2))+ (8*z*z - 7*z + 1)/(2*z*(3*z - 2)), z = [1/2,2/3[ +// curve 2 : x = -(-5*z + (z - 2)*(-sqrt((z - 1)*(3*z - 2))/(z - 2) + 2*(z - 1)/(z - 2)) + 4)/(2*z - 1), y = -sqrt((z - 1)*(3*z - 2))/(z - 2) + 2*(z - 1)/(z - 2), z = [1/2,2/3] template -std::vector> poly00012132(const int /*prec*/ = 10) +std::vector> poly00012132(const int prec = 10) { return { - - + create_polyline(1./2, limit_value(2./3,-1.), P(1./2, 1.,1./2),P(1./2,0.,2./3), + [](double z) { return P(-(-7*z*z + 7*z + (3*z*z - 2*z)*(sqrt((z - 1)*(2*z - 1)*(14*z*z - 11*z + 1))/(2*z*(3*z - 2)) + (8*z*z - 7*z + 1)/(2*z*(3*z - 2))) - 1)/(z*(2*z - 3)),sqrt((z - 1)*(2*z - 1)*(14*z*z - 11*z + 1))/(2*z*(3*z - 2))+ (8*z*z - 7*z + 1)/(2*z*(3*z - 2)),z); }, + prec), + create_polyline(1./2, (2./3), P(1./2, 1.,1./2),P(0.,1./2,2./3), + [](double z) { return P(-(-5*z + (z - 2)*(-sqrt((z - 1)*(3*z - 2))/(z - 2) + 2*(z - 1)/(z - 2)) + 4)/(2*z - 1),-sqrt((z - 1)*(3*z - 2))/(z - 2) + 2*(z - 1)/(z - 2),z); }, + prec), }; } //00012133 -// -// +// curve 1 : x = -(-6*z*z + 6*z + (3*z*z - 2*z)*((z - 1)*sqrt(13*z*z - 10*z + 1)/(2*z*(3*z - 2)) + (7*z*z - 6*z + 1)/(2*z*(3*z - 2))) - 1)/(3*z*(z - 1)), y = (z - 1)*sqrt(13*z*z - 10*z + 1)/(2*z*(3*z - 2)) + (7*z*z - 6*z + 1)/(2*z*(3*z - 2)), z = [2./3,0.70263] +// curve 2 : x = (2*z*z - 3*z + (3*z*z - 2*z)*(-(z*z - 3*z + 1)/(2*z*(3*z - 2)) - sqrt(13*z*z*z*z - 26*z*z*z + 19*z*z - 6*z + 1)/(2*z*(3*z - 2))) + 1)/(z*(z - 1)), y = -(z*z - 3*z + 1)/(2*z*(3*z - 2)) - sqrt(13*z*z*z*z - 26*z*z*z + 19*z*z - 6*z + 1)/(2*z*(3*z - 2)), z = [1./3,0.70263] +// curve 3 : x = [0,0.447683], y = (-1 + x)/(-2 + x), z = (2 - 2*x + x*x)/(3 - 3*x + x*x) +//curve 4 : x = -(-2*z + (5*z - 2)*((5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2))) + 1)/(z - 1), y = (5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2)), z = [0.70263,1] template -std::vector> poly00012133(const int /*prec*/ = 10) +std::vector> poly00012133(const int prec = 10) { return { - - + create_polyline(2./3,0.70263, P(1./2, 0.,2./3),P(0.447683,0.3555809, 0.70263), + [](double z) { return P(-(-6*z*z + 6*z + (3*z*z - 2*z)*((z - 1)*sqrt(13*z*z - 10*z + 1)/(2*z*(3*z - 2)) + (7*z*z - 6*z + 1)/(2*z*(3*z - 2))) - 1)/(3*z*(z - 1)),(z - 1)*sqrt(13*z*z - 10*z + 1)/(2*z*(3*z - 2)) + (7*z*z - 6*z + 1)/(2*z*(3*z - 2)),z); }, + prec), + create_polyline(1./3, 0.70263, P(1./2, 1.,1./3),P(0.447683,0.3555809, 0.70263), + [](double z) { return P((2*z*z - 3*z + (3*z*z - 2*z)*(-(z*z - 3*z + 1)/(2*z*(3*z - 2)) - sqrt(13*z*z*z*z - 26*z*z*z + 19*z*z - 6*z + 1)/(2*z*(3*z - 2))) + 1)/(z*(z - 1)), -(z*z - 3*z + 1)/(2*z*(3*z - 2)) - sqrt(13*z*z*z*z - 26*z*z*z + 19*z*z - 6*z + 1)/(2*z*(3*z - 2)),z); }, + prec), + create_polyline(0.,0.447683, P(0.,1./2,2./3),P(0.447683,0.3555809, 0.70263), + [](double x) { return P(x,(-1 + x)/(-2 + x),(2 - 2*x + x*x)/(3 - 3*x + x*x) ); }, + prec), + create_polyline(0.70263,1.,P(0.447683,0.3555809, 0.70263),P(1./2,1./3,1.), + [](double z) { return P(-(-2*z + (5*z - 2)*((5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2))) + 1)/(z - 1),(5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2)),z); }, + prec), }; } //00012223 -// -// +// curve 1 : x = 1/2y, y = [1/2,1], z = 1/2 template -std::vector> poly00012223(const int /*prec*/ = 10) +std::vector> poly00012223(const int prec = 10) { return { - + create_polyline(1./2, 1., P(1., 1./2,1./2), + [](double y) { return P( 1/(2*y) ,y,1./2); }, + prec), }; } //00012230 -// -// +// curve 1 : x = (3*z - 2)/(2*(2*z - 1)), y = 2*(2*z - 1)/(5*z - 2), z =[2/3,1] template -std::vector> poly00012230(const int /*prec*/ = 10) +std::vector> poly00012230(const int prec = 10) { return { - + create_polyline(2./3, 1., P(0., 1./2,2./3), + [](double z) { return P((3*z - 2)/(2*(2*z - 1)),2*(2*z - 1)/(5*z - 2),z); }, + prec), }; } //00012231 -// -// +// curve 1 : x = z*(z - 1)/(z**2 - 3*z + 1), y = (z**2 - 3*z + 1)/(z*(z - 2)), z=[1/2,2/3] +// curve 2 : x = z/(z + 1), y = (z - 1)*(z + 1)/(z*(z - 2)), z = [1/2,2/3] +// curve 3 : x = [2/5,1/2], y = 1/(2-x), z = x/(1-x) +// curve 4 : x = [0,2/5], y = 1/(2-x), z = 2./3 template -std::vector> poly00012231(const int /*prec*/ = 10) +std::vector> poly00012231(const int prec = 10) { return { - + create_polyline(1./2, 2./3, P(1., 1./3,1./2), + [](double z) { return P(z*(z - 1)/(z*z - 3*z + 1),(z*z - 3*z + 1)/(z*(z - 2)),z); }, + prec), + create_polyline(1./2, 2./3, P(1./3, 1.,1./2), + [](double z) { return P(z/(z + 1),(z - 1)*(z + 1)/(z*(z - 2)),z); }, + prec), + create_polyline(2./5,1./2, P(2./5, 5./8,2./3), + [](double x) { return P(x,1/(2-x),x/(1-x)); }, + prec), + create_polyline(0.,2./5., P(0.,1./2,2./3), + [](double x) { return P(x,1/(2-x),2./3); }, + prec), }; } //00012232 -// -// +// curve 1 : x = z/(4*z - 1), y = (4*z - 1)/(2*z), z =[1/3,1/2] +// curve 2 : x = (3*z - 2)/(4*z - 3), y = (4*z - 3)/(2*(z - 1)), z= [1/2,2/3] template -std::vector> poly00012232(const int /*prec*/ = 10) +std::vector> poly00012232(const int prec = 10) { return { - + create_polyline(1./3,1./2., P(1.,1./2,1./3), + [](double z) { return P(z/(4*z - 1),(4*z - 1)/(2*z),z); }, + prec), + create_polyline(1./2,2./3., P(1./2,1.,1./2), + [](double z) { return P((3*z - 2)/(4*z - 3),(4*z - 3)/(2*(z - 1)),z); }, + prec), }; } //00012233 -// -// +// curve 1 : x = -z/(z-1), y = -(z - 1)/(2*z), z = [1/3,1/2] +//curve 2 : x = (3*z - 2)/(z - 1), y = 1/2, z = [1/2,2/3] template -std::vector> poly00012233(const int /*prec*/ = 10) +std::vector> poly00012233(const int prec = 10) { return { + create_polyline(1./3,1./2, P(1./2,1.,1./3), + [](double z) { return P(-z/(z - 1),-(z - 1)/(2*z),z); }, + prec), + create_polyline(1./2,2./3, P(1.,1./2.,1./2), + [](double z) { return P((3*z - 2)/(z - 1),1./2,z); }, + prec), + }; } //00012330 -// -// +// curve 1 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = (2*(1 - 2*x + x*x))/(3 - 7*x + 5*x*x) template -std::vector> poly00012330(const int /*prec*/ = 10) +std::vector> poly00012330(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2.,2./3), P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(2*(1 - 2*x + x*x))/(3 - 7*x + 5*x*x)); }, + prec), }; } //00012331 -// -// +// curve 1 : x = [1/3,1[, y = (-1 + 3*x + 2*x*x - sqrt(1 - 6*x + 13*x*x - 8*x*x*x + 4*x*x*x*x))/(2*x*(-2 + 5*x)), z = (1 - x + 2*x*x - sqrt(1 - 6*x + 13*x*x - 8*x*x*x + 4*x*x*x*x))/(2*(-1 + x)*(-1+x))) +// curve 2 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = 2./3 template -std::vector> poly00012331(const int /*prec*/ = 10) +std::vector> poly00012331(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),2./3); }, + prec), + create_polyline(1./3,limit_value(1.,-1.), P(1./3,1.,1./2),P(1.,1./3,1./2), + [](double x) { return P(x,(-1 + 3*x + 2*x*x - sqrt(1 - 6*x + 13*x*x - 8*x*x*x + 4*x*x*x*x))/(2*x*(-2 + 5*x)) ,(1 - x + 2*x*x - sqrt(1 - 6*x + 13*x*x - 8*x*x*x + 4*x*x*x*x))/(2*(-1 + x)*(-1+x))); }, + prec), }; } //00012332 -// -// +//curve 1 : x = -(4 - 6*z)/(2*(z - 1)), y = 1./2, z = [1/2,2/3] +//curve 2 : x = -(-7*z + 5 + (2*z - 2)*(3*z - 2)/(z - 1))/(2*(z - 1)), y = (3*z - 2)/(z - 1), z = [1/2,2/3] +//curve 3 : x = -(2*z*((5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] +//curve 4 : x = -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] template -std::vector> poly00012332(const int /*prec*/ = 10) +std::vector> poly00012332(const int prec = 10) { return { - - + create_polyline(1./2,3./5, P(1.,1./2.,1./2),P(1./2,1./2.,3./5), + [](double z) { return P( -(4 - 6*z)/(2*(z - 1)),1./2,z); }, + prec), + create_polyline(3./5,2./3, P(1./2,1./2.,3./5), + [](double z) { return P( -(4 - 6*z)/(2*(z - 1)),1./2,z); }, + prec), + create_polyline(1./2,3./5, P(1./2,1.,1./2),P(1./2,1./2.,3./5), + [](double z) { return P(-(-7*z + 5 + (2*z - 2)*(3*z - 2)/(z - 1))/(2*(z - 1)),(3*z - 2)/(z - 1),z); }, + prec), + create_polyline(3./5,2./3, P(1./2,1./2,3./5), + [](double z) { return P(-(-7*z + 5 + (2*z - 2)*(3*z - 2)/(z - 1))/(2*(z - 1)),(3*z - 2)/(z - 1),z); }, + prec), + create_polyline(1./2, 2.*1.4142/17 + 5./17, P(1.,1./2.,1./2), + [](double z) { return P( -(2*z*((5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z),(5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z),z); }, + prec), + create_polyline(1./2,2.*1.4142/17 + 5./17, P(1./2,1.,1./2), + [](double z) { return P( -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z),(5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z),z); }, + prec), }; } //00012333 -// -// +// curve 1 : x = [1/2,1], y = 1./(2*x), z = x/(2.*x*x+1) +// curve 2 : x= [0,1/2], y = (2*x-1)/(2*x-2), z = (2 - 3*x + 2*x*x)/(3 - 4*x + 2*x*x) template -std::vector> poly00012333(const int /*prec*/ = 10) +std::vector> poly00012333(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./3), + [](double x) { return P(x,1./(2*x),x/(2.*x*x+1)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3), + [](double x) { return P(x,(2*x-1)/(2*x-2),(2 - 3*x + 2*x*x)/(3 - 4*x + 2*x*x)); }, + prec), }; } //00111123 -// -// +//curve 1 : x = 1/2, y =[2/3,1], z = (2*y)/(5*y-2) template -std::vector> poly00111123(const int /*prec*/ = 10) +std::vector> poly00111123(const int prec = 10) { return { - + create_polyline(2./3,1., P(1./2,2./3,1.), + [](double y) { return P(1./2,y,(2*y)/(5*y-2)); }, + prec), }; } //00111203 -// -// +// curve 1 : x = [1/2,1], y = 1./2, z = 1./(2*x) +// curve 2 : x = [1/2,2/3], y = (2*x-1.)/x, z = 1./(2.-x) +// curve 3 : x = [1/2,2/3], y = (-x+1.)/x, z = 1./(2.-x) +// curve 4 : x = [0,2/3], y = 1./2, z= 1./(2.-x) template -std::vector> poly00111203(const int /*prec*/ = 10) +std::vector> poly00111203(const int prec = 10) { return { - - + create_polyline(2./3,1., P(2./3,1./2,3./4),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1.),P(2./3,1./2,3./4), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(1./2,2./3, P(1./2,0.,2./3),P(2./3,1./2,3./4), + [](double x) { return P(x,(2*x-1.)/x,1./(2.-x)); }, + prec), + create_polyline(1./2,2./3, P(1./2,1.,2./3),P(2./3,1./2,3./4), + [](double x) { return P(x,(-x+1.)/x,1./(2.-x)); }, + prec), + create_polyline(0.,2./3, P(0.,1./2,1./2),P(2./3,1./2,3./4), + [](double x) { return P(x,1./2,1./(2.-x)); }, + prec), + }; } //00111223 -// -// +// curve 1 : x = -(-5*z + (6*z - 5)*(sqrt(-(z - 1)*(2*z - 1))/(6*z - 5) + (4*z - 3)/(6*z - 5)) + 3)/z, y = sqrt(-(z - 1)*(2*z - 1))/(6*z - 5) + (4*z - 3)/(6*z - 5),z = [1/2,2/3] +// curve 2 : x = [1/2,1], y = x/(3*x-1), z = x/(1 - 2*x + 3*x*x) template -std::vector> poly00111223(const int /*prec*/ = 10) +std::vector> poly00111223(const int prec = 10) { return { - + create_polyline(1./2,2./3, P(1.,1./2,1./2), + [](double z) { return P(-(-5*z + (6*z - 5)*(sqrt(-(z - 1)*(2*z - 1))/(6*z - 5) + (4*z - 3)/(6*z - 5)) + 3)/z,sqrt(-(z - 1)*(2*z - 1))/(6*z - 5) + (4*z - 3)/(6*z - 5),z); }, + prec), + create_polyline(1./2,1., P(1./2,1.,2./3), + [](double x) { return P(x,x/(3*x-1),x/(1 - 2*x + 3*x*x) ); }, + prec), }; } //00111230 -// -// +// curve 1 : x = -(-2*z + (3*z - 2)*((8*z - 5)/(4*(3*z - 2)) - sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2))) + 1)/z, y = (8*z - 5)/(4*(3*z - 2)) - sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2)), z = ]2/3,1] +// curve 2 : x = -(-2*z + (3*z - 2)*((4*z - 3)/(4*(3*z - 2)) + sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2))) + 1)/z, y = (4*z - 3)/(4*(3*z - 2)) + sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2)), z = ]2/3,1] template -std::vector> poly00111230(const int /*prec*/ = 10) +std::vector> poly00111230(const int prec = 10) { return { - - +create_polyline(limit_value(2./3,1.),1, P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P(-(-2*z + (3*z - 2)*((8*z - 5)/(4*(3*z - 2)) - sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2))) + 1)/z,(8*z - 5)/(4*(3*z - 2)) - sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2)),z ); }, + prec), +create_polyline(limit_value(2./3,1.),1, P(1./2,1.,2./3),P(1./2,1./2,1.), + [](double z) { return P(-(-2*z + (3*z - 2)*((4*z - 3)/(4*(3*z - 2)) + sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2))) + 1)/z,(4*z - 3)/(4*(3*z - 2)) + sqrt(-8*z*z + 16*z - 7)/(4*(3*z - 2)),z ); }, + prec), }; } //00111232 -// -// +// curve 1 : x = (z - 1)*(-1 + (5*z - 4)/(2*(z - 1)) + sqrt(13*z*z - 20*z + 8)/(2*(z - 1)))/z, y = (5*z - 4)/(2*(z - 1)) + sqrt(13*z*z - 20*z + 8)/(2*(z - 1)), z = [1/3,2/3] +// curve 2 : x = [1/3,1/2], y = x/(1. - x), z = -x/(1. - 5*x + 3*x*x template -std::vector> poly00111232(const int /*prec*/ = 10) +std::vector> poly00111232(const int prec = 10) { return { - + create_polyline(1./3,2./3, P(1.,1./2,1./3), + [](double z) { return P((z - 1)*(-1 + (5*z - 4)/(2*(z - 1)) + sqrt(13*z*z - 20*z + 8)/(2*(z - 1)))/z, (5*z - 4)/(2*(z - 1)) + sqrt(13*z*z - 20*z + 8)/(2*(z - 1)),z ); }, + prec), + create_polyline(1./3,1./2, P(1./3,1./2,1.), + [](double x) { return P(x,x/(1. - x),-x/(1. - 5*x + 3*x*x)); }, + prec), }; } //00111233 -// -// +// curve 1 : x = -(z - 1)/z, y = (3*z - 2)/(4*z - 3), z = [1/2,2/3] +// curve 2 : x = [1/2,1], y = x/(x+1), z = x/(3*x-1) +// problem with close polylines, there is an over refinement template -std::vector> poly00111233(const int /*prec*/ = 10) +std::vector> poly00111233(const int prec = 10) { return { - + create_polyline(1./2,2./3, P(1.,1./2,1./2), + [](double z) { return P(-(z - 1)/z, (3*z - 2)/(4*z - 3),z); }, + prec), + create_polyline(1./2,1., P(1./2,1./3,1.),P(1.,1./2,1./2), + [](double x) { return P(x,x/(x+1),x/(3*x-1)); }, + prec), }; } //00112233 -// -// +// curve 1 : x = [0,1], y = 1/2, z = 1/2 template -std::vector> poly00112233(const int /*prec*/ = 10) +std::vector> poly00112233(const int prec = 10) { return { - +create_polyline(0.,1., P(0.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), }; } //00112323 -// -// +// curve 1 : x = (3*z - 1)/(2*z), y = 1./2, z = [1/3,1/2] +// curve 2 : x = -(z - 1)/(2*z), y = 1./2, z = [1/3,1/2] +// curve 3 : x = 1./2, y = (3*z - 2)/(2*(z - 1)), z = [1/2,2/3] +// curve 4 : x = 1./2, y = -z /(2*(z - 1)), z = [1/2,2/3] + template -std::vector> poly00112323(const int /*prec*/ = 10) +std::vector> poly00112323(const int prec = 10) { return { + create_polyline(1./3,1./2, P(0.,1./2,1./3),P(1./2,1./2,1./2), + [](double z) { return P((3*z - 1)/(2*z),1./2,z); }, + prec), + create_polyline(1./3,1./2, P(1.,1./2,1./3),P(1./2,1./2,1./2), + [](double z) { return P( -(z - 1)/(2*z),1./2,z); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P(1./2,(3*z - 2)/(2*(z - 1)),z); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,1.,2./3), + [](double z) { return P(1./2,-z /(2*(z - 1)),z); }, + prec), }; } //00112332 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = y = 1/2, z = [1/2,1] +// curve 3 : x = 1./2, y = (3*z - 2)/(2*(z - 1)), z = [1/2,2/3] +// curve 4 : x = 1./2, y = -z /(2*(z - 1)), z = [1/2,2/3] template -std::vector> poly00112332(const int /*prec*/ = 10) +std::vector> poly00112332(const int prec = 10) { return { - + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P(1./2,(3*z - 2)/(2*(z - 1)),z); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,1.,2./3), + [](double z) { return P(1./2,-z /(2*(z - 1)),z); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //00121203 -// -// +// curve 1 : x = (-5*z*z + 7*z + (3*z - 2)*(10*z*z - 11*z + 3)/(5*z - 3) - 2)/(2*z*z), y = (3*z - 2)/(5*z - 3), z = [0,1/2]U[2/3,1] +// curve 2 : x = ((3*z - 1)*(z*(2*z - 1)/(3*z - 1) - z + 1)/(2*z*z)), y = z/(3*z - 1), z = [1/2,1] template -std::vector> poly00121203(const int /*prec*/ = 10) +std::vector> poly00121203(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(1./2,2./3,0.),P(1./2,1.,1./2), + [](double z) { return P((-5*z*z + 7*z + (3*z - 2)*(10*z*z - 11*z + 3)/(5*z - 3) - 2)/(2*z*z) ,(3*z - 2)/(5*z - 3),z); }, + prec), + create_polyline(2./3,1., P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P((-5*z*z + 7*z + (3*z - 2)*(10*z*z - 11*z + 3)/(5*z - 3) - 2)/(2*z*z) ,(3*z - 2)/(5*z - 3),z); }, + prec), + create_polyline(1./2,1., P(1./2,1.,1./2),P(1./2,1./2,1.), + [](double z) { return P(((3*z - 1)*(z*(2*z - 1)/(3*z - 1) - z + 1)/(2*z*z)), z/(3*z - 1),z); }, + prec), }; } //00121223 -// -// +// curve 1 : x = ]3/8,1/2], y = (3 - 5*x + sqrt(-3 + 8*x) - x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)), z = (3 - 5*x - sqrt(-3 + 8*x) + x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)) +// curve 3 : x = ]3/8,1/2], y = (3 - 5*x - sqrt(-3 + 8*x) + x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)), z = (3 - 5*x + sqrt(-3 + 8*x) - x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)) template -std::vector> poly00121223(const int /*prec*/ = 10) +std::vector> poly00121223(const int prec = 10) { return { - + create_polyline(limit_value(3./8,1.),1./2, P(3./8,4./9,4./9),P(1./2,2./3,0.), + [](double x) { return P(x,(3 - 5*x + sqrt(-3 + 8*x) - x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)), (3 - 5*x - sqrt(-3 + 8*x) + x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x))); }, + prec), + create_polyline(limit_value(3./8,1.),1./2, P(3./8,4./9,4./9),P(1./2,0.,2./3), + [](double x) { return P(x,(3 - 5*x - sqrt(-3 + 8*x) + x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x)), (3 - 5*x + sqrt(-3 + 8*x) - x*sqrt(-3 + 8*x))/(2*(3 - 5*x + x*x))); }, + prec), }; } //00121233 -// -// +// curve 1 : x = 1./2, y = (3*z - 2)/(4*z - 3), z = [0,2/3] +// curve 2 : x = 1./2, y = 1-z, z' = 1-(3*z - 2)/(4*z - 3), z = [0,2/3] +// problem with close polylines, there is an over refinement template -std::vector> poly00121233(const int /*prec*/ = 10) +std::vector> poly00121233(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(1./2,2./3,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,(3*z - 2)/(4*z - 3),z); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P(1./2,(3*z - 2)/(4*z - 3),z); }, + prec), + create_polyline(0.,1./2, P(1./2,1.,1./3),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1-z,1-(3*z - 2)/(4*z - 3)); }, + prec), + create_polyline(1./2.,2./3, P(1./2,1./2,1./2),P(1./2,1./3,1.), + [](double z) { return P(1./2,1-z,1-(3*z - 2)/(4*z - 3)); }, + prec), }; } //00121300 -// -// + +// curve 1 : x = -(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , y = sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3)), z = ]0,1/3] +// curve 2 : x = -(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , y = 1-( sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))), z' = 1.-z, z = ]0,1/3] template -std::vector> poly00121300(const int /*prec*/ = 10) +std::vector> poly00121300(const int prec = 10) { return { - + create_polyline(limit_value(0.,1.),1./3, P(1./2,2./3,0.),P(1./2,1.,1./3), + [](double z) { return P(-(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3)),z); }, + prec), + create_polyline(limit_value(0.,1.),1./3, P(1./2,1./3,1.),P(1./2,0.,2./3), + [](double z) { return P(-(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) ,1-( sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))),1.-z); }, + prec), + }; } //00121301 -// -// +// curve 1 : x = (-4*z*z + 7*z + (sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)))*(8*z*z - 10*z + 3) - 2)/z, y = sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)), z = ]0,1/2[ +// curve 2 : x = ]1/2,1], y = (-2 + 6*x - x*x - sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x), z = (-2 + 2*x + x*x + sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x*(-1 + 2*x)) template -std::vector> poly00121301(const int /*prec*/ = 10) +std::vector> poly00121301(const int prec = 10) { return { - - + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double z) { return P( (-4*z*z + 7*z + (sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)))*(8*z*z - 10*z + 3) - 2)/z, sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)),z); }, + prec), + create_polyline(limit_value(1./2,1.),1., P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-2 + 6*x - x*x - sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x),(-2 + 2*x + x*x + sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x*(-1 + 2*x))); }, + prec), }; } //00121302 -// -// +// curve 1 : x = (-z*z + 5*z + (sqrt(z*z*z*z + 8*z*z - 12*z + 4)/(2*(2*z*z - 7*z + 3)) + (3*z*z - 6*z + 2)/(2*(z - 3)*(2*z - 1)))*(2*z*z - 7*z + 3) - 2)/(z*(z + 1)), y = sqrt(z*z*z*z + 8*z*z - 12*z + 4)/(2*(2*z*z - 7*z + 3)) + (3*z*z - 6*z + 2)/(2*(z - 3)*(2*z - 1)), z = ]0,1/2[ +// curve 2 : x = (-z + (2*z - 1)*(3*z*z - 2*z)/(6*z*z - 5*z + 1) + 1)/z, y = (3*z*z - 2*z)/(6*z*z - 5*z + 1), z = [2/3,1] +// curve 3 : x = (-z + z*(2*z - 1)/(z + 1) + 1)/z, y = z/(z+1.), z =[1/2,1] template -std::vector> poly00121302(const int /*prec*/ = 10) +std::vector> poly00121302(const int prec = 10) { return { - - + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(1./3,1.,1./2), + [](double z) { return P((-z*z + 5*z + (sqrt(z*z*z*z + 8*z*z - 12*z + 4)/(2*(2*z*z - 7*z + 3)) + (3*z*z - 6*z + 2)/(2*(z - 3)*(2*z - 1)))*(2*z*z - 7*z + 3) - 2)/(z*(z + 1)) ,sqrt(z*z*z*z + 8*z*z - 12*z + 4)/(2*(2*z*z - 7*z + 3)) + (3*z*z - 6*z + 2)/(2*(z - 3)*(2*z - 1)),z); }, + prec), + create_polyline(2./3,1., P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P((-z + (2*z - 1)*(3*z*z - 2*z)/(6*z*z - 5*z + 1) + 1)/z, (3*z*z - 2*z)/(6*z*z - 5*z + 1),z); }, + prec), + create_polyline(1./2,1., P(1.,1./3.,1./2),P(1./2,1./2,1.), + [](double z) { return P((-z + z*(2*z - 1)/(z + 1) + 1)/z, z/(z+1.),z); }, + prec), }; } //00121320 -// -// +// curve 1 : x = -(-7*z*z + 7*z + ((7*z*z - 8*z + 2)/(2*(9*z*z - 10*z + 3)) + sqrt(13*z*z*z*z - 36*z*z*z + 40*z*z - 20*z + 4)/(2*(9*z*z - 10*z + 3)))*(9*z*z - 10*z + 3) - 2)/(z*(3*z - 1)), y = (7*z*z - 8*z + 2)/(2*(9*z*z - 10*z + 3)) + sqrt(13*z*z*z*z - 36*z*z*z + 40*z*z - 20*z + 4)/(2*(9*z*z - 10*z + 3)), z = [0,1] +// curve 2 : x = [1/2,(8.06225-7)/2], y = (2 - 5*x + x*x + sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - 4*x + 2*x*x)), z = (2 - x - x*x - sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - x + x*x)) +// curve 3 : x = [1/2,(8.06225-7)/2], y = (2 - 5*x + x*x - sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - 4*x + 2*x*x)), z = (2 - x - x*x + sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - x + x*x)) template -std::vector> poly00121320(const int /*prec*/ = 10) +std::vector> poly00121320(const int prec = 10) { return { - - + create_polyline(0.,1., P(1./2,2./3,0.),P(1./2,1./2,1.), + [](double z) { return P(-(-7*z*z + 7*z + ((7*z*z - 8*z + 2)/(2*(9*z*z - 10*z + 3)) + sqrt(13*z*z*z*z - 36*z*z*z + 40*z*z - 20*z + 4)/(2*(9*z*z - 10*z + 3)))*(9*z*z - 10*z + 3) - 2)/(z*(3*z - 1)),(7*z*z - 8*z + 2)/(2*(9*z*z - 10*z + 3)) + sqrt(13*z*z*z*z - 36*z*z*z + 40*z*z - 20*z + 4)/(2*(9*z*z - 10*z + 3)),z); }, + prec), + create_polyline(1./2,(8.06225-7.)/2, P(1./2,0.,2./3),P((8.06225-7.)/2,1./3,(3.+8.06225)/14), + [](double x) { return P(x,(2 - 5*x + x*x + sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - 4*x + 2*x*x)),(2 - x - x*x - sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - x + x*x))); }, + prec), + create_polyline(1./2,(8.06225-7.)/2, P(1./2,1./2,1.),P((8.06225-7.)/2,1./3,(3.+8.06225)/14), + [](double x) { return P(x,(2 - 5*x + x*x - sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - 4*x + 2*x*x)),(2 - x - x*x + sqrt(x)*sqrt(4 - 11*x + 6*x*x + x*x*x))/(2*(1 - x + x*x))); }, + prec), }; } //00121321 -// -// +// curve 1 : x = -(-7*z*z + 8*z + (sqrt((z - 1)*(25*z*z*z - 37*z*z + 20*z - 4))/(2*(6*z*z - 10*z + 3)) + (z - 1)*(7*z - 2)/(2*(6*z*z - 10*z + 3)))*(6*z*z - 10*z +3) - 2)/(z*(2*z - 1)), y = sqrt((z - 1)*(25*z*z*z - 37*z*z + 20*z - 4))/(2*(6*z*z - 10*z + 3)) + (z - 1)*(7*z - 2)/(2*(6*z*z - 10*z + 3)), z = ]0,1/2[ +// curve 2 : x = (-2*z*z + 3*z - 1)/(z*(2*z - 1)), y = (3*z*z - 2*z)/(6*z*z - 6*z + 1), z = ]1/2,2/3] template -std::vector> poly00121321(const int /*prec*/ = 10) +std::vector> poly00121321(const int prec = 10) { return { - + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double z) { return P( -(-7*z*z + 8*z + (sqrt((z - 1)*(25*z*z*z - 37*z*z + 20*z - 4))/(2*(6*z*z - 10*z + 3)) + (z - 1)*(7*z - 2)/(2*(6*z*z - 10*z + 3)))*(6*z*z - 10*z +3) - 2)/(z*(2*z - 1)),sqrt((z - 1)*(25*z*z*z - 37*z*z + 20*z - 4))/(2*(6*z*z - 10*z + 3)) + (z - 1)*(7*z - 2)/(2*(6*z*z - 10*z + 3)),z); }, + prec), + create_polyline(limit_value(1./2.,1.),2./3, P(1.,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P((-2*z*z + 3*z - 1)/(z*(2*z - 1)),(3*z*z - 2*z)/(6*z*z - 6*z + 1),z); }, + prec), }; } //00121323 -// -// +// curve 1 : x = -(-3*z + (3*z - 3)*((3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1))) + 2)/z, y = (3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1)), z = ]0,1[ +// curve 2 : x = (z - 1)*(-1 + sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z - 3*z + 1)) + (6*z*z - 6*z + 1)/(2*(z - 1)*(2*z - 1)))/z, y = sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z - 3*z + 1)) + (6*z*z - 6*z + 1)/(2*(z - 1)*(2*z - 1)), z = ]1/2,2/3] +// curve 3 : x = (z - 1)*(-1 - sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(2*z*z - 3*z + 1)) + (2*z*z - 2*z + 1)/(2*(z - 1)*(2*z - 1)))/z, y = -sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(2*z*z - 3*z + 1)) + (2*z*z - 2*z + 1)/(2*(z - 1)*(2*z - 1)), z = [1/3,1/2[ +// curve 4 : x = -(-z + (z - 1)*(-z*z/((z - 1)*(2*z - 1)) + z*sqrt(3*z*z - 3*z + 1)/(2*z*z - 3*z + 1)))/(3*z), y = -z*z/((z - 1)*(2*z - 1)) + z*sqrt(3*z*z - 3*z + 1)/(2*z*z - 3*z + 1), z = ]1/2,1] template -std::vector> poly00121323(const int /*prec*/ = 10) +std::vector> poly00121323(const int prec = 10) { return { - - + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(1./2,1./2,1./2), + [](double z) { return P(-(-3*z + (3*z - 3)*((3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1))) + 2)/z,(3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1)),z); }, + prec), + create_polyline(limit_value(1./2,1.),2./3,P(1./2,1./2,1./2), P(1./2,0.,2./3), + [](double z) { return P( (z - 1)*(-1 + sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z - 3*z + 1)) + (6*z*z - 6*z + 1)/(2*(z - 1)*(2*z - 1)))/z,sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z - 3*z + 1)) + (6*z*z - 6*z + 1)/(2*(z - 1)*(2*z - 1)) ,z); }, + prec), + create_polyline(1./3,limit_value(1./2,-1.), P(1.,1./2,1./3),P(1./2,1./2,1./2), + [](double z) { return P( (z - 1)*(-1 - sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(2*z*z - 3*z + 1)) + (2*z*z - 2*z + 1)/(2*(z - 1)*(2*z - 1)))/z,-sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(2*z*z - 3*z + 1)) + (2*z*z - 2*z + 1)/(2*(z - 1)*(2*z - 1)),z); }, + prec), + create_polyline(limit_value(1./2,1.),1., P(1./2,1./2,1./2),P(1./3,1./2,1.), + [](double z) { return P( -(-z + (z - 1)*(-z*z/((z - 1)*(2*z - 1)) + z*sqrt(3*z*z - 3*z + 1)/(2*z*z - 3*z + 1)))/(3*z),-z*z/((z - 1)*(2*z - 1)) + z*sqrt(3*z*z - 3*z + 1)/(2*z*z - 3*z + 1) ,z); }, + prec), }; } //00122103 -// -// +// curve 1 : x = 1/2, y = [0,1/2] U [2/3,1], z = (3*y-2.)/(5*y-3.) +// curve 2 : x = [1/2,1], y = (2 - x + sqrt(x)* sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)), z = (-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x)) +// curve 3 : x = [1/2,1], y = (-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x)), z = (2 - x + sqrt(x)* sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)) +// problem with polylines, there is an over refinement template -std::vector> poly00122103(const int /*prec*/ = 10) +std::vector> poly00122103(const int prec = 10) { return { - + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,(3*y-2.)/(5*y-3.)); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,0.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,(3*y-2.)/(5*y-3.)); }, + prec), + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(2 - x + sqrt(x)* sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)),(-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x))); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,(-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x)),(2 - x + sqrt(x)* sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x))); }, + prec), }; } //00122113 -// -// +// curve 1 : x = [1/2,1], y = (-4 + 7*x - sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*(-3 + 4*x + x*x)), z = (-2 + 5*x - sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*x*(1 + x)) +// curve 2 : x = [0,1/2], y = (-4 + 7*x + sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*(-3 + 4*x + x*x)), z = (-2 + 5*x + sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*x*(1 + x)) +// curve 3 : x = [2/3,1], y = (-1. + 2*x)/(-1. + 3*x*x), z = (-1. + 2*x)/(x*(-1. + 3*x)) template -std::vector> poly00122113(const int /*prec*/ = 10) +std::vector> poly00122113(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double x) { return P(x,(-4 + 7*x - sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*(-3. + 4*x + x*x)),(-2. + 5*x - sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*x*(1 + x))); }, + prec), + create_polyline(0.000001,1./2, P(0.,1./3,1./2),P(1./2,0.,2./3), + [](double x) { return P(x,(-4. + 7*x + sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*(-3 + 4*x + x*x)),(-2. + 5*x + sqrt(4 - 16*x + 21*x*x - 8*x*x*x))/(2*x*(1 + x))); }, + prec), + create_polyline(2./3,1.,P(2./3,1.,1./2), P(1.,1./2,1./2), + [](double x) { return P(x,(-1. + 2*x)/(-1. + 3*x*x),(-1. + 2*x)/(x*(-1. + 3*x))); }, + prec), }; } //00122133 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = 1/ 2, y = (3*z - 2)/(4*z - 3), z = [0,2/3] +// curve 3 : x = 1/2, y = [1/3,1], z = y/(4.*y-1) +// problem with close polylines, there is an over refinement template -std::vector> poly00122133(const int /*prec*/ = 10) +std::vector> poly00122133(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,2./3,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,(3*z - 2)/(4*z - 3),z); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P(1./2,(3*z - 2)/(4*z - 3),z); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1./2,1.,1./3), + [](double y) { return P(1./2,y,y/(4.*y-1)); }, + prec), + create_polyline(1./3,1./2,P(1./2,1./3,1.),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,y/(4.*y-1)); }, + prec), }; } //00122300 -// -// +// curve 1 : x = 1/2, y = [2/3,1], z = (3*y-2)/(5*y-2) +// curve 2 : x = 1/2, y' = 1-y, z = 1-(3*y-2)/(5*y-2), y'= [2/3,1] template -std::vector> poly00122300(const int /*prec*/ = 10) +std::vector> poly00122300(const int prec = 10) { return { - +create_polyline(2./3,1.,P(1./2,2./3,0.),P(1./2,1.,1./3), + [](double y) { return P(1./2,y,(3*y-2)/(5*y-2)); }, + prec), +create_polyline(2./3,1.,P(1./2,1./3,1.),P(1./2,0.,2./3), + [](double y) { return P(1./2,1-y,1-(3*y-2)/(5*y-2)); }, + prec), }; } //00122301 -// -// +// curve 1 : x = -(-5*z*z + 5*z + (sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)))*(6*z*z - 7*z + 3) - 2)/(z*(3*z - 1)), y = sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)), z = ]0,1/2] +// curve 2 : x = (-z + (2*z - 1)*(sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1))) + 1)/z, y = sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1)), z = ]1/2,1] +// curve 3 : x = (-z + (2*z - 1)*(-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1))) + 1)/z, y = -sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1)), z = [2/3,1] template -std::vector> poly00122301(const int /*prec*/ = 10) +std::vector> poly00122301(const int prec = 10) { return { - - +create_polyline(limit_value(0.,1.),1./2,P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double z) { return P(-(-5*z*z + 5*z + (sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)))*(6*z*z - 7*z + 3) - 2)/(z*(3*z - 1)),sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)) ,z); }, + prec), +create_polyline(limit_value(1./2,1.),1.,P(1.,1./2,1./2),P(1.,1./2,1.), + [](double z) { return P((-z + (2*z - 1)*(sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1))) + 1)/z,sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1)),z); }, + prec), +create_polyline(2./3,1.,P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P( (-z + (2*z - 1)*(-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1))) + 1)/z, -sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1)) ,z); }, + prec), }; } //00122302 -// -// +// curve 1 : x = (2*z*z - 3*z + (4*z - 3)*(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))) + 2)/(z*(2*z - 1)), y = -sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3)), z = ]0,1/2] +// curve 2 : x = 1-z, y = 1-(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))), z' = 1-((2*z*z - 3*z + (4*z - 3)*(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))) + 2)/(z*(2*z - 1))), z = ]0,1/2] template -std::vector> poly00122302(const int /*prec*/ = 10) +std::vector> poly00122302(const int prec = 10) { return { - + create_polyline(limit_value(0.,1.),1./2, P(1./2,2./3,0.),P(1./3,1.,1./2), + [](double z) { return P((2*z*z - 3*z + (4*z - 3)*(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))) + 2)/(z*(2*z - 1)),-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3)),z); }, + prec), + create_polyline(limit_value(0.,1.),1./2, P(1.,1./3,1./2),P(1./2,0.,2./3), + [](double z) { return P(1-z,1-(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))),1-((2*z*z - 3*z + (4*z - 3)*(-sqrt((z - 1)*(z*z*z - 13*z*z + 12*z - 4))/(2*(4*z - 3)) + (z - 1)*(z + 2)/(2*(4*z - 3))) + 2)/(z*(2*z - 1)))); }, + prec), }; } //00122313 -// -// +// curve 1 : x = (-1 + (3*z*z - 2*z)/(z - 1))*(z - 1)/z, y = (3*z*z - 2*z)/(z - 1), z = [1/3,2/3] +// curve 2 : x = [1/3,2/3], y = (-1 + 3*x - 3*x*x)/(-1 + x), z = (1 - 3*x + 3*x*x)/x) +// curve 3 : x = -(3*y*y-4*y+1)/y,y = [1/3,2/3], z = (3*y*y-2*y)/(y-1) template -std::vector> poly00122313(const int /*prec*/ = 10) +std::vector> poly00122313(const int prec = 10) { return { - - + create_polyline(1./3,1./2, P(1.,1./2,1./3), P(1./2,1./2,1./2), + [](double z) { return P( (-1 + (3*z*z - 2*z)/(z - 1))*(z - 1)/z, (3*z*z - 2*z)/(z - 1),z); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P( (-1 + (3*z*z - 2*z)/(z - 1))*(z - 1)/z, (3*z*z - 2*z)/(z - 1),z); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1./2),P(2./3,1.,1./2), + [](double x) { return P( x,(-1 + 3*x - 3*x*x)/(-1 + x),(1 - 3*x + 3*x*x)/x); }, + prec), + create_polyline(1./3,1./2, P(1./3,1./2,1.), P(1./2,1./2,1./2), + [](double x) { return P( x,(-1 + 3*x - 3*x*x)/(-1 + x),(1 - 3*x + 3*x*x)/x); }, + prec), + create_polyline(1./3,1./2, P(0.,1./3,1./2), P(1./2,1./2,1./2), + [](double y) { return P(-(3*y*y-4*y+1)/y ,y,(3*y*y-2*y)/(y-1)); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1./2), P(1./2,2./3,0.), + [](double y) { return P(-(3*y*y-4*y+1)/y ,y,(3*y*y-2*y)/(y-1)); }, + prec), }; } //00122331 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = -(-4*z*z + 5*z + (-(2*z - 1)*sqrt(5*z*z - 8*z + 4)/(2*(4*z*z - 6*z + 3)) + (2*z*z - 3*z + 2)/(2*(4*z*z - 6*z + 3)))*(4*z*z - 6*z + 3) - 2)/(z*(2*z - 1)), y = -(2*z - 1)*sqrt(5*z*z - 8*z + 4)/(2*(4*z*z - 6*z + 3)) + (2*z*z - 3*z + 2)/(2*(4*z*z - 6*z + 3)),z = ]0,1/2[ +// curve 3 : x = -(-4*z*z + z + (sqrt(-(z - 1)*(3*z + 1))*(2*z - 1)/(2*(4*z*z - 2*z - 1)) + (6*z*z - 3*z - 1)/(2*(4*z*z - 2*z - 1)))*(4*z*z - 2*z - 1) + 1)/(z*(2*z - 1)), y = sqrt(-(z - 1)*(3*z + 1))*(2*z - 1)/(2*(4*z*z - 2*z - 1)) + (6*z*z - 3*z - 1)/(2*(4*z*z - 2*z - 1)),z = ]1/2,2/3] template -std::vector> poly00122331(const int /*prec*/ = 10) +std::vector> poly00122331(const int prec = 10) { return { - + create_polyline(0.,1./3, P(0.,1./2,1./2),P(1./3,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./3,2./3, P(1./3,1./2,1./2),P(2./3,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(2./3,1., P(2./3,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(2./3,1./2,1./2), + [](double z) { return P(-(-4*z*z + 5*z + (-(2*z - 1)*sqrt(5*z*z - 8*z + 4)/(2*(4*z*z - 6*z + 3)) + (2*z*z - 3*z + 2)/(2*(4*z*z - 6*z + 3)))*(4*z*z - 6*z + 3) - 2)/(z*(2*z - 1)),-(2*z - 1)*sqrt(5*z*z - 8*z + 4)/(2*(4*z*z - 6*z + 3)) + (2*z*z - 3*z + 2)/(2*(4*z*z - 6*z + 3)),z); }, + prec), + create_polyline(limit_value(1./2,1.),2./3, P(1./3,1./2,1./2),P(1./2,0.,2./3), + [](double z) { return P( -(-4*z*z + z + (sqrt(-(z - 1)*(3*z + 1))*(2*z - 1)/(2*(4*z*z - 2*z - 1)) + (6*z*z - 3*z - 1)/(2*(4*z*z - 2*z - 1)))*(4*z*z - 2*z - 1) + 1)/(z*(2*z - 1)),sqrt(-(z - 1)*(3*z + 1))*(2*z - 1)/(2*(4*z*z - 2*z - 1)) + (6*z*z - 3*z - 1)/(2*(4*z*z - 2*z - 1)),z); }, + prec), }; } //01101023 -// -// +// curve 1 : x = 1./2, y = 1./(2*z), z = [1/2,1] +// curve 2 : x = 1/2, y = [0,1/2], z = (-1 + 2*y)/(-2 + 3*y) template -std::vector> poly01101023(const int /*prec*/ = 10) +std::vector> poly01101023(const int prec = 10) { return { - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./(2*z),z); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,0.), + [](double y) { return P(1./2,y,(-1 + 2*y)/(-2 + 3*y)); }, + prec), }; } //01101223 -// -// +// curve 1 : x = [1/2,1], y = x/(-1 + 3*x), z = (-1 + 3*x - x*x)/(-1 + 3*x) template -std::vector> poly01101223(const int /*prec*/ = 10) +std::vector> poly01101223(const int prec = 10) { return { - - + create_polyline(1./2,1, P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,x/(-1 + 3*x),(-1 + 3*x - x*x)/(-1 + 3*x)); }, + prec), }; } //01101231 -// -// +// no curves template std::vector> poly01101231(const int /*prec*/ = 10) { @@ -1391,22 +1816,39 @@ return { } //01102332 -// -// +// curve 1 : x =[0,1], y = z = 1/2 +// curve 2 : y =[0,1], x = z = 1/2 +// curve 3 : z =[0,1], y = x = 1/2 template -std::vector> poly01102332(const int /*prec*/ = 10) +std::vector> poly01102332(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,1./2,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //01121223 -// -// +// no curves template -std::vector> poly01121223(const int /*prec*/ = 10) +std::vector> poly01121223(const int prec = 10) { return { @@ -1415,503 +1857,1106 @@ return { } //01121230 -// -// +// curve 1 : x = -(-7*z*z + 8*z + (-sqrt(-(2*z - 1)*(4*z*z*z - 12*z*z + 10*z - 3))/(2*(9*z*z - 10*z + 3)) + (10*z*z - 10*z + 3)/(2*(9*z*z - 10*z + 3)))*(9*z*z - 10*z + 3) - 3)/(6*z*z - 7*z + 3), y = -sqrt(-(2*z - 1)*(4*z*z*z - 12*z*z + 10*z - 3))/(2*(9*z*z - 10*z + 3)) + (10*z*z - 10*z + 3)/(2*(9*z*z - 10*z + 3)), z = [1/2,1] +// curve 2 : x = -(-5*z*z + 5*z + (sqrt(-z*(8*z*z*z - 20*z*z + 15*z - 4))/(2*(3*z*z - 2*z + 1)) + (2*z*z - 3*z + 2)/(2*(3*z*z - 2*z + 1)))*(3*z*z - 2*z + 1) - 2)/((2*z - 1)*(3*z - 1)), y = sqrt(-z*(8*z*z*z - 20*z*z + 15*z - 4))/(2*(3*z*z - 2*z + 1)) + (2*z*z - 3*z + 2)/(2*(3*z*z - 2*z + 1)), z = ]1/2,1] template -std::vector> poly01121230(const int /*prec*/ = 10) +std::vector> poly01121230(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1./2,1./2,1.), + [](double z) { return P(-(-7*z*z + 8*z + (-sqrt(-(2*z - 1)*(4*z*z*z - 12*z*z + 10*z - 3))/(2*(9*z*z - 10*z + 3)) + (10*z*z - 10*z + 3)/(2*(9*z*z - 10*z + 3)))*(9*z*z - 10*z + 3) - 3)/(6*z*z - 7*z + 3),-sqrt(-(2*z - 1)*(4*z*z*z - 12*z*z + 10*z - 3))/(2*(9*z*z - 10*z + 3)) + (10*z*z - 10*z + 3)/(2*(9*z*z - 10*z + 3)) ,z); }, + prec), + create_polyline(limit_value(1./2,1.),1., P(1./2,1.,1./2),P(1./2,1./2,1.), + [](double z) { return P( -(-5*z*z + 5*z + (sqrt(-z*(8*z*z*z - 20*z*z + 15*z - 4))/(2*(3*z*z - 2*z + 1)) + (2*z*z - 3*z + 2)/(2*(3*z*z - 2*z + 1)))*(3*z*z - 2*z + 1) - 2)/((2*z - 1)*(3*z - 1)), sqrt(-z*(8*z*z*z - 20*z*z + 15*z - 4))/(2*(3*z*z - 2*z + 1)) + (2*z*z - 3*z + 2)/(2*(3*z*z - 2*z + 1)),z); }, + prec), }; } //01122330 -// -// +// curve 1 : x =[0,1], y = z = 1/2 +// curve 2 : y =[0,1], x = z = 1/2 template -std::vector> poly01122330(const int /*prec*/ = 10) +std::vector> poly01122330(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), }; } //01123023 -// -// +// curve 1 : x =[0,1], y = z = 1/2 template -std::vector> poly01123023(const int /*prec*/ = 10) +std::vector> poly01123023(const int prec = 10) { return { - +create_polyline(0.,1., P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), }; } //01233210 -// -// +// curve 1 : x =[0,1], y = z = 1/2 +// curve 2 : y =[0,1], x = z = 1/2 +// curve 3 : z =[0,1], y = x = 1/2 template -std::vector> poly01233210(const int /*prec*/ = 10) +std::vector> poly01233210(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,1./2,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //00001234 -// -// +// curve 1 : x = 1/2, y = [0,1/2], z = 2/(3-y) +// curve 2 : x = 1/2, y = [1/2,1], z = 1/(2+y) +// curve 3 : x = [0,1/2], y = 1/2, z = 2/(3-x) +// curve 4 : x = [1/2,1], y = 1/2, z = 1/(2+x) +// curve 5 : x = y = 1/2, z = [4/5,1] template -std::vector> poly00001234(const int /*prec*/ = 10) +std::vector> poly00001234(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,4./5), + [](double y) { return P(1./2,y,2./(3-y)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,4./5),P(1./2,1.,2./3), + [](double y) { return P(1./2,y,2./(2+y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1./2,4./5), + [](double x) { return P(x,1./2,2./(3-x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,4./5),P(1.,1./2,2./3), + [](double x) { return P(x,1./2,2./(2+x)); }, + prec), + create_polyline(4./5,1., P(1./2,1./2,4./5),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //00010234 -// -// +// curve 1 : x = [1/2,1], y = (2 - x)/(1 + x), z = 1/2 +// curve 2 : x = (2 - z)/(1 + z), y = 1/2, z = [1/2,1] +// curve 3 : x = 1/2, y = [1/2,1], z = (2 - y)/(1 + y) template -std::vector> poly00010234(const int /*prec*/ = 10) +std::vector> poly00010234(const int prec = 10) { return { - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(2 - x)/(1 + x),1./2); }, + prec), + create_polyline(1./2,1., P(1.,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P((2 - z)/(1 + z),1./2,z); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,(2 - y)/(1 + y)); }, + prec), }; } //00011234 -// -// +// curve 1 : x = ]0,1/2], y = (2 + x - sqrt(4 - 8*x + x*x))/(6*x), z = (2 - x + x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*(3 - 4*x + 2*x*x)) +// curve 2 : x = 1/2, y = [2/3,1], z = 1-y/2 +// curve 3 : x = 1/2, y = [1/2,2/3], z = y/(-1 + 3*y) +// curve 4 : x = [2/3,1], y = 1./2, z = 1.-x/2 +// curve 5 : x = [1/2,2/3], y = 1./2, z = x/(-1 + 3*x) +// curve 6 : x = [1/2,2/3], y = (-1 + 2*x)/(x*(-1 + 3*x)), z = x/(1 - 2*x + 3*x*x) +// curve 7 : x = [1/2,2/3], y = (1 - x)/x, z = x +// curve 8 : x = [1/2,1], y = 1/(1+x),1/(1+x) template -std::vector> poly00011234(const int /*prec*/ = 10) +std::vector> poly00011234(const int prec = 10) { return { - - + create_polyline(limit_value(0,1),1./2, P(0.,1./2,2./3),P(1./2,2./3,2./3), + [](double x) { return P(x,(2 + x - sqrt(4 - 8*x + x*x))/(6*x),(2 - x + x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*(3 - 4*x + 2*x*x))); }, + prec), + create_polyline(2./3,1.,P(1./2,2./3,2./3),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1.-y/2); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1.),P(1./2,2./3,2./3), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(2./3,1.,P(2./3,1./2,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1.-x/2); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1.),P(2./3,1./2,2./3), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(1./2,2./3,P(1./2,0.,2./3),P(2./3,1./2,2./3), + [](double x) { return P(x,(-1 + 2*x)/(x*(-1 + 3*x)),x/(1 - 2*x + 3*x*x)); }, + prec), + create_polyline(1./2,(2.23606-1)/2,P(1./2,1.,1./2),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), + [](double x) { return P(x,(1 - x)/x,x); }, + prec), + create_polyline((2.23606-1)/2,2./3,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(2./3,1./2,2./3), + [](double x) { return P(x,(1 - x)/x,x); }, + prec), + create_polyline(1./2,(2.23606-1)/2,P(1./2,2./3,2./3),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), + [](double x) { return P(x,1/(1+x),1/(1+x)); }, + prec), + create_polyline((2.23606-1)/2,1.,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(1.,1./2,1./2), + [](double x) { return P(x,1/(1+x),1/(1+x)); }, + prec), }; } //00012034 -// -// +// curve 1 : x = [1/2,1], y = (1+ x)/(3*x), z = 1/2 +// curve 2 : x = 1/2, y = [1/2,1], z = (2 - y)/(1 + y) +// curve 3 : x =[0,1/2], y = 1/2, z = (x-2)/(3*x-3) template -std::vector> poly00012034(const int /*prec*/ = 10) +std::vector> poly00012034(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,2./3,1./2), + [](double x) { return P(x,(1+ x)/(3*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,(2 - y)/(1 + y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1./2,1.), + [](double x) { return P(x,1./2,(x-2)/(3*x-3)); }, + prec), }; } //00012134 -// -// +// curve 1 : x = [1-1./1.73205,1./2], y = (-1 + 2*x)/(x*(-2 + 3*x)), z = -x/(1 - 5*x + 3*x*x) +// curve 2 : x = [(0.,1-1./1.73205], y = 1/2, z = (-2 + x)/(-3 + 2*x) +// curve 3 : x = 1/2, y = [2/3,1], z = 1-y/2 +// curve 4 : x = -(z - 1)*(3*z - 1)/z, y = z/(3*z - 1), z = [1/2,2/3] +// curve 5 : x = [1-1./1.73205,1./2], y = (-1 - x*x + sqrt(1 - 6*x*x + 4*x*x*x + x*x*x*x))/(2*(-2 + x)*x), z = (-1 - 2*x + x*x - sqrt(1 - 6*x*x + 4*x*x*x + x*x*x*x))/(2*(-1 - 2*x + 2*x*x)) +// curve 6 : x = 1/2, y = [1/2,2/3], z = y/(-1 + 3*y) +// curve 7 : x = [1-1./1.73205,1./2], y = 1/2, z = x/(1-x) template -std::vector> poly00012134(const int /*prec*/ = 10) +std::vector> poly00012134(const int prec = 10) { return { - - + create_polyline(1-1./1.73205,1./2, P(1-1./1.73205,1./2,1.73205-1.),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(x*(-2 + 3*x)),-x/(1 - 5*x + 3*x*x)); }, + prec), + create_polyline(0.,1-1./1.73205, P(0.,1./2,2./3),P(1-1./1.73205,1./2,1.73205-1.), + [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1.-y/2); }, + prec), + create_polyline(1./2,2./3, P(1./2,1.,1./2),P(1./2,2./3,2./3), + [](double z) { return P( -(z - 1)*(3*z - 1)/z,z/(3*z - 1),z); }, + prec), + create_polyline(1-1./1.73205,1./2,P(1-1./1.73205,1./2,1.73205-1.),P(1./2,2./3,2./3), + [](double x) { return P(x,(-1 - x*x + sqrt(1 - 6*x*x + 4*x*x*x + x*x*x*x))/(2*(-2 + x)*x),(-1 - 2*x + x*x - sqrt(1 - 6*x*x + 4*x*x*x + x*x*x*x))/(2*(-1 - 2*x + 2*x*x)) ); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,1.),P(1./2,2./3,2./3), + [](double y) { return P( 1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(1-1./1.73205,1./2, P(1-1./1.73205,1./2,1.73205-1.),P(1./2,1./2,1.), + [](double x) { return P(x ,1./2,x/(1-x)); }, + prec), }; } //00012234 -// -// +// curve 1 : x = [1/2,1], y = 1/(2x), z = 1/2 +// curve 2 : x = [1/2,1], y = z = 1./(1+x) +// curve 3 : x = 1/2, y = [2/3,1], z = 1-y/2 +// curve 4 : x = [0,1/2], y = 1/(2-x), z = 2/3 +// curve 5 : x = 1/2, y = 2/3, z =[2/3,1] template -std::vector> poly00012234(const int /*prec*/ = 10) +std::vector> poly00012234(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x ,1./(2*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,2./3,2./3),P(1.,1./2,1./2), + [](double x) { return P(x ,1./(1+x),1./(1+x)); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1.-y/2); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,2./3,2./3), + [](double x) { return P(x,1./(2-x),2./3); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,2./3,1.), + [](double z) { return P(1./2,2./3,z); }, + prec), }; } //00012334 -// -// +// curve 1 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = 2./3 +// curve 2 : x = [1/2,1], y = x/(-1 + 3*x), z = (-1 + 3*x - x*x)/(-1 + 3*x) +// curve 3 : x = [1/2,1], y = 1/2x, z = 1/2 +// problem with close polylines, there is an over refinement template -std::vector> poly00012334(const int /*prec*/ = 10) +std::vector> poly00012334(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),2./3); }, + prec), + create_polyline(1./2,1., P(1/2.,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x, x/(-1 + 3*x),(-1 + 3*x - x*x)/(-1 + 3*x)); }, + prec), + create_polyline(1./2,1., P(1/2.,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./(2*x),1./2); }, + prec), }; } //00012340 -// -// +// curve 1 : x = [0,1/2], y = 1/2, z = (-2 + x)/(3*(-1 + x)) +// curve 2 : x = [0,1/2], y = [0,1/2], z = (-2 + y)/(3*(-1 + y)) template -std::vector> poly00012340(const int /*prec*/ = 10) +std::vector> poly00012340(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1./2,1.), + [](double x) { return P(x,1./2,(-2 + x)/(3*(-1 + x))); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,(-2 + y)/(3*(-1 + y))); }, + prec), }; } //00012341 -// -// +// curve 1 : x = 1/2, y = [0.,1-1./1.73205], z = (-2 + y)/(-3 + 2*y) +// curve 2 : x = [0.,1-1./1.73205], y = 1/2, z = (-2 + x)/(-3 + 2*x) +// curve 3 : x = 1/2, y = [1-1./1.73205,1./2], z = -y/(-1 + y) +// curve 4 : x = [1-1./1.73205,1./2], y = 1/2, z = -x/(-1 + x) +// curve 5 : x = [1-1./1.73205,1./2], y = (-1 - 2*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-2 + x)*x), z = (1 - 4*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-1 + x)*(-1+x)) +// curve 6 : x = [1/2,1], y = (1 + x - sqrt(1 - x + x*x))/(3*x), z = (x - sqrt(1 - x + x*x))/(-1 + x) +// curve 7 : x = (1 + y - sqrt(1 - y + y*y))/(3*y), y = [1/2,1], z = (y - sqrt(1 - y + y*y))/(-1 + y) template -std::vector> poly00012341(const int /*prec*/ = 10) +std::vector> poly00012341(const int prec = 10) { return { - - + create_polyline(0.,1-1./1.73205, P(1./2,0.,2./3),P(1./2,1-1./1.73205,1.73205-1), + [](double y) { return P(1./2,y,(-2 + y)/(-3 + 2*y)); }, + prec), + create_polyline(0.,1-1./1.73205, P(0.,1./2,2./3),P(1-1./1.73205,1./2,1.73205-1), + [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, + prec), + create_polyline(1-1./1.73205,1./2,P(1./2,1-1./1.73205,1.73205-1), P(1./2,1./2,1.), + [](double y) { return P(1./2,y,-y/(-1 + y)); }, + prec), + create_polyline(1-1./1.73205,1./2,P(1-1./1.73205,1./2,1.73205-1), P(1./2,1./2,1.), + [](double x) { return P(x,1./2,-x/(-1 + x)); }, + prec), + create_polyline(1-1./1.73205,1./2,P(1-1./1.73205,1./2,1.73205-1),P(1./2,1-1./1.73205,1.73205-1), + [](double x) { return P(x,(-1 - 2*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-2 + x)*x),(1 - 4*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-1 + x)*(-1+x))); }, + prec), + create_polyline(1./2,1., P(1./2,1-1./1.73205,1.73205-1), P(1.,1./3,1./2) , + [](double x) { return P(x,(1 + x - sqrt(1 - x + x*x))/(3*x),(x - sqrt(1 - x + x*x))/(-1 + x)); }, + prec), + create_polyline(1./2,1.,P(1-1./1.73205,1./2,1.73205-1),P(1./3,1.,1./2), + [](double y) { return P((1 + y - sqrt(1 - y + y*y))/(3*y),y,(y - sqrt(1 - y + y*y))/(-1 + y)); }, + prec), }; } //00012342 -// -// +// curve 1 : x = [1/2,1], y = 1/(2*x), z = -x/(1 - 5*x + 2*x*x) +// curve 2 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 3*x), z = (1 - 4*x + 2*x*x)/(1 - 4*x + x*x) +// curve 3 : x = [0,1/2], y = (-1 +x)/(-2 + 3*x), z = (2 - 4*x + x*x)/(3 - 6*x + 2*x*x) template -std::vector> poly00012342(const int /*prec*/ = 10) +std::vector> poly00012342(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1/(2*x),-x/(1 - 5*x + 2*x*x)); }, + prec), + create_polyline(1./2,1., P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 3*x),(1 - 4*x + 2*x*x)/(1 - 4*x + x*x)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1.,1./2), + [](double x) { return P(x,(-1 +x)/(-2 + 3*x),(2 - 4*x + x*x)/(3 - 6*x + 2*x*x)); }, + prec), }; } //00012343 -// -// +// curve 1 : x = [1/2,1], y = 1/(2*x), z = 1/(2*x+1) +// curve 2 : x = [1/3,1/2], y = (-1 + 2*x)/(-1 + x), z = (1 - 2*x + 2*x*x)/(1 - x + x*x) +// curve 3 : x = [0,1/3], y = 1./2, z = (-2 + x)/(-3 + 2*x) +// curve 4 : x = [1/3,1/2], y = -x/(-1 + x), z = (-1 + x + x*x)/(-1 + 2*x*x) +// curve 5 : x = 1/3, y = 1/2, z = [5/7,1] template -std::vector> poly00012343(const int /*prec*/ = 10) +std::vector> poly00012343(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./3), + [](double x) { return P(x,1/(2*x),1/(2*x+1)); }, + prec), + create_polyline(1./3,1./2, P(1./3,1./2,5./7),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x),(1 - 2*x + 2*x*x)/(1 - x + x*x)); }, + prec), + create_polyline(0.,1./3, P(0.,1./2,2./3),P(1./3,1./2,5./7), + [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, + prec), + create_polyline(1./3,1./2,P(1./3,1./2,5./7), P(1./2,1.,1./2), + [](double x) { return P(x,-x/(-1 + x),(-1 + x + x*x)/(-1 + 2*x*x)); }, + prec), + create_polyline(5./7,1., P(1./3,1./2,5./7),P(1./3,1./2,1.), + [](double z) { return P(1./3,1./2,z); }, + prec), }; } //00111234 -// -// +// curve 1 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 3*x), z = 1/(1 + x) +// curve 2 : x = [1/2,1], y = 1./2, z = 1./(2*x) +// curve 3 : x = 1/2, y =[1/2,1], z = (2*y)/(-1 + 4*y) template -std::vector> poly00111234(const int /*prec*/ = 10) +std::vector> poly00111234(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 3*x),1/(1 + x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,2./3), + [](double y) { return P(1./2,y,(2*y)/(-1 + 4*y)); }, + prec), }; } //00112234 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = [1/2,1], y = z = 1/(1 + x) +// curve 3 : x = 1/2, y = [2/3,1], z = 2/3 +// curve 4 : x = 1/2, y = 2/3, z = [2/3,1] +// curve 5 : x = [0,1/2], y = z = 1/(2 - x) template -std::vector> poly00112234(const int /*prec*/ = 10) +std::vector> poly00112234(const int prec = 10) { return { - - + create_polyline(0.,1., P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,2./3,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,1/(1 + x),1/(1 + x)); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,1.,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,2./3,1.), + [](double z) { return P(1./2,2./3,z); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,2./3,2./3), + [](double x) { return P(x,1/(2 - x),1/(2 - x)); }, + prec), }; } //00112324 -// -// +// curve 1 : x = [0,2/3], y = 1/2, z = 1/(3 - 2*x) +// curve 2 : x = [2/3,1], y = 1/2, z = 1./(1 + x) +// curve 3 : x = [1/2,2/3], y = (-1 + 2*x)/x, z = 1/(1 + x) +// curve 4 : x = [1/2,2/3], y = (1 - x)/x, z = 1/(1 + x) +// curve 5 : x = 2/3, y = 1/2, z = [3/5,1] template -std::vector> poly00112324(const int /*prec*/ = 10) +std::vector> poly00112324(const int prec = 10) { return { - - + create_polyline(0.,2./3, P(0.,1./2,1./3),P(2./3,1./2,3./5), + [](double x) { return P(x,1./2 ,1/(3 - 2*x)); }, + prec), + create_polyline(2./3,1, P(2./3,1./2,3./5),P(1.,1./2,1.), + [](double x) { return P(x,1./2 ,1./(1 + x)); }, + prec), + create_polyline(1./2,2./3, P(1./2,0.,2./3),P(2./3,1./2,3./5), + [](double x) { return P(x,(-1 + 2*x)/x,1/(1 + x)); }, + prec), + create_polyline(1./2,2./3, P(1./2,1.,2./3),P(2./3,1./2,3./5), + [](double x) { return P(x,(1 - x)/x,1/(1 + x)); }, + prec), + create_polyline(3./5,1., P(2./3,1./2,3./5),P(2./3,1./2,1.), + [](double z) { return P(2./3,1./2,z); }, + prec), + }; } //00112334 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = [1/2,1], y = x/(-1 + 3*x), z = 1/(1 + x) +// curve 2 : x = 1-x', y = 1- x'/(-1 + 3*x'), z = 1/(1 + x'), x' = [1/2,1] template -std::vector> poly00112334(const int /*prec*/ = 10) +std::vector> poly00112334(const int prec = 10) { return { + create_polyline(0.,1., P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), - + create_polyline(1./2,1., P(1./2,1.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,x/(-1. + 3*x),1./(1 + x)); }, + prec), + create_polyline(1./2,1., P(1./2,0.,2./3),P(0.,1./2,1./2), + [](double x) { return P(1-x,1 - x/(-1. + 3*x),1./(1 + x)); }, + prec), }; } //00121234 -// -// +// curve 1 : x = 1/2, y = [0,2/3], z = (-2 + 3*y)/(-3 + 4*y +// curve 2 : x = 1/2, y =[1/2,1], z = y/(-1 + 3*y) template -std::vector> poly00121234(const int /*prec*/ = 10) +std::vector> poly00121234(const int prec = 10) { return { - - + create_polyline(0.,2./3, P(1./2,0.,2./3),P(1./2,2./3,0.), + [](double y) { return P(1./2,y,(-2 + 3*y)/(-3 + 4*y)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), }; } //00121304 -// -// +// curve 1 : x = [1/2,4.-2*1.73205], y = (2 + x - sqrt(4 - 8*x + x*x))/(6*x), z = (-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x) +// curve 2 : x = [1/2,4.-2*1.73205], y = (2 + x + sqrt(4 - 8*x + x*x))/(6*x), z = (-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x) +// curve 3 : x = [1/2,4.-2*1.73205], y = (-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x), z = (2 + x + sqrt(4 - 8*x + x*x))/(6*x) +// curve 4 : x = [1/2,4.-2*1.73205], y = (-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x), z = (2 + x - sqrt(4 - 8*x + x*x))/(6*x) +// curve 5 : x = [1/2,1], y = 1/2x, z = 1/2 +// curve 6 : x = [1/2,1], y = 1/2, z = 1/2x template -std::vector> poly00121304(const int /*prec*/ = 10) +std::vector> poly00121304(const int prec = 10) { return { - - + create_polyline(1./2,4.-2*1.73205, P(1./2,2./3,0.),P(4.-2*1.73205,(1.+1/1.73205)/2,(1.73205-1)/2.), + [](double x) { return P(x,(2 + x - sqrt(4 - 8*x + x*x))/(6*x),(-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x)); }, + prec), + create_polyline(1./2,4.-2*1.73205, P(1./2,1.,1./2),P(4.-2*1.73205,(1.+1/1.73205)/2,(1.73205-1)/2.), + [](double x) { return P(x,(2 + x + sqrt(4 - 8*x + x*x))/(6*x),(-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x)); }, + prec), + create_polyline(1./2,4.-2*1.73205, P(1./2,1./2,1.),P(4.-2*1.73205,(1.73205-1)/2.,(1.+1/1.73205)/2), + [](double x) { return P(x,(-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x),(2 + x + sqrt(4 - 8*x + x*x))/(6*x)); }, + prec), + create_polyline(1./2,4.-2*1.73205, P(1./2,0.,2./3),P(4.-2*1.73205,(1.73205-1)/2.,(1.+1/1.73205)/2), + [](double x) { return P(x,(-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x),(2 + x - sqrt(4 - 8*x + x*x))/(6*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./(2*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), }; } //00121324 -// -// +// curve 1 : x = [1./2,0.5944], y = (1 - 2*x)/(1 - 3*x + x*x), z = 1/(1 + x) +// curve 2 : x = [0.5944,1], y = x/(1 + x*x), z = 1/(1 + x) +// curve 3 : x = [3/5,1], y =1./2, z = x/(3*x-1) +// curve 4 : x = z/(3*z-1), y = 1./2, z = [3/4,1] +// curve 5 : x = [1./2,0.5944], y = (x*(-2 + 3*x))/(-1 + 2*x*x), z = (x*(-2 + 3*x))/(1 - 5*x + 5*x*x) +// curve 6 : x = -(-3*z + (3*z - 3)*((3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1))) + 2)/z, y = (3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1)), z = ]0,0.6271] template -std::vector> poly00121324(const int /*prec*/ = 10) +std::vector> poly00121324(const int prec = 10) { return { - - + create_polyline(1./2,0.5944, P(1./2,0.,2./3),P(0.5944,0.4392,0.6271), + [](double x) { return P(x,(1 - 2*x)/(1 - 3*x + x*x),1/(1 + x)); }, + prec), + create_polyline(0.5944,1.,P(0.5944,0.4392,0.6271),P(1.,1./2,1./2), + [](double x) { return P(x,x/(1 + x*x),1/(1 + x)); }, + prec), + create_polyline(3./5,1.,P(3./5,1./2,3./4),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(3*x-1)); }, + prec), + create_polyline(3./4,1.,P(3./5,1./2,3./4),P(1./2,1./2,1.), + [](double z) { return P(z/(3*z-1),1./2,z); }, + prec), + create_polyline(1./2,0.5944, P(1./2,1./2,1.),P(0.5944,0.4392,0.6271), + [](double x) { return P(x,(x*(-2 + 3*x))/(-1 + 2*x*x),(x*(-2 + 3*x))/(1 - 5*x + 5*x*x)); }, + prec), + create_polyline(limit_value(0.,1),0.6271,P(1./2,2./3,0.),P(0.5944,0.4392,0.6271), + [](double z) { return P(-(-3*z + (3*z - 3)*((3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1))) + 2)/z,(3*z - 1)/(3*(2*z - 1)) - sqrt(3*z*z - 3*z + 1)/(3*(2*z - 1)),z); }, + prec), }; } //00121340 -// -// +// curve 1 : x = -(-5*z*z + 6*z + ((2*z - 1)*(3*z - 2)/(2*(7*z*z - 9*z + 3)) + sqrt(8*z*z*z*z - 20*z*z*z + 25*z*z - 16*z + 4)/(2*(7*z*z - 9*z + 3)))*(7*z*z - 9*z + 3) - 2)/(z*(2*z - 1)), y = (2*z - 1)*(3*z - 2)/(2*(7*z*z - 9*z + 3)) + sqrt(8*z*z*z*z - 20*z*z*z + 25*z*z - 16*z + 4)/(2*(7*z*z - 9*z + 3)), z = ]0,1/2[ +// curve 2 : x = -(-5*z*z + 4*z + (-sqrt(-(z*z + z - 1)*(3*z*z - 5*z + 1))/(2*(7*z*z - 6*z + 1)) + (9*z*z - 7*z + 1)/(2*(7*z*z - 6*z + 1)))*(7*z*z - 6*z + 1) - 1)/(z*(z + 1)), y = -sqrt(-(z*z + z - 1)*(3*z*z - 5*z + 1))/(2*(7*z*z - 6*z + 1)) + (9*z*z - 7*z + 1)/(2*(7*z*z - 6*z + 1)), z = [2/3,1] +// curve 3 : x = [3/8,1/2], y = (-3 - sqrt(-3 + 8*x))/(2*(-3 + 2*x)), z = (-3 + sqrt(-3 + 8*x))/(2*(-3 + 2*x)) +// curve 4 : x = [3/8,1/2], y = (-3 + sqrt(-3 + 8*x))/(2*(-3 + 2*x)), z = (-3 - sqrt(-3 + 8*x))/(2*(-3 + 2*x)) template -std::vector> poly00121340(const int /*prec*/ = 10) +std::vector> poly00121340(const int prec = 10) { return { - - + create_polyline(limit_value(0.,1.),limit_value(1./2,-1.), P(1./2,2./3,0.),P(1./2,1.,1./2), + [](double z) { return P(-(-5*z*z + 6*z + ((2*z - 1)*(3*z - 2)/(2*(7*z*z - 9*z + 3)) + sqrt(8*z*z*z*z - 20*z*z*z + 25*z*z - 16*z + 4)/(2*(7*z*z - 9*z + 3)))*(7*z*z - 9*z + 3) - 2)/(z*(2*z - 1)),(2*z - 1)*(3*z - 2)/(2*(7*z*z - 9*z + 3)) + sqrt(8*z*z*z*z - 20*z*z*z + 25*z*z - 16*z + 4)/(2*(7*z*z - 9*z + 3)),z); }, + prec), + create_polyline(2./3,1., P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P(-(-5*z*z + 4*z + (-sqrt(-(z*z + z - 1)*(3*z*z - 5*z + 1))/(2*(7*z*z - 6*z + 1)) + (9*z*z - 7*z + 1)/(2*(7*z*z - 6*z + 1)))*(7*z*z - 6*z + 1) - 1)/(z*(z + 1)),-sqrt(-(z*z + z - 1)*(3*z*z - 5*z + 1))/(2*(7*z*z - 6*z + 1)) + (9*z*z - 7*z + 1)/(2*(7*z*z - 6*z + 1)),z); }, + prec), + create_polyline(3./8,1./2, P(3./8.,2./3,2./3),P(1./2,1.,1./2), + [](double x) { return P(x,(-3 - sqrt(-3 + 8*x))/(2*(-3 + 2*x)),(-3 + sqrt(-3 + 8*x))/(2*(-3 + 2*x))); }, + prec), + create_polyline(3./8,1./2, P(3./8.,2./3,2./3),P(1./2,1./2,1.), + [](double x) { return P(x,(-3 + sqrt(-3 + 8*x))/(2*(-3 + 2*x)),(-3 - sqrt(-3 + 8*x))/(2*(-3 + 2*x))); }, + prec), }; } //00121341 -// -// +// curve 1 : x = [1/2,1], y = 1./(x+1), z = (1 - 2*x)/(1 - 4*x + x*x) +// curve 2 : x = [1/2,1], y = (1 - 2*x)/(1 - 4*x + x*x), z = 1./(x+1) template -std::vector> poly00121341(const int /*prec*/ = 10) +std::vector> poly00121341(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double x) { return P(x,1./(x+1),(1 - 2*x)/(1 - 4*x + x*x)); }, + prec), + create_polyline(1./2,1.,P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(1 - 2*x)/(1 - 4*x + x*x),1./(x+1)); }, + prec), }; } //00121342 -// -// +// curve 1 : x = [1/3,1/2], y = x/(-1 + 4*x), z = -x/(-1 + x) +// curve 2 : x = [1/2,1/1.73205], y = (1 - 2*x)/(1 - 3*x + x*x), z = 1/(1 + x) +// curve 3 : x = [1/1.73205,1], y = 1/(2 + x), z = 1/(1 + x) +// curve 4 : x = [1/2,1/1.73205], y = (-2 + 3*x)/(-3 + 4*x), z = (-2 + 3*x)/(-1 + x) +// curve 5 : x = (-2*z*z + 5*z + ((3*z*z - 6*z + 2)/(2*(2*z*z - 6*z + 3)) + sqrt(z*z*z*z - 4*z*z*z + 12*z*z - 12*z + 4)/(2*(2*z*z - 6*z + 3)))*(2*z*z - 6*z + 3) - 2)/z, y = (3*z*z - 6*z + 2)/(2*(2*z*z - 6*z + 3)) + sqrt(z*z*z*z - 4*z*z*z + 12*z*z - 12*z + 4)/(2*(2*z*z - 6*z + 3)), z = [0,(3-1.73205)/2] template -std::vector> poly00121342(const int /*prec*/ = 10) +std::vector> poly00121342(const int prec = 10) { return { - - + create_polyline(1./3,1./2,P(1./3,1.,1./2),P(1./2,1./2,1.), + [](double x) { return P(x,x/(-1 + 4*x),-x/(-1 + x)); }, + prec), + create_polyline(1./2,1/1.73205,P(1./2,0.,2./3),P(1/1.73205,(6-1.73205)/11,(3-1.73205)/2), + [](double x) { return P(x,(1 - 2*x)/(1 - 3*x + x*x),1/(1 + x)); }, + prec), + create_polyline(1./1.73205,1.,P(1/1.73205,(6-1.73205)/11,(3-1.73205)/2),P(1.,1./3,1./2), + [](double x) { return P(x,1/(2 + x),1/(1 + x)); }, + prec), + create_polyline(1./2,1/1.73205,P(1./2,1./2,1.),P(1/1.73205,(6-1.73205)/11,(3-1.73205)/2), + [](double x) { return P(x,(-2 + 3*x)/(-3 + 4*x),(-2 + 3*x)/(-1 + x)); }, + prec), + create_polyline(limit_value(0.,1),(3-1.73205)/2,P(1./2,2./3,0.),P(1/1.73205,(6-1.73205)/11,(3-1.73205)/2), + [](double z) { return P((-2*z*z + 5*z + ((3*z*z - 6*z + 2)/(2*(2*z*z - 6*z + 3)) + sqrt(z*z*z*z - 4*z*z*z + 12*z*z - 12*z + 4)/(2*(2*z*z - 6*z + 3)))*(2*z*z - 6*z + 3) - 2)/z,(3*z*z - 6*z + 2)/(2*(2*z*z - 6*z + 3)) + sqrt(z*z*z*z - 4*z*z*z + 12*z*z - 12*z + 4)/(2*(2*z*z - 6*z + 3)),z); }, + prec), }; } //00121344 -// -// +// curve 1 : x = [1./2,0.5698], y = 1/(1 + x), z = (1 - 2*x)/(1 - 3*x + x*x) +// curve 2 : x = [0.5698,1], y = 1/(1 + x), z = x/(1 + x) +// curve 3 : x = [1./2,0.5698], y = ((-1 + x)*x)/(1 - 3*x + x*x), z = x/(1 + x) +// curve 4 : x = [0.5698,1], y = x/(1 + x), z = 1/(1 + x) +// curve 5 : x = [1./2,0.5698], y = (1 - 2*x)/(1 - 3*x + x*x), z = 1/(1 + x) +// curve 6 : x = [1./2,0.5698], y = x/(1 + x),((-1 + x)*x)/(1 - 3*x + x*x) +// curve 7 : x = (3*z*z - 3*z + 1)/(2*z*z - 2*z + 1), y = 1-z, z = [0.3629,0.6370] template -std::vector> poly00121344(const int /*prec*/ = 10) +std::vector> poly00121344(const int prec = 10) { return { - - + create_polyline(1./2,0.5698,P(1./2,2./3,0.),P(0.5698,0.6370,0.3629), + [](double x) { return P(x,1/(1 + x),(1 - 2*x)/(1 - 3*x + x*x)); }, + prec), + create_polyline(0.5698,1.,P(0.5698,0.6370,0.3629),P(1.,1./2,1./2), + [](double x) { return P(x,1/(1 + x),x/(1 + x)); }, + prec), + create_polyline(1./2,0.5698,P(1./2,1.,1./3),P(0.5698,0.6370,0.3629), + [](double x) { return P(x,((-1 + x)*x)/(1 - 3*x + x*x),x/(1 + x)); }, + prec), + create_polyline(0.5698,1.,P(0.5698,0.3629,0.6370),P(1.,1./2,1./2), + [](double x) { return P(x,x/(1 + x),1/(1 + x)); }, + prec), + create_polyline(1./2,0.5698,P(1./2,0.,2./3),P(0.5698,0.3629,0.6370), + [](double x) { return P(x,(1 - 2*x)/(1 - 3*x + x*x),1/(1 + x)); }, + prec), + create_polyline(1./2,0.5698,P(1./2,1./3,1.),P(0.5698,0.3629,0.6370), + [](double x) { return P(x,x/(1 + x),((-1 + x)*x)/(1 - 3*x + x*x)); }, + prec), + create_polyline(0.3629,0.6370,P(0.5698,0.6370,0.3629),P(0.5698,0.3629,0.6370), + [](double z) { return P((3*z*z - 3*z + 1)/(2*z*z - 2*z + 1),1-z,z); }, + prec), }; } //00122134 -// -// +// curve 1 : x = 1/2, y = [0,1], z = (-2 + 3*y)/(-3 + 4 y) +// curve 2 : x = [0,1], y = z = 1/2 +// curve 3 : x = [0,1/2], y = z = 1/(2 - x) +// curve 4 : x = [1/2,1], y = z = 1/(1+ x) +// curve 5 : x = 1/2, y = [1/2,1], z = y/(-1 + 3*y) +// curve 6 : x = 1/2, y = z = [1/2,2/3] + template -std::vector> poly00122134(const int /*prec*/ = 10) +std::vector> poly00122134(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(1./2,0.,2./3),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,(-2 + 3*y)/(-3 + 4*y)); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,2./3,0.), + [](double y) { return P(1./2,y,(-2 + 3*y)/(-3 + 4*y)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,2./3,2./3), + [](double x) { return P(x,1/(2 - x),1/(2 - x)); }, + prec), + create_polyline(1./2,1.,P(1./2,2./3,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,1/(1+ x),1/(1 +x)); }, + prec), + create_polyline(2./3,1.,P(1./2,2./3,2./3),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1.),P(1./2,2./3,2./3), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,2./3,2./3), + [](double y) { return P(1./2,y,y); }, + prec), }; } //00122304 -// -// +// curve 1 : x = (-3*z*z + 4*z + (-sqrt(3*z*z - 3*z + 1)/(3*(z - 1)) - 1/(3*(z - 1)))*(3*z*z - 6*z + 3) - 2)/(z*(2*z - 1)), y = -sqrt(3*z*z - 3*z + 1)/(3*(z - 1)) - 1/(3*(z - 1)), z = [0,1/2] +// curve 2 : x = [1/2,1], y = (2 - x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)), z = (-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x)) +// curve 3 : x = [1/2,1], y = (2 - x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)), z = (-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x)) +// curve 4 : x = (-z + (2*z - 1)*(-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1))) + 1)/z, y = -sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1)), z = [2/3,1] template -std::vector> poly00122304(const int /*prec*/ = 10) +std::vector> poly00122304(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(1./2,2./3,0.),P(1./2,1.,1./2), + [](double z) { return P(-(-3*z*z + 4*z + (-sqrt(3*z*z - 3*z + 1)/(3*(z - 1)) - 1/(3*(z - 1)))*(3*z*z - 6*z + 3) - 2)/(z*(2*z - 1)),-sqrt(3*z*z - 3*z + 1)/(3*(z - 1)) - 1/(3*(z - 1)),z); }, + prec), + create_polyline(1./2,1.,P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(2 - x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - x + 2*x*x)),(-3*x + sqrt(x)*sqrt(4 - 11*x + 8*x*x))/(2*(1 - 5*x + 2*x*x))); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1/(2*x)); }, + prec), + create_polyline(2./3,1.,P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double z) { return P((-z + (2*z - 1)*(-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1))) + 1)/z,-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1)),z); }, + prec), }; } //00122314 -// -// +// curve 1 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 2*x + x*x), z = 1/(1 + x) +// curve 2 : x = [0,4-21.73205], y = (4 - x - sqrt(4 - 8*x + x*x))/6, z = (-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x) +// curve 3 : x = [1/2,4-21.73205], y = (4 - x + sqrt(4 - 8*x + x*x))/6, z = (-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x) +// curve 4 : x = [1/2,1], y = 1/2, z = x/(-1 + 3*x) +// curve 5 : x = [1/2,2/3], y = (-1 + 2*x - x*x)/(-1 + 2*x*x), z = (1 - x)/x +// problem with close polylines, there is an over refinement template -std::vector> poly00122314(const int /*prec*/ = 10) +std::vector> poly00122314(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 2*x + x*x),1/(1 + x)); }, + prec), + create_polyline(0.,4.-2*1.73205,P(0.,1./3,1./2),P(4.-2*1.73205,1/1.73205,(1.73205-1)/2.), + [](double x) { return P(x,(4 - x - sqrt(4 - 8*x + x*x))/6,(-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x) ); }, + prec), + create_polyline(1./2,4.-2*1.73205,P(1./2,2./3,0.),P(4.-2*1.73205,1/1.73205,(1.73205-1)/2.), + [](double x) { return P(x,(4 - x + sqrt(4 - 8*x + x*x))/6,(-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x) ); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1.),P(2./3,1.,1./2), + [](double x) { return P(x,(-1 + 2*x - x*x)/(-1 + 2*x*x),(1 - x)/x); }, + prec), }; } //00122324 -// -// +// curve 1 : x = [0,1/2], y = 1/(2 - x), z = (1 - 2*x)/(3 - 5*x + x*x) +// curve 2 : x = [1/2,1], y = (-1 + 2*x)/(x*(1 + x)), z = 1/(1 + x) +// curve 3 : x = [2/3,1], y = 1/2, z = x/(2*(-1 + 2*x) template -std::vector> poly00122324(const int /*prec*/ = 10) +std::vector> poly00122324(const int prec = 10) { return { - + create_polyline(0.,1./2,P(0.,1./2,1./3),P(1./2,2./3,0.), + [](double x) { return P(x,1/(2 - x),(1 - 2*x)/(3 - 5*x + x*x)); }, + prec), + create_polyline(1./2,1.,P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(x*(1 + x)),1/(1 + x)); }, + prec), + create_polyline(2./3,1.,P(2./3,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(2*(-1 + 2*x))); }, + prec), }; } //00122334 -// -// +// curve 1 : x = [1/2,1], y = x/(-1 + 3*x), z = (x*x)/(1 - 3*x + 4*x*x) +// curve 2 : x = [1/3,1/2], y = (1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x), z = (1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x) +// curve 3 : x = [1/3,1/2], y = 1/(2 - x), z = (1 - 2*x)/(2 - 4*x + x*x) +// curve 4 : x = [0,1/3], y = 1/(2 - x), z = 1/(2 + x) +// curve 5 : x = [1/3,1/2], y = (-1 + 2*x)/(-1 + x + x*x), z = x/(1 - x + x*x) +// curve 6 : x = [0,1], y = z = 1/2 template -std::vector> poly00122334(const int /*prec*/ = 10) +std::vector> poly00122334(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,1.,1/2.),P(1.,1./2,1./2), + [](double x) { return P(x,x/(-1 + 3*x),(x*x)/(1 - 3*x + 4*x*x)); }, + prec), + create_polyline(1./3,1./2,P(1./3,3./5,3./7),P(1./2,1.,1/2.), + [](double x) { return P(x,(1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x),(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, + prec), + create_polyline(1./3,1./2,P(1./3,3./5,3./7),P(1./2,2./3,0.), + [](double x) { return P(x,1/(2 - x),(1 - 2*x)/(2 - 4*x + x*x)); }, + prec), + create_polyline(0.,1./3,P(0.,1./2,1./2),P(1./3,3./5,3./7), + [](double x) { return P(x,1/(2 - x),1/(2 + x)); }, + prec), + create_polyline(1./3,(3.-2.23606)/2,P(1./3,3./5,3./7),P((3.-2.23606)/2,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x + x*x),x/(1 - x + x*x)); }, + prec), + create_polyline((3.-2.23606)/2,1./2,P((3.-2.23606)/2,1./2,1./2),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x + x*x),x/(1 - x + x*x)); }, + prec), + create_polyline(0.,(3.-2.23606)/2,P(0.,1./2,1./2),P((3.-2.23606)/2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline((3.-2.23606)/2,1.,P((3.-2.23606)/2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), }; } //00122344 -// -// +// curve 1 : x = [1./2,(2.23606-1.)/2], y = x/(1 + x), z = (x*x)/(-1 + 2*x + x*x) +// curve 2 : x = [(3.-2.23606)/2,1./2], y = (-1 + x)*(-1+x)/(2 - 4*x + x*x), z = (-1 + x)/(-2 + x) +// curve 3 : x = [1./2,(2.23606-1.)/2], y = (-1 + 2*x)/(-1 + 2*x + x*x), z = 1/(1 + x) +// curve 4 : x = [(2.23606-1.)/2,1], y = x/(1 + x), z = 1/(1 + x) +// curve 5 : x = [0.,(3.-2.23606)/2], y = 1/(2 - x), z = (-1 + x)/(-2 + x) +// curve 6 : x = [3.-2.23606)/2,1./2], y = 1/(2 - x), z = (1 - 2*x)/(2 - 4*x + x*x) +// curve 7 : x = [0,1], y = z = 1/2 +// curve 8 : x = z, y = 1-z, z = [(3.-2.23606)/2,(2.23606-1.)/2] template -std::vector> poly00122344(const int /*prec*/ = 10) +std::vector> poly00122344(const int prec = 10) { return { - - + create_polyline(1./2,(2.23606-1.)/2,P(1./2,1./3,1.),P((2.23606-1.)/2,(3.-2.23606)/2,(2.23606-1.)/2), + [](double x) { return P(x,x/(1 + x),(x*x)/(-1 + 2*x + x*x)); }, + prec), + create_polyline((3.-2.23606)/2,1./2,P((3.-2.23606)/2,(2.23606-1.)/2,(3.-2.23606)/2),P(1./2,1.,1./3), + [](double x) { return P(x,(-1 + x)*(-1+x)/(2 - 4*x + x*x),(-1 + x)/(-2 + x)); }, + prec), + create_polyline(1./2,(2.23606-1.)/2,P(1./2,0.,2./3),P((2.23606-1.)/2,(3.-2.23606)/2,(2.23606-1.)/2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 2*x + x*x),1/(1 + x)); }, + prec), + create_polyline((2.23606-1.)/2,1.,P((2.23606-1.)/2,(3.-2.23606)/2,(2.23606-1.)/2),P(1.,1./2,1./2), + [](double x) { return P(x,x/(1 + x),1/(1 + x)); }, + prec), + create_polyline(0.,(3.-2.23606)/2,P(0.,1./2,1./2),P((3.-2.23606)/2,(2.23606-1.)/2,(3.-2.23606)/2), + [](double x) { return P(x,1/(2 - x),(-1 + x)/(-2 + x)); }, + prec), + create_polyline((3.-2.23606)/2,1./2,P((3.-2.23606)/2,(2.23606-1.)/2,(3.-2.23606)/2),P(1./2,2./3,0.), + [](double x) { return P(x,1/(2 - x),(1 - 2*x)/(2 - 4*x + x*x)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline((3.-2.23606)/2,1./2,P((3.-2.23606)/2,(2.23606-1.)/2,(3.-2.23606)/2),P(1./2,1./2,1./2), + [](double z) { return P(z,1-z,z); }, + prec), + create_polyline(1./2,(2.23606-1.)/2,P(1./2,1./2,1./2),P((2.23606-1.)/2,(3.-2.23606)/2,(2.23606-1.)/2), + [](double z) { return P(z,1-z,z); }, + prec), }; } //00123400 -// -// +// curve 1 : x = 1/2, y = [2/3,1], z = (-2 + 3*y)/(-2 + 5*y) +// curve 2 : x = 1/2, y = [0,1/3], z = (2*(-1 + y))/(-3 + 5*y template -std::vector> poly00123400(const int /*prec*/ = 10) +std::vector> poly00123400(const int prec = 10) { return { - - + create_polyline(2./3,1.,P(1./2,2./3,0.),P(1./2,1.,1./3), + [](double y) { return P(1./2,y,(-2 + 3*y)/(-2 + 5*y)); }, + prec), + create_polyline(0.,1./3,P(1./2,0.,2./3),P(1./2,1./3,1.), + [](double y) { return P(1./2,y,(2*(-1 + y))/(-3 + 5*y)); }, + prec), }; } //00123401 -// -// +// curve 1 : x = [1/2,1], y = x/(1 - 2*x + 3*x*x), z = (-1 + 2*x)/(-1 + 3*x) +// curve 2 : x = [1/2,1], y = (4*x - x*x - sqrt(x)*sqrt(-4 + 12*x - 8*x*x + x*x*x))/(2*(1 + x)), z = (-2 + 2*x + x*x + sqrt(x)*sqrt(-4 + 12*x - 8*x*x + x*x*x))/(2*(-1 + 3*x*x)) +// curve 3 : X = 1/2, y = [0,1/2], z = (2*(-1 + y))/(-3 + 4*y) template -std::vector> poly00123401(const int /*prec*/ = 10) +std::vector> poly00123401(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,2./3,0.),P(1.,1./2,1./2), + [](double x) { return P(x,x/(1 - 2*x + 3*x*x),(-1 + 2*x)/(-1 + 3*x)); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,(4*x - x*x - sqrt(x)*sqrt(-4 + 12*x - 8*x*x + x*x*x))/(2*(1 + x)),(-2 + 2*x + x*x + sqrt(x)*sqrt(-4 + 12*x - 8*x*x + x*x*x))/(2*(-1 + 3*x*x))); }, + prec), + create_polyline(0.,1./2,P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,(2*(-1 + y))/(-3 + 4*y)); }, + prec), }; } //00123414 -// -// +// curve 1 : x = [(2.23606-1)/2,2./3], y = (1 - 2*x)/(-1 + x), z = (-1 + 2*x)/x +// curve 2 : x = [1/2,(2.23606-1)/2], y = 1/(1 + x), z = (-1 + 2*x)/x +// curve 3 : x = [(2.23606-1)/2,1], y = 1/(1+x), z = 1/(2+x) +// curve 4 : x = [(3-2.23606)/2,1./2], y = (-1 + 2*x)/(-1 + x), z = 1/(2 - x) +// curve 5 : x = [0.,(3-2.23606)/2], y = 1/(3-x), z = 1/(2 - x) +// curve 6 : x = y = 1-z, z = [(3-2.23606)/2,(2.23606-1)/2] +// curve 7 : x = [1./3,(3-2.23606)/2], y = (-1 + 2*x)/(-1 + x), z = (1 - 2*x)/x template -std::vector> poly00123414(const int /*prec*/ = 10) +std::vector> poly00123414(const int prec = 10) { return { - - + create_polyline((2.23606-1)/2,2./3,P((2.23606-1)/2,(2.23606-1)/2,(3-2.23606)/2),P(2./3,1.,1./2), + [](double x) { return P(x,(1 - 2*x)/(-1 + x),(-1 + 2*x)/x); }, + prec), + create_polyline(1./2,(2.23606-1)/2,P(1./2,2./3,0.),P((2.23606-1)/2,(2.23606-1)/2,(3-2.23606)/2), + [](double x) { return P(x,1/(1 + x),(-1 + 2*x)/x); }, + prec), + create_polyline((2.23606-1)/2,1.,P((2.23606-1)/2,(2.23606-1)/2,(3-2.23606)/2),P(1.,1./2,1./3), + [](double x) { return P(x,1/(1+x),1/(2+x)); }, + prec), + create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(2.23606-1)/2),P(1./2,0.,2./3), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x),1/(2 - x)); }, + prec), + create_polyline(0.,(3-2.23606)/2,P(0.,1./3,1./2),P((3-2.23606)/2,(3-2.23606)/2,(2.23606-1)/2), + [](double x) { return P(x,1/(3-x),1/(2 - x)); }, + prec), + create_polyline((3-2.23606)/2,(2.23606-1)/2,P((2.23606-1)/2,(2.23606-1)/2,(3-2.23606)/2),P((3-2.23606)/2,(3-2.23606)/2,(2.23606-1)/2), + [](double z) { return P(1-z,1-z,z); }, + prec), + create_polyline(1./3,(3-2.23606)/2,P(1./3,1./2,1.),P((3-2.23606)/2,(3-2.23606)/2,(2.23606-1)/2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x),(1 - 2*x)/x); }, + prec), }; } //00123421 -// -// +// curve 1 : x = 1/2, y = [2/5,1/2], z = y/(1-y) +// curve 2 : x = 1/2, y = [0,2/5], z = 2/3 +// curve 3 : x = [1/2,1], y = 1/(3 - x), z = 1/(1 + x) +// curve 4 : x = [0,1/2], y = 1/(2 + x), z = 1/(2- x) +// curve 5 : x = [0,1], y = z = 1/2 +// curve 6 : x = 1/2, y = [2/5,2/3], z = (-2 + 3*y)/(2*(-1 + y)) +// curve 7 : x = 1/2, y = [1/2,1], z = 1/2 template -std::vector> poly00123421(const int /*prec*/ = 10) +std::vector> poly00123421(const int prec = 10) { return { - - + create_polyline(2./5,1./2,P(1./2,2./5,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,y/(1-y)); }, + prec), + create_polyline(0.,2./5,P(1./2,0.,2./3),P(1./2,2./5,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(1./2,1.,P(1./2,2./5,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,1/(3 - x),1/(1 + x)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,2./5,2./3), + [](double x) { return P(x,1/(2 + x),1/(2- x)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(2./5,1./2,P(1./2,2./5,2./3),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,(-2 + 3*y)/(2*(-1 + y))); }, + prec), + create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,2./3,0.), + [](double y) { return P(1./2,y,(-2 + 3*y)/(2*(-1 + y))); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), }; } //00123423 -// -// +// curve 1 : x = [0,1/2], y = 1/(2 - x), z = (-1 + 2*x)/(-2 + 3*x) +// curve 2 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 3*x), z = 1/(1 + x) +// curve 3 : x = [0,1], y = z = 1/2 template -std::vector> poly00123423(const int /*prec*/ = 10) +std::vector> poly00123423(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,2./3,0.), + [](double x) { return P(x,1/(2 - x),(-1 + 2*x)/(-2 + 3*x)); }, + prec), + create_polyline(1./2,1.,P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 3*x),1/(1 + x)); }, + prec), + create_polyline(0.,1.,P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), }; } //01101234 -// -// +// curve 1 : x = 1/2, y = [1/2,1], z = 1/2y +// curve 2 : x = [1/2,1], y = 1/2, z = 1/2x +// curve 3 : x = ]1/2,1], y = (-2 + 4*x - x*x + sqrt(x)*sqrt(-4 + 16*x - 20*x*x + 9*x*x*x))/(2*(-1 + x + 2*x*x)), z = (-2 + 2*x + 3*x*x - sqrt(x)*sqrt(-4 + 16*x - 20*x*x + 9*x*x*x))/(2*(-1 - x + 4*x*x)) template -std::vector> poly01101234(const int /*prec*/ = 10) +std::vector> poly01101234(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./(2*y)); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(limit_value(1./2,1.),1.,P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(-2 + 4*x - x*x + sqrt(x)*sqrt(-4 + 16*x - 20*x*x + 9*x*x*x))/(2*(-1 + x + 2*x*x)),(-2 + 2*x + 3*x*x - sqrt(x)*sqrt(-4 + 16*x - 20*x*x + 9*x*x*x))/(2*(-1 - x + 4*x*x)) ); }, + prec), }; } //01102334 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = 1/2, y = [0,1], z = 1/2 +// curve 3 : x = [1/2,1], y = x/(-1 + 3*x), z = (-1 + 3*x - x*x)/(-1 + 3*x) +// curve 4 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = (-1 + x + x*x)/(-2 + 3*x) template -std::vector> poly01102334(const int /*prec*/ = 10) +std::vector> poly01102334(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,1./2,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,x/(-1 + 3*x),(-1 + 3*x - x*x)/(-1 + 3*x)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(-1 + x + x*x)/(-2 + 3*x)); }, + prec), }; } //01121234 -// -// +// curve 1 : x = 1/2, y = [1/2,1], z = 1/2y +// curve 2 : x = [1/2,4/7], y = (3*x - sqrt(-x (-4 + 7*x)))/(2*(-1 + 4*x)), z = (3*x + sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x)) +// curve 3 : x = [1/2,4/7], y = (3*x + sqrt(-x (-4 + 7*x)))/(2*(-1 + 4*x)), z = (3*x - sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x)) template -std::vector> poly01121234(const int /*prec*/ = 10) +std::vector> poly01121234(const int prec = 10) { return { - - + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./(2*y)); }, + prec), + create_polyline(1./2,4./7,P(1./2,1./2,1.),P(4./7,2./3,2./3), + [](double x) { return P(x,(3*x - sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x)),(3*x + sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x))); }, + prec), + create_polyline(1./2,4./7,P(1./2,1.,1./2),P(4./7,2./3,2./3), + [](double x) { return P(x,(3*x + sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x)),(3*x - sqrt(-x*(-4 + 7*x)))/(2*(-1 + 4*x))); }, + prec), }; } //01121340 -// -// +// curve 1 : x = ]1/2,1], y = (2 - 3*x + 2*x*x + sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 2*x + 3*x*x)), z = (2 - 7*x + 8*x*x - sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 5*x + 6*x*x)) +// curve 2 : x = ]1/2,1], y = (2 - 7*x + 8*x*x - sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 5*x + 6*x*x)), z = (2 - 3*x + 2*x*x + sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 2*x + 3*x*x)) +// curve 3 : x = [0.45016,1/2], y = (3 - 7*x + 5*x*x - sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)), z = (3 - 7*x + 5*x*x + sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)) +// curve 4 : x = [(0.45016,1./2], y = (3 - 7*x + 5*x*x + sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)), z = (3 - 7*x + 5*x*x - sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)) template -std::vector> poly01121340(const int /*prec*/ = 10) +std::vector> poly01121340(const int prec = 10) { return { - - + create_polyline(limit_value(1./2,1.),1.,P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(2 - 3*x + 2*x*x + sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 2*x + 3*x*x)),(2 - 7*x + 8*x*x - sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 5*x + 6*x*x))); }, + prec), + create_polyline(limit_value(1./2,1.),1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,(2 - 7*x + 8*x*x - sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 5*x + 6*x*x)),(2 - 3*x + 2*x*x + sqrt(-x*(-4 + 15*x - 20*x*x + 8*x*x*x)))/(2*(1 - 2*x + 3*x*x))); }, + prec), + create_polyline(0.45016,1./2,P(0.45016,0.702631,0.700106),P(1./2,1./2,1.), + [](double x) { return P(x,(3 - 7*x + 5*x*x - sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)),(3 - 7*x + 5*x*x + sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x))); }, + prec), + create_polyline(0.45016,1./2,P(0.45016,0.702631,0.700106),P(1./2,1.,1./2), + [](double x) { return P(x,(3 - 7*x + 5*x*x + sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x)),(3 - 7*x + 5*x*x - sqrt(-3 + 14*x - 21*x*x + 10*x*x*x + x*x*x*x))/(2*(3 - 8*x + 6*x*x))); }, + prec), }; } //01121341 -// +// no curve // template -std::vector> poly01121341(const int /*prec*/ = 10) +std::vector> poly01121341(const int prec = 10) { return { @@ -1920,288 +2965,810 @@ return { } //01122034 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = -(-3*z*z + 2*z + (3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)))*(4*z*z - 5*z + 1))/(2*z*z - 2*z + 1), y = 3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [4/7,1/2] +// curve 3 : x = -(-3*z*z + 2*z + (3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)))*(4*z*z - 5*z + 1))/(2*z*z - 2*z + 1), y = 3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [4/7,1/2] +// curve 4 : x = 1/2, y = [0,1/2], z = y/(-1 + 3*y) +// curve 5: x = -(z*z/(4*z*z - 3*z + 1) - 1)*(4*z*z - 3*z + 1)/(5*z*z - 4*z + 1), y = z*z/(4*z*z - 3*z + 1), z = [1/2,1] +// problem with close polylines, there is an over refinement template -std::vector> poly01122034(const int /*prec*/ = 10) +std::vector> poly01122034(const int prec = 10) { return { - - + create_polyline(0.,1.,P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,4./7,P(0.,1./2,1./2),P(2./5,2./3,4./7), + [](double z) { return P(-(-3*z*z + 2*z + (3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)))*(4*z*z - 5*z + 1))/(2*z*z - 2*z + 1), 3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)),z); }, + prec), + create_polyline(1./2,4./7,P(1./2,1.,1./2),P(2./5,2./3,4./7), + [](double z) { return P(-(-3*z*z+ 2*z + (3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)))*(4*z*z - 5*z + 1))/(2*z*z - 2*z + 1),3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)),z); }, + prec), + create_polyline(1/2.,1.,P(1/2.,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(1./2,1.,P(1.,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P(-(z*z/(4*z*z - 3*z + 1) - 1)*(4*z*z - 3*z + 1)/(5*z*z - 4*z + 1), z*z/(4*z*z - 3*z + 1),z); }, + prec), }; } //01122334 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = 1/2, y = [0,1], z = 1/2 +// curve 3 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = (1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x) +// curve 4 : x = [0,1/2], x'=1-x, y = (-1 + 2*x)/(-2 + 3*x), z = (1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x) template -std::vector> poly01122334(const int /*prec*/ = 10) +std::vector> poly01122334(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, + prec), + create_polyline(0.,1./2,P(1.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(1-x,1-(-1 + 2*x)/(-2 + 3*x),1-(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, + prec), }; } //01122340 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = 1/2, y = [0,1], z = 1/2 +// curve 3 : x = [0.,0.36299], y = (-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)), z = (1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x)) +// curve 4 : x = [0.36299,1./2], y = (1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x), z = (1 - 2*x + x*x)/(2 - 5*x + 4*x*x) +// curve 5 : x = [0.,0.36299], x'=1-x, y = 1-(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)), z = (1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x)) +// curve 6 : x = [0.36299,1./2], x'= 1-x, y = 1-(1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x), z = (1 - 2*x + x*x)/(2 - 5*x + 4*x*x) +// curve 7 : x = [0.36299,1./2], y = 1-x, z = -x/(-1 + x) +// curve 8 : x = [1./2,1-0.36299], y = 1-x,(1 - x)/x +// curve 9 : x = [0.36299,1-0.36299], y = 1-x, z = (1 - 3*x + 3*x*x)/(1 - 2*x + 2*x*x) +// problem with close polylines, there is an over refinement template -std::vector> poly01122340(const int /*prec*/ = 10) +std::vector> poly01122340(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,0.36299,P(0.,1./2,1./2),P(0.36299,0.637,0.569841), + [](double x) { return P(x,(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)),(1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x))); }, + prec), + create_polyline(0.36299,1./2,P(0.36299,0.637,0.569841),P(1./2,1.,1./2), + [](double x) { return P(x,(1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x),(1 - 2*x + x*x)/(2 - 5*x + 4*x*x)); }, + prec), + create_polyline(0.,0.36299,P(1.,1./2,1./2),P(1-0.36299,1-0.637,0.569841), + [](double x) { return P(1-x,1-(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)),(1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x))); }, + prec), + create_polyline(0.36299,1./2,P(1-0.36299,1-0.637,0.569841),P(1./2,0.,1./2), + [](double x) { return P(1-x,1-(1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x),(1 - 2*x + x*x)/(2 - 5*x + 4*x*x)); }, + prec), + create_polyline(0.36299,1./2,P(0.36299,0.637,0.569841),P(1./2,1./2,1.), + [](double x) { return P(x,1-x,-x/(-1 + x)); }, + prec), + create_polyline(1./2,1-0.36299,P(1./2,1./2,1.),P(1-0.36299,1-0.637,0.569841), + [](double x) { return P(x,1-x,(1 - x)/x); }, + prec), + create_polyline(0.36299,1./2,P(0.36299,0.637,0.569841),P(1./2,1./2,1./2), + [](double x) { return P(x,1-x,(1 - 3*x + 3*x*x)/(1 - 2*x + 2*x*x)); }, + prec), + create_polyline(1./2,1-0.36299,P(1./2,1./2,1./2),P(1-0.36299,1-0.637,0.569841), + [](double x) { return P(x,1-x,(1 - 3*x + 3*x*x)/(1 - 2*x + 2*x*x)); }, + prec), }; } //01123024 -// -// +// curve 1 : x = [0,1], y = z = 1./2 +// curve 2 : x = [1/2,1], y = (-1 + 3*x - x*x)/(-1 + 3*x), z = x/(-1 + 3*x) +// curve 3 : x = [0,1], y = (-1 + 2*x - x*x)/(-2 + 3*x), z = (-1 + x)/(-2 + 3*x) template -std::vector> poly01123024(const int /*prec*/ = 10) +std::vector> poly01123024(const int prec = 10) { return { - - + create_polyline(0.,1.,P(0.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 3*x - x*x)/(-1 + 3*x),x/(-1 + 3*x)); }, + prec), + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1.), + [](double x) { return P(x,(-1 + 2*x - x*x)/(-2 + 3*x),(-1 + x)/(-2 + 3*x)); }, + prec), }; } //01233214 -// -// +// curve 1 : x = [0,1], y = z = 1/2 +// curve 2 : x = 1/2, y = [0,1], z = 1/2 +// curve 3 : x = y = 1/2, z = [0,1] +// curve 4 : x = [(2.23606-1)/2,1], y = z = 1/(1 + x) +// curve 5 : x = [1./2,(2.23606-1)/2], y = (1 - x)/x, z = x +// curve 6 : x = [0.,(3-2.23606)/2], y = z = (-1 + x)/(-2 + x) +// curve 7 : x = [(3-2.23606)/2,1./2], y = (-1 + 2*x)/(-1 + x), z = x +// curve 8 : x = y = z = [(3-2.23606)/2,(2.23606-1)/2] +// curve 9 : x = y = [(3-2.23606)/2,1./2], z = (-1 + 2*x)/(-1 + x) +// curve 10 : x = y = [1./2,(2.23606-1)/2], z = (1-x)/x template -std::vector> poly01233214(const int /*prec*/ = 10) +std::vector> poly01233214(const int prec = 10) { return { - - + create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2.,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,1./2,P(1./2,1./2,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline((2.23606-1)/2,1.,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(1.,1./2,1./2), + [](double x) { return P(x,1/(1 + x),1/(1 + x)); }, + prec), + create_polyline(1./2,(2.23606-1)/2,P(1./2.,1.,1./2),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), + [](double x) { return P(x,(1 - x)/x,x); }, + prec), + create_polyline(0.,(3-2.23606)/2,P(0.,1./2,1./2),P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2), + [](double x) { return P(x,(-1 + x)/(-2 + x),(-1 + x)/(-2 + x)); }, + prec), + create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2),P(1./2.,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + x),x); }, + prec), + create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2),P(1./2,1./2,1./2), + [](double x) { return P(x,x,x); }, + prec), + create_polyline (1./2,(2.23606-1)/2,P(1./2.,1./2,1./2),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), + [](double x) { return P(x,x,x); }, + prec), + create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2),P(1./2,1./2,0.), + [](double x) { return P(x,x,(-1 + 2*x)/(-1 + x)); }, + prec), + create_polyline (1./2,(2.23606-1)/2,P(1./2.,1./2,1.),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), + [](double x) { return P(x,x,(1 - x)/x); }, + prec), }; } //00012345 -// -// +// curve 1 : x = [0,1/2], y = 1/2x, z = 1/2 +// curve 2 : x = y = 1/2, z = [3/4,1] +// curve 3 : x = [1/2,1], y = 1/2, z = 1 -x/2 +// curve 4 : x = 1/2, y = [1/2,1], z = 1 -y/2 +// curve 5 : x = 1/2, y = [0,1/2], z = (-2 + y)/(-3 + 2*y) +// curve 6 : x = [0,1/2], y =1/2, z = (-2 + x)/(-3 + 2*x) template -std::vector> poly00012345(const int /*prec*/ = 10) +std::vector> poly00012345(const int prec = 10) { return { - - + create_polyline(3./4,1., P(1./2,1./2,3./4),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./(2*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,3./4),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1.-x/2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,3./4),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1.-y/2); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,3./4), + [](double y) { return P(1./2,y,(-2 + y)/(-3 + 2*y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1./2,3./4), + [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, + prec), }; } //00112345 -// -// +// curve 1 : x = 1/2, y = [0,1], z = 2/3 +// curve 2 : x = y = 1/2, z = [2/3,1] +// curve 2 : x = [0,1/2],y = 1/2, z = 1/(2-x) +// curve 3 : x' = [0,1/2], x = 1-x', y = 1/2, z = 1/(2-x') template -std::vector> poly00112345(const int /*prec*/ = 10) +std::vector> poly00112345(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(1-x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,2./3),P(1./2,1.,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(2./3,1., P(1./2,1./2,2./3),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //00121345 -// -// +// curve 1 : x = 1/2, y = [1/2,1], z = y/(-1 + 3*y) +// curve 2 : x = [1/2,(2.23606-1.)/2], y = 1./2, z = (1 - x)/x +// curve 3 : x = [1/2,(2.23606-1.)/2], y = (1 - 2*x)/(1 - 3*x + x*x), z = 1./(x+1) +// curve 4 : x = [(2.23606-1.)/2,1], y = 1./2, z = 1./(x+1) +// curve 5 : x = [(2.23606-1.)/2,1], y = 1./(x+1), z = 1./2 +// curve 6 : x = [1./2,(2.23606-1.)/2], y = 1./(x+1), z = (1 - 2*x)/(1 - 3*x + x*x +// curve 7 : x = [1./2,(2.23606-1.)/2], y = (1 - x)/x, z = 1./2 +// curve 8 : x = [(9-4.12310)/8,(2.23606-1.)/2[, y = -sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)), z = -(-x + (-sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1) +// curve 8 : x = [(9-4.12310)/8,(2.23606-1.)/2[, y = sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)), z = -(-x + (sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1) template -std::vector> poly00121345(const int /*prec*/ = 10) +std::vector> poly00121345(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y) ); }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,1./2,1.),P((2.23606-1.)/2,1./2,(2.23606-1.)/2), + [](double x) { return P(x,1./2,(1 - x)/x) ; }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,0.,2./3),P((2.23606-1)/2,1./2,(2.23606-1)/2), + [](double x) { return P(x,(1 - 2*x)/(1 - 3*x + x*x),1./(x+1)) ; }, + prec), + create_polyline((2.23606-1.)/2,1.,P((2.23606-1.)/2,1./2,(2.23606-1.)/2), P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(x+1)) ; }, + prec), + create_polyline((2.23606-1.)/2,1.,P((2.23606-1.)/2,(2.23606-1.)/2,1./2), P(1.,1./2,1./2), + [](double x) { return P(x,1./(x+1),1./2) ; }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,2./3,0.),P((2.23606-1)/2,(2.23606-1)/2,1./2), + [](double x) { return P(x,1./(x+1),(1 - 2*x)/(1 - 3*x + x*x)) ; }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,1.,1./2),P((2.23606-1.)/2,(2.23606-1)/2,1./2), + [](double x) { return P(x,(1 - x)/x,1./2) ; }, + prec), + create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,(2.23606-1)/2,1./2), + [](double x) { return P(x,-sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)),-(-x + (-sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1)) ; }, + prec), + create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,1./2,(2.23606-1)/2), + [](double x) { return P(x,sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)),-(-x + (sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1)) ; }, + prec), }; } //00122345 -// -// +// curve 1 : x = [0,1/2], y = 1./(2-x), z = (1 - 2*x)/(2 - 4*x + x*x) +// curve 2 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 2*x + x*x), z = 1./(1+x) +// curve 3 : x = [1/2,1], y = 1./2, z = x/(-1 + 3*x) +// curve 4 : x = 1/2, y = [1/2,1], z = y/(-1 + 3*y) +// curve 5 : x = [0,1/2], y = (-1 + x)/(-2 + 3*x), z = 1./2 +// problem with close polylines, there is an over refinement template -std::vector> poly00122345(const int /*prec*/ = 10) +std::vector> poly00122345(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,2./3,0.), + [](double x) { return P(x,1./(2-x),(1 - 2*x)/(2 - 4*x + x*x)); }, + prec), + create_polyline(1./2,1., P(1./2,0.,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-1 + 2*x + x*x),1./(1+x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(x,(-1 + x)/(-2 + 3*x),1./2); }, + prec), }; } //00123405 -// -// +// curve 1 : x = 1/2, y = [2/3,1], z = (-2 + 3*y)/(2*(-1 + 2*y)) +// curve 2 : x = [1/2,1], y = 1./(2*x), z = 1./2 +// curve 3 : x = [1/2,1], y = 1./2, z = 1./(2*x) +// curve 4 : x = 1/2, y = [0,1/2], z = (2*(-1 + y))/(-3 + 4*y) template -std::vector> poly00123405(const int /*prec*/ = 10) +std::vector> poly00123405(const int prec = 10) { return { - - + create_polyline(2./3.,1., P(1./2,2./3,0.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,(-2 + 3*y)/(2*(-1 + 2*y))); }, + prec), + create_polyline(1./2.,1., P(1./2,1.,1./2.),P(1.,1./2,1./2), + [](double x) { return P(x,1./(2*x),1./2); }, + prec), + create_polyline(1./2.,1., P(1./2,1./2.,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,(2*(-1 + y))/(-3 + 4*y)); }, + prec), }; } //00123415 -// -// +// curve 1 : x = 1/2, y = [0,2/5], z = 2/3 +// curve 2 : x = [0,1/2], y = 1./(3-x), z = 1./(2-x) +// curve 3 : x = [1./2,(2.23606-1)/2], y = -x/(-1 - x + x*x), z = 1./(x+1) +// curve 4 : x = [(2.23606-1)/2.,1], y = 1./2, z = 1./(x+1) +// curve 5 : x = [(2.23606-1)/2.,2./3], y = (1 - 2*x)/(1. - 3*x + x*x), z = (1. - x)/x +// curve 6 : x = [2/3,1], y = 1./(x+1), z = 1./2 +// curve 7 : x = [1/2,2/3], y = 1./(x+1), z = (2*x-1.)/x +// curve 8 : x = 2/3, y = [3/5,1], z = 1/2 +// curve 9 : x = [1/2,(2.23606-1)/2], y = 1/2, z = (1. - x)/x +// curve 10 : x = 1/2, y = [2/5,1/2], z = y/(1.-y) template -std::vector> poly00123415(const int /*prec*/ = 10) +std::vector> poly00123415(const int prec = 10) { return { - - + create_polyline(0.,2./5, P(1./2,0.,2./3),P(1./2,2./5,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(0.,1./2, P(0.,1./3,1./2),P(1./2,2./5,2./3), + [](double x) { return P(x,1./(3-x),1./(2-x)); }, + prec), + create_polyline(1./2,(2.23606-1)/2., P(1./2,2./5,2./3),P((2.23606-1)/2.,1./2,(2.23606-1)/2.), + [](double x) { return P(x,-x/(-1 - x + x*x),1./(x+1)); }, + prec), + create_polyline((2.23606-1)/2.,1., P((2.23606-1)/2.,1./2,(2.23606-1)/2.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(x+1)); }, + prec), + create_polyline((2.23606-1)/2.,2./3, P((2.23606-1)/2.,1./2,(2.23606-1)/2.),P(2./3,3./5,1./2), + [](double x) { return P(x,(1 - 2*x)/(1. - 3*x + x*x),(1. - x)/x); }, + prec), + create_polyline(2./3,1., P(2./3,3./5,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./(x+1),1./2); }, + prec), + create_polyline(1./2,2./3,P(1./2,2./3,0.), P(2./3,3./5,1./2), + [](double x) { return P(x,1./(x+1),(2*x-1.)/x); }, + prec), + create_polyline(3./5,1., P(2./3,3./5,1./2),P(2./3,1.,1./2), + [](double y) { return P(2./3,y,1./2); }, + prec), + create_polyline(1./2.,(2.23606-1)/2., P(1./2,1./2,1.), P((2.23606-1)/2.,1./2,(2.23606-1)/2.), + [](double x) { return P(x,1./2,(1. - x)/x); }, + prec), + create_polyline(2./5,1./2, P(1./2,2./5,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,y/(1.-y)); }, + prec), }; } //00123425 -// -// +// curve 1 : x = 1/2, y = [0,2/5], z = 2/3 +// curve 2 : x = [1/2,1], y = x/(1.+x*x), z = 1./(x+1) +// curve 3 : x = [0,1/2], y = 1/(2 + x), z = 1/(2 - x) +// curve 4 : x = [0,1/2], y = 1/(2 - x), z = (-1 + 2*x)/(-2 + 3*x) +// curve 5 : x = [1/2,1], y = 1/2, z = x/(-1 + 3*x) +// curve 6 : x = 1/2, y = [2/5,1/2], z = y/(1.-y) +// problem with close polylines, there is an over refinement + template -std::vector> poly00123425(const int /*prec*/ = 10) +std::vector> poly00123425(const int prec = 10) { return { - - + create_polyline(0.,2./5, P(1./2,0.,2./3),P(1./2,2./5,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(1./2,1., P(1./2,2./5,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,x/(1.+x*x),1./(x+1)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,2./5,2./3), + [](double x) { return P(x,1/(2 + x),1/(2 - x)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,2./3,0.), + [](double x) { return P(x,1/(2 - x),(-1 + 2*x)/(-2 + 3*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(2./5,1./2, P(1./2,2./5,2./3),P(1./2,1./2,1.), + [](double y) { return P(1./2,y,y/(1.-y)); }, + prec), }; } //00123455 -// -// +// curve 1 : x = 1./2, y = [2/3,1], z = 1./3 +// curve 2 : x = 1./2, y = [0,1/3], z = 2./3 +// curve 3 : x = 1./2, y = 1./3, z = [2/3,1] +// curve 4 : x = 1./2, y = 2./3, z = [0,1/3] +// curve 5 : x = [1/2,1], y = 1./(1+x), z = x/(1.+x) +// curve 6 : x = 1-x',1./(1+x'),x'/(1.+x'), x' = [1/2,1] +// curve 7 : x = 1-x', 1 - 1./(1+x'),1 - x'/(1.+x'), x' = [1/2,1] +// curve 8 : x = [1/2,1], y = 1 - 1./(1+x), z = 1 - x/(1.+x) template -std::vector> poly00123455(const int /*prec*/ = 10) +std::vector> poly00123455(const int prec = 10) { return { - - + create_polyline(2./3.,1., P(1./2,2./3,1./3),P(1./2,1.,1./3), + [](double y) { return P(1./2,y,1./3); }, + prec), + create_polyline(0.,1./3., P(1./2,0.,2./3),P(1./2,1./3,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(2./3.,1., P(1./2,1./3,2./3),P(1./2,1./3,1.), + [](double z) { return P(1./2,1./3,z); }, + prec), + create_polyline(0.,1./3., P(1./2,2./3,0.),P(1./2,2./3,1./3), + [](double z) { return P(1./2,2./3,z); }, + prec), + create_polyline(1/2.,1., P(1./2,2./3,1./3),P(1.,1./2,1./2), + [](double x) { return P(x,1./(1+x),x/(1.+x)); }, + prec), + create_polyline(1/2.,1., P(1./2,2./3,1./3),P(0.,1./2,1./2), + [](double x) { return P(1-x,1./(1+x),x/(1.+x)); }, + prec), + create_polyline(1/2.,1., P(1./2,1./3,2./3),P(0.,1./2,1./2), + [](double x) { return P(1-x,1-1./(1+x),1- x/(1.+x)); }, + prec), + create_polyline(1/2.,1., P(1./2,1./3,2./3),P(1.,1./2,1./2), + [](double x) { return P(x,1- 1./(1+x),1- x/(1.+x)); }, + prec), }; } //01102345 -// -// +// curve 1 : x = y = 1/2, z = [0,1] +// curve 2 : x = 1./2, y = [0,1/2], z = 1./(2-y) +// curve 3 : x = [0,1/2], y = 1/2, z = 1./(2-x) +// curve 4 : x = 1./2, y = 1-y', z = 1./(2-y'), y' = [0,1/2] +// curve 5 : x = 1-x', y = 1/2, z = 1./(2-x'), x' = [0,1/2] template -std::vector> poly01102345(const int /*prec*/ = 10) +std::vector> poly01102345(const int prec = 10) { return { - - + create_polyline(0.,2./3., P(1./2,1./2,0.),P(1./2,1./2,2./3), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(2./3.,1., P(1./2,1./2,2./3.),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,2./3), + [](double y) { return P(1./2,y,1./(2-y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(1./2,1.,1./2),P(1./2,1./2,2./3), + [](double y) { return P(1./2,1-y,1./(2-y)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(1-x,1./2,1./(2-x)); }, + prec), }; } //01121345 -// -// +// curve 1 : x = [1/2,1], y = 1/2x, z = 1/2 +// curve 2 : x = [1/2,1], y = 1/2, z = 1/2x +// curve 3 : x = 1/2, y = [1/2,1], z = 1/2y template -std::vector> poly01121345(const int /*prec*/ = 10) +std::vector> poly01121345(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./(2*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./(2*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./(2*y)); }, + prec), }; } //01122345 -// -// +// curve 1 : x = [1/2,1], y = (x*(-1 + 2*x))/(1 - 4*x + 5*x*x), z = x*x/(1 - 3*x + 4*x*x) +// curve 2 : x = (x'*(-1 + 2*x'))/(1 - 4*x' + 5*x'*x'),y = x',z = x'*x'/(1 - 3*x' + 4*x'*x'), x'= [1/2,1] +// curve 3 : x = 1./2,y = [1/2,1], z = y/(-1 + 3*y) +// curve 4 : x = [1/2,1], y = 1./2, z = x/(-1 + 3*x) +// curve 5 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = (1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x) +// problem with close polylines, there is an over refinement template -std::vector> poly01122345(const int /*prec*/ = 10) +std::vector> poly01122345(const int prec = 10) { return { - - + create_polyline(1./2,1., P(1./2,0.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,(x*(-1 + 2*x))/(1 - 4*x + 5*x*x),x*x/(1 - 3*x + 4*x*x)); }, + prec), + create_polyline(1./2,1.,P(0.,1./2,1./2), P(1./2,1.,1./2), + [](double x) { return P((x*(-1 + 2*x))/(1 - 4*x + 5*x*x),x,x*x/(1 - 3*x + 4*x*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, + prec), }; } //01123045 -// -// +// curve 1 : x = [0,1/2], y = 1/2, z = (-1 + x)/(-2 + 3*x) +// curve 2 : x = 1/2, y = [1/2,(2.23606-1.)/2], z = (1 - y)/y +// curve 3 : x = (2*z*z - 3*z + 1)/(5*z*z - 5*z + 1), y = (-z*z + 2*z - 1)/(2*z*z - 1), z = [1/2,(2.23606-1.)/2] +// curve 4 : x = [(2.23606-1.)/2,1], y = (-2 + 5*x - sqrt(4 - 8*x + 5*x*x))/(2*(-3 + 5*x)), z = (-2 + 4*x - x*x + x*sqrt(4 - 8*x + 5*x*x))/(2*(-1 + 2*x + x*x)) +// curve 5 : x =[1/2,1], y = x/(-1 + 3*x), z = 1./2 +// curve 6 : x = 1/2, y = [(2.23606-1.)/2,1], z = 1./(y+1) +// problem with close polylines, there is an over refinement template -std::vector> poly01123045(const int /*prec*/ = 10) +std::vector> poly01123045(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1.), + [](double x) { return P(x,1./2,(-1 + x)/(-2 + 3*x)); }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,1./2,1.),P(1./2,(2.23606-1.)/2,(2.23606-1.)/2), + [](double y) { return P(1./2,y,(1 - y)/y); }, + prec), + create_polyline(1./2,(2.23606-1.)/2, P(0.,1./2,1./2),P(1./2,(2.23606-1.)/2,(2.23606-1.)/2), + [](double z) { return P((2*z*z - 3*z + 1)/(5*z*z - 5*z + 1),(-z*z + 2*z - 1)/(2*z*z - 1),z); }, + prec), + create_polyline((2.23606-1.)/2,1.,P(1./2,(2.23606-1.)/2,(2.23606-1.)/2), P(1.,1./2,1./2), + [](double x) { return P(x,(-2 + 5*x - sqrt(4 - 8*x + 5*x*x))/(2*(-3 + 5*x)),(-2 + 4*x - x*x + x*sqrt(4 - 8*x + 5*x*x))/(2*(-1 + 2*x + x*x)) ); }, + prec), + create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,x/(-1 + 3*x),1./2); }, + prec), + create_polyline((2.23606-1.)/2,1., P(1./2,(2.23606-1.)/2,(2.23606-1.)/2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./(y+1)); }, + prec), }; } //01123445 -// -// +// curve 1 : x= [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = 1./2 +// curve 2 : x = 1- x', y = 1- (-1 + 2*x')/(-2 + 3*x'), z = 1./2, x' = [0,1/2] template -std::vector> poly01123445(const int /*prec*/ = 10) +std::vector> poly01123445(const int prec = 10) { return { - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),1./2); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(1-x,1-(-1 + 2*x)/(-2 + 3*x),1./2); }, + prec), }; } //01123453 -// -// +// curve 1 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = (-1 + 2*x - x*x)/(-2 + 3*x) +// curve 2 : x = 1-x', y = 1-(-1 + 2*x')/(-2 + 3*x'), z = (-1 + 2*x' - x'*x')/(-2 + 3*x'), x'= [0,1/2] +// curve 3 : x = 1-x', y = (-1 + 2*x')/(-2 + 3*x'), z = 1-(-1 + 2*x' - x'*x')/(-2 + 3*x'), x'= [0,1/2] +// curve 4 : x = x', y = 1-(-1 + 2*x')/(-2 + 3*x'), z = 1-(-1 + 2*x' - x'*x')/(-2 + 3*x'), x'= [0,1/2] template -std::vector> poly01123453(const int /*prec*/ = 10) +std::vector> poly01123453(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(-1 + 2*x - x*x)/(-2 + 3*x)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(1-x,1-(-1 + 2*x)/(-2 + 3*x),(-1 + 2*x - x*x)/(-2 + 3*x)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(1-x,(-1 + 2*x)/(-2 + 3*x),1-(-1 + 2*x - x*x)/(-2 + 3*x)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(x,1-(-1 + 2*x)/(-2 + 3*x),1-(-1 + 2*x - x*x)/(-2 + 3*x)); }, + prec), }; } //01233245 -// -// +// curve 1 : x = 1./2, y = (2*z - 1)/(3*z - 2), z = [0,1/2] +// curve 2 : x = 1./2, y = 1-(2*z' - 1)/(3*z' - 2), z = 1-z', z' = [0,1/2] +// curve 3 : x = (z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)), y = z, z = [1/3,1/2] +// curve 4 : x = 1-(z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = z', z = z' = [1/3,1/2] +// curve 5 : x = 1-(z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = 1-z', z = 1-z', z' = [1/3,1/2] +// curve 6 : x = (z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = 1-z', z = 1-z', z' = [1/3,1/2] +// curve 7 : x = 1./2, y = z = [1/3,2/3] template -std::vector> poly01233245(const int /*prec*/ = 10) +std::vector> poly01233245(const int prec = 10) { return { - - + create_polyline(0.,1./3, P(1./2,1./2,0.),P(1./2,1./3,1./3), + [](double z) { return P(1./2, (2*z - 1)/(3*z - 2),z); }, + prec), + create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(1./2,0.,1./2), + [](double z) { return P(1./2, (2*z - 1)/(3*z - 2),z); }, + prec), + create_polyline(1/3.,1./2, P(1./2,2/3.,2./3),P(1./2,1.,1./2), + [](double z) { return P(1./2, 1-(2*z - 1)/(3*z - 2),1-z); }, + prec), + create_polyline(0.,1./3, P(1./2,1./2,1.),P(1./2,2/3.,2./3), + [](double z) { return P(1./2, 1-(2*z - 1)/(3*z - 2),1-z); }, + prec), + create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(0.,1./2,1./2), + [](double z) { return P( (z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),z,z); }, + prec), + create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(1.,1./2,1./2), + [](double z) { return P( 1-(z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),z,z); }, + prec), + create_polyline(1./3,1./2, P(1./2,2./3,2./3),P(1.,1./2,1./2), + [](double z) { return P( 1-(z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),1-z,1-z); }, + prec), + create_polyline(1./3,1./2, P(1./2,2./3,2./3),P(0.,1./2,1./2), + [](double z) { return P( (z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),1-z,1-z); }, + prec), + create_polyline(1./3,2./3, P(1./2,1./3,1./3),P(1./2,2./3,2./3), + [](double z) { return P(1./2,z,z); }, + prec), }; } //00123456 -// -// +// curve 1 : x = [0,1/2], y = 1./2, z = 1./(2-x) +// curve 2 : x' = [0,1/2], x = 1-x y = 1./2, z = 1./(2-x') +// curve 3 : x = [0,1/2], y = 1./(2-x), z = 1./2 +// curve 4 : x' = [0,1/2], x = 1-x, y = 1./(2-x), z = 1./2 +// curve 5 : x = 1./2, y = 2./3, z = [0,1/2] +// curve 6 : x = 1./2, y = [0,1/2], z = 2./3 +// curve 7 : x = 1./2, y = [2/3,1], z = 1./2 +// curve 8 : x = 1./2, y = 1./2, z = [2/3,1] +// curve 9 : x = 1./2, y = [1/2,2/3], z = (2*(-1 + y))/(-2 + y) template -std::vector> poly00123456(const int /*prec*/ = 10) +std::vector> poly00123456(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(1-x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,2./3,1./2), + [](double x) { return P(x,1./(2-x),1./2); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,2./3,1./2), + [](double x) { return P(1-x,1./(2-x),1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,2./3,0.),P(1./2,2./3,1./2), + [](double z) { return P(1./2,2./3,z); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,2./3),P(1./2,1./2,2./3), + [](double y) { return P(1./2,y,2./3); }, + prec), + create_polyline(2./3,1., P(1./2,2/3.,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(2./3,1., P(1./2,1./2,2/3.),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,2./3, P(1./2,1./2,2/3.),P(1./2,2./3,1./2), + [](double y) { return P(1./2,y,(2*(-1 + y))/(-2 + y)); }, + prec), }; } //01123456 -// -// +// curve 1 : x = [0,1/2], y = 1./2, z = 1./(2-x) +// curve 2 : x = 1-x', y = 1./2, z = 1./(2-x'), x' = [0,1/2] +// curve 3 : x = 1./2, y = [1/2,1], z = 1./(1+y) +// curve 4 : x = 1./2, y = 1-y', z = 1./(1+y'), y' = [1/2,1] +// curve 5 : x = [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = 1./2 +// curve 6 : x = 1-x', y = 1-(-1 + 2*x')/(-2 + 3*x'), z = 1./2 +// curve 7 : x = 1./2, y = 1./2, z = [2/3,1] template -std::vector> poly01123456(const int /*prec*/ = 10) +std::vector> poly01123456(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(x,1./2,1./(2-x)); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1./2,2./3), + [](double x) { return P(1-x,1./2,1./(2-x)); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,2./3),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./(1+y)); }, + prec), + create_polyline(1./2,1.,P(1./2,1./2,2./3),P(1./2,0.,1./2), + [](double y) { return P(1./2,1-y,1./(1+y)); }, + prec), + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),1./2); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(1-x,1-(-1 + 2*x)/(-2 + 3*x),1./2); }, + prec), + create_polyline(2./3,1., P(1./2,1./2,2./3),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } //01233456 -// -// +// curve 1 : x = [0,1/2], y = (-1 + x)/(-2 + 3*x), z = 1./2 +// curve 2 : x = 1-x', y = 1-(-1 + x')/(-2 + 3*x'), z = 1./2, x' = [0,1/2] +// curve 3 : x = [1/2,1], y = 1./2, z = x/(-1 + 3*x) +// curve 4 : x = 1-x',1./2,1-(x'/(-1 + 3*x')), x'= [1/2,1] +// curve 5 : x = 1./2, y = [1/2,1], z = y/(3*y-1) +// curve 6 : x = 1./2, y = 1-y', z = 1 -(y'/(3*y'-1)), y'= [1/2,1] template -std::vector> poly01233456(const int /*prec*/ = 10) +std::vector> poly01233456(const int prec = 10) { return { - - + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1.,1./2), + [](double x) { return P(x,(-1 + x)/(-2 + 3*x),1./2); }, + prec), + create_polyline(0.,1./2, P(1.,1./2,1./2),P(1./2,0.,1./2), + [](double x) { return P(1-x,1-(-1 + x)/(-2 + 3*x),1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1.,1./2.,1./2), + [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,0.),P(0.,1./2.,1./2), + [](double x) { return P(1-x,1./2,1-(x/(-1 + 3*x))); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,y/(3*y-1)); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,0.),P(1./2,0.,1./2), + [](double y) { return P(1./2,1-y,1 -(y/(3*y-1))); }, + prec), }; } //01234567 -// -// +// curve 1 : x =[0,1], y = z = 1/2 +// curve 2 : y =[0,1], x = z = 1/2 +// curve 3 : z =[0,1], y = x = 1/2 template -std::vector> poly01234567(const int /*prec*/ = 10) +std::vector> poly01234567(const int prec = 10) { return { + create_polyline(0.,1./2, P(0.,1./2,1./2),P(1./2,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1.,1./2,1./2), + [](double x) { return P(x,1./2,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,0.,1./2),P(1./2,1./2,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1.,1./2), + [](double y) { return P(1./2,y,1./2); }, + prec), + create_polyline(0.,1./2, P(1./2,1./2,0.),P(1./2,1./2,1./2), + [](double z) { return P(1./2,1./2,z); }, + prec), + create_polyline(1./2,1., P(1./2,1./2,1./2),P(1./2,1./2,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; @@ -2425,10 +3992,8 @@ public: // 8 colors { 01234567_c, CGAL::Mesh_3::poly01234567 } }; - -};//class Triple_line_extractor -}//namespace Mesh_3 -}//namespace CGAL - +};// end triple_lines_extractor +}// end namespace Mesh 3 +}// end namespace CGAL #endif // CGAL_MESH_3_FEATURES_DETECTION_H From 96ead54e16dadeaa3ff438655295d03bbb14bb1c Mon Sep 17 00:00:00 2001 From: Christopher Nicol Date: Fri, 1 Jul 2022 09:26:23 +0200 Subject: [PATCH 049/144] trailing spaces deleted, unused variable removed. --- .../CGAL/Mesh_3/features_detection/features_detection.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index c95aa4c64ae..9b872de4e65 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -1848,7 +1848,7 @@ return { //01121223 // no curves template -std::vector> poly01121223(const int prec = 10) +std::vector> poly01121223(const int /*prec*/ = 10) { return { @@ -2953,10 +2953,10 @@ return { } //01121341 -// no curve +// no curves // template -std::vector> poly01121341(const int prec = 10) +std::vector> poly01121341(const int /*prec*/ = 10) { return { @@ -3996,4 +3996,4 @@ public: }// end namespace Mesh 3 }// end namespace CGAL -#endif // CGAL_MESH_3_FEATURES_DETECTION_H +#endif // CGAL_MESH_3_FEATURES_DETECTION_H \ No newline at end of file From 93590720b7231c5488d038e7ee7b03e15c576af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 1 Jul 2022 09:58:42 +0200 Subject: [PATCH 050/144] remove trailing whitespaces --- .../features_detection/features_detection.h | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index 9b872de4e65..e15c5947c44 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -662,7 +662,7 @@ double limit_value(double bound, double direction, double epsilon=1e-6) return bound + direction * epsilon; } -// 00000123 +// 00000123 // curve 1 : x =1/2, y = -(z-2.)/(2.*z), z = [2/3, 1] // curve 2 : x = -(z/2.-1)/z, y = 1./2., z =[2/3, 1] template @@ -705,7 +705,7 @@ return { // curve 1 : x = -(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, y = -sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z = [2/3, 9/13] // curve 2 : x = -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z)) - 5*z + 3)/z, y = sqrt((z - 1)*(13*z - 9))/(2*z) + (5*z - 3)/(2*z), z = [2/3, 9/13] // curve 3 : x = -(z*(-sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, y = -sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z = [2/3, 9/13] -// curve 4 : x = -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, y = sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z = [2/3, 9/13] +// curve 4 : x = -(z*(sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z)) + 3*z - 3)/z, y = sqrt((z - 1)*(13*z - 9))/(2*z) - 3*(z - 1)/(2*z), z = [2/3, 9/13] template std::vector> poly00001223(const int prec = 10) { @@ -772,7 +772,7 @@ return { //00011023 -// curve 1 : x = -(-2*z**2 + z + (z**2 - 3*z)*(-(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3))) + 1)/(2*z**2), y = -(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3)), z = [2/3,1] +// curve 1 : x = -(-2*z**2 + z + (z**2 - 3*z)*(-(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3))) + 1)/(2*z**2), y = -(z**2 + z + 1)/(2*z*(z - 3)) + sqrt(z**4 + 6*z**3 - 9*z**2 + 2*z + 1)/(2*z*(z - 3)), z = [2/3,1] // curve 2 : x = 1/2, y = -(z - 2)/(z + 1), z = [1/2,1] // curve 3 : x = [1/2,1[, y = (sqrt(8*x*x*x - 3*x*x - 2*x + 1) + x + 1)/(2*x*(2*x + 1)), z = (sqrt(8*x*x*x - 3*x*x - 2*x + 1) - x - 1)/(2*(2*x*x - x - 1))) template @@ -810,9 +810,9 @@ return { }; } -//00011223 -// curve 1 : x = [1/2,3/5[U ]3/5,1], y = (-2 + 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) -// curve 2 : x = ]0,1/2], y = (-2 + 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) +//00011223 +// curve 1 : x = [1/2,3/5[U ]3/5,1], y = (-2 + 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x - sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) +// curve 2 : x = ]0,1/2], y = (-2 + 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*x*(-3 + 5*x)), z = (2 - 2*x + 3*x*x + sqrt(4 - 20*x + 36*x*x - 28*x*x*x + 9*x*x*x*x))/(2*(3 - 5*x + 4*x*x)) // curve 3 : x = -(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1), y = 3*z/(2*(4*z - 1)) + sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [1/2,4/7] // curve 4 : x = -(-3*z + (4*z - 1)*(3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1))))/(4*z - 1), y = 3*z/(2*(4*z - 1)) - sqrt(-z*(7*z - 4))/(2*(4*z - 1)), z = [1/2,4/7] // problem with close polylines, there is an over refinement @@ -849,7 +849,7 @@ return { prec), create_polyline(limit_value(0.,1.), 1./2, P(0., 1./2,2./3), P(1./2,1./2,1.), [](double x) { return P(x,(-2 + x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)),(2 - x + x*x + sqrt(4 - 16*x + 25*x*x - 14*x*x*x + x*x*x*x))/(2*(3 - 5*x + 3*x*x))); }, - prec), + prec), }; } @@ -863,10 +863,10 @@ std::vector> poly00011231(const int prec = 10) return { create_polyline(1./2, 1., P(1./2, 0.,2./3), P(1.,1./3,1./2), [](double x) { return P(x,(-1 + 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*x*(-1 + 4*x)),(1 - 2*x + 3*x*x - sqrt(1 - 8*x + 22*x*x - 20*x*x*x + 9*x*x*x*x))/(2*(1 - 3*x + 2*x*x)) ); }, - prec), + prec), create_polyline(0., 1./3, P(0.,1./2,2./3), P(1./3,1.,1./2), [](double x) { return P(x,(-2 + 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*x*(-3 + 4*x)) ,(2 - 2*x + x*x + sqrt(4 - 20*x + 28*x*x - 12*x*x*x + x*x*x*x))/(2*(3 - 5*x + 2*x*x)) ); }, - prec), + prec), }; } @@ -885,7 +885,7 @@ return { prec), create_polyline(0.366025,1./2, P(0.366025,0.57735,(1+1.73205)/4), P(1./2,0.,2./3), [](double x) { return P(x,(-1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(-1 + x)*x),(1 + 3*x*x + sqrt(1 - 4*x + 6*x*x - 8*x*x*x + 9*x*x*x*x))/(2*(1 + 2*x*x)) ); }, - prec), + prec), create_polyline(2./3,(1+1.73205)/4.,P(0.,1./2,2./3),P(0.366025,0.57735,(1+1.73205)/4), [](double z) { return P( -(-3.*z*z + z + (3*z*z - 3*z)*((2*z + 1)/(6*z) - sqrt(-8*z*z + 4*z + 1)/(6*z)) + 1)/(z*(2*z - 1)),(2*z + 1)/(6*z) - sqrt(-8.*z*z + 4*z + 1)/(6*z),z); }, prec), @@ -906,13 +906,13 @@ std::vector> poly00012003(const int prec = 10) return { create_polyline(2./3, 1., P(2./3, 1.,1./2), P(1.,2./3,1./2), [](double x) { return P(x,(1 + x)/(-1 + 4*x) ,1./2); }, - prec), + prec), }; } //00012013 -// curve 1 : x = -(-5*z*z + 6*z + (z*z - 3*z)*((2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3))) - 1)/(z*(5*z - 3)), y = (2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3)), z = [2/3,1] +// curve 1 : x = -(-5*z*z + 6*z + (z*z - 3*z)*((2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3))) - 1)/(z*(5*z - 3)), y = (2*z*z - 6*z + 1)/(2*z*(z - 3)) + sqrt(4*z*z*z*z - 20*z*z*z + 28*z*z - 12*z + 1)/(2*z*(z - 3)), z = [2/3,1] // curve 2 : x = (3*z*z - 4*z + 1 - (z*z + z)*(2*z*z - 4*z + 1)/(z*(z + 1)))/(z*(3*z - 1)), y = -(2*z*z - 4*z + 1)/(z*(z + 1)), z = [1/2,1] template std::vector> poly00012013(const int prec = 10) @@ -923,7 +923,7 @@ return { prec), create_polyline(1./2, 1., P(1., 2./3,1./2), P(1./2,1./2,1.), [](double z) { return P( (3*z*z - 4*z + 1 - (z*z + z)*(2*z*z - 4*z + 1)/(z*(z + 1)))/(z*(3*z - 1)), -(2*z*z - 4*z + 1)/(z*(z + 1)),z ); }, - prec), + prec), }; } @@ -972,7 +972,7 @@ return { create_polyline((3.+ 2.23606)/8, 2./3,P(0.30902,0.30902,(3.+ 2.23606)/8), [](double z) { return P(-(-8*z*z + 7*z + (4*z*z - 3*z)*(-(z - 1.)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)), -(z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)),z); }, prec), - create_polyline((3.+ 2.23606)/8, 2./3,P(0.30902,0.30902,(3.+ 2.23606)/8), + create_polyline((3.+ 2.23606)/8, 2./3,P(0.30902,0.30902,(3.+ 2.23606)/8), [](double z) { return P( -(-8*z*z + 7*z + (4*z*z - 3*z)*((z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3))) - 1)/(z*(4*z - 3)),(z - 1)*sqrt(16*z*z - 12*z + 1)/(2*z*(4*z - 3)) + (8*z*z - 7*z + 1)/(2*z*(4*z - 3)),z); }, prec), @@ -1071,7 +1071,7 @@ return { prec), create_polyline(0.70263,1.,P(0.447683,0.3555809, 0.70263),P(1./2,1./3,1.), [](double z) { return P(-(-2*z + (5*z - 2)*((5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2))) + 1)/(z - 1),(5*z - 1)/(2*(5*z - 2)) - sqrt(5*z*z - 2*z + 1)/(2*(5*z - 2)),z); }, - prec), + prec), }; } @@ -1156,7 +1156,7 @@ return { create_polyline(1./2,2./3, P(1.,1./2.,1./2), [](double z) { return P((3*z - 2)/(z - 1),1./2,z); }, prec), - + }; @@ -1194,8 +1194,8 @@ return { //00012332 //curve 1 : x = -(4 - 6*z)/(2*(z - 1)), y = 1./2, z = [1/2,2/3] //curve 2 : x = -(-7*z + 5 + (2*z - 2)*(3*z - 2)/(z - 1))/(2*(z - 1)), y = (3*z - 2)/(z - 1), z = [1/2,2/3] -//curve 3 : x = -(2*z*((5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] -//curve 4 : x = -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] +//curve 3 : x = -(2*z*((5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] +//curve 4 : x = -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] template std::vector> poly00012332(const int prec = 10) { @@ -1217,7 +1217,7 @@ return { prec), create_polyline(1./2,2.*1.4142/17 + 5./17, P(1./2,1.,1./2), [](double z) { return P( -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z),(5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z),z); }, - prec), + prec), }; } @@ -1274,7 +1274,7 @@ return { create_polyline(0.,2./3, P(0.,1./2,1./2),P(2./3,1./2,3./4), [](double x) { return P(x,1./2,1./(2.-x)); }, prec), - + }; } @@ -1475,7 +1475,7 @@ return { //00121300 -// curve 1 : x = -(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , y = sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3)), z = ]0,1/3] +// curve 1 : x = -(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , y = sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3)), z = ]0,1/3] // curve 2 : x = -(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) , y = 1-( sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))), z' = 1.-z, z = ]0,1/3] template std::vector> poly00121300(const int prec = 10) @@ -1487,14 +1487,14 @@ return { create_polyline(limit_value(0.,1.),1./3, P(1./2,1./3,1.),P(1./2,0.,2./3), [](double z) { return P(-(2*z - 1)*(-2*z + (4*z - 3)*(sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))) + 2)/(z*(z - 1)) ,1-( sqrt((2*z - 1)*(2*z*z*z - 5*z*z + 8*z - 4))/(2*(8*z*z - 10*z + 3)) + (3*z - 2)/(2*(4*z - 3))),1.-z); }, prec), - + }; } //00121301 // curve 1 : x = (-4*z*z + 7*z + (sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)))*(8*z*z - 10*z + 3) - 2)/z, y = sqrt((z - 1)*(z*z*z - 5*z*z + 4*z - 1))/(8*z*z - 10*z + 3) + (z - 1)*(3*z - 1)/((2*z - 1)*(4*z - 3)), z = ]0,1/2[ -// curve 2 : x = ]1/2,1], y = (-2 + 6*x - x*x - sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x), z = (-2 + 2*x + x*x + sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x*(-1 + 2*x)) +// curve 2 : x = ]1/2,1], y = (-2 + 6*x - x*x - sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x), z = (-2 + 2*x + x*x + sqrt(4 - 16*x + 24*x*x - 12*x*x*x + x*x*x*x))/(4*x*(-1 + 2*x)) template std::vector> poly00121301(const int prec = 10) { @@ -1654,20 +1654,20 @@ return { prec), create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,0.,2./3), [](double z) { return P(1./2,(3*z - 2)/(4*z - 3),z); }, - prec), + prec), create_polyline(1./2,1.,P(1./2,1./2,1./2),P(1./2,1.,1./3), [](double y) { return P(1./2,y,y/(4.*y-1)); }, prec), create_polyline(1./3,1./2,P(1./2,1./3,1.),P(1./2,1./2,1./2), [](double y) { return P(1./2,y,y/(4.*y-1)); }, - prec), + prec), }; } //00122300 // curve 1 : x = 1/2, y = [2/3,1], z = (3*y-2)/(5*y-2) -// curve 2 : x = 1/2, y' = 1-y, z = 1-(3*y-2)/(5*y-2), y'= [2/3,1] +// curve 2 : x = 1/2, y' = 1-y, z = 1-(3*y-2)/(5*y-2), y'= [2/3,1] template std::vector> poly00122300(const int prec = 10) { @@ -1684,7 +1684,7 @@ create_polyline(2./3,1.,P(1./2,1./3,1.),P(1./2,0.,2./3), //00122301 // curve 1 : x = -(-5*z*z + 5*z + (sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)))*(6*z*z - 7*z + 3) - 2)/(z*(3*z - 1)), y = sqrt((2*z - 1)*(14*z*z*z - 25*z*z + 16*z - 4))/(2*(6*z*z - 7*z + 3)) + (2*z*z - 3*z + 2)/(2*(6*z*z - 7*z + 3)), z = ]0,1/2] -// curve 2 : x = (-z + (2*z - 1)*(sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1))) + 1)/z, y = sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1)), z = ]1/2,1] +// curve 2 : x = (-z + (2*z - 1)*(sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1))) + 1)/z, y = sqrt(12*z*z*z*z - 28*z*z*z + 24*z*z - 8*z + 1)/(2*(6*z*z - 5*z + 1)) + (6*z*z - 6*z + 1)/(2*(2*z - 1)*(3*z - 1)), z = ]1/2,1] // curve 3 : x = (-z + (2*z - 1)*(-sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1))) + 1)/z, y = -sqrt(12*z*z*z*z - 20*z*z*z + 12*z*z - 4*z + 1)/(2*(2*z*z + z - 1)) + (6*z*z - 2*z - 1)/(2*(z + 1)*(2*z - 1)), z = [2/3,1] template std::vector> poly00122301(const int prec = 10) @@ -1944,7 +1944,7 @@ return { // curve 2 : x = 1/2, y = [1/2,1], z = 1/(2+y) // curve 3 : x = [0,1/2], y = 1/2, z = 2/(3-x) // curve 4 : x = [1/2,1], y = 1/2, z = 1/(2+x) -// curve 5 : x = y = 1/2, z = [4/5,1] +// curve 5 : x = y = 1/2, z = [4/5,1] template std::vector> poly00001234(const int prec = 10) { @@ -1963,7 +1963,7 @@ return { prec), create_polyline(4./5,1., P(1./2,1./2,4./5),P(1./2,1./2,1.), [](double z) { return P(1./2,1./2,z); }, - prec), + prec), }; } @@ -1977,13 +1977,13 @@ std::vector> poly00010234(const int prec = 10) return { create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), [](double x) { return P(x,(2 - x)/(1 + x),1./2); }, - prec), + prec), create_polyline(1./2,1., P(1.,1./2,1./2),P(1./2,1./2,1.), [](double z) { return P((2 - z)/(1 + z),1./2,z); }, prec), create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), [](double y) { return P(1./2,y,(2 - y)/(1 + y)); }, - prec), + prec), }; } @@ -2003,34 +2003,34 @@ std::vector> poly00011234(const int prec = 10) return { create_polyline(limit_value(0,1),1./2, P(0.,1./2,2./3),P(1./2,2./3,2./3), [](double x) { return P(x,(2 + x - sqrt(4 - 8*x + x*x))/(6*x),(2 - x + x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*(3 - 4*x + 2*x*x))); }, - prec), + prec), create_polyline(2./3,1.,P(1./2,2./3,2./3),P(1./2,1.,1./2), [](double y) { return P(1./2,y,1.-y/2); }, - prec), + prec), create_polyline(1./2,2./3,P(1./2,1./2,1.),P(1./2,2./3,2./3), [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, prec), create_polyline(2./3,1.,P(2./3,1./2,2./3),P(1.,1./2,1./2), [](double x) { return P(x,1./2,1.-x/2); }, - prec), + prec), create_polyline(1./2,2./3,P(1./2,1./2,1.),P(2./3,1./2,2./3), [](double x) { return P(x,1./2,x/(-1 + 3*x)); }, - prec), + prec), create_polyline(1./2,2./3,P(1./2,0.,2./3),P(2./3,1./2,2./3), [](double x) { return P(x,(-1 + 2*x)/(x*(-1 + 3*x)),x/(1 - 2*x + 3*x*x)); }, - prec), + prec), create_polyline(1./2,(2.23606-1)/2,P(1./2,1.,1./2),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), [](double x) { return P(x,(1 - x)/x,x); }, prec), create_polyline((2.23606-1)/2,2./3,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(2./3,1./2,2./3), [](double x) { return P(x,(1 - x)/x,x); }, - prec), + prec), create_polyline(1./2,(2.23606-1)/2,P(1./2,2./3,2./3),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), [](double x) { return P(x,1/(1+x),1/(1+x)); }, prec), create_polyline((2.23606-1)/2,1.,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(1.,1./2,1./2), [](double x) { return P(x,1/(1+x),1/(1+x)); }, - prec), + prec), }; } @@ -2044,13 +2044,13 @@ std::vector> poly00012034(const int prec = 10) return { create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,2./3,1./2), [](double x) { return P(x,(1+ x)/(3*x),1./2); }, - prec), + prec), create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), [](double y) { return P(1./2,y,(2 - y)/(1 + y)); }, prec), create_polyline(0.,1./2, P(0.,1./2,2./3),P(1./2,1./2,1.), [](double x) { return P(x,1./2,(x-2)/(3*x-3)); }, - prec), + prec), }; } @@ -2068,13 +2068,13 @@ std::vector> poly00012134(const int prec = 10) return { create_polyline(1-1./1.73205,1./2, P(1-1./1.73205,1./2,1.73205-1.),P(1./2,0.,2./3), [](double x) { return P(x,(-1 + 2*x)/(x*(-2 + 3*x)),-x/(1 - 5*x + 3*x*x)); }, - prec), + prec), create_polyline(0.,1-1./1.73205, P(0.,1./2,2./3),P(1-1./1.73205,1./2,1.73205-1.), [](double x) { return P(x,1./2,(-2 + x)/(-3 + 2*x)); }, prec), create_polyline(2./3,1., P(1./2,2./3,2./3),P(1./2,1.,1./2), [](double y) { return P(1./2,y,1.-y/2); }, - prec), + prec), create_polyline(1./2,2./3, P(1./2,1.,1./2),P(1./2,2./3,2./3), [](double z) { return P( -(z - 1)*(3*z - 1)/z,z/(3*z - 1),z); }, prec), @@ -2182,7 +2182,7 @@ return { create_polyline(1-1./1.73205,1./2,P(1-1./1.73205,1./2,1.73205-1),P(1./2,1-1./1.73205,1.73205-1), [](double x) { return P(x,(-1 - 2*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-2 + x)*x),(1 - 4*x + 2*x*x + sqrt(1 - 4*x + 12*x*x - 12*x*x*x + 4*x*x*x*x))/(2*(-1 + x)*(-1+x))); }, prec), - create_polyline(1./2,1., P(1./2,1-1./1.73205,1.73205-1), P(1.,1./3,1./2) , + create_polyline(1./2,1., P(1./2,1-1./1.73205,1.73205-1), P(1.,1./3,1./2) , [](double x) { return P(x,(1 + x - sqrt(1 - x + x*x))/(3*x),(x - sqrt(1 - x + x*x))/(-1 + x)); }, prec), create_polyline(1./2,1.,P(1-1./1.73205,1./2,1.73205-1),P(1./3,1.,1./2), @@ -2215,7 +2215,7 @@ return { // curve 1 : x = [1/2,1], y = 1/(2*x), z = 1/(2*x+1) // curve 2 : x = [1/3,1/2], y = (-1 + 2*x)/(-1 + x), z = (1 - 2*x + 2*x*x)/(1 - x + x*x) // curve 3 : x = [0,1/3], y = 1./2, z = (-2 + x)/(-3 + 2*x) -// curve 4 : x = [1/3,1/2], y = -x/(-1 + x), z = (-1 + x + x*x)/(-1 + 2*x*x) +// curve 4 : x = [1/3,1/2], y = -x/(-1 + x), z = (-1 + x + x*x)/(-1 + 2*x*x) // curve 5 : x = 1/3, y = 1/2, z = [5/7,1] template std::vector> poly00012343(const int prec = 10) @@ -2242,7 +2242,7 @@ return { //00111234 // curve 1 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 3*x), z = 1/(1 + x) // curve 2 : x = [1/2,1], y = 1./2, z = 1./(2*x) -// curve 3 : x = 1/2, y =[1/2,1], z = (2*y)/(-1 + 4*y) +// curve 3 : x = 1/2, y =[1/2,1], z = (2*y)/(-1 + 4*y) template std::vector> poly00111234(const int prec = 10) { @@ -2312,7 +2312,7 @@ return { create_polyline(3./5,1., P(2./3,1./2,3./5),P(2./3,1./2,1.), [](double z) { return P(2./3,1./2,z); }, prec), - + }; } @@ -2349,7 +2349,7 @@ return { prec), create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, - prec), + prec), }; } @@ -2366,16 +2366,16 @@ std::vector> poly00121304(const int prec = 10) return { create_polyline(1./2,4.-2*1.73205, P(1./2,2./3,0.),P(4.-2*1.73205,(1.+1/1.73205)/2,(1.73205-1)/2.), [](double x) { return P(x,(2 + x - sqrt(4 - 8*x + x*x))/(6*x),(-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x)); }, - prec), + prec), create_polyline(1./2,4.-2*1.73205, P(1./2,1.,1./2),P(4.-2*1.73205,(1.+1/1.73205)/2,(1.73205-1)/2.), [](double x) { return P(x,(2 + x + sqrt(4 - 8*x + x*x))/(6*x),(-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x)); }, - prec), + prec), create_polyline(1./2,4.-2*1.73205, P(1./2,1./2,1.),P(4.-2*1.73205,(1.73205-1)/2.,(1.+1/1.73205)/2), [](double x) { return P(x,(-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x),(2 + x + sqrt(4 - 8*x + x*x))/(6*x)); }, - prec), + prec), create_polyline(1./2,4.-2*1.73205, P(1./2,0.,2./3),P(4.-2*1.73205,(1.73205-1)/2.,(1.+1/1.73205)/2), [](double x) { return P(x,(-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x),(2 + x - sqrt(4 - 8*x + x*x))/(6*x)); }, - prec), + prec), create_polyline(1./2,1., P(1./2,1.,1./2),P(1.,1./2,1./2), [](double x) { return P(x,1./(2*x),1./2); }, prec), @@ -2556,7 +2556,7 @@ return { prec), create_polyline(1./2,2./3,P(1./2,1./2,1.),P(1./2,2./3,2./3), [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, - prec), + prec), create_polyline(1./2,2./3,P(1./2,1./2,1./2),P(1./2,2./3,2./3), [](double y) { return P(1./2,y,y); }, prec), @@ -2590,7 +2590,7 @@ return { //00122314 // curve 1 : x = [1/2,1], y = (-1 + 2*x)/(-1 + 2*x + x*x), z = 1/(1 + x) // curve 2 : x = [0,4-21.73205], y = (4 - x - sqrt(4 - 8*x + x*x))/6, z = (-2 + 5*x - x*x + sqrt(4 - 8*x + x*x) - x*sqrt(4 - 8*x + x*x))/(2*x) -// curve 3 : x = [1/2,4-21.73205], y = (4 - x + sqrt(4 - 8*x + x*x))/6, z = (-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x) +// curve 3 : x = [1/2,4-21.73205], y = (4 - x + sqrt(4 - 8*x + x*x))/6, z = (-2 + 5*x - x*x - sqrt(4 - 8*x + x*x) + x*sqrt(4 - 8*x + x*x))/(2*x) // curve 4 : x = [1/2,1], y = 1/2, z = x/(-1 + 3*x) // curve 5 : x = [1/2,2/3], y = (-1 + 2*x - x*x)/(-1 + 2*x*x), z = (1 - x)/x // problem with close polylines, there is an over refinement @@ -2892,7 +2892,7 @@ return { prec), create_polyline(0.,1./2,P(1./2,1./2,0.),P(1./2,1./2,1./2), [](double z) { return P(1./2,1./2,z); }, - prec), + prec), create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), [](double y) { return P(1./2,y,1./2); }, prec), @@ -3010,16 +3010,16 @@ return { prec), create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(0.,1./2,P(0.,1./2,1./2),P(1./2,0.,1./2), [](double x) { return P(x,(-1 + 2*x)/(-2 + 3*x),(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, prec), create_polyline(0.,1./2,P(1.,1./2,1./2),P(1./2,1.,1./2), [](double x) { return P(1-x,1-(-1 + 2*x)/(-2 + 3*x),1-(1 - 3*x + 3*x*x)/(2 - 5*x + 4*x*x)); }, - prec), + prec), }; } @@ -3028,7 +3028,7 @@ return { // curve 2 : x = 1/2, y = [0,1], z = 1/2 // curve 3 : x = [0.,0.36299], y = (-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)), z = (1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x)) // curve 4 : x = [0.36299,1./2], y = (1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x), z = (1 - 2*x + x*x)/(2 - 5*x + 4*x*x) -// curve 5 : x = [0.,0.36299], x'=1-x, y = 1-(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)), z = (1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x)) +// curve 5 : x = [0.,0.36299], x'=1-x, y = 1-(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)), z = (1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x)) // curve 6 : x = [0.36299,1./2], x'= 1-x, y = 1-(1 - 3*x + 3*x*x)/(2 - 6*x + 5*x*x), z = (1 - 2*x + x*x)/(2 - 5*x + 4*x*x) // curve 7 : x = [0.36299,1./2], y = 1-x, z = -x/(-1 + x) // curve 8 : x = [1./2,1-0.36299], y = 1-x,(1 - x)/x @@ -3046,10 +3046,10 @@ return { prec), create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(0.,0.36299,P(0.,1./2,1./2),P(0.36299,0.637,0.569841), [](double x) { return P(x,(-1 + 4*x - sqrt(1 - 4*x*x))/(2*(-2 + 5*x)),(1 - x + 2*x*x + sqrt(1 - 4*x*x) - x*sqrt(1 - 4*x*x))/(2*(2 - 3*x + 2*x*x))); }, prec), @@ -3120,16 +3120,16 @@ return { prec), create_polyline(0.,1./2,P(1./2,0.,1./2),P(1./2,1./2,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1.,1./2), [](double y) { return P(1./2,y,1./2); }, - prec), + prec), create_polyline(0.,1./2,P(1./2,1./2,0.),P(1./2,1./2,1./2), [](double z) { return P(1./2,1./2,z); }, - prec), + prec), create_polyline(1./2,1.,P(1./2,1./2.,1./2),P(1./2,1./2,1.), [](double z) { return P(1./2,1./2,z); }, - prec), + prec), create_polyline((2.23606-1)/2,1.,P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2),P(1.,1./2,1./2), [](double x) { return P(x,1/(1 + x),1/(1 + x)); }, prec), @@ -3144,13 +3144,13 @@ return { prec), create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2),P(1./2,1./2,1./2), [](double x) { return P(x,x,x); }, - prec), + prec), create_polyline (1./2,(2.23606-1)/2,P(1./2.,1./2,1./2),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), [](double x) { return P(x,x,x); }, prec), create_polyline((3-2.23606)/2,1./2,P((3-2.23606)/2,(3-2.23606)/2,(3-2.23606)/2),P(1./2,1./2,0.), [](double x) { return P(x,x,(-1 + 2*x)/(-1 + x)); }, - prec), + prec), create_polyline (1./2,(2.23606-1)/2,P(1./2.,1./2,1.),P((2.23606-1)/2,(2.23606-1)/2,(2.23606-1)/2), [](double x) { return P(x,x,(1 - x)/x); }, prec), @@ -3233,10 +3233,10 @@ return { create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), [](double y) { return P(1./2,y,y/(-1 + 3*y) ); }, prec), - create_polyline(1./2,(2.23606-1.)/2, P(1./2,1./2,1.),P((2.23606-1.)/2,1./2,(2.23606-1.)/2), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,1./2,1.),P((2.23606-1.)/2,1./2,(2.23606-1.)/2), [](double x) { return P(x,1./2,(1 - x)/x) ; }, prec), - create_polyline(1./2,(2.23606-1.)/2, P(1./2,0.,2./3),P((2.23606-1)/2,1./2,(2.23606-1)/2), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,0.,2./3),P((2.23606-1)/2,1./2,(2.23606-1)/2), [](double x) { return P(x,(1 - 2*x)/(1 - 3*x + x*x),1./(x+1)) ; }, prec), create_polyline((2.23606-1.)/2,1.,P((2.23606-1.)/2,1./2,(2.23606-1.)/2), P(1.,1./2,1./2), @@ -3245,16 +3245,16 @@ return { create_polyline((2.23606-1.)/2,1.,P((2.23606-1.)/2,(2.23606-1.)/2,1./2), P(1.,1./2,1./2), [](double x) { return P(x,1./(x+1),1./2) ; }, prec), - create_polyline(1./2,(2.23606-1.)/2, P(1./2,2./3,0.),P((2.23606-1)/2,(2.23606-1)/2,1./2), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,2./3,0.),P((2.23606-1)/2,(2.23606-1)/2,1./2), [](double x) { return P(x,1./(x+1),(1 - 2*x)/(1 - 3*x + x*x)) ; }, prec), - create_polyline(1./2,(2.23606-1.)/2, P(1./2,1.,1./2),P((2.23606-1.)/2,(2.23606-1)/2,1./2), + create_polyline(1./2,(2.23606-1.)/2, P(1./2,1.,1./2),P((2.23606-1.)/2,(2.23606-1)/2,1./2), [](double x) { return P(x,(1 - x)/x,1./2) ; }, prec), - create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,(2.23606-1)/2,1./2), + create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,(2.23606-1)/2,1./2), [](double x) { return P(x,-sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)),-(-x + (-sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1)) ; }, prec), - create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,1./2,(2.23606-1)/2), + create_polyline((9-4.12310)/8.,limit_value((2.23606-1.)/2,-1),P((9-4.12310)/8.,(4.12310-3)/2.,(4.12310-3)/2.), P((2.23606-1)/2,1./2,(2.23606-1)/2), [](double x) { return P(x,sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)),-(-x + (sqrt(-x*(4*x*x - 9*x + 4))/(2*(x*x - x - 1)) + (x - 2)/(2*(x*x - x - 1)))*(x*x - x - 1) + 2)/(x*x - x - 1)) ; }, prec), }; @@ -3340,7 +3340,7 @@ return { create_polyline((2.23606-1)/2.,1., P((2.23606-1)/2.,1./2,(2.23606-1)/2.),P(1.,1./2,1./2), [](double x) { return P(x,1./2,1./(x+1)); }, prec), - create_polyline((2.23606-1)/2.,2./3, P((2.23606-1)/2.,1./2,(2.23606-1)/2.),P(2./3,3./5,1./2), + create_polyline((2.23606-1)/2.,2./3, P((2.23606-1)/2.,1./2,(2.23606-1)/2.),P(2./3,3./5,1./2), [](double x) { return P(x,(1 - 2*x)/(1. - 3*x + x*x),(1. - x)/x); }, prec), create_polyline(2./3,1., P(2./3,3./5,1./2),P(1.,1./2,1./2), @@ -3440,7 +3440,7 @@ return { // curve 2 : x = 1./2, y = [0,1/2], z = 1./(2-y) // curve 3 : x = [0,1/2], y = 1/2, z = 1./(2-x) // curve 4 : x = 1./2, y = 1-y', z = 1./(2-y'), y' = [0,1/2] -// curve 5 : x = 1-x', y = 1/2, z = 1./(2-x'), x' = [0,1/2] +// curve 5 : x = 1-x', y = 1/2, z = 1./(2-x'), x' = [0,1/2] template std::vector> poly01102345(const int prec = 10) { @@ -3502,7 +3502,7 @@ return { prec), create_polyline(1./2,1.,P(0.,1./2,1./2), P(1./2,1.,1./2), [](double x) { return P((x*(-1 + 2*x))/(1 - 4*x + 5*x*x),x,x*x/(1 - 3*x + 4*x*x)); }, - prec), + prec), create_polyline(1./2,1., P(1./2,1./2,1.),P(1./2,1.,1./2), [](double y) { return P(1./2,y,y/(-1 + 3*y)); }, prec), @@ -3550,7 +3550,7 @@ return { //01123445 // curve 1 : x= [0,1/2], y = (-1 + 2*x)/(-2 + 3*x), z = 1./2 -// curve 2 : x = 1- x', y = 1- (-1 + 2*x')/(-2 + 3*x'), z = 1./2, x' = [0,1/2] +// curve 2 : x = 1- x', y = 1- (-1 + 2*x')/(-2 + 3*x'), z = 1./2, x' = [0,1/2] template std::vector> poly01123445(const int prec = 10) { @@ -3594,9 +3594,9 @@ return { // curve 2 : x = 1./2, y = 1-(2*z' - 1)/(3*z' - 2), z = 1-z', z' = [0,1/2] // curve 3 : x = (z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)), y = z, z = [1/3,1/2] // curve 4 : x = 1-(z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = z', z = z' = [1/3,1/2] -// curve 5 : x = 1-(z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = 1-z', z = 1-z', z' = [1/3,1/2] +// curve 5 : x = 1-(z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = 1-z', z = 1-z', z' = [1/3,1/2] // curve 6 : x = (z'*z' + z'*(3*z' - 2) - 4*z' + 2)/(2*(z' - 1)*(z'-1)), y = 1-z', z = 1-z', z' = [1/3,1/2] -// curve 7 : x = 1./2, y = z = [1/3,2/3] +// curve 7 : x = 1./2, y = z = [1/3,2/3] template std::vector> poly01233245(const int prec = 10) { @@ -3616,7 +3616,7 @@ return { create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(0.,1./2,1./2), [](double z) { return P( (z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),z,z); }, prec), - create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(1.,1./2,1./2), + create_polyline(1./3,1./2, P(1./2,1./3,1./3),P(1.,1./2,1./2), [](double z) { return P( 1-(z*z + z*(3*z - 2) - 4*z + 2)/(2*(z - 1)*(z-1)),z,z); }, prec), create_polyline(1./3,1./2, P(1./2,2./3,2./3),P(1.,1./2,1./2), @@ -3992,8 +3992,8 @@ public: // 8 colors { 01234567_c, CGAL::Mesh_3::poly01234567 } }; -};// end triple_lines_extractor +};// end triple_lines_extractor }// end namespace Mesh 3 }// end namespace CGAL -#endif // CGAL_MESH_3_FEATURES_DETECTION_H \ No newline at end of file +#endif // CGAL_MESH_3_FEATURES_DETECTION_H From 18f3d6e35ba15297954aae39476054ba3bab22d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 1 Jul 2022 10:12:23 +0200 Subject: [PATCH 051/144] add missing inline --- .../include/CGAL/Mesh_3/features_detection/features_detection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index e15c5947c44..605f94da434 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -657,7 +657,7 @@ std::vector> poly00121201(const int prec = 10) } -double limit_value(double bound, double direction, double epsilon=1e-6) +inline double limit_value(double bound, double direction, double epsilon=1e-6) { return bound + direction * epsilon; } From 4f4f410990b65111c4ec8d4d28c31eedd2655a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 22 Jul 2022 08:50:59 +0200 Subject: [PATCH 052/144] "link" with Eigen --- Mesh_3/test/Mesh_3/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Mesh_3/test/Mesh_3/CMakeLists.txt b/Mesh_3/test/Mesh_3/CMakeLists.txt index 08be8ade8ad..04db61bbc36 100644 --- a/Mesh_3/test/Mesh_3/CMakeLists.txt +++ b/Mesh_3/test/Mesh_3/CMakeLists.txt @@ -65,6 +65,7 @@ if ( CGAL_FOUND ) test_without_detect_features test_meshing_3D_image test_meshing_3D_image_deprecated + test_meshing_3D_image_with_features test_meshing_3D_gray_image test_meshing_3D_gray_image_deprecated test_meshing_implicit_function From 5ad476997dbbbda0d074f87c061844a1901b0933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 22 Jul 2022 08:56:37 +0200 Subject: [PATCH 053/144] workaround MVC2015 bug --- .../CGAL/Mesh_3/features_detection/features_detection.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index 605f94da434..47712fdf255 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -3778,7 +3778,9 @@ return { using Cube = std::array; inline constexpr Cube convert_to_cube(unsigned int n) { + #if !defined(_MSC_VER) || (_MSC_VER > 1900) assert(n < (1 << 24)); + #endif return { (std::uint8_t)((n & 070000000) >> 21), (std::uint8_t)((n & 007000000) >> 18), (std::uint8_t)((n & 000700000) >> 15), (std::uint8_t)((n & 000070000) >> 12), @@ -3792,7 +3794,9 @@ inline constexpr Cube convert_to_cube(unsigned int n) { // is `Cube{0, 1, 2, 3, 4, 5, 6, 7}`. inline constexpr Cube operator"" _c(unsigned long long n) { + #if !defined(_MSC_VER) || (_MSC_VER > 1900) assert(n < (1 << 24)); + #endif return convert_to_cube(unsigned(n)); } From e0f99d3c77e2129790deac54d11bb3d4ca26e1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 22 Jul 2022 08:57:04 +0200 Subject: [PATCH 054/144] fix template parameter --- Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h index 9d148cb0845..d567e71a817 100644 --- a/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h +++ b/Mesh_3/include/CGAL/Mesh_3/detect_features_in_image.h @@ -84,7 +84,7 @@ bool detect_features_in_image_with_know_word_type(const CGAL::Image_3& image, using Word //use unsigned integral Word type to use it as an index = typename CGAL::IMAGEIO::Word_type_generator::type; - using Color_transform = internal::Color_transformation_helper; + using Color_transform = internal::Color_transformation_helper; typename Color_transform::type color_transformation; std::array inv_color_transformation; @@ -115,7 +115,7 @@ bool detect_features_in_image_with_know_word_type(const CGAL::Image_3& image, Color_transform::reset(color_transformation); - int nb_color = 0; + std::uint8_t nb_color = 0; for (int i = 0; i < 8; ++i) { if (!Color_transform::is_valid(color_transformation, cube[i])) { From b9f9b0d12b430b6011346dfbb062fa6dae117e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 25 Jul 2022 13:37:08 +0200 Subject: [PATCH 055/144] remove debug macro --- .../Mesh_3/mesh_3D_image_with_detection_of_features.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp index a8749bb22c0..0b0a7ffa2a6 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_image_with_detection_of_features.cpp @@ -1,5 +1,3 @@ -#define CGAL_DEBUG_TRIPLE_LINES - #include #include From 04d1d60a89162a09136bbb24811a71eda15a6956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 26 Jul 2022 16:47:28 +0200 Subject: [PATCH 056/144] fix warning --- Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index 926d1f23ebd..d91c5d41cf9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -317,8 +317,8 @@ boost::optional Mesh_3_plugin::get_items_or_return_error_string() const return tr("An image items cannot be mixed with other items type"); } # endif - else if (polylines_item = - qobject_cast(scene->item(ind))) + else if ((polylines_item = + qobject_cast(scene->item(ind)))) { if (!items) continue; From 2c88b640e3ff6453bbbbc017cc466f6cb418b6e2 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Thu, 28 Jul 2022 16:59:31 +0200 Subject: [PATCH 057/144] separate protection of features on boundaries, and protection of triple+ lines --- Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index d91c5d41cf9..b67e483cc01 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -623,6 +623,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, ui.protectEdges->addItem(QString("Input polylines")); else { ui.protectEdges->addItem(QString("Polylines on cube")); + ui.protectEdges->addItem(QString("Triple+ lines detected")); } } } @@ -670,9 +671,9 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type, approx = !ui.noApprox->isChecked() ? 0 : ui.approx->value(); tets_shape = !ui.noTetShape->isChecked() ? 0 : ui.tetShape->value(); tets_sizing = !ui.noTetSizing->isChecked() ? 0 : ui.tetSizing->value(); - protect_features = - ui.protect->isChecked() && (ui.protectEdges->currentIndex() == 0); protect_borders = + ui.protect->isChecked() && (ui.protectEdges->currentIndex() == 0); + protect_features = ui.protect->isChecked() && (ui.protectEdges->currentIndex() == 1); const bool detect_connected_components = ui.detectComponents->isChecked(); const int manifold = (ui.manifoldCheckBox->isChecked() ? 1 : 0) + From e063ac1e2d1301a24d2ba3177d8166538ed61e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 1 Aug 2022 14:58:51 +0200 Subject: [PATCH 058/144] add missing polylines --- .../CGAL/Mesh_3/features_detection/features_detection.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h index 47712fdf255..9ec40ce849f 100644 --- a/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h +++ b/Mesh_3/include/CGAL/Mesh_3/features_detection/features_detection.h @@ -683,6 +683,7 @@ std::vector> poly00000123(const int prec = 10) // curve 1 : x = (3*z - 2)/(2*z - 1), y = (2*z - 1)/z, z = [2/3, 3/4] // curve 2 : x = -(z - 1)/(2*z - 1), y = (2*z - 1)/z, z = [2/3, 3/4] // curve 3 : x =1/2, y = -2*(z - 1)/z, z = [2/3, 3/4] +// curve 4 : x = 1/2, y = 2/3, z = [3/4,1] template std::vector> poly00001123(const int prec = 10) { @@ -696,7 +697,9 @@ return { create_polyline(2./3, 3./4, P(1./2, 1, 2./3), [](double z) { return P( 1./2,-2*(z - 1)/z, z); }, prec), - + create_polyline(3./4, 1., P(1./2, 2./3, 3./4),P(1./2,2./3.,1.), + [](double z) { return P( 1./2,2./3, z); }, + prec), }; } @@ -1196,6 +1199,7 @@ return { //curve 2 : x = -(-7*z + 5 + (2*z - 2)*(3*z - 2)/(z - 1))/(2*(z - 1)), y = (3*z - 2)/(z - 1), z = [1/2,2/3] //curve 3 : x = -(2*z*((5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) - sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] //curve 4 : x = -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z), y = (5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z), z = [1./2, 2.*1.4142/17 + 5./17] +//curve 5 : x = y = 1/2, z = [3/5,1] template std::vector> poly00012332(const int prec = 10) { @@ -1218,6 +1222,9 @@ return { create_polyline(1./2,2.*1.4142/17 + 5./17, P(1./2,1.,1./2), [](double z) { return P( -(2*z*((5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z)) - 5*z + 1)/(2*z),(5*z - 1)/(4*z) + sqrt(17*z*z - 10*z + 1)/(4*z),z); }, prec), + create_polyline(3./5,1., P(1./2.,1./2,3./5),P(1./2,1./2.,1.), + [](double z) { return P(1./2,1./2,z); }, + prec), }; } From b98ac1a0bbec4121f0d72a372d967c1cd71f074b Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 2 Aug 2022 18:03:29 +0200 Subject: [PATCH 059/144] display C3t3 protecting balls again this commit reintroduces the display of protecting balls, but they do not take the cut plane into account. All of them are displayed --- Polyhedron/demo/Polyhedron/Viewer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index 4b58030049f..b42b309d58d 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -1359,9 +1359,9 @@ QOpenGLShaderProgram* Viewer::getShaderProgram(int name) const case PROGRAM_CUTPLANE_SPHERES: { QOpenGLShaderProgram* program = isOpenGL_4_3() - ? declare_program(name, ":/cgal/Polyhedron_3/resources/shader_c3t3_spheres.vert" , ":/cgal/Polyhedron_3/resources/shader_c3t3.frag") - : declare_program(name, ":/cgal/Polyhedron_3/resources/compatibility_shaders/shader_c3t3_spheres.vert" , - ":/cgal/Polyhedron_3/resources/compatibility_shaders/shader_c3t3.frag"); + ? declare_program(name, ":/cgal/Polyhedron_3/resources/shader_spheres.vert" , ":/cgal/Polyhedron_3/resources/shader_with_light.frag") + : declare_program(name, ":/cgal/Polyhedron_3/resources/compatibility_shaders/shader_spheres.vert" , + ":/cgal/Polyhedron_3/resources/compatibility_shaders/shader_with_light.frag"); program->setProperty("hasLight", true); program->setProperty("hasNormals", true); program->setProperty("hasCenter", true); From 37538968b66cda3f201db63f879865406b219d19 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 21 Sep 2022 15:25:25 +0200 Subject: [PATCH 060/144] Now four, and not three --- Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index b3c96a48204..a40e47f0ade 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -20,7 +20,7 @@ The bisection stops when the query segment is shorter than an error bound length of the diagonal of the bounding box (in world coordinates), or the radius of the bounding sphere, and a relative error bound passed as argument to the constructor of `Labeled_mesh_domain_3`. -This class has a constructor taking a labeling function. It has also three +This class has a constructor taking a labeling function. It has also four static template member functions that act as named constructors: