From 1201718f28a7b931660c4a576a04ce51a6964f2a Mon Sep 17 00:00:00 2001 From: Francois Coppens Date: Wed, 14 Apr 2021 17:18:31 +0200 Subject: [PATCH 1/4] Preped files, headers, functions, test_h5 and Makefiles for MaponiA3S. --- Makefile | 8 ++- Makefile.verificarlo | 8 ++- include/SM_MaponiA3S.hpp | 3 + src/SM_MaponiA3S.cpp | 146 +++++++++++++++++++++++++++++++++++++++ tests/test_h5.cpp | 3 + 5 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 include/SM_MaponiA3S.hpp create mode 100644 src/SM_MaponiA3S.cpp diff --git a/Makefile b/Makefile index 4746013..6fd703e 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,10 @@ FLIBS = -lstdc++ ## Includes and dependencies INCLUDE = -I $(INC_DIR)/ -DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o $(OBJ_DIR)/SM_Standard.o $(OBJ_DIR)/SM_Helpers.o +DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o \ + $(OBJ_DIR)/SM_MaponiA3S.o \ + $(OBJ_DIR)/SM_Standard.o \ + $(OBJ_DIR)/SM_Helpers.o DEPS_F = $(DEPS_CXX) $(OBJ_DIR)/SM_MaponiA3_mod.o $(OBJ_DIR)/Helpers_mod.o ## Directory structure @@ -90,6 +93,9 @@ $(OBJ_DIR)/%.o: $(TST_DIR)/%.f90 | $(OBJ_DIR) $(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< +$(OBJ_DIR)/SM_MaponiA3S.o: $(SRC_DIR)/SM_MaponiA3S.cpp $(INC_DIR)/* | $(OBJ_DIR) + $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< + $(OBJ_DIR)/SM_Standard.o: $(SRC_DIR)/SM_Standard.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< diff --git a/Makefile.verificarlo b/Makefile.verificarlo index e9f135c..44e3161 100644 --- a/Makefile.verificarlo +++ b/Makefile.verificarlo @@ -9,7 +9,10 @@ CXXFLAGS = -O0 -g $(H5FLAGS) FFLAGS = -O0 -g $(H5FLAGS) INCLUDE = -I $(INC_DIR)/ -DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o $(OBJ_DIR)/SM_Standard.o $(OBJ_DIR)/SM_Helpers.o +DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o \ + $(OBJ_DIR)/SM_MaponiA3S.o \ + $(OBJ_DIR)/SM_Standard.o \ + $(OBJ_DIR)/SM_Helpers.o DEPS_F = $(DEPS_CXX) $(OBJ_DIR)/SM_MaponiA3_mod.o $(OBJ_DIR)/Helpers_mod.o FLIBS = -lstdc++ @@ -69,6 +72,9 @@ $(OBJ_DIR)/%.o: $(TST_DIR)/%.f90 | $(OBJ_DIR) $(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) -fPIC $(ARCH) $(INCLUDE) -c -o $@ $< +$(OBJ_DIR)/SM_MaponiA3S.o: $(SRC_DIR)/SM_MaponiA3S.cpp $(INC_DIR)/* | $(OBJ_DIR) + $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< + $(OBJ_DIR)/SM_Standard.o: $(SRC_DIR)/SM_Standard.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) -fPIC $(ARCH) $(INCLUDE) -c -o $@ $< diff --git a/include/SM_MaponiA3S.hpp b/include/SM_MaponiA3S.hpp new file mode 100644 index 0000000..86775fc --- /dev/null +++ b/include/SM_MaponiA3S.hpp @@ -0,0 +1,3 @@ +void MaponiA3S(double *Slater_inv, unsigned int Dim, + unsigned int N_updates, double *Updates, + unsigned int *Updates_index); diff --git a/src/SM_MaponiA3S.cpp b/src/SM_MaponiA3S.cpp new file mode 100644 index 0000000..505219a --- /dev/null +++ b/src/SM_MaponiA3S.cpp @@ -0,0 +1,146 @@ +// SM-MaponiA3_f.cpp +// Algorithm 3 from P. Maponi, +// p. 283, doi:10.1016/j.laa.2006.07.007 +#include "SM_MaponiA3S.hpp" +#include "SM_Helpers.hpp" + +// #define DEBUG + +void MaponiA3S(double *Slater_inv, unsigned int Dim, + unsigned int N_updates, double *Updates, + unsigned int *Updates_index) { + + /* + DECLARE AND INITIALISE ARRAYS + */ + + unsigned int k, l, i, j, component; + unsigned int *p = new unsigned int[N_updates + 1] {0}; + double alpha, beta; + double *Al = new double[Dim * Dim]; + double *next = new double[Dim*Dim] {0}; + double *last = Slater_inv, *tmp; + + // Populate update-order vector + for (i = 0; i < N_updates; i++) { + p[i + 1] = i + 1; + } + + // Declare auxiliary solution matrix ylk[N_updates][N_updates+1][Dim] + double ***ylk = new double **[N_updates]; + for (l = 0; l < N_updates; l++) { + ylk[l] = new double *[N_updates + 1]; + for (k = 0; k < N_updates + 1; k++) { + ylk[l][k] = new double[Dim + 1] {0}; + } + } + + + + /* + START ALGORITHM + */ + + // Calculate the {y_{0,k}} + for (k = 1; k < N_updates + 1; k++) { + #ifdef DEBUG + std::cout << "Compute y0k: " << std::endl; + std::cout << "ylk[0][" << k << "][:]"; + std::cout << std::endl; + #endif + for (i = 1; i < Dim + 1; i++) { + for (j = 1; j < Dim + 1; j++) { + ylk[0][k][i] += Slater_inv[(i-1)*Dim + (j-1)] + * Updates[(k-1)*Dim + (j-1)]; + } + } + #ifdef DEBUG + showVector(ylk[0][k], Dim, ""); + #endif + } + + // Calculate the {y_{l,k}} from the {y_{0,k}} + for (l = 0; l < N_updates; l++) { + #ifdef DEBUG + std::cout << "In outer compute-ylk-loop: l = " << l << std::endl; + std::cout << std::endl; + #endif + + // For given l select intermediate update with largest break-down val + selectLargestDenominator(l, N_updates, Updates_index, p, ylk); + + // Select component and comp. bd-condition. + component = Updates_index[p[l+1] - 1]; + beta = 1 + ylk[l][p[l+1]][component]; + #ifdef DEBUG + std::cout << "p[l+1] = " << p[l+1] << std::endl; + std::cout << "component = " << component << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "] = " << beta << std::endl; + std::cout << std::endl; + #endif + if (fabs(beta) < 1e-3) { + std::cerr << "Break-down occured." << std::endl; + } + + // Compute intermediate update to Slater_inv + #ifdef DEBUG + std::cout << "Compute intermediate update to Slater_inv" << std::endl; + std::cout << "component = " << component << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "]" << std::endl; + std::cout << "ylk[l][p[k]][:] = ylk[" << l << "][" << p[l+1] << "][:]" << std::endl; + std::cout << std::endl; + #endif + for (i = 0; i < Dim; i++) { + for (j = 0; j < Dim; j++) { + Al[i*Dim + j] = (i == j) - (j == component-1) + * ylk[l][p[l+1]][i + 1] / beta; + } + } + matMul(Al, last, next, Dim); + tmp = next; + next = last; + last = tmp; + #ifdef DEBUG + showMatrix(last, Dim, "last"); + #endif + + // For given l != 0 compute the next {y_{l,k}} + for (k = l+2; k < N_updates+1; k++) { + alpha = ylk[l][p[k]][component] / beta; + #ifdef DEBUG + std::cout << "Inside k-loop: k = " << k << std::endl; + std::cout << "ylk[" << l+1 << "][" << p[k] << "][:]" << std::endl; + std::cout << std::endl; + #endif + for (i = 1; i < Dim + 1; i++) { + ylk[l+1][p[k]][i] = ylk[l][p[k]][i] + - alpha * ylk[l][p[l+1]][i]; + } + } + } + memcpy(Slater_inv, last, Dim*Dim*sizeof(double)); + + + + /* + CLEANUP MEMORY + */ + + for (l = 0; l < N_updates; l++) { + for (k = 0; k < N_updates + 1; k++) { + delete[] ylk[l][k]; + } + delete[] ylk[l]; + } + delete[] Al, next, p; +} + +extern "C" { + void MaponiA3S_f(double **linSlater_inv, unsigned int *Dim, + unsigned int *N_updates, double **linUpdates, + unsigned int **Updates_index) { + MaponiA3S(*linSlater_inv, *Dim, + *N_updates, *linUpdates, + *Updates_index); + } +} diff --git a/tests/test_h5.cpp b/tests/test_h5.cpp index 12d9b38..f965b91 100644 --- a/tests/test_h5.cpp +++ b/tests/test_h5.cpp @@ -2,6 +2,7 @@ #include "hdf5/serial/H5Cpp.h" #include "SM_MaponiA3.hpp" +#include "SM_MaponiA3S.hpp" #include "SM_Standard.hpp" #include "SM_Helpers.hpp" @@ -89,6 +90,8 @@ int test_cycle(H5File file, int cycle, std::string version) { if (version == "maponia3") { MaponiA3(slater_inverse, dim, nupdates, u, col_update_index); + } else if (version == "maponia3s") { + MaponiA3S(slater_inverse, dim, nupdates, u, col_update_index); } else if (version == "sm1") { SM1(slater_inverse, dim, nupdates, u, col_update_index); } else if (version == "sm2") { From fad8eb2e89ffb616309ff1b1c4e07b07f04e09c2 Mon Sep 17 00:00:00 2001 From: Francois Coppens Date: Thu, 15 Apr 2021 12:17:12 +0200 Subject: [PATCH 2/4] - Fixed small dataset cycle 8169 to transform to replacement updates and regenerated the hdf5 file. - Simplified makefiles. --- Makefile | 24 +- Makefile.verificarlo | 37 +- datasets/qmcchem_update-size_dist.log | 24924 ---------------- datasets/qmcchem_update-size_dist.pdf | Bin 11472 -> 0 bytes .../small/{dataset.small.dat => dataset.dat} | 10 +- .../{dataset.small.hdf5 => dataset.hdf5} | Bin 30583 -> 30583 bytes src/SM_MaponiA3S.cpp | 2 +- 7 files changed, 29 insertions(+), 24968 deletions(-) delete mode 100644 datasets/qmcchem_update-size_dist.log delete mode 100644 datasets/qmcchem_update-size_dist.pdf rename datasets/small/{dataset.small.dat => dataset.dat} (99%) rename datasets/small/{dataset.small.hdf5 => dataset.hdf5} (76%) diff --git a/Makefile b/Makefile index 6fd703e..9fb8aca 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,13 @@ else ifeq ($(ENV),GNU) OPT = -O0 DEBUG = -g else - $(error No valid compiler environment set in $$ENV. First run: $$ source smvars.sh {intel | llvm | gnu}) + $(error No valid compiler environment set in $$ENV. \ + First run: $$ source smvars.sh {intel | llvm | gnu}) endif -CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) +CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) -fPIC FFLAGS = $(CXXFLAGS) H5CXX = h5c++ -H5CXXFLAGS = $(CXXFLAGS) -fPIC +H5CXXFLAGS = $(CXXFLAGS) FLIBS = -lstdc++ ## Includes and dependencies @@ -32,7 +33,9 @@ DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o \ $(OBJ_DIR)/SM_MaponiA3S.o \ $(OBJ_DIR)/SM_Standard.o \ $(OBJ_DIR)/SM_Helpers.o -DEPS_F = $(DEPS_CXX) $(OBJ_DIR)/SM_MaponiA3_mod.o $(OBJ_DIR)/Helpers_mod.o +DEPS_F = $(DEPS_CXX) \ + $(OBJ_DIR)/SM_MaponiA3_mod.o \ + $(OBJ_DIR)/Helpers_mod.o ## Directory structure SRC_DIR := src @@ -70,7 +73,7 @@ $(OBJ_DIR)/%.o: $(TST_DIR)/%.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIE $(INCLUDE) -c -o $@ $< + $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $< ## HDF5/C++ objects $(OBJ_DIR)/%_h5.o: $(TST_DIR)/%_h5.cpp $(INC_DIR)/* | $(OBJ_DIR) @@ -88,17 +91,6 @@ endif $(OBJ_DIR)/%.o: $(TST_DIR)/%.f90 | $(OBJ_DIR) $(FC) $(FFLAGS) -I $(OBJ_DIR)/ -c -o $@ $< -### EXPLICIT BUILD RULES -## special compiler flag -fPIC otherwise h5c++ builds fail -$(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< - -$(OBJ_DIR)/SM_MaponiA3S.o: $(SRC_DIR)/SM_MaponiA3S.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< - -$(OBJ_DIR)/SM_Standard.o: $(SRC_DIR)/SM_Standard.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< - #### LINKING $(BIN_DIR)/cMaponiA3_test_3x3_3: $(OBJ_DIR)/cMaponiA3_test_3x3_3.o $(DEPS_CXX) | $(BIN_DIR) diff --git a/Makefile.verificarlo b/Makefile.verificarlo index 44e3161..167b4b2 100644 --- a/Makefile.verificarlo +++ b/Makefile.verificarlo @@ -4,16 +4,25 @@ CXX = verificarlo-c++ FC = verificarlo-f ## Compiler flags -H5FLAGS = "-I/usr/include/hdf5/serial -L/usr/lib/x86_64-linux-gnu/hdf5/serial /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl_cpp.a /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_cpp.a /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl.a /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.a -lpthread -lsz -lz -ldl -lm -Wl,-rpath -Wl,/usr/lib/x86_64-linux-gnu/hdf5/serial" +H5FLAGS = "-I/usr/include/hdf5/serial \ + -L/usr/lib/x86_64-linux-gnu/hdf5/serial \ + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl_cpp.a \ + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_cpp.a \ + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl.a \ + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.a \ + -lpthread -lsz -lz -ldl -lm \ + -Wl,-rpath -Wl,/usr/lib/x86_64-linux-gnu/hdf5/serial" CXXFLAGS = -O0 -g $(H5FLAGS) -FFLAGS = -O0 -g $(H5FLAGS) +FFLAGS = $(CXXFLAGS) INCLUDE = -I $(INC_DIR)/ DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o \ $(OBJ_DIR)/SM_MaponiA3S.o \ $(OBJ_DIR)/SM_Standard.o \ $(OBJ_DIR)/SM_Helpers.o -DEPS_F = $(DEPS_CXX) $(OBJ_DIR)/SM_MaponiA3_mod.o $(OBJ_DIR)/Helpers_mod.o +DEPS_F = $(DEPS_CXX) \ + $(OBJ_DIR)/SM_MaponiA3_mod.o \ + $(OBJ_DIR)/Helpers_mod.o FLIBS = -lstdc++ SRC_DIR := src @@ -36,7 +45,7 @@ EXEC := $(BIN_DIR)/cMaponiA3_test_3x3_3 \ all: $(EXEC) clean: - @rm -vrf $(OBJ_DIR) + @rm -vrf $(OBJ_DIR) .*.o *.dbg *.cmdx *.cmod *.ilm *.stb distclean: clean @rm -vrf $(BIN_DIR) \ @@ -53,7 +62,7 @@ $(OBJ_DIR)/%.o: $(TST_DIR)/%.cpp $(INC_DIR)/* | $(OBJ_DIR) $(CXX) $(CXXFLAGS) $(ARCH) $(INCLUDE) -c -o $@ $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIE $(INCLUDE) -c -o $@ $< + $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $< ## HDF5/C++ objects $(OBJ_DIR)/%_h5.o: $(TST_DIR)/%_h5.cpp $(INC_DIR)/* | $(OBJ_DIR) @@ -61,35 +70,19 @@ $(OBJ_DIR)/%_h5.o: $(TST_DIR)/%_h5.cpp $(INC_DIR)/* | $(OBJ_DIR) ## Fortran modules $(OBJ_DIR)/%_mod.o: $(SRC_DIR)/%_mod.f90 | $(OBJ_DIR) - $(FC) $(FFLAGS) $(ARCH) -module $(OBJ_DIR)/ -c -o $@ $< + $(FC) $(FFLAGS) $(ARCH) -J $(OBJ_DIR)/ -c -o $@ $< ## Fortran objects $(OBJ_DIR)/%.o: $(TST_DIR)/%.f90 | $(OBJ_DIR) $(FC) $(FFLAGS) $(ARCH) -I $(OBJ_DIR)/ -c -o $@ $< -### EXPLICIT BUILD RULES -## special compiler flag -fPIC otherwise h5c++ builds fail -$(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(ARCH) $(INCLUDE) -c -o $@ $< - -$(OBJ_DIR)/SM_MaponiA3S.o: $(SRC_DIR)/SM_MaponiA3S.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(INCLUDE) -c -o $@ $< - -$(OBJ_DIR)/SM_Standard.o: $(SRC_DIR)/SM_Standard.cpp $(INC_DIR)/* | $(OBJ_DIR) - $(CXX) $(CXXFLAGS) -fPIC $(ARCH) $(INCLUDE) -c -o $@ $< - #### LINKING $(BIN_DIR)/cMaponiA3_test_3x3_3: $(OBJ_DIR)/cMaponiA3_test_3x3_3.o $(DEPS_CXX) | $(BIN_DIR) $(CXX) -o $@ $^ -#begin H5 $(BIN_DIR)/test_h5: $(OBJ_DIR)/test_h5.o $(DEPS_CXX) | $(BIN_DIR) $(CXX) -o $@ $^ $(H5FLAGS) -#$(BIN_DIR)/test_external_h5: $(OBJ_DIR)/test_external_h5.o $(DEPS_CXX) | $(BIN_DIR) -# $(CXX) -o $@ $^ $(H5FLAGS) -#end H5 - $(BIN_DIR)/fMaponiA3_test_3x3_3: $(DEPS_F) $(OBJ_DIR)/fMaponiA3_test_3x3_3.o | $(BIN_DIR) $(FC) $(FLIBS) -o $@ $^ diff --git a/datasets/qmcchem_update-size_dist.log b/datasets/qmcchem_update-size_dist.log deleted file mode 100644 index dad29fb..0000000 --- a/datasets/qmcchem_update-size_dist.log +++ /dev/null @@ -1,24924 +0,0 @@ -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 -11 -7 -4 -2 -1 -1 -2 -1 -1 -2 -2 -2 -1 -2 -2 -2 -1 -3 -1 -2 -1 -1 -2 -1 -1 -12 -2 -2 -1 -11 -11 -11 -11 -1 -11 -11 -1 -1 -1 -1 -1 -1 -1 -2 -15 -2 -1 -12 -12 -12 -12 -1 -1 -12 -12 -1 -1 -1 -1 -1 -2 -1 -14 -3 -1 -9 -12 -1 -3 -4 -3 -7 -10 -4 -6 -10 -13 -1 -14 -11 -2 -13 -1 -3 -3 -1 -2 -1 -1 -1 -1 -14 -3 -8 -10 -3 -10 -10 -5 -1 -4 -1 -7 -8 -7 -9 -6 -1 -4 -1 -6 -7 -2 -7 -13 -2 -1 -1 -1 -2 -1 -1 -8 -2 -6 -5 -8 -1 -1 -1 -2 -1 -1 -1 -9 -5 -6 -5 -6 -5 -9 -1 -3 -1 -1 -1 -6 -2 -8 -1 -1 -1 -1 -2 -1 -5 -3 -5 -5 -10 -1 -3 -4 -4 -1 -1 -2 -5 -7 -5 -5 -2 -5 -15 -1 -3 -3 -7 -7 -8 -1 -3 -3 -3 -1 -6 -2 -12 -1 -2 -1 -1 -2 -5 -2 -5 -4 -5 -1 -1 -2 -2 -1 -4 -2 -5 -4 -4 -2 -4 -4 -2 -1 -1 -2 -1 -2 -1 -3 -9 -9 -7 -5 -5 -2 -6 -3 -1 -1 -2 -2 -1 -1 -2 -1 -2 -9 -5 -9 -4 -5 -3 -6 -2 -1 -2 -4 -5 -6 -6 -6 -8 -1 -1 -5 -6 -8 -2 -6 -14 -1 -6 -2 -2 -8 -1 -3 -4 -4 -5 -1 -3 -4 -4 -4 -2 -2 -4 -1 -5 -3 -2 -2 -2 -3 -4 -1 -3 -2 -2 -3 -1 -4 -5 -5 -5 -3 -10 -10 -10 -10 -3 -1 -1 -11 -2 -7 -10 -1 -3 -3 -2 -2 -5 -8 -1 -8 -8 -8 -8 -1 -3 -3 -1 -8 -9 -9 -9 diff --git a/datasets/qmcchem_update-size_dist.pdf b/datasets/qmcchem_update-size_dist.pdf deleted file mode 100644 index 7d0a13e64eda1e9d0be8a0cc391a3fca239b37c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11472 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 I%2J^J0aj_+XaE2J diff --git a/datasets/small/dataset.small.dat b/datasets/small/dataset.dat similarity index 99% rename from datasets/small/dataset.small.dat rename to datasets/small/dataset.dat index c65fc95..a393c0b 100644 --- a/datasets/small/dataset.small.dat +++ b/datasets/small/dataset.dat @@ -535,12 +535,12 @@ (04,04) 0.100000000000000E+01 0.000000000000000E+00 #COL_UPDATE_INDEX: 2 #COL_UPDATE_COMP_(01): 0.000000000000000E+00 -#COL_UPDATE_COMP_(02): -0.200000000000000E+01 +#COL_UPDATE_COMP_(02): -1.000000000000000E+00 #COL_UPDATE_COMP_(03): 0.000000000000000E+00 -#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): 1.000000000000000E+00 #COL_UPDATE_INDEX: 4 -#COL_UPDATE_COMP_(01): 0.000000000000000E+00 -#COL_UPDATE_COMP_(02): -0.100000000000000E+01 +#COL_UPDATE_COMP_(01): -1.000000000000000E+00 +#COL_UPDATE_COMP_(02): -1.000000000000000E+00 #COL_UPDATE_COMP_(03): 0.000000000000000E+00 -#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): -1.000000000000000E+00 #END_PACKET diff --git a/datasets/small/dataset.small.hdf5 b/datasets/small/dataset.hdf5 similarity index 76% rename from datasets/small/dataset.small.hdf5 rename to datasets/small/dataset.hdf5 index 2c0ba2e104a6345d80789f2f66e9cc4fd25c4cf8..872ecb8a576bc63a3db6f31d9de65452c7c11057 100644 GIT binary patch delta 3739 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 BG)4db diff --git a/src/SM_MaponiA3S.cpp b/src/SM_MaponiA3S.cpp index 505219a..249f018 100644 --- a/src/SM_MaponiA3S.cpp +++ b/src/SM_MaponiA3S.cpp @@ -4,7 +4,7 @@ #include "SM_MaponiA3S.hpp" #include "SM_Helpers.hpp" -// #define DEBUG +#define DEBUG void MaponiA3S(double *Slater_inv, unsigned int Dim, unsigned int N_updates, double *Updates, From e5648f7485a2873ce9a546d8b4b7786c2156e0bd Mon Sep 17 00:00:00 2001 From: Francois Coppens Date: Thu, 15 Apr 2021 14:38:42 +0200 Subject: [PATCH 3/4] Ran: clang-format --style=LLVM on *.cpp and *.hpp files. --- include/SM_Helpers.hpp | 183 +++++++++++++++++++-------------------- include/SM_MaponiA3.hpp | 5 +- include/SM_MaponiA3S.hpp | 5 +- include/SM_Standard.hpp | 6 +- src/SM_Helpers.cpp | 19 ++-- src/SM_MaponiA3.cpp | 91 +++++++++---------- src/SM_MaponiA3S.cpp | 92 +++++++++----------- src/SM_Standard.cpp | 96 ++++++++------------ 8 files changed, 226 insertions(+), 271 deletions(-) diff --git a/include/SM_Helpers.hpp b/include/SM_Helpers.hpp index 049df9c..e8c308e 100644 --- a/include/SM_Helpers.hpp +++ b/include/SM_Helpers.hpp @@ -1,127 +1,122 @@ // SM_Helpers.hpp // Some usefull helper functions to support the Maponi algorithm. +#include +#include #include #include -#include -#include void Switch(unsigned int *p, unsigned int l, unsigned int lbar); -void selectLargestDenominator(unsigned int l, unsigned int N_updates, - unsigned int *Updates_index, unsigned int *p, - double ***ylk); +void selectLargestDenominator(unsigned int l, unsigned int N_updates, + unsigned int *Updates_index, unsigned int *p, + double ***ylk); -template -void showScalar(T scalar, std::string name) { - std::cout << name << " = " << scalar << std::endl << std::endl; +template void showScalar(T scalar, std::string name) { + std::cout << name << " = " << scalar << std::endl << std::endl; } -template +template void showVector(T *vector, unsigned int size, std::string name) { - std::cout << name << " = " << std::endl; - for (unsigned int i = 0; i < size; i++) { - std::cout << "[ " << vector[i] << " ]" << std::endl; - } - std::cout << std::endl; + std::cout << name << " = " << std::endl; + for (unsigned int i = 0; i < size; i++) { + std::cout << "[ " << vector[i] << " ]" << std::endl; + } + std::cout << std::endl; } -template +template void showMatrix(T *matrix, unsigned int M, std::string name) { - std::cout.precision(17); - std::cout << name << " = [" << std::endl; - for (unsigned int i = 0; i < M; i++) { - std::cout << "["; - for (unsigned int j = 0; j < M; j++) { - if (matrix[i*M + j] >= 0) { - std::cout << " " << matrix[i*M + j] << ","; - } - else { - std::cout << " " << matrix[i*M + j] << "," ; - } - } - std::cout << " ]," << std::endl; + std::cout.precision(17); + std::cout << name << " = [" << std::endl; + for (unsigned int i = 0; i < M; i++) { + std::cout << "["; + for (unsigned int j = 0; j < M; j++) { + if (matrix[i * M + j] >= 0) { + std::cout << " " << matrix[i * M + j] << ","; + } else { + std::cout << " " << matrix[i * M + j] << ","; + } } - std::cout << "]" << std::endl; - std::cout << std::endl; + std::cout << " ]," << std::endl; + } + std::cout << "]" << std::endl; + std::cout << std::endl; } -template -T *transpose(T *A, unsigned int M) { - T *B = new T[M*M]; - for (unsigned int i = 0; i < M; i++) { - for (unsigned int j = 0; j < M; j++) { - B[i*M + j] = A[i + j*M]; - } +template T *transpose(T *A, unsigned int M) { + T *B = new T[M * M]; + for (unsigned int i = 0; i < M; i++) { + for (unsigned int j = 0; j < M; j++) { + B[i * M + j] = A[i + j * M]; } - return B; + } + return B; } -template -void matMul(T *A, T *B, T *C, unsigned int M) { - memset(C, 0, M*M*sizeof(T)); - for (unsigned int i = 0; i < M; i++) { - for (unsigned int j = 0; j < M; j++) { - for (unsigned int k = 0; k < M; k++) { - C[i*M+j] += A[i*M+k] * B[k*M+j]; - } - } +template void matMul(T *A, T *B, T *C, unsigned int M) { + memset(C, 0, M * M * sizeof(T)); + for (unsigned int i = 0; i < M; i++) { + for (unsigned int j = 0; j < M; j++) { + for (unsigned int k = 0; k < M; k++) { + C[i * M + j] += A[i * M + k] * B[k * M + j]; + } } + } } -template +template T1 *outProd(T1 *vec1, T2 *vec2, unsigned int M) { - T1 *C = new T1[M*M]; - for (unsigned int i = 0; i < M; i++) { - for (unsigned int j = 0; j < M; j++) { - C[i*M+j] = vec1[i+1] * vec2[j]; - } + T1 *C = new T1[M * M]; + for (unsigned int i = 0; i < M; i++) { + for (unsigned int j = 0; j < M; j++) { + C[i * M + j] = vec1[i + 1] * vec2[j]; } - return C; + } + return C; } -template -T matDet(T **A, unsigned int M) { - int det = 0, p, h, k, i, j; - T **temp = new T*[M]; - for (int i = 0; i < M; i++) temp[i] = new T[M]; - if(M == 1) { - return A[0][0]; - } - else if(M == 2) { - det = (A[0][0] * A[1][1] - A[0][1] * A[1][0]); - return det; - } - else { - for(p = 0; p < M; p++) { - h = 0; +template T matDet(T **A, unsigned int M) { + int det = 0, p, h, k, i, j; + T **temp = new T *[M]; + for (int i = 0; i < M; i++) + temp[i] = new T[M]; + if (M == 1) { + return A[0][0]; + } else if (M == 2) { + det = (A[0][0] * A[1][1] - A[0][1] * A[1][0]); + return det; + } else { + for (p = 0; p < M; p++) { + h = 0; + k = 0; + for (i = 1; i < M; i++) { + for (j = 0; j < M; j++) { + if (j == p) { + continue; + } + temp[h][k] = A[i][j]; + k++; + if (k == M - 1) { + h++; k = 0; - for(i = 1; i < M; i++) { - for( j = 0; j < M; j++) { - if(j == p) { - continue; - } - temp[h][k] = A[i][j]; - k++; - if(k == M-1) { - h++; - k = 0; - } - } - } - det = det + A[0][p] * pow(-1, p) * matDet(temp, M-1); + } } - return det; + } + det = det + A[0][p] * pow(-1, p) * matDet(temp, M - 1); } - delete [] temp; + return det; + } + delete[] temp; } -template -bool is_identity(T *A, unsigned int M, double tolerance) { - for (unsigned int i = 0; i < M; i++) { - for (unsigned int j = 0; j < M; j++) { - if (i==j && fabs(A[i*M+j]-1) > tolerance) return false; - if (i!=j && fabs(A[i*M+j]) > tolerance) return false; - } - } - return true; +template bool is_identity(T *A, unsigned int M, double tolerance) { + for (unsigned int i = 0; i < M; i++) { + for (unsigned int j = 0; j < M; j++) { + if (i == j && fabs(A[i * M + j] - 1) > tolerance) + return false; + if (i != j && fabs(A[i * M + j]) > tolerance) + return false; + } + } + return true; } diff --git a/include/SM_MaponiA3.hpp b/include/SM_MaponiA3.hpp index 8d8867a..c4c566b 100644 --- a/include/SM_MaponiA3.hpp +++ b/include/SM_MaponiA3.hpp @@ -1,3 +1,2 @@ -void MaponiA3(double *Slater_inv, unsigned int Dim, - unsigned int N_updates, double *Updates, - unsigned int *Updates_index); +void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, + double *Updates, unsigned int *Updates_index); diff --git a/include/SM_MaponiA3S.hpp b/include/SM_MaponiA3S.hpp index 86775fc..9085b7e 100644 --- a/include/SM_MaponiA3S.hpp +++ b/include/SM_MaponiA3S.hpp @@ -1,3 +1,2 @@ -void MaponiA3S(double *Slater_inv, unsigned int Dim, - unsigned int N_updates, double *Updates, - unsigned int *Updates_index); +void MaponiA3S(double *Slater_inv, unsigned int Dim, unsigned int N_updates, + double *Updates, unsigned int *Updates_index); diff --git a/include/SM_Standard.hpp b/include/SM_Standard.hpp index 0332ec7..5541517 100644 --- a/include/SM_Standard.hpp +++ b/include/SM_Standard.hpp @@ -1,12 +1,12 @@ // Naïve Sherman Morrison void SM1(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index); + double *Updates, unsigned int *Updates_index); // Sherman Morrison, with J. Slagel splitting // http://hdl.handle.net/10919/52966 void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index); + double *Updates, unsigned int *Updates_index); // Sherman Morrison, leaving zero denominators for later void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index); + double *Updates, unsigned int *Updates_index); diff --git a/src/SM_Helpers.cpp b/src/SM_Helpers.cpp index 185c367..4e07f3d 100644 --- a/src/SM_Helpers.cpp +++ b/src/SM_Helpers.cpp @@ -1,15 +1,15 @@ #include "SM_Helpers.hpp" void Switch(unsigned int *p, unsigned int l, unsigned int lbar) { - unsigned int tmp = p[l+1]; - p[l+1] = p[lbar]; + unsigned int tmp = p[l + 1]; + p[l + 1] = p[lbar]; p[lbar] = tmp; } -void selectLargestDenominator(unsigned int l, unsigned int N_updates, - unsigned int *Updates_index, unsigned int *p, - double ***ylk) { - unsigned int lbar = l+1, max =0; +void selectLargestDenominator(unsigned int l, unsigned int N_updates, + unsigned int *Updates_index, unsigned int *p, + double ***ylk) { + unsigned int lbar = l + 1, max = 0; unsigned int index = 0, component = 0; unsigned int tmp = 0; double breakdown = 0; @@ -17,11 +17,12 @@ void selectLargestDenominator(unsigned int l, unsigned int N_updates, index = p[j]; component = Updates_index[index - 1]; breakdown = abs(1 + ylk[l][index][component]); - #ifdef DEBUG +#ifdef DEBUG std::cout << "Inside selectLargestDenominator()" << std::endl; - std::cout << "breakdown = abs(1 + ylk[" << l << "][" << index << "][" << component << "]) = " << breakdown << std::endl; + std::cout << "breakdown = abs(1 + ylk[" << l << "][" << index << "][" + << component << "]) = " << breakdown << std::endl; std::cout << std::endl; - #endif +#endif if (breakdown > max) { max = breakdown; lbar = j; diff --git a/src/SM_MaponiA3.cpp b/src/SM_MaponiA3.cpp index 1196ed5..3495bec 100644 --- a/src/SM_MaponiA3.cpp +++ b/src/SM_MaponiA3.cpp @@ -6,19 +6,18 @@ // #define DEBUG -void MaponiA3(double *Slater_inv, unsigned int Dim, - unsigned int N_updates, double *Updates, - unsigned int *Updates_index) { +void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, + double *Updates, unsigned int *Updates_index) { /* DECLARE AND INITIALISE ARRAYS */ unsigned int k, l, i, j, component; - unsigned int *p = new unsigned int[N_updates + 1] {0}; + unsigned int *p = new unsigned int[N_updates + 1]{0}; double alpha, beta; double *Al = new double[Dim * Dim]; - double *next = new double[Dim*Dim] {0}; + double *next = new double[Dim * Dim]{0}; double *last = Slater_inv, *tmp; // Populate update-order vector @@ -31,101 +30,99 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, for (l = 0; l < N_updates; l++) { ylk[l] = new double *[N_updates + 1]; for (k = 0; k < N_updates + 1; k++) { - ylk[l][k] = new double[Dim + 1] {0}; + ylk[l][k] = new double[Dim + 1]{0}; } } - - /* START ALGORITHM */ // Calculate the {y_{0,k}} for (k = 1; k < N_updates + 1; k++) { - #ifdef DEBUG +#ifdef DEBUG std::cout << "Compute y0k: " << std::endl; std::cout << "ylk[0][" << k << "][:]"; std::cout << std::endl; - #endif +#endif for (i = 1; i < Dim + 1; i++) { for (j = 1; j < Dim + 1; j++) { - ylk[0][k][i] += Slater_inv[(i-1)*Dim + (j-1)] - * Updates[(k-1)*Dim + (j-1)]; + ylk[0][k][i] += Slater_inv[(i - 1) * Dim + (j - 1)] * + Updates[(k - 1) * Dim + (j - 1)]; } } - #ifdef DEBUG +#ifdef DEBUG showVector(ylk[0][k], Dim, ""); - #endif +#endif } // Calculate the {y_{l,k}} from the {y_{0,k}} for (l = 0; l < N_updates; l++) { - #ifdef DEBUG +#ifdef DEBUG std::cout << "In outer compute-ylk-loop: l = " << l << std::endl; std::cout << std::endl; - #endif +#endif // For given l select intermediate update with largest break-down val selectLargestDenominator(l, N_updates, Updates_index, p, ylk); // Select component and comp. bd-condition. - component = Updates_index[p[l+1] - 1]; - beta = 1 + ylk[l][p[l+1]][component]; - #ifdef DEBUG - std::cout << "p[l+1] = " << p[l+1] << std::endl; + component = Updates_index[p[l + 1] - 1]; + beta = 1 + ylk[l][p[l + 1]][component]; +#ifdef DEBUG + std::cout << "p[l+1] = " << p[l + 1] << std::endl; std::cout << "component = " << component << std::endl; - std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "] = " << beta << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l + 1] << "][" << component + << "] = " << beta << std::endl; std::cout << std::endl; - #endif +#endif if (fabs(beta) < 1e-3) { std::cerr << "Break-down occured." << std::endl; } - // Compute intermediate update to Slater_inv - #ifdef DEBUG +// Compute intermediate update to Slater_inv +#ifdef DEBUG std::cout << "Compute intermediate update to Slater_inv" << std::endl; std::cout << "component = " << component << std::endl; - std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "]" << std::endl; - std::cout << "ylk[l][p[k]][:] = ylk[" << l << "][" << p[l+1] << "][:]" << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l + 1] << "][" << component + << "]" << std::endl; + std::cout << "ylk[l][p[k]][:] = ylk[" << l << "][" << p[l + 1] << "][:]" + << std::endl; std::cout << std::endl; - #endif +#endif for (i = 0; i < Dim; i++) { for (j = 0; j < Dim; j++) { - Al[i*Dim + j] = (i == j) - (j == component-1) - * ylk[l][p[l+1]][i + 1] / beta; + Al[i * Dim + j] = + (i == j) - (j == component - 1) * ylk[l][p[l + 1]][i + 1] / beta; } } matMul(Al, last, next, Dim); tmp = next; next = last; last = tmp; - #ifdef DEBUG +#ifdef DEBUG showMatrix(last, Dim, "last"); - #endif +#endif // For given l != 0 compute the next {y_{l,k}} - for (k = l+2; k < N_updates+1; k++) { + for (k = l + 2; k < N_updates + 1; k++) { alpha = ylk[l][p[k]][component] / beta; - #ifdef DEBUG +#ifdef DEBUG std::cout << "Inside k-loop: k = " << k << std::endl; - std::cout << "ylk[" << l+1 << "][" << p[k] << "][:]" << std::endl; + std::cout << "ylk[" << l + 1 << "][" << p[k] << "][:]" << std::endl; std::cout << std::endl; - #endif +#endif for (i = 1; i < Dim + 1; i++) { - ylk[l+1][p[k]][i] = ylk[l][p[k]][i] - - alpha * ylk[l][p[l+1]][i]; + ylk[l + 1][p[k]][i] = ylk[l][p[k]][i] - alpha * ylk[l][p[l + 1]][i]; } } } - memcpy(Slater_inv, last, Dim*Dim*sizeof(double)); - - + memcpy(Slater_inv, last, Dim * Dim * sizeof(double)); /* CLEANUP MEMORY */ - + for (l = 0; l < N_updates; l++) { for (k = 0; k < N_updates + 1; k++) { delete[] ylk[l][k]; @@ -136,11 +133,9 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, } extern "C" { - void MaponiA3_f(double **linSlater_inv, unsigned int *Dim, - unsigned int *N_updates, double **linUpdates, - unsigned int **Updates_index) { - MaponiA3(*linSlater_inv, *Dim, - *N_updates, *linUpdates, - *Updates_index); - } +void MaponiA3_f(double **linSlater_inv, unsigned int *Dim, + unsigned int *N_updates, double **linUpdates, + unsigned int **Updates_index) { + MaponiA3(*linSlater_inv, *Dim, *N_updates, *linUpdates, *Updates_index); +} } diff --git a/src/SM_MaponiA3S.cpp b/src/SM_MaponiA3S.cpp index 249f018..24a50c2 100644 --- a/src/SM_MaponiA3S.cpp +++ b/src/SM_MaponiA3S.cpp @@ -6,19 +6,17 @@ #define DEBUG -void MaponiA3S(double *Slater_inv, unsigned int Dim, - unsigned int N_updates, double *Updates, - unsigned int *Updates_index) { - +void MaponiA3S(double *Slater_inv, unsigned int Dim, unsigned int N_updates, + double *Updates, unsigned int *Updates_index) { /* DECLARE AND INITIALISE ARRAYS */ unsigned int k, l, i, j, component; - unsigned int *p = new unsigned int[N_updates + 1] {0}; + unsigned int *p = new unsigned int[N_updates + 1]{0}; double alpha, beta; double *Al = new double[Dim * Dim]; - double *next = new double[Dim*Dim] {0}; + double *next = new double[Dim * Dim]{0}; double *last = Slater_inv, *tmp; // Populate update-order vector @@ -31,101 +29,99 @@ void MaponiA3S(double *Slater_inv, unsigned int Dim, for (l = 0; l < N_updates; l++) { ylk[l] = new double *[N_updates + 1]; for (k = 0; k < N_updates + 1; k++) { - ylk[l][k] = new double[Dim + 1] {0}; + ylk[l][k] = new double[Dim + 1]{0}; } } - - /* START ALGORITHM */ // Calculate the {y_{0,k}} for (k = 1; k < N_updates + 1; k++) { - #ifdef DEBUG +#ifdef DEBUG std::cout << "Compute y0k: " << std::endl; std::cout << "ylk[0][" << k << "][:]"; std::cout << std::endl; - #endif +#endif for (i = 1; i < Dim + 1; i++) { for (j = 1; j < Dim + 1; j++) { - ylk[0][k][i] += Slater_inv[(i-1)*Dim + (j-1)] - * Updates[(k-1)*Dim + (j-1)]; + ylk[0][k][i] += Slater_inv[(i - 1) * Dim + (j - 1)] * + Updates[(k - 1) * Dim + (j - 1)]; } } - #ifdef DEBUG +#ifdef DEBUG showVector(ylk[0][k], Dim, ""); - #endif +#endif } // Calculate the {y_{l,k}} from the {y_{0,k}} for (l = 0; l < N_updates; l++) { - #ifdef DEBUG +#ifdef DEBUG std::cout << "In outer compute-ylk-loop: l = " << l << std::endl; std::cout << std::endl; - #endif +#endif // For given l select intermediate update with largest break-down val selectLargestDenominator(l, N_updates, Updates_index, p, ylk); // Select component and comp. bd-condition. - component = Updates_index[p[l+1] - 1]; - beta = 1 + ylk[l][p[l+1]][component]; - #ifdef DEBUG - std::cout << "p[l+1] = " << p[l+1] << std::endl; + component = Updates_index[p[l + 1] - 1]; + beta = 1 + ylk[l][p[l + 1]][component]; +#ifdef DEBUG + std::cout << "p[l+1] = " << p[l + 1] << std::endl; std::cout << "component = " << component << std::endl; - std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "] = " << beta << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l + 1] << "][" << component + << "] = " << beta << std::endl; std::cout << std::endl; - #endif +#endif if (fabs(beta) < 1e-3) { std::cerr << "Break-down occured." << std::endl; } - // Compute intermediate update to Slater_inv - #ifdef DEBUG +// Compute intermediate update to Slater_inv +#ifdef DEBUG std::cout << "Compute intermediate update to Slater_inv" << std::endl; std::cout << "component = " << component << std::endl; - std::cout << "beta = 1 + ylk[" << l << "][" << p[l+1] << "][" << component << "]" << std::endl; - std::cout << "ylk[l][p[k]][:] = ylk[" << l << "][" << p[l+1] << "][:]" << std::endl; + std::cout << "beta = 1 + ylk[" << l << "][" << p[l + 1] << "][" << component + << "]" << std::endl; + std::cout << "ylk[l][p[k]][:] = ylk[" << l << "][" << p[l + 1] << "][:]" + << std::endl; std::cout << std::endl; - #endif +#endif for (i = 0; i < Dim; i++) { for (j = 0; j < Dim; j++) { - Al[i*Dim + j] = (i == j) - (j == component-1) - * ylk[l][p[l+1]][i + 1] / beta; + Al[i * Dim + j] = + (i == j) - (j == component - 1) * ylk[l][p[l + 1]][i + 1] / beta; } } matMul(Al, last, next, Dim); tmp = next; next = last; last = tmp; - #ifdef DEBUG +#ifdef DEBUG showMatrix(last, Dim, "last"); - #endif +#endif // For given l != 0 compute the next {y_{l,k}} - for (k = l+2; k < N_updates+1; k++) { + for (k = l + 2; k < N_updates + 1; k++) { alpha = ylk[l][p[k]][component] / beta; - #ifdef DEBUG +#ifdef DEBUG std::cout << "Inside k-loop: k = " << k << std::endl; - std::cout << "ylk[" << l+1 << "][" << p[k] << "][:]" << std::endl; + std::cout << "ylk[" << l + 1 << "][" << p[k] << "][:]" << std::endl; std::cout << std::endl; - #endif +#endif for (i = 1; i < Dim + 1; i++) { - ylk[l+1][p[k]][i] = ylk[l][p[k]][i] - - alpha * ylk[l][p[l+1]][i]; + ylk[l + 1][p[k]][i] = ylk[l][p[k]][i] - alpha * ylk[l][p[l + 1]][i]; } } } - memcpy(Slater_inv, last, Dim*Dim*sizeof(double)); - - + memcpy(Slater_inv, last, Dim * Dim * sizeof(double)); /* CLEANUP MEMORY */ - + for (l = 0; l < N_updates; l++) { for (k = 0; k < N_updates + 1; k++) { delete[] ylk[l][k]; @@ -136,11 +132,9 @@ void MaponiA3S(double *Slater_inv, unsigned int Dim, } extern "C" { - void MaponiA3S_f(double **linSlater_inv, unsigned int *Dim, - unsigned int *N_updates, double **linUpdates, - unsigned int **Updates_index) { - MaponiA3S(*linSlater_inv, *Dim, - *N_updates, *linUpdates, - *Updates_index); - } +void MaponiA3S_f(double **linSlater_inv, unsigned int *Dim, + unsigned int *N_updates, double **linUpdates, + unsigned int **Updates_index) { + MaponiA3S(*linSlater_inv, *Dim, *N_updates, *linUpdates, *Updates_index); +} } diff --git a/src/SM_Standard.cpp b/src/SM_Standard.cpp index 2354450..b3294ec 100644 --- a/src/SM_Standard.cpp +++ b/src/SM_Standard.cpp @@ -11,46 +11,38 @@ double threshold() { // Naïve Sherman Morrison void SM1(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index) -{ - + double *Updates, unsigned int *Updates_index) { std::cerr << "Called SM1 with " << N_updates << " updates" << std::endl; double C[Dim]; double D[Dim]; unsigned int l = 0; // For each update - while (l < N_updates) - { + while (l < N_updates) { // C = A^{-1} x U_l - for (unsigned int i = 0; i < Dim; i++) - { + for (unsigned int i = 0; i < Dim; i++) { C[i] = 0; - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { C[i] += Slater_inv[i * Dim + j] * Updates[l * Dim + j]; } } // Denominator double den = 1 + C[Updates_index[l] - 1]; - if (fabs(den) < threshold()) - { - std::cerr << "Breakdown condition triggered at " << Updates_index[l] << std::endl; + if (fabs(den) < threshold()) { + std::cerr << "Breakdown condition triggered at " << Updates_index[l] + << std::endl; } double iden = 1 / den; // D = v^T x A^{-1} - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { D[j] = Slater_inv[(Updates_index[l] - 1) * Dim + j]; } // A^{-1} = A^{-1} - C x D / den - for (unsigned int i = 0; i < Dim; i++) - { - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int i = 0; i < Dim; i++) { + for (unsigned int j = 0; j < Dim; j++) { double update = C[i] * D[j] * iden; Slater_inv[i * Dim + j] -= update; } @@ -63,9 +55,7 @@ void SM1(double *Slater_inv, unsigned int Dim, unsigned int N_updates, // Sherman Morrison, with J. Slagel splitting // http://hdl.handle.net/10919/52966 void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index) -{ - + double *Updates, unsigned int *Updates_index) { std::cerr << "Called SM2 with updates " << N_updates << std::endl; double C[Dim]; double D[Dim]; @@ -76,27 +66,23 @@ void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, unsigned int l = 0; // For each update - while (l < N_updates) - { + while (l < N_updates) { // C = A^{-1} x U_l - for (unsigned int i = 0; i < Dim; i++) - { + for (unsigned int i = 0; i < Dim; i++) { C[i] = 0; - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { C[i] += Slater_inv[i * Dim + j] * Updates[l * Dim + j]; } } // Denominator double den = 1 + C[Updates_index[l] - 1]; - if (fabs(den) < threshold()) - { - std::cerr << "Breakdown condition triggered at " << Updates_index[l] << std::endl; + if (fabs(den) < threshold()) { + std::cerr << "Breakdown condition triggered at " << Updates_index[l] + << std::endl; // U_l = U_l / 2 (do the split) - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { later_updates[later * Dim + j] = Updates[l * Dim + j] / 2.0; C[j] /= 2.0; } @@ -108,16 +94,13 @@ void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, double iden = 1 / den; // D = v^T x A^{-1} - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { D[j] = Slater_inv[(Updates_index[l] - 1) * Dim + j]; } // A^{-1} = A^{-1} - C x D / den - for (unsigned int i = 0; i < Dim; i++) - { - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int i = 0; i < Dim; i++) { + for (unsigned int j = 0; j < Dim; j++) { double update = C[i] * D[j] * iden; Slater_inv[i * Dim + j] -= update; } @@ -125,17 +108,14 @@ void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, l += 1; } - if (later > 0) - { + if (later > 0) { SM2(Slater_inv, Dim, later, later_updates, later_index); } } // Sherman Morrison, leaving zero denominators for later void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index) -{ - + double *Updates, unsigned int *Updates_index) { std::cerr << "Called SM3 with updates " << N_updates << std::endl; double C[Dim]; double D[Dim]; @@ -146,26 +126,22 @@ void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, unsigned int l = 0; // For each update - while (l < N_updates) - { + while (l < N_updates) { // C = A^{-1} x U_l - for (unsigned int i = 0; i < Dim; i++) - { + for (unsigned int i = 0; i < Dim; i++) { C[i] = 0; - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { C[i] += Slater_inv[i * Dim + j] * Updates[l * Dim + j]; } } // Denominator double den = 1 + C[Updates_index[l] - 1]; - if (fabs(den) < threshold()) - { - std::cerr << "Breakdown condition triggered at " << Updates_index[l] << std::endl; + if (fabs(den) < threshold()) { + std::cerr << "Breakdown condition triggered at " << Updates_index[l] + << std::endl; - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { later_updates[later * Dim + j] = Updates[l * Dim + j]; } later_index[later] = Updates_index[l]; @@ -176,16 +152,13 @@ void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, double iden = 1 / den; // D = v^T x A^{-1} - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int j = 0; j < Dim; j++) { D[j] = Slater_inv[(Updates_index[l] - 1) * Dim + j]; } // A^{-1} = A^{-1} - C x D / den - for (unsigned int i = 0; i < Dim; i++) - { - for (unsigned int j = 0; j < Dim; j++) - { + for (unsigned int i = 0; i < Dim; i++) { + for (unsigned int j = 0; j < Dim; j++) { double update = C[i] * D[j] * iden; Slater_inv[i * Dim + j] -= update; } @@ -193,8 +166,7 @@ void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, l += 1; } - if (later > 0) - { + if (later > 0) { SM3(Slater_inv, Dim, later, later_updates, later_index); } } From b863d40c0506eb88b281a4727bac08909b16183e Mon Sep 17 00:00:00 2001 From: Francois Coppens Date: Thu, 15 Apr 2021 18:13:26 +0200 Subject: [PATCH 4/4] - Setting break-down threshold trough smvars.sh - Fixed SM3 to escape infinite update-loop --- Makefile | 2 +- include/SM_Helpers.hpp | 7 +++++++ smvars.sh | 9 ++++++++- src/SM_Helpers.cpp | 9 +++++++++ src/SM_MaponiA3.cpp | 2 +- src/SM_MaponiA3S.cpp | 19 ++++++++++++++++--- src/SM_Standard.cpp | 20 ++++++++++---------- 7 files changed, 52 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 9fb8aca..fc39771 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ else $(error No valid compiler environment set in $$ENV. \ First run: $$ source smvars.sh {intel | llvm | gnu}) endif -CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) -fPIC +CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) -fPIC $(THRESHOLD) FFLAGS = $(CXXFLAGS) H5CXX = h5c++ H5CXXFLAGS = $(CXXFLAGS) diff --git a/include/SM_Helpers.hpp b/include/SM_Helpers.hpp index e8c308e..ce86d02 100644 --- a/include/SM_Helpers.hpp +++ b/include/SM_Helpers.hpp @@ -5,6 +5,13 @@ #include #include +// #define DEBUG + +#ifndef THRESHOLD +#define THRESHOLD 1e-3 +#endif +double threshold(); + void Switch(unsigned int *p, unsigned int l, unsigned int lbar); void selectLargestDenominator(unsigned int l, unsigned int N_updates, diff --git a/smvars.sh b/smvars.sh index 5807a32..caf11d4 100644 --- a/smvars.sh +++ b/smvars.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash - +unset THRESHOLD ENV=$1 +THRESHOLD=$2 ## Set Sherman-Morrison root dir PWD=$(pwd) @@ -54,3 +55,9 @@ then export PATH=$SMROOT/bin:$PATH export SMVARS=true fi + +## If a threshold is provided, export compiler flag +if [[ $# -gt 1 ]] +then + export THRESHOLD="-DTHRESHOLD=$THRESHOLD" +fi diff --git a/src/SM_Helpers.cpp b/src/SM_Helpers.cpp index 4e07f3d..38445de 100644 --- a/src/SM_Helpers.cpp +++ b/src/SM_Helpers.cpp @@ -1,5 +1,14 @@ #include "SM_Helpers.hpp" +// Set common break-down threshold +double threshold() { + const double threshold = THRESHOLD; +#ifdef DEBUG + std::cerr << "Break-down threshold set to: " << threshold << std::endl; +#endif + return threshold; +} + void Switch(unsigned int *p, unsigned int l, unsigned int lbar) { unsigned int tmp = p[l + 1]; p[l + 1] = p[lbar]; diff --git a/src/SM_MaponiA3.cpp b/src/SM_MaponiA3.cpp index 3495bec..8d62e42 100644 --- a/src/SM_MaponiA3.cpp +++ b/src/SM_MaponiA3.cpp @@ -76,7 +76,7 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, << "] = " << beta << std::endl; std::cout << std::endl; #endif - if (fabs(beta) < 1e-3) { + if (fabs(beta) < threshold()) { std::cerr << "Break-down occured." << std::endl; } diff --git a/src/SM_MaponiA3S.cpp b/src/SM_MaponiA3S.cpp index 24a50c2..66efd37 100644 --- a/src/SM_MaponiA3S.cpp +++ b/src/SM_MaponiA3S.cpp @@ -4,7 +4,7 @@ #include "SM_MaponiA3S.hpp" #include "SM_Helpers.hpp" -#define DEBUG +// #define DEBUG void MaponiA3S(double *Slater_inv, unsigned int Dim, unsigned int N_updates, double *Updates, unsigned int *Updates_index) { @@ -75,8 +75,21 @@ void MaponiA3S(double *Slater_inv, unsigned int Dim, unsigned int N_updates, << "] = " << beta << std::endl; std::cout << std::endl; #endif - if (fabs(beta) < 1e-3) { - std::cerr << "Break-down occured." << std::endl; + if (fabs(beta) < threshold()) { + std::cerr << "Breakdown condition triggered at " << component + << std::endl; + + // for (unsigned int i = 0; i < Dim; i++) { + // later_updates[later * Dim + i] = Updates[l * Dim + i] / 2.0; + // ylk[l][p[l + 1]][i] /= 2.0; + // } + // later_index[later] = Updates_index[l]; + // later++; + + // den = 1 + C[Updates_index[l] - 1]; + // } + // double iden = 1 / den; + } // Compute intermediate update to Slater_inv diff --git a/src/SM_Standard.cpp b/src/SM_Standard.cpp index b3294ec..2591b07 100644 --- a/src/SM_Standard.cpp +++ b/src/SM_Standard.cpp @@ -3,12 +3,6 @@ #include "SM_Standard.hpp" #include "SM_Helpers.hpp" -// Set common break-down threshold -double threshold() { - double const threshold = 1e-3; - return threshold; -} - // Naïve Sherman Morrison void SM1(double *Slater_inv, unsigned int Dim, unsigned int N_updates, double *Updates, unsigned int *Updates_index) { @@ -82,9 +76,9 @@ void SM2(double *Slater_inv, unsigned int Dim, unsigned int N_updates, << std::endl; // U_l = U_l / 2 (do the split) - for (unsigned int j = 0; j < Dim; j++) { - later_updates[later * Dim + j] = Updates[l * Dim + j] / 2.0; - C[j] /= 2.0; + for (unsigned int i = 0; i < Dim; i++) { + later_updates[later * Dim + i] = Updates[l * Dim + i] / 2.0; + C[i] /= 2.0; } later_index[later] = Updates_index[l]; later++; @@ -166,7 +160,13 @@ void SM3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, l += 1; } - if (later > 0) { + // If all the updates have failed, exit early with an error + if (later == N_updates) { + std::cerr << "SM3 cannot invert this matrix" << std::endl; + return; + } + // If some have failed, make a recursive call + else if (later > 0) { SM3(Slater_inv, Dim, later, later_updates, later_index); } }