From: bangerth Date: Thu, 9 Jun 2011 23:53:29 +0000 (+0000) Subject: Implement serialization functions for triangulations. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a8bd3878c53bb198526a55302c11fe67bfe1343;p=dealii-svn.git Implement serialization functions for triangulations. git-svn-id: https://svn.dealii.org/trunk@23799 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/doc/doxygen/headers/glossary.h b/deal.II/doc/doxygen/headers/glossary.h index e6540bc118..0ab71cf921 100644 --- a/deal.II/doc/doxygen/headers/glossary.h +++ b/deal.II/doc/doxygen/headers/glossary.h @@ -747,9 +747,30 @@ Article{JK10, * class provide non-primitive finite elements because there, each * vector-value shape function may have several non-zero components. * + * *
@anchor GlossReferenceCell Reference cell
*
The hypercube [0,1]dim, on which all parametric finite - * element shape functions are defined.
+ * element shape functions are defined. Many properties of the reference + * cell are described by the GeometryInfo class. + * + * + *
@anchor GlossSerialization Serialization
+ + *
The term "serialization" refers to the process of writing the state of + * an object to a stream and later retrieve it again. A typical use case is to + * save the state of a program to disk for possible later resurrection, often + * in the context of checkpoint/restart strategies for long running + * computations or on computers that aren't very reliable (e.g. on very large + * clusters where individual nodes occasionally fail and then bring down an + * entire MPI job). In either case, one wants to occasionally save the state + * of the program so that, upon failure, one can restart it at that point + * rather than having to run it again from the beginning. + * + * deal.II implements serialization facilities by implementing the necessary + * interfaces for the BOOST serialization library. See there for examples on + * how to save and restore objects.
* * *
@anchor GlossShape Shape functions
diff --git a/deal.II/include/deal.II/base/geometry_info.h b/deal.II/include/deal.II/base/geometry_info.h index 61210bd02b..f43206e679 100644 --- a/deal.II/include/deal.II/base/geometry_info.h +++ b/deal.II/include/deal.II/base/geometry_info.h @@ -17,6 +17,7 @@ #include #include #include +#include DEAL_II_NAMESPACE_OPEN @@ -281,6 +282,12 @@ template class RefinementCase : public RefinementPossibilities { public: + /** + * Default constructor. Initialize the + * refinement case with no_refinement. + */ + RefinementCase (); + /** * Constructor. Take and store a * value indicating a particular @@ -381,6 +388,14 @@ class RefinementCase : public RefinementPossibilities */ static std::size_t memory_consumption (); + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); + /** * Exception. */ @@ -400,7 +415,6 @@ class RefinementCase : public RefinementPossibilities }; - namespace internal { @@ -2366,7 +2380,17 @@ RefinementCase<3>::cut_axis (const unsigned int i) template inline -RefinementCase::RefinementCase (const typename RefinementPossibilities::Possibilities refinement_case) +RefinementCase::RefinementCase () + : + value (RefinementPossibilities::no_refinement) +{} + + + +template +inline +RefinementCase:: +RefinementCase (const typename RefinementPossibilities::Possibilities refinement_case) : value (refinement_case) { @@ -2449,6 +2473,19 @@ RefinementCase::memory_consumption () +template +template +void RefinementCase::serialize (Archive &ar, + const unsigned int) +{ + // serialization can't deal with bitfields, so copy from/to a full sized + // unsigned char + unsigned char uchar_value = value; + ar & uchar_value; + value = uchar_value; +} + + template <> diff --git a/deal.II/include/deal.II/grid/tria.h b/deal.II/include/deal.II/grid/tria.h index ead25ed2c6..9bc5ff329f 100644 --- a/deal.II/include/deal.II/grid/tria.h +++ b/deal.II/include/deal.II/grid/tria.h @@ -21,13 +21,18 @@ #include #include #include +#include +#include #include +#include +#include #include #include #include + DEAL_II_NAMESPACE_OPEN template class Boundary; @@ -258,6 +263,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize (Archive & ar, + const unsigned int version); }; @@ -315,6 +328,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize (Archive & ar, + const unsigned int version); }; //TODO: Replace boundary[255] by a std::vector so we can use constructor of SmartPointer @@ -373,6 +394,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize (Archive & ar, + const unsigned int version); }; } } @@ -1227,7 +1256,8 @@ namespace internal * require follow-up action elsewhere: * - creation: This signal is triggered whenever the * Triangulation::create_triangulation or Triangulation::copy_triangulation - * is called + * is called. This signal is also triggered when loading a + * triangulation from an archive via Triangulation::load. * - pre-refinement: This signal is triggered at the beginning * of execution of the Triangulation::execute_coarsening_and_refinement * function (which is itself called by other functions such as @@ -1241,13 +1271,60 @@ namespace internal * Triangulation::copy_triangulation (i.e. it is triggered on the old * triangulation, but the new one is passed as a argument). * - clear: This signal is triggered whenever the Triangulation::clear - * function is called. + * function is called. This signal is also triggered when loading a + * triangulation from an archive via Triangulation::load as the previous + * content of the triangulation is first destroyed. * - any_change: This is a catch-all signal that is triggered whenever the * create, post_refinement, or clear signals are triggered. In effect, it * can be used to indicate to an object connected to the signal that the * triangulation has been changed, whatever the exact cause of the change. * * + *

Serializing (loading or storing) triangulations

+ * + * Like many other classes in deal.II, the Triangulation class can stream + * its contents to an archive using BOOST's serialization facilities. The + * data so stored can later be retrieved again from the archive to restore + * the contents of this object. This facility is frequently used to save the + * state of a program to disk for possible later resurrection, often in the + * context of checkpoint/restart strategies for long running computations or + * on computers that aren't very reliable (e.g. on very large clusters where + * individual nodes occasionally fail and then bring down an entire MPI + * job). + * + * For technical reasons, writing and restoring a Triangulation object is + * not-trivial. The primary reason is that unlike many other objects, + * triangulations rely on many other objects to which they store pointers or + * with which they interace; for example, triangulations store pointers to + * objects describing boundaries and manifolds, and they have signals that + * store pointers to other objects so they can be notified of changes in the + * triangulation (see the section on signals in this introduction). As + * objects that are re-loaded at a later time do not usually end up at the + * same location in memory as they were when they were saved, dealing with + * pointers to other objects is difficult. + * + * For these reasons, saving a triangulation to an archive does not store + * all information, but only certain parts. More specifically, the + * information that is stored is everything that defines the mesh such as + * vertex locations, vertex indices, how vertices are connected to cells, + * boundary indicators, subdomain ids, material ids, etc. On the other hand, + * the following information is not stored: + * - signals + * - pointers to boundary objects previously set using + * Triangulation::set_boundary + * On the other hand, since these are objects that are usually set in + * user code, they can typically easily be set again in that part of your + * code in which you re-load triangulations. + * + * In a sense, this approach to serialization means that re-loading a + * triangulation is more akin to calling the + * Triangulation::create_triangulation function and filling it with some + * additional content, as that function also does not touch the signals and + * boundary objects that belong to this triangulation. In keeping with this + * analogy, the Triangulation::load function also triggers the same kinds of + * signal as Triangulation::create_triangulation. + * + * *

Technical details

* *

Algorithms for mesh regularization and smoothing upon refinement

@@ -2995,8 +3072,7 @@ class Triangulation : public Subscriptor * iterators with past-the-end or * before-the-beginning states. */ - raw_hex_iterator - end_hex () const; + raw_hex_iterator end_hex () const; /** * Return an iterator which is the first @@ -3026,8 +3102,7 @@ class Triangulation : public Subscriptor * Return an iterator pointing to the * last hex, used or not. */ - raw_hex_iterator - last_raw_hex () const; + raw_hex_iterator last_raw_hex () const; /** * Return an iterator pointing to the @@ -3390,6 +3465,50 @@ class Triangulation : public Subscriptor */ virtual std::size_t memory_consumption () const; + /** + * Write the data of this object to a + * stream for the purpose of + * serialization. + * + * @note This function does not save + * all member variables of the + * current triangulation. Rather, only + * certain kinds of information are + * stored. For more information see the + * general documentation of this class. + */ + template + void save (Archive & ar, const unsigned int version) const; + + /** + * Read the data of this object from a + * stream for the purpose of + * serialization. Throw away the previous + * content. + * + * @note This function does not reset + * all member variables of the + * current triangulation to the ones of + * the triangulation that was previously + * stored to an archive. Rather, only + * certain kinds of information are + * loaded. For more information see the + * general documentation of this class. + * + * @note This function calls the + * Triangulation::clear() function and + * consequently triggers the "clear" + * signal. After loading all data from + * the archive, it then triggers the + * "create" signal. For more information + * on signals, see the general + * documentation of this class. + */ + template + void load (Archive & ar, const unsigned int version); + + BOOST_SERIALIZATION_SPLIT_MEMBER() + /** * @name Exceptions */ @@ -3595,7 +3714,7 @@ class Triangulation : public Subscriptor SmartPointer,Triangulation > boundary[255]; /** - * Collection of ly + * Collection of manifold * objects. We only need 255 * objects rather than 256, * since the indicator 255 is @@ -3670,6 +3789,45 @@ class Triangulation : public Subscriptor #ifndef DOXYGEN +namespace internal +{ + namespace Triangulation + { + template + void NumberCache<1>::serialize (Archive & ar, + const unsigned int) + { + ar & n_levels; + ar & n_lines & n_lines_level; + ar & n_active_lines & n_active_lines_level; + } + + + template + void NumberCache<2>::serialize (Archive & ar, + const unsigned int version) + { + this->NumberCache<1>::serialize (ar, version); + + ar & n_quads & n_quads_level; + ar & n_active_quads & n_active_quads_level; + } + + + template + void NumberCache<3>::serialize (Archive & ar, + const unsigned int version) + { + this->NumberCache<2>::serialize (ar, version); + + ar & n_hexes & n_hexes_level; + ar & n_active_hexes & n_active_hexes_level; + } + + } +} + + template inline bool @@ -3710,6 +3868,67 @@ Triangulation::get_vertices () const } +template +template +void +Triangulation::save (Archive & ar, + const unsigned int) const +{ + // as discussed in the documentation, do + // not store the signals as well as + // boundary and manifold descrption + // but everything else + ar & smooth_grid; + ar & levels; + ar & faces; + ar & vertices; + ar & vertices_used; + + ar & anisotropic_refinement; + ar & number_cache; + + ar & check_for_distorted_cells; +} + + + +template +template +void +Triangulation::load (Archive & ar, + const unsigned int) +{ + // clear previous content. this also calls + // the respective signal + clear (); + + // as discussed in the documentation, do + // not store the signals as well as + // boundary and manifold descrption + // but everything else + ar & smooth_grid; + ar & levels; + ar & faces; + ar & vertices; + ar & vertices_used; + + ar & anisotropic_refinement; + ar & number_cache; + + bool my_check_for_distorted_cells; + ar & my_check_for_distorted_cells; + + Assert (my_check_for_distorted_cells == check_for_distorted_cells, + ExcMessage ("The triangulation loaded into here must have the " + "same setting with regard to reporting distorted " + "cell as the one previously stored.")); + + // trigger the create signal to indicate + // that new content has been imported into + // the triangulation + signals.create(); +} + /* -------------- declaration of explicit specializations ------------- */ diff --git a/deal.II/include/deal.II/grid/tria_faces.h b/deal.II/include/deal.II/grid/tria_faces.h index 3fc65bca6c..b6492893e0 100644 --- a/deal.II/include/deal.II/grid/tria_faces.h +++ b/deal.II/include/deal.II/grid/tria_faces.h @@ -17,6 +17,7 @@ #include #include + DEAL_II_NAMESPACE_OPEN namespace internal @@ -69,6 +70,14 @@ namespace internal * Of course this returns 0. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); }; /** @@ -90,6 +99,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); }; /** @@ -118,7 +135,43 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); }; + + + + template + void + TriaFaces<1>::serialize (Archive & ar, + const unsigned int) + {} + + + + template + void + TriaFaces<2>::serialize (Archive & ar, + const unsigned int) + { + ar & lines; + } + + + + template + void + TriaFaces<3>::serialize (Archive & ar, + const unsigned int) + { + ar & quads & lines; + } } } diff --git a/deal.II/include/deal.II/grid/tria_levels.h b/deal.II/include/deal.II/grid/tria_levels.h index 3310263fd4..c75d97efeb 100644 --- a/deal.II/include/deal.II/grid/tria_levels.h +++ b/deal.II/include/deal.II/grid/tria_levels.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010 by the deal.II authors +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -20,6 +20,8 @@ #include #include +#include + DEAL_II_NAMESPACE_OPEN namespace internal @@ -202,6 +204,14 @@ namespace internal */ std::size_t memory_consumption () const; + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); + /** * Exception */ @@ -252,6 +262,14 @@ namespace internal void monitor_memory (const unsigned int true_dimension) const; std::size_t memory_consumption () const; + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); + /** * Exception */ @@ -269,6 +287,34 @@ namespace internal << arg2 << ", which is not as expected."); }; + + + template + template + void TriaLevel::serialize(Archive & ar, + const unsigned int) + { + ar & refine_flags & coarsen_flags; + ar & neighbors; + ar & subdomain_ids; + ar & parents; + ar & direction_flags; + ar & cells; + } + + + + template + void TriaLevel<3>::serialize(Archive & ar, + const unsigned int) + { + ar & refine_flags & coarsen_flags; + ar & neighbors; + ar & subdomain_ids; + ar & parents; + ar & direction_flags; + ar & cells; + } } } diff --git a/deal.II/include/deal.II/grid/tria_object.h b/deal.II/include/deal.II/grid/tria_object.h index 90d248d766..93445844ec 100644 --- a/deal.II/include/deal.II/grid/tria_object.h +++ b/deal.II/include/deal.II/grid/tria_object.h @@ -99,6 +99,14 @@ namespace internal * of this object. */ static std::size_t memory_consumption (); + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); protected: /** @@ -196,7 +204,16 @@ namespace internal { return sizeof(TriaObject); } - + + + template + template + void TriaObject::serialize(Archive & ar, + const unsigned int) + { + ar & faces; + } + } } diff --git a/deal.II/include/deal.II/grid/tria_objects.h b/deal.II/include/deal.II/grid/tria_objects.h index 9373b25863..1bc0d18825 100644 --- a/deal.II/include/deal.II/grid/tria_objects.h +++ b/deal.II/include/deal.II/grid/tria_objects.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 2006, 2007, 2008, 2009, 2010 by the deal.II authors +// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -17,6 +17,7 @@ #include #include #include + #include DEAL_II_NAMESPACE_OPEN @@ -183,7 +184,8 @@ namespace internal * . */ template - typename dealii::Triangulation::raw_line_iterator next_free_single_line (const dealii::Triangulation &tria); + typename dealii::Triangulation::raw_line_iterator + next_free_single_line (const dealii::Triangulation &tria); /** * Return an iterator to the @@ -193,7 +195,8 @@ namespace internal * . */ template - typename dealii::Triangulation::raw_line_iterator next_free_pair_line (const dealii::Triangulation &tria); + typename dealii::Triangulation::raw_line_iterator + next_free_pair_line (const dealii::Triangulation &tria); /** * Return an iterator to the @@ -204,7 +207,8 @@ namespace internal * . */ template - typename dealii::Triangulation::raw_quad_iterator next_free_single_quad (const dealii::Triangulation &tria); + typename dealii::Triangulation::raw_quad_iterator + next_free_single_quad (const dealii::Triangulation &tria); /** * Return an iterator to the @@ -214,7 +218,8 @@ namespace internal * . */ template - typename dealii::Triangulation::raw_quad_iterator next_free_pair_quad (const dealii::Triangulation &tria); + typename dealii::Triangulation::raw_quad_iterator + next_free_pair_quad (const dealii::Triangulation &tria); /** * Return an iterator to the @@ -224,8 +229,9 @@ namespace internal * G=Hexahedron. */ template - typename dealii::Triangulation::raw_hex_iterator next_free_hex (const dealii::Triangulation &tria, - const unsigned int level); + typename dealii::Triangulation::raw_hex_iterator + next_free_hex (const dealii::Triangulation &tria, + const unsigned int level); /** * Clear all the data contained in this object. @@ -318,6 +324,14 @@ namespace internal */ std::size_t memory_consumption () const; + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); + /** * Exception */ @@ -376,17 +390,35 @@ namespace internal * The data type storing user * pointers or user indices. */ - union UserData + struct UserData { - /// The entry used as user pointer. - void* p; - /// The entry used as user index. - unsigned int i; - /// Default constructor + union Data + { + /// The entry used as user + /// pointer. + void* p; + /// The entry used as user + /// index. + unsigned int i; + /// Default constructor + }; + Data data; + + /** + * Default constructor. + */ UserData() { - p = 0; + data.p = 0; } + + /** + * Write the data of this object + * to a stream for the purpose of + * serialization. + */ + template + void serialize (Archive & ar, const unsigned int version); }; /** @@ -431,7 +463,7 @@ namespace internal * additionaly contains a bool-vector of the face-orientations. */ - class TriaObjectsHex: public TriaObjects > + class TriaObjectsHex : public TriaObjects > { public: /** @@ -537,6 +569,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); }; @@ -614,6 +654,14 @@ namespace internal * of this object. */ std::size_t memory_consumption () const; + + /** + * Read or write the data of this object to or + * from a stream for the purpose of serialization + */ + template + void serialize(Archive & ar, + const unsigned int version); }; //----------------------------------------------------------------------// @@ -621,7 +669,8 @@ namespace internal template inline bool - TriaObjects::face_orientation(const unsigned int, const unsigned int) const + TriaObjects:: + face_orientation(const unsigned int, const unsigned int) const { return true; } @@ -638,7 +687,7 @@ namespace internal user_data_type = data_pointer; #endif Assert(i::clear_user_data (const unsigned int i) { Assert(i + template + void + TriaObjects::UserData::serialize (Archive & ar, + const unsigned int) + { + // serialize this as an integer + ar & data.i; + } + + + template + template + void TriaObjects::serialize(Archive & ar, + const unsigned int) + { + ar & cells & children; + ar & refinement_cases; + ar & used; + ar & user_flags; + ar & material_id; + ar & next_free_single & next_free_pair & reverse_order_next_free_single; + ar & user_data & user_data_type; + } + + + template + void TriaObjectsHex::serialize(Archive & ar, + const unsigned int version) + { + this->TriaObjects >::serialize (ar, version); + + ar & face_orientations & face_flips & face_rotations; + } + + + template + void TriaObjectsQuad3D::serialize(Archive & ar, + const unsigned int version) + { + this->TriaObjects >::serialize (ar, version); + + ar & line_orientations; + } + + //----------------------------------------------------------------------// inline bool - TriaObjectsHex::face_orientation(const unsigned int cell, const unsigned int face) const + TriaObjectsHex::face_orientation(const unsigned int cell, + const unsigned int face) const { Assert (cell < face_orientations.size() / GeometryInfo<3>::faces_per_cell, ExcIndexRange(0, cell, face_orientations.size() / GeometryInfo<3>::faces_per_cell)); diff --git a/tests/serialization/triangulation_01.cc b/tests/serialization/triangulation_01.cc new file mode 100644 index 0000000000..f628faa21f --- /dev/null +++ b/tests/serialization/triangulation_01.cc @@ -0,0 +1,138 @@ +//---------------------------- triangulation_01.cc --------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2010, 2011 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------- triangulation_01.cc --------------------------- + +// check serialization for Triangulation<1,dim> + +#include "serialization.h" +#include +#include +#include +#include + + +template +bool operator == (const Triangulation &t1, + const Triangulation &t2) +{ + // test a few attributes, though we can't + // test everything unfortunately... + if (t1.n_active_cells() != t2.n_active_cells()) + return false; + + if (t1.n_cells() != t2.n_cells()) + return false; + + if (t1.n_faces() != t2.n_faces()) + return false; + + typename Triangulation::cell_iterator + c1 = t1.begin(), + c2 = t2.begin(); + for (; c1 != t1.end(); ++c1, ++c2) + { + for (unsigned int v=0; v::vertices_per_cell; ++v) + { + if (c1->vertex(v) != c2->vertex(v)) + return false; + if (c1->vertex_index(v) != c2->vertex_index(v)) + return false; + } + + for (unsigned int f=0; f::faces_per_cell; ++f) + { + if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary()) + return false; + + if (c1->face(f)->at_boundary()) + { + if (c1->face(f)->boundary_indicator() != + c2->face(f)->boundary_indicator()) + return false; + } + else + { + if (c1->neighbor(f)->level() != c2->neighbor(f)->level()) + return false; + if (c1->neighbor(f)->index() != c2->neighbor(f)->index()) + return false; + } + } + + if (c1->subdomain_id() != c2->subdomain_id()) + return false; + + if (c1->material_id() != c2->material_id()) + return false; + + if (c1->user_index() != c2->user_index()) + return false; + + if (c1->user_flag_set() != c2->user_flag_set()) + return false; + } + + return true; +} + +template +void do_boundary (Triangulation &t1) +{ + typename Triangulation::cell_iterator + c1 = t1.begin(); + for (; c1 != t1.end(); ++c1) + for (unsigned int f=0; f::faces_per_cell; ++f) + if (c1->at_boundary(f)) + c1->face(f)->set_boundary_indicator (42); +} + + +template +void do_boundary (Triangulation<1,spacedim> &) +{} + + +template +void test () +{ + Triangulation tria_1, tria_2; + + GridGenerator::hyper_cube (tria_1); + tria_1.refine_global (2); + tria_1.begin_active()->set_subdomain_id (1); + tria_1.begin_active()->set_material_id (2); + tria_1.begin_active()->set_user_index (3); + tria_1.begin_active()->set_user_flag (); + tria_1.begin_active()->set_refine_flag (RefinementCase::cut_x); + + do_boundary (tria_1); + + verify (tria_1, tria_2); +} + + +int main () +{ + std::ofstream logfile("triangulation_01/output"); + deallog << std::setprecision(3); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + test<1,1> (); + test<1,2> (); + test<2,2> (); + test<2,3> (); + test<3,3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/serialization/triangulation_01/cmp/generic b/tests/serialization/triangulation_01/cmp/generic new file mode 100644 index 0000000000..3319fc1641 --- /dev/null +++ b/tests/serialization/triangulation_01/cmp/generic @@ -0,0 +1,30 @@ + +DEAL::22 serialization::archive 9 0 0 0 0 0 3 0 2 1 0 +0 1 0 0 1 0 0 0 2 0 0 0 -1 -1 -1 -1 1 0 0 1 0 -1 0 0 0 0 0 1 0 0 0 2 0 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 2 +1 2 0 0 0 2 0 0 4 0 -1 -1 1 1 1 0 -1 -1 2 0 0 0 1 0 0 0 2 0 2 0 2 2 2 1 2 0 0 2 0 0 2 1 1 2 0 0 2 0 0 0 1 0 1 2 0 0 0 0 2 +2 4 0 1 0 0 0 4 0 0 0 0 8 0 -1 -1 2 1 2 0 2 2 2 1 2 3 2 2 -1 -1 4 0 1 0 0 0 2 0 0 1 0 4 0 2 0 3 2 3 2 2 2 4 2 4 1 4 0 -1 -1 -1 -1 0 0 4 1 1 1 1 4 1 0 0 0 4 0 2 0 0 0 3 0 1 4 0 3 0 0 0 2 -1 0 0 5 0 0 0 0 0 1 0 1 1 1 0.5 1 0.25 1 0.75 5 1 1 1 1 1 0 0 0 3 7 3 0 1 2 4 4 3 0 0 0 4 0 + +DEAL::22 serialization::archive 9 0 0 0 0 0 3 0 2 1 0 +0 1 0 0 1 0 0 0 2 0 0 0 -1 -1 -1 -1 1 0 0 1 0 -1 1 1 0 0 0 0 1 0 0 0 2 0 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 2 +1 2 0 0 0 2 0 0 4 0 -1 -1 1 1 1 0 -1 -1 2 0 0 0 1 0 0 2 1 1 2 0 2 0 2 2 2 1 2 0 0 2 0 0 2 1 1 2 0 0 2 0 0 0 1 0 1 2 0 0 0 0 2 +2 4 0 1 0 0 0 4 0 0 0 0 8 0 -1 -1 2 1 2 0 2 2 2 1 2 3 2 2 -1 -1 4 0 1 0 0 0 2 0 0 1 4 1 1 1 1 4 0 2 0 3 2 3 2 2 2 4 2 4 1 4 0 -1 -1 -1 -1 0 0 4 1 1 1 1 4 1 0 0 0 4 0 2 0 0 0 3 0 1 4 0 3 0 0 0 2 -1 0 0 5 0 0 0 0 0 2 0 0 2 1 0 2 0.5 0 2 0.25 0 2 0.75 0 5 1 1 1 1 1 0 0 0 3 7 3 0 1 2 4 4 3 0 0 0 4 0 + +DEAL::22 serialization::archive 9 0 0 0 0 0 3 0 2 1 0 +0 1 0 0 1 0 0 0 4 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0 1 0 -1 0 0 0 0 0 1 0 0 0 4 1 2 0 3 2 0 0 2 0 0 1 0 0 0 3 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 2 +1 4 0 0 0 0 0 4 0 0 0 0 16 0 -1 -1 1 1 -1 -1 1 2 1 0 -1 -1 -1 -1 1 3 -1 -1 1 3 1 0 -1 -1 1 2 -1 -1 1 1 -1 -1 4 0 0 0 0 0 2 0 0 0 0 4 0 4 6 12 4 14 4 12 8 5 15 4 7 13 14 10 4 13 9 15 11 8 0 0 2 4 6 8 10 12 14 4 0 3 3 3 3 4 1 1 1 1 4 0 0 0 0 4 0 0 0 0 0 3 0 1 4 0 0 0 0 0 0 2 +2 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 -1 -1 2 1 -1 -1 2 2 2 0 2 4 -1 -1 2 3 -1 -1 2 3 2 0 2 8 2 2 2 6 2 1 2 9 2 1 2 5 -1 -1 2 6 2 4 -1 -1 -1 -1 2 7 2 3 2 7 2 4 2 12 2 6 -1 -1 2 5 2 13 -1 -1 2 9 2 2 2 10 2 8 2 12 2 3 2 11 -1 -1 2 11 2 8 -1 -1 2 10 2 14 2 9 -1 -1 2 9 2 13 2 6 2 14 2 12 -1 -1 2 7 2 15 2 11 2 15 2 12 -1 -1 2 14 -1 -1 2 13 -1 -1 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 1 1 2 2 3 3 0 16 0 4 20 40 16 42 4 40 32 17 43 4 21 41 42 36 4 41 33 43 37 4 32 44 18 46 4 44 24 19 47 4 33 45 46 38 4 45 25 47 39 4 22 48 36 50 4 48 34 37 51 4 23 49 50 28 4 49 35 51 29 4 34 52 38 54 4 52 26 39 55 4 35 53 54 30 4 53 27 55 31 32 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 1 16 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 16 1 0 +3 0 0 0 0 56 0 0 0 2 0 1 2 0 2 2 1 3 2 2 3 2 0 4 2 4 1 2 0 5 2 5 2 2 1 6 2 6 3 2 2 7 2 7 3 2 4 8 2 8 7 2 5 8 2 8 6 2 0 9 2 9 4 2 4 10 2 10 1 2 0 11 2 11 5 2 5 12 2 12 2 2 1 13 2 13 6 2 6 14 2 14 3 2 2 15 2 15 7 2 7 16 2 16 3 2 4 17 2 17 8 2 8 18 2 18 7 2 5 19 2 19 8 2 8 20 2 20 6 2 9 21 2 21 19 2 11 21 2 21 17 2 10 22 2 22 20 2 17 22 2 22 13 2 19 23 2 23 15 2 12 23 2 23 18 2 20 24 2 24 16 2 18 24 2 24 14 56 0 4 6 8 10 16 18 20 22 24 26 28 30 32 34 36 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 56 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 55 0 1 0 0 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 2 0 0 2 1 0 2 0 1 2 1 1 2 0.5 0 2 0 0.5 2 1 0.5 2 0.5 1 2 0.5 0.5 2 0.25 0 2 0.75 0 2 0 0.25 2 0 0.75 2 1 0.25 2 1 0.75 2 0.25 1 2 0.75 1 2 0.5 0.25 2 0.5 0.75 2 0.25 0.5 2 0.75 0.5 2 0.25 0.25 2 0.75 0.25 2 0.25 0.75 2 0.75 0.75 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 56 3 0 0 0 0 40 3 0 0 0 0 21 3 0 1 4 16 16 3 0 0 0 16 0 + +DEAL::22 serialization::archive 9 0 0 0 0 0 3 0 2 1 0 +0 1 0 0 1 0 0 0 4 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0 1 0 -1 1 1 0 0 0 0 1 0 0 0 4 1 2 0 3 2 0 0 2 0 0 1 0 0 0 3 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 2 +1 4 0 0 0 0 0 4 0 0 0 0 16 0 -1 -1 1 1 -1 -1 1 2 1 0 -1 -1 -1 -1 1 3 -1 -1 1 3 1 0 -1 -1 1 2 -1 -1 1 1 -1 -1 4 0 0 0 0 0 2 0 0 0 4 1 1 1 1 4 0 4 6 12 4 14 4 12 8 5 15 4 7 13 14 10 4 13 9 15 11 8 0 0 2 4 6 8 10 12 14 4 0 3 3 3 3 4 1 1 1 1 4 0 0 0 0 4 0 0 0 0 0 3 0 1 4 0 0 0 0 0 0 2 +2 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 -1 -1 2 1 -1 -1 2 2 2 0 2 4 -1 -1 2 3 -1 -1 2 3 2 0 2 8 2 2 2 6 2 1 2 9 2 1 2 5 -1 -1 2 6 2 4 -1 -1 -1 -1 2 7 2 3 2 7 2 4 2 12 2 6 -1 -1 2 5 2 13 -1 -1 2 9 2 2 2 10 2 8 2 12 2 3 2 11 -1 -1 2 11 2 8 -1 -1 2 10 2 14 2 9 -1 -1 2 9 2 13 2 6 2 14 2 12 -1 -1 2 7 2 15 2 11 2 15 2 12 -1 -1 2 14 -1 -1 2 13 -1 -1 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 1 1 2 2 3 3 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 0 4 20 40 16 42 4 40 32 17 43 4 21 41 42 36 4 41 33 43 37 4 32 44 18 46 4 44 24 19 47 4 33 45 46 38 4 45 25 47 39 4 22 48 36 50 4 48 34 37 51 4 23 49 50 28 4 49 35 51 29 4 34 52 38 54 4 52 26 39 55 4 35 53 54 30 4 53 27 55 31 32 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 1 16 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 16 1 0 +3 0 0 0 0 56 0 0 0 2 0 1 2 0 2 2 1 3 2 2 3 2 0 4 2 4 1 2 0 5 2 5 2 2 1 6 2 6 3 2 2 7 2 7 3 2 4 8 2 8 7 2 5 8 2 8 6 2 0 9 2 9 4 2 4 10 2 10 1 2 0 11 2 11 5 2 5 12 2 12 2 2 1 13 2 13 6 2 6 14 2 14 3 2 2 15 2 15 7 2 7 16 2 16 3 2 4 17 2 17 8 2 8 18 2 18 7 2 5 19 2 19 8 2 8 20 2 20 6 2 9 21 2 21 19 2 11 21 2 21 17 2 10 22 2 22 20 2 17 22 2 22 13 2 19 23 2 23 15 2 12 23 2 23 18 2 20 24 2 24 16 2 18 24 2 24 14 56 0 4 6 8 10 16 18 20 22 24 26 28 30 32 34 36 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 56 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 55 0 1 0 0 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 25 0 0 0 0 0 3 0 0 0 3 1 0 0 3 0 1 0 3 1 1 0 3 0.5 0 0 3 0 0.5 0 3 1 0.5 0 3 0.5 1 0 3 0.5 0.5 0 3 0.25 0 0 3 0.75 0 0 3 0 0.25 0 3 0 0.75 0 3 1 0.25 0 3 1 0.75 0 3 0.25 1 0 3 0.75 1 0 3 0.5 0.25 0 3 0.5 0.75 0 3 0.25 0.5 0 3 0.75 0.5 0 3 0.25 0.25 0 3 0.75 0.25 0 3 0.25 0.75 0 3 0.75 0.75 0 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 56 3 0 0 0 0 40 3 0 0 0 0 21 3 0 1 4 16 16 3 0 0 0 16 0 + +DEAL::22 serialization::archive 9 0 0 0 0 0 3 0 2 1 0 +0 1 0 0 1 0 0 0 6 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 0 1 0 -1 0 0 0 0 0 1 0 0 0 6 2 3 0 4 1 5 4 0 0 2 4 6 0 0 1 0 0 0 7 1 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 6 1 1 1 1 1 1 6 0 0 0 0 0 0 6 0 0 0 0 0 0 2 +1 8 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 48 0 -1 -1 1 1 -1 -1 1 2 -1 -1 1 4 1 0 -1 -1 -1 -1 1 3 -1 -1 1 5 -1 -1 1 3 1 0 -1 -1 -1 -1 1 6 1 2 -1 -1 1 1 -1 -1 -1 -1 1 7 -1 -1 1 5 -1 -1 1 6 1 0 -1 -1 1 4 -1 -1 -1 -1 1 7 1 1 -1 -1 -1 -1 1 7 1 4 -1 -1 1 2 -1 -1 1 6 -1 -1 1 5 -1 -1 1 3 -1 -1 8 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 8 0 6 14 41 6 37 10 33 6 41 18 8 35 11 32 6 15 40 37 22 12 31 6 40 19 35 24 13 30 6 16 39 7 36 33 26 6 39 20 9 34 32 27 6 17 38 36 23 31 28 6 38 21 34 25 30 29 32 0 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 8 0 7 7 7 7 7 7 7 7 8 1 1 1 1 1 1 1 1 8 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 48 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 +2 64 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 384 0 -1 -1 2 1 -1 -1 2 2 -1 -1 2 4 2 0 2 8 -1 -1 2 3 -1 -1 2 5 -1 -1 2 3 2 0 2 16 -1 -1 2 6 2 2 2 10 2 1 2 17 -1 -1 2 7 -1 -1 2 5 -1 -1 2 6 2 0 2 32 2 4 2 12 -1 -1 2 7 2 1 2 33 -1 -1 2 7 2 4 2 20 2 2 2 34 2 6 2 14 2 5 2 21 2 3 2 35 2 1 2 9 -1 -1 2 10 -1 -1 2 12 2 8 -1 -1 -1 -1 2 11 -1 -1 2 13 2 3 2 11 2 8 2 24 -1 -1 2 14 2 10 -1 -1 2 9 2 25 -1 -1 2 15 2 5 2 13 -1 -1 2 14 2 8 2 40 2 12 -1 -1 -1 -1 2 15 2 9 2 41 2 7 2 15 2 12 2 28 2 10 2 42 2 14 -1 -1 2 13 2 29 2 11 2 43 -1 -1 2 17 2 2 2 18 -1 -1 2 20 2 16 2 24 2 3 2 19 -1 -1 2 21 -1 -1 2 19 2 16 -1 -1 -1 -1 2 22 2 18 2 26 2 17 -1 -1 -1 -1 2 23 -1 -1 2 21 2 6 2 22 2 16 2 48 2 20 2 28 2 7 2 23 2 17 2 49 -1 -1 2 23 2 20 -1 -1 2 18 2 50 2 22 2 30 2 21 -1 -1 2 19 2 51 2 17 2 25 2 10 2 26 -1 -1 2 28 2 24 -1 -1 2 11 2 27 -1 -1 2 29 2 19 2 27 2 24 -1 -1 -1 -1 2 30 2 26 -1 -1 2 25 -1 -1 -1 -1 2 31 2 21 2 29 2 14 2 30 2 24 2 56 2 28 -1 -1 2 15 2 31 2 25 2 57 2 23 2 31 2 28 -1 -1 2 26 2 58 2 30 -1 -1 2 29 -1 -1 2 27 2 59 -1 -1 2 33 -1 -1 2 34 2 4 2 36 2 32 2 40 -1 -1 2 35 2 5 2 37 -1 -1 2 35 2 32 2 48 2 6 2 38 2 34 2 42 2 33 2 49 2 7 2 39 -1 -1 2 37 -1 -1 2 38 2 32 -1 -1 2 36 2 44 -1 -1 2 39 2 33 -1 -1 -1 -1 2 39 2 36 2 52 2 34 -1 -1 2 38 2 46 2 37 2 53 2 35 -1 -1 2 33 2 41 -1 -1 2 42 2 12 2 44 2 40 -1 -1 -1 -1 2 43 2 13 2 45 2 35 2 43 2 40 2 56 2 14 2 46 2 42 -1 -1 2 41 2 57 2 15 2 47 2 37 2 45 -1 -1 2 46 2 40 -1 -1 2 44 -1 -1 -1 -1 2 47 2 41 -1 -1 2 39 2 47 2 44 2 60 2 42 -1 -1 2 46 -1 -1 2 45 2 61 2 43 -1 -1 -1 -1 2 49 2 34 2 50 2 20 2 52 2 48 2 56 2 35 2 51 2 21 2 53 -1 -1 2 51 2 48 -1 -1 2 22 2 54 2 50 2 58 2 49 -1 -1 2 23 2 55 -1 -1 2 53 2 38 2 54 2 48 -1 -1 2 52 2 60 2 39 2 55 2 49 -1 -1 -1 -1 2 55 2 52 -1 -1 2 50 -1 -1 2 54 2 62 2 53 -1 -1 2 51 -1 -1 2 49 2 57 2 42 2 58 2 28 2 60 2 56 -1 -1 2 43 2 59 2 29 2 61 2 51 2 59 2 56 -1 -1 2 30 2 62 2 58 -1 -1 2 57 -1 -1 2 31 2 63 2 53 2 61 2 46 2 62 2 56 -1 -1 2 60 -1 -1 2 47 2 63 2 57 -1 -1 2 55 2 63 2 60 -1 -1 2 58 -1 -1 2 62 -1 -1 2 61 -1 -1 2 59 -1 -1 64 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 0 64 0 6 74 281 42 277 58 273 6 281 182 44 275 59 272 6 75 280 277 166 60 271 6 280 183 275 168 61 270 6 76 279 43 276 273 150 6 279 184 45 274 272 151 6 77 278 276 167 271 152 6 278 185 274 169 270 153 6 182 269 50 265 62 261 6 269 90 52 263 63 260 6 183 268 265 158 64 259 6 268 91 263 160 65 258 6 184 267 51 264 261 146 6 267 92 53 262 260 147 6 185 266 264 159 259 148 6 266 93 262 161 258 149 6 78 257 166 253 66 249 6 257 178 168 251 67 248 6 79 256 253 106 68 247 6 256 179 251 108 69 246 6 80 255 167 252 249 142 6 255 180 169 250 248 143 6 81 254 252 107 247 144 6 254 181 250 109 246 145 6 178 245 158 241 70 237 6 245 94 160 239 71 236 6 179 244 241 114 72 235 6 244 95 239 116 73 234 6 180 243 159 240 237 138 6 243 96 161 238 236 139 6 181 242 240 115 235 140 6 242 97 238 117 234 141 6 82 233 46 229 150 225 6 233 174 48 227 151 224 6 83 232 229 162 152 223 6 232 175 227 164 153 222 6 84 231 47 228 225 122 6 231 176 49 226 224 123 6 85 230 228 163 223 124 6 230 177 226 165 222 125 6 174 221 54 217 146 213 6 221 98 56 215 147 212 6 175 220 217 154 148 211 6 220 99 215 156 149 210 6 176 219 55 216 213 126 6 219 100 57 214 212 127 6 177 218 216 155 211 128 6 218 101 214 157 210 129 6 86 209 162 205 142 201 6 209 170 164 203 143 200 6 87 208 205 110 144 199 6 208 171 203 112 145 198 6 88 207 163 204 201 130 6 207 172 165 202 200 131 6 89 206 204 111 199 132 6 206 173 202 113 198 133 6 170 197 154 193 138 189 6 197 102 156 191 139 188 6 171 196 193 118 140 187 6 196 103 191 120 141 186 6 172 195 155 192 189 134 6 195 104 157 190 188 135 6 173 194 192 119 187 136 6 194 105 190 121 186 137 256 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 64 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 384 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 0 +3 0 0 0 0 282 0 0 0 4 0 8 2 4 4 1 3 0 5 4 2 6 1 9 4 4 7 3 10 4 5 11 6 7 4 9 10 8 11 4 12 36 16 38 4 36 28 17 39 4 13 37 38 20 4 37 29 39 21 4 14 40 12 42 4 40 18 13 43 4 15 41 42 22 4 41 19 43 23 4 16 44 14 46 4 44 24 15 47 4 17 45 46 30 4 45 25 47 31 4 20 48 18 50 4 48 26 19 51 4 21 49 50 32 4 49 27 51 33 4 22 52 24 54 4 52 34 25 55 4 23 53 54 26 4 53 35 55 27 4 30 56 28 58 4 56 32 29 59 4 31 57 58 34 4 57 33 59 35 4 64 51 62 53 4 47 64 63 52 4 65 50 37 62 4 46 65 36 63 4 62 59 60 49 4 43 62 61 48 4 63 58 45 60 4 42 63 44 61 4 60 55 64 57 4 39 60 65 56 4 61 54 41 64 4 38 61 40 65 4 66 174 74 176 4 174 114 75 177 4 67 175 176 118 4 175 115 177 119 4 114 178 76 180 4 178 98 77 181 4 115 179 180 120 4 179 99 181 121 4 68 182 118 184 4 182 116 119 185 4 69 183 184 82 4 183 117 185 83 4 116 186 120 188 4 186 100 121 189 4 117 187 188 84 4 187 101 189 85 4 70 190 66 192 4 190 122 67 193 4 71 191 192 126 4 191 123 193 127 4 122 194 68 196 4 194 78 69 197 4 123 195 196 128 4 195 79 197 129 4 72 198 126 200 4 198 124 127 201 4 73 199 200 86 4 199 125 201 87 4 124 202 128 204 4 202 80 129 205 4 125 203 204 88 4 203 81 205 89 4 74 206 70 208 4 206 130 71 209 4 75 207 208 134 4 207 131 209 135 4 130 210 72 212 4 210 90 73 213 4 131 211 212 136 4 211 91 213 137 4 76 214 134 216 4 214 132 135 217 4 77 215 216 102 4 215 133 217 103 4 132 218 136 220 4 218 92 137 221 4 133 219 220 104 4 219 93 221 105 4 82 222 78 224 4 222 138 79 225 4 83 223 224 142 4 223 139 225 143 4 138 226 80 228 4 226 94 81 229 4 139 227 228 144 4 227 95 229 145 4 84 230 142 232 4 230 140 143 233 4 85 231 232 106 4 231 141 233 107 4 140 234 144 236 4 234 96 145 237 4 141 235 236 108 4 235 97 237 109 4 86 238 90 240 4 238 146 91 241 4 87 239 240 150 4 239 147 241 151 4 146 242 92 244 4 242 110 93 245 4 147 243 244 152 4 243 111 245 153 4 88 246 150 248 4 246 148 151 249 4 89 247 248 94 4 247 149 249 95 4 148 250 152 252 4 250 112 153 253 4 149 251 252 96 4 251 113 253 97 4 102 254 98 256 4 254 154 99 257 4 103 255 256 158 4 255 155 257 159 4 154 258 100 260 4 258 106 101 261 4 155 259 260 160 4 259 107 261 161 4 104 262 158 264 4 262 156 159 265 4 105 263 264 110 4 263 157 265 111 4 156 266 160 268 4 266 108 161 269 4 157 267 268 112 4 267 109 269 113 4 170 270 166 272 4 270 144 167 273 4 171 271 272 148 4 271 145 273 149 4 136 274 168 276 4 274 170 169 277 4 137 275 276 146 4 275 171 277 147 4 172 278 116 280 4 278 142 117 281 4 173 279 280 166 4 279 143 281 167 4 134 282 114 284 4 282 172 115 285 4 135 283 284 168 4 283 173 285 169 4 166 286 162 288 4 286 160 163 289 4 167 287 288 140 4 287 161 289 141 4 128 290 164 292 4 290 166 165 293 4 129 291 292 138 4 291 167 293 139 4 168 294 132 296 4 294 158 133 297 4 169 295 296 162 4 295 159 297 163 4 126 298 130 300 4 298 168 131 301 4 127 299 300 164 4 299 169 301 165 4 162 302 170 304 4 302 152 171 305 4 163 303 304 156 4 303 153 305 157 4 120 306 172 308 4 306 162 173 309 4 121 307 308 154 4 307 163 309 155 4 164 310 124 312 4 310 150 125 313 4 165 311 312 170 4 311 151 313 171 4 118 314 122 316 4 314 164 123 317 4 119 315 316 172 4 315 165 317 173 4 322 237 320 251 4 305 322 321 250 4 323 236 287 320 4 304 323 286 321 4 320 269 318 235 4 273 320 319 234 4 321 268 303 318 4 272 321 302 319 4 318 253 322 267 4 289 318 323 266 4 319 252 271 322 4 288 319 270 323 4 328 305 326 243 4 221 328 327 242 4 329 304 295 326 4 220 329 294 327 4 326 265 324 303 4 277 326 325 302 4 327 264 219 324 4 276 327 218 325 4 324 245 328 263 4 297 324 329 262 4 325 244 275 328 4 296 325 274 329 4 334 233 332 287 4 309 334 333 286 4 335 232 187 332 4 308 335 186 333 4 332 261 330 231 4 281 332 331 230 4 333 260 307 330 4 280 333 306 331 4 330 289 334 259 4 189 330 335 258 4 331 288 279 334 4 188 331 278 335 4 340 309 338 295 4 217 340 339 294 4 341 308 179 338 4 216 341 178 339 4 338 257 336 307 4 285 338 337 306 4 339 256 215 336 4 284 339 214 337 4 336 297 340 255 4 181 336 341 254 4 337 296 283 340 4 180 337 282 341 4 346 229 344 247 4 313 346 345 246 4 347 228 291 344 4 312 347 290 345 4 344 273 342 227 4 205 344 343 226 4 345 272 311 342 4 204 345 310 343 4 342 249 346 271 4 293 342 347 270 4 343 248 203 346 4 292 343 202 347 4 352 313 350 239 4 213 352 351 238 4 353 312 299 350 4 212 353 298 351 4 350 277 348 311 4 201 350 349 310 4 351 276 211 348 4 200 351 210 349 4 348 241 352 275 4 301 348 353 274 4 349 240 199 352 4 300 349 198 353 4 358 225 356 291 4 317 358 357 290 4 359 224 183 356 4 316 359 182 357 4 356 281 354 223 4 197 356 355 222 4 357 280 315 354 4 196 357 314 355 4 354 293 358 279 4 185 354 359 278 4 355 292 195 358 4 184 355 194 359 4 364 317 362 299 4 209 364 363 298 4 365 316 175 362 4 208 365 174 363 4 362 285 360 315 4 193 362 361 314 4 363 284 207 360 4 192 363 206 361 4 360 301 364 283 4 177 360 365 282 4 361 300 191 364 4 176 361 190 365 564 0 6 8 10 12 14 16 18 20 22 24 26 28 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 282 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 282 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 282 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 282 0 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 255 255 255 255 255 255 255 255 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 185 186 1 0 0 282 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1128 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 366 0 0 0 2 0 1 2 0 2 2 0 4 2 1 3 2 1 5 2 2 3 2 2 6 2 3 7 2 4 5 2 4 6 2 5 7 2 6 7 2 0 8 2 8 1 2 0 9 2 9 2 2 0 10 2 10 4 2 1 11 2 11 3 2 1 12 2 12 5 2 2 13 2 13 3 2 2 14 2 14 6 2 3 15 2 15 7 2 4 16 2 16 5 2 4 17 2 17 6 2 5 18 2 18 7 2 6 19 2 19 7 2 10 20 2 20 12 2 8 20 2 20 16 2 8 21 2 21 13 2 9 21 2 21 11 2 9 22 2 22 17 2 10 22 2 22 14 2 11 23 2 23 18 2 12 23 2 23 15 2 14 24 2 24 15 2 13 24 2 24 19 2 16 25 2 25 19 2 17 25 2 25 18 2 26 25 2 21 26 2 26 23 2 22 26 2 26 24 2 20 26 2 0 27 2 27 8 2 8 28 2 28 1 2 0 29 2 29 9 2 9 30 2 30 2 2 0 31 2 31 10 2 10 32 2 32 4 2 1 33 2 33 11 2 11 34 2 34 3 2 1 35 2 35 12 2 12 36 2 36 5 2 2 37 2 37 13 2 13 38 2 38 3 2 2 39 2 39 14 2 14 40 2 40 6 2 3 41 2 41 15 2 15 42 2 42 7 2 4 43 2 43 16 2 16 44 2 44 5 2 4 45 2 45 17 2 17 46 2 46 6 2 5 47 2 47 18 2 18 48 2 48 7 2 6 49 2 49 19 2 19 50 2 50 7 2 10 51 2 51 20 2 20 52 2 52 12 2 8 53 2 53 20 2 20 54 2 54 16 2 8 55 2 55 21 2 21 56 2 56 13 2 9 57 2 57 21 2 21 58 2 58 11 2 9 59 2 59 22 2 22 60 2 60 17 2 10 61 2 61 22 2 22 62 2 62 14 2 11 63 2 63 23 2 23 64 2 64 18 2 12 65 2 65 23 2 23 66 2 66 15 2 14 67 2 67 24 2 24 68 2 68 15 2 13 69 2 69 24 2 24 70 2 70 19 2 16 71 2 71 25 2 25 72 2 72 19 2 17 73 2 73 25 2 25 74 2 74 18 2 26 75 2 75 25 2 21 76 2 76 26 2 26 77 2 77 23 2 22 78 2 78 26 2 26 79 2 79 24 2 20 80 2 80 26 2 31 81 2 81 53 2 27 81 2 81 51 2 32 82 2 82 54 2 51 82 2 82 43 2 53 83 2 83 35 2 28 83 2 83 52 2 54 84 2 84 36 2 52 84 2 84 44 2 27 85 2 85 57 2 29 85 2 85 55 2 28 86 2 86 58 2 55 86 2 86 33 2 57 87 2 87 37 2 30 87 2 87 56 2 58 88 2 88 38 2 56 88 2 88 34 2 29 89 2 89 61 2 31 89 2 89 59 2 30 90 2 90 62 2 59 90 2 90 39 2 61 91 2 91 45 2 32 91 2 91 60 2 62 92 2 92 46 2 60 92 2 92 40 2 33 93 2 93 65 2 35 93 2 93 63 2 34 94 2 94 66 2 63 94 2 94 41 2 65 95 2 95 47 2 36 95 2 95 64 2 66 96 2 96 48 2 64 96 2 96 42 2 39 97 2 97 69 2 37 97 2 97 67 2 40 98 2 98 70 2 67 98 2 98 49 2 69 99 2 99 41 2 38 99 2 99 68 2 70 100 2 100 42 2 68 100 2 100 50 2 43 101 2 101 73 2 45 101 2 101 71 2 44 102 2 102 74 2 71 102 2 102 47 2 73 103 2 103 49 2 46 103 2 103 72 2 74 104 2 104 50 2 72 104 2 104 48 2 77 105 2 105 68 2 79 105 2 105 66 2 78 106 2 106 67 2 62 106 2 106 79 2 52 107 2 107 77 2 80 107 2 107 65 2 51 108 2 108 78 2 61 108 2 108 80 2 75 109 2 109 64 2 77 109 2 109 74 2 76 110 2 110 63 2 58 110 2 110 77 2 60 111 2 111 75 2 78 111 2 111 73 2 59 112 2 112 76 2 57 112 2 112 78 2 79 113 2 113 72 2 75 113 2 113 70 2 80 114 2 114 71 2 54 114 2 114 75 2 56 115 2 115 79 2 76 115 2 115 69 2 55 116 2 116 80 2 53 116 2 116 76 2 124 104 2 105 124 2 124 96 2 113 124 2 124 100 2 109 124 2 123 103 2 106 123 2 123 113 2 92 123 2 123 98 2 111 123 2 122 102 2 107 122 2 122 95 2 114 122 2 122 109 2 84 122 2 121 101 2 108 121 2 121 114 2 91 121 2 121 111 2 82 121 2 120 105 2 88 120 2 120 94 2 115 120 2 120 99 2 110 120 2 119 106 2 87 119 2 119 115 2 90 119 2 119 97 2 112 119 2 118 107 2 86 118 2 118 93 2 116 118 2 118 110 2 83 118 2 117 108 2 85 117 2 117 116 2 89 117 2 117 112 2 81 117 366 0 12 14 16 18 20 22 24 26 28 30 32 34 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 366 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 366 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 366 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 317 318 1 0 0 366 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 125 0 0 0 0 0 3 0 0 0 3 1 0 0 3 0 1 0 3 1 1 0 3 0 0 1 3 1 0 1 3 0 1 1 3 1 1 1 3 0.5 0 0 3 0 0.5 0 3 0 0 0.5 3 1 0.5 0 3 1 0 0.5 3 0.5 1 0 3 0 1 0.5 3 1 1 0.5 3 0.5 0 1 3 0 0.5 1 3 1 0.5 1 3 0.5 1 1 3 0.5 0 0.5 3 0.5 0.5 0 3 0 0.5 0.5 3 1 0.5 0.5 3 0.5 1 0.5 3 0.5 0.5 1 3 0.5 0.50000000000000011 0.50000000000000011 3 0.25 0 0 3 0.75 0 0 3 0 0.25 0 3 0 0.75 0 3 0 0 0.25 3 0 0 0.75 3 1 0.25 0 3 1 0.75 0 3 1 0 0.25 3 1 0 0.75 3 0.25 1 0 3 0.75 1 0 3 0 1 0.25 3 0 1 0.75 3 1 1 0.25 3 1 1 0.75 3 0.25 0 1 3 0.75 0 1 3 0 0.25 1 3 0 0.75 1 3 1 0.25 1 3 1 0.75 1 3 0.25 1 1 3 0.75 1 1 3 0.25 0 0.5 3 0.75 0 0.5 3 0.5 0 0.25 3 0.5 0 0.75 3 0.5 0.25 0 3 0.5 0.75 0 3 0.25 0.5 0 3 0.75 0.5 0 3 0 0.5 0.25 3 0 0.5 0.75 3 0 0.25 0.5 3 0 0.75 0.5 3 1 0.5 0.25 3 1 0.5 0.75 3 1 0.25 0.5 3 1 0.75 0.5 3 0.25 1 0.5 3 0.75 1 0.5 3 0.5 1 0.25 3 0.5 1 0.75 3 0.5 0.25 1 3 0.5 0.75 1 3 0.25 0.5 1 3 0.75 0.5 1 3 0.5 0.5 0.75 3 0.5 0.5 0.25000000000000006 3 0.75 0.5 0.5 3 0.25 0.5 0.5 3 0.5 0.75 0.5 3 0.5 0.25000000000000006 0.5 3 0.25 0 0.25 3 0.25 0 0.75 3 0.75 0 0.25 3 0.75 0 0.75 3 0.25 0.25 0 3 0.75 0.25 0 3 0.25 0.75 0 3 0.75 0.75 0 3 0 0.25 0.25 3 0 0.75 0.25 3 0 0.25 0.75 3 0 0.75 0.75 3 1 0.25 0.25 3 1 0.75 0.25 3 1 0.25 0.75 3 1 0.75 0.75 3 0.25 1 0.25 3 0.25 1 0.75 3 0.75 1 0.25 3 0.75 1 0.75 3 0.25 0.25 1 3 0.75 0.25 1 3 0.25 0.75 1 3 0.75 0.75 1 3 0.75 0.75 0.5 3 0.25 0.75 0.5 3 0.75 0.25 0.5 3 0.25 0.25 0.5 3 0.75 0.5 0.75 3 0.75 0.5 0.25 3 0.25 0.5 0.75 3 0.25 0.5 0.25 3 0.5 0.75 0.75 3 0.5 0.25 0.75 3 0.5 0.75 0.25 3 0.5 0.25 0.25 3 0.25 0.25000000000000006 0.25000000000000006 3 0.75 0.25000000000000006 0.25000000000000006 3 0.25 0.75 0.25000000000000006 3 0.75 0.75 0.25000000000000006 3 0.25 0.25000000000000006 0.75 3 0.75 0.25000000000000006 0.75 3 0.25 0.75 0.75 3 0.75 0.75 0.75 125 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 366 3 0 0 0 0 300 3 0 0 0 0 282 3 0 0 0 0 240 3 0 0 0 0 73 3 0 1 8 64 64 3 0 0 0 64 0 + +DEAL::OK