* This function does not perform the renumbering on the DoFHandler DoFs but
* only returns the renumbering vector.
*
- * See the Cuthill_McKee() function for an explanation of the arguments.
+ * If a valid level is passed as parameter, the renumbering vector for this
+ * grid level is returned.
+ * See the Cuthill_McKee() function for an explanation of the other arguments.
*/
template <int dim, int spacedim>
void
const bool reversed_numbering = false,
const bool use_constraints = false,
const std::vector<types::global_dof_index> &starting_indices =
- std::vector<types::global_dof_index>());
+ std::vector<types::global_dof_index>(),
+ const unsigned int level = numbers::invalid_unsigned_int);
/**
* Renumber the degrees of freedom according to the Cuthill-McKee method,
extract_locally_active_dofs(const DoFHandler<dim, spacedim> &dof_handler,
IndexSet & dof_set);
+ /**
+ * Same function as above, but on a certain level in a multigrid scenarion.
+ * Strictly speaking we don't talk about active DoFs in such a multigrid
+ * scenario. Nevertheless this function returns all DoF indices that live on
+ * all locally owned cells (including on the interface to ghost cells) on a
+ * certain level, as the function above.
+ */
+ template <int dim, int spacedim>
+ void
+ extract_locally_active_level_dofs(
+ const DoFHandler<dim, spacedim> &dof_handler,
+ IndexSet & dof_set,
+ const unsigned int level);
+
+
/**
* Extract the set of global DoF indices that are active on the current
* DoFHandler. For regular DoFHandlers, these are all DoF indices, but for
#include <deal.II/lac/sparsity_pattern.h>
#include <deal.II/lac/sparsity_tools.h>
+#include <deal.II/multigrid/mg_constrained_dofs.h>
#include <deal.II/multigrid/mg_tools.h>
DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
const DoFHandler<dim, spacedim> & dof_handler,
const bool reversed_numbering,
const bool use_constraints,
- const std::vector<types::global_dof_index> &starting_indices)
+ const std::vector<types::global_dof_index> &starting_indices,
+ const unsigned int level)
{
+ const bool reorder_level_dofs =
+ (level == numbers::invalid_unsigned_int) ? false : true;
+
// see if there is anything to do at all or whether we can skip the work on
// this processor
if (dof_handler.locally_owned_dofs().n_elements() == 0)
// note that if constraints are not requested, then the 'constraints'
// object will be empty and using it has no effect
IndexSet locally_relevant_dofs;
- DoFTools::extract_locally_relevant_dofs(dof_handler, locally_relevant_dofs);
+ IndexSet const *ptr_locally_owned_dofs;
+ if (reorder_level_dofs == false)
+ {
+ DoFTools::extract_locally_relevant_dofs(dof_handler,
+ locally_relevant_dofs);
+ ptr_locally_owned_dofs = &dof_handler.locally_owned_dofs();
+ }
+ else
+ {
+ Assert(dof_handler.n_dofs(level) != numbers::invalid_dof_index,
+ ExcDoFHandlerNotInitialized());
+ DoFTools::extract_locally_relevant_level_dofs(dof_handler,
+ level,
+ locally_relevant_dofs);
+ ptr_locally_owned_dofs = &dof_handler.locally_owned_mg_dofs(level);
+ }
AffineConstraints<double> constraints;
if (use_constraints)
{
+ // regarding constraints is not yet implemented on a level basis
+ Assert(reorder_level_dofs == false, ExcNotImplemented());
+
constraints.reinit(locally_relevant_dofs);
DoFTools::make_hanging_node_constraints(dof_handler, constraints);
}
constraints.close();
- const IndexSet &locally_owned_dofs = dof_handler.locally_owned_dofs();
-
// see if we can get away with the sequential algorithm
- if (locally_owned_dofs.n_elements() == locally_owned_dofs.size())
+ if (ptr_locally_owned_dofs->n_elements() == ptr_locally_owned_dofs->size())
{
- AssertDimension(new_indices.size(), dof_handler.n_dofs());
+ AssertDimension(new_indices.size(),
+ ptr_locally_owned_dofs->n_elements());
- DynamicSparsityPattern dsp(dof_handler.n_dofs(), dof_handler.n_dofs());
- DoFTools::make_sparsity_pattern(dof_handler, dsp, constraints);
+ DynamicSparsityPattern dsp(ptr_locally_owned_dofs->size(),
+ ptr_locally_owned_dofs->size());
+ if (reorder_level_dofs == false)
+ {
+ DoFTools::make_sparsity_pattern(dof_handler, dsp, constraints);
+ }
+ else
+ {
+ MGTools::make_sparsity_pattern(dof_handler, dsp, level);
+ }
SparsityTools::reorder_Cuthill_McKee(dsp,
new_indices,
// relevant. in the process, also check that all indices
// really belong to at least the locally relevant ones
IndexSet locally_active_dofs;
- DoFTools::extract_locally_active_dofs(dof_handler, locally_active_dofs);
+ if (reorder_level_dofs == false)
+ {
+ DoFTools::extract_locally_active_dofs(dof_handler,
+ locally_active_dofs);
+ }
+ else
+ {
+ DoFTools::extract_locally_active_level_dofs(dof_handler,
+ locally_active_dofs,
+ level);
+ }
bool needs_locally_active = false;
for (const auto starting_index : starting_indices)
{
if ((needs_locally_active ==
/* previously already set to */ true) ||
- (locally_owned_dofs.is_element(starting_index) == false))
+ (ptr_locally_owned_dofs->is_element(starting_index) == false))
{
Assert(
locally_active_dofs.is_element(starting_index),
}
const IndexSet index_set_to_use =
- (needs_locally_active ? locally_active_dofs : locally_owned_dofs);
+ (needs_locally_active ? locally_active_dofs :
+ *ptr_locally_owned_dofs);
+
+ // if this process doesn't own any DoFs (on this level), there is
+ // nothing to do
+ if (index_set_to_use.n_elements() == 0)
+ return;
// then create first the global sparsity pattern, and then the local
// sparsity pattern from the global one by transferring its indices to
// processor-local (locally owned or locally active) index space
- DynamicSparsityPattern dsp(dof_handler.n_dofs(),
- dof_handler.n_dofs(),
+ DynamicSparsityPattern dsp(index_set_to_use.size(),
+ index_set_to_use.size(),
index_set_to_use);
- DoFTools::make_sparsity_pattern(dof_handler, dsp, constraints);
+ if (reorder_level_dofs == false)
+ {
+ DoFTools::make_sparsity_pattern(dof_handler, dsp, constraints);
+ }
+ else
+ {
+ MGTools::make_sparsity_pattern(dof_handler, dsp, level);
+ }
DynamicSparsityPattern local_sparsity(index_set_to_use.n_elements(),
index_set_to_use.n_elements());
index_set_to_use.index_within_set(starting_indices[i]);
// then do the renumbering on the locally owned portion
- AssertDimension(new_indices.size(), locally_owned_dofs.n_elements());
+ AssertDimension(new_indices.size(),
+ ptr_locally_owned_dofs->n_elements());
std::vector<types::global_dof_index> my_new_indices(
index_set_to_use.n_elements());
SparsityTools::reorder_Cuthill_McKee(local_sparsity,
{
// first step: figure out which DoF indices to eliminate
IndexSet active_but_not_owned_dofs = locally_active_dofs;
- active_but_not_owned_dofs.subtract_set(locally_owned_dofs);
+ active_but_not_owned_dofs.subtract_set(*ptr_locally_owned_dofs);
std::set<types::global_dof_index> erase_these_indices;
for (const auto p : active_but_not_owned_dofs)
translate_indices[i] = next_new_index;
++next_new_index;
}
- Assert(next_new_index == locally_owned_dofs.n_elements(),
+ Assert(next_new_index == ptr_locally_owned_dofs->n_elements(),
ExcInternalError());
}
// and then do the renumbering of the result of the
// Cuthill-McKee algorithm above, right into the output array
new_indices.clear();
- new_indices.reserve(locally_owned_dofs.n_elements());
+ new_indices.reserve(ptr_locally_owned_dofs->n_elements());
for (const auto &p : my_new_indices)
if (p != numbers::invalid_dof_index)
{
ExcInternalError());
new_indices.push_back(translate_indices[p]);
}
- Assert(new_indices.size() == locally_owned_dofs.n_elements(),
+ Assert(new_indices.size() == ptr_locally_owned_dofs->n_elements(),
ExcInternalError());
}
else
// indices of the locally-owned DoFs. so that's where we get the
// indices
for (types::global_dof_index &new_index : new_indices)
- new_index = locally_owned_dofs.nth_index_in_set(new_index);
+ new_index = ptr_locally_owned_dofs->nth_index_in_set(new_index);
}
}
Assert(dof_handler.n_dofs(level) != numbers::invalid_dof_index,
ExcDoFHandlerNotInitialized());
- // make the connection graph
- DynamicSparsityPattern dsp(dof_handler.n_dofs(level),
- dof_handler.n_dofs(level));
- MGTools::make_sparsity_pattern(dof_handler, dsp, level);
-
- std::vector<types::global_dof_index> new_indices(dsp.n_rows());
- SparsityTools::reorder_Cuthill_McKee(dsp, new_indices, starting_indices);
+ std::vector<types::global_dof_index> new_indices(
+ dof_handler.locally_owned_mg_dofs(level).n_elements(),
+ numbers::invalid_dof_index);
- if (reversed_numbering)
- new_indices = Utilities::reverse_permutation(new_indices);
+ compute_Cuthill_McKee(new_indices,
+ dof_handler,
+ reversed_numbering,
+ false,
+ starting_indices,
+ level);
// actually perform renumbering;
// this is dimension specific and
const DoFHandler<deal_II_dimension, deal_II_space_dimension> &,
const bool,
const bool,
- const std::vector<types::global_dof_index> &);
+ const std::vector<types::global_dof_index> &,
+ const unsigned int);
template void
component_wise<deal_II_dimension, deal_II_space_dimension>(
+ template <int dim, int spacedim>
+ void
+ extract_locally_active_level_dofs(
+ const DoFHandler<dim, spacedim> &dof_handler,
+ IndexSet & dof_set,
+ const unsigned int level)
+ {
+ // collect all the locally owned dofs
+ dof_set = dof_handler.locally_owned_mg_dofs(level);
+
+ // add the DoF on the adjacent ghost cells to the IndexSet, cache them
+ // in a set. need to check each dof manually because we can't be sure
+ // that the dof range of locally_owned_dofs is really contiguous.
+ std::vector<types::global_dof_index> dof_indices;
+ std::set<types::global_dof_index> global_dof_indices;
+
+ typename DoFHandler<dim, spacedim>::level_cell_iterator
+ cell = dof_handler.begin_mg(level),
+ endc = dof_handler.end_mg(level);
+ for (; cell != endc; ++cell)
+ if (cell->is_locally_owned_on_level())
+ {
+ dof_indices.resize(cell->get_fe().n_dofs_per_cell());
+ cell->get_mg_dof_indices(dof_indices);
+
+ for (const types::global_dof_index dof_index : dof_indices)
+ if (!dof_set.is_element(dof_index))
+ global_dof_indices.insert(dof_index);
+ }
+
+ dof_set.add_indices(global_dof_indices.begin(), global_dof_indices.end());
+
+ dof_set.compress();
+ }
+
+
+
template <int dim, int spacedim>
void
extract_locally_relevant_dofs(const DoFHandler<dim, spacedim> &dof_handler,
& dof_handler,
IndexSet &dof_set);
+ template void
+ extract_locally_active_level_dofs<deal_II_dimension,
+ deal_II_space_dimension>(
+ const DoFHandler<deal_II_dimension, deal_II_space_dimension>
+ & dof_handler,
+ IndexSet & dof_set,
+ const unsigned int level);
+
template std::vector<IndexSet>
locally_owned_dofs_per_component<deal_II_dimension,
deal_II_space_dimension>(
unsigned int myid = Utilities::MPI::this_mpi_process(MPI_COMM_WORLD);
unsigned int nprocs = Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD);
- parallel::distributed::Triangulation<dim> tr(MPI_COMM_WORLD);
+ parallel::distributed::Triangulation<dim> tr(
+ MPI_COMM_WORLD,
+ Triangulation<dim>::limit_level_difference_at_vertices,
+ parallel::distributed::Triangulation<dim>::construct_multigrid_hierarchy);
GridGenerator::hyper_cube(tr, -1.0, 1.0);
tr.refine_global(8 - 2 * dim);
static const FE_Q<dim> fe(1);
dofh.distribute_dofs(fe);
- std::vector<types::global_dof_index> renumbering(
- dofh.locally_owned_dofs().n_elements());
- DoFRenumbering::compute_Cuthill_McKee(renumbering, dofh);
-
- // send everything to processor 0 for output
- std::vector<types::global_dof_index> complete_renumbering(dofh.n_dofs());
- std::copy(renumbering.begin(),
- renumbering.end(),
- complete_renumbering.begin());
- unsigned int offset = renumbering.size();
- const std::vector<IndexSet> dofs_per_proc =
- Utilities::MPI::all_gather(MPI_COMM_WORLD, dofh.locally_owned_dofs());
- for (unsigned int i = 1; i < nprocs; ++i)
- {
- if (myid == i)
- MPI_Send(&renumbering[0],
- renumbering.size(),
- Utilities::MPI::internal::mpi_type_id(
- &complete_renumbering[0]),
- 0,
- i,
- MPI_COMM_WORLD);
- else if (myid == 0)
- MPI_Recv(&complete_renumbering[offset],
- dofs_per_proc[i].n_elements(),
- Utilities::MPI::internal::mpi_type_id(
- &complete_renumbering[0]),
- i,
- i,
- MPI_COMM_WORLD,
- MPI_STATUSES_IGNORE);
- offset += dofs_per_proc[i].n_elements();
- }
+ dofh.distribute_mg_dofs();
- if (myid == 0)
+ for (unsigned int level = 0; level <= tr.n_levels(); ++level)
{
- AssertDimension(offset, complete_renumbering.size());
- for (unsigned int i = 0; i < complete_renumbering.size(); ++i)
- deallog << complete_renumbering[i] << std::endl;
+ types::global_dof_index n_dofs{0};
+ std::vector<types::global_dof_index> renumbering;
+ if (level < tr.n_levels())
+ {
+ n_dofs = dofh.n_dofs(level);
+ renumbering = std::vector<types::global_dof_index>(
+ dofh.locally_owned_mg_dofs(level).n_elements());
+ DoFRenumbering::compute_Cuthill_McKee(
+ renumbering,
+ dofh,
+ false,
+ false,
+ std::vector<types::global_dof_index>(),
+ level);
+ }
+ else
+ {
+ n_dofs = dofh.n_dofs();
+ renumbering = std::vector<types::global_dof_index>(
+ dofh.locally_owned_dofs().n_elements());
+ DoFRenumbering::compute_Cuthill_McKee(renumbering, dofh);
+ }
+
+ // send everything to processor 0 for output
+ std::vector<types::global_dof_index> complete_renumbering(n_dofs);
+ std::copy(renumbering.begin(),
+ renumbering.end(),
+ complete_renumbering.begin());
+ unsigned int offset = renumbering.size();
+ std::vector<IndexSet> dofs_per_proc;
+ if (level < tr.n_levels())
+ {
+ dofs_per_proc =
+ Utilities::MPI::all_gather(MPI_COMM_WORLD,
+ dofh.locally_owned_mg_dofs(level));
+ }
+ else
+ {
+ dofs_per_proc = Utilities::MPI::all_gather(MPI_COMM_WORLD,
+ dofh.locally_owned_dofs());
+ }
+
+ for (unsigned int i = 1; i < nprocs; ++i)
+ {
+ if (myid == i)
+ MPI_Send(&renumbering[0],
+ renumbering.size(),
+ Utilities::MPI::internal::mpi_type_id(
+ &complete_renumbering[0]),
+ 0,
+ i,
+ MPI_COMM_WORLD);
+ else if (myid == 0)
+ MPI_Recv(&complete_renumbering[offset],
+ dofs_per_proc[i].n_elements(),
+ Utilities::MPI::internal::mpi_type_id(
+ &complete_renumbering[0]),
+ i,
+ i,
+ MPI_COMM_WORLD,
+ MPI_STATUSES_IGNORE);
+ offset += dofs_per_proc[i].n_elements();
+ }
+
+ if (myid == 0)
+ {
+ AssertDimension(offset, complete_renumbering.size());
+ if (level < tr.n_levels())
+ {
+ deallog << "On level: " << level << std::endl;
+ }
+ else
+ {
+ deallog << "On active cells:" << std::endl;
+ }
+ for (unsigned int i = 0; i < complete_renumbering.size(); ++i)
+ deallog << complete_renumbering[i] << std::endl;
+ }
}
}
+DEAL:0:2d::On level: 0
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::On level: 1
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::7
+DEAL:0:2d::5
+DEAL:0:2d::8
+DEAL:0:2d::6
+DEAL:0:2d::On level: 2
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::19
+DEAL:0:2d::12
+DEAL:0:2d::20
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::21
+DEAL:0:2d::22
+DEAL:0:2d::15
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::18
+DEAL:0:2d::On level: 3
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::18
+DEAL:0:2d::12
+DEAL:0:2d::19
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::20
+DEAL:0:2d::21
+DEAL:0:2d::15
+DEAL:0:2d::22
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::25
+DEAL:0:2d::27
+DEAL:0:2d::36
+DEAL:0:2d::38
+DEAL:0:2d::28
+DEAL:0:2d::39
+DEAL:0:2d::49
+DEAL:0:2d::51
+DEAL:0:2d::64
+DEAL:0:2d::67
+DEAL:0:2d::52
+DEAL:0:2d::68
+DEAL:0:2d::29
+DEAL:0:2d::40
+DEAL:0:2d::30
+DEAL:0:2d::41
+DEAL:0:2d::53
+DEAL:0:2d::69
+DEAL:0:2d::54
+DEAL:0:2d::70
+DEAL:0:2d::26
+DEAL:0:2d::31
+DEAL:0:2d::32
+DEAL:0:2d::37
+DEAL:0:2d::42
+DEAL:0:2d::43
+DEAL:0:2d::33
+DEAL:0:2d::34
+DEAL:0:2d::44
+DEAL:0:2d::45
+DEAL:0:2d::50
+DEAL:0:2d::55
+DEAL:0:2d::56
+DEAL:0:2d::65
+DEAL:0:2d::71
+DEAL:0:2d::72
+DEAL:0:2d::57
+DEAL:0:2d::58
+DEAL:0:2d::73
+DEAL:0:2d::74
+DEAL:0:2d::35
+DEAL:0:2d::46
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::59
+DEAL:0:2d::75
+DEAL:0:2d::60
+DEAL:0:2d::76
+DEAL:0:2d::61
+DEAL:0:2d::62
+DEAL:0:2d::77
+DEAL:0:2d::78
+DEAL:0:2d::63
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::66
+DEAL:0:2d::On level: 4
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::18
+DEAL:0:2d::12
+DEAL:0:2d::19
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::20
+DEAL:0:2d::21
+DEAL:0:2d::15
+DEAL:0:2d::22
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::25
+DEAL:0:2d::27
+DEAL:0:2d::36
+DEAL:0:2d::38
+DEAL:0:2d::28
+DEAL:0:2d::39
+DEAL:0:2d::49
+DEAL:0:2d::51
+DEAL:0:2d::64
+DEAL:0:2d::66
+DEAL:0:2d::52
+DEAL:0:2d::67
+DEAL:0:2d::29
+DEAL:0:2d::40
+DEAL:0:2d::30
+DEAL:0:2d::41
+DEAL:0:2d::53
+DEAL:0:2d::68
+DEAL:0:2d::54
+DEAL:0:2d::69
+DEAL:0:2d::26
+DEAL:0:2d::31
+DEAL:0:2d::32
+DEAL:0:2d::37
+DEAL:0:2d::42
+DEAL:0:2d::43
+DEAL:0:2d::33
+DEAL:0:2d::34
+DEAL:0:2d::44
+DEAL:0:2d::45
+DEAL:0:2d::50
+DEAL:0:2d::55
+DEAL:0:2d::56
+DEAL:0:2d::65
+DEAL:0:2d::70
+DEAL:0:2d::71
+DEAL:0:2d::57
+DEAL:0:2d::58
+DEAL:0:2d::72
+DEAL:0:2d::73
+DEAL:0:2d::35
+DEAL:0:2d::46
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::59
+DEAL:0:2d::74
+DEAL:0:2d::60
+DEAL:0:2d::75
+DEAL:0:2d::61
+DEAL:0:2d::62
+DEAL:0:2d::76
+DEAL:0:2d::77
+DEAL:0:2d::63
+DEAL:0:2d::78
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::81
+DEAL:0:2d::83
+DEAL:0:2d::100
+DEAL:0:2d::102
+DEAL:0:2d::84
+DEAL:0:2d::103
+DEAL:0:2d::121
+DEAL:0:2d::123
+DEAL:0:2d::144
+DEAL:0:2d::146
+DEAL:0:2d::124
+DEAL:0:2d::147
+DEAL:0:2d::85
+DEAL:0:2d::104
+DEAL:0:2d::86
+DEAL:0:2d::105
+DEAL:0:2d::125
+DEAL:0:2d::148
+DEAL:0:2d::126
+DEAL:0:2d::149
+DEAL:0:2d::169
+DEAL:0:2d::171
+DEAL:0:2d::196
+DEAL:0:2d::198
+DEAL:0:2d::172
+DEAL:0:2d::199
+DEAL:0:2d::225
+DEAL:0:2d::227
+DEAL:0:2d::256
+DEAL:0:2d::259
+DEAL:0:2d::228
+DEAL:0:2d::260
+DEAL:0:2d::173
+DEAL:0:2d::200
+DEAL:0:2d::174
+DEAL:0:2d::201
+DEAL:0:2d::229
+DEAL:0:2d::261
+DEAL:0:2d::230
+DEAL:0:2d::262
+DEAL:0:2d::87
+DEAL:0:2d::106
+DEAL:0:2d::88
+DEAL:0:2d::107
+DEAL:0:2d::127
+DEAL:0:2d::150
+DEAL:0:2d::128
+DEAL:0:2d::151
+DEAL:0:2d::89
+DEAL:0:2d::108
+DEAL:0:2d::90
+DEAL:0:2d::109
+DEAL:0:2d::129
+DEAL:0:2d::152
+DEAL:0:2d::130
+DEAL:0:2d::153
+DEAL:0:2d::175
+DEAL:0:2d::202
+DEAL:0:2d::176
+DEAL:0:2d::203
+DEAL:0:2d::231
+DEAL:0:2d::263
+DEAL:0:2d::232
+DEAL:0:2d::264
+DEAL:0:2d::177
+DEAL:0:2d::204
+DEAL:0:2d::178
+DEAL:0:2d::205
+DEAL:0:2d::233
+DEAL:0:2d::265
+DEAL:0:2d::234
+DEAL:0:2d::266
+DEAL:0:2d::82
+DEAL:0:2d::91
+DEAL:0:2d::92
+DEAL:0:2d::101
+DEAL:0:2d::110
+DEAL:0:2d::111
+DEAL:0:2d::93
+DEAL:0:2d::94
+DEAL:0:2d::112
+DEAL:0:2d::113
+DEAL:0:2d::122
+DEAL:0:2d::131
+DEAL:0:2d::132
+DEAL:0:2d::145
+DEAL:0:2d::154
+DEAL:0:2d::155
+DEAL:0:2d::133
+DEAL:0:2d::134
+DEAL:0:2d::156
+DEAL:0:2d::157
+DEAL:0:2d::95
+DEAL:0:2d::96
+DEAL:0:2d::114
+DEAL:0:2d::115
+DEAL:0:2d::97
+DEAL:0:2d::98
+DEAL:0:2d::116
+DEAL:0:2d::117
+DEAL:0:2d::135
+DEAL:0:2d::136
+DEAL:0:2d::158
+DEAL:0:2d::159
+DEAL:0:2d::137
+DEAL:0:2d::138
+DEAL:0:2d::160
+DEAL:0:2d::161
+DEAL:0:2d::170
+DEAL:0:2d::179
+DEAL:0:2d::180
+DEAL:0:2d::197
+DEAL:0:2d::206
+DEAL:0:2d::207
+DEAL:0:2d::181
+DEAL:0:2d::182
+DEAL:0:2d::208
+DEAL:0:2d::209
+DEAL:0:2d::226
+DEAL:0:2d::235
+DEAL:0:2d::236
+DEAL:0:2d::257
+DEAL:0:2d::267
+DEAL:0:2d::268
+DEAL:0:2d::237
+DEAL:0:2d::238
+DEAL:0:2d::269
+DEAL:0:2d::270
+DEAL:0:2d::183
+DEAL:0:2d::184
+DEAL:0:2d::210
+DEAL:0:2d::211
+DEAL:0:2d::185
+DEAL:0:2d::186
+DEAL:0:2d::212
+DEAL:0:2d::213
+DEAL:0:2d::239
+DEAL:0:2d::240
+DEAL:0:2d::271
+DEAL:0:2d::272
+DEAL:0:2d::241
+DEAL:0:2d::242
+DEAL:0:2d::273
+DEAL:0:2d::274
+DEAL:0:2d::99
+DEAL:0:2d::118
+DEAL:0:2d::119
+DEAL:0:2d::120
+DEAL:0:2d::139
+DEAL:0:2d::162
+DEAL:0:2d::140
+DEAL:0:2d::163
+DEAL:0:2d::141
+DEAL:0:2d::142
+DEAL:0:2d::164
+DEAL:0:2d::165
+DEAL:0:2d::143
+DEAL:0:2d::166
+DEAL:0:2d::167
+DEAL:0:2d::168
+DEAL:0:2d::187
+DEAL:0:2d::214
+DEAL:0:2d::188
+DEAL:0:2d::215
+DEAL:0:2d::243
+DEAL:0:2d::275
+DEAL:0:2d::244
+DEAL:0:2d::276
+DEAL:0:2d::189
+DEAL:0:2d::216
+DEAL:0:2d::190
+DEAL:0:2d::217
+DEAL:0:2d::245
+DEAL:0:2d::277
+DEAL:0:2d::246
+DEAL:0:2d::278
+DEAL:0:2d::191
+DEAL:0:2d::192
+DEAL:0:2d::218
+DEAL:0:2d::219
+DEAL:0:2d::193
+DEAL:0:2d::194
+DEAL:0:2d::220
+DEAL:0:2d::221
+DEAL:0:2d::247
+DEAL:0:2d::248
+DEAL:0:2d::279
+DEAL:0:2d::280
+DEAL:0:2d::249
+DEAL:0:2d::250
+DEAL:0:2d::281
+DEAL:0:2d::282
+DEAL:0:2d::195
+DEAL:0:2d::222
+DEAL:0:2d::223
+DEAL:0:2d::224
+DEAL:0:2d::251
+DEAL:0:2d::283
+DEAL:0:2d::252
+DEAL:0:2d::284
+DEAL:0:2d::253
+DEAL:0:2d::254
+DEAL:0:2d::285
+DEAL:0:2d::286
+DEAL:0:2d::255
+DEAL:0:2d::287
+DEAL:0:2d::288
+DEAL:0:2d::258
+DEAL:0:2d::On level: 5
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::18
+DEAL:0:2d::12
+DEAL:0:2d::19
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::20
+DEAL:0:2d::21
+DEAL:0:2d::15
+DEAL:0:2d::22
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::25
+DEAL:0:2d::27
+DEAL:0:2d::36
+DEAL:0:2d::38
+DEAL:0:2d::28
+DEAL:0:2d::39
+DEAL:0:2d::49
+DEAL:0:2d::51
+DEAL:0:2d::64
+DEAL:0:2d::67
+DEAL:0:2d::52
+DEAL:0:2d::68
+DEAL:0:2d::29
+DEAL:0:2d::40
+DEAL:0:2d::30
+DEAL:0:2d::41
+DEAL:0:2d::53
+DEAL:0:2d::69
+DEAL:0:2d::54
+DEAL:0:2d::70
+DEAL:0:2d::26
+DEAL:0:2d::31
+DEAL:0:2d::32
+DEAL:0:2d::37
+DEAL:0:2d::42
+DEAL:0:2d::43
+DEAL:0:2d::33
+DEAL:0:2d::34
+DEAL:0:2d::44
+DEAL:0:2d::45
+DEAL:0:2d::50
+DEAL:0:2d::55
+DEAL:0:2d::56
+DEAL:0:2d::65
+DEAL:0:2d::71
+DEAL:0:2d::72
+DEAL:0:2d::57
+DEAL:0:2d::58
+DEAL:0:2d::73
+DEAL:0:2d::74
+DEAL:0:2d::35
+DEAL:0:2d::46
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::59
+DEAL:0:2d::75
+DEAL:0:2d::60
+DEAL:0:2d::76
+DEAL:0:2d::61
+DEAL:0:2d::62
+DEAL:0:2d::77
+DEAL:0:2d::78
+DEAL:0:2d::63
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::66
+DEAL:0:2d::On active cells:
DEAL:0:2d::0
DEAL:0:2d::1
DEAL:0:2d::2
DEAL:0:2d::231
DEAL:0:2d::236
DEAL:0:2d::237
+DEAL:0:3d::On level: 0
+DEAL:0:3d::0
+DEAL:0:3d::1
+DEAL:0:3d::2
+DEAL:0:3d::3
+DEAL:0:3d::4
+DEAL:0:3d::5
+DEAL:0:3d::6
+DEAL:0:3d::7
+DEAL:0:3d::On level: 1
+DEAL:0:3d::0
+DEAL:0:3d::1
+DEAL:0:3d::2
+DEAL:0:3d::4
+DEAL:0:3d::3
+DEAL:0:3d::5
+DEAL:0:3d::6
+DEAL:0:3d::7
+DEAL:0:3d::8
+DEAL:0:3d::15
+DEAL:0:3d::16
+DEAL:0:3d::24
+DEAL:0:3d::9
+DEAL:0:3d::17
+DEAL:0:3d::18
+DEAL:0:3d::25
+DEAL:0:3d::10
+DEAL:0:3d::19
+DEAL:0:3d::11
+DEAL:0:3d::20
+DEAL:0:3d::21
+DEAL:0:3d::26
+DEAL:0:3d::12
+DEAL:0:3d::22
+DEAL:0:3d::13
+DEAL:0:3d::23
+DEAL:0:3d::14
+DEAL:0:3d::On level: 2
+DEAL:0:3d::0
+DEAL:0:3d::1
+DEAL:0:3d::2
+DEAL:0:3d::4
+DEAL:0:3d::3
+DEAL:0:3d::5
+DEAL:0:3d::6
+DEAL:0:3d::7
+DEAL:0:3d::8
+DEAL:0:3d::11
+DEAL:0:3d::12
+DEAL:0:3d::20
+DEAL:0:3d::9
+DEAL:0:3d::13
+DEAL:0:3d::14
+DEAL:0:3d::21
+DEAL:0:3d::15
+DEAL:0:3d::22
+DEAL:0:3d::10
+DEAL:0:3d::16
+DEAL:0:3d::17
+DEAL:0:3d::23
+DEAL:0:3d::18
+DEAL:0:3d::24
+DEAL:0:3d::19
+DEAL:0:3d::25
+DEAL:0:3d::26
+DEAL:0:3d::27
+DEAL:0:3d::30
+DEAL:0:3d::31
+DEAL:0:3d::45
+DEAL:0:3d::64
+DEAL:0:3d::71
+DEAL:0:3d::72
+DEAL:0:3d::98
+DEAL:0:3d::32
+DEAL:0:3d::46
+DEAL:0:3d::73
+DEAL:0:3d::99
+DEAL:0:3d::33
+DEAL:0:3d::47
+DEAL:0:3d::74
+DEAL:0:3d::100
+DEAL:0:3d::48
+DEAL:0:3d::101
+DEAL:0:3d::28
+DEAL:0:3d::34
+DEAL:0:3d::35
+DEAL:0:3d::49
+DEAL:0:3d::36
+DEAL:0:3d::50
+DEAL:0:3d::65
+DEAL:0:3d::75
+DEAL:0:3d::76
+DEAL:0:3d::102
+DEAL:0:3d::77
+DEAL:0:3d::103
+DEAL:0:3d::37
+DEAL:0:3d::51
+DEAL:0:3d::52
+DEAL:0:3d::78
+DEAL:0:3d::104
+DEAL:0:3d::105
+DEAL:0:3d::38
+DEAL:0:3d::53
+DEAL:0:3d::79
+DEAL:0:3d::106
+DEAL:0:3d::80
+DEAL:0:3d::107
+DEAL:0:3d::66
+DEAL:0:3d::81
+DEAL:0:3d::54
+DEAL:0:3d::108
+DEAL:0:3d::109
+DEAL:0:3d::82
+DEAL:0:3d::29
+DEAL:0:3d::39
+DEAL:0:3d::40
+DEAL:0:3d::55
+DEAL:0:3d::41
+DEAL:0:3d::56
+DEAL:0:3d::42
+DEAL:0:3d::57
+DEAL:0:3d::58
+DEAL:0:3d::67
+DEAL:0:3d::83
+DEAL:0:3d::84
+DEAL:0:3d::110
+DEAL:0:3d::85
+DEAL:0:3d::111
+DEAL:0:3d::86
+DEAL:0:3d::112
+DEAL:0:3d::113
+DEAL:0:3d::43
+DEAL:0:3d::59
+DEAL:0:3d::87
+DEAL:0:3d::114
+DEAL:0:3d::60
+DEAL:0:3d::115
+DEAL:0:3d::88
+DEAL:0:3d::116
+DEAL:0:3d::68
+DEAL:0:3d::89
+DEAL:0:3d::117
+DEAL:0:3d::90
+DEAL:0:3d::44
+DEAL:0:3d::61
+DEAL:0:3d::62
+DEAL:0:3d::91
+DEAL:0:3d::118
+DEAL:0:3d::119
+DEAL:0:3d::92
+DEAL:0:3d::120
+DEAL:0:3d::121
+DEAL:0:3d::69
+DEAL:0:3d::93
+DEAL:0:3d::94
+DEAL:0:3d::63
+DEAL:0:3d::122
+DEAL:0:3d::123
+DEAL:0:3d::95
+DEAL:0:3d::124
+DEAL:0:3d::96
+DEAL:0:3d::97
+DEAL:0:3d::70
+DEAL:0:3d::On active cells:
DEAL:0:3d::0
DEAL:0:3d::1
DEAL:0:3d::2
+DEAL:0:2d::On level: 0
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::On level: 1
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::5
+DEAL:0:2d::6
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::On level: 2
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::7
+DEAL:0:2d::5
+DEAL:0:2d::8
+DEAL:0:2d::6
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::10
+DEAL:0:2d::12
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::15
+DEAL:0:2d::17
+DEAL:0:2d::19
+DEAL:0:2d::16
+DEAL:0:2d::18
+DEAL:0:2d::20
+DEAL:0:2d::21
+DEAL:0:2d::22
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::On level: 3
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::19
+DEAL:0:2d::12
+DEAL:0:2d::20
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::21
+DEAL:0:2d::22
+DEAL:0:2d::15
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::18
+DEAL:0:2d::25
+DEAL:0:2d::26
+DEAL:0:2d::27
+DEAL:0:2d::28
+DEAL:0:2d::29
+DEAL:0:2d::31
+DEAL:0:2d::30
+DEAL:0:2d::32
+DEAL:0:2d::34
+DEAL:0:2d::35
+DEAL:0:2d::33
+DEAL:0:2d::36
+DEAL:0:2d::37
+DEAL:0:2d::39
+DEAL:0:2d::41
+DEAL:0:2d::43
+DEAL:0:2d::40
+DEAL:0:2d::38
+DEAL:0:2d::44
+DEAL:0:2d::42
+DEAL:0:2d::45
+DEAL:0:2d::46
+DEAL:0:2d::49
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::51
+DEAL:0:2d::55
+DEAL:0:2d::61
+DEAL:0:2d::59
+DEAL:0:2d::63
+DEAL:0:2d::50
+DEAL:0:2d::52
+DEAL:0:2d::53
+DEAL:0:2d::54
+DEAL:0:2d::56
+DEAL:0:2d::57
+DEAL:0:2d::60
+DEAL:0:2d::64
+DEAL:0:2d::58
+DEAL:0:2d::62
+DEAL:0:2d::65
+DEAL:0:2d::66
+DEAL:0:2d::67
+DEAL:0:2d::68
+DEAL:0:2d::69
+DEAL:0:2d::74
+DEAL:0:2d::71
+DEAL:0:2d::77
+DEAL:0:2d::70
+DEAL:0:2d::72
+DEAL:0:2d::75
+DEAL:0:2d::78
+DEAL:0:2d::73
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::76
+DEAL:0:2d::On level: 4
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::18
+DEAL:0:2d::12
+DEAL:0:2d::19
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::20
+DEAL:0:2d::21
+DEAL:0:2d::15
+DEAL:0:2d::22
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::25
+DEAL:0:2d::27
+DEAL:0:2d::36
+DEAL:0:2d::38
+DEAL:0:2d::28
+DEAL:0:2d::39
+DEAL:0:2d::49
+DEAL:0:2d::51
+DEAL:0:2d::64
+DEAL:0:2d::67
+DEAL:0:2d::52
+DEAL:0:2d::68
+DEAL:0:2d::29
+DEAL:0:2d::40
+DEAL:0:2d::30
+DEAL:0:2d::41
+DEAL:0:2d::53
+DEAL:0:2d::69
+DEAL:0:2d::54
+DEAL:0:2d::70
+DEAL:0:2d::26
+DEAL:0:2d::31
+DEAL:0:2d::32
+DEAL:0:2d::37
+DEAL:0:2d::42
+DEAL:0:2d::43
+DEAL:0:2d::33
+DEAL:0:2d::34
+DEAL:0:2d::44
+DEAL:0:2d::45
+DEAL:0:2d::50
+DEAL:0:2d::55
+DEAL:0:2d::56
+DEAL:0:2d::65
+DEAL:0:2d::71
+DEAL:0:2d::72
+DEAL:0:2d::57
+DEAL:0:2d::58
+DEAL:0:2d::73
+DEAL:0:2d::74
+DEAL:0:2d::35
+DEAL:0:2d::46
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::59
+DEAL:0:2d::75
+DEAL:0:2d::60
+DEAL:0:2d::76
+DEAL:0:2d::61
+DEAL:0:2d::62
+DEAL:0:2d::77
+DEAL:0:2d::78
+DEAL:0:2d::63
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::66
+DEAL:0:2d::81
+DEAL:0:2d::82
+DEAL:0:2d::83
+DEAL:0:2d::84
+DEAL:0:2d::85
+DEAL:0:2d::87
+DEAL:0:2d::86
+DEAL:0:2d::88
+DEAL:0:2d::90
+DEAL:0:2d::92
+DEAL:0:2d::89
+DEAL:0:2d::93
+DEAL:0:2d::91
+DEAL:0:2d::94
+DEAL:0:2d::97
+DEAL:0:2d::99
+DEAL:0:2d::95
+DEAL:0:2d::96
+DEAL:0:2d::100
+DEAL:0:2d::101
+DEAL:0:2d::98
+DEAL:0:2d::102
+DEAL:0:2d::106
+DEAL:0:2d::108
+DEAL:0:2d::103
+DEAL:0:2d::109
+DEAL:0:2d::117
+DEAL:0:2d::119
+DEAL:0:2d::130
+DEAL:0:2d::131
+DEAL:0:2d::120
+DEAL:0:2d::132
+DEAL:0:2d::104
+DEAL:0:2d::110
+DEAL:0:2d::105
+DEAL:0:2d::111
+DEAL:0:2d::121
+DEAL:0:2d::133
+DEAL:0:2d::122
+DEAL:0:2d::134
+DEAL:0:2d::107
+DEAL:0:2d::112
+DEAL:0:2d::118
+DEAL:0:2d::123
+DEAL:0:2d::113
+DEAL:0:2d::114
+DEAL:0:2d::124
+DEAL:0:2d::125
+DEAL:0:2d::135
+DEAL:0:2d::139
+DEAL:0:2d::145
+DEAL:0:2d::147
+DEAL:0:2d::140
+DEAL:0:2d::141
+DEAL:0:2d::148
+DEAL:0:2d::149
+DEAL:0:2d::115
+DEAL:0:2d::116
+DEAL:0:2d::126
+DEAL:0:2d::127
+DEAL:0:2d::128
+DEAL:0:2d::136
+DEAL:0:2d::129
+DEAL:0:2d::137
+DEAL:0:2d::142
+DEAL:0:2d::143
+DEAL:0:2d::150
+DEAL:0:2d::151
+DEAL:0:2d::144
+DEAL:0:2d::138
+DEAL:0:2d::152
+DEAL:0:2d::146
+DEAL:0:2d::153
+DEAL:0:2d::154
+DEAL:0:2d::157
+DEAL:0:2d::155
+DEAL:0:2d::156
+DEAL:0:2d::159
+DEAL:0:2d::162
+DEAL:0:2d::169
+DEAL:0:2d::164
+DEAL:0:2d::171
+DEAL:0:2d::158
+DEAL:0:2d::160
+DEAL:0:2d::161
+DEAL:0:2d::163
+DEAL:0:2d::165
+DEAL:0:2d::166
+DEAL:0:2d::167
+DEAL:0:2d::172
+DEAL:0:2d::168
+DEAL:0:2d::173
+DEAL:0:2d::178
+DEAL:0:2d::189
+DEAL:0:2d::180
+DEAL:0:2d::191
+DEAL:0:2d::203
+DEAL:0:2d::217
+DEAL:0:2d::211
+DEAL:0:2d::219
+DEAL:0:2d::181
+DEAL:0:2d::192
+DEAL:0:2d::182
+DEAL:0:2d::193
+DEAL:0:2d::212
+DEAL:0:2d::220
+DEAL:0:2d::213
+DEAL:0:2d::221
+DEAL:0:2d::170
+DEAL:0:2d::174
+DEAL:0:2d::175
+DEAL:0:2d::179
+DEAL:0:2d::183
+DEAL:0:2d::184
+DEAL:0:2d::176
+DEAL:0:2d::177
+DEAL:0:2d::185
+DEAL:0:2d::186
+DEAL:0:2d::190
+DEAL:0:2d::194
+DEAL:0:2d::195
+DEAL:0:2d::202
+DEAL:0:2d::204
+DEAL:0:2d::205
+DEAL:0:2d::196
+DEAL:0:2d::197
+DEAL:0:2d::206
+DEAL:0:2d::207
+DEAL:0:2d::187
+DEAL:0:2d::198
+DEAL:0:2d::188
+DEAL:0:2d::199
+DEAL:0:2d::214
+DEAL:0:2d::222
+DEAL:0:2d::215
+DEAL:0:2d::223
+DEAL:0:2d::200
+DEAL:0:2d::201
+DEAL:0:2d::208
+DEAL:0:2d::209
+DEAL:0:2d::216
+DEAL:0:2d::224
+DEAL:0:2d::210
+DEAL:0:2d::218
+DEAL:0:2d::225
+DEAL:0:2d::226
+DEAL:0:2d::227
+DEAL:0:2d::228
+DEAL:0:2d::229
+DEAL:0:2d::234
+DEAL:0:2d::231
+DEAL:0:2d::236
+DEAL:0:2d::230
+DEAL:0:2d::232
+DEAL:0:2d::235
+DEAL:0:2d::237
+DEAL:0:2d::233
+DEAL:0:2d::238
+DEAL:0:2d::239
+DEAL:0:2d::240
+DEAL:0:2d::241
+DEAL:0:2d::250
+DEAL:0:2d::243
+DEAL:0:2d::252
+DEAL:0:2d::261
+DEAL:0:2d::274
+DEAL:0:2d::263
+DEAL:0:2d::277
+DEAL:0:2d::244
+DEAL:0:2d::253
+DEAL:0:2d::245
+DEAL:0:2d::254
+DEAL:0:2d::264
+DEAL:0:2d::278
+DEAL:0:2d::265
+DEAL:0:2d::279
+DEAL:0:2d::242
+DEAL:0:2d::246
+DEAL:0:2d::251
+DEAL:0:2d::255
+DEAL:0:2d::247
+DEAL:0:2d::248
+DEAL:0:2d::256
+DEAL:0:2d::257
+DEAL:0:2d::262
+DEAL:0:2d::266
+DEAL:0:2d::275
+DEAL:0:2d::280
+DEAL:0:2d::267
+DEAL:0:2d::268
+DEAL:0:2d::281
+DEAL:0:2d::282
+DEAL:0:2d::249
+DEAL:0:2d::258
+DEAL:0:2d::259
+DEAL:0:2d::260
+DEAL:0:2d::269
+DEAL:0:2d::283
+DEAL:0:2d::270
+DEAL:0:2d::284
+DEAL:0:2d::271
+DEAL:0:2d::272
+DEAL:0:2d::285
+DEAL:0:2d::286
+DEAL:0:2d::273
+DEAL:0:2d::287
+DEAL:0:2d::288
+DEAL:0:2d::276
+DEAL:0:2d::On level: 5
+DEAL:0:2d::0
+DEAL:0:2d::1
+DEAL:0:2d::2
+DEAL:0:2d::3
+DEAL:0:2d::4
+DEAL:0:2d::6
+DEAL:0:2d::5
+DEAL:0:2d::7
+DEAL:0:2d::8
+DEAL:0:2d::9
+DEAL:0:2d::11
+DEAL:0:2d::16
+DEAL:0:2d::19
+DEAL:0:2d::12
+DEAL:0:2d::20
+DEAL:0:2d::10
+DEAL:0:2d::13
+DEAL:0:2d::14
+DEAL:0:2d::17
+DEAL:0:2d::21
+DEAL:0:2d::22
+DEAL:0:2d::15
+DEAL:0:2d::23
+DEAL:0:2d::24
+DEAL:0:2d::18
+DEAL:0:2d::25
+DEAL:0:2d::26
+DEAL:0:2d::27
+DEAL:0:2d::28
+DEAL:0:2d::29
+DEAL:0:2d::31
+DEAL:0:2d::30
+DEAL:0:2d::32
+DEAL:0:2d::34
+DEAL:0:2d::35
+DEAL:0:2d::33
+DEAL:0:2d::36
+DEAL:0:2d::37
+DEAL:0:2d::39
+DEAL:0:2d::41
+DEAL:0:2d::43
+DEAL:0:2d::40
+DEAL:0:2d::38
+DEAL:0:2d::44
+DEAL:0:2d::42
+DEAL:0:2d::45
+DEAL:0:2d::46
+DEAL:0:2d::49
+DEAL:0:2d::47
+DEAL:0:2d::48
+DEAL:0:2d::51
+DEAL:0:2d::55
+DEAL:0:2d::61
+DEAL:0:2d::59
+DEAL:0:2d::63
+DEAL:0:2d::50
+DEAL:0:2d::52
+DEAL:0:2d::53
+DEAL:0:2d::54
+DEAL:0:2d::56
+DEAL:0:2d::57
+DEAL:0:2d::60
+DEAL:0:2d::64
+DEAL:0:2d::58
+DEAL:0:2d::62
+DEAL:0:2d::65
+DEAL:0:2d::66
+DEAL:0:2d::67
+DEAL:0:2d::68
+DEAL:0:2d::69
+DEAL:0:2d::74
+DEAL:0:2d::71
+DEAL:0:2d::77
+DEAL:0:2d::70
+DEAL:0:2d::72
+DEAL:0:2d::75
+DEAL:0:2d::78
+DEAL:0:2d::73
+DEAL:0:2d::79
+DEAL:0:2d::80
+DEAL:0:2d::76
+DEAL:0:2d::On active cells:
DEAL:0:2d::0
DEAL:0:2d::1
DEAL:0:2d::2
DEAL:0:2d::337
DEAL:0:2d::333
DEAL:0:2d::334
+DEAL:0:3d::On level: 0
+DEAL:0:3d::0
+DEAL:0:3d::1
+DEAL:0:3d::2
+DEAL:0:3d::3
+DEAL:0:3d::4
+DEAL:0:3d::5
+DEAL:0:3d::6
+DEAL:0:3d::7
+DEAL:0:3d::On level: 1
+DEAL:0:3d::0
+DEAL:0:3d::4
+DEAL:0:3d::1
+DEAL:0:3d::5
+DEAL:0:3d::2
+DEAL:0:3d::6
+DEAL:0:3d::3
+DEAL:0:3d::7
+DEAL:0:3d::8
+DEAL:0:3d::9
+DEAL:0:3d::10
+DEAL:0:3d::11
+DEAL:0:3d::12
+DEAL:0:3d::14
+DEAL:0:3d::13
+DEAL:0:3d::15
+DEAL:0:3d::16
+DEAL:0:3d::17
+DEAL:0:3d::18
+DEAL:0:3d::20
+DEAL:0:3d::19
+DEAL:0:3d::21
+DEAL:0:3d::22
+DEAL:0:3d::23
+DEAL:0:3d::24
+DEAL:0:3d::25
+DEAL:0:3d::26
+DEAL:0:3d::On level: 2
+DEAL:0:3d::0
+DEAL:0:3d::1
+DEAL:0:3d::2
+DEAL:0:3d::4
+DEAL:0:3d::3
+DEAL:0:3d::5
+DEAL:0:3d::6
+DEAL:0:3d::7
+DEAL:0:3d::11
+DEAL:0:3d::20
+DEAL:0:3d::21
+DEAL:0:3d::26
+DEAL:0:3d::8
+DEAL:0:3d::12
+DEAL:0:3d::13
+DEAL:0:3d::22
+DEAL:0:3d::14
+DEAL:0:3d::23
+DEAL:0:3d::9
+DEAL:0:3d::15
+DEAL:0:3d::16
+DEAL:0:3d::24
+DEAL:0:3d::17
+DEAL:0:3d::25
+DEAL:0:3d::10
+DEAL:0:3d::18
+DEAL:0:3d::19
+DEAL:0:3d::27
+DEAL:0:3d::31
+DEAL:0:3d::32
+DEAL:0:3d::35
+DEAL:0:3d::36
+DEAL:0:3d::40
+DEAL:0:3d::41
+DEAL:0:3d::44
+DEAL:0:3d::28
+DEAL:0:3d::33
+DEAL:0:3d::37
+DEAL:0:3d::42
+DEAL:0:3d::29
+DEAL:0:3d::34
+DEAL:0:3d::38
+DEAL:0:3d::43
+DEAL:0:3d::30
+DEAL:0:3d::39
+DEAL:0:3d::45
+DEAL:0:3d::47
+DEAL:0:3d::48
+DEAL:0:3d::51
+DEAL:0:3d::55
+DEAL:0:3d::61
+DEAL:0:3d::46
+DEAL:0:3d::49
+DEAL:0:3d::50
+DEAL:0:3d::52
+DEAL:0:3d::56
+DEAL:0:3d::62
+DEAL:0:3d::53
+DEAL:0:3d::57
+DEAL:0:3d::58
+DEAL:0:3d::54
+DEAL:0:3d::59
+DEAL:0:3d::60
+DEAL:0:3d::63
+DEAL:0:3d::67
+DEAL:0:3d::69
+DEAL:0:3d::73
+DEAL:0:3d::64
+DEAL:0:3d::68
+DEAL:0:3d::70
+DEAL:0:3d::74
+DEAL:0:3d::65
+DEAL:0:3d::71
+DEAL:0:3d::66
+DEAL:0:3d::72
+DEAL:0:3d::75
+DEAL:0:3d::77
+DEAL:0:3d::78
+DEAL:0:3d::81
+DEAL:0:3d::85
+DEAL:0:3d::91
+DEAL:0:3d::83
+DEAL:0:3d::86
+DEAL:0:3d::87
+DEAL:0:3d::76
+DEAL:0:3d::79
+DEAL:0:3d::80
+DEAL:0:3d::82
+DEAL:0:3d::88
+DEAL:0:3d::92
+DEAL:0:3d::84
+DEAL:0:3d::89
+DEAL:0:3d::90
+DEAL:0:3d::93
+DEAL:0:3d::97
+DEAL:0:3d::99
+DEAL:0:3d::103
+DEAL:0:3d::94
+DEAL:0:3d::100
+DEAL:0:3d::95
+DEAL:0:3d::98
+DEAL:0:3d::101
+DEAL:0:3d::104
+DEAL:0:3d::96
+DEAL:0:3d::102
+DEAL:0:3d::105
+DEAL:0:3d::109
+DEAL:0:3d::113
+DEAL:0:3d::106
+DEAL:0:3d::110
+DEAL:0:3d::114
+DEAL:0:3d::107
+DEAL:0:3d::111
+DEAL:0:3d::115
+DEAL:0:3d::108
+DEAL:0:3d::112
+DEAL:0:3d::116
+DEAL:0:3d::117
+DEAL:0:3d::121
+DEAL:0:3d::118
+DEAL:0:3d::122
+DEAL:0:3d::119
+DEAL:0:3d::123
+DEAL:0:3d::120
+DEAL:0:3d::124
+DEAL:0:3d::On active cells:
DEAL:0:3d::0
DEAL:0:3d::1
DEAL:0:3d::2