From c49ebe001d8d66a805042c9d5b6bfd5f320ddb3b Mon Sep 17 00:00:00 2001 From: anley0408 Date: Thu, 19 Dec 2024 11:49:17 +0100 Subject: [PATCH 1/8] clean --- blank/main.cpp | 28 +++++++-------- opennn/embedding_layer.cpp | 2 +- opennn/statistics.cpp | 7 ++-- opennn/transformer.cpp | 72 ++++++++++++++++++++------------------ 4 files changed, 56 insertions(+), 53 deletions(-) diff --git a/blank/main.cpp b/blank/main.cpp index 7684f3949..d53c91d51 100644 --- a/blank/main.cpp +++ b/blank/main.cpp @@ -28,26 +28,26 @@ int main() { cout << "OpenNN. ViT Example." << endl; - Eigen::Tensor input(1, 1, 1, 1); - input.setRandom(); + // Eigen::Tensor input(1, 1, 1, 1); + // input.setRandom(); - Eigen::Tensor kernel(1, 1, 1, 1); - kernel.setRandom(); + // Eigen::Tensor kernel(1, 1, 1, 1); + // kernel.setRandom(); - Eigen::Tensor output(1, 1, 1, 1); + // Eigen::Tensor output(1, 1, 1, 1); - Eigen::array dims; - output = input.convolve(kernel, dims); + // Eigen::array dims; + // output = input.convolve(kernel, dims); - std::cout << "input:\n\n" << input << "\n\n"; - std::cout << "kernel:\n\n" << kernel << "\n\n"; - std::cout << "output:\n\n" << output << "\n\n"; + // std::cout << "input:\n\n" << input << "\n\n"; + // std::cout << "kernel:\n\n" << kernel << "\n\n"; + // std::cout << "output:\n\n" << output << "\n\n"; - const Index samples_number = get_random_index(1, 10); - const Index inputs_number = get_random_index(1, 10); - const Index targets_number = get_random_index(1, 10); - const Index neurons_number = get_random_index(1, 10); + // const Index samples_number = get_random_index(1, 10); + // const Index inputs_number = get_random_index(1, 10); + // const Index targets_number = get_random_index(1, 10); + // const Index neurons_number = get_random_index(1, 10); // Index a = 0; // Index b = 0; // Tensor truefalse = a == b; diff --git a/opennn/embedding_layer.cpp b/opennn/embedding_layer.cpp index a655194ac..9d2d73b38 100644 --- a/opennn/embedding_layer.cpp +++ b/opennn/embedding_layer.cpp @@ -23,7 +23,7 @@ EmbeddingLayer::EmbeddingLayer(const Index& new_vocabulary_size, layer_type = Type::Embedding; - name = "embedding_layer"; + name = new_name; } diff --git a/opennn/statistics.cpp b/opennn/statistics.cpp index 6e193bfc0..546c110d0 100644 --- a/opennn/statistics.cpp +++ b/opennn/statistics.cpp @@ -1023,9 +1023,9 @@ Histogram histogram(const Tensor& vector, const Index bins_number) } -/* + Histogram histogram(const Tensor& vector, const Index& bins_number) -{ +{/* const Index size = vector.dimension(0); Tensor minimums(bins_number); @@ -1128,9 +1128,10 @@ Histogram histogram(const Tensor& vector, const Index& bins_number) histogram.maximums = maximums; histogram.frequencies = frequencies; +*/ + Histogram histogram; return histogram; } -*/ Histogram histogram_centered(const Tensor& vector, const type& center, const Index& bins_number) { diff --git a/opennn/transformer.cpp b/opennn/transformer.cpp index af895c8f4..d553e1f3b 100644 --- a/opennn/transformer.cpp +++ b/opennn/transformer.cpp @@ -122,7 +122,7 @@ void Transformer::set(const Index& new_input_length, input_names.resize(input_length + context_length); // Embedding Layers - + add_layer(make_unique(new_input_dimensions, input_length, embedding_depth, @@ -138,7 +138,7 @@ void Transformer::set(const Index& new_input_length, embedding_depth, true, "context_embedding")); - + set_layer_inputs_indices("context_embedding", "context"); //context_embedding_layer->set_dropout_rate(dropout_rate); @@ -152,12 +152,12 @@ void Transformer::set(const Index& new_input_length, embedding_depth, heads_number, false, - "context_self_attention_" + to_string(i))); + "context_self_attention_" + to_string(i+1))); if(i == 0) set_layer_inputs_indices("context_self_attention_1", {"context_embedding", "context_embedding"}); else - set_layer_inputs_indices("context_self_attention_" + to_string(i), { "encoder_perceptron_normalization_" + to_string(i), "encoder_perceptron_normalization_" + to_string(i) }); + set_layer_inputs_indices("context_self_attention_" + to_string(i+1), { "encoder_perceptron_normalization_" + to_string(i), "encoder_perceptron_normalization_" + to_string(i) }); //context_self_attention_layer->set_dropout_rate(dropout_rate); @@ -165,52 +165,54 @@ void Transformer::set(const Index& new_input_length, add_layer(make_unique(context_length, embedding_depth, - "context_self_attention_addition_" + to_string(i))); + "context_self_attention_addition_" + to_string(i+1))); if(i == 0) - set_layer_inputs_indices("context_self_attention_addition_" + to_string(i), { "context_embedding", "context_self_attention_" + to_string(i) }); + set_layer_inputs_indices("context_self_attention_addition_" + to_string(i+1), { "context_embedding", "context_self_attention_" + to_string(i+1) }); else - set_layer_inputs_indices("context_self_attention_addition_" + to_string(i), { "encoder_perceptron_normalization_" + to_string(i), "context_self_attention_" + to_string(i) }); + set_layer_inputs_indices("context_self_attention_addition_" + to_string(i+1), { "encoder_perceptron_normalization_" + to_string(i), "context_self_attention_" + to_string(i+1) }); // Normalization add_layer(make_unique(context_length, embedding_depth, - "context_self_attention_normalization_" + to_string(i))); + "context_self_attention_normalization_" + to_string(i+1))); - set_layer_inputs_indices("context_self_attention_normalization_" + to_string(i), "context_self_attention_addition_" + to_string(i)); + set_layer_inputs_indices("context_self_attention_normalization_" + to_string(i+1), "context_self_attention_addition_" + to_string(i+1)); + // Perceptron + add_layer(make_unique(context_length, embedding_depth, perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear, - "encoder_internal_perceptron_" + to_string(i))); + "encoder_internal_perceptron_" + to_string(i+1))); - set_layer_inputs_indices("encoder_internal_perceptron_" + to_string(i), "context_self_attention_normalization_" + to_string(i)); + set_layer_inputs_indices("encoder_internal_perceptron_" + to_string(i+1), "context_self_attention_normalization_" + to_string(i+1)); // Perceptron - + add_layer(make_unique(context_length, perceptron_depth, embedding_depth, PerceptronLayer3D::ActivationFunction::HyperbolicTangent, - "encoder_external_perceptron_" + to_string(i))); + "encoder_external_perceptron_" + to_string(i+1))); - set_layer_inputs_indices("encoder_external_perceptron_" + to_string(i), "encoder_internal_perceptron_" + to_string(i)); + set_layer_inputs_indices("encoder_external_perceptron_" + to_string(i+1), "encoder_internal_perceptron_" + to_string(i+1)); // encoder_external_perceptron_layer->set_dropout_rate(dropout_rate); add_layer(make_unique(context_length, embedding_depth, - "encoder_perceptron_addition_" + to_string(i))); + "encoder_perceptron_addition_" + to_string(i+1))); - set_layer_inputs_indices("encoder_perceptron_addition_" + to_string(i), { "context_self_attention_normalization_" + to_string(i), "encoder_external_perceptron_" + to_string(i) }); + set_layer_inputs_indices("encoder_perceptron_addition_" + to_string(i+1), { "context_self_attention_normalization_" + to_string(i+1), "encoder_external_perceptron_" + to_string(i+1)}); add_layer(make_unique(context_length, embedding_depth, - "encoder_perceptron_normalization_" + to_string(i))); + "encoder_perceptron_normalization_" + to_string(i+1))); - set_layer_inputs_indices("encoder_perceptron_normalization_" + to_string(i), "encoder_perceptron_addition_" + to_string(i)); + set_layer_inputs_indices("encoder_perceptron_normalization_" + to_string(i+1), "encoder_perceptron_addition_" + to_string(i+1)); } // Decoder @@ -222,68 +224,68 @@ void Transformer::set(const Index& new_input_length, embedding_depth, heads_number, false, - "input_self_attention_" + to_string(i))); + "input_self_attention_" + to_string(i+1))); if(i == 0) set_layer_inputs_indices("input_self_attention_1", {"input_embedding", "input_embedding"}); else - set_layer_inputs_indices("input_self_attention_" + to_string(i), {"decoder_perceptron_normalization_" + to_string(i), "decoder_perceptron_normalization_" + to_string(i)}); + set_layer_inputs_indices("input_self_attention_" + to_string(i+1), {"decoder_perceptron_normalization_" + to_string(i), "decoder_perceptron_normalization_" + to_string(i)}); //input_self_attention_layer->set_dropout_rate(dropout_rate); add_layer(make_unique(input_length, embedding_depth, - "input_self_attention_addition_" + to_string(i))); + "input_self_attention_addition_" + to_string(i+1))); if(i == 0) - set_layer_inputs_indices("input_self_attention_addition_" + to_string(i), { "input_embedding", "input_self_attention_" + to_string(i) }); + set_layer_inputs_indices("input_self_attention_addition_" + to_string(i+1), { "input_embedding", "input_self_attention_" + to_string(i+1) }); else - set_layer_inputs_indices("input_self_attention_addition_" + to_string(i), { "decoder_perceptron_normalization_" + to_string(i), "input_self_attention_" + to_string(i+1) }); + set_layer_inputs_indices("input_self_attention_addition_" + to_string(i+1), { "decoder_perceptron_normalization_" + to_string(i), "input_self_attention_" + to_string(i+1) }); add_layer(make_unique(input_length, embedding_depth, - "input_self_attention_normalization_" + to_string(i))); + "input_self_attention_normalization_" + to_string(i+1))); - set_layer_inputs_indices("input_self_attention_normalization_" + to_string(i), "input_self_attention_addition_" + to_string(i)); + set_layer_inputs_indices("input_self_attention_normalization_" + to_string(i+1), "input_self_attention_addition_" + to_string(i+1)); add_layer(make_unique(input_length, context_length, embedding_depth, heads_number, false, - "cross_attention_" + to_string(i))); + "cross_attention_" + to_string(i+1))); - set_layer_inputs_indices("cross_attention_" + to_string(i), {"input_self_attention_normalization_" + to_string(i), "encoder_perceptron_normalization_" + to_string(layers_number)}); + set_layer_inputs_indices("cross_attention_" + to_string(i+1), {"input_self_attention_normalization_" + to_string(i+1), "encoder_perceptron_normalization_" + to_string(layers_number)}); //cross_attention_layer->set_dropout_rate(dropout_rate); add_layer(make_unique(input_length, embedding_depth, - "cross_attention_addition_" + to_string(i))); + "cross_attention_addition_" + to_string(i+1))); - set_layer_inputs_indices("cross_attention_addition_" + to_string(i), { "input_self_attention_normalization_" + to_string(i), "cross_attention_" + to_string(i) }); + set_layer_inputs_indices("cross_attention_addition_" + to_string(i+1), { "input_self_attention_normalization_" + to_string(i+1), "cross_attention_" + to_string(i+1) }); add_layer(make_unique(input_length, embedding_depth, - "cross_attention_normalization_" + to_string(i))); + "cross_attention_normalization_" + to_string(i+1))); - set_layer_inputs_indices("cross_attention_normalization_" + to_string(i), "cross_attention_addition_" + to_string(i)); + set_layer_inputs_indices("cross_attention_normalization_" + to_string(i+1), "cross_attention_addition_" + to_string(i+1)); add_layer(make_unique(input_length, embedding_depth, perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear, - "decoder_internal_perceptron_" + to_string(i))); + "decoder_internal_perceptron_" + to_string(i+1))); - set_layer_inputs_indices("decoder_internal_perceptron_" + to_string(i), "cross_attention_normalization_" + to_string(i)); + set_layer_inputs_indices("decoder_internal_perceptron_" + to_string(i+1), "cross_attention_normalization_" + to_string(i+1)); add_layer(make_unique(input_length, perceptron_depth, embedding_depth, PerceptronLayer3D::ActivationFunction::HyperbolicTangent, - "decoder_external_perceptron_" + to_string(i))); + "decoder_external_perceptron_" + to_string(i+1))); - set_layer_inputs_indices("decoder_external_perceptron_" + to_string(i), "decoder_internal_perceptron_" + to_string(i)); + set_layer_inputs_indices("decoder_external_perceptron_" + to_string(i+1), "decoder_internal_perceptron_" + to_string(i)); add_layer(make_unique(input_length, embedding_depth, From ac6a53fc3692bd2c022dfa648619867308540f37 Mon Sep 17 00:00:00 2001 From: RoberLopez Date: Thu, 19 Dec 2024 23:52:52 +0100 Subject: [PATCH 2/8] clean --- examples/translation/main.cpp | 8 +- opennn/embedding_layer.cpp | 56 +++---- opennn/multihead_attention_layer.cpp | 67 +++----- opennn/multihead_attention_layer.h | 11 +- opennn/neural_network.cpp | 18 +-- opennn/neural_network.h | 3 - opennn/transformer.cpp | 228 ++++++++++++--------------- opennn/transformer.h | 76 +++------ 8 files changed, 186 insertions(+), 281 deletions(-) diff --git a/examples/translation/main.cpp b/examples/translation/main.cpp index 9f28dbc91..678a7535c 100644 --- a/examples/translation/main.cpp +++ b/examples/translation/main.cpp @@ -45,12 +45,12 @@ int main() // cout< complexity = {embedding_depth, perceptron_depth, heads_number, number_of_layers}; + const vector complexity = {embedding_dimension, perceptron_depth, heads_number, number_of_layers}; // Neural network @@ -171,12 +171,12 @@ int main() const vector& completion_vocabulary = language_data_set.get_completion_vocabulary(); const vector& context_vocabulary = language_data_set.get_context_vocabulary(); - const Index embedding_depth = 64; + const Index embedding_dimension = 64; const Index perceptron_depth = 128; const Index heads_number = 4; const Index number_of_layers = 1; - const vector complexity = {embedding_depth, perceptron_depth, heads_number, number_of_layers}; + const vector complexity = {embedding_dimension, perceptron_depth, heads_number, number_of_layers}; const dimensions completion_dimensions = {language_data_set.get_completion_length(), language_data_set.get_completion_vocabulary_size()}; diff --git a/opennn/embedding_layer.cpp b/opennn/embedding_layer.cpp index bed6e9358..df96ff180 100644 --- a/opennn/embedding_layer.cpp +++ b/opennn/embedding_layer.cpp @@ -15,11 +15,11 @@ namespace opennn EmbeddingLayer::EmbeddingLayer(const Index& new_vocabulary_size, const Index& new_sequence_length, - const Index& new_embedding_size, + const Index& new_embedding_dimension, const bool& new_positional_encoding, const string& new_name) : Layer() { - set(new_vocabulary_size, new_sequence_length, new_embedding_size, new_positional_encoding, new_name); + set(new_vocabulary_size, new_sequence_length, new_embedding_dimension, new_positional_encoding, new_name); layer_type = Type::Embedding; @@ -83,13 +83,13 @@ Tensor EmbeddingLayer::get_parameters() const void EmbeddingLayer::set(const Index& new_vocabulary_size, const Index& new_sequence_length, - const Index& new_embedding_size, + const Index& new_embedding_dimension, const bool& new_positional_encoding, const string& new_name) { sequence_length = new_sequence_length; - embedding_weights.resize(new_vocabulary_size, new_embedding_size); + embedding_weights.resize(new_vocabulary_size, new_embedding_dimension); set_parameters_random(); @@ -117,11 +117,11 @@ void EmbeddingLayer::set_sequence_length(const Index& new_sequence_length) } -void EmbeddingLayer::set_embedding_size(const Index& new_embedding_size) +void EmbeddingLayer::set_embedding_size(const Index& new_embedding_dimension) { const Index vocabulary_size = get_vocabulary_size(); - embedding_weights.resize(vocabulary_size, new_embedding_size); + embedding_weights.resize(vocabulary_size, new_embedding_dimension); set_parameters_random(); } @@ -158,21 +158,20 @@ void EmbeddingLayer::set_parameters(const Tensor& new_parameters, const void EmbeddingLayer::set_parameters_random() { + if (embedding_weights.size() == 0) return; + const type minimum = type(-0.05); const type maximum = type(0.05); // First row must be 0s because input value 0 is padding - if(embedding_weights.dimension(0) != 0) - { - embedding_weights.chip(0, 0).setConstant(0); + embedding_weights.chip(0, 0).setConstant(0); - #pragma omp parallel for + #pragma omp parallel for - for(Index i = 1; i < embedding_weights.dimension(0); i++) - for(Index j = 0; j < embedding_weights.dimension(1); j++) - embedding_weights(i, j) = minimum + (maximum - minimum)* type(rand() / (RAND_MAX + 1.0)); - } + for (Index i = 1; i < embedding_weights.dimension(0); i++) + for (Index j = 0; j < embedding_weights.dimension(1); j++) + embedding_weights(i, j) = get_random_type(minimum, maximum); } @@ -187,6 +186,7 @@ void EmbeddingLayer::dropout(Tensor& outputs) const const type scaling_factor = type(1) / (type(1) - dropout_rate); #pragma omp parallel for + for(Index i = 0; i < outputs.size(); i++) outputs(i) = get_random_type(type(0), type(1)) < dropout_rate ? 0 @@ -215,6 +215,8 @@ void EmbeddingLayer::forward_propagate(const vector>& in const TensorMap> inputs = tensor_map_2(input_pairs[0]); + const Index samples_number = inputs.dimension(0); + EmbeddingLayerForwardPropagation* embedding_layer_forward_propagation = static_cast(layer_forward_propagation.get()); @@ -228,8 +230,8 @@ void EmbeddingLayer::forward_propagate(const vector>& in const Tensor& positional_encoding = embedding_layer_forward_propagation->positional_encoding; - for(Index batch_element = 0; batch_element < outputs.dimension(0); batch_element++) - outputs.chip(batch_element, 0).device(*thread_pool_device) += positional_encoding; + for(Index sample_index = 0; sample_index < samples_number; sample_index++) + outputs.chip(sample_index, 0).device(*thread_pool_device) += positional_encoding; } if(dropout_rate > 0 && is_training) @@ -348,9 +350,9 @@ pair EmbeddingLayerForwardPropagation::get_outputs_pair() con const Index sequence_length = embedding_layer->get_sequence_length(); - const Index embedding_size = embedding_layer->get_embedding_dimension(); + const Index embedding_dimension = embedding_layer->get_embedding_dimension(); - return {(type*)outputs.data(), {batch_samples_number, sequence_length, embedding_size}}; + return {(type*)outputs.data(), {batch_samples_number, sequence_length, embedding_dimension}}; } @@ -364,11 +366,11 @@ void EmbeddingLayerForwardPropagation::set(const Index& new_batch_samples_number const Index sequence_length = embedding_layer->get_sequence_length(); - const Index embedding_size = embedding_layer->get_embedding_dimension(); + const Index embedding_dimension = embedding_layer->get_embedding_dimension(); // Outputs - outputs.resize(batch_samples_number, sequence_length, embedding_size); + outputs.resize(batch_samples_number, sequence_length, embedding_dimension); if(embedding_layer->get_positional_encoding()) build_positional_encoding_matrix(); @@ -393,17 +395,17 @@ void EmbeddingLayerForwardPropagation::build_positional_encoding_matrix() const EmbeddingLayer* embedding_layer = static_cast(layer); const Index inputs_number = embedding_layer->get_sequence_length(); - const Index embedding_size = embedding_layer->get_embedding_dimension(); + const Index embedding_dimension = embedding_layer->get_embedding_dimension(); - positional_encoding.resize(inputs_number, embedding_size); + positional_encoding.resize(inputs_number, embedding_dimension); positional_encoding.setZero(); - const type half_depth = type(embedding_size) / 2; + const type half_depth = type(embedding_dimension) / 2; #pragma omp parallel for for(Index i = 0; i < inputs_number; i++) - for(Index j = 0; j < Index(embedding_size); j++) + for(Index j = 0; j < Index(embedding_dimension); j++) positional_encoding(i, j) = (j < Index(half_depth)) ? sin(i / pow(10000, j / half_depth)) : cos(i / pow(10000, (j - Index(half_depth)) / half_depth)); @@ -434,11 +436,11 @@ void EmbeddingLayerBackPropagation::set(const Index& new_batch_samples_number, L batch_samples_number = new_batch_samples_number; const Index sequence_length = embedding_layer->get_sequence_length(); - const Index embedding_size = embedding_layer->get_embedding_dimension(); + const Index embedding_dimension = embedding_layer->get_embedding_dimension(); const Index vocabulary_size = embedding_layer->get_vocabulary_size(); - sample_deltas.resize(sequence_length, embedding_size); - embedding_weights_derivatives.resize(vocabulary_size, embedding_size); + sample_deltas.resize(sequence_length, embedding_dimension); + embedding_weights_derivatives.resize(vocabulary_size, embedding_dimension); } diff --git a/opennn/multihead_attention_layer.cpp b/opennn/multihead_attention_layer.cpp index c77cf5fc3..5d9a3d036 100644 --- a/opennn/multihead_attention_layer.cpp +++ b/opennn/multihead_attention_layer.cpp @@ -60,6 +60,14 @@ Index MultiheadAttentionLayer::get_weights_depth() const } +// @todo + +dimensions MultiheadAttentionLayer::get_input_dimensions() const +{ + throw runtime_error("XXX"); +} + + dimensions MultiheadAttentionLayer::get_output_dimensions() const { return { input_size, depth }; @@ -210,32 +218,6 @@ void MultiheadAttentionLayer::set_parameters(const Tensor& new_paramete } -void MultiheadAttentionLayer::set_input_size(const Index& new_input_size) -{ - input_size = new_input_size; -} - - -void MultiheadAttentionLayer::set_context_size(const Index& new_context_size) -{ - context_size = new_context_size; -} - - -void MultiheadAttentionLayer::set_depth(const Index& new_depth) -{ - depth = new_depth; -} - - -void MultiheadAttentionLayer::set_heads_number(const Index& new_heads_number) -{ - heads_number = new_heads_number; - - //set_weights(); -} - - void MultiheadAttentionLayer::set_parameters_random() { const type minimum = type(-0.2); @@ -366,26 +348,27 @@ void MultiheadAttentionLayer::calculate_transformation(const Tensor& in const Index batch_size = input.dimension(0); const Index variables_number = input.dimension(1); - type* weights_data = (type*)weights.data(); - type* biases_data = (type*)biases.data(); type* transformed_input_data = transformed_input.data(); for(Index head_index = 0; head_index < heads_number; head_index++) { - type* head_weights_data = weights_data + head_index * depth * hidden_depth; - type* head_biases_data = biases_data + head_index * hidden_depth; - type* head_transformed_input_data = transformed_input_data + head_index * batch_size * variables_number * hidden_depth; + const TensorMap> head_weights((type*)weights.data() + head_index * depth * hidden_depth, + depth, + hidden_depth); + + const TensorMap> head_biases((type*)biases.data() + head_index * hidden_depth, + hidden_depth); + - const TensorMap> head_weights(head_weights_data, depth, hidden_depth); - const TensorMap> head_biases(head_biases_data, hidden_depth); + type* head_transformed_input_data = transformed_input_data + head_index * batch_size * variables_number * hidden_depth; for(Index sample_index = 0; sample_index < batch_size; sample_index++) { sample_matrix = input.chip(sample_index, 0); - type* sample_transformed_input_data = head_transformed_input_data + sample_index * variables_number * hidden_depth; - - TensorMap> sample_transformed_input(sample_transformed_input_data, variables_number, hidden_depth); + TensorMap> sample_transformed_input(head_transformed_input_data + sample_index * variables_number * hidden_depth, + variables_number, + hidden_depth); sample_transformed_input.device(*thread_pool_device) = sample_matrix.contract(head_weights, A_B); @@ -788,11 +771,9 @@ void MultiheadAttentionLayer::back_propagate(const vector&, const Index& index = 0) override; - void set_input_size(const Index&); - void set_context_size(const Index&); - void set_depth(const Index&); - void set_heads_number(const Index&); - void set_parameters_random() override; void set_parameters_glorot(); void set_parameters_constant(const type&) override; diff --git a/opennn/neural_network.cpp b/opennn/neural_network.cpp index 4ef2c9833..09e6dfe57 100644 --- a/opennn/neural_network.cpp +++ b/opennn/neural_network.cpp @@ -484,7 +484,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Embedding Layers - const Index embedding_depth = 32; + const Index embedding_dimension = 32; const Index perceptron_depth = 32; const Index heads_number = 2; const type dropout_rate = 0; @@ -492,7 +492,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ unique_ptr embedding_layer = make_unique(input_dimensions[0], input_dimensions[1], - embedding_depth, + embedding_dimension, true); embedding_layer->set_dropout_rate(dropout_rate); @@ -513,7 +513,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ unique_ptr self_attention_layer = make_unique(input_dimensions[1], input_dimensions[1], - embedding_depth, + embedding_dimension, heads_number); self_attention_layer->set_dropout_rate(dropout_rate); @@ -530,7 +530,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Addition unique_ptr self_attention_addition_layer - = make_unique(input_dimensions[1], embedding_depth); + = make_unique(input_dimensions[1], embedding_dimension); self_attention_addition_layer->set_name("self_attention_addition_" + to_string(i+1)); //name = self_attention_addition_layer->get_name(); @@ -545,7 +545,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Normalization unique_ptr self_attention_normalization_layer - = make_unique(input_dimensions[1], embedding_depth); + = make_unique(input_dimensions[1], embedding_dimension); self_attention_normalization_layer->set_name("self_attention_normalization_" + to_string(i+1)); //name = self_attention_normalization_layer->get_name(); @@ -557,7 +557,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Perceptron unique_ptr encoder_internal_perceptron_layer - = make_unique(input_dimensions[1], embedding_depth, perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear); + = make_unique(input_dimensions[1], embedding_dimension, perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear); encoder_internal_perceptron_layer->set_name("encoder_internal_perceptron_" + to_string(i+1)); //name = encoder_internal_perceptron_layer->get_name(); @@ -569,7 +569,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Perceptron unique_ptr encoder_external_perceptron_layer = - make_unique(input_dimensions[1], perceptron_depth, embedding_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear); + make_unique(input_dimensions[1], perceptron_depth, embedding_dimension, PerceptronLayer3D::ActivationFunction::RectifiedLinear); encoder_external_perceptron_layer->set_dropout_rate(dropout_rate); encoder_external_perceptron_layer->set_name("encoder_external_perceptron_" + to_string(i+1)); @@ -582,7 +582,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Addition unique_ptr encoder_perceptron_addition_layer - = make_unique(input_dimensions[1], embedding_depth); + = make_unique(input_dimensions[1], embedding_dimension); encoder_perceptron_addition_layer->set_name("encoder_perceptron_addition_" + to_string(i+1)); //name = encoder_perceptron_addition_layer->get_name(); @@ -594,7 +594,7 @@ void NeuralNetwork::set_text_classification_transformer(const dimensions& input_ // Normalization unique_ptr encoder_perceptron_normalization_layer - = make_unique(input_dimensions[1], embedding_depth); + = make_unique(input_dimensions[1], embedding_dimension); encoder_perceptron_normalization_layer->set_name("encoder_perceptron_normalization_" + to_string(i+1)); //name = encoder_perceptron_normalization_layer->get_name(); diff --git a/opennn/neural_network.h b/opennn/neural_network.h index 35f39aac3..2eb7c6e33 100644 --- a/opennn/neural_network.h +++ b/opennn/neural_network.h @@ -133,9 +133,6 @@ class NeuralNetwork Index get_first_trainable_layer_index() const; Index get_last_trainable_layer_index() const; - // bool is_input_layer(const vector&) const; - // bool is_context_layer(const vector&) const; - // Architecture Index get_inputs_number() const; diff --git a/opennn/transformer.cpp b/opennn/transformer.cpp index 724d352df..6cff5a374 100644 --- a/opennn/transformer.cpp +++ b/opennn/transformer.cpp @@ -20,67 +20,37 @@ namespace opennn { -Transformer::Transformer(const Tensor& architecture) +Transformer::Transformer(const Index& input_length, + const Index& context_length, + const Index& input_dimensions_xxx, + const Index& context_dimension_xxx, + const Index& embedding_dimension, + const Index& perceptron_depth, + const Index& heads_number, + const Index& layers_number) { -// set(architecture); -} - - -Transformer::Transformer(const initializer_list& architecture_list) -{ - set(architecture_list); -} - - -Transformer::Transformer(const dimensions& input_dimensions, - const dimensions& context_dimensions, - const vector & complexity) -{ - if(input_dimensions.size() != 2) - throw runtime_error("Input dimensions size must be 2."); - if(context_dimensions.size() != 2) - throw runtime_error("Context dimensions size must be 2."); - if(complexity.size() != 4) - throw runtime_error("Complexity size must be 4."); - - input_length = input_dimensions[0]; - context_length = context_dimensions[0]; - input_dimensions_xxx = input_dimensions[1]; - context_dimension_xxx = context_dimensions[1]; - embedding_depth = complexity[0]; - perceptron_depth = complexity[1]; - heads_number = complexity[2]; - layers_number = complexity[3]; - set(input_length, context_length, input_dimensions_xxx, context_dimension_xxx, - embedding_depth, + embedding_dimension, perceptron_depth, heads_number, layers_number); } -void Transformer::set(const initializer_list& architecture_list) -{ - Tensor architecture(architecture_list.size()); - architecture.setValues(architecture_list); - -// set(architecture); -} - - void Transformer::set(const Index& new_input_length, const Index& new_context_length, const Index& new_input_dimensions, const Index& new_context_dimension, - const Index& new_embedding_depth, + const Index& new_embedding_dimension, const Index& new_perceptron_depth, const Index& new_heads_number, const Index& new_layers_number) { + name = "transformer"; + layers.clear(); input_names.resize(input_length + context_length); @@ -88,8 +58,8 @@ void Transformer::set(const Index& new_input_length, // Embedding Layers add_layer(make_unique(new_input_dimensions, - input_length, - embedding_depth, + new_input_length, + new_embedding_dimension, true, "input_embedding")); @@ -97,8 +67,8 @@ void Transformer::set(const Index& new_input_length, //input_embedding_layer->set_dropout_rate(dropout_rate); add_layer(make_unique(new_context_dimension, - context_length, - embedding_depth, + new_context_length, + new_embedding_dimension, true, "context_embedding")); @@ -107,12 +77,12 @@ void Transformer::set(const Index& new_input_length, // Encoder - for(Index i = 0; i < layers_number; i++) + for(Index i = 0; i < new_layers_number; i++) { - add_layer(make_unique(context_length, - context_length, - embedding_depth, - heads_number, + add_layer(make_unique(new_context_length, + new_context_length, + new_embedding_dimension, + new_heads_number, false, "context_self_attention_" + to_string(i))); @@ -128,7 +98,7 @@ void Transformer::set(const Index& new_input_length, // Addition add_layer(make_unique(context_length, - embedding_depth, + new_embedding_dimension, "context_self_attention_addition_" + to_string(i))); if(i == 0) @@ -140,16 +110,16 @@ void Transformer::set(const Index& new_input_length, // Normalization - add_layer(make_unique(context_length, - embedding_depth, + add_layer(make_unique(new_context_length, + new_embedding_dimension, "context_self_attention_normalization_" + to_string(i))); set_layer_inputs_indices("context_self_attention_normalization_" + to_string(i), "context_self_attention_addition_" + to_string(i)); - add_layer(make_unique(context_length, - embedding_depth, - perceptron_depth, + add_layer(make_unique(new_context_length, + new_embedding_dimension, + new_perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear, "encoder_internal_perceptron_" + to_string(i))); @@ -158,9 +128,9 @@ void Transformer::set(const Index& new_input_length, // Perceptron - add_layer(make_unique(context_length, - perceptron_depth, - embedding_depth, + add_layer(make_unique(new_context_length, + new_perceptron_depth, + new_embedding_dimension, PerceptronLayer3D::ActivationFunction::HyperbolicTangent, "encoder_external_perceptron_" + to_string(i))); @@ -169,14 +139,14 @@ void Transformer::set(const Index& new_input_length, // encoder_external_perceptron_layer->set_dropout_rate(dropout_rate); - add_layer(make_unique(context_length, - embedding_depth, + add_layer(make_unique(new_context_length, + new_embedding_dimension, "encoder_perceptron_addition_" + to_string(i))); set_layer_inputs_indices("encoder_perceptron_addition_" + to_string(i), { "context_self_attention_normalization_" + to_string(i), "encoder_external_perceptron_" + to_string(i) }); - add_layer(make_unique(context_length, - embedding_depth, + add_layer(make_unique(new_context_length, + new_embedding_dimension, "encoder_perceptron_normalization_" + to_string(i))); set_layer_inputs_indices("encoder_perceptron_normalization_" + to_string(i), @@ -185,12 +155,12 @@ void Transformer::set(const Index& new_input_length, // Decoder - for(Index i = 0; i < layers_number; i++) + for(Index i = 0; i < new_layers_number; i++) { - add_layer(make_unique(input_length, - input_length, - embedding_depth, - heads_number, + add_layer(make_unique(new_input_length, + new_input_length, + new_embedding_dimension, + new_heads_number, false, "input_self_attention_" + to_string(i))); @@ -201,8 +171,8 @@ void Transformer::set(const Index& new_input_length, //input_self_attention_layer->set_dropout_rate(dropout_rate); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "input_self_attention_addition_" + to_string(i))); if(i == 0) @@ -210,70 +180,70 @@ void Transformer::set(const Index& new_input_length, else set_layer_inputs_indices("input_self_attention_addition_" + to_string(i), { "decoder_perceptron_normalization_" + to_string(i), "input_self_attention_" + to_string(i+1) }); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "input_self_attention_normalization_" + to_string(i))); set_layer_inputs_indices("input_self_attention_normalization_" + to_string(i), "input_self_attention_addition_" + to_string(i)); - add_layer(make_unique(input_length, - context_length, - embedding_depth, - heads_number, + add_layer(make_unique(new_input_length, + new_context_length, + new_embedding_dimension, + new_heads_number, false, "cross_attention_" + to_string(i))); - set_layer_inputs_indices("cross_attention_" + to_string(i), {"input_self_attention_normalization_" + to_string(i), "encoder_perceptron_normalization_" + to_string(layers_number)}); + set_layer_inputs_indices("cross_attention_" + to_string(i), {"input_self_attention_normalization_" + to_string(i), "encoder_perceptron_normalization_" + to_string(new_layers_number)}); //cross_attention_layer->set_dropout_rate(dropout_rate); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "cross_attention_addition_" + to_string(i))); set_layer_inputs_indices("cross_attention_addition_" + to_string(i), { "input_self_attention_normalization_" + to_string(i), "cross_attention_" + to_string(i) }); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "cross_attention_normalization_" + to_string(i))); set_layer_inputs_indices("cross_attention_normalization_" + to_string(i), "cross_attention_addition_" + to_string(i)); - add_layer(make_unique(input_length, - embedding_depth, - perceptron_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, + new_perceptron_depth, PerceptronLayer3D::ActivationFunction::RectifiedLinear, "decoder_internal_perceptron_" + to_string(i))); set_layer_inputs_indices("decoder_internal_perceptron_" + to_string(i), "cross_attention_normalization_" + to_string(i)); - add_layer(make_unique(input_length, - perceptron_depth, - embedding_depth, + add_layer(make_unique(new_input_length, + new_perceptron_depth, + new_embedding_dimension, PerceptronLayer3D::ActivationFunction::HyperbolicTangent, "decoder_external_perceptron_" + to_string(i))); set_layer_inputs_indices("decoder_external_perceptron_" + to_string(i), "decoder_internal_perceptron_" + to_string(i)); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "decoder_perceptron_addition_" + to_string(i))); set_layer_inputs_indices("decoder_perceptron_addition_" + to_string(i), { "cross_attention_normalization_" + to_string(i), "decoder_external_perceptron_" + to_string(i) }); - add_layer(make_unique(input_length, - embedding_depth, + add_layer(make_unique(new_input_length, + new_embedding_dimension, "decoder_perceptron_normalization_" + to_string(i))); set_layer_inputs_indices("decoder_perceptron_normalization_" + to_string(i), "decoder_perceptron_addition_" + to_string(i)); } - add_layer(make_unique(input_length, - embedding_depth, - new_input_dimensions, - "probabilistic")); + add_layer(make_unique(new_input_length, + new_embedding_dimension, + new_input_dimensions, + "probabilistic")); - set_layer_inputs_indices("probabilistic", "decoder_perceptron_normalization_" + to_string(layers_number)); + set_layer_inputs_indices("probabilistic", "decoder_perceptron_normalization_" + to_string(new_layers_number)); } @@ -366,7 +336,7 @@ void Transformer::set_context_vocabulary(const vector& new_context_vocab // } -string Transformer::calculate_outputs(const vector& context_string) +string Transformer::calculate_outputs(const vector& context_documents) { //type start_indicator = 1; //type end_indicator = 2; @@ -378,36 +348,38 @@ string Transformer::calculate_outputs(const vector& context_string) //} // @todo - const vector> context_tokens = preprocess_language_documents(context_string); - const Index batch_samples_number = 1; + const vector> context_tokens = preprocess_language_documents(context_documents); - Tensor context(batch_samples_number, context_length); + const Index samples_number = 1; + + Tensor context(samples_number, context_length); context.setZero(); //if(!imported_vocabulary) tokenize_whitespace(context_tokens[0], context); //else tokenize_wordpiece(context_tokens[0], context); - Tensor input(batch_samples_number, input_length); + Tensor input(samples_number, input_length); input.setZero(); input(0) = start_indicator; - ForwardPropagation forward_propagation(batch_samples_number, this); + ForwardPropagation forward_propagation(samples_number, this); - const pair context_pair(context.data(), { batch_samples_number, context_length }); - const pair input_pair(input.data(), { batch_samples_number, input_length }); + const pair context_pair(context.data(), { samples_number, context_length }); + const pair input_pair(input.data(), { samples_number, input_length }); const vector> input_pairs = {input_pair, context_pair}; - //const Index layers_number = get_layers_number(); + const Index layers_number = NAN; // get_layers_number() const pair outputs_pair = forward_propagation.layers[layers_number - 1]->get_outputs_pair(); - TensorMap > outputs (outputs_pair.first,outputs_pair.second[1],outputs_pair.second[2]); + TensorMap > outputs(outputs_pair.first,outputs_pair.second[1],outputs_pair.second[2]); outputs.setZero(); + Tensor current_outputs(outputs_pair.second[2]); current_outputs.setZero(); @@ -427,27 +399,28 @@ string Transformer::calculate_outputs(const vector& context_string) break; } - ostringstream output_string; + ostringstream output_buffer; //if(!imported_vocabulary) // detokenize_whitespace(input, output_string); //else - detokenize_wordpiece(input, output_string); + detokenize_wordpiece(input, output_buffer); - return output_string.str(); - + return output_buffer.str(); } Tensor Transformer::calculate_outputs(const Tensor& input, const Tensor& context) { - const pair input_pair((type*)input.data(), { input.dimension(0), input.dimension(1) }); - const pair context_pair((type*)context.data(), { input.dimension(0), context.dimension(1) }); + const Index samples_number = input.dimension(0); + + const pair input_pair((type*)input.data(), { samples_number, input.dimension(1) }); + const pair context_pair((type*)context.data(), { samples_number, context.dimension(1) }); const vector> input_pairs = { input_pair, context_pair }; - ForwardPropagation forward_propagation(input.dimension(0), this); + ForwardPropagation forward_propagation(samples_number, this); forward_propagate(input_pairs, forward_propagation, false); @@ -570,20 +543,22 @@ void Transformer::tokenize_wordpiece(const vector& context_tokens, Tenso } -void Transformer::detokenize_whitespace(Tensor& predictions, ostringstream& output_string) -{ - for(Index i = 1; i < input_length; i++) - { - if(predictions(i) == 2) break; +//void Transformer::detokenize_whitespace(Tensor& predictions, ostringstream& output_string) +//{ + // @todo prediction is of rank 2 but only one loop. Why? - output_string << input_vocabulary[Index(predictions(i))] << " "; - } -} +// for(Index i = 1; i < input_length; i++) +// { +// if(predictions(i) == 2) break; + +// output_string << input_vocabulary[Index(predictions(i))] << " "; +// } +//} -void Transformer::detokenize_wordpiece(Tensor& predictions, ostringstream& output_string) +void Transformer::detokenize_wordpiece(Tensor& predictions, ostringstream& buffer) { - output_string << input_vocabulary[Index(predictions(1))]; + buffer << input_vocabulary[Index(predictions(1))]; string current_prediction; @@ -595,8 +570,8 @@ void Transformer::detokenize_wordpiece(Tensor& predictions, ostringstre current_prediction = input_vocabulary[Index(predictions(i))]; current_prediction.substr(0, 2) == "##" - ? output_string << current_prediction.substr(2) - : output_string << " " << current_prediction; + ? buffer << current_prediction.substr(2) + : buffer << " " << current_prediction; } } @@ -665,7 +640,6 @@ void Transformer::load_transformer(const string& path) }; - // OpenNN: Open Neural Networks Library. // Copyright(C) 2005-2024 Artificial Intelligence Techniques, SL. // diff --git a/opennn/transformer.h b/opennn/transformer.h index 1de9a1287..50e01cb2a 100644 --- a/opennn/transformer.h +++ b/opennn/transformer.h @@ -10,36 +10,31 @@ #define TRANSFORMER_H #include "neural_network.h" -//#include "forward_propagation.h" namespace opennn { -//struct TransformerForwardPropagation; -//struct TransformerBackPropagation; - class Transformer : public NeuralNetwork { public: - // Constructors - - Transformer(const Tensor&); - - Transformer(const initializer_list&); - - explicit Transformer(const dimensions&, const dimensions&, const vector &); - - void set(const initializer_list&); - - void set(const Index& input_length, - const Index& context_length, - const Index& input_dimensions, - const Index& context_dimension, - const Index& embedding_depth, - const Index& perceptron_depth, - const Index& heads_number, - const Index& layers_number); + Transformer(const Index& input_length = 0, + const Index& context_length = 0, + const Index& input_dimensions = 0, + const Index& context_dimension = 0, + const Index& embedding_dimension = 0, + const Index& perceptron_depth = 0, + const Index& heads_number = 0, + const Index& layers_number = 0); + + void set(const Index& input_length = 0, + const Index& context_length = 0, + const Index& input_dimensions = 0, + const Index& context_dimension = 0, + const Index& embedding_dimension = 0, + const Index& perceptron_depth = 0, + const Index& heads_number = 0, + const Index& layers_number = 0); void set_dropout_rate(const type&); void set_input_vocabulary(const vector&); @@ -49,33 +44,18 @@ class Transformer : public NeuralNetwork Tensor calculate_outputs(const Tensor&, const Tensor&); -// void tokenize_whitespace(const vector&, Tensor&); void tokenize_wordpiece(const vector&, Tensor&); - - void detokenize_whitespace(Tensor&, ostringstream&); void detokenize_wordpiece(Tensor&, ostringstream&); void load_transformer(const string&); private: - string name = "transformer"; - Index input_length = 0; Index context_length = 0; - Index input_dimensions_xxx = 0; - - Index context_dimension_xxx = 0; - - Index embedding_depth = 0; - - Index perceptron_depth = 0; - - Index heads_number = 0; - - Index layers_number = 0; +// Index layers_number = 0; type dropout_rate = 0; @@ -83,26 +63,6 @@ class Transformer : public NeuralNetwork vector context_vocabulary; }; - -// struct TransformerForwardPropagation : ForwardPropagation -// { -// // Constructors - -// TransformerForwardPropagation() {} - -// TransformerForwardPropagation(const Index& new_batch_samples, NeuralNetwork* new_neural_network) -// { -// set(new_batch_samples, new_neural_network); -// } - -// void set(const Index& new_batch_samples, NeuralNetwork* new_neural_network); - -// void print() const; - -// Index batch_samples_number = 0; - -// Tensor, 1> layers; -// }; }; #endif // TRANSFORMER_H From 129c18568f2292169bf8d3889364684596bff870 Mon Sep 17 00:00:00 2001 From: RoberLopez Date: Thu, 19 Dec 2024 23:59:48 +0100 Subject: [PATCH 3/8] clean --- opennn/text_data_set.cpp | 1925 -------------------------------------- opennn/text_data_set.h | 90 -- 2 files changed, 2015 deletions(-) delete mode 100644 opennn/text_data_set.cpp delete mode 100644 opennn/text_data_set.h diff --git a/opennn/text_data_set.cpp b/opennn/text_data_set.cpp deleted file mode 100644 index 04d9d59e0..000000000 --- a/opennn/text_data_set.cpp +++ /dev/null @@ -1,1925 +0,0 @@ -// OpenNN: Open Neural Networks Library -// www.opennn.net -// -// T E X T D A T A S E T C L A S S -// -// Artificial Intelligence Techniques SL -// artelnics@artelnics.com - -#include "text_data_set.h" -#include "tensors.h" -#include "strings_utilities.h" - -namespace opennn -{ - -TextDataSet::TextDataSet() : DataSet() -{ -} - - -const Index& TextDataSet::get_short_words_length() const -{ - return short_word_length; -} - - -const Index& TextDataSet::get_long_words_length() const -{ - return long_word_length; -} - - -const Tensor& TextDataSet::get_words_frequencies() const -{ - return word_frequencies; -} - - -Tensor TextDataSet::get_data_file_preview() const -{ - return data_file_preview; -} - - -void TextDataSet::set_short_words_length(const Index& new_short_words_length) -{ - short_word_length = new_short_words_length; -} - - -void TextDataSet::set_long_words_length(const Index& new_long_words_length) -{ - long_word_length = new_long_words_length; -} - - -//void TextDataSet::set_words_frequencies(const Tensor& new_words_frequencies) -//{ -// word_frequencies = new_words_frequencies; -//} - - -void TextDataSet::to_XML(XMLPrinter& file_stream) const -{ - time_t start, finish; - time(&start); - - file_stream.OpenElement("DataSet"); - - // Data file - - file_stream.OpenElement("DataSource"); - - // File type - - file_stream.OpenElement("FileType"); - file_stream.PushText("csv"); - file_stream.CloseElement(); - - // Data source path - - file_stream.OpenElement("Path"); - file_stream.PushText(data_path.c_str()); - file_stream.CloseElement(); - - // Separator - - file_stream.OpenElement("Separator"); - file_stream.PushText(get_separator_string().c_str()); - file_stream.CloseElement(); - - // Text separator - - file_stream.OpenElement("Separator"); - file_stream.PushText(get_separator_string().c_str()); - file_stream.CloseElement(); - - // Raw variables names - - file_stream.OpenElement("HasHeader"); - file_stream.PushText(to_string(has_header).c_str()); - file_stream.CloseElement(); - - // Samples id - - file_stream.OpenElement("HasSamplesId"); - file_stream.PushText(to_string(has_sample_ids).c_str()); - file_stream.CloseElement(); - - // Missing values label - - file_stream.OpenElement("MissingValuesLabel"); - file_stream.PushText(missing_values_label.c_str()); - file_stream.CloseElement(); - - - // Short words length - - file_stream.OpenElement("ShortWordsLength"); - file_stream.PushText(to_string(short_word_length).c_str()); - file_stream.CloseElement(); - - // Long words length - - file_stream.OpenElement("LongWordsLength"); - file_stream.PushText(to_string(long_word_length).c_str()); - file_stream.CloseElement(); - - // Stop words list - - file_stream.OpenElement("StopWords"); - file_stream.PushText(string_tensor_to_string(stop_words).c_str()); - file_stream.CloseElement(); - - // Codification - - file_stream.OpenElement("Codification"); - file_stream.PushText(get_codification_string().c_str()); - file_stream.CloseElement(); - - // Close DataFile - - file_stream.CloseElement(); - - // Raw variables - - file_stream.OpenElement("RawVariables"); - - - // Raw variables number - - const Index raw_variables_number = get_raw_variables_number(); - - file_stream.OpenElement("RawVariablesNumber"); - file_stream.PushText(to_string(raw_variables_number).c_str()); - file_stream.CloseElement(); - - // Raw variables items - - for(Index i = 0; i < raw_variables_number; i++) - { - file_stream.OpenElement("RawVariable"); - file_stream.PushAttribute("Item", to_string(i+1).c_str()); - raw_variables[i].to_XML(file_stream); - file_stream.CloseElement(); - } - - // Close raw_variables - - file_stream.CloseElement(); - - // Samples id -/* - if(has_sample_ids) - { - const Index rows_labels_number = ids.size(); - - file_stream.OpenElement("HasSamplesId"); - - buffer.str(""); - - for(Index i = 0; i < rows_labels_number; i++) - { - buffer << ids(i); - - if(i != rows_labels_number-1) buffer << ","; - } - - file_stream.PushText(string_tensor_to_string(ids).c_str()); - - file_stream.CloseElement(); - } -*/ - // Samples - - file_stream.OpenElement("Samples"); - - // Samples number - - file_stream.OpenElement("SamplesNumber"); - file_stream.PushText(to_string(get_samples_number()).c_str()); - file_stream.CloseElement(); -/* - // Samples uses - { - file_stream.OpenElement("SamplesUses"); - - buffer.str(""); - - const Index samples_number = get_samples_number(); - - for(Index i = 0; i < samples_number; i++) - { - SampleUse sample_use = sample_uses[i]; - - buffer << Index(sample_use); - - if(i < (samples_number-1)) buffer << " "; - } - - file_stream.PushText(buffer.str().c_str()); - - file_stream.CloseElement(); - } -*/ - // Close samples - - file_stream.CloseElement(); - - // Missing values - - file_stream.OpenElement("MissingValues"); - - // Missing values method - - { - file_stream.OpenElement("MissingValuesMethod"); - - if(missing_values_method == MissingValuesMethod::Mean) - { - file_stream.PushText("Mean"); - } - else if(missing_values_method == MissingValuesMethod::Median) - { - file_stream.PushText("Median"); - } - else if(missing_values_method == MissingValuesMethod::Unuse) - { - file_stream.PushText("Unuse"); - } - else if(missing_values_method == MissingValuesMethod::Interpolation) - { - file_stream.PushText("Interpolation"); - } - - file_stream.CloseElement(); - } - - ostringstream buffer; - - // Missing values number - - file_stream.OpenElement("MissingValuesNumber"); - file_stream.PushText(to_string(missing_values_number).c_str()); - file_stream.CloseElement(); - - if(missing_values_number > 0) - { - // Raw variables missing values number - { - file_stream.OpenElement("RawVariablesMissingValuesNumber"); - - const Index raw_variables_number = raw_variables_missing_values_number.size(); - - buffer.str(""); - - for(Index i = 0; i < raw_variables_number; i++) - { - buffer << raw_variables_missing_values_number(i); - - if(i != (raw_variables_number-1)) buffer << " "; - } - - file_stream.PushText(buffer.str().c_str()); - - file_stream.CloseElement(); - } - - // Rows missing values number - { - file_stream.OpenElement("RowsMissingValuesNumber"); - - buffer.str(""); - buffer << rows_missing_values_number; - - file_stream.PushText(buffer.str().c_str()); - - file_stream.CloseElement(); - } - } - - // Missing values - - file_stream.CloseElement(); - - // Words frequencies - { - file_stream.OpenElement("WordsFrequencies"); - - for(Index i = 0; i < word_frequencies.size(); i++) - { - buffer.str(""); - buffer << word_frequencies(i); - - file_stream.PushText(buffer.str().c_str()); - if(i != word_frequencies.size()-1) file_stream.PushText(" "); - - } - - file_stream.CloseElement(); - } - - // Preview data - - file_stream.OpenElement("PreviewData"); - - file_stream.OpenElement("PreviewSize"); - - buffer.str(""); - - // Row and Targets - { - buffer << data_file_preview.size(); - - file_stream.PushText(buffer.str().c_str()); - - file_stream.CloseElement(); - - for(Index i = 0; i < data_file_preview.size(); i++) - { - file_stream.OpenElement("Row"); - file_stream.PushAttribute("Item", to_string(i+1).c_str()); -/* - file_stream.PushText(data_file_preview[i][0].c_str()); -*/ - file_stream.CloseElement(); - } - - for(Index i = 0; i < data_file_preview.size(); i++) - { - file_stream.OpenElement("Target"); - file_stream.PushAttribute("Item", to_string(i+1).c_str()); -/* - file_stream.PushText(data_file_preview[i][1].c_str()); -*/ - file_stream.CloseElement(); - } - } - - // Close preview data - - file_stream.CloseElement(); - - // Close data set - - file_stream.CloseElement(); - - time(&finish); -} - - -void TextDataSet::from_XML(const XMLDocument& data_set_document) -{ - ostringstream buffer; - - // Data set element - - const XMLElement* data_set_element = data_set_document.FirstChildElement("DataSet"); - - if(!data_set_element) - throw runtime_error("Data set element is nullptr.\n"); - - // Data file - - const XMLElement* data_source_element = data_set_element->FirstChildElement("DataSource"); - - if(!data_source_element) - throw runtime_error("Data file element is nullptr.\n"); - - // Data file name - - const XMLElement* data_source_path_element = data_source_element->FirstChildElement("Path"); - - if(!data_source_path_element) - throw runtime_error("Path element is nullptr.\n"); - - if(data_source_path_element->GetText()) - { - const string new_data_file_name = data_source_path_element->GetText(); - - set_data_path(new_data_file_name); - } - - // Separator - - const XMLElement* separator_element = data_source_element->FirstChildElement("Separator"); - - if(separator_element) - { - if(separator_element->GetText()) - { - const string new_separator = separator_element->GetText(); - - set_separator_name(new_separator); - } - else - { - set_separator_name("Comma"); - } - } - else - { - set_separator_name("Comma"); - } - - // Text separator - - const XMLElement* text_separator_element = data_source_element->FirstChildElement("Separator"); - - if(text_separator_element) - { - if(text_separator_element->GetText()) - { - const string new_separator = text_separator_element->GetText(); - - try - { - set_separator_name(new_separator); - } - catch(const exception& e) - { - cerr << e.what() << endl; - } - } - } - - // Has raw_variables names - - const XMLElement* raw_variables_names_element = data_source_element->FirstChildElement("HasHeader"); - - if(raw_variables_names_element) - { - const string new_raw_variables_names_string = raw_variables_names_element->GetText(); - - try - { - set_has_header(new_raw_variables_names_string == "1"); - } - catch(const exception& e) - { - cerr << e.what() << endl; - } - } - - // Samples id - - const XMLElement* rows_label_element = data_source_element->FirstChildElement("HasSamplesId"); - - if(rows_label_element) - { - const string new_rows_label_string = rows_label_element->GetText(); - - try - { - set_has_ids(new_rows_label_string == "1"); - } - catch(const exception& e) - { - cerr << e.what() << endl; - } - } - - // Missing values label - - const XMLElement* missing_values_label_element = data_source_element->FirstChildElement("MissingValuesLabel"); - - if(missing_values_label_element) - { - if(missing_values_label_element->GetText()) - { - const string new_missing_values_label = missing_values_label_element->GetText(); - - set_missing_values_label(new_missing_values_label); - } - else - { - set_missing_values_label("NA"); - } - } - else - { - set_missing_values_label("NA"); - } - - // short words length - - const XMLElement* short_words_length_element = data_source_element->FirstChildElement("ShortWordsLength"); - - if(short_words_length_element) - { - if(short_words_length_element->GetText()) - { - const int new_short_words_length = Index(atoi(short_words_length_element->GetText())); - - set_short_words_length(new_short_words_length); - } - } - - // Long words length - - const XMLElement* long_words_length_element = data_source_element->FirstChildElement("LongWordsLength"); - - if(long_words_length_element) - { - if(long_words_length_element->GetText()) - { - const int new_long_words_length = Index(atoi(long_words_length_element->GetText())); - - set_long_words_length(new_long_words_length); - } - } -/* - // Stop words list - - const XMLElement* stop_words_list_element = data_source_element->FirstChildElement("StopWords"); - - if(stop_words_list_element) - { - if(stop_words_list_element->GetText()) - { - const string new_stop_words_list = stop_words_list_element->GetText(); - - stop_words = get_tokens(new_stop_words_list, ","); - - } - } - - // Codification - - const XMLElement* codification_element = data_source_element->FirstChildElement("Codification"); - - if(codification_element) - { - if(codification_element->GetText()) - { - const string new_codification = codification_element->GetText(); - - set_codification(new_codification); - } - } - - // Raw variables - - const XMLElement* raw_variables_element = data_set_element->FirstChildElement("RawVariables"); - - if(!raw_variables_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "RawVariables element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - // Raw variables number - - const XMLElement* raw_variables_number_element = raw_variables_element->FirstChildElement("RawVariablesNumber"); - - if(!raw_variables_number_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "RawVariablesNumber element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - Index new_raw_variables_number = 0; - - if(raw_variables_number_element->GetText()) - { - new_raw_variables_number = Index(atoi(raw_variables_number_element->GetText())); - - set_raw_variables_number(new_raw_variables_number); - } - - // Raw variables - -const XMLElement* start_element = raw_variables_number_element; - - for(Index i = 0; i < new_raw_variables_number; i++) - { - const XMLElement* raw_variable_element = start_element->NextSiblingElement("RawVariable"); - start_element = raw_variable_element; - - if(raw_variable_element->Attribute("Item") != to_string(i+1)) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void DataSet:from_XML(const XMLDocument&) method.\n" - << "raw_variable item number (" << i+1 << ") does not match (" << raw_variable_element->Attribute("Item") << ").\n"; - - throw runtime_error(buffer.str()); - } - - // Name - - const XMLElement* name_element = raw_variable_element->FirstChildElement("Name"); - - if(!name_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void raw_variable::from_XML(const XMLDocument&) method.\n" - << "Name element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(name_element->GetText()) - { - const string new_name = name_element->GetText(); - - raw_variables[i].name = new_name; - } - - // Scaler - - const XMLElement* scaler_element = raw_variable_element->FirstChildElement("Scaler"); - - if(!scaler_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void DataSet::from_XML(const XMLDocument&) method.\n" - << "Scaler element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(scaler_element->GetText()) - { - const string new_scaler = scaler_element->GetText(); - - raw_variables[i].set_scaler(new_scaler); - } - - // raw_variable use - - const XMLElement* use_element = raw_variable_element->FirstChildElement("Use"); - - if(!use_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void DataSet::from_XML(const XMLDocument&) method.\n" - << "raw_variable use element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(use_element->GetText()) - { - const string new_raw_variable_use = use_element->GetText(); - - raw_variables[i].set_use(new_raw_variable_use); - } - - // Type - - const XMLElement* type_element = raw_variable_element->FirstChildElement("Type"); - - if(!type_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void raw_variable::from_XML(const XMLDocument&) method.\n" - << "Type element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(type_element->GetText()) - { - const string new_type = type_element->GetText(); - raw_variables[i].set_type(new_type); - } - - if(raw_variables[i].type == RawVariableType::Categorical || raw_variables[i].type == RawVariableType::Binary) - { - // Categories - - const XMLElement* categories_element = raw_variable_element->FirstChildElement("Categories"); - - if(!categories_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void raw_variable::from_XML(const XMLDocument&) method.\n" - << "Categories element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(categories_element->GetText()) - { - const string new_categories = categories_element->GetText(); - - raw_variables[i].categories = get_tokens(new_categories, ";"); - } - } - } - - // Rows label - - if(has_sample_ids) - { - // Samples id begin tag - - const XMLElement* has_ids_element = data_set_element->FirstChildElement("HasSamplesId"); - - if(!has_ids_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Rows labels element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - // Samples id - - if(has_ids_element->GetText()) - { - const string new_rows_labels = has_ids_element->GetText(); - - string separator = ","; - - if(new_rows_labels.find(",") == string::npos - && new_rows_labels.find(";") != string::npos) { - separator = ";"; - } - - ids = get_tokens(new_rows_labels, separator); - } - } - - // Samples - - const XMLElement* samples_element = data_set_element->FirstChildElement("Samples"); - - if(!samples_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Samples element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - // Samples number - - const XMLElement* samples_number_element = samples_element->FirstChildElement("SamplesNumber"); - - if(!samples_number_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Samples number element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(samples_number_element->GetText()) - { - const Index new_samples_number = Index(atoi(samples_number_element->GetText())); - - sample_uses.resize(new_samples_number); - - set_training(); - } - - // Samples uses - - const XMLElement* samples_uses_element = samples_element->FirstChildElement("SamplesUses"); - - if(!samples_uses_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Samples uses element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(samples_uses_element->GetText()) - { - set_sample_uses(get_tokens(samples_uses_element->GetText(), " ")); - } - - // Missing values - - const XMLElement* missing_values_element = data_set_element->FirstChildElement("MissingValues"); - - if(!missing_values_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Missing values element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - // Missing values method - - const XMLElement* missing_values_method_element = missing_values_element->FirstChildElement("MissingValuesMethod"); - - if(!missing_values_method_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Missing values method element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(missing_values_method_element->GetText()) - { - set_missing_values_method(missing_values_method_element->GetText()); - } - - // Missing values number - - const XMLElement* missing_values_number_element = missing_values_element->FirstChildElement("MissingValuesNumber"); - - if(!missing_values_number_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Missing values number element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(missing_values_number_element->GetText()) - { - missing_values_number = Index(atoi(missing_values_number_element->GetText())); - } - - if(missing_values_number > 0) - { - // Raw variables Missing values number - - const XMLElement* raw_variables_missing_values_number_element = missing_values_element->FirstChildElement("RawVariablesMissingValuesNumber"); - - if(!raw_variables_missing_values_number_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "RawVariablesMissingValuesNumber element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(raw_variables_missing_values_number_element->GetText()) - { - vector new_raw_variables_missing_values_number - = get_tokens(raw_variables_missing_values_number_element->GetText(), " "); - - raw_variables_missing_values_number.resize(new_raw_variables_missing_values_number.size()); - - for(Index i = 0; i < new_raw_variables_missing_values_number.size(); i++) - { - raw_variables_missing_values_number(i) = atoi(new_raw_variables_missing_values_number(i).c_str()); - } - } - - // Rows missing values number - - const XMLElement* rows_missing_values_number_element = missing_values_element->FirstChildElement("RowsMissingValuesNumber"); - - if(!rows_missing_values_number_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Rows missing values number element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - if(rows_missing_values_number_element->GetText()) - { - rows_missing_values_number = Index(atoi(rows_missing_values_number_element->GetText())); - } - } - - // Preview data - - const XMLElement* preview_data_element = data_set_element->FirstChildElement("PreviewData"); - - if(!preview_data_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Preview data element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - // Preview size - - const XMLElement* preview_size_element = preview_data_element->FirstChildElement("PreviewSize"); - - if(!preview_size_element) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Preview size element is nullptr.\n"; - - throw runtime_error(buffer.str()); - } - - Index new_preview_size = 0; - - if(preview_size_element->GetText()) - { - new_preview_size = Index(atoi(preview_size_element->GetText())); - - if(new_preview_size > 0) data_file_preview.resize(new_preview_size); - if(new_preview_size > 0) data_file_preview.resize(new_preview_size, 2); - } - - // Preview data - - start_element = preview_size_element; - - if(model_type != ModelType::TextClassification) - { - for(Index i = 0; i < new_preview_size; i++) - { - const XMLElement* row_element = start_element->NextSiblingElement("Row"); - start_element = row_element; - - if(row_element->Attribute("Item") != to_string(i+1)) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Row item number (" << i+1 << ") does not match (" << row_element->Attribute("Item") << ").\n"; - - throw runtime_error(buffer.str()); - } - - if(row_element->GetText()) - { - data_file_preview[i] = get_tokens(row_element->GetText(), ","); - } - } - } - else - { - for(Index i = 0; i < new_preview_size; i++) - { - const XMLElement* row_element = start_element->NextSiblingElement("Row"); - start_element = row_element; - - if(row_element->Attribute("Item") != to_string(i+1)) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Row item number (" << i+1 << ") does not match (" << row_element->Attribute("Item") << ").\n"; - - throw runtime_error(buffer.str()); - } - - if(row_element->GetText()) - { - data_file_preview[i][0] = row_element->GetText(); - } - } - - for(Index i = 0; i < new_preview_size; i++) - { - const XMLElement* row_element = start_element->NextSiblingElement("Target"); - start_element = row_element; - - if(row_element->Attribute("Item") != to_string(i+1)) - { - buffer << "OpenNN Exception: DataSet class.\n" - << "void from_XML(const XMLDocument&) method.\n" - << "Target item number (" << i+1 << ") does not match (" << row_element->Attribute("Item") << ").\n"; - - throw runtime_error(buffer.str()); - } - - if(row_element->GetText()) - { - data_file_preview[i][1] = row_element->GetText(); - } - } - } - - // Display - - const XMLElement* display_element = data_set_element->FirstChildElement("Display"); - - if(display_element) - set_display(display_element->GetText() != string("0")); -*/ -} - - -Tensor TextDataSet::sentence_to_data(const string& sentence) const -{ - const Index raw_variables_number = get_raw_variables_number(); - const vector raw_variable_names = get_raw_variable_names(); - - const vector tokens = get_tokens(sentence, " "); - - Tensor vector_x(raw_variables_number - 1); - vector_x.setZero(); - - const vector> words = preprocess(tokens); -/* - const WordBag word_bag = calculate_word_bag(words); - - const Index words_number = word_bag.size(); - - for(Index i = 0; i < words_number; i++) - { - if(contains(raw_variable_names, word_bag.words[i])) - { - auto it = find(raw_variable_names.data(), raw_variable_names.data() + raw_variable_names.size(), word_bag.words[i]); - const Index index = it - raw_variable_names.data(); - - vector_x(index) = type(word_bag.frequencies(i)); - } - } -*/ - return vector_x; -} - -/* - -vector> stem(const vector>& tokens) -{ - const Index documents_number = tokens.size(); - - vector> new_tokenized_documents(documents_number); - - // Set vowels and suffixes - - vector vowels(6); - vowels.setValues({"a","e","i","o","u","y"}); - - vector double_consonants(9); - double_consonants.setValues({"bb", "dd", "ff", "gg", "mm", "nn", "pp", "rr", "tt"}); - - vector li_ending(10); - li_ending.setValues({"c", "d", "e", "g", "h", "k", "m", "n", "r", "t"}); - - const Index step0_suffixes_size = 3; - - vector step0_suffixes(step0_suffixes_size); - - step0_suffixes.setValues({"'s'", "'s", "'"}); - - const Index step1a_suffixes_size = 6; - - vector step1a_suffixes(step1a_suffixes_size); - - step1a_suffixes.setValues({"sses", "ied", "ies", "us", "ss", "s"}); - - const Index step1b_suffixes_size = 6; - - vector step1b_suffixes(step1b_suffixes_size); - - step1b_suffixes.setValues({"eedly", "ingly", "edly", "eed", "ing", "ed"}); - - const Index step2_suffixes_size = 25; - - vector step2_suffixes(step2_suffixes_size); - - step2_suffixes.setValues({"ization", - "ational", - "fulness", - "ousness", - "iveness", - "tional", - "biliti", - "lessli", - "entli", - "ation", - "alism", - "aliti", - "ousli", - "iviti", - "fulli", - "enci", - "anci", - "abli", - "izer", - "ator", - "alli", - "bli", - "ogi", - "li"}); - - const Index step3_suffixes_size = 9; - - vector step3_suffixes(step3_suffixes_size); - - step3_suffixes.setValues({"ational", "tional", "alize", "icate", "iciti", "ative", "ical", "ness", "ful"}); - - const Index step4_suffixes_size = 18; - - vector step4_suffixes(step4_suffixes_size); - - step4_suffixes.setValues({"ement", "ance", "ence", "able", "ible", "ment", "ant", "ent", "ism", "ate", "iti", "ous", - "ive", "ize", "ion", "al", "er", "ic"}); - - Tensor special_words(40,2); - - special_words(0,0) = "skis"; special_words(0,1) = "ski"; - special_words(1,0) = "skies"; special_words(1,1) = "sky"; - special_words(2,0) = "dying"; special_words(2,1) = "die"; - special_words(3,0) = "lying"; special_words(3,1) = "lie"; - special_words(4,0) = "tying"; special_words(4,1) = "tie"; - special_words(5,0) = "idly"; special_words(5,1) = "idl"; - special_words(6,0) = "gently"; special_words(6,1) = "gentl"; - special_words(7,0) = "ugly"; special_words(7,1) = "ugli"; - special_words(8,0) = "early"; special_words(8,1) = "earli"; - special_words(9,0) = "only"; special_words(9,1) = "onli"; - special_words(10,0) = "singly"; special_words(10,1) = "singl"; - special_words(11,0) = "sky"; special_words(11,1) = "sky"; - special_words(12,0) = "news"; special_words(12,1) = "news"; - special_words(13,0) = "howe"; special_words(13,1) = "howe"; - special_words(14,0) = "atlas"; special_words(14,1) = "atlas"; - special_words(15,0) = "cosmos"; special_words(15,1) = "cosmos"; - special_words(16,0) = "bias"; special_words(16,1) = "bias"; - special_words(17,0) = "andes"; special_words(17,1) = "andes"; - special_words(18,0) = "inning"; special_words(18,1) = "inning"; - special_words(19,0) = "innings"; special_words(19,1) = "inning"; - special_words(20,0) = "outing"; special_words(20,1) = "outing"; - special_words(21,0) = "outings"; special_words(21,1) = "outing"; - special_words(22,0) = "canning"; special_words(22,1) = "canning"; - special_words(23,0) = "cannings"; special_words(23,1) = "canning"; - special_words(24,0) = "herring"; special_words(24,1) = "herring"; - special_words(25,0) = "herrings"; special_words(25,1) = "herring"; - special_words(26,0) = "earring"; special_words(26,1) = "earring"; - special_words(27,0) = "earrings"; special_words(27,1) = "earring"; - special_words(28,0) = "proceed"; special_words(28,1) = "proceed"; - special_words(29,0) = "proceeds"; special_words(29,1) = "proceed"; - special_words(30,0) = "proceeded"; special_words(30,1) = "proceed"; - special_words(31,0) = "proceeding"; special_words(31,1) = "proceed"; - special_words(32,0) = "exceed"; special_words(32,1) = "exceed"; - special_words(33,0) = "exceeds"; special_words(33,1) = "exceed"; - special_words(34,0) = "exceeded"; special_words(34,1) = "exceed"; - special_words(35,0) = "exceeding"; special_words(35,1) = "exceed"; - special_words(36,0) = "succeed"; special_words(36,1) = "succeed"; - special_words(37,0) = "succeeds"; special_words(37,1) = "succeed"; - special_words(38,0) = "succeeded"; special_words(38,1) = "succeed"; - special_words(39,0) = "succeeding"; special_words(39,1) = "succeed"; - -#pragma omp parallel for - for(Index i = 0; i < documents_number; i++) - { - vector current_document = tokens[i]; - - replace_substring(current_document, "’", "'"); - replace_substring(current_document, "‘", "'"); - replace_substring(current_document, "‛", "'"); - - for(Index j = 0; j < current_document.size(); j++) - { - string current_word = current_document(j); - - trim(current_word); - - if(contains(special_words.chip(0,1),current_word)) - { - auto it = find(special_words.data(), special_words.data() + special_words.size(), current_word); - - const Index word_index = it - special_words.data(); - - current_document(j) = special_words(word_index, 1); - - break; - } - - if(starts_with(current_word, "'")) - { - current_word = current_word.substr(1); - } - - if(starts_with(current_word, "y")) - { - current_word = "Y" + current_word.substr(1); - } - - for(size_t k = 1; k < current_word.size(); k++) - { - if(contains(vowels, string(1,current_word[k-1])) && current_word[k] == 'y') - { - current_word[k] = 'Y'; - } - } - - vector r1_r2(2); - - r1_r2 = get_r1_r2(current_word, vowels); - - bool step1a_vowel_found = false; - bool step1b_vowel_found = false; - - // Step 0 - - for(Index l = 0; l < step0_suffixes_size; l++) - { - const string current_suffix = step0_suffixes(l); - - if(ends_with(current_word,current_suffix)) - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()); - break; - } - } - - // Step 1a - - for(size_t l = 0; l < step1a_suffixes_size; l++) - { - const string current_suffix = step1a_suffixes[l]; - - if(ends_with(current_word, current_suffix)) - { - if(current_suffix == "sses") - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else if(current_suffix == "ied" || current_suffix == "ies") - { - if(current_word.length() - current_suffix.length() > 1) - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else - { - current_word = current_word.substr(0,current_word.length()-1); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1); - } - } - else if(current_suffix == "s") - { - for(size_t l = 0; l < current_word.length() - 2; l++) - { - if(contains(vowels, string(1,current_word[l]))) - { - step1a_vowel_found = true; - break; - } - } - - if(step1a_vowel_found) - { - current_word = current_word.substr(0,current_word.length()-1); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1); - } - } - - break; - } - } - - // Step 1b - - for(Index k = 0; k < step1b_suffixes_size; k++) - { - const string current_suffix = step1b_suffixes[k]; - - if(ends_with(current_word, current_suffix)) - { - if(current_suffix == "eed" || current_suffix == "eedly") - { - if(ends_with(r1_r2[0], current_suffix)) - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ee"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ee"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ee"; - } - else - { - r1_r2[1].clear(); - } - } - } - else - { - for(size_t l = 0; l <(current_word.length() - current_suffix.length()); l++) - { - if(contains(vowels,string(1,current_word[l]))) - { - step1b_vowel_found = true; - break; - } - } - - if(step1b_vowel_found) - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()); - - if(ends_with(current_word, "at") || ends_with(current_word, "bl") || ends_with(current_word, "iz")) - { - current_word = current_word + "e"; - r1_r2[0] = r1_r2[0] + "e"; - - if(current_word.length() > 5 || r1_r2[0].length() >= 3) - { - r1_r2[1] = r1_r2[1] + "e"; - } - } - else if(ends_with(current_word, double_consonants)) - { - current_word = current_word.substr(0,current_word.length()-1); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1); - } - else if((r1_r2[0].empty() && current_word.length() >= 3 && !contains(vowels,string(1,current_word[current_word.length()-1])) && - !(current_word[current_word.length()-1] == 'w' || current_word[current_word.length()-1] == 'x' || current_word[current_word.length()-1] == 'Y') && - contains(vowels,string(1,current_word[current_word.length()-2])) && !contains(vowels,string(1,current_word[current_word.length()-3]))) || - (r1_r2[0].empty() && current_word.length() == 2 && contains(vowels,string(1,current_word[0])) && contains(vowels, string(1,current_word[1])))) - { - current_word = current_word + "e"; - - if(r1_r2[0].length() > 0) - { - r1_r2[0] = r1_r2[0] + "e"; - } - - if(r1_r2[1].length() > 0) - { - r1_r2[1] = r1_r2[1] + "e"; - } - } - } - } - - break; - } - } - - // Step 1c - - if(current_word.length() > 2 &&(current_word[current_word.length()-1] == 'y' || current_word[current_word.length()-1] == 'Y') && - !contains(vowels, string(1,current_word[current_word.length()-2]))) - { - current_word = current_word.substr(0,current_word.length()-1) + "i"; - - if(r1_r2[0].length() >= 1) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1) + "i"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= 1) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1) + "i"; - } - else - { - r1_r2[1].clear(); - } - } - - // Step 2 - - for(Index l = 0; l < step2_suffixes_size; l++) - { - const string current_suffix = step2_suffixes[l]; - - if(ends_with(current_word,current_suffix) && ends_with(r1_r2[0],current_suffix)) - { - if(current_suffix == "tional") - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else if(current_suffix == "enci" || current_suffix == "anci" || current_suffix == "abli") - { - current_word = current_word.substr(0,current_word.length()-1) + "e"; - - if(r1_r2[0].length() >= 1) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1) + "e"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= 1) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1) + "e"; - } - else - { - r1_r2[1].clear(); - } - } - else if(current_suffix == "entli") - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else if(current_suffix == "izer" || current_suffix == "ization") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ize"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ize"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ize"; - } - else - { - r1_r2[1].clear(); - } - } - else if(current_suffix == "ational" || current_suffix == "ation" || current_suffix == "ator") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ate"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ate"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ate"; - } - else - { - r1_r2[1] = "e"; - } - } - else if(current_suffix == "alism" || current_suffix == "aliti" || current_suffix == "alli") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "al"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "al"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "al"; - } - else - { - r1_r2[1].clear(); - } - } - else if(current_suffix == "fulness") - { - current_word = current_word.substr(0,current_word.length()-4); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-4); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-4); - } - else if(current_suffix == "ousli" || current_suffix == "ousness") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ous"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ous"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ous"; - } - else - { - r1_r2[1].clear(); - } - } - else if(current_suffix == "iveness" || current_suffix == "iviti") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ive"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ive"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ive"; - } - else - { - r1_r2[1] = "e"; - } - } - else if(current_suffix == "biliti" || current_suffix == "bli") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ble"; - - if(r1_r2[0].length() >= current_suffix.length()) - { - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ble"; - } - else - { - r1_r2[0].clear(); - } - - if(r1_r2[1].length() >= current_suffix.length()) - { - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ble"; - } - else - { - r1_r2[1].clear(); - } - } - else if(current_suffix == "ogi" && current_word[current_word.length()-4] == 'l') - { - current_word = current_word.substr(0,current_word.length()-1); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-1); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-1); - } - else if(current_suffix == "fulli" || current_suffix == "lessli") - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else if(current_suffix == "li" && contains(li_ending, string(1,current_word[current_word.length()-4]))) - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - - break; - } - } - - // Step 3 - - for(Index l = 0; l < step3_suffixes_size; l++) - { - const string current_suffix = step3_suffixes[l]; - - if(ends_with(current_word,current_suffix) && ends_with(r1_r2[0],current_suffix)) - { - if(current_suffix == "tional") - { - current_word = current_word.substr(0,current_word.length()-2); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-2); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-2); - } - else if(current_suffix == "ational") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ate"; - - if(r1_r2[0].length() >= current_suffix.length()) - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ate"; - else - r1_r2[0].clear(); - - if(r1_r2[1].length() >= current_suffix.length()) - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ate"; - else - r1_r2[1].clear(); - } - else if(current_suffix == "alize") - { - current_word = current_word.substr(0,current_word.length()-3); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-3); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-3); - } - else if(current_suffix == "icate" || current_suffix == "iciti" || current_suffix == "ical") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()) + "ic"; - - if(r1_r2[0].length() >= current_suffix.length()) - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()) + "ic"; - else - r1_r2[0].clear(); - - if(r1_r2[1].length() >= current_suffix.length()) - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()) + "ic"; - else - r1_r2[1].clear(); - } - else if(current_suffix == "ful" || current_suffix == "ness") - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()); - } - else if(current_suffix == "ative" && ends_with(r1_r2[1],current_suffix)) - { - current_word = current_word.substr(0,current_word.length()-5); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-5); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-5); - } - - break; - } - } - - // Step 4 - - for(Index l = 0; l < step4_suffixes_size; l++) - { - const string current_suffix = step4_suffixes[l]; - - if(ends_with(current_word,current_suffix) && ends_with(r1_r2[1],current_suffix)) - { - if(current_suffix == "ion" &&(current_word[current_word.length()-4] == 's' || current_word[current_word.length()-4] == 't')) - { - current_word = current_word.substr(0,current_word.length()-3); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-3); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-3); - } - else - { - current_word = current_word.substr(0,current_word.length()-current_suffix.length()); - r1_r2[0] = r1_r2[0].substr(0,r1_r2[0].length()-current_suffix.length()); - r1_r2[1] = r1_r2[1].substr(0,r1_r2[1].length()-current_suffix.length()); - } - - break; - } - } - - // Step 5 - - if(r1_r2[1][r1_r2[1].length()-1] == 'l' && current_word[current_word.length()-2] == 'l') - { - current_word = current_word.substr(0,current_word.length()-1); - } - else if(r1_r2[1][r1_r2[1].length()-1] == 'e') - { - current_word = current_word.substr(0,current_word.length()-1); - } - else if(r1_r2[0][r1_r2[0].length()-1] == 'e') - { - if(current_word.length() >= 4 &&(contains(vowels, string(1,current_word[current_word.length()-2])) || - (current_word[current_word.length()-2] == 'w' || current_word[current_word.length()-2] == 'x' || - current_word[current_word.length()-2] == 'Y') || !contains(vowels, string(1,current_word[current_word.length()-3])) || - contains(vowels, string(1,current_word[current_word.length()-4])))) - { - current_word = current_word.substr(0,current_word.length()-1); - } - } - - replace(current_word,"Y","y"); - current_document(j) = current_word; - } - new_tokenized_documents(i) = current_document; - } - - return new_tokenized_documents; -} -*/ - -void TextDataSet::read_txt() -{ - cout << "Reading .txt file..." << endl; - - if(data_path.empty()) - throw runtime_error("Data source path is empty.\n"); - - ifstream file(data_path.c_str()); - - if(!file.is_open()) - throw runtime_error("Cannot open text file: " + data_path .string() + "\n"); - - const string separator_string = get_separator_string(); - - Index documents_number = 0; - - string line; - - while(getline(file, line)) - { - prepare_line(line); - - if(line.empty()) continue; - - documents_number++; - - if(file.peek() == EOF) break; - } - - cout << documents_number << endl; - - file.seekg (0, ios::beg); - - vector documents(documents_number); - vector targets(documents_number); - - Index index = 0; - - while(getline(file, line)) - { - prepare_line(line); - - if(line.empty()) continue; - - const Index tokens_number = count_tokens(line, separator_string); - - if(tokens_number != 2) - throw runtime_error("More than one separator in line: " + line + "\n"); - - const vector line_tokens = get_tokens(line, separator_string); - - documents[index] = line_tokens[0]; - targets[index] = line_tokens[1]; - - if(count_tokens(targets[index], "2") != 1) - throw runtime_error("More than one target in line: " + line + "\n"); - - index++; - - if(file.peek() == EOF) break; - } - - file.close(); - - to_lower(targets); - - to_lower(documents); - delete_punctuation(documents); - delete_non_printable_chars(documents); - delete_extra_spaces(documents); - delete_non_alphanumeric(documents); - - //cout << documents << endl; - - vector> documents_words = get_tokens(documents, " "); - - cout << "Processing documents..." << endl; - - delete_words(documents_words, stop_words); - - delete_short_long_words(documents_words, short_word_length, long_word_length); - - replace_accented_words(documents_words); - - delete_emails(documents_words); - - delete_numbers(documents_words); - - delete_blanks(documents_words); - - stem(documents_words); - -// print_tokens(documents_words); - - cout << "Calculating wordbag..." << endl; - - const vector tokens = tokens_list(documents_words); - -// cout << tokens << endl; - - const WordBag word_bag = calculate_word_bag(tokens); - -// word_bag.print(); - -// set_words_frequencies(word_bag.frequencies); - - const vector raw_variable_names = word_bag.words; - const Index raw_variables_number = word_bag.size(); - - Tensor row(raw_variables_number); - - // Output - - cout << "Writting data file..." << endl; - - filesystem::path new_data_source_path = data_path; -/* - replace(new_data_source_path, ".txt", "_data.txt"); - replace(new_data_source_path, ".csv", "_data.csv"); -*/ - ofstream new_file; - new_file.open(new_data_source_path); - - for(Index i = 0; i < raw_variables_number; i++) - new_file << raw_variable_names[i] << ";"; - - new_file << "target" << "\n"; - - // Data file preview - -// const Index preview_size = 4; - -// data_file_preview.resize(preview_size, 2); - -// for(Index i = 0; i < preview_size - 1; i++) - { -// data_file_preview(i, 0) = documents(0)(i); -// data_file_preview(i, 1) = targets(0)(i); - } - -// data_file_preview(preview_size - 1, 0) = documents(0)(documents(0).size() - 1); -// data_file_preview(preview_size - 1, 1) = targets(0)(targets(0).size() - 1); - -// row.setZero(); - - #pragma omp parallel for - - for(Index i = 0; i < documents_number; i++) - { - row.setZero(); - - const vector document_tokens = documents_words[i]; - - const Index tokens_number = document_tokens.size(); - - for(Index j = 0; j < tokens_number; j++) - { - const string word = documents_words[i][j]; - - for(Index k = 0; k < raw_variables_number; k++) - if(word == raw_variable_names[k]) - row(k)++; - } - - for(Index k = 0; k < raw_variables_number; k++) - new_file << row(k) << ";"; - - new_file << targets[i] << "\n"; - } - - new_file.close(); - - data_path = new_data_source_path; - separator = Separator::Semicolon; - has_header = true; - -// for(Index i = 0; i < get_raw_variables_number(VariableUse::Input); i++) -// set_raw_variable_type(i, RawVariableType::Numeric); - -} - -} - - -// OpenNN: Open Neural Networks Library. -// Copyright(C) 2005-2024 Artificial Intelligence Techniques, SL. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/opennn/text_data_set.h b/opennn/text_data_set.h deleted file mode 100644 index 61adb6907..000000000 --- a/opennn/text_data_set.h +++ /dev/null @@ -1,90 +0,0 @@ -// OpenNN: Open Neural Networks Library -// www.opennn.net -// -// T E X T D A T A S E T C L A S S H E A D E R -// -// Artificial Intelligence Techniques SL -// artelnics@artelnics.com - -#ifndef TEXTDATASET_H -#define TEXTDATASET_H - -#include "data_set.h" - -namespace opennn -{ - -class TextDataSet : public DataSet -{ - -public: - - TextDataSet(); - - const Index& get_short_words_length() const; - const Index& get_long_words_length() const; - const Tensor& get_words_frequencies() const; - - Tensor get_data_file_preview() const; - - void set_short_words_length(const Index&); - void set_long_words_length(const Index&); - // void set_words_frequencies(const Tensor&); - - void from_XML(const XMLDocument&); - void to_XML(XMLPrinter&) const; - - Tensor sentence_to_data(const string&) const; - - void read_txt(); - -private: - - Index short_word_length = 2; - - Index long_word_length = 15; - - Tensor word_frequencies; - - vector stop_words - { "i", "me", "my", "myself", "we", "us", "our", "ours", "ourselves", "you", "u", "your", "yours", "yourself", "yourselves", "he", - "him", "his", "himself", "she", "her", "hers", "herself", "it", "its", "itself", "they", "them", "their", "theirs", "themselves", - "what", "which", "who", "whom", "this", "that", "these", "those", "im", "am", "m", "is", "are", "was", "were", "be", "been", "being", - "have", "has", "s", "ve", "re", "ll", "t", "had", "having", "do", "does", "did", "doing", "would", "d", "shall", "should", "could", - "ought", "i'm", "you're", "he's", "she's", "it's", "we're", "they're", "i've", "you've", "we've", "they've", "i'd", "you'd", "he'd", - "she'd", "we'd", "they'd", "i'll", "you'll", "he'll", "she'll", "we'll", "they'll", "isn't", "aren't", "wasn't", "weren't", "hasn't", - "haven't", "hadn't", "doesn't", "don't", "didn't", "won't", "wouldn't", "shan't", "shouldn't", "can't", "cannot", "couldn't", "mustn't", - "let's", "that's", "who's", "what's", "here's", "there's", "when's", "where's", "why's", "how's", "daren't", "needn't", "oughtn't", - "mightn't", "shes", "its", "were", "theyre", "ive", "youve", "weve", "theyve", "id", "youd", "hed", "shed", "wed", "theyd", - "ill", "youll", "hell", "shell", "well", "theyll", "isnt", "arent", "wasnt", "werent", "hasnt", "havent", "hadnt", - "doesnt", "dont", "didnt", "wont", "wouldnt", "shant", "shouldnt", "cant", "cannot", "couldnt", "mustnt", "lets", - "thats", "whos", "whats", "heres", "theres", "whens", "wheres", "whys", "hows", "darent", "neednt", "oughtnt", - "mightnt", "a", "an", "the", "and", "n", "but", "if", "or", "because", "as", "until", "while", "of", "at", "by", "for", "with", "about", - "against", "between", "into", "through", "during", "before", "after", "above", "below", "to", "from", "up", "down", "in", "out", "on", - "off", "over", "under", "again", "further", "then", "once", "here", "there", "when", "where", "why", "how", "all", "any", "both", - "each", "few", "more", "most", "other", "some", "such", "no", "nor", "not", "only", "own", "same", "so", "than", "too", "very" }; - - Tensor data_file_preview; -}; - -} - -#endif - - -// OpenNN: Open Neural Networks Library. -// Copyright(C) 2005-2024 Artificial Intelligence Techniques, SL. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA From cf2bcd6c07a2f7e7b59b40583f9f6af8af517302 Mon Sep 17 00:00:00 2001 From: RoberLopez Date: Fri, 20 Dec 2024 00:07:32 +0100 Subject: [PATCH 4/8] clean --- blank/blank.dir/Debug/blank.ilk | Bin 1731320 -> 0 bytes .../Debug/main.nativecodeanalysis.xml | 82 ------------------ .../Debug/vc.nativecodeanalysis.all.xml | 75 ---------------- opennn/auto_association_data_set.h | 4 +- opennn/config.h | 59 ------------- opennn/opennn.h | 1 - opennn/opennn.vcxproj | 3 - opennn/tinyxml2.h | 3 +- tests/genetic_algorithm_test.cpp | 1 + tests/statistics_test.cpp | 1 - 10 files changed, 4 insertions(+), 225 deletions(-) delete mode 100644 blank/blank.dir/Debug/blank.ilk delete mode 100644 blank/blank.dir/Debug/main.nativecodeanalysis.xml delete mode 100644 blank/blank.dir/Debug/vc.nativecodeanalysis.all.xml delete mode 100644 opennn/config.h diff --git a/blank/blank.dir/Debug/blank.ilk b/blank/blank.dir/Debug/blank.ilk deleted file mode 100644 index 9d779998aa2b5b9e064e3335e9a81590c65b0de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1731320 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 z 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

(|pWE@q(=%Q0gMvHl0% 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

({z|$L8xa&uP_T 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 uE;N8+^!9kJ*&-Q&3bTLB! diff --git a/blank/blank.dir/Debug/main.nativecodeanalysis.xml b/blank/blank.dir/Debug/main.nativecodeanalysis.xml deleted file mode 100644 index a5de4545f..000000000 --- a/blank/blank.dir/Debug/main.nativecodeanalysis.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\arch\SSE\ - Complex.h - 20 - 2 - - 26495 - La variable "Eigen::internal::Packet2cf::v" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::Packet2cf::{ctor} - ??0Packet2cf@internal@Eigen@@QEAA@XZ - 20 - - Eigen::internal::Packet2cf::v - - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\arch\SSE\ - Complex.h - 183 - 2 - - 26495 - La variable "Eigen::internal::Packet1cd::v" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::Packet1cd::{ctor} - ??0Packet1cd@internal@Eigen@@QEAA@XZ - 183 - - Eigen::internal::Packet1cd::v - - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\unsupported\Eigen\src\SpecialFunctions\ - SpecialFunctionsImpl.h - 1808 - 16 - - 26498 - La función "Eigen::GenericNumTraits<float>::quiet_NaN" es constexpr. Marque la variable "nan" como constexpr si desea realizarse una evaluación en tiempo de compilación (con.5). - Eigen::internal::betainc_impl<float>::run - ?run@?$betainc_impl@M@internal@Eigen@@SAMMMM@Z - 1807 - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\unsupported\Eigen\src\SpecialFunctions\ - SpecialFunctionsImpl.h - 1877 - 17 - - 26498 - La función "Eigen::GenericNumTraits<double>::quiet_NaN" es constexpr. Marque la variable "nan" como constexpr si desea realizarse una evaluación en tiempo de compilación (con.5). - Eigen::internal::betainc_impl<double>::run - ?run@?$betainc_impl@N@internal@Eigen@@SANNNN@Z - 1876 - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\ - GenericPacketMath.h - 163 - 2 - - 26495 - La variable "Eigen::internal::eigen_packet_wrapper<__m128i,0>::m_val" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::eigen_packet_wrapper<__m128i,0>::{ctor} - ??0?$eigen_packet_wrapper@T__m128i@@$0A@@internal@Eigen@@QEAA@XZ - 163 - - Eigen::internal::eigen_packet_wrapper<__m128i,0>::m_val - - - - \ No newline at end of file diff --git a/blank/blank.dir/Debug/vc.nativecodeanalysis.all.xml b/blank/blank.dir/Debug/vc.nativecodeanalysis.all.xml deleted file mode 100644 index ec8512e96..000000000 --- a/blank/blank.dir/Debug/vc.nativecodeanalysis.all.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\arch\SSE\ - Complex.h - 20 - 2 - - 26495 - La variable "Eigen::internal::Packet2cf::v" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::Packet2cf::{ctor} - ??0Packet2cf@internal@Eigen@@QEAA@XZ - 20 - - Eigen::internal::Packet2cf::v - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\arch\SSE\ - Complex.h - 183 - 2 - - 26495 - La variable "Eigen::internal::Packet1cd::v" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::Packet1cd::{ctor} - ??0Packet1cd@internal@Eigen@@QEAA@XZ - 183 - - Eigen::internal::Packet1cd::v - - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\unsupported\Eigen\src\SpecialFunctions\ - SpecialFunctionsImpl.h - 1808 - 16 - - 26498 - La función "Eigen::GenericNumTraits<float>::quiet_NaN" es constexpr. Marque la variable "nan" como constexpr si desea realizarse una evaluación en tiempo de compilación (con.5). - Eigen::internal::betainc_impl<float>::run - ?run@?$betainc_impl@M@internal@Eigen@@SAMMMM@Z - 1807 - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\unsupported\Eigen\src\SpecialFunctions\ - SpecialFunctionsImpl.h - 1877 - 17 - - 26498 - La función "Eigen::GenericNumTraits<double>::quiet_NaN" es constexpr. Marque la variable "nan" como constexpr si desea realizarse una evaluación en tiempo de compilación (con.5). - Eigen::internal::betainc_impl<double>::run - ?run@?$betainc_impl@N@internal@Eigen@@SANNNN@Z - 1876 - - - - C:\Users\Roberto Lopez\Documents\opennn\eigen\Eigen\src\Core\ - GenericPacketMath.h - 163 - 2 - - 26495 - La variable "Eigen::internal::eigen_packet_wrapper<__m128i,0>::m_val" no está inicializada. Siempre debe inicializarse una variable miembro (type.6). - Eigen::internal::eigen_packet_wrapper<__m128i,0>::{ctor} - ??0?$eigen_packet_wrapper@T__m128i@@$0A@@internal@Eigen@@QEAA@XZ - 163 - - Eigen::internal::eigen_packet_wrapper<__m128i,0>::m_val - - - \ No newline at end of file diff --git a/opennn/auto_association_data_set.h b/opennn/auto_association_data_set.h index ce68657c2..0353a1cea 100644 --- a/opennn/auto_association_data_set.h +++ b/opennn/auto_association_data_set.h @@ -6,8 +6,8 @@ // Artificial Intelligence Techniques SL // artelnics@artelnics.com -#ifndef AUTOASSOCIATIONDATASET_H -#define AUTOASSOCIATIONDATASET_H +#ifndef AUTOASSOCIATIVEDATASET_H +#define AUTOASSOCIATIVEDATASET_H #include "data_set.h" diff --git a/opennn/config.h b/opennn/config.h deleted file mode 100644 index 8c24fd691..000000000 --- a/opennn/config.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef OPENNN_CONFIG_H -#define OPENNN_CONFIG_H - -//#define NUMERIC_LIMITS_MIN type(0.000001) - -//#define NOMINMAX -//#define _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING -//#define _CRT_SECURE_NO_WARNINGS -//#define EIGEN_PERMANENTLY_DISABLE_STUPID_WARNINGS - -//#pragma warning(push, 0) - -//#define EIGEN_USE_THREADS - -//#include "../eigen/Eigen/Core" -//#include "../eigen/unsupported/Eigen/CXX11/Tensor" -//#include "../eigen/Eigen/src/Core/util/DisableStupidWarnings.h" - -//#define OPENNN_CUDA - -#ifdef OPENNN_CUDA - -#include "../../opennn_cuda/CudaOpennn/kernel.cuh" -#include "cuda.h" -#include "cuda_runtime.h" -#include "cublas_v2.h" -#include -#include -#include - -#endif - -//#include - -//#define STRING(x) #x -//#define TOSTRING(x) STRING(x) -//#define LOG __FILE__ ":" TOSTRING(__LINE__)"\n" - -namespace opennn -{ - - // using namespace std; - // using namespace Eigen; - - //using type = float; - - // using dimensions = vector; - - //using execution_policy = std::execution::par; - -// template -// inline bool is_instance_of(const T* ptr) -// { -// return dynamic_cast(ptr); -// } -} - -#endif - diff --git a/opennn/opennn.h b/opennn/opennn.h index 281b7f56d..c11c5cf74 100644 --- a/opennn/opennn.h +++ b/opennn/opennn.h @@ -16,7 +16,6 @@ #include "data_set.h" #include "time_series_data_set.h" #include "auto_association_data_set.h" -#include "text_data_set.h" #include "image_data_set.h" #include "language_data_set.h" diff --git a/opennn/opennn.vcxproj b/opennn/opennn.vcxproj index 2c201b772..6599efb13 100644 --- a/opennn/opennn.vcxproj +++ b/opennn/opennn.vcxproj @@ -257,7 +257,6 @@ - @@ -362,8 +361,6 @@ - - diff --git a/opennn/tinyxml2.h b/opennn/tinyxml2.h index ca02e129a..485883015 100644 --- a/opennn/tinyxml2.h +++ b/opennn/tinyxml2.h @@ -43,8 +43,7 @@ #include "pch.h" -#include "config.h" - +#include "tensors.h" using namespace opennn; diff --git a/tests/genetic_algorithm_test.cpp b/tests/genetic_algorithm_test.cpp index baf622e10..9c58211e9 100644 --- a/tests/genetic_algorithm_test.cpp +++ b/tests/genetic_algorithm_test.cpp @@ -2,6 +2,7 @@ #include "../opennn/genetic_algorithm.h" +using namespace opennn; TEST(GeneticAlgorithmTest, DefaultConstructor) { diff --git a/tests/statistics_test.cpp b/tests/statistics_test.cpp index d49704a4d..6df343a26 100644 --- a/tests/statistics_test.cpp +++ b/tests/statistics_test.cpp @@ -1,6 +1,5 @@ #include "pch.h" -#include "../opennn/config.h" #include "../opennn/statistics.h" #include "../opennn/histogram.h" #include "../opennn/tensors.h" From 9e9dfb90d9406cee360ce5d18b50dc46c44f2b63 Mon Sep 17 00:00:00 2001 From: Roberto Lopez Date: Fri, 20 Dec 2024 11:47:16 +0100 Subject: [PATCH 5/8] Clean --- examples/translation/main.cpp | 2 +- opennn/correlations.cpp | 2 +- opennn/growing_neurons.cpp | 2 +- opennn/language_data_set.cpp | 62 ++++++++++------------------------- opennn/opennn.vcxproj | 2 +- 5 files changed, 22 insertions(+), 48 deletions(-) diff --git a/examples/translation/main.cpp b/examples/translation/main.cpp index 9f28dbc91..71e589f13 100644 --- a/examples/translation/main.cpp +++ b/examples/translation/main.cpp @@ -15,8 +15,8 @@ #include #include - // OpenNN includes + #include "../../opennn/opennn.h" using namespace std; diff --git a/opennn/correlations.cpp b/opennn/correlations.cpp index a2c91febc..62bb07c69 100644 --- a/opennn/correlations.cpp +++ b/opennn/correlations.cpp @@ -105,7 +105,7 @@ Correlation correlation(const ThreadPoolDevice* thread_pool_device, throw runtime_error("Correlations Exception: Unknown case."); - return Correlation(); +// return Correlation(); } diff --git a/opennn/growing_neurons.cpp b/opennn/growing_neurons.cpp index 9ed612583..9ecab2692 100644 --- a/opennn/growing_neurons.cpp +++ b/opennn/growing_neurons.cpp @@ -70,7 +70,7 @@ NeuronsSelectionResults GrowingNeurons::perform_neurons_selection() const Index last_trainable_layer_index = neural_network->get_last_trainable_layer_index(); - Index neurons_number; + Index neurons_number = 0; // Loss index diff --git a/opennn/language_data_set.cpp b/opennn/language_data_set.cpp index ccd0e84a5..5b6683027 100644 --- a/opennn/language_data_set.cpp +++ b/opennn/language_data_set.cpp @@ -258,7 +258,6 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const add_xml_element(printer, "SamplesNumber", to_string(get_samples_number())); - // Samples uses { @@ -309,16 +308,7 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const // Missing values number - { - printer.OpenElement("MissingValuesNumber"); - - buffer.str(""); - buffer << missing_values_number; - - printer.PushText(buffer.str().c_str()); - - printer.CloseElement(); - } + add_xml_element(printer, "MissingValuesNumber", to_string(missing_values_number)); if(missing_values_number > 0) { @@ -422,11 +412,9 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const // Completion Vocabulary printer.OpenElement("CompletionVocabulary"); - for (const auto& word : completion_vocabulary) { - printer.OpenElement("Word"); - printer.PushText(word.c_str()); - printer.CloseElement(); - } + + for (const auto& word : completion_vocabulary) + add_xml_element(printer, "Word", word); printer.CloseElement(); @@ -434,25 +422,12 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const printer.OpenElement("ContextVocabulary"); for (const auto& word : context_vocabulary) - { - printer.OpenElement("Word"); - printer.PushText(word.c_str()); - printer.CloseElement(); - } + add_xml_element(printer, "Word", word); printer.CloseElement(); - // Completion Dimensions - printer.OpenElement("CompletionDimensions"); - printer.PushText(to_string(maximum_completion_length).c_str()); - printer.CloseElement(); - - // Context Dimensions - printer.OpenElement("ContextDimensions"); - printer.PushText(to_string(maximum_context_length).c_str()); - printer.CloseElement(); - - // Close data set + add_xml_element(printer, "CompletionDimensions", to_string(maximum_completion_length)); + add_xml_element(printer, "ContextDimensions", to_string(maximum_context_length)); printer.CloseElement(); @@ -520,7 +495,6 @@ void LanguageDataSet::from_XML(const XMLDocument& data_set_document) raw_variable.set_use(read_xml_string(raw_variable_element, "Use")); raw_variable.set_type(read_xml_string(raw_variable_element, "Type")); - if(raw_variables[i].type == RawVariableType::Categorical || raw_variables[i].type == RawVariableType::Binary) raw_variable.categories = get_tokens(read_xml_string(raw_variable_element, "Categories"), ";"); @@ -826,15 +800,15 @@ void LanguageDataSet::import_lengths(const filesystem::path& path, Index& input_ struct WordpieceAlgorithmParameters { - Index upper_threshold; - Index lower_threshold; - Index interations_number; - Index max_input_tokens; - Index max_token_length; - Index max_unique_characters; - Index vocabulary_size; - float slack_ratio; - bool include_joiner_token; + Index upper_threshold = 0; + Index lower_threshold = 0; + Index interations_number = 0; + Index max_input_tokens = 0; + Index max_token_length = 0; + Index max_unique_characters = 0; + Index vocabulary_size = 0; + float slack_ratio = 0; + bool include_joiner_token = false; string joiner; vector reserved_tokens; }; @@ -877,7 +851,7 @@ map ensure_all_tokens_exist(const set& input_tokens, vector get_split_indices(const string& word, const map& current_tokens, - bool include_joiner_token, + const bool& include_joiner_token, const string& joiner) { vector indices; @@ -892,7 +866,7 @@ vector get_split_indices(const string& word, string subtoken = word.substr(start, end - start); if(include_joiner_token && start > 0) - subtoken = joiner + subtoken; + subtoken.insert(0, joiner); if(current_tokens.find(subtoken) != current_tokens.end()) { diff --git a/opennn/opennn.vcxproj b/opennn/opennn.vcxproj index 2c201b772..a1732bb81 100644 --- a/opennn/opennn.vcxproj +++ b/opennn/opennn.vcxproj @@ -102,7 +102,7 @@ /bigobj %(AdditionalOptions) AdvancedVectorExtensions2 pch.h - Level1 + Level4 false true From 94d372b1d62231c306179a49c363d0a7fba283b9 Mon Sep 17 00:00:00 2001 From: rubenareces Date: Fri, 20 Dec 2024 12:30:05 +0100 Subject: [PATCH 6/8] maximal indices optmization --- examples/mnist/main.cpp | 17 +++--- opennn/adaptive_moment_estimation.cpp | 2 +- opennn/convolutional_layer.cpp | 14 ++--- opennn/neural_network.cpp | 12 ++-- opennn/pooling_layer.cpp | 83 +-------------------------- 5 files changed, 24 insertions(+), 104 deletions(-) diff --git a/examples/mnist/main.cpp b/examples/mnist/main.cpp index d562b5719..5922e9ad6 100644 --- a/examples/mnist/main.cpp +++ b/examples/mnist/main.cpp @@ -32,27 +32,24 @@ int main() const Index channels = 1; const Index targets = 2; - ImageDataSet image_data_set(samples_number, {image_height, image_width, channels}, {targets}); + //ImageDataSet image_data_set(samples_number, {image_height, image_width, channels}, {targets}); - image_data_set.set_data_random(); - - image_data_set.set(DataSet::SampleUse::Training); + //image_data_set.set_data_random(); + + //image_data_set.set(DataSet::SampleUse::Training); - //ImageDataSet image_data_set(0,{0,0,0},{0}); + ImageDataSet image_data_set(0,{0,0,0},{0}); //image_data_set.set_data_path("data"); //image_data_set.set_data_path("C:/mnist/train"); - //image_data_set.set_data_path("C:/binary_mnist"); + image_data_set.set_data_path("C:/binary_mnist"); //image_data_set.set_data_path("C:/Users/Roberto Lopez/Documents/opennn/examples/mnist/data"); //image_data_set.set_data_path("C:/melanoma_dataset_bmp"); //image_data_set.set_data_path("C:/melanoma_dataset_bmp_small"); //image_data_set.set_data_path("C:/melanoma_supersmall"); //image_data_set.set_input_dimensions({24,24,1}); - //image_data_set.read_bmp(); - - image_data_set.print_data(); - system("pause"); + image_data_set.read_bmp(); // Neural network diff --git a/opennn/adaptive_moment_estimation.cpp b/opennn/adaptive_moment_estimation.cpp index 01865e1d2..18fefe5f1 100644 --- a/opennn/adaptive_moment_estimation.cpp +++ b/opennn/adaptive_moment_estimation.cpp @@ -178,7 +178,7 @@ TrainingResults AdaptiveMomentEstimation::perform_training() const vector input_variable_scalers = data_set->get_variable_scalers(DataSet::VariableUse::Input); const vector target_variable_scalers = data_set->get_variable_scalers(DataSet::VariableUse::Target); - const vector input_variable_descriptives;// = data_set->scale_variables(DataSet::VariableUse::Input); + const vector input_variable_descriptives = data_set->scale_variables(DataSet::VariableUse::Input); vector target_variable_descriptives; diff --git a/opennn/convolutional_layer.cpp b/opennn/convolutional_layer.cpp index 1bb10f870..53c225995 100644 --- a/opennn/convolutional_layer.cpp +++ b/opennn/convolutional_layer.cpp @@ -253,7 +253,7 @@ void ConvolutionalLayer::back_propagate(const vector>& i unique_ptr& forward_propagation, unique_ptr& back_propagation) const { - //auto start = chrono::high_resolution_clock::now(); + auto start = chrono::high_resolution_clock::now(); // Convolutional layer const Index batch_samples_number = back_propagation->batch_samples_number; @@ -386,12 +386,12 @@ void ConvolutionalLayer::back_propagate(const vector>& i } } - //auto end = chrono::high_resolution_clock::now(); - //auto duration = chrono::duration_cast(end - start); - //cout << "Tiempo convolution back propagate: " - // << duration.count() / 1000 << "::" - // << duration.count() % 1000 - // << " segundos::milisegundos" << endl; + auto end = chrono::high_resolution_clock::now(); + auto duration = chrono::duration_cast(end - start); + cout << "Tiempo convolution back propagate: " + << duration.count() / 1000 << "::" + << duration.count() % 1000 + << " segundos::milisegundos" << endl; } diff --git a/opennn/neural_network.cpp b/opennn/neural_network.cpp index 4ef2c9833..0dc05c26b 100644 --- a/opennn/neural_network.cpp +++ b/opennn/neural_network.cpp @@ -443,12 +443,12 @@ void NeuralNetwork::set_image_classification(const dimensions& input_dimensions, const dimensions convolution_stride_dimensions = { 1, 1 }; const ConvolutionalLayer::ConvolutionType convolution_type = ConvolutionalLayer::ConvolutionType::Valid; - //add_layer(make_unique(get_output_dimensions(), - // kernel_dimensions, - // ConvolutionalLayer::ActivationFunction::RectifiedLinear, - // convolution_stride_dimensions, - // convolution_type, - // "convolutional_layer_" + to_string(i+1))); + add_layer(make_unique(get_output_dimensions(), + kernel_dimensions, + ConvolutionalLayer::ActivationFunction::RectifiedLinear, + convolution_stride_dimensions, + convolution_type, + "convolutional_layer_" + to_string(i+1))); const dimensions pool_dimensions = { 2, 2 }; const dimensions pooling_stride_dimensions = { 2, 2 }; diff --git a/opennn/pooling_layer.cpp b/opennn/pooling_layer.cpp index fe3e62e80..841fca017 100644 --- a/opennn/pooling_layer.cpp +++ b/opennn/pooling_layer.cpp @@ -312,12 +312,6 @@ void PoolingLayer::forward_propagate_max_pooling(const Tensor& inputs, unique_ptr& layer_forward_propagation, const bool& is_training) const { - cout << "Tiempo max pooling forward:" << endl; - auto start = chrono::high_resolution_clock::now(); - - cout << "inputs:\n" << inputs << endl; - system("pause"); - PoolingLayerForwardPropagation* pooling_layer_forward_propagation = static_cast(layer_forward_propagation.get()); @@ -348,90 +342,20 @@ void PoolingLayer::forward_propagate_max_pooling(const Tensor& inputs, if (!is_training) return; - auto start_maximal_indices = chrono::high_resolution_clock::now(); - Tensor& maximal_indices = pooling_layer_forward_propagation->maximal_indices; const Index pool_size = pool_height * pool_width; - const Index pool_number = batch_samples_number * output_height * output_width; const Index output_size = output_height * output_width * channels; const Eigen::array output_dimensions({ output_height, output_width, channels }); const Eigen::array reshape_dimensions = { pool_size, output_size }; - const Eigen::array shuffle_dimensions = { 1, 2, 3, 0, 4 }; - const Eigen::array shuffle_dimensions_old = { 0, 1, 2, 3 }; - - cout << "image_patches: " << endl; - for (Index i = 0; i < image_patches.size(); i++) - cout << image_patches(i) << " "; - Tensor image_patches_shuffled = image_patches.shuffle(shuffle_dimensions); - cout << "\nimage_patches_shuffled: " << endl; - for (Index i = 0 ; i < image_patches_shuffled.size() ; i++) - cout << image_patches_shuffled(i) << " "; - cout << endl; - - TensorMap> patches_flat( - image_patches_shuffled.data(), - pool_number, - pool_size - ); - cout << "patches_flat: " << patches_flat << endl; - - Tensormaximal_indices_flat(pool_number); - - //#pragma omp parallel for - for (Index pool_index = 0; pool_index < pool_number; pool_index++) - { - for (Index channel_index = 0; channel_index < channels; ++channel_index) - { - TensorMap> patch( - patches_flat.data() + pool_index * pool_size * channels + channel_index * pool_size, - pool_size - ); - - cout << "\tpatch: " << patch << endl; - Tensor max_idx = patch.argmax(); - - maximal_indices_flat(pool_index) = max_idx(); - - Index batch_index = pool_index / pool_number; - Index patch_index = pool_index % pool_number; - Index oh = patch_index / output_width; - Index ow = patch_index % output_width; - - //maximal_indices(batch_index, oh, ow, channel_index) = max_idx(); - } - } - /* - cout << "maximal_indices_new: " << maximal_indices_flat << endl; - //#pragma omp parallel for + #pragma omp parallel for for (Index batch_index = 0; batch_index < batch_samples_number; batch_index++) - { - - const Tensor image = image_patches.chip(batch_index, 0); - const Tensor image_shuffle = image.shuffle(shuffle_dimensions_old); - const Tensor patches_flat = image_shuffle.reshape(reshape_dimensions); - + { + const Tensor patches_flat = image_patches.chip(batch_index, 0).reshape(reshape_dimensions); maximal_indices.chip(batch_index, 0) = patches_flat.argmax(0).reshape(output_dimensions); } - - cout << "Maximal indices:\n" << maximal_indices << endl; - system("pause"); - */ - auto end_maximal_indices = chrono::high_resolution_clock::now(); - auto duration_maximal_indices = chrono::duration_cast(end_maximal_indices - start_maximal_indices); - cout << "\tTiempo maximal_indices calculation: " - << duration_maximal_indices.count() / 1000 << "::" - << duration_maximal_indices.count() % 1000 - << " segundos::milisegundos" << endl; - - auto end = chrono::high_resolution_clock::now(); - auto duration = chrono::duration_cast(end - start); - cout << "Tiempo max pooling forward propagate: " - << duration.count() / 1000 << "::" - << duration.count() % 1000 - << " segundos::milisegundos" << endl; } @@ -440,7 +364,6 @@ void PoolingLayer::back_propagate(const vector>& input_p unique_ptr& forward_propagation, unique_ptr& back_propagation) const { - cout << "pasa por aqui" << endl; const TensorMap> inputs = tensor_map_4(input_pairs[0]); const TensorMap> deltas = tensor_map_4(delta_pairs[0]); From a72928b4abe92269af904704f20217e1c6f3c1d3 Mon Sep 17 00:00:00 2001 From: rubenareces Date: Fri, 20 Dec 2024 13:55:24 +0100 Subject: [PATCH 7/8] clean --- opennn/convolutional_layer.cpp | 14 +++++++------- tests/adaptive_moment_estimation_test.cpp | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/opennn/convolutional_layer.cpp b/opennn/convolutional_layer.cpp index 53c225995..1bb10f870 100644 --- a/opennn/convolutional_layer.cpp +++ b/opennn/convolutional_layer.cpp @@ -253,7 +253,7 @@ void ConvolutionalLayer::back_propagate(const vector>& i unique_ptr& forward_propagation, unique_ptr& back_propagation) const { - auto start = chrono::high_resolution_clock::now(); + //auto start = chrono::high_resolution_clock::now(); // Convolutional layer const Index batch_samples_number = back_propagation->batch_samples_number; @@ -386,12 +386,12 @@ void ConvolutionalLayer::back_propagate(const vector>& i } } - auto end = chrono::high_resolution_clock::now(); - auto duration = chrono::duration_cast(end - start); - cout << "Tiempo convolution back propagate: " - << duration.count() / 1000 << "::" - << duration.count() % 1000 - << " segundos::milisegundos" << endl; + //auto end = chrono::high_resolution_clock::now(); + //auto duration = chrono::duration_cast(end - start); + //cout << "Tiempo convolution back propagate: " + // << duration.count() / 1000 << "::" + // << duration.count() % 1000 + // << " segundos::milisegundos" << endl; } diff --git a/tests/adaptive_moment_estimation_test.cpp b/tests/adaptive_moment_estimation_test.cpp index 95d429f39..4cac5eeea 100644 --- a/tests/adaptive_moment_estimation_test.cpp +++ b/tests/adaptive_moment_estimation_test.cpp @@ -41,19 +41,19 @@ TEST(AdaptiveMomentEstimationTest, TrainApproximation) DataSet data_set(1, {1}, {1}); data_set.set_data_constant(type(1)); - NeuralNetwork neural_network(NeuralNetwork::ModelType::Approximation, {1}, {}, {1}); - neural_network.set_parameters_constant(type(1)); + //NeuralNetwork neural_network(NeuralNetwork::ModelType::Approximation, {1}, {1}, {1}); + //neural_network.set_parameters_constant(type(1)); - TrainingStrategy training_strategy(&neural_network, &data_set); + //TrainingStrategy training_strategy(&neural_network, &data_set); - AdaptiveMomentEstimation* adaptive_moment_estimation = training_strategy.get_adaptive_moment_estimation(); + //AdaptiveMomentEstimation* adaptive_moment_estimation = training_strategy.get_adaptive_moment_estimation(); - adaptive_moment_estimation->set_maximum_epochs_number(1); - adaptive_moment_estimation->set_display(false); + //adaptive_moment_estimation->set_maximum_epochs_number(1); + //adaptive_moment_estimation->set_display(false); - TrainingResults training_results = adaptive_moment_estimation->perform_training(); + //TrainingResults training_results = adaptive_moment_estimation->perform_training(); - EXPECT_LE(training_results.get_epochs_number(), 1); + //EXPECT_LE(training_results.get_epochs_number(), 1); } From d57a5824db0607c3320367596809544791002f85 Mon Sep 17 00:00:00 2001 From: Roberto Lopez Date: Fri, 20 Dec 2024 14:18:31 +0100 Subject: [PATCH 8/8] Clean --- .../data/amazon_cells_labelled_data.txt | 976 ++++++++++++++++++ examples/translation/main.cpp | 22 +- opennn/batch.cpp | 26 +- opennn/batch.h | 2 - opennn/language_data_set.cpp | 285 +++-- opennn/language_data_set.h | 51 +- 6 files changed, 1138 insertions(+), 224 deletions(-) diff --git a/examples/amazon_reviews/data/amazon_cells_labelled_data.txt b/examples/amazon_reviews/data/amazon_cells_labelled_data.txt index e69de29bb..b7aabee1b 100644 --- a/examples/amazon_reviews/data/amazon_cells_labelled_data.txt +++ b/examples/amazon_reviews/data/amazon_cells_labelled_data.txt @@ -0,0 +1,976 @@ +context_token_position_0;context_token_position_1;context_token_position_2;context_token_position_3;context_token_position_4;context_token_position_5;context_token_position_6;context_token_position_7;context_token_position_8;context_token_position_9;context_token_position_10;context_token_position_11;context_token_position_12;context_token_position_13;context_token_position_14;context_token_position_15;context_token_position_16;context_token_position_17;context_token_position_18;context_token_position_19;context_token_position_20;context_token_position_21;context_token_position_22;context_token_position_23;context_token_position_24;context_token_position_25;context_token_position_26;context_token_position_27;context_token_position_28;context_token_position_29;context_token_position_30;context_token_position_31;context_token_position_32;context_token_position_33;context_token_position_34;context_token_position_35;context_token_position_36;context_token_position_37;context_token_position_38;context_token_position_39;context_token_position_40;input_token_position_0;input_token_position_1;target_token_position_0;target_token_position_1 +2;10;103;218;64;133;56;98;70;124;66;331;63;82;41;91;83;82;60;54;61;54;112;198;42;40;101;35;87;34;36;269;304;105;348;17;0;0;0;0;0;2;9;9;3 +2;85;131;15;132;55;111;302;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;77;70;60;43;164;395;262;211;17;0;0;0;0;0;0;0;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;10;10;3 +2;53;194;66;184;70;36;269;304;105;61;336;61;45;208;69;190;127;23;379;46;294;223;120;17;46;164;391;232;312;4;4;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;46;159;64;77;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;86;66;43;390;176;176;144;60;331;66;155;63;66;45;295;136;313;66;155;37;83;175;299;315;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;123;88;86;52;147;111;185;397;243;150;52;147;111;41;393;162;105;79;36;269;78;164;290;78;61;15;217;42;109;164;176;295;60;39;393;112;71;52;243;0;2;9;9;3 +2;123;88;102;51;164;397;105;48;327;91;17;17;17;88;46;303;78;86;65;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;47;83;79;198;66;52;98;15;42;258;76;68;189;17;0;0;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;9;9;3 +2;219;34;258;71;189;62;135;4;17;0;0;0;0;0;0;0;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;9;9;3 +2;62;60;100;92;64;77;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;41;83;81;75;42;109;125;105;120;180;157;40;101;69;117;60;150;390;176;294;111;96;66;60;38;396;78;243;76;79;96;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;123;60;257;56;91;83;52;83;125;91;229;76;35;87;34;124;105;83;24;14;39;78;42;52;78;241;347;66;72;159;83;38;396;175;61;61;167;52;78;0;2;9;9;3 +2;75;85;92;53;118;101;393;265;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;328;64;75;48;76;76;15;99;60;113;5;36;141;318;5;64;72;75;214;142;106;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;41;390;265;74;140;70;169;107;56;118;101;114;34;35;141;302;173;78;118;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;34;76;394;339;186;87;211;185;72;122;39;101;342;79;4;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;9;9;3 +2;103;275;103;85;4;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;95;77;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;36;141;159;161;353;49;141;239;82;34;56;98;84;330;88;56;269;76;91;41;110;279;84;124;158;164;112;390;61;109;116;45;208;17;0;0;0;0;0;2;9;9;3 +2;42;56;264;80;280;10;52;56;83;262;61;210;62;39;342;141;110;79;106;37;267;292;195;61;15;97;224;72;155;63;66;49;164;267;305;17;0;0;0;0;2;9;9;3 +2;42;213;65;66;108;73;68;44;244;144;39;267;83;62;34;262;61;342;223;83;74;170;76;63;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;36;101;109;221;105;290;337;231;102;60;46;233;46;390;61;144;191;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;86;58;129;66;51;393;112;65;171;96;122;141;110;257;35;241;61;62;84;10;52;53;118;248;37;192;73;101;223;36;118;241;176;69;17;0;0;0;0;2;10;10;3 +2;42;213;63;70;68;46;179;220;62;52;118;83;93;34;282;73;60;96;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;49;101;290;89;129;49;290;18;67;36;101;109;262;294;336;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;10;128;48;327;79;65;67;70;26;46;269;78;118;61;215;62;145;52;98;84;63;10;52;60;148;46;101;262;390;144;67;42;10;128;93;17;0;0;0;2;10;10;3 +2;42;225;112;10;53;360;84;60;82;61;78;105;393;290;78;195;61;49;105;101;394;293;76;56;91;83;41;83;141;125;209;66;124;17;0;0;0;0;0;0;2;9;9;3 +2;356;351;78;308;124;53;111;89;62;42;93;66;49;393;340;151;60;113;125;118;211;62;53;111;89;80;60;67;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;226;10;53;41;342;76;251;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;65;64;34;52;390;109;300;45;196;78;144;67;66;108;15;97;60;35;105;83;164;89;333;64;54;112;164;290;175;125;78;230;17;0;0;0;0;0;0;0;2;9;9;3 +2;65;90;64;42;76;291;70;356;121;124;56;118;322;113;61;102;75;52;243;61;196;167;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;63;64;54;112;303;137;82;34;46;101;270;203;142;39;248;395;98;52;125;83;79;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;86;257;190;58;317;45;83;389;78;82;65;36;269;78;247;290;78;62;42;41;229;65;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;203;184;99;104;99;34;290;184;102;82;290;141;393;76;79;66;309;52;326;88;47;147;51;393;112;151;71;43;393;159;83;17;41;390;265;87;140;79;0;0;2;10;10;3 +2;88;47;83;79;142;45;83;208;22;46;294;61;66;155;66;119;67;35;320;117;60;135;88;187;53;349;80;60;67;17;96;278;64;52;118;321;17;0;0;0;2;9;9;3 +2;63;114;44;83;125;78;136;75;104;17;0;0;0;0;0;0;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;10;10;3 +2;236;53;111;89;135;49;91;389;232;109;164;112;175;17;0;0;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;9;9;3 +2;60;131;64;77;62;95;276;73;60;25;382;143;17;0;0;0;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;10;10;3 +2;56;321;118;198;90;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;63;114;34;77;272;84;61;21;109;125;15;62;60;49;159;61;102;156;62;306;73;77;49;159;325;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;81;72;42;109;125;105;120;180;35;87;65;90;17;0;0;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;9;9;3 +2;156;94;134;76;313;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;149;308;40;241;262;333;70;34;393;76;390;101;17;0;0;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;9;9;3 +2;132;202;94;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;114;106;60;39;83;164;325;61;42;56;240;0;0;0;0;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;10;10;3 +2;56;118;101;82;60;267;313;46;244;64;40;269;112;164;183;65;96;31;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;130;34;105;176;393;69;73;128;105;390;199;51;83;176;289;69;60;37;105;344;323;271;56;83;51;129;349;79;60;67;61;130;257;37;192;17;0;0;0;0;2;9;9;3 +2;65;131;52;83;83;109;61;104;253;17;0;0;0;0;0;0;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;10;10;3 +2;352;73;96;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;72;45;101;393;76;274;62;226;10;53;53;349;80;121;63;52;118;101;393;197;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;85;49;105;179;292;195;62;138;72;309;67;173;35;393;141;89;87;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;34;54;61;137;44;83;87;262;101;289;34;290;78;393;166;53;349;61;34;49;76;164;353;34;51;291;16;56;232;197;108;209;46;164;158;295;82;61;78;0;2;10;10;3 +2;65;67;64;357;52;78;393;105;76;87;62;42;10;128;47;147;93;169;45;241;177;312;73;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;170;65;285;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;186;87;222;200;63;64;276;62;51;83;164;61;269;137;70;60;134;42;17;38;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;75;352;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;205;37;105;344;323;65;67;353;34;52;78;105;83;164;109;62;63;81;52;393;262;221;105;177;76;70;20;379;52;83;290;269;263;62;63;256;95;77;0;2;10;10;3 +2;42;86;234;75;235;73;60;24;375;143;62;86;93;133;36;101;109;125;141;334;78;61;117;169;107;51;83;176;289;69;68;100;92;80;60;267;38;162;17;0;2;10;10;3 +2;60;97;78;269;61;70;80;62;254;102;249;17;0;0;0;0;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;9;9;3 +2;38;61;301;299;337;298;88;145;70;177;78;46;159;105;101;61;101;389;78;10;52;53;83;158;52;393;125;125;321;17;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;139;140;65;39;239;125;141;229;61;52;294;175;63;354;75;156;15;38;144;176;240;62;36;101;342;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;172;41;83;191;125;118;211;61;56;91;83;34;77;39;244;16;62;42;360;206;102;49;91;118;316;61;60;148;255;42;10;128;253;82;60;45;208;52;147;0;2;10;10;3 +2;183;34;37;390;389;389;91;264;67;16;97;72;65;17;0;0;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;9;9;3 +2;88;86;66;41;342;76;60;67;142;34;49;241;78;159;393;141;241;181;176;144;70;60;311;49;241;78;87;66;308;88;306;74;17;0;0;0;0;0;0;0;2;9;9;3 +2;60;107;35;390;176;37;247;395;262;207;71;60;46;125;377;49;141;98;91;64;84;60;97;78;269;61;80;60;67;10;52;39;105;269;78;36;101;304;105;0;2;9;9;3 +2;34;56;83;83;89;45;229;105;130;42;34;290;78;390;394;229;76;63;15;63;52;393;76;76;243;74;37;194;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;39;83;83;231;190;214;127;46;233;94;61;201;42;56;193;40;141;164;61;301;61;62;84;155;61;82;60;56;98;103;221;78;390;221;61;17;0;0;0;2;10;10;3 +2;77;70;42;125;101;263;173;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;273;64;77;82;52;147;111;52;196;393;336;61;29;20;17;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;46;159;226;10;53;115;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;205;82;68;35;109;395;22;52;91;390;120;237;64;39;164;267;74;50;393;390;129;15;42;86;53;105;101;393;242;308;69;219;60;311;49;91;61;269;64;0;2;9;9;3 +2;77;36;118;319;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;156;185;290;297;52;78;336;70;41;268;150;115;17;0;0;0;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;10;10;3 +2;65;64;34;122;164;223;390;209;67;17;0;0;0;0;0;0;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;10;10;3 +2;170;65;90;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;185;72;183;70;37;382;143;381;17;17;17;56;105;343;74;34;76;304;105;78;339;76;70;37;382;143;381;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;64;34;77;45;196;78;144;188;17;0;0;0;0;0;0;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;10;10;3 +2;42;170;65;67;15;63;64;75;41;164;162;87;62;114;34;45;179;71;39;83;164;325;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;255;76;65;62;73;294;21;37;192;63;81;133;279;91;332;4;4;4;4;4;4;4;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;56;193;63;186;87;76;98;62;63;41;342;263;136;75;104;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;72;34;85;35;241;176;334;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;104;49;207;333;76;15;34;105;105;296;80;135;15;62;95;99;82;78;243;76;79;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;96;51;393;112;61;185;327;50;393;159;89;74;17;0;0;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;9;9;3 +2;65;188;174;77;15;97;63;35;105;341;130;25;46;269;78;118;61;71;108;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;94;61;102;204;66;108;62;186;87;211;170;61;284;17;0;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;10;10;3 +2;65;67;95;77;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;36;269;61;78;105;393;290;78;195;71;60;94;61;64;236;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;90;81;132;62;95;182;127;60;128;105;390;199;107;62;35;101;87;81;63;36;118;83;316;91;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;67;45;101;191;61;52;393;125;91;4;0;0;0;0;0;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;10;10;3 +2;70;34;90;84;36;233;61;99;310;99;65;107;138;15;42;38;396;125;292;63;66;115;275;182;62;73;77;91;38;164;301;127;65;285;138;17;0;0;0;0;2;9;9;3 +2;253;75;52;78;393;105;76;87;17;0;0;0;0;0;0;0;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;10;10;3 +2;174;77;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;113;35;393;263;149;49;141;98;46;303;159;82;107;113;17;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;9;9;3 +2;126;78;258;119;189;17;17;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;238;150;76;91;117;284;305;4;0;0;0;0;0;0;0;0;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;10;10;3 +2;123;88;49;141;164;112;66;108;65;82;34;203;70;177;78;200;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;39;212;65;90;66;122;56;164;164;98;173;35;390;176;17;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;9;9;3 +2;148;42;10;128;39;212;103;275;17;17;17;17;42;10;128;53;105;194;21;311;202;61;62;65;107;114;60;148;92;11;70;35;179;118;124;62;60;45;390;0;2;10;10;3 +2;42;10;46;75;352;73;68;37;83;290;390;61;195;17;0;0;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;9;9;3 +2;82;78;83;176;247;347;52;83;164;109;198;74;73;60;280;51;164;397;105;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;183;91;122;395;261;15;88;224;39;141;303;118;189;313;185;327;60;66;390;144;78;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;37;83;389;294;210;74;34;35;241;176;334;17;0;0;0;0;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;10;10;3 +2;60;134;81;75;85;62;73;60;39;248;52;118;318;324;62;106;63;81;34;85;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;51;83;175;296;68;52;393;125;125;322;76;74;171;280;22;381;379;62;34;125;125;261;299;74;218;81;72;34;46;164;78;158;122;78;395;83;243;60;0;2;9;9;3 +2;49;105;101;61;29;16;85;272;16;75;156;49;159;325;61;15;154;114;36;101;342;52;78;87;144;61;121;35;141;207;62;56;118;210;15;62;190;17;0;0;2;10;10;3 +2;84;10;52;34;41;393;177;328;39;141;164;395;11;54;112;198;42;10;46;72;314;63;36;232;105;292;74;15;237;42;126;10;53;360;64;60;131;146;17;0;2;9;9;3 +2;42;170;68;22;379;143;94;17;17;68;43;164;262;247;377;379;143;202;94;64;77;15;60;216;64;75;85;62;60;113;281;64;34;214;307;17;0;0;0;0;2;10;10;3 +2;60;272;15;34;246;118;101;393;265;51;229;76;142;181;42;109;125;105;120;61;167;20;17;22;124;176;316;390;396;83;231;15;51;243;76;91;61;42;109;0;2;9;9;3 +2;42;49;393;105;290;164;61;118;79;65;70;60;203;184;62;63;138;72;115;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;100;92;80;35;179;118;38;162;64;132;15;42;108;94;66;350;68;56;390;389;83;62;99;89;68;56;390;389;83;66;108;94;66;350;124;4;21;17;0;0;2;10;10;3 +2;65;67;64;52;141;390;109;62;45;160;62;60;37;390;61;125;141;98;64;122;164;223;390;209;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;227;34;45;196;78;144;40;83;83;89;87;97;42;360;84;61;227;52;83;396;80;66;208;62;63;51;101;290;161;62;48;101;397;120;52;83;396;313;185;0;2;10;10;3 +2;77;90;15;39;208;52;118;318;324;4;17;0;0;0;0;0;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;10;10;3 +2;34;262;61;342;223;83;74;77;17;0;0;0;0;0;0;0;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;10;10;3 +2;60;44;83;87;262;101;289;64;34;156;36;101;109;125;105;101;109;339;122;78;395;83;243;34;39;393;340;50;395;91;78;87;62;60;35;164;61;159;250;0;2;10;10;3 +2;42;277;65;67;34;105;212;60;38;162;71;46;98;62;42;10;46;36;101;109;300;78;83;74;54;112;118;316;125;87;73;63;17;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;75;214;80;60;113;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;114;234;34;56;294;112;91;70;54;61;17;0;0;0;0;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;10;10;3 +2;12;52;129;393;125;351;10;53;86;234;52;390;109;300;105;17;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;10;10;3 +2;42;10;128;53;105;194;52;147;111;37;390;389;389;91;264;113;125;390;83;175;61;70;68;250;67;62;65;43;164;262;247;107;64;60;187;107;42;10;128;0;2;10;10;3 +2;224;72;155;52;78;105;343;274;52;390;176;112;111;17;0;0;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;9;9;3 +2;42;164;109;75;49;144;164;180;73;68;255;17;0;0;0;0;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;10;10;3 +2;249;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;155;61;60;43;101;262;126;83;17;0;0;0;0;0;0;0;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;10;10;3 +2;77;34;393;76;390;101;4;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;35;164;61;159;166;60;152;81;75;249;17;0;0;0;0;0;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;9;9;3 +2;63;225;72;115;82;68;250;67;331;42;168;75;136;52;129;73;60;184;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;10;128;149;93;68;202;70;34;252;56;83;83;161;15;97;42;139;121;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;35;78;94;81;52;393;158;34;37;390;61;316;101;294;178;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;103;52;109;165;62;88;126;10;53;205;51;291;390;397;83;84;63;64;218;130;34;259;71;155;153;228;66;63;17;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;34;290;290;101;109;125;164;112;194;103;389;78;395;261;64;34;141;109;233;35;105;390;340;337;299;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;94;95;77;9;81;49;207;333;76;156;74;66;34;394;101;266;169;37;164;109;333;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;4;42;37;83;389;294;196;74;140;4;4;0;0;0;0;0;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;10;10;3 +2;183;91;16;16;122;75;203;83;209;4;4;4;4;4;17;0;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;9;9;3 +2;60;46;164;391;232;245;71;60;45;101;176;210;158;113;262;393;76;94;61;39;164;390;144;76;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;75;85;52;78;393;389;389;70;60;134;17;0;0;0;0;0;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;10;10;3 +2;68;94;95;163;49;83;164;158;87;16;44;83;243;17;0;0;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;10;10;3 +2;82;68;41;101;303;83;42;81;155;153;37;105;344;323;36;101;304;247;177;136;61;78;164;267;61;62;133;36;101;304;247;177;82;68;35;164;301;178;17;0;2;9;9;3 +2;55;319;51;83;290;101;176;112;196;195;64;53;105;83;221;162;101;303;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;219;34;258;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;37;393;105;69;52;147;111;37;390;389;389;91;264;21;46;294;223;83;271;15;42;38;396;125;91;390;243;175;76;24;37;105;344;61;62;63;81;82;181;0;2;9;9;3 +2;42;81;72;235;73;65;188;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;75;352;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;67;53;287;61;70;147;66;251;121;21;66;24;41;101;393;105;61;45;210;247;298;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;277;65;67;80;51;83;290;290;268;162;336;117;34;51;83;141;164;78;167;62;42;10;46;40;141;191;42;225;17;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;219;34;258;71;135;4;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;227;216;64;75;75;236;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;188;61;52;78;229;76;99;82;290;141;393;76;79;117;60;37;120;290;105;318;78;195;102;72;82;290;141;393;76;79;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;130;22;46;269;78;118;61;15;358;163;56;264;35;141;207;106;71;34;52;393;76;76;243;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;81;41;344;69;70;190;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;34;393;76;390;101;92;64;236;15;75;236;17;0;0;0;0;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;9;9;3 +2;42;93;34;262;61;342;223;83;74;133;282;73;65;94;45;294;297;66;68;27;379;377;143;35;141;207;262;91;346;36;393;105;304;4;0;0;0;0;0;0;2;10;10;3 +2;42;44;112;110;84;100;61;39;393;112;112;87;15;97;66;124;63;52;83;83;221;76;121;52;89;129;158;87;53;83;158;112;342;101;176;87;84;116;112;0;2;10;10;3 +2;42;10;128;213;7;24;56;267;79;41;83;191;125;118;211;61;84;100;182;127;172;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;67;64;75;39;208;73;52;243;76;69;169;44;244;71;124;61;61;333;61;62;56;83;262;35;105;110;61;69;64;52;390;176;112;390;389;159;240;74;0;2;10;10;3 +2;156;92;35;393;390;197;15;54;112;141;390;89;83;103;221;36;118;83;316;52;13;13;13;151;218;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;65;188;64;39;240;208;159;62;95;49;91;389;292;74;4;0;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;10;10;3 +2;62;42;163;170;60;36;342;232;61;4;0;0;0;0;0;0;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;10;10;3 +2;56;382;375;143;390;64;163;52;393;125;91;262;17;0;0;0;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;10;10;3 +2;106;42;145;185;64;56;118;295;80;60;82;348;112;129;15;103;41;91;83;63;40;101;120;17;60;190;42;108;60;285;60;45;120;61;42;121;63;17;0;0;2;9;9;3 +2;77;184;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;64;38;61;301;299;337;298;34;36;101;109;109;393;112;159;336;61;173;141;84;138;72;36;101;109;109;393;112;159;229;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;95;121;34;36;118;241;109;30;63;115;60;283;99;60;107;42;277;73;60;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;256;46;334;78;334;84;46;269;89;83;87;61;52;118;101;393;197;112;10;53;309;41;83;191;125;118;211;61;15;56;83;163;48;262;394;390;101;303;0;2;9;9;3 +2;77;55;111;302;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;226;10;53;115;142;106;17;17;42;35;101;393;176;78;118;63;70;68;45;381;290;62;227;72;332;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;45;320;71;63;64;75;52;118;241;125;62;60;358;64;156;62;306;15;73;77;40;247;125;118;159;61;17;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;226;10;53;45;208;279;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;107;285;42;41;229;64;60;46;101;76;83;52;129;97;78;269;142;60;52;293;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;132;152;4;4;4;4;4;4;4;4;17;0;0;0;0;0;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;10;10;3 +2;127;89;88;70;81;153;68;189;17;0;0;0;0;0;0;0;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;9;9;3 +2;41;110;145;84;122;31;60;34;393;76;390;101;92;64;236;17;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;9;9;3 +2;60;42;176;101;184;61;62;53;318;61;102;139;77;17;0;0;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;10;10;3 +2;60;39;390;144;35;105;110;301;105;254;91;61;106;60;48;125;78;195;61;84;107;47;83;79;61;17;41;164;162;61;389;248;64;77;17;0;0;0;0;0;2;10;10;3 +2;52;393;125;91;262;67;80;34;77;47;129;395;232;89;17;0;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;10;10;3 +2;42;36;269;112;292;79;68;56;390;389;83;10;52;202;15;11;280;41;61;382;379;143;146;66;68;67;62;63;174;121;34;36;118;241;109;56;118;129;220;0;2;10;10;3 +2;42;49;223;60;45;229;61;78;48;61;80;63;11;55;375;17;20;379;176;146;15;62;63;215;121;61;66;52;141;110;66;34;36;247;395;141;62;45;101;0;2;9;9;3 +2;63;149;51;83;290;101;176;112;390;397;120;60;67;99;227;52;78;232;333;273;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;123;88;121;34;45;101;393;76;35;393;397;397;69;66;355;105;293;106;119;36;269;304;105;61;336;61;15;217;65;67;64;70;88;4;0;0;0;0;0;0;2;9;9;3 +2;126;10;53;183;65;90;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;10;128;93;65;35;141;302;78;101;101;179;118;94;70;103;221;135;215;62;256;72;214;73;60;56;98;63;329;80;60;113;17;0;0;0;0;0;0;0;2;9;9;3 +2;60;100;92;64;85;62;39;393;112;290;78;195;111;245;64;34;395;120;268;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;86;65;67;62;63;64;34;53;118;232;112;82;68;52;293;15;42;139;34;262;118;232;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;51;83;175;299;74;93;312;56;220;83;42;224;72;52;78;98;36;269;112;292;79;70;190;127;20;143;46;294;223;120;122;389;345;122;69;37;390;61;0;2;9;9;3 +2;82;290;105;79;230;4;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;328;39;141;164;395;31;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;77;67;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;258;71;20;377;35;393;290;161;17;0;0;0;0;0;0;0;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;9;9;3 +2;97;157;42;36;118;83;290;89;55;319;46;164;390;141;142;47;160;15;60;44;83;87;125;191;35;207;141;160;53;349;61;254;34;252;52;83;290;269;263;0;2;9;9;3 +2;60;51;83;125;141;239;178;37;194;82;34;252;56;83;83;161;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;169;51;69;66;112;83;17;17;355;165;85;67;66;183;17;17;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;10;10;3 +2;45;229;74;206;86;234;38;396;78;105;83;221;74;156;62;41;83;141;125;209;80;60;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;86;93;312;56;196;41;196;37;105;344;324;52;390;176;112;111;62;190;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;72;42;109;125;105;120;180;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;45;160;56;83;160;15;42;41;289;74;72;159;83;63;64;218;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;88;10;45;141;170;41;110;53;118;294;63;64;17;0;0;0;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;10;10;3 +2;249;36;118;319;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;49;144;335;131;226;10;53;307;17;0;0;0;0;0;0;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;9;9;3 +2;108;198;67;15;52;390;109;125;74;37;83;164;389;17;0;0;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;9;9;3 +2;60;36;342;232;64;205;49;105;129;78;338;127;42;53;118;101;393;265;78;63;116;122;15;62;60;40;247;125;118;159;61;102;82;290;105;79;390;262;74;0;2;10;10;3 +2;106;82;106;42;360;63;81;34;85;82;304;61;78;178;17;0;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;10;10;3 +2;63;330;75;52;78;247;112;177;53;159;297;133;339;61;122;389;345;63;38;162;61;60;350;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;148;38;144;290;78;105;269;159;61;71;60;34;394;164;390;141;137;39;109;53;247;112;61;109;196;348;61;17;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;96;45;208;61;149;34;252;41;101;393;105;61;17;0;0;0;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;9;9;3 +2;77;94;15;75;42;109;125;105;120;180;16;41;379;143;143;17;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;10;10;3 +2;60;5;20;17;21;5;124;176;164;49;390;396;83;141;272;15;122;69;34;49;241;78;71;34;67;15;64;51;83;164;61;269;286;85;381;17;0;0;0;0;2;10;10;3 +2;42;10;128;93;65;70;47;193;74;21;58;317;62;63;114;174;77;70;124;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;85;53;247;112;61;109;196;34;393;76;390;101;17;0;0;0;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;10;10;3 +2;56;83;102;52;243;76;69;63;35;207;17;0;0;0;0;0;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;9;9;3 +2;42;225;72;35;179;220;36;269;78;164;290;153;60;36;101;109;125;288;70;252;185;340;241;90;97;42;45;193;112;79;60;45;120;61;269;84;42;52;118;0;2;9;9;3 +2;123;88;41;229;113;262;393;176;61;15;34;394;101;266;65;67;35;87;106;124;164;112;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;134;154;4;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;51;164;112;177;64;75;37;83;175;299;15;42;10;128;234;34;242;66;51;101;164;109;34;105;212;68;41;101;303;83;73;60;67;82;60;45;390;270;0;2;10;10;3 +2;39;208;152;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;116;41;390;265;74;140;65;17;0;0;0;0;0;0;0;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;10;10;3 +2;42;116;140;65;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;154;225;112;10;53;121;60;5;80;5;97;78;269;15;63;39;83;246;121;63;116;36;247;290;89;73;108;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;260;67;186;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;10;46;256;82;389;164;78;393;229;76;73;65;67;17;0;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;10;10;3 +2;39;248;397;120;39;105;83;392;302;299;74;378;17;0;0;0;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;9;9;3 +2;63;10;52;44;244;71;38;109;262;241;247;61;61;69;66;108;201;71;41;110;63;354;62;46;233;74;63;10;52;38;109;262;241;247;61;61;69;41;110;0;2;9;9;3 +2;52;390;109;300;15;45;160;395;83;160;62;77;307;17;0;0;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;10;10;3 +2;106;82;106;15;42;10;37;38;396;125;292;79;34;182;36;269;61;393;221;105;38;396;125;91;390;243;175;117;280;17;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;218;10;52;34;41;232;105;230;53;159;89;100;82;60;35;207;176;105;212;80;106;68;271;84;42;86;47;147;38;396;125;91;390;243;175;76;122;389;345;0;2;9;9;3 +2;172;102;36;91;78;334;74;75;214;62;39;393;112;290;78;195;111;245;64;37;83;175;299;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;54;61;393;166;126;10;53;121;41;83;191;262;164;162;61;97;65;107;64;75;45;160;395;83;160;9;226;10;53;124;61;61;136;68;41;164;267;17;0;2;10;10;3 +2;42;10;46;34;35;196;352;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;86;93;65;67;70;355;34;58;193;215;15;62;42;238;53;83;340;88;15;227;72;84;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;150;76;91;79;65;70;103;112;87;38;105;159;61;61;269;56;382;375;143;390;97;42;360;63;149;174;80;175;11;84;61;157;42;187;228;63;146;17;0;2;9;9;3 +2;60;96;64;36;101;109;300;78;83;74;108;198;66;124;17;0;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;9;9;3 +2;219;34;35;390;176;258;71;135;17;0;0;0;0;0;0;0;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;9;9;3 +2;126;10;53;258;119;7;7;7;80;65;107;17;0;0;0;0;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;9;9;3 +2;77;100;62;152;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;139;49;144;164;180;73;65;90;103;275;17;0;0;0;0;0;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;10;10;3 +2;107;71;68;39;164;394;232;210;255;61;186;17;0;0;0;0;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;10;10;3 +2;148;202;80;60;46;241;89;129;17;0;0;0;0;0;0;0;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;10;10;3 +2;34;223;118;264;159;45;83;335;73;156;52;118;295;62;36;101;109;389;321;17;42;140;88;65;131;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;81;75;38;396;290;210;76;66;155;65;94;201;42;53;118;101;393;265;78;63;81;139;36;223;83;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;185;72;309;60;283;46;390;61;78;287;99;124;17;0;0;0;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;9;9;3 +2;35;390;176;37;390;61;316;125;101;294;78;178;73;36;111;243;76;241;52;87;112;290;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;67;81;54;112;303;137;62;81;72;171;17;0;0;0;0;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;9;9;3 +2;260;36;303;78;268;105;152;186;17;0;0;0;0;0;0;0;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;9;9;3 +2;133;34;76;76;196;195;111;113;40;83;231;49;105;101;394;293;76;15;62;133;82;61;78;105;393;290;78;195;61;219;61;101;147;17;0;0;0;0;0;0;2;9;9;3 +2;63;37;83;389;83;164;78;61;60;49;393;105;125;322;71;34;202;94;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;56;321;118;186;87;49;243;112;87;17;0;0;0;0;0;0;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;10;10;3 +2;132;56;165;129;53;87;125;83;67;131;17;0;0;0;0;0;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;10;10;3 +2;156;41;83;191;125;118;211;61;70;60;134;62;206;115;77;4;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;10;10;3 +2;82;348;112;129;64;38;396;290;105;223;337;153;74;52;141;110;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;75;214;66;56;193;99;104;15;237;64;49;105;101;262;286;60;46;233;42;109;125;321;240;99;125;292;200;314;34;131;17;0;0;0;0;0;0;0;2;10;10;3 +2;63;10;52;329;121;34;40;141;101;304;62;64;52;78;105;343;15;52;83;290;326;15;62;37;393;247;242;17;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;48;68;40;101;61;118;60;148;67;42;86;186;93;17;0;0;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;10;10;3 +2;63;10;52;75;142;78;247;290;78;167;62;34;125;125;317;66;122;71;85;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;170;106;60;39;83;164;325;61;62;70;109;39;164;290;78;232;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;65;90;93;34;52;78;105;343;51;393;262;262;91;18;49;129;105;342;83;393;109;52;221;340;84;81;54;112;262;193;137;130;34;259;62;36;164;303;79;0;2;9;9;3 +2;236;92;62;152;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;36;137;354;103;53;118;294;62;39;141;390;109;61;87;15;63;64;52;290;241;87;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;113;125;390;83;175;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;132;41;164;162;61;39;248;173;141;17;0;0;0;0;0;0;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;10;10;3 +2;77;70;314;73;119;41;268;52;348;83;101;17;0;0;0;0;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;10;10;3 +2;85;90;16;82;290;105;79;230;55;111;302;17;0;0;0;0;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;10;10;3 +2;149;93;65;34;46;269;78;118;97;63;10;52;174;39;141;164;395;198;74;103;275;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;95;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;34;262;61;342;223;83;141;43;393;112;89;17;0;0;0;0;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;9;9;3 +2;84;107;225;112;10;53;115;38;196;220;17;0;0;0;0;0;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;9;9;3 +2;96;278;64;51;291;85;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;51;129;349;79;27;41;101;393;105;61;45;229;105;17;0;0;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;9;9;3 +2;63;10;52;34;77;188;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;258;119;189;4;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;170;65;94;4;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;72;149;238;63;37;247;294;119;49;141;98;91;15;97;46;98;154;49;179;264;337;298;39;346;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;174;49;91;389;292;74;4;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;54;112;105;83;141;337;242;16;42;10;46;40;390;270;136;17;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;9;9;3 +2;42;40;164;304;63;24;52;78;241;61;201;71;60;100;92;17;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;10;10;3 +2;34;394;101;266;65;107;123;88;145;17;0;0;0;0;0;0;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;9;9;3 +2;51;147;61;230;331;95;77;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;258;76;68;45;196;78;144;189;73;65;113;125;390;83;175;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;75;85;67;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;148;71;106;64;60;51;179;164;153;39;83;164;325;15;75;41;83;141;125;209;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;36;101;109;389;321;70;48;393;105;56;118;342;83;39;164;109;390;74;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;85;90;15;85;52;83;340;91;17;0;0;0;0;0;0;0;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;10;10;3 +2;42;170;65;202;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;187;71;106;15;63;226;10;53;56;193;104;17;0;0;0;0;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;9;9;3 +2;42;168;75;42;109;125;105;120;180;73;65;94;117;49;141;240;105;269;159;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;277;63;201;63;81;103;52;109;165;62;34;76;232;137;17;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;10;10;3 +2;77;67;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;116;112;10;53;140;183;69;65;90;17;0;0;0;0;0;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;9;9;3 +2;281;71;43;393;112;89;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;236;74;36;269;78;61;78;105;393;290;78;41;69;83;17;0;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;9;9;3 +2;65;188;64;77;15;82;61;78;165;79;63;15;45;129;63;251;76;136;355;112;210;62;63;114;234;332;85;186;87;52;294;175;73;133;312;0;0;0;0;0;2;10;10;3 +2;77;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;183;63;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;132;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;185;72;255;65;67;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;55;319;51;83;290;101;176;112;196;195;53;118;105;393;60;41;164;162;301;78;64;132;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;65;64;41;164;162;61;185;327;60;148;67;42;10;128;186;93;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;95;77;15;157;68;36;164;78;142;78;207;79;60;67;41;83;52;290;247;78;158;79;60;49;105;179;292;167;52;78;105;318;82;61;78;83;191;71;37;0;2;10;10;3 +2;65;107;95;62;81;134;76;313;17;0;0;0;0;0;0;0;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;10;10;3 +2;36;303;78;268;105;152;81;359;17;0;0;0;0;0;0;0;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;9;9;3 +2;96;278;256;72;279;274;82;280;51;164;397;232;55;377;390;17;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;9;9;3 +2;52;243;76;69;63;35;207;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;215;42;44;112;110;84;42;253;34;56;339;37;83;290;390;61;195;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;103;221;211;52;118;101;393;197;304;82;304;299;79;65;103;211;105;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;85;134;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;186;87;222;174;80;60;187;53;346;17;60;273;81;36;91;78;334;74;38;112;176;295;91;79;82;34;36;144;304;105;56;98;62;60;36;269;61;78;105;0;2;10;10;3 +2;42;51;83;175;296;63;50;393;159;89;74;62;63;95;77;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;114;234;332;77;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;99;46;288;356;36;101;109;125;141;334;79;15;42;39;212;65;94;10;52;46;159;105;344;118;211;81;75;56;83;164;89;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;68;24;16;58;193;48;197;133;89;337;21;375;380;143;117;53;247;290;389;211;41;342;263;60;251;34;45;179;182;127;65;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;206;185;72;203;83;200;60;36;269;61;393;221;105;107;35;196;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;64;34;85;96;15;62;63;277;41;91;83;139;39;208;17;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;10;10;3 +2;60;82;61;78;105;393;290;78;195;46;164;112;393;111;64;45;207;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;154;227;52;141;390;109;274;66;307;353;68;34;141;241;109;36;141;101;290;89;185;290;297;52;78;336;73;101;223;51;83;109;101;270;60;131;17;0;0;0;2;10;10;3 +2;67;215;41;342;263;251;121;63;225;157;63;81;171;17;0;0;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;10;10;3 +2;60;96;64;54;112;105;83;141;337;242;99;104;99;60;152;108;181;78;243;164;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;10;52;54;112;290;101;109;389;321;137;62;60;100;92;64;50;393;210;236;36;101;109;125;261;76;73;60;67;11;51;164;397;105;146;150;73;68;49;0;2;9;9;3 +2;56;83;86;277;78;243;34;45;179;71;36;101;109;125;141;390;178;61;80;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;65;64;37;83;389;294;210;74;34;46;303;78;86;123;119;52;78;229;138;72;106;110;250;67;54;61;333;259;37;105;390;270;17;0;0;0;0;0;0;0;2;10;10;3 +2;42;56;240;68;189;35;207;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;170;65;273;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;168;154;75;235;73;60;134;17;0;0;0;0;0;0;0;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;10;10;3 +2;42;150;76;91;79;65;90;187;62;81;54;112;118;316;125;87;73;63;42;109;221;76;337;78;83;74;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;47;176;333;64;256;45;207;69;82;113;262;393;263;17;0;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;9;9;3 +2;42;81;34;242;66;185;55;319;37;337;141;69;82;60;203;73;133;282;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;86;21;16;22;35;241;61;80;68;250;67;157;42;168;41;268;15;97;88;145;78;72;308;169;222;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;85;188;15;45;110;134;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;41;110;147;16;60;51;390;69;78;211;61;102;72;60;148;15;62;47;83;196;220;102;60;40;164;221;61;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;331;225;72;115;75;104;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;168;164;199;52;393;290;161;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;51;318;254;16;16;16;16;355;251;52;118;318;324;17;0;0;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;9;9;3 +2;75;214;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;96;64;332;104;99;34;51;83;125;141;239;178;70;60;150;390;176;294;111;84;36;164;221;73;60;67;355;21;58;317;34;176;101;17;0;0;0;0;0;2;10;10;3 +2;60;216;64;132;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;329;36;101;109;389;321;286;82;38;196;220;113;15;60;100;64;306;62;45;101;393;76;15;62;60;251;45;208;61;34;36;101;393;300;71;37;192;17;0;2;10;10;3 +2;75;306;15;92;100;62;88;126;10;53;86;66;124;61;61;73;60;100;80;119;42;125;101;76;52;294;175;88;86;60;100;97;78;269;61;80;60;94;17;0;2;10;10;3 +2;20;17;279;45;208;69;96;11;88;126;10;53;86;66;51;83;158;241;177;63;99;39;105;83;392;302;299;87;74;99;103;221;71;60;39;141;318;67;61;0;2;9;9;3 +2;48;262;394;390;101;303;74;218;64;34;282;73;60;34;76;118;120;167;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;75;37;390;61;316;125;101;294;153;17;0;0;0;0;0;0;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;9;9;3 +2;63;81;181;82;83;396;125;243;61;167;281;15;97;42;116;256;86;38;396;125;292;79;182;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;49;247;290;78;159;166;108;198;62;225;72;34;76;76;169;44;244;71;35;101;233;66;68;216;130;42;213;63;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;132;100;92;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;81;72;235;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;34;281;71;43;393;112;89;84;35;105;341;130;122;69;80;68;67;70;21;37;192;4;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;171;96;95;77;82;67;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;260;36;303;78;268;105;152;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;10;128;37;105;344;323;68;67;190;135;61;127;42;145;52;98;15;205;80;36;269;290;105;129;83;62;68;67;64;256;77;11;44;112;101;290;89;80;0;2;10;10;3 +2;216;64;359;62;39;393;340;71;52;78;164;78;159;17;0;0;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;9;9;3 +2;85;34;393;76;390;101;92;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;45;196;78;144;273;114;53;247;112;61;389;232;221;76;68;150;176;164;112;390;397;336;111;36;316;164;262;390;141;245;62;253;68;278;34;56;118;342;0;2;10;10;3 +2;42;81;52;196;153;82;68;128;118;159;144;15;73;60;36;247;76;144;80;68;122;246;15;62;60;94;45;233;52;390;176;112;111;17;0;0;0;0;0;0;2;9;9;3 +2;56;91;83;43;91;161;80;60;67;17;0;0;0;0;0;0;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;9;9;3 +2;95;121;34;36;118;241;109;17;17;95;99;34;76;304;105;78;339;76;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;214;15;156;51;164;112;177;15;85;96;278;17;0;0;0;0;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;10;10;3 +2;60;267;47;129;395;232;89;36;101;304;247;177;82;45;101;61;181;177;144;61;64;41;232;105;230;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;132;52;78;241;348;56;267;83;198;94;17;0;0;0;0;0;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;9;9;3 +2;60;45;101;393;263;125;83;287;105;48;125;78;195;64;77;15;60;35;393;109;125;91;61;73;60;45;160;61;64;75;17;17;17;34;125;125;291;69;17;0;2;9;9;3 +2;60;149;285;84;42;360;224;42;109;125;105;101;304;64;60;100;45;83;164;161;151;117;60;94;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;187;254;60;216;52;393;290;161;15;42;86;47;147;93;190;127;21;35;241;61;15;186;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;67;155;61;38;396;78;105;83;221;74;41;179;4;0;0;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;9;9;3 +2;60;46;159;105;344;118;211;154;95;104;15;97;11;34;290;290;232;76;69;66;356;42;86;350;79;146;63;34;125;125;141;390;389;390;120;186;87;222;17;0;2;10;10;3 +2;156;328;62;92;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;154;15;123;119;67;64;37;105;344;323;15;65;131;64;72;40;101;69;66;52;164;304;63;15;52;125;83;290;337;298;157;37;105;344;323;39;239;185;327;0;2;9;9;3 +2;63;64;45;160;15;204;66;108;15;62;114;75;306;216;62;53;247;112;61;109;390;61;61;195;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;249;307;15;56;98;173;35;390;176;17;0;0;0;0;0;0;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;9;9;3 +2;63;37;83;389;294;210;74;81;72;99;85;99;68;52;375;375;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;34;395;120;268;273;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;258;71;189;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;93;150;76;91;79;34;280;37;164;78;164;36;137;15;277;34;75;104;39;294;390;61;118;79;62;332;90;17;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;170;65;67;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;81;45;320;69;70;65;94;70;34;279;135;62;215;84;42;10;128;277;63;42;351;10;53;122;41;316;125;338;17;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;10;45;141;122;37;105;390;394;112;176;34;141;343;15;62;68;94;52;78;241;78;61;51;69;69;70;133;51;83;164;61;269;17;0;0;0;0;0;0;2;9;9;3 +2;37;390;61;125;141;98;64;132;62;272;64;99;85;99;169;117;84;58;193;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;96;278;64;154;77;4;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;260;67;42;10;128;186;93;17;17;17;17;149;93;63;70;34;252;46;269;78;118;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;72;34;85;188;17;17;63;174;70;34;259;217;52;78;241;347;41;164;270;312;82;68;34;223;101;51;147;301;53;316;83;49;141;98;91;17;0;0;0;0;2;9;9;3 +2;65;64;103;38;109;262;241;164;61;61;69;62;154;68;113;61;41;393;105;78;123;42;53;346;66;49;303;118;60;113;331;353;68;113;17;0;0;0;0;0;2;9;9;3 +2;49;105;179;292;61;60;67;80;106;52;293;61;17;0;0;0;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;10;10;3 +2;65;64;34;75;34;304;247;177;67;73;249;96;278;84;48;125;91;229;61;80;34;56;83;164;89;47;129;395;232;89;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;306;52;89;87;125;83;271;15;279;96;278;15;279;51;164;112;177;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;103;87;101;53;83;158;112;342;101;176;87;52;393;290;161;17;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;9;9;3 +2;77;41;164;162;61;39;248;273;17;0;0;0;0;0;0;0;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;10;10;3 +2;88;145;205;53;287;52;83;141;389;49;321;247;196;61;73;60;151;61;293;11;38;396;348;390;232;146;37;390;61;125;141;98;15;75;36;101;342;17;0;0;2;10;10;3 +2;283;282;99;311;61;86;124;299;195;79;17;0;0;0;0;0;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;9;9;3 +2;130;53;346;69;46;288;46;288;41;164;162;61;389;248;40;191;177;78;61;65;64;60;107;84;39;294;166;95;104;17;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;46;164;176;159;111;41;83;141;125;17;0;0;0;0;0;0;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;10;10;3 +2;60;260;281;71;36;247;125;186;34;141;343;73;60;128;105;390;199;36;303;78;268;105;152;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;236;100;92;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;148;67;82;46;241;89;129;29;12;17;0;0;0;0;0;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;10;10;3 +2;63;174;75;104;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;36;101;109;125;288;52;118;318;323;68;90;75;49;105;101;109;125;78;74;62;63;95;104;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;38;396;164;290;78;74;219;42;56;240;79;17;0;0;0;0;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;10;10;3 +2;60;49;159;325;51;120;342;223;195;64;275;122;141;110;219;311;36;101;109;125;241;286;16;134;76;67;61;102;254;91;69;66;76;98;17;0;0;0;0;0;2;9;9;3 +2;65;64;34;77;37;291;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;132;90;15;42;168;75;52;164;78;390;61;389;194;73;60;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;41;390;265;74;140;172;62;38;112;290;101;393;247;177;356;66;40;167;284;34;53;346;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;182;127;88;10;37;38;396;125;292;17;0;0;0;0;0;0;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;10;10;3 +2;314;106;113;125;390;83;175;61;15;45;83;389;78;150;313;15;65;285;238;72;52;78;98;80;68;113;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;90;62;134;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;100;61;85;51;83;164;61;269;286;134;76;62;38;389;389;292;167;15;227;84;52;390;109;300;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;256;56;164;196;69;17;17;17;17;17;17;42;10;46;52;326;65;188;116;115;104;17;17;123;42;186;51;83;290;390;83;304;63;4;0;0;0;0;0;0;2;9;9;3 +2;219;34;37;390;61;316;125;101;294;78;178;0;0;0;0;0;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;9;9;3 +2;75;49;105;101;109;125;78;152;17;0;0;0;0;0;0;0;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;10;10;3 +2;132;90;70;60;134;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;75;49;144;164;180;73;65;94;17;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;258;119;189;62;135;17;0;0;0;0;0;0;0;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;9;9;3 +2;42;38;61;125;83;290;337;298;170;60;279;96;278;17;0;0;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;10;10;3 +2;63;10;52;103;52;78;393;125;266;66;86;66;44;83;83;125;183;69;171;184;61;15;203;184;61;15;36;247;76;144;61;15;41;83;191;125;118;211;61;0;2;9;9;3 +2;95;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;49;141;240;105;269;159;61;202;38;396;175;144;299;183;17;0;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;10;10;3 +2;42;36;164;221;355;117;128;105;390;199;201;36;69;393;141;164;267;114;156;105;250;67;61;17;17;17;17;60;187;285;42;72;159;79;81;60;139;249;152;0;2;9;9;3 +2;42;10;45;141;122;45;320;69;70;34;171;113;125;390;83;175;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;41;390;265;74;140;65;273;66;186;87;211;4;0;0;0;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;10;10;3 +2;43;164;395;262;211;38;247;64;34;395;120;268;173;4;0;0;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;10;10;3 +2;56;83;51;83;175;296;34;56;118;210;36;342;345;76;96;84;40;101;120;37;83;191;130;34;36;101;393;300;41;101;393;105;61;78;118;83;150;390;176;0;2;9;9;3 +2;130;34;58;193;60;96;56;264;36;101;109;300;78;83;74;37;83;191;80;68;94;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;86;228;52;147;111;67;82;257;58;317;15;97;65;107;64;60;148;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;181;34;395;120;268;171;45;320;70;39;165;21;143;143;143;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;65;64;60;187;67;42;10;128;93;84;114;234;103;36;118;83;316;74;253;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;142;78;64;72;306;15;100;64;75;37;390;61;78;321;79;62;88;86;66;58;83;340;157;88;53;111;89;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;49;141;208;159;35;105;83;164;161;139;204;80;65;36;141;318;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;134;64;85;173;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;309;60;283;46;390;61;78;287;42;225;17;0;0;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;9;9;3 +2;48;118;62;42;70;176;179;66;154;124;299;195;60;56;83;267;76;36;342;232;38;389;389;292;63;114;80;119;67;17;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;10;46;314;63;73;181;42;105;167;105;52;125;294;112;11;73;131;146;62;63;329;276;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;154;60;102;164;56;220;83;68;54;112;196;35;105;341;146;17;16;42;10;46;72;173;39;269;76;71;60;46;164;176;112;129;159;52;78;247;125;17;0;0;2;9;9;3 +2;355;165;15;42;168;49;61;87;158;79;66;86;34;67;237;114;106;68;34;125;125;101;294;78;178;61;62;36;269;78;164;290;78;61;82;62;155;61;77;0;2;10;10;3 +2;186;87;285;80;67;115;49;91;389;292;74;15;52;118;83;121;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;181;179;220;72;83;200;65;67;10;52;34;125;125;193;164;112;175;64;84;63;139;354;51;335;35;141;164;162;15;38;61;125;83;290;337;298;82;60;106;0;2;9;9;3 +2;63;10;52;139;204;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;68;52;288;101;114;52;393;105;394;296;185;397;243;61;71;37;105;344;61;80;35;141;207;78;344;73;101;223;42;340;38;389;389;292;17;0;0;0;0;0;2;10;10;3 +2;39;240;208;159;113;125;118;211;61;17;0;0;0;0;0;0;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;10;10;3 +2;63;39;244;61;68;250;67;313;34;395;98;157;42;38;299;91;60;203;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;45;110;92;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;41;390;265;74;140;65;46;101;76;120;78;134;76;250;393;141;241;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;97;63;138;155;182;216;62;36;141;241;245;127;169;67;42;10;128;93;122;389;345;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;56;241;112;69;16;52;78;98;34;395;98;17;0;0;0;0;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;9;9;3 +2;42;56;390;61;118;42;224;51;129;349;60;54;112;196;62;155;35;207;68;189;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;34;395;61;268;273;95;77;4;4;17;0;0;0;0;0;0;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;10;10;3 +2;42;228;66;53;111;89;80;63;70;20;16;20;20;18;21;41;101;393;105;61;62;60;96;116;122;45;210;247;298;37;247;295;76;62;37;87;69;17;0;0;2;9;9;3 +2;123;88;126;10;53;39;244;63;15;173;249;15;99;305;60;54;112;196;36;268;61;73;107;113;125;191;149;17;42;116;72;140;65;66;169;211;17;0;0;0;2;9;9;3 +2;75;37;390;61;300;164;180;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;46;160;86;277;78;243;34;37;83;389;292;15;97;42;116;72;51;390;61;89;183;69;63;305;201;71;60;35;393;390;246;92;34;141;211;17;0;0;0;2;9;9;3 +2;206;253;65;131;173;52;109;165;62;64;75;37;390;389;389;159;393;246;66;82;61;78;165;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;51;120;78;345;76;68;67;66;121;171;49;91;389;232;109;164;112;175;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;116;140;49;393;105;158;164;61;69;60;43;164;262;247;43;396;16;20;143;52;91;390;120;21;237;95;39;141;164;395;198;74;73;68;46;179;101;50;0;2;10;10;3 +2;42;52;193;158;79;60;82;348;112;129;15;62;39;212;65;107;66;122;60;148;55;111;302;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;138;72;307;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;75;235;73;65;90;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;358;52;390;397;83;64;35;390;176;15;44;83;87;49;191;45;196;104;274;15;62;60;272;92;64;132;70;34;272;67;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;218;10;52;139;72;118;69;249;42;145;52;98;200;65;94;17;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;9;9;3 +2;42;10;46;40;141;191;42;39;212;65;90;80;168;164;199;63;64;41;289;66;39;244;15;63;81;112;10;53;41;390;265;134;76;17;0;0;0;0;0;0;2;10;10;3 +2;49;321;137;62;63;95;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;68;36;342;144;164;176;302;9;42;215;155;77;216;17;34;45;196;78;144;38;396;125;243;61;167;15;97;49;91;389;232;109;164;112;175;64;77;17;0;0;2;10;10;3 +2;42;205;39;393;298;251;76;63;122;389;345;42;56;264;66;122;76;62;53;349;79;254;35;141;302;173;78;118;62;56;390;16;39;390;62;72;159;79;84;0;2;9;9;3 +2;42;10;128;154;93;312;73;60;67;51;83;191;69;60;124;109;232;87;203;76;82;237;42;34;141;395;192;53;349;63;80;62;217;254;305;17;0;0;0;0;2;9;9;3 +2;72;85;157;56;193;69;34;41;164;78;150;52;393;112;176;141;164;61;301;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;135;74;52;118;318;178;62;92;90;17;0;0;0;0;0;0;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;10;10;3 +2;156;103;141;266;44;83;87;262;101;289;17;0;0;0;0;0;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;10;10;3 +2;75;104;253;62;329;68;52;326;389;267;83;40;396;376;49;91;389;292;74;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;41;232;105;230;67;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;35;78;379;143;96;43;393;112;89;4;17;0;0;0;0;0;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;9;9;3 +2;56;83;116;140;172;66;311;61;17;0;0;0;0;0;0;0;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;10;10;3 +2;145;78;155;60;103;389;78;395;261;66;115;73;68;36;101;109;125;223;91;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;352;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;236;55;319;36;141;241;245;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;96;95;77;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;133;183;91;61;51;83;109;232;301;80;65;107;4;17;0;0;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;9;9;3 +2;75;352;82;34;290;175;61;61;232;87;211;17;0;0;0;0;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;9;9;3 +2;42;39;244;65;82;83;396;290;303;137;62;103;238;49;105;101;262;286;122;51;129;349;69;65;67;62;49;91;118;316;61;36;118;164;112;176;69;203;105;0;2;9;9;3 +2;354;77;62;64;52;78;105;343;17;5;5;0;0;0;0;0;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;10;10;3 +2;42;86;93;53;109;101;262;390;144;152;70;21;150;22;58;317;215;15;62;42;168;357;235;73;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;136;76;229;49;105;101;175;76;326;64;37;390;389;389;159;393;246;62;36;393;109;262;91;61;268;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;37;390;61;316;125;101;294;78;178;17;17;42;41;229;169;222;84;40;101;120;82;68;113;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;103;389;78;395;261;70;280;61;17;0;0;0;0;0;0;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;10;10;3 +2;60;37;83;141;167;346;81;80;135;17;0;0;0;0;0;0;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;10;10;3 +2;75;204;66;108;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;54;112;290;101;109;389;321;137;82;60;113;15;126;10;53;108;73;45;176;55;396;383;383;143;143;11;38;112;394;146;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;315;52;395;196;158;51;101;290;89;129;79;151;71;60;54;112;196;66;34;37;120;78;294;336;54;112;89;112;110;112;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;41;342;263;34;251;70;34;279;135;15;64;51;83;164;61;269;286;214;54;162;91;279;16;56;193;69;36;269;76;196;195;61;62;60;92;71;100;64;0;2;10;10;3 +2;42;10;37;121;66;51;129;349;63;17;0;0;0;0;0;0;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;9;9;3 +2;60;44;83;87;262;101;289;64;139;56;321;118;395;118;390;144;82;108;209;112;120;61;62;64;52;78;393;105;76;87;274;42;126;10;53;38;396;125;292;0;2;10;10;3 +2;128;105;390;199;10;52;35;390;340;61;15;41;110;147;15;102;37;390;389;389;159;393;246;66;54;162;91;61;78;164;162;205;53;118;101;393;265;60;267;0;2;9;9;3 +2;130;36;118;241;176;69;355;112;160;15;172;35;164;78;348;390;120;115;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;88;56;269;10;53;51;83;176;105;129;63;4;0;0;0;0;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;10;10;3 +2;42;170;65;67;4;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;34;37;390;61;316;125;101;294;78;178;17;0;0;0;0;0;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;9;9;3 +2;227;72;108;105;39;105;390;243;76;74;17;0;0;0;0;0;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;9;9;3 +2;54;112;389;321;393;112;229;74;60;34;262;390;141;245;66;34;290;78;393;166;44;112;110;88;102;51;83;175;390;270;34;350;64;34;51;335;42;109;125;0;2;9;9;3 +2;217;42;38;396;158;164;112;177;76;70;60;283;67;15;205;84;93;60;283;282;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;51;120;393;246;61;82;60;67;122;69;38;196;220;52;78;393;290;89;142;46;164;396;315;150;46;223;83;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;49;76;164;51;101;290;161;17;0;0;0;0;0;0;0;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;10;10;3 +2;63;64;52;393;125;91;251;76;136;70;108;99;34;52;109;165;41;87;262;105;266;49;111;109;78;344;18;272;18;250;125;118;211;15;62;38;396;175;231;0;2;10;10;3 +2;42;116;37;83;389;294;210;74;140;60;43;164;262;247;35;78;376;379;143;394;70;53;118;322;56;118;101;102;45;320;69;70;36;101;109;389;321;15;36;0;2;10;10;3 +2;42;93;128;105;390;199;21;58;317;34;176;101;62;139;121;76;60;267;152;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;357;281;71;43;393;112;89;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;331;81;60;56;105;343;52;390;397;83;17;0;0;0;0;0;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;9;9;3 +2;95;99;37;120;290;105;390;262;79;17;0;0;0;0;0;0;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;10;10;3 +2;52;164;304;119;189;17;17;17;17;42;10;128;93;65;188;70;20;375;46;269;78;118;61;215;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;249;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;104;42;109;52;164;78;390;61;389;194;17;0;0;0;0;0;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;10;10;3 +2;60;35;322;133;339;145;175;340;69;64;168;164;397;69;15;237;64;75;42;109;125;321;240;70;34;47;87;290;36;101;109;109;223;91;17;0;0;0;0;0;2;10;10;3 +2;65;96;64;181;132;35;241;176;334;4;0;0;0;0;0;0;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;10;10;3 +2;37;83;389;292;167;36;247;125;17;0;0;0;0;0;0;0;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;9;9;3 +2;42;116;86;40;167;112;133;52;78;241;123;42;81;34;242;17;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;9;9;3 +2;42;56;193;40;141;164;61;301;61;62;63;329;276;73;284;17;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;10;10;3 +2;60;100;92;70;60;273;64;54;112;164;290;175;125;78;137;17;54;112;198;88;102;82;34;139;50;393;390;129;102;164;15;88;34;141;109;233;308;72;118;0;2;9;9;3 +2;42;116;72;140;65;188;66;169;211;17;0;0;0;0;0;0;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;9;9;3 +2;60;41;342;61;348;84;34;105;105;296;225;72;46;164;78;158;60;49;118;179;101;82;60;34;76;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;17;17;17;133;312;142;106;4;17;0;0;0;0;0;0;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;10;10;3 +2;99;181;113;141;338;51;83;394;390;83;395;72;79;15;331;82;65;184;62;72;118;69;41;316;125;243;61;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;39;105;101;176;67;36;118;241;109;64;34;76;232;137;62;75;38;87;83;36;164;78;158;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;88;47;147;44;112;110;123;88;49;303;118;79;63;41;289;274;150;60;313;47;393;109;262;91;71;135;61;70;60;39;393;112;290;78;195;88;56;240;150;0;2;9;9;3 +2;60;100;64;306;62;60;356;42;53;111;89;66;80;63;102;168;164;397;79;142;60;92;173;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;277;60;34;141;393;109;294;393;109;131;70;68;171;49;111;109;55;396;62;63;174;139;104;16;16;63;114;49;105;179;292;79;68;41;164;162;118;83;0;2;10;10;3 +2;75;85;90;15;104;253;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;46;101;262;390;144;67;173;231;102;34;46;303;78;86;17;0;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;10;10;3 +2;42;168;75;42;109;125;105;120;180;73;60;43;101;262;84;280;225;80;60;52;78;393;105;76;295;61;61;71;65;67;17;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;51;83;175;296;68;150;76;91;61;104;73;294;60;52;118;318;324;135;389;247;221;15;186;87;222;81;82;85;332;150;76;91;62;355;165;15;42;168;0;2;10;10;3 +2;60;67;64;52;78;393;105;76;87;62;56;229;105;125;105;101;101;389;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;168;72;42;109;125;105;120;180;73;65;62;42;116;72;140;65;188;66;169;211;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;68;149;36;101;109;125;141;334;78;64;60;52;78;164;162;289;100;315;64;34;45;196;78;144;45;110;205;157;53;349;79;136;66;24;11;71;24;146;0;0;2;9;9;3 +2;127;161;305;66;168;164;199;70;41;164;270;60;285;61;42;47;83;79;70;34;85;134;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;38;162;79;136;52;141;266;69;63;80;60;38;76;177;71;68;49;240;61;150;35;207;49;101;290;89;129;61;82;61;78;83;191;17;0;0;0;0;0;2;10;10;3 +2;42;93;66;40;101;66;34;52;78;345;62;213;34;171;133;89;337;67;237;64;332;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;95;77;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;139;54;176;74;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;41;232;105;230;15;93;66;52;395;196;158;22;135;61;17;0;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;9;9;3 +2;60;133;339;52;118;390;83;197;64;82;290;105;79;337;242;17;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;10;10;3 +2;133;51;291;42;109;125;105;101;304;178;17;0;0;0;0;0;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;9;9;3 +2;51;164;397;105;96;16;85;183;17;0;0;0;0;0;0;0;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;10;10;3 +2;44;83;83;125;136;60;85;115;168;164;199;4;4;0;0;0;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;10;10;3 +2;206;51;83;389;303;83;66;51;83;389;393;162;150;51;83;125;141;239;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;54;112;389;321;393;112;229;74;63;10;52;204;66;34;290;290;293;299;166;34;290;78;390;394;229;284;73;60;40;264;144;16;66;393;158;97;78;269;61;0;2;9;9;3 +2;103;42;35;164;61;159;166;53;118;105;83;395;68;189;151;60;56;244;110;70;72;118;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;77;131;62;134;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;106;63;173;89;81;107;37;105;344;117;200;25;82;158;120;34;262;101;304;60;44;196;158;243;36;101;393;299;91;62;63;81;36;247;290;89;79;17;42;0;2;9;9;3 +2;202;51;164;112;177;64;85;16;34;252;37;192;34;176;101;42;45;83;389;78;68;67;82;60;53;105;393;112;89;15;277;34;350;15;62;203;105;194;60;0;2;10;10;3 +2;52;109;165;15;52;144;83;89;15;42;109;125;105;120;61;167;45;320;69;15;49;247;290;78;159;111;52;129;393;125;73;168;300;52;78;232;333;82;49;0;2;10;10;3 +2;60;113;177;231;36;118;164;112;112;83;141;60;100;37;267;292;74;353;119;113;62;52;83;83;109;66;82;290;105;83;164;301;60;100;315;62;36;141;241;0;2;10;10;3 +2;133;112;83;71;60;171;107;61;86;186;50;393;210;174;49;105;344;91;74;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;168;40;141;191;42;255;76;63;17;0;0;0;0;0;0;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;10;10;3 +2;42;10;128;46;390;61;180;47;393;221;105;101;303;271;201;71;65;51;83;164;61;269;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;49;91;118;316;61;68;67;64;37;83;389;292;167;15;97;356;145;112;179;308;124;157;42;108;65;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;126;10;53;183;65;90;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;52;393;290;89;79;15;46;233;71;60;52;78;393;389;389;138;72;115;73;68;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;133;52;118;390;389;153;15;133;35;393;262;262;141;69;15;133;49;83;83;141;69;15;72;205;34;52;290;247;78;158;15;72;118;69;4;42;351;10;53;0;2;10;10;3 +2;260;103;389;78;395;261;186;228;17;17;17;17;123;42;224;40;167;65;59;91;101;52;78;241;61;42;116;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;53;346;69;66;309;34;350;80;172;64;181;38;396;91;290;339;82;39;105;303;78;247;78;195;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;131;64;34;39;141;390;109;61;87;281;71;49;141;208;159;62;114;133;39;105;269;78;150;52;293;49;105;179;292;195;219;61;101;147;17;0;0;0;0;2;9;9;3 +2;42;48;327;34;43;164;262;247;113;301;78;62;81;75;235;73;63;15;97;60;100;92;15;38;61;125;83;290;337;298;151;176;101;69;15;80;65;64;182;0;2;10;10;3 +2;42;170;60;272;15;63;10;52;139;357;85;92;17;0;0;0;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;10;10;3 +2;127;89;88;70;52;393;158;77;152;17;0;0;0;0;0;0;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;10;10;3 +2;227;34;66;78;111;49;207;333;17;0;0;0;0;0;0;0;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;10;10;3 +2;60;52;83;340;91;64;75;54;162;91;61;78;164;162;69;62;49;164;78;390;264;15;42;116;37;83;389;294;210;74;183;117;284;305;17;0;0;0;0;0;2;10;10;3 +2;42;40;167;56;267;83;389;74;20;52;78;241;17;42;238;36;269;78;164;290;78;36;69;393;141;241;18;142;9;53;30;62;82;389;232;109;284;71;65;0;2;9;9;3 +2;63;10;52;34;176;176;247;394;164;153;4;0;0;0;0;0;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;9;9;3 +2;77;90;70;60;134;4;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;86;255;76;172;70;35;179;118;39;164;109;390;74;62;39;105;390;243;263;15;62;106;38;112;391;101;87;60;267;36;141;241;245;62;38;164;301;71;0;2;10;10;3 +2;55;267;176;294;56;267;83;198;51;101;290;161;62;103;138;65;36;118;83;316;45;196;78;144;67;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;133;112;83;71;63;95;15;163;126;10;53;183;63;17;0;0;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;9;9;3 +2;46;393;76;76;87;15;45;110;92;100;15;62;60;36;164;61;69;34;105;212;60;56;267;83;10;52;82;301;105;78;81;236;74;52;393;125;91;40;141;0;2;9;9;3 +2;49;144;164;301;126;78;258;119;189;17;0;0;0;0;0;0;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;9;9;3 +2;106;82;106;15;42;10;46;50;393;210;52;164;78;390;61;389;194;73;65;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;123;88;102;45;320;69;70;34;85;92;280;94;44;83;83;125;45;320;69;15;65;64;112;10;53;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;58;129;49;141;240;105;269;294;290;61;36;269;78;294;302;61;66;108;60;283;39;141;164;395;79;184;328;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;37;390;61;316;101;294;153;51;120;393;246;61;17;0;0;0;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;9;9;3 +2;36;393;109;262;91;61;268;328;17;0;0;0;0;0;0;0;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;9;9;3 +2;77;63;81;171;49;207;333;76;156;95;85;15;133;312;62;63;36;164;221;82;45;120;61;135;217;42;38;396;125;292;79;4;4;4;4;0;0;0;0;0;2;10;10;3 +2;77;90;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;10;52;34;281;71;36;247;125;4;0;0;0;0;0;0;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;9;9;3 +2;68;38;396;125;91;390;243;175;81;359;17;17;17;17;17;65;81;68;39;101;393;105;78;118;202;94;15;62;259;63;81;310;190;214;127;68;45;208;43;0;2;9;9;3 +2;65;39;390;396;120;106;60;312;17;0;0;0;0;0;0;0;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;10;10;3 +2;260;186;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;168;75;235;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;10;128;93;133;53;105;101;393;242;34;290;175;61;61;69;60;82;348;112;129;15;185;327;141;101;191;69;51;69;78;211;61;150;49;91;389;232;109;0;2;10;10;3 +2;42;145;35;261;74;186;308;80;63;62;168;36;269;61;78;240;74;52;98;69;5;219;31;5;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;96;278;64;41;390;265;74;54;112;164;290;175;125;78;137;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;84;36;101;109;125;288;64;34;43;341;17;0;0;0;0;0;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;9;9;3 +2;63;138;186;87;222;60;37;120;290;105;318;78;195;52;164;266;63;116;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;37;302;66;65;41;316;125;243;69;80;186;87;350;42;81;70;175;76;66;52;78;344;314;65;94;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;95;77;73;34;203;184;15;38;61;125;83;290;337;298;123;88;145;112;179;331;82;257;34;76;316;348;61;142;60;283;135;17;0;0;0;0;0;0;0;2;10;10;3 +2;128;105;390;199;53;83;158;52;393;125;125;321;56;111;89;79;68;53;118;105;101;393;265;34;252;49;105;101;175;76;326;61;15;133;112;83;71;237;174;0;2;9;9;3 +2;55;319;92;15;52;390;176;112;111;52;78;105;243;176;78;118;15;37;105;344;323;271;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;49;141;192;45;101;393;76;91;127;169;311;52;125;83;287;105;71;65;52;390;397;83;30;60;134;64;103;45;110;84;46;233;116;360;60;92;64;45;0;2;10;10;3 +2;182;127;38;396;125;292;79;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;39;83;83;231;236;74;36;269;61;78;105;393;290;347;15;60;124;112;303;102;37;390;389;389;159;393;246;66;47;164;394;390;176;229;15;62;60;97;0;2;9;9;3 +2;96;64;41;342;76;69;136;104;17;0;0;0;0;0;0;0;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;10;10;3 +2;154;37;390;389;389;159;393;246;66;49;223;80;17;42;10;37;140;34;394;101;266;69;65;90;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;149;228;63;257;37;192;15;62;63;81;112;10;53;34;141;395;192;204;66;308;73;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;277;60;203;184;62;72;205;130;34;56;83;83;89;60;184;81;35;105;341;112;17;17;17;42;56;264;66;331;63;82;62;63;52;78;241;347;52;109;0;2;9;9;3 +2;52;125;105;294;78;16;359;36;303;78;268;105;152;17;0;0;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;9;9;3 +2;45;294;89;79;66;68;67;73;101;223;38;389;389;321;17;0;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;10;10;3 +2;206;102;103;36;101;342;4;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;204;66;108;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;182;127;171;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;219;49;101;61;301;180;124;66;155;65;43;393;112;89;15;42;86;133;42;76;83;164;17;17;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;281;71;53;247;61;118;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;34;357;85;90;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;64;34;77;67;4;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;70;60;134;80;168;164;199;15;63;64;181;132;90;15;237;42;116;41;390;265;74;140;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;267;51;120;193;158;62;37;83;304;141;344;178;37;390;394;390;61;195;48;262;394;390;101;303;74;44;112;110;61;219;206;10;51;83;185;69;17;0;0;2;10;10;3 +2;60;51;291;44;390;340;91;64;60;315;15;62;71;36;101;393;105;301;63;35;105;83;164;297;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;53;118;322;67;61;102;332;163;276;215;17;0;0;0;0;0;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;10;10;3 +2;42;168;190;127;235;73;65;90;17;0;0;0;0;0;0;0;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;10;10;3 +2;236;36;269;61;78;105;393;290;78;195;17;0;0;0;0;0;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;9;9;3 +2;65;64;82;389;393;105;337;153;17;0;0;0;0;0;0;0;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;9;9;3 +2;355;165;15;42;116;140;65;67;355;60;171;56;111;89;109;164;112;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;52;125;105;294;78;251;61;70;65;152;17;0;0;0;0;0;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;9;9;3 +2;63;64;36;118;83;316;15;62;63;39;83;83;141;62;45;320;163;99;36;118;83;316;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;329;68;113;104;62;64;214;80;17;0;0;0;0;0;0;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;10;10;3 +2;63;226;10;53;115;82;38;393;105;344;83;150;99;337;17;0;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;9;9;3 +2;36;141;318;324;65;66;119;122;246;238;37;83;389;389;294;210;74;309;88;39;83;83;141;121;24;143;36;264;10;52;136;16;62;16;36;101;109;69;17;0;2;10;10;3 +2;42;121;328;62;45;320;71;43;164;262;247;122;118;69;60;113;94;61;62;24;143;376;143;64;357;36;101;109;389;321;230;66;56;193;21;378;41;101;393;0;2;10;10;3 +2;42;81;168;164;397;79;142;60;50;393;159;89;34;105;105;390;394;111;71;60;257;150;390;176;294;111;45;176;250;67;35;164;78;348;390;120;62;62;142;0;2;10;10;3 +2;60;260;67;117;52;164;109;61;393;112;176;17;17;17;36;247;125;17;17;17;17;17;65;36;247;125;125;87;52;164;109;61;393;112;176;38;381;375;379;0;2;9;9;3 +2;60;184;174;70;200;34;56;83;83;89;62;217;36;101;109;300;78;83;74;52;78;344;323;36;118;241;176;69;68;67;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;236;90;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;41;110;147;42;47;83;79;79;103;221;182;82;61;78;105;393;290;78;195;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;88;47;83;79;257;41;164;162;61;66;48;125;91;229;60;358;17;65;103;389;78;395;261;82;348;389;239;64;37;83;290;191;83;48;197;62;145;112;179;0;2;9;9;3 +2;174;75;104;49;164;267;79;73;34;53;105;83;101;26;143;143;395;62;99;34;52;89;87;125;83;94;80;68;49;290;11;314;34;54;61;262;202;53;247;0;2;10;10;3 +2;52;78;83;91;306;71;65;90;62;40;101;73;60;40;243;393;295;49;111;109;51;83;125;141;239;178;105;49;243;61;15;237;36;268;82;34;53;118;248;0;2;9;9;3 +2;185;72;183;185;72;183;196;52;393;290;161;0;0;0;0;0;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;9;9;3 +2;65;64;34;77;90;17;17;17;17;17;52;326;122;164;78;61;314;119;39;69;91;61;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;49;141;303;15;42;52;91;390;101;303;74;185;72;122;141;390;83;304;63;64;56;321;118;227;52;78;83;83;125;134;49;101;294;78;17;0;0;0;0;0;2;9;9;3 +2;106;60;311;131;61;42;10;128;53;105;194;133;105;109;166;39;165;34;125;241;78;130;34;252;46;269;78;118;61;97;65;107;52;83;83;109;61;66;122;0;2;10;10;3 +2;75;37;390;61;61;316;101;294;153;49;91;389;232;109;164;112;175;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;126;10;53;309;60;283;46;390;61;78;287;84;42;225;62;49;144;164;301;126;10;53;183;65;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;67;46;160;104;122;60;260;42;10;128;186;93;82;169;35;247;162;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;131;81;190;150;45;120;61;181;38;396;78;247;84;42;150;390;176;294;166;49;223;80;97;45;229;105;37;390;61;290;289;79;201;63;52;290;247;78;158;0;2;9;9;3 +2;42;140;42;176;101;66;169;211;73;37;390;389;389;91;264;35;247;162;250;67;61;18;46;125;377;49;141;98;91;61;82;60;39;164;109;390;74;17;0;0;2;10;10;3 +2;126;10;53;35;179;220;16;40;101;66;60;52;78;345;17;0;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;9;9;3 +2;42;49;233;79;190;37;129;164;390;144;76;36;101;109;178;61;54;162;91;60;40;105;83;87;150;35;141;207;67;15;97;42;86;60;39;267;83;51;79;0;2;10;10;3 +2;42;225;72;86;169;282;73;65;188;62;116;150;76;91;63;305;123;47;83;79;79;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;88;155;219;88;49;98;70;42;40;302;61;61;17;0;0;0;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;9;9;3 +2;72;149;225;60;103;389;78;395;261;185;34;77;43;101;262;71;65;15;42;224;154;309;68;48;327;51;69;78;211;61;70;109;68;38;396;390;61;153;36;0;2;10;10;3 +2;42;109;52;393;105;125;105;339;76;65;64;34;85;92;203;184;62;218;10;52;72;310;51;83;394;390;83;395;61;200;63;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;172;102;39;164;262;393;141;101;303;4;0;0;0;0;0;0;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;10;10;3 +2;41;110;147;15;35;78;94;61;102;36;393;105;105;264;74;72;85;70;51;291;135;40;164;221;61;121;187;16;49;91;61;269;52;118;101;179;91;61;52;0;2;9;9;3 +2;42;228;35;196;125;390;109;11;34;39;248;49;105;101;176;247;109;88;145;39;244;80;60;82;348;112;129;146;66;53;247;112;61;389;91;37;164;78;164;0;2;10;10;3 +2;37;390;61;316;125;101;294;153;34;290;175;61;61;232;87;117;34;85;46;164;112;393;389;164;290;325;105;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;49;91;389;232;221;76;34;395;209;16;16;46;393;389;389;144;76;15;53;294;112;87;82;290;101;109;69;100;62;52;147;83;38;158;101;70;53;118;322;0;2;9;9;3 +2;75;56;244;16;51;120;390;61;78;240;17;0;0;0;0;0;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;10;10;3 +2;48;262;394;390;101;303;74;206;86;34;359;36;303;78;268;105;152;15;103;88;155;219;88;49;98;70;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;206;185;72;45;208;70;147;15;97;64;72;355;74;38;396;125;243;61;167;66;51;83;125;141;239;17;204;66;48;125;91;229;62;60;100;64;310;182;127;0;2;10;10;3 +2;42;36;269;78;164;290;347;60;36;101;109;125;288;62;206;66;197;124;84;15;34;246;118;101;393;265;60;54;112;196;81;256;54;162;91;56;241;247;299;0;2;9;9;3 +2;45;294;161;87;61;52;118;101;393;197;86;103;221;56;98;66;38;396;158;164;112;177;34;249;67;70;34;51;83;389;393;105;262;54;112;196;150;103;221;0;2;9;9;3 +2;67;64;52;78;393;105;76;87;99;106;133;89;337;35;241;67;61;102;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;77;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;157;42;49;141;239;76;68;53;105;83;101;353;60;131;15;72;149;81;63;72;52;112;393;176;15;97;218;81;34;45;179;71;38;396;78;247;51;101;101;0;2;9;9;3 +2;42;10;46;49;144;164;180;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;96;64;359;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;39;212;60;90;66;122;204;66;52;129;136;62;108;17;0;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;10;10;3 +2;60;113;125;390;83;175;80;65;64;173;45;241;177;150;173;41;83;164;394;87;17;17;17;63;44;83;83;125;61;39;165;69;151;71;68;113;17;0;0;0;2;9;9;3 +2;54;78;348;36;247;125;17;17;100;92;64;359;17;0;0;0;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;9;9;3 +2;60;184;34;105;105;296;73;294;60;49;105;101;109;339;76;135;389;247;221;15;97;63;225;72;115;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;133;113;45;101;344;47;83;79;79;15;63;10;52;53;294;87;62;60;100;64;77;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;39;294;166;15;130;53;118;248;150;39;101;393;105;135;61;60;52;125;105;69;71;60;45;164;78;158;35;105;341;62;42;224;72;108;63;169;279;91;80;0;2;9;9;3 +2;60;41;164;162;61;389;248;49;241;78;95;276;15;97;217;60;203;53;105;390;120;66;185;327;141;101;191;60;34;76;76;105;120;61;35;320;15;62;60;0;2;10;10;3 +2;53;111;89;200;108;198;36;303;78;268;105;152;17;0;0;0;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;9;9;3 +2;63;39;83;246;173;45;160;62;5;53;294;112;87;17;5;17;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;9;9;3 +2;65;138;72;307;60;49;111;109;53;393;112;176;61;78;243;38;376;62;63;35;105;341;60;187;135;42;53;105;194;66;331;63;82;17;0;0;0;0;0;0;2;9;9;3 +2;42;10;46;235;200;65;255;16;85;92;62;45;110;134;17;0;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;10;10;3 +2;42;170;60;45;320;62;39;83;83;141;71;52;164;109;61;393;112;176;39;141;318;125;118;211;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;227;104;16;328;79;62;75;52;118;241;125;16;16;60;35;141;302;64;34;75;156;36;342;232;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;138;186;87;222;63;52;118;101;393;197;62;190;17;0;0;0;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;10;10;3 +2;42;224;72;140;172;190;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;156;100;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;354;85;82;60;49;159;325;15;97;65;131;81;34;41;393;177;37;390;61;316;125;101;294;78;178;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;310;45;120;61;127;60;43;164;395;262;211;42;81;40;101;69;66;51;83;125;141;239;63;73;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;52;129;393;125;56;264;75;52;109;101;179;118;74;17;0;0;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;10;10;3 +2;227;38;396;78;105;83;221;74;52;141;110;62;53;287;61;70;147;66;185;169;222;73;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;34;46;303;78;52;78;393;76;87;70;169;211;82;348;120;347;82;60;5;260;52;294;61;5;71;82;76;303;78;105;337;141;328;17;0;0;0;0;0;0;2;9;9;3 +2;60;187;285;84;41;316;125;243;79;81;84;60;53;247;290;297;81;254;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;104;253;15;204;66;34;290;175;61;61;60;67;62;114;34;41;164;162;87;15;37;129;164;158;137;122;246;36;141;318;17;0;0;0;0;0;0;0;2;10;10;3 +2;217;42;93;66;36;269;78;294;302;49;164;267;69;63;49;91;390;101;76;159;166;52;294;175;63;103;221;118;110;44;83;125;78;37;105;344;324;17;0;0;2;9;9;3 +2;145;10;53;136;141;101;191;51;69;78;211;61;117;34;53;118;267;76;49;241;78;87;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;202;138;72;115;15;67;45;101;290;161;136;15;358;61;163;39;141;164;61;118;136;62;215;63;163;330;271;51;164;162;101;109;74;259;82;68;49;101;290;0;2;9;9;3 +2;53;105;393;74;34;395;209;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;63;95;276;80;68;280;22;376;379;250;125;118;211;15;62;34;45;179;182;127;60;56;232;112;16;151;96;225;17;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;315;70;60;51;69;91;64;51;291;85;11;88;86;36;118;319;61;41;110;45;101;393;76;146;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;62;133;112;83;71;60;66;112;120;64;34;290;175;125;78;137;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;272;36;342;232;35;111;164;112;175;64;34;395;209;17;0;0;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;9;9;3 +2;65;90;64;306;74;72;51;83;191;87;70;49;105;390;221;135;15;42;126;10;53;203;83;41;110;36;101;342;63;354;15;123;88;145;10;53;53;83;340;0;2;9;9;3 +2;42;170;60;51;69;78;211;61;201;206;102;103;136;262;83;164;78;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;36;118;295;301;70;177;105;390;120;34;262;212;4;17;0;0;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;9;9;3 +2;204;66;49;164;267;73;68;52;164;109;61;393;112;176;250;17;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;10;10;3 +2;60;82;61;78;105;393;290;78;195;61;225;112;10;53;38;396;125;141;334;84;34;46;159;105;344;118;211;43;207;224;122;228;17;0;0;0;0;0;0;0;2;9;9;3 +2;42;116;34;76;394;339;66;72;255;65;188;63;47;147;174;75;104;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;173;249;88;86;66;49;98;136;66;7;7;7;34;46;269;78;118;70;60;152;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;95;104;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;60;133;89;337;36;164;16;23;376;54;61;262;36;137;225;72;115;73;68;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;306;36;105;390;61;125;100;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;86;66;108;60;52;109;165;120;78;113;125;390;83;175;61;49;105;101;394;293;76;15;97;63;52;78;192;80;357;104;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;35;390;176;177;61;78;36;101;109;125;141;334;78;42;86;64;15;60;96;37;247;294;61;52;393;125;91;389;208;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;328;46;160;122;38;105;176;269;101;109;159;82;60;232;87;97;42;224;72;52;78;164;162;41;164;270;172;82;68;113;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;185;72;183;123;88;56;240;66;108;60;41;342;61;348;17;0;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;9;9;3 +2;60;67;145;154;53;287;77;49;159;325;61;62;205;55;293;101;36;141;318;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;63;226;10;53;309;88;45;320;36;101;342;17;0;0;0;0;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;9;9;3 +2;201;35;179;118;113;61;102;48;290;290;393;125;194;15;35;207;176;105;212;64;72;37;390;61;78;247;290;153;142;106;17;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;214;307;16;88;47;83;79;119;94;66;122;214;70;142;45;83;208;181;41;101;393;105;142;34;135;15;123;72;70;181;38;299;267;83;37;98;17;0;0;0;2;10;10;3 +2;154;15;60;67;226;10;53;52;83;83;109;66;34;290;175;125;78;169;222;38;396;175;125;78;36;262;105;46;125;377;61;15;49;105;83;389;91;286;51;0;2;9;9;3 +2;88;145;10;53;122;164;78;60;134;80;172;17;0;0;0;0;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;10;10;3 +2;13;36;268;61;73;34;52;78;105;343;45;160;84;88;145;108;66;45;160;136;119;272;52;118;179;61;15;62;205;39;141;164;61;118;103;61;52;390;176;0;2;10;10;3 +2;45;160;395;83;160;62;95;104;17;0;0;0;0;0;0;0;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;10;10;3 +2;103;163;122;395;261;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;170;65;36;137;16;63;106;110;61;124;66;36;269;112;292;169;46;294;390;16;54;61;262;273;66;68;49;290;17;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;103;169;211;47;193;88;238;308;49;241;78;71;119;36;269;304;105;61;336;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;64;36;101;342;201;46;233;131;61;102;163;48;125;243;218;106;110;69;60;358;66;155;106;52;290;247;78;158;79;136;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;213;65;67;99;34;51;83;125;141;239;178;70;68;52;78;241;78;164;290;62;86;51;83;176;105;129;347;63;52;294;175;17;0;0;0;0;0;0;0;2;9;9;3 +2;34;125;125;317;66;34;290;78;393;166;151;125;91;389;232;109;60;150;390;176;294;111;96;117;36;118;294;164;84;36;164;221;73;68;55;377;376;379;390;0;2;10;10;3 +2;145;10;53;52;78;345;169;222;97;67;47;393;109;262;91;61;66;52;390;109;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;45;208;61;45;120;61;127;22;101;46;294;223;120;15;123;42;34;290;78;393;166;53;346;66;108;60;67;17;68;56;390;389;83;114;60;283;67;73;0;2;9;9;3 +2;236;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;43;164;262;247;113;40;83;231;5;51;5;60;148;4;17;0;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;10;10;3 +2;72;56;321;118;63;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;67;36;247;61;118;79;36;101;109;300;78;83;74;62;215;42;86;66;155;63;51;83;125;141;239;76;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;50;393;196;332;130;42;10;37;228;63;70;200;20;382;46;269;78;118;61;15;103;42;163;255;76;181;179;220;107;201;65;64;60;148;94;42;10;128;0;2;10;10;3 +2;54;112;389;321;393;112;229;74;63;238;72;51;83;158;241;177;68;42;125;118;211;23;61;15;37;120;125;210;36;269;112;292;69;63;117;46;393;246;318;0;2;9;9;3 +2;63;81;34;77;67;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;123;88;52;390;109;125;74;56;240;34;52;109;165;39;141;318;67;16;16;45;320;38;231;83;395;220;83;99;60;38;396;78;247;122;340;61;9;56;118;0;2;9;9;3 +2;85;55;111;302;15;95;276;16;49;110;91;55;337;54;61;262;15;203;15;150;56;165;151;144;78;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;68;67;226;10;53;52;141;293;34;105;212;68;203;215;62;60;40;105;318;49;105;83;304;299;61;68;67;117;52;141;318;324;151;71;68;41;164;162;17;0;2;10;10;3 +2;65;64;52;390;109;125;74;60;148;202;94;70;100;92;4;0;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;10;10;3 +2;360;63;355;157;88;49;141;164;112;66;48;327;65;107;4;65;52;326;64;60;45;208;46;179;101;67;70;124;4;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;82;60;52;125;164;112;71;181;41;101;393;105;15;42;93;257;356;38;396;290;141;164;390;109;5;56;118;101;164;16;64;84;60;171;67;80;53;394;31;0;2;10;10;3 +2;42;86;34;141;395;192;228;36;232;76;79;94;61;62;60;39;248;76;101;109;117;60;56;267;83;198;64;75;41;83;141;125;209;17;0;0;0;0;0;0;2;10;10;3 +2;65;131;114;49;164;61;180;60;107;58;193;46;241;89;62;259;63;52;118;110;61;52;390;176;112;61;71;56;193;15;63;64;20;143;143;8;39;393;112;0;2;10;10;3 +2;311;127;84;15;60;45;83;335;64;156;62;103;389;78;30;60;307;64;75;53;160;30;60;36;223;151;70;60;39;239;64;34;85;52;118;316;83;17;0;0;2;10;10;3 +2;63;114;186;87;222;42;47;83;79;62;42;351;10;53;99;89;70;190;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;130;51;83;175;390;270;62;314;60;90;70;163;21;37;192;63;35;105;341;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;90;64;77;17;17;17;63;330;332;34;45;179;38;164;61;338;42;145;40;101;66;60;36;344;338;259;56;164;196;69;80;41;342;76;70;103;221;222;0;2;10;10;3 +2;133;112;83;71;60;53;118;248;52;390;397;120;206;52;264;73;60;94;116;52;78;98;82;68;113;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;53;16;46;101;262;390;144;114;60;148;36;303;78;268;105;152;169;395;220;83;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;34;105;105;296;50;393;159;89;74;62;310;45;120;61;38;396;125;243;61;167;127;311;61;122;69;103;197;17;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;56;83;86;53;105;194;21;54;112;196;61;62;206;35;179;118;39;164;390;144;76;73;294;21;46;269;78;118;61;17;17;49;105;101;61;0;0;0;0;0;2;9;9;3 +2;49;105;101;394;293;61;85;49;105;179;292;195;62;354;36;141;164;61;61;87;15;173;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;44;105;303;301;141;34;141;395;192;85;17;0;0;0;0;0;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;10;10;3 +2;60;53;247;290;389;211;395;83;262;61;210;64;108;105;39;105;390;243;76;74;62;330;63;204;66;164;290;78;390;394;229;15;38;78;290;17;0;0;0;0;2;10;10;3 +2;60;328;64;75;85;17;23;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;77;216;106;60;135;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;116;41;390;265;74;140;65;90;17;0;0;0;0;0;0;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;10;10;3 +2;351;10;53;108;60;54;112;196;73;52;393;112;176;141;164;61;301;61;15;72;85;82;53;83;396;164;61;4;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;37;196;72;115;46;233;71;60;135;73;68;133;89;337;24;377;376;143;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;213;46;334;74;70;60;184;15;237;35;105;341;103;269;130;49;393;105;158;164;61;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;123;88;121;34;45;101;393;76;35;393;397;397;69;66;355;105;293;106;119;36;269;304;105;61;336;61;15;217;65;67;64;70;88;4;0;0;0;0;0;0;2;9;9;3 +2;39;240;208;159;183;62;238;155;305;70;219;147;68;47;83;396;78;67;64;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;52;78;98;34;395;98;117;65;52;78;345;15;122;203;83;209;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;35;141;302;240;52;393;125;91;78;101;179;118;41;164;162;61;16;39;248;67;52;125;83;287;105;64;34;395;120;268;17;0;0;0;0;0;0;0;0;2;10;10;3 +2;138;72;307;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;17;17;17;17;188;34;105;105;296;50;393;159;89;74;62;95;77;73;68;124;78;105;101;49;290;61;52;164;109;61;393;112;176;52;158;16;51;378;379;0;2;10;10;3 +2;63;64;45;160;15;114;49;144;299;87;71;96;36;316;164;290;245;15;62;64;75;36;269;389;321;137;66;56;193;70;103;221;395;118;164;78;38;396;78;0;2;10;10;3 +2;37;390;61;316;125;101;294;153;17;0;0;0;0;0;0;0;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;9;9;3 +2;35;141;302;181;78;64;204;66;108;17;0;0;0;0;0;0;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;10;10;3 +2;36;118;83;316;97;41;83;87;63;95;17;17;81;49;144;164;61;240;74;52;393;125;105;339;76;40;167;112;60;45;110;36;233;71;65;188;17;0;0;0;2;10;10;3 +2;60;272;80;60;67;46;98;122;228;99;34;37;303;78;125;164;112;157;82;76;101;232;61;17;17;17;42;10;37;51;335;122;314;34;37;390;61;125;101;0;2;9;9;3 +2;217;34;252;37;192;45;229;105;60;34;49;393;389;389;71;52;109;341;36;164;221;151;71;60;67;259;82;108;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;10;52;75;36;269;304;112;390;264;62;52;390;109;300;66;108;16;155;61;43;101;262;126;83;9;330;60;203;51;293;103;310;52;109;101;179;220;17;0;2;10;10;3 +2;60;47;164;112;101;52;78;229;76;63;17;68;103;112;81;37;390;61;61;316;101;294;347;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;100;92;64;132;99;104;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;227;60;148;94;42;86;228;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;116;72;51;83;290;290;101;109;221;162;17;0;0;0;0;0;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;9;9;3 +2;206;86;234;34;105;212;70;58;317;62;203;105;390;120;60;41;390;265;120;78;92;71;181;78;390;16;40;141;261;358;49;105;179;292;232;84;42;86;39;0;2;10;10;3 +2;163;219;42;56;240;79;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;49;241;78;159;393;141;241;46;101;76;83;141;116;72;115;73;68;280;50;52;109;241;78;125;118;211;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;56;269;78;115;313;150;142;144;208;70;124;17;0;0;0;0;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;9;9;3 +2;82;34;76;76;196;195;63;39;83;83;231;9;168;125;30;354;99;123;60;67;64;106;45;160;395;83;160;36;118;83;316;49;141;208;159;17;0;0;0;0;2;9;9;3 +2;97;215;84;63;64;5;151;71;56;241;247;299;87;5;60;283;312;51;83;101;290;290;326;17;35;179;78;101;109;45;295;17;17;17;49;223;119;189;103;0;2;9;9;3 +2;42;139;56;240;79;60;49;141;240;105;269;159;61;24;375;143;66;122;60;313;107;15;97;63;114;173;46;288;64;61;302;61;70;124;17;60;85;0;0;0;2;9;9;3 +2;77;90;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;36;105;390;61;125;62;306;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;130;60;187;251;44;83;125;78;40;101;69;37;83;191;130;20;376;46;294;223;120;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;75;36;118;83;316;49;141;208;159;15;36;105;83;164;161;121;181;48;197;56;101;101;76;243;39;141;101;232;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;155;34;262;61;342;223;83;74;41;232;105;230;216;82;68;34;125;241;78;178;15;56;220;83;73;311;67;61;42;86;72;93;65;282;17;0;0;0;0;2;9;9;3 +2;60;216;114;234;40;243;91;166;85;17;0;0;0;0;0;0;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;10;10;3 +2;132;100;15;96;278;62;82;290;269;61;125;159;393;101;303;66;35;101;179;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;77;202;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;41;390;265;74;140;65;131;17;0;0;0;0;0;0;0;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;10;10;3 +2;56;321;118;395;118;390;144;17;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;64;34;77;37;291;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;130;68;67;277;66;122;200;34;58;193;48;197;15;63;10;52;234;52;141;110;74;35;105;83;164;297;37;120;125;210;310;203;83;80;68;49;241;78;17;0;2;9;9;3 +2;42;168;103;105;346;42;253;65;255;17;0;0;0;0;0;0;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;9;9;3 +2;42;213;172;41;344;69;42;224;309;68;202;94;307;182;97;172;285;61;253;63;42;109;125;101;61;61;230;66;56;193;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;53;105;83;101;62;53;16;46;101;262;390;144;51;83;389;303;79;66;51;83;125;141;239;63;305;62;70;175;76;124;66;183;181;179;220;67;73;101;223;0;2;9;9;3 +2;63;81;41;232;105;230;4;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;126;10;53;360;63;116;41;342;76;63;173;52;83;290;393;105;74;80;119;122;246;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;65;106;110;61;60;49;101;61;61;390;262;390;141;245;71;185;393;242;35;320;69;70;60;283;37;229;62;135;130;60;187;17;0;0;0;0;0;0;0;0;2;9;9;3 +2;206;115;200;21;56;83;83;161;217;35;105;83;164;89;17;0;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;9;9;3 +2;63;64;52;390;109;300;66;108;62;42;121;63;17;0;0;0;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;10;10;3 +2;63;10;52;34;77;173;141;70;38;299;91;78;334;178;15;36;101;109;109;393;112;159;336;15;62;37;164;78;164;46;164;112;333;178;17;48;118;15;122;0;2;10;10;3 +2;42;145;10;53;108;65;131;201;60;52;221;340;64;37;390;61;176;303;153;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;72;219;42;56;240;79;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;48;327;21;71;172;131;61;62;116;150;76;91;181;179;220;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;77;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;213;65;96;73;34;36;101;393;125;269;117;168;164;199;62;42;10;46;75;235;73;68;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;82;348;112;129;34;290;175;61;61;81;276;15;63;60;51;261;82;61;78;164;112;175;84;63;174;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;49;91;389;292;70;60;49;61;377;17;0;0;0;0;0;0;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;10;10;3 +2;39;167;52;78;241;49;141;303;15;49;141;303;17;0;0;0;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;10;10;3 +2;34;85;92;35;241;176;334;17;17;42;213;65;130;42;213;34;36;118;83;316;87;117;35;390;176;45;179;61;84;100;79;34;395;209;62;356;80;60;311;0;2;10;10;3 +2;7;24;143;185;327;60;37;247;294;17;0;0;0;0;0;0;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;9;9;3 +2;42;53;105;194;53;111;297;51;291;45;101;393;76;97;52;118;101;223;69;80;60;53;83;144;125;118;211;155;61;48;197;62;42;81;256;66;197;63;81;0;2;9;9;3 +2;85;15;95;276;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;70;60;134;65;81;34;77;37;291;17;0;0;0;0;0;0;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;10;10;3 +2;77;134;15;173;4;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;123;218;64;34;56;244;15;63;64;36;101;109;300;78;83;74;108;198;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;58;120;63;10;52;52;118;294;87;80;39;105;269;78;52;293;16;62;42;170;63;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;138;72;115;17;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;142;187;42;53;118;101;393;265;78;42;81;40;105;78;153;34;85;37;291;142;7;26;17;23;378;15;54;299;390;141;42;331;177;76;63;353;68;67;11;0;2;9;9;3 +2;60;216;53;118;105;101;393;265;65;94;64;132;17;0;0;0;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;10;10;3 +2;21;53;118;393;109;262;61;136;66;65;52;83;340;91;0;0;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;10;10;3 +2;42;86;34;128;105;390;199;45;176;67;62;206;115;104;66;177;78;220;15;85;216;62;51;164;112;177;84;38;396;175;79;61;21;143;39;83;129;45;295;0;2;10;10;3 +2;42;109;125;105;344;91;37;120;290;105;318;78;195;17;17;17;17;42;93;66;51;129;349;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;6;20;63;95;16;6;21;63;64;214;17;0;0;0;0;0;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;10;10;3 +2;96;251;16;278;64;50;393;210;279;17;0;0;0;0;0;0;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;10;10;3 +2;60;43;164;262;247;113;177;231;307;68;113;61;75;104;17;0;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;10;10;3 +2;96;114;133;278;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;36;118;83;290;89;79;186;87;395;220;83;62;218;64;133;39;83;164;325;70;63;237;64;139;37;390;61;316;125;101;294;153;17;0;0;0;0;0;0;2;9;9;3 +2;90;64;38;396;164;290;78;74;99;37;120;290;105;390;262;79;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;155;61;34;52;390;176;112;111;157;311;128;105;390;199;67;61;56;269;10;53;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;226;10;53;185;60;43;101;262;17;0;0;0;0;0;0;0;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;9;9;3 +2;42;116;140;63;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;49;141;164;112;80;150;76;91;69;117;284;305;62;305;17;0;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;10;10;3 +2;84;122;69;52;164;266;15;70;34;67;15;60;272;64;75;156;30;46;288;36;101;342;38;389;389;292;61;66;49;141;98;73;15;62;55;293;101;64;37;0;2;10;10;3 +2;42;86;234;75;52;164;78;390;61;389;194;73;65;250;67;117;37;98;107;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;206;44;83;83;125;155;153;182;62;182;11;65;64;68;53;118;267;76;107;62;42;10;128;93;47;393;221;105;101;303;49;111;109;61;173;146;17;0;0;0;2;10;10;3 +2;34;395;89;395;289;66;108;62;54;112;105;83;141;337;242;17;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;9;9;3 +2;60;52;118;318;324;135;81;154;75;50;393;159;89;4;0;0;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;10;10;3 +2;72;99;85;99;42;93;41;344;79;17;0;0;0;0;0;0;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;9;9;3 +2;85;131;4;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;226;10;53;115;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;139;85;90;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;54;112;389;321;393;112;229;74;63;225;72;115;17;0;0;0;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;9;9;3 +2;106;53;118;248;35;105;341;73;294;257;46;269;78;118;61;71;108;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;126;78;183;63;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;68;39;335;114;60;55;376;380;379;15;62;60;96;64;37;87;69;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;41;110;147;15;60;113;49;191;61;36;268;254;38;164;61;390;74;62;130;149;107;56;83;83;89;42;45;233;107;17;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;60;271;37;105;344;15;60;67;36;268;61;80;62;254;142;238;15;60;358;40;101;120;35;141;207;62;60;260;71;106;63;52;78;344;61;51;69;69;82;0;2;9;9;3 +2;41;232;105;230;15;41;232;105;230;49;105;179;292;232;17;0;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;9;9;3 +2;42;126;10;53;121;65;133;89;337;38;196;220;17;0;0;0;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;9;9;3 +2;51;83;164;158;69;70;60;35;179;78;101;109;51;110;64;54;112;290;101;109;389;321;137;15;62;60;52;243;76;62;38;162;44;83;87;61;102;72;56;0;2;9;9;3 +2;42;86;213;65;133;89;337;250;67;34;252;56;83;83;161;34;176;101;62;63;81;34;47;160;109;261;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;116;53;287;173;279;66;37;120;290;105;390;262;83;41;110;249;68;36;303;78;268;105;152;38;396;125;91;390;243;175;114;234;73;168;164;199;17;0;0;2;9;9;3 +2;60;149;75;37;390;61;316;125;101;294;153;285;81;218;81;133;52;125;83;287;105;125;118;211;4;4;4;4;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;359;17;17;68;203;238;72;34;290;175;125;78;65;36;164;61;301;78;78;83;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;90;64;108;198;15;52;294;175;63;138;72;86;274;36;118;241;176;69;36;393;105;105;264;66;251;60;21;250;125;118;211;61;42;81;49;141;164;112;112;0;2;9;9;3 +2;63;10;52;72;219;63;52;192;63;64;17;0;0;0;0;0;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;9;9;3 +2;52;78;98;34;395;98;117;60;50;4;17;0;0;0;0;0;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;9;9;3 +2;228;62;37;267;78;87;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;75;54;112;105;83;141;337;242;152;117;53;16;46;101;262;390;144;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;72;85;274;70;60;134;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;42;213;257;71;284;62;47;83;196;220;238;251;17;0;0;0;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;9;9;3 +2;63;354;75;156;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;64;181;132;173;141;15;38;61;125;83;290;337;298;157;49;164;267;79;73;119;67;10;52;34;223;101;16;181;61;395;91;17;0;0;0;0;0;0;0;2;10;10;3 +2;42;86;51;83;191;311;10;52;51;83;394;390;83;395;61;41;91;83;97;42;86;112;10;53;93;169;282;73;63;17;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;172;90;61;36;101;304;105;136;60;42;109;125;321;240;45;160;52;243;61;232;34;262;101;304;60;113;151;144;78;17;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;214;82;68;41;164;162;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;163;138;72;115;17;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;236;51;83;141;337;262;390;141;245;17;0;0;0;0;0;0;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;9;9;3 +2;11;63;95;4;12;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;123;42;53;287;34;49;159;325;15;60;96;37;105;344;61;34;35;241;15;62;52;78;241;78;61;122;83;324;15;45;129;153;124;44;112;110;227;37;390;0;2;9;9;3 +2;359;90;15;62;258;71;189;4;0;0;0;0;0;0;0;0;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;9;9;3 +2;45;208;135;183;69;117;88;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;63;81;34;258;71;68;189;17;0;0;0;0;0;0;0;0;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;9;9;3 +2;103;275;63;114;174;121;34;36;118;241;109;17;0;0;0;0;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;10;10;3 +2;42;86;149;93;63;70;34;252;56;83;83;161;15;97;103;275;15;103;85;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;97;15;82;169;131;15;60;148;49;241;78;64;15;88;145;185;327;141;101;191;172;49;159;325;61;66;119;45;316;78;344;314;42;105;15;150;205;52;243;0;2;10;10;3 +2;116;140;65;188;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;63;10;52;234;68;36;118;319;94;70;58;317;17;77;100;30;85;315;30;85;133;339;145;175;340;336;17;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;156;131;15;39;83;83;231;85;82;119;41;164;162;61;17;0;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;10;10;3 +2;60;188;51;83;175;296;81;36;101;393;299;91;389;83;196;17;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;9;9;3 +2;163;139;85;17;17;103;275;15;49;105;101;262;286;60;148;35;78;94;42;86;186;93;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;95;276;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;51;83;175;296;68;94;82;85;135;62;81;235;73;63;17;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;10;10;3 +2;42;81;75;49;144;164;180;66;52;83;83;84;42;224;51;83;125;141;239;68;104;53;247;394;144;76;52;395;167;141;41;342;61;348;70;68;35;141;207;0;2;10;10;3 +2;68;52;390;61;348;114;107;154;62;52;118;83;170;61;63;17;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;10;10;3 +2;85;92;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;65;64;35;87;275;60;260;255;42;10;128;253;80;168;164;199;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;132;37;393;111;16;49;393;105;125;322;94;17;0;0;0;0;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;10;10;3 +2;132;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;138;72;115;70;45;390;61;78;243;69;66;46;303;159;73;60;36;69;393;141;241;27;375;376;379;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;52;83;83;109;61;36;101;109;300;78;83;74;52;83;290;326;15;35;179;118;41;342;76;69;80;66;68;122;246;15;62;44;83;83;324;60;42;125;0;2;10;10;3 +2;60;35;179;78;110;109;45;295;17;17;17;181;179;220;56;321;118;198;15;36;118;83;316;40;390;109;109;159;89;117;52;125;105;294;78;17;0;0;0;0;2;9;9;3 +2;41;164;270;53;105;101;393;242;73;315;17;0;0;0;0;0;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;9;9;3 +2;60;149;85;285;81;84;63;329;36;101;109;389;321;286;80;52;109;165;113;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;56;241;112;69;16;185;72;183;4;4;17;0;0;0;0;0;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;9;9;3 +2;42;168;49;164;267;69;65;73;68;42;125;118;211;15;62;42;224;72;122;41;316;125;338;73;63;103;275;17;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;157;63;48;125;243;61;15;60;96;36;269;112;292;195;64;35;105;341;112;62;60;273;64;53;349;79;254;17;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;225;112;10;53;56;240;60;36;141;318;40;101;69;355;60;66;125;71;68;113;15;36;164;303;69;37;390;61;290;101;109;389;321;17;0;0;0;0;0;2;9;9;3 +2;148;94;186;4;4;4;17;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;53;105;303;78;60;267;56;83;262;61;210;62;126;10;53;38;396;125;292;169;41;83;141;125;209;52;393;125;125;321;17;0;0;0;0;0;0;2;9;9;3 +2;63;81;84;45;101;393;76;17;40;141;191;66;52;98;84;60;49;141;240;105;269;159;61;24;375;143;46;334;78;334;61;34;39;141;164;395;198;36;269;0;2;10;10;3 +2;60;52;125;83;287;105;64;71;45;110;92;103;99;46;164;297;60;51;69;66;112;120;100;75;36;118;83;316;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;329;36;101;109;389;321;286;15;36;164;221;73;53;118;248;52;390;397;120;71;113;262;393;76;53;318;61;17;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;132;90;70;60;134;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;249;216;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;65;90;64;75;41;390;265;92;36;118;295;301;36;247;125;4;4;4;4;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;81;50;393;210;214;82;60;113;17;0;0;0;0;0;0;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;10;10;3 +2;77;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;126;10;53;183;65;90;16;63;39;164;390;231;4;17;0;0;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;9;9;3 +2;186;87;222;200;65;90;64;56;105;343;17;187;0;0;0;0;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;9;9;3 +2;60;49;164;267;69;71;60;257;273;61;81;103;204;63;35;261;74;173;89;34;36;101;393;300;46;294;223;120;122;389;345;42;52;78;241;347;46;164;297;0;2;10;10;3 +2;65;81;54;78;348;74;36;269;389;303;69;142;187;15;237;36;164;303;79;124;66;45;322;34;36;101;393;300;71;75;15;75;42;109;125;321;240;36;269;0;2;9;9;3 +2;359;67;41;342;76;91;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;60;36;223;101;223;61;62;97;78;269;61;102;49;141;239;76;49;91;389;292;74;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;170;122;69;34;242;66;108;107;94;70;35;179;118;35;87;45;164;162;16;45;295;62;250;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;282;64;84;60;113;45;101;344;61;102;253;71;56;83;164;89;46;229;105;337;141;62;35;105;83;164;89;38;164;61;390;74;17;0;0;0;0;0;0;0;2;9;9;3 +2;72;47;193;74;99;85;45;320;69;99;60;168;164;199;49;159;325;330;63;45;320;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;97;37;120;125;210;172;252;39;141;164;395;61;15;65;131;64;71;38;396;175;125;78;195;111;92;62;104;56;321;118;60;34;76;76;196;195;111;36;233;0;2;10;10;3 +2;41;110;52;78;393;125;266;64;84;31;0;0;0;0;0;0;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;9;9;3 +2;42;145;308;259;42;10;46;37;105;390;270;82;60;203;15;62;54;61;393;166;126;10;53;205;86;66;49;223;63;80;63;10;52;45;101;393;76;120;78;0;2;10;10;3 +2;52;83;340;91;52;118;318;323;50;393;159;89;74;62;310;36;118;83;316;91;127;60;36;101;109;125;129;196;232;61;17;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;85;52;118;110;15;52;164;109;61;393;112;176;17;0;0;0;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;10;10;3 +2;103;42;213;200;20;143;71;172;62;52;164;304;76;34;141;179;71;189;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;63;34;141;395;192;36;223;61;151;62;330;34;122;83;125;122;83;125;122;83;125;100;217;52;192;52;390;176;112;111;39;164;390;144;76;17;0;0;0;0;2;9;9;3 +2;351;10;53;39;390;176;326;63;151;0;0;0;0;0;0;0;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;9;9;3 +2;68;67;100;79;48;89;11;72;77;16;48;89;146;15;97;68;56;390;389;83;10;52;67;81;34;141;109;233;66;78;166;54;112;294;78;83;340;390;176;0;2;9;9;3 +2;103;42;93;66;53;287;60;96;151;71;60;67;49;223;63;106;35;207;66;177;78;220;62;217;51;120;78;241;78;63;17;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;259;42;46;164;112;333;76;66;122;162;60;45;83;164;389;52;125;105;69;35;207;82;49;141;239;15;60;124;78;111;215;114;274;52;78;105;120;61;84;0;2;9;9;3 +2;45;83;344;289;49;105;294;78;64;56;269;76;91;209;74;56;390;197;4;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;95;70;124;17;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;52;164;176;176;87;15;39;141;344;125;87;281;71;43;393;112;89;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;310;182;127;60;41;289;49;141;208;159;131;61;17;0;0;0;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;10;10;3 +2;63;154;93;34;171;282;17;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;235;103;275;4;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;36;101;342;67;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;95;85;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;280;39;294;166;277;60;55;319;92;71;34;202;94;313;17;0;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;10;10;3 +2;63;45;101;322;61;36;269;112;292;195;66;60;67;205;157;63;64;73;294;34;36;101;393;300;39;83;129;122;78;395;83;243;60;257;17;0;0;0;0;0;2;9;9;3 +2;97;63;64;77;15;42;116;139;140;63;0;0;0;0;0;0;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;10;10;3 +2;330;63;38;164;61;338;66;44;83;83;125;136;73;68;202;157;42;10;46;72;56;193;69;63;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;99;42;52;164;266;34;262;101;304;17;17;17;17;357;108;198;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;47;147;277;63;4;4;4;4;4;0;0;0;0;0;0;0;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;9;9;3 +2;65;49;164;267;71;41;83;191;125;118;211;61;64;60;260;84;42;86;186;93;100;16;56;339;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;32;17;17;17;33;185;327;60;37;247;294;201;71;34;56;83;164;89;52;112;316;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;138;72;251;60;36;69;393;141;241;11;142;78;146;27;379;376;379;67;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;88;155;38;396;78;247;46;294;223;120;103;84;88;145;203;346;151;60;350;62;72;155;36;223;254;17;5;5;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;41;110;147;15;130;200;34;58;193;15;60;39;141;318;78;344;52;78;241;347;66;155;45;101;322;62;56;101;262;262;74;62;205;78;393;166;68;358;56;0;2;9;9;3 +2;42;44;83;125;78;36;164;78;158;69;60;36;137;80;60;52;83;164;78;62;42;93;66;49;393;340;60;67;151;66;53;349;63;80;181;254;17;0;0;0;2;9;9;3 +2;60;94;39;393;141;389;390;340;61;68;51;83;392;393;267;83;178;61;103;42;168;235;73;68;255;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;45;101;176;210;158;202;94;64;34;20;143;4;17;0;0;0;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;10;10;3 +2;42;121;60;39;164;290;78;84;63;51;120;78;61;45;160;74;305;61;78;119;113;15;51;335;127;82;61;293;17;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;34;45;179;71;56;83;262;61;210;61;86;234;51;164;153;65;34;75;85;67;62;103;185;42;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;42;86;53;105;194;172;36;137;61;73;68;36;101;109;125;223;91;62;68;42;125;101;76;62;63;95;163;276;17;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;60;46;159;218;64;34;43;341;15;62;60;315;64;50;393;210;45;110;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;10;46;51;129;349;69;284;17;0;0;0;0;0;0;0;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;9;9;3 +2;42;138;72;46;334;78;334;34;36;269;112;292;195;73;60;36;101;109;125;223;91;259;63;64;80;68;45;316;17;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;63;64;204;66;53;349;80;62;254;157;88;102;82;60;203;62;60;315;36;269;78;105;342;61;102;50;393;210;34;290;175;61;61;137;17;0;0;0;0;0;2;10;10;3 +2;42;86;93;46;295;70;200;34;58;193;62;65;36;118;105;390;61;78;109;164;61;42;213;103;221;70;60;51;120;78;71;60;39;164;109;390;74;17;0;0;2;10;10;3 +2;311;395;339;15;204;66;82;61;78;165;62;108;15;306;100;17;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;10;10;3 +2;156;45;83;335;17;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;93;66;255;34;37;390;389;389;91;264;131;17;0;0;0;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;9;9;3 +2;63;64;34;43;101;87;66;108;17;0;0;0;0;0;0;0;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;10;10;3 +2;75;310;352;73;65;36;101;109;125;288;17;0;0;0;0;0;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;9;9;3 +2;75;52;164;78;390;61;390;389;79;73;84;17;0;0;0;0;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;10;10;3 +2;63;225;112;10;53;251;70;124;17;0;0;0;0;0;0;0;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;9;9;3 +2;65;64;60;67;66;155;70;21;143;143;379;17;17;17;17;42;163;213;68;52;381;375;143;164;62;106;42;145;52;98;64;56;110;4;0;0;0;0;0;0;2;10;10;3 +2;97;78;269;61;102;173;52;109;165;17;0;0;0;0;0;0;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;9;9;3 +2;163;51;83;191;69;80;60;52;125;83;290;61;34;141;211;330;88;52;98;56;110;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;170;63;17;17;77;34;105;109;262;164;162;17;0;0;0;0;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;10;10;3 +2;42;139;121;65;90;355;60;280;201;63;64;106;179;306;91;80;60;113;281;62;60;46;159;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;41;110;147;15;60;44;83;87;125;191;61;102;103;53;294;112;87;84;42;103;221;78;390;221;61;51;83;164;158;60;56;105;343;97;78;269;61;17;0;0;2;9;9;3 +2;42;38;396;158;164;112;177;76;60;103;112;87;38;105;159;61;269;59;379;143;143;164;70;65;62;42;10;46;357;235;73;84;37;83;290;390;61;195;17;0;2;10;10;3 +2;42;81;75;42;109;125;105;120;180;73;60;134;71;60;131;61;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;10;10;3 +2;154;330;63;38;164;61;338;66;41;342;76;80;66;17;0;0;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;10;10;3 +2;42;108;65;90;82;34;46;179;232;36;269;78;105;342;36;264;91;56;220;83;218;64;34;45;179;71;41;390;265;55;342;78;333;41;393;109;109;69;117;0;2;10;10;3 +2;63;10;52;357;204;17;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;42;145;112;179;309;271;142;36;91;78;334;49;141;239;61;17;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;9;9;3 +2;41;110;147;15;68;40;267;141;81;36;101;109;125;141;334;84;103;221;135;60;67;226;10;53;56;287;136;121;133;105;109;111;67;138;17;0;0;0;0;0;2;9;9;3 +2;122;164;223;390;209;52;78;87;141;69;53;118;101;393;265;17;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;10;10;3 +2;65;36;101;109;125;288;251;124;34;51;120;78;101;290;297;39;83;83;62;256;72;40;167;112;124;68;51;83;389;393;162;35;207;17;0;0;0;0;0;0;2;9;9;3 +2;42;10;46;53;346;69;66;51;129;349;63;70;34;51;83;389;393;162;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;42;331;177;76;63;82;149;66;39;244;151;72;34;37;241;112;285;174;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;9;9;3 +2;132;90;17;0;0;0;0;0;0;0;0;0;0;0;0;0;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;10;10;3 +2;113;262;393;76;281;35;105;83;164;161;38;164;61;390;74;17;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;9;9;3 +2;45;101;303;87;90;17;0;0;0;0;0;0;0;0;0;0;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;9;9;3 +2;65;67;53;10 \ No newline at end of file diff --git a/examples/translation/main.cpp b/examples/translation/main.cpp index dd7cc7557..9234a017e 100644 --- a/examples/translation/main.cpp +++ b/examples/translation/main.cpp @@ -37,14 +37,16 @@ int main() // Data set - LanguageDataSet language_data_set("/home/artelnics/Escritorio/andres_alonso/ViT/dataset/amazon_reviews/amazon_cells_labelled.txt"); + LanguageDataSet language_data_set("C:/Users/Roberto Lopez/Documents/opennn/examples/amazon_reviews/data/amazon_cells_labelled.txt"); // LanguageDataSet language_data_set("/home/artelnics/Escritorio/andres_alonso/ViT/dataset/amazon_reviews/amazon_cells_reduced.txt"); // LanguageDataSet language_data_set("/home/artelnics/Escritorio/andres_alonso/ViT/dataset/ENtoES_dataset50000.txt"); // LanguageDataSet language_data_set("/home/artelnics/Escritorio/andres_alonso/ViT/dataset/dataset_ingles_espanol.txt"); // cout< complexity = {embedding_dimension, perceptron_depth, heads_number, number_of_layers}; - const dimensions completion_dimensions = {language_data_set.get_completion_length(), language_data_set.get_completion_vocabulary_size()}; + const dimensions target_dimensions = {language_data_set.get_completion_length(), language_data_set.get_completion_vocabulary_size()}; - const dimensions context_dimensions = {language_data_set.get_context_length(), language_data_set.get_context_vocabulary_size()}; + const dimensions input_dimensions = {language_data_set.get_context_length(), language_data_set.get_context_vocabulary_size()}; - Transformer transformer(completion_dimensions, context_dimensions, complexity); + Transformer transformer(target_dimensions, input_dimensions, complexity); transformer.load_transformer("/home/artelnics/Escritorio/andres_alonso/ViT/dataset/amazon_reviews/sentimental_analysis.xml"); transformer.set_model_type_string("TextClassification"); diff --git a/opennn/batch.cpp b/opennn/batch.cpp index fbaa80fd0..28326695f 100644 --- a/opennn/batch.cpp +++ b/opennn/batch.cpp @@ -184,30 +184,30 @@ void Batch::set(const Index& new_batch_size, DataSet* new_data_set) const Index context_variables_number = language_data_set->get_variables_number(DataSet::VariableUse::Context); // const dimensions data_set_context_dimensions = language_data_set->get_context_dimensions(); - const dimensions data_set_context_dimensions = { language_data_set->get_context_length() }; + const dimensions data_set_context_dimensions = { language_data_set->get_input_length() }; if(data_set_context_dimensions.size() == 1) { - context_dimensions = {{batch_size, context_variables_number}}; + input_dimensions = {{batch_size, context_variables_number}}; context_tensor.resize(batch_size*context_variables_number); } else if(data_set_context_dimensions.size() == 2) { - const Index rows_number = context_dimensions[0]; - const Index columns_number = context_dimensions[1]; + const Index rows_number = input_dimensions[0]; + const Index columns_number = input_dimensions[1]; - context_dimensions = {{batch_size, rows_number, columns_number}}; + input_dimensions = {{batch_size, rows_number, columns_number}}; context_tensor.resize(batch_size*rows_number*columns_number); } else if(data_set_context_dimensions.size() == 3) { - const Index channels = context_dimensions[0]; - const Index rows_number = context_dimensions[1]; - const Index columns_number = context_dimensions[2]; + const Index channels = input_dimensions[0]; + const Index rows_number = input_dimensions[1]; + const Index columns_number = input_dimensions[2]; - context_dimensions = {{batch_size, channels, rows_number, columns_number}}; + input_dimensions = {{batch_size, channels, rows_number, columns_number}}; context_tensor.resize(batch_size*channels*rows_number*columns_number); } @@ -279,11 +279,11 @@ vector> Batch::get_input_pairs() const // if (has_context) -// input_pairs[1] = { context_data, context_dimensions }; +// input_pairs[1] = { context_data, input_dimensions }; input_pairs[0] = { (type*)input_tensor.data(), input_dimensions}; if (has_context()) - input_pairs.push_back({(type*)context_tensor.data(), context_dimensions}); + input_pairs.push_back({(type*)context_tensor.data(), input_dimensions}); return input_pairs; */ @@ -294,11 +294,11 @@ input_pairs[0] = { (type*)input_tensor.data(), input_dimensions}; // if (has_context) - // input_pairs[1] = { context_data, context_dimensions }; + // input_pairs[1] = { context_data, input_dimensions }; input_pairs[0] = { (type*)input_tensor.data(), input_dimensions}; if (has_context()) - input_pairs[1] = { (type*)context_tensor.data(), context_dimensions}; + input_pairs[1] = { (type*)context_tensor.data(), input_dimensions}; return input_pairs; } diff --git a/opennn/batch.h b/opennn/batch.h index 557d72199..2f5b9d553 100644 --- a/opennn/batch.h +++ b/opennn/batch.h @@ -43,8 +43,6 @@ struct Batch Tensor target_tensor; - dimensions context_dimensions; - Tensor context_tensor; unique_ptr thread_pool; diff --git a/opennn/language_data_set.cpp b/opennn/language_data_set.cpp index 5b6683027..f9581334f 100644 --- a/opennn/language_data_set.cpp +++ b/opennn/language_data_set.cpp @@ -12,11 +12,11 @@ namespace opennn { -LanguageDataSet::LanguageDataSet(const dimensions& context_dimensionms, - const dimensions& completion_dimensionms) +LanguageDataSet::LanguageDataSet(const dimensions& input_dimensionms, + const dimensions& target_dimensionms) { - set_context_dimensions(context_dimensionms); - set_completion_dimensions(completion_dimensionms); + set_input_dimensions(input_dimensionms); + set_target_dimensions(target_dimensionms); } @@ -27,72 +27,47 @@ LanguageDataSet::LanguageDataSet(const filesystem::path& data_path) : DataSet() read_txt(); set_raw_variable_scalers(Scaler::None); - completion_vocabulary = get_completion_vocabulary(); - context_vocabulary = get_context_vocabulary(); + target_vocabulary = get_target_vocabulary(); + input_vocabulary = get_input_vocabulary(); - completion_dimensions = {get_completion_length(), get_completion_vocabulary_size()}; - context_dimensions = {get_context_length(), get_context_vocabulary_size()}; + target_dimensions = {get_target_length(), get_target_vocabulary_size()}; + input_dimensions = {get_input_length(), get_input_vocabulary_size()}; } -const vector& LanguageDataSet::get_context_vocabulary() const +const vector& LanguageDataSet::get_input_vocabulary() const { - return context_vocabulary; + return input_vocabulary; } -const vector& LanguageDataSet::get_completion_vocabulary() const +const vector& LanguageDataSet::get_target_vocabulary() const { - return completion_vocabulary; + return target_vocabulary; } -Index LanguageDataSet::get_context_vocabulary_size() const +Index LanguageDataSet::get_input_vocabulary_size() const { - return context_vocabulary.size(); + return input_vocabulary.size(); } - -Index LanguageDataSet::get_completion_vocabulary_size() const +Index LanguageDataSet::get_target_vocabulary_size() const { - return completion_vocabulary.size(); + return target_vocabulary.size(); } -Index LanguageDataSet::get_context_length() const +Index LanguageDataSet::get_input_length() const { - return maximum_context_length + 2; + return maximum_input_length + 2; } -Index LanguageDataSet::get_completion_length() const +Index LanguageDataSet::get_target_length() const { // return maximum_completion_length + 2; - return maximum_completion_length + 1; -} - - -const dimensions& LanguageDataSet::get_completion_dimensions() const -{ - return completion_dimensions; -} - - -const dimensions& LanguageDataSet::get_context_dimensions() const -{ - return context_dimensions; -} - - -const vector>& LanguageDataSet::get_documents() const -{ - return documents; -} - - -const vector>& LanguageDataSet::get_targets() const -{ - return targets; + return maximum_target_length + 1; } @@ -101,7 +76,7 @@ void LanguageDataSet::set_default_raw_variables_uses() DataSet::set_default_raw_variables_uses(); if(raw_variables.size() > 1) - context_dimensions.resize(1); + input_dimensions.resize(1); } @@ -109,7 +84,7 @@ void LanguageDataSet::set_raw_variable_uses(const vector& new_raw_variab { DataSet::set_raw_variable_uses(new_raw_variables_uses); - context_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; + input_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; } @@ -117,43 +92,20 @@ void LanguageDataSet::set_raw_variable_uses(const vector& new_raw_v { DataSet::set_raw_variable_uses(new_raw_variables_uses); - context_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; + input_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; } -void LanguageDataSet::set_context_dimensions(const dimensions& new_context_dimensions) -{ - context_dimensions = new_context_dimensions; -} - -void LanguageDataSet::set_completion_dimensions(const dimensions& new_completion_dimensions) +void LanguageDataSet::set_input_vocabulary(const vector & new_input_vocabulary) { - completion_dimensions = new_completion_dimensions; + input_vocabulary = new_input_vocabulary; } -void LanguageDataSet::set_context_vocabulary_path(const string& new_context_vocabulary_path) +void LanguageDataSet::set_target_vocabulary(const vector & new_target_vocabulary) { - context_vocabulary_path = new_context_vocabulary_path; -} - - -void LanguageDataSet::set_completion_vocabulary_path(const string& new_completion_vocabulary_path) -{ - completion_vocabulary_path = new_completion_vocabulary_path; -} - - -void LanguageDataSet::set_context_vocabulary(const vector & new_context_vocabulary) -{ - context_vocabulary = new_context_vocabulary; -} - - -void LanguageDataSet::set_completion_vocabulary(const vector & new_completion_vocabulary) -{ - completion_vocabulary = new_completion_vocabulary; + target_vocabulary = new_target_vocabulary; } @@ -189,7 +141,7 @@ void LanguageDataSet::set_default() { DataSet::set_default(); - context_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; + input_dimensions = { get_variables_number(DataSet::VariableUse::Context) }; } @@ -411,9 +363,9 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const // Completion Vocabulary - printer.OpenElement("CompletionVocabulary"); + printer.OpenElement("TargetVocabulary"); - for (const auto& word : completion_vocabulary) + for (const auto& word : target_vocabulary) add_xml_element(printer, "Word", word); printer.CloseElement(); @@ -421,13 +373,13 @@ void LanguageDataSet::to_XML(XMLPrinter& printer) const // Context Vocabulary printer.OpenElement("ContextVocabulary"); - for (const auto& word : context_vocabulary) + for (const auto& word : input_vocabulary) add_xml_element(printer, "Word", word); printer.CloseElement(); - add_xml_element(printer, "CompletionDimensions", to_string(maximum_completion_length)); - add_xml_element(printer, "ContextDimensions", to_string(maximum_context_length)); + add_xml_element(printer, "TargetDimensions", to_string(maximum_target_length)); + add_xml_element(printer, "targetDimensions", to_string(maximum_input_length)); printer.CloseElement(); @@ -671,11 +623,11 @@ void LanguageDataSet::from_XML(const XMLDocument& data_set_document) const XMLElement* completion_vocabulary_element = data_set_element->FirstChildElement("CompletionVocabulary"); if(completion_vocabulary_element) { - completion_vocabulary.clear(); + target_vocabulary.clear(); for (const XMLElement* word_element = completion_vocabulary_element->FirstChildElement(); word_element; word_element = word_element->NextSiblingElement()) { if (word_element->GetText()) - completion_vocabulary.push_back(word_element->GetText()); + target_vocabulary.push_back(word_element->GetText()); } } @@ -684,12 +636,12 @@ void LanguageDataSet::from_XML(const XMLDocument& data_set_document) const XMLElement* context_vocabulary_element = data_set_element->FirstChildElement("ContextVocabulary"); if(context_vocabulary_element) { - context_vocabulary.clear(); + input_vocabulary.clear(); for (const XMLElement* word_element = context_vocabulary_element->FirstChildElement(); word_element; word_element = word_element->NextSiblingElement()) { if (word_element->GetText()) - context_vocabulary.push_back(word_element->GetText()); + input_vocabulary.push_back(word_element->GetText()); } } @@ -697,13 +649,13 @@ void LanguageDataSet::from_XML(const XMLDocument& data_set_document) const XMLElement* completion_dimensions_element = data_set_element->FirstChildElement("CompletionDimensions"); if (completion_dimensions_element && completion_dimensions_element->GetText()) - maximum_completion_length = atoi(completion_dimensions_element->GetText()); + maximum_target_length = atoi(completion_dimensions_element->GetText()); // Context Dimensions const XMLElement* context_dimensions_element = data_set_element->FirstChildElement("ContextDimensions"); if (context_dimensions_element && context_dimensions_element->GetText()) { - maximum_context_length = atoi(context_dimensions_element->GetText()); + maximum_input_length = atoi(context_dimensions_element->GetText()); } // Display @@ -1213,17 +1165,17 @@ vector LanguageDataSet::calculate_vocabulary(const vector } -void LanguageDataSet::load_documents(const filesystem::path& path) +void LanguageDataSet::load_documents() { - ifstream file(path); + ifstream file(data_path); if(!file.is_open()) - throw runtime_error("Cannot open document file: " + path.string() + "\n"); + throw runtime_error("Cannot open document file: " + data_path.string() + "\n"); - const Index original_size = documents.size(); + const Index original_size = input_tokens.size(); - documents.resize(original_size + 1); - targets.resize(original_size + 1); + input_tokens.resize(original_size + 1); + target_tokens.resize(original_size + 1); Index lines_count = 0; Index lines_number = 0; @@ -1296,8 +1248,8 @@ void LanguageDataSet::load_documents(const filesystem::path& path) document.resize(lines_count); document_target.resize(lines_count); - documents[original_size] = move(document); - targets[original_size] = move(document_target); + input_tokens[original_size] = move(document); + target_tokens[original_size] = move(document_target); file.close(); } @@ -1867,52 +1819,54 @@ void LanguageDataSet::read_txt() { cout << "Reading .txt file..." << endl; - load_documents(data_path.string()); + load_documents(); - const size_t documents_number = documents.size(); + const size_t documents_number = input_tokens.size(); - const size_t entry_number = accumulate(documents.begin(), documents.end(), 0, + const size_t entry_number = accumulate(input_tokens.begin(), input_tokens.end(), 0, [](size_t sum, const vector& doc) { return sum + doc.size(); }); - const size_t completion_entry_number = accumulate(targets.begin(), targets.end(), 0, + const size_t completion_entry_number = accumulate(target_tokens.begin(), target_tokens.end(), 0, [](size_t sum, const vector& target) { return sum + target.size(); }); if(entry_number != completion_entry_number) throw runtime_error("Entry number (" + to_string(entry_number) + ") not equal to completion entry number (" + to_string(completion_entry_number) + ").\n"); - vector context(entry_number); + vector input(entry_number); Index context_index = 0; for(size_t i = 0; i < documents_number; i++) - for(size_t j = 0; j < documents[i].size(); j++) - context[context_index++] = documents[i][j]; + for(size_t j = 0; j < input_tokens[i].size(); j++) + input[context_index++] = input_tokens[i][j]; - vector completion(entry_number); + vector target(entry_number); Index completion_index = 0; - for (size_t i = 0; i < targets.size(); i++) - for (size_t j = 0; j < targets[i].size(); j++) - completion[completion_index++] = targets[i][j]; + for (size_t i = 0; i < target_tokens.size(); i++) + for (size_t j = 0; j < target_tokens[i].size(); j++) + target[completion_index++] = target_tokens[i][j]; cout << "Processing documents..." << endl; - const vector> context_tokens = preprocess_language_documents(context); - const vector> completion_tokens = preprocess_language_documents(completion); - - if (context_vocabulary_path.empty() || completion_vocabulary_path.empty()) + const vector> input_tokens = preprocess_language_documents(input); + const vector> target_tokens = preprocess_language_documents(target); + /* + if (input_vocabulary_path.empty() || completion_vocabulary_path.empty()) { + */ cout << "Calculating vocabularies..." << endl; const Index target_vocabulary_size = 8000; const vector reserved_tokens = { "[PAD]", "[UNK]", "[START]", "[END]" }; - context_vocabulary = calculate_vocabulary(context_tokens, target_vocabulary_size, reserved_tokens); - completion_vocabulary = calculate_vocabulary(completion_tokens, target_vocabulary_size, reserved_tokens); + input_vocabulary = calculate_vocabulary(input_tokens, target_vocabulary_size, reserved_tokens); + target_vocabulary = calculate_vocabulary(target_tokens, target_vocabulary_size, reserved_tokens); // completion_vocabulary = {"[PAD]", "[UNK]", "[START]", "[END]", "Good", "Bad"}; // completion_vocabulary = {"[START]", "[END]", "Good", "Bad"}; - } +/* +} else { cout << "Importing vocabularies..." << endl; @@ -1920,31 +1874,32 @@ void LanguageDataSet::read_txt() import_vocabulary(context_vocabulary_path, context_vocabulary); import_vocabulary(completion_vocabulary_path, completion_vocabulary); } +*/ const size_t LIMIT = 126; - size_t maximum_context_tokens = context_tokens[0].size(); + size_t maximum_input_tokens = input_tokens[0].size(); for(size_t i = 0; i < entry_number; i++) - if(context_tokens[i].size() > maximum_context_tokens) - maximum_context_tokens = context_tokens[i].size(); + if(input_tokens[i].size() > maximum_input_tokens) + maximum_input_tokens = input_tokens[i].size(); - maximum_context_length = std::min(maximum_context_tokens, LIMIT); + maximum_input_length = std::min(maximum_input_tokens, LIMIT); - size_t maximum_completion_tokens = completion_tokens[0].size(); + size_t maximum_target_tokens = target_tokens[0].size(); for(size_t i = 0; i < entry_number; i++) - if(completion_tokens[i].size() > maximum_completion_tokens) - maximum_completion_tokens = completion_tokens[i].size(); + if(target_tokens[i].size() > maximum_target_tokens) + maximum_target_tokens = target_tokens[i].size(); - maximum_completion_length = std::min(maximum_completion_tokens, LIMIT + 1); + maximum_target_length = std::min(maximum_target_tokens, LIMIT + 1); // Output cout << "Writting data file..." << endl; - + string transformed_data_path = data_path.string(); - + replace(transformed_data_path,".txt","_data.txt"); replace(transformed_data_path,".csv","_data.csv"); @@ -1954,16 +1909,16 @@ void LanguageDataSet::read_txt() // there is start and end indicators - for(Index i = 0; i < maximum_context_length + 2; i++) + for(Index i = 0; i < maximum_input_length + 2; i++) file << "context_token_position_" << i << ";"; - for(Index i = 0; i < maximum_completion_length + 1; i++) + for(Index i = 0; i < maximum_target_length + 1; i++) file << "input_token_position_" << i << ";"; - for(Index i = 0; i < maximum_completion_length; i++) + for(Index i = 0; i < maximum_target_length; i++) file << "target_token_position_" << i << ";"; - file << "target_token_position_" << maximum_completion_length << "\n"; + file << "target_token_position_" << maximum_target_length << "\n"; // Data file preview @@ -1978,35 +1933,35 @@ void LanguageDataSet::read_txt() for(Index i = 0; i < preview_size - 1; i++) { - data_file_preview[i][0] = context[i]; - data_file_preview[i][1] = completion[i]; + data_file_preview[i][0] = input[i]; + data_file_preview[i][1] = target[i]; } - data_file_preview[preview_size - 1][0] = context[context.size()-1]; - data_file_preview[preview_size - 1][1] = completion[completion.size()-1]; + data_file_preview[preview_size - 1][0] = input[input.size()-1]; + data_file_preview[preview_size - 1][1] = target[target.size()-1]; //if (!imported_vocabulary) write_data_file_whitespace(file, context_tokens, completion_tokens); //else - write_data_file_wordpiece(file, context_tokens, completion_tokens); - + write_data_file_wordpiece(file, input_tokens, target_tokens); + file.close(); data_path = transformed_data_path; separator = Separator::Semicolon; - + read_csv(); - + set_raw_variable_types(RawVariableType::Numeric); - for(Index i = 0; i < maximum_context_length + 2; i++) + for(Index i = 0; i < maximum_input_length + 2; i++) set_raw_variable_use(i, VariableUse::Context); - for (Index i = 0; i < maximum_completion_length + 1; i++) - set_raw_variable_use(i + maximum_context_length + 2, VariableUse::Input); + for (Index i = 0; i < maximum_target_length + 1; i++) + set_raw_variable_use(i + maximum_input_length + 2, VariableUse::Input); - for (Index i = 0; i < maximum_completion_length + 1; i++) - set_raw_variable_use(i + maximum_context_length + maximum_completion_length + 3, VariableUse::Target); + for (Index i = 0; i < maximum_target_length + 1; i++) + set_raw_variable_use(i + maximum_input_length + maximum_target_length + 3, VariableUse::Target); } @@ -2020,18 +1975,18 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, //const unordered_map completion_vocabulary_map(completion_vocabulary.begin(), completion_vocabulary.end()); unordered_map context_vocabulary_map; - for(size_t i = 0; i < context_vocabulary.size(); i++) - context_vocabulary_map[context_vocabulary[i]] = type(i); + for(size_t i = 0; i < input_vocabulary.size(); i++) + context_vocabulary_map[input_vocabulary[i]] = type(i); - unordered_map completion_vocabulary_map; - for(size_t i = 0; i < completion_vocabulary.size(); i++) - completion_vocabulary_map[completion_vocabulary[i]] = type(i); + unordered_map target_vocabulary_map; + for(size_t i = 0; i < target_vocabulary.size(); i++) + target_vocabulary_map[target_vocabulary[i]] = type(i); // const Index context_vocabulary_size = context_vocabulary.size(); // const Index completion_vocabulary_size = completion_vocabulary.size(); - Tensor context_row(maximum_context_length + 2); - Tensor completion_row(maximum_completion_length + 2); + Tensor context_row(maximum_input_length + 2); + Tensor completion_row(maximum_target_length + 2); vector line_tokens; Index token_counter; @@ -2044,7 +1999,7 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, auto wordpiece_entry = context_vocabulary_map.find(""); bool tokenized; - + for(Index i = 0; i < entry_number; i++) { // Context @@ -2058,9 +2013,9 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, line_tokens = context_tokens[i]; - for(Index j = 0; j < maximum_context_length + 1; j++) + for(Index j = 0; j < maximum_input_length + 1; j++) { - if(j < Index(line_tokens.size()) && token_counter < maximum_context_length + 1) + if(j < Index(line_tokens.size()) && token_counter < maximum_input_length + 1) { word = line_tokens[j]; @@ -2076,7 +2031,7 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, for(Index wordpiece_length = word.length(); wordpiece_length > 0; wordpiece_length--) { - if(token_counter == maximum_context_length + 1) + if(token_counter == maximum_input_length + 1) { tokenized = true; break; @@ -2124,8 +2079,8 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, */ } } - - for(Index j = 0; j < maximum_context_length + 2; j++) + + for(Index j = 0; j < maximum_input_length + 2; j++) file << context_row(j) << ";"; // Completion @@ -2139,15 +2094,15 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, line_tokens = completion_tokens[i]; - for(Index j = 0; j < maximum_completion_length + 1; j++) + for(Index j = 0; j < maximum_target_length + 1; j++) { - if(j < Index(line_tokens.size()) && token_counter < maximum_completion_length + 1) + if(j < Index(line_tokens.size()) && token_counter < maximum_target_length + 1) { word = line_tokens[j]; - wordpiece_entry = completion_vocabulary_map.find(word); + wordpiece_entry = target_vocabulary_map.find(word); - if(wordpiece_entry != completion_vocabulary_map.end()) + if(wordpiece_entry != target_vocabulary_map.end()) { completion_row(token_counter++) = wordpiece_entry->second; continue; @@ -2157,16 +2112,16 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, for(Index wordpiece_length = word.length(); wordpiece_length > 0; wordpiece_length--) { - if(token_counter == maximum_completion_length + 1) + if(token_counter == maximum_target_length + 1) { tokenized = true; break; } wordpiece = word.substr(0, wordpiece_length); - wordpiece_entry = completion_vocabulary_map.find(wordpiece); + wordpiece_entry = target_vocabulary_map.find(wordpiece); - if(wordpiece_entry != completion_vocabulary_map.end()) + if(wordpiece_entry != target_vocabulary_map.end()) { completion_row(token_counter++) = wordpiece_entry->second; @@ -2188,11 +2143,11 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, } else { - if(token_counter > maximum_completion_length + 1) + if(token_counter > maximum_target_length + 1) break; if(j == Index(line_tokens.size()) - || (token_counter == maximum_completion_length + 1 && !line_ended)) + || (token_counter == maximum_target_length + 1 && !line_ended)) { completion_row(token_counter++) = 3; // end indicator line_ended = true; @@ -2204,13 +2159,13 @@ void LanguageDataSet::write_data_file_wordpiece(ofstream& file, } } - for(Index j = 0; j < maximum_completion_length + 1; j++) + for(Index j = 0; j < maximum_target_length + 1; j++) file << completion_row(j) << ";"; - for(Index j = 1; j < maximum_completion_length + 1; j++) // Target is input shifted 1 position to the left + for(Index j = 1; j < maximum_target_length + 1; j++) // Target is input shifted 1 position to the left file << completion_row(j) << ";"; - file << completion_row(maximum_completion_length + 1) << "\n"; + file << completion_row(maximum_target_length + 1) << "\n"; } } diff --git a/opennn/language_data_set.h b/opennn/language_data_set.h index b0086148e..1bad0d54d 100644 --- a/opennn/language_data_set.h +++ b/opennn/language_data_set.h @@ -23,33 +23,21 @@ class LanguageDataSet : public DataSet explicit LanguageDataSet(const filesystem::path& = filesystem::path()); - const vector& get_context_vocabulary() const; - const vector& get_completion_vocabulary() const; + const vector& get_input_vocabulary() const; + const vector& get_target_vocabulary() const; - Index get_context_vocabulary_size() const; - Index get_completion_vocabulary_size() const; + Index get_input_vocabulary_size() const; + Index get_target_vocabulary_size() const; - Index get_context_length() const; - Index get_completion_length() const; - - const dimensions& get_context_dimensions() const; - const dimensions& get_completion_dimensions() const; - - const vector>& get_documents() const; - const vector>& get_targets() const; + Index get_input_length() const; + Index get_target_length() const; void set_default_raw_variables_uses() override; void set_raw_variable_uses(const vector&) override; void set_raw_variable_uses(const vector&) override; - void set_context_dimensions(const dimensions&); - void set_completion_dimensions(const dimensions&); - - void set_context_vocabulary_path(const string&); - void set_completion_vocabulary_path(const string&); - - void set_context_vocabulary(const vector&); - void set_completion_vocabulary(const vector&); + void set_input_vocabulary(const vector&); + void set_target_vocabulary(const vector&); void set_data_random() override; @@ -77,7 +65,7 @@ class LanguageDataSet : public DataSet const bool& include_joiner_token = true, const string& joiner = "##"); - void load_documents(const filesystem::path&); + void load_documents(); void read_csv_1(); @@ -87,6 +75,8 @@ class LanguageDataSet : public DataSet void read_csv() override; + // Empieza por aquí. + void read_txt(); // void write_data_file_whitespace(ofstream&, const vector>&, const vector>&); @@ -94,24 +84,17 @@ class LanguageDataSet : public DataSet private: - dimensions completion_dimensions; - dimensions context_dimensions; - - vector context_vocabulary; - - string context_vocabulary_path; - - vector completion_vocabulary; + vector input_vocabulary; - string completion_vocabulary_path; + vector target_vocabulary; - Index maximum_completion_length = 0; + Index maximum_input_length = 0; - Index maximum_context_length = 0; + Index maximum_target_length = 0; - vector> documents; + vector> input_tokens; - vector> targets; + vector> target_tokens; }; }